Skip to content

Commit

Permalink
Bump whatwg-node to fix HTTP/2 stream issue (#3808)
Browse files Browse the repository at this point in the history
* Bump whatwg-node to fix HTTP/2 stream issue

* chore(dependencies): updated changesets for modified dependencies

* Fix lint

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
  • Loading branch information
ardatan and github-actions[bot] authored Feb 24, 2025
1 parent 9bd8c3c commit fbf328c
Show file tree
Hide file tree
Showing 4 changed files with 207 additions and 53 deletions.
6 changes: 6 additions & 0 deletions .changeset/graphql-yoga-3808-dependencies.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
"graphql-yoga": patch
---
dependencies updates:
- Updated dependency [`@whatwg-node/fetch@^0.10.5` ↗︎](https://www.npmjs.com/package/@whatwg-node/fetch/v/0.10.5) (from `^0.10.1`, in `dependencies`)
- Updated dependency [`@whatwg-node/server@^0.9.69` ↗︎](https://www.npmjs.com/package/@whatwg-node/server/v/0.9.69) (from `^0.9.64`, in `dependencies`)
107 changes: 107 additions & 0 deletions packages/graphql-yoga/__integration-tests__/http2.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
import {
ClientHttp2Session,
connect,
constants,
createSecureServer,
Http2SecureServer,
} from 'node:http2';
import { AddressInfo } from 'node:net';
import { createSchema, createYoga } from 'graphql-yoga';
import type { CertificateCreationResult } from 'pem';

describe('HTTP2', () => {
let client: ClientHttp2Session;
let server: Http2SecureServer;
let keys: CertificateCreationResult;
beforeAll(async () => {
const { createCertificate } = await import('pem');
keys = await new Promise<CertificateCreationResult>((resolve, reject) => {
createCertificate(
{
selfSigned: true,
days: 1,
},
(err, result) => (err ? reject(err) : resolve(result)),
);
});
const yoga = createYoga({
schema: createSchema({
typeDefs: /* GraphQL */ `
type Query {
hello: String!
}
`,
resolvers: {
Query: {
hello: () => 'world',
},
},
}),
});

// Create a secure HTTP/2 server
server = createSecureServer(
{
allowHTTP1: false,
key: keys.serviceKey,
cert: keys.certificate,
},
yoga,
);

await new Promise<void>(resolve => server.listen(0, resolve));

const serverAddress = server.address() as AddressInfo;
client = await new Promise<ClientHttp2Session>((resolve, reject) => {
const session = connect(
`https://localhost:${serverAddress.port}`,
{
ca: keys.certificate,
},
() => {
resolve(session);
},
);
session.on('error', reject);
});
});
afterAll(async () => {
if (client) {
await new Promise<void>(resolve => client.close(resolve));
}
if (server) {
await new Promise<void>((resolve, reject) =>
server.close(err => (err ? reject(err) : resolve())),
);
}
});
it('works', done => {
const req = client.request({
[constants.HTTP2_HEADER_METHOD]: 'POST',
[constants.HTTP2_HEADER_PATH]: '/graphql',
[constants.HTTP2_HEADER_CONTENT_TYPE]: 'application/json',
});
let data: string = '';
req.on('response', headers => {
expect(headers[':status']).toBe(200);
});
req.setEncoding('utf8');
req.on('data', chunk => {
data += Buffer.from(chunk).toString('utf-8');
});
req.on('end', () => {
expect(JSON.parse(data)).toEqual({ data: { hello: 'world' } });
done();
});
req.write(
JSON.stringify({
query: /* GraphQL */ `
query {
hello
}
`,
}),
);
req.end();
});
});
6 changes: 4 additions & 2 deletions packages/graphql-yoga/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -55,8 +55,8 @@
"@graphql-tools/utils": "^10.6.2",
"@graphql-yoga/logger": "workspace:^",
"@graphql-yoga/subscription": "workspace:^",
"@whatwg-node/fetch": "^0.10.1",
"@whatwg-node/server": "^0.9.64",
"@whatwg-node/fetch": "^0.10.5",
"@whatwg-node/server": "^0.9.69",
"dset": "^3.1.4",
"lru-cache": "^10.0.0",
"tslib": "^2.8.1"
Expand All @@ -70,13 +70,15 @@
"@n1ru4l/in-memory-live-query-store": "0.10.0",
"@repeaterjs/repeater": "^3.0.4",
"@types/node": "22.13.5",
"@types/pem": "1.14.4",
"globby": "^14.0.2",
"graphql": "16.10.0",
"graphql-http": "^1.18.0",
"graphql-scalars": "1.24.1",
"graphql-sse": "2.5.4",
"html-minifier-terser": "7.2.0",
"json-bigint-patch": "0.0.8",
"pem": "1.14.8",
"typescript": "5.7.3"
},
"publishConfig": {
Expand Down
Loading

0 comments on commit fbf328c

Please sign in to comment.