diff --git a/.changeset/dirty-tools-yell.md b/.changeset/dirty-tools-yell.md new file mode 100644 index 000000000..6628c6a16 --- /dev/null +++ b/.changeset/dirty-tools-yell.md @@ -0,0 +1,5 @@ +--- +'@graphql-hive/client': minor +--- + +Use new CDN endpoint for retrieving the service list diff --git a/packages/libraries/client/src/gateways.ts b/packages/libraries/client/src/gateways.ts index a4c454ed1..ec5912e05 100644 --- a/packages/libraries/client/src/gateways.ts +++ b/packages/libraries/client/src/gateways.ts @@ -30,7 +30,7 @@ function createFetcher({ endpoint, key }: SchemaFetcherOptions & ServicesFetc } return axios - .get(endpoint + '/schema', { + .get(endpoint + '/services', { headers, responseType: 'json', }) diff --git a/packages/libraries/client/tests/gateways.spec.ts b/packages/libraries/client/tests/gateways.spec.ts index 2de933f64..791000891 100644 --- a/packages/libraries/client/tests/gateways.spec.ts +++ b/packages/libraries/client/tests/gateways.spec.ts @@ -19,12 +19,12 @@ test('createServicesFetcher without ETag', async () => { }; const key = 'secret-key'; nock('http://localhost') - .get('/schema') + .get('/services') .once() .matchHeader('X-Hive-CDN-Key', key) .matchHeader('accept', 'application/json') .reply(() => [200, [schema]]) - .get('/schema') + .get('/services') .once() .matchHeader('X-Hive-CDN-Key', key) .matchHeader('accept', 'application/json') @@ -65,20 +65,20 @@ test('createServicesFetcher with ETag', async () => { }; const key = 'secret-key'; nock('http://localhost') - .get('/schema') + .get('/services') .once() .matchHeader('X-Hive-CDN-Key', key) .matchHeader('accept', 'application/json') .reply(200, [schema], { ETag: 'first', }) - .get('/schema') + .get('/services') .once() .matchHeader('X-Hive-CDN-Key', key) .matchHeader('accept', 'application/json') .matchHeader('If-None-Match', 'first') .reply(304) - .get('/schema') + .get('/services') .once() .matchHeader('X-Hive-CDN-Key', key) .matchHeader('accept', 'application/json') @@ -130,12 +130,12 @@ test('createSchemaFetcher without ETag (older versions)', async () => { }; const key = 'secret-key'; nock('http://localhost') - .get('/schema') + .get('/services') .once() .matchHeader('X-Hive-CDN-Key', key) .matchHeader('accept', 'application/json') .reply(() => [200, schema]) - .get('/schema') + .get('/services') .once() .matchHeader('X-Hive-CDN-Key', key) .matchHeader('accept', 'application/json') @@ -174,20 +174,20 @@ test('createSchemaFetcher with ETag', async () => { }; const key = 'secret-key'; nock('http://localhost') - .get('/schema') + .get('/services') .once() .matchHeader('X-Hive-CDN-Key', key) .matchHeader('accept', 'application/json') .reply(200, schema, { ETag: 'first', }) - .get('/schema') + .get('/services') .once() .matchHeader('X-Hive-CDN-Key', key) .matchHeader('accept', 'application/json') .matchHeader('If-None-Match', 'first') .reply(304) - .get('/schema') + .get('/services') .once() .matchHeader('X-Hive-CDN-Key', key) .matchHeader('accept', 'application/json') diff --git a/packages/services/cdn-worker/src/artifact-handler.ts b/packages/services/cdn-worker/src/artifact-handler.ts index de6c9a268..11cf50db6 100644 --- a/packages/services/cdn-worker/src/artifact-handler.ts +++ b/packages/services/cdn-worker/src/artifact-handler.ts @@ -33,6 +33,7 @@ const ParamsModel = zod.object({ zod.literal('sdl.graphql'), zod.literal('sdl.graphqls'), zod.literal('services'), + zod.literal('schema'), zod.literal('supergraph'), ]), }); @@ -72,6 +73,16 @@ export const createArtifactRequestHandler = (deps: ArtifactRequestHandler) => { const params = parseResult.data; + /** Legacy handling for old client SDK versions. */ + if (params.artifactType === 'schema') { + return new Response('Found.', { + status: 301, + headers: { + Location: request.url.replace('/schema', '/services'), + }, + }); + } + const maybeResponse = await authenticate(request, params.targetId); if (maybeResponse !== null) {