Skip to content

Commit 367f266

Browse files
committed
[jwt] fix typo in option name
1 parent 7eddf1c commit 367f266

File tree

3 files changed

+38
-24
lines changed

3 files changed

+38
-24
lines changed

.changeset/slow-ads-dress.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@graphql-yoga/plugin-jwt': patch
3+
---
4+
5+
Fix typo of the option `singingKeyProviders` => `signingKeyProviders`.

packages/plugins/jwt/src/__tests__/jwt.spec.ts

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ I3OrgFkoqk03cpX4AL2GYC2ejytAqboL6pFTfmTgg2UtvKIeaTyF
4545
describe('jwt plugin', () => {
4646
test('incoming http request is reject when auth token is not present', async () => {
4747
const test = createTestServer({
48-
singingKeyProviders: [createInlineSigningKeyProvider('topsecret')],
48+
signingKeyProviders: [createInlineSigningKeyProvider('topsecret')],
4949
});
5050
const response = await test.queryWithoutAuth();
5151
expect(response.status).toBe(401);
@@ -62,7 +62,7 @@ describe('jwt plugin', () => {
6262

6363
test('should allow to continue if reject.missingToken is set to false', async () => {
6464
const test = createTestServer({
65-
singingKeyProviders: [createInlineSigningKeyProvider('topsecret')],
65+
signingKeyProviders: [createInlineSigningKeyProvider('topsecret')],
6666
reject: {
6767
missingToken: false,
6868
invalidToken: true,
@@ -75,7 +75,7 @@ describe('jwt plugin', () => {
7575
test('any prefix is supported when strict prefix validation is not configured', async () => {
7676
const secret = 'topsecret';
7777
const test = createTestServer({
78-
singingKeyProviders: [createInlineSigningKeyProvider(secret)],
78+
signingKeyProviders: [createInlineSigningKeyProvider(secret)],
7979
tokenLookupLocations: [
8080
extractFromHeader({
8181
name: 'Authorization',
@@ -89,7 +89,7 @@ describe('jwt plugin', () => {
8989

9090
test('incoming http has a token but prefix does not match or missing', async () => {
9191
const test = createTestServer({
92-
singingKeyProviders: [createInlineSigningKeyProvider('topsecret')],
92+
signingKeyProviders: [createInlineSigningKeyProvider('topsecret')],
9393
});
9494
// does not match prefix
9595
let response = await test.queryWithAuth('Basic 123');
@@ -120,7 +120,7 @@ describe('jwt plugin', () => {
120120

121121
test('token provided but jwt token is not valid for decoding', async () => {
122122
const test = createTestServer({
123-
singingKeyProviders: [createInlineSigningKeyProvider('topsecret')],
123+
signingKeyProviders: [createInlineSigningKeyProvider('topsecret')],
124124
});
125125
const response = await test.queryWithAuth('Bearer BadJwt');
126126
expect(response.status).toBe(400);
@@ -137,7 +137,7 @@ describe('jwt plugin', () => {
137137

138138
test('invalid token can be accepted when reject.invalidToken=false is set', async () => {
139139
const test = createTestServer({
140-
singingKeyProviders: [createInlineSigningKeyProvider('topsecret')],
140+
signingKeyProviders: [createInlineSigningKeyProvider('topsecret')],
141141
reject: {
142142
invalidToken: false,
143143
},
@@ -149,7 +149,7 @@ describe('jwt plugin', () => {
149149
it('should not allow non matching issuer', async () => {
150150
const secret = 'topsecret';
151151
const server = createTestServer({
152-
singingKeyProviders: [createInlineSigningKeyProvider(secret)],
152+
signingKeyProviders: [createInlineSigningKeyProvider(secret)],
153153
tokenVerification: {
154154
issuer: ['http://yoga'],
155155
},
@@ -168,7 +168,7 @@ describe('jwt plugin', () => {
168168
it('should allow matching issuer', async () => {
169169
const secret = 'topsecret';
170170
const server = createTestServer({
171-
singingKeyProviders: [createInlineSigningKeyProvider(secret)],
171+
signingKeyProviders: [createInlineSigningKeyProvider(secret)],
172172
tokenVerification: {
173173
issuer: ['http://yoga'],
174174
},
@@ -182,7 +182,7 @@ describe('jwt plugin', () => {
182182
it('should not allow non matching audience', async () => {
183183
const secret = 'topsecret';
184184
const server = createTestServer({
185-
singingKeyProviders: [createInlineSigningKeyProvider(secret)],
185+
signingKeyProviders: [createInlineSigningKeyProvider(secret)],
186186
tokenVerification: {
187187
audience: 'my.app',
188188
},
@@ -203,7 +203,7 @@ describe('jwt plugin', () => {
203203
it('should allow matching audience', async () => {
204204
const secret = 'topsecret';
205205
const server = createTestServer({
206-
singingKeyProviders: [createInlineSigningKeyProvider(secret)],
206+
signingKeyProviders: [createInlineSigningKeyProvider(secret)],
207207
tokenVerification: {
208208
audience: 'my.app',
209209
},
@@ -234,7 +234,7 @@ describe('jwt plugin', () => {
234234

235235
try {
236236
const server = createTestServer({
237-
singingKeyProviders: [
237+
signingKeyProviders: [
238238
createRemoteJwksSigningKeyProvider({
239239
jwksUri: `http://localhost:${(jwksServer.address() as any).port}`,
240240
}),
@@ -259,7 +259,7 @@ describe('jwt plugin', () => {
259259
it('should not accept token without algorithm', async () => {
260260
const secret = 'topsecret';
261261
const server = createTestServer({
262-
singingKeyProviders: [createInlineSigningKeyProvider(secret)],
262+
signingKeyProviders: [createInlineSigningKeyProvider(secret)],
263263
});
264264

265265
const response = await server.queryWithAuth(buildJWTWithoutAlg());
@@ -276,7 +276,7 @@ describe('jwt plugin', () => {
276276
test('valid token is injected to the GraphQL context', async () => {
277277
const secret = 'topsecret';
278278
const test = createTestServer({
279-
singingKeyProviders: [createInlineSigningKeyProvider(secret)],
279+
signingKeyProviders: [createInlineSigningKeyProvider(secret)],
280280
});
281281
const token = buildJWT({ sub: '123', scopes: ['users.read'] }, { key: secret });
282282
const response = await test.queryWithAuth(token);
@@ -302,7 +302,7 @@ describe('jwt plugin', () => {
302302
test('valid token is injected to the GraphQL context (custom field)', async () => {
303303
const secret = 'topsecret';
304304
const test = createTestServer({
305-
singingKeyProviders: [createInlineSigningKeyProvider(secret)],
305+
signingKeyProviders: [createInlineSigningKeyProvider(secret)],
306306
extendContext: 'my_jwt',
307307
});
308308
const token = buildJWT({ sub: '123', scopes: ['users.read'] }, { key: secret });
@@ -329,7 +329,7 @@ describe('jwt plugin', () => {
329329
test('auth is passing when token is valid (HS256)', async () => {
330330
const secret = 'topsecret';
331331
const test = createTestServer({
332-
singingKeyProviders: [createInlineSigningKeyProvider(secret)],
332+
signingKeyProviders: [createInlineSigningKeyProvider(secret)],
333333
});
334334
const token = buildJWT({ sub: '123' }, { key: secret });
335335
const response = await test.queryWithAuth(token);
@@ -353,7 +353,7 @@ describe('jwt plugin', () => {
353353

354354
test('auth is passing when token is valid (RS256)', async () => {
355355
const test = createTestServer({
356-
singingKeyProviders: [createInlineSigningKeyProvider(JWKS_RSA512_PRIVATE_PEM)],
356+
signingKeyProviders: [createInlineSigningKeyProvider(JWKS_RSA512_PRIVATE_PEM)],
357357
});
358358
const token = buildJWT({ sub: '123' }, { key: JWKS_RSA512_PRIVATE_PEM, algorithm: 'RS256' });
359359
const response = await test.queryWithAuth(token);
@@ -397,7 +397,7 @@ describe('jwt plugin', () => {
397397

398398
try {
399399
const test = createTestServer({
400-
singingKeyProviders: [
400+
signingKeyProviders: [
401401
createRemoteJwksSigningKeyProvider({
402402
jwksUri: `http://localhost:${(jwksServer.address() as any).port}`,
403403
}),
@@ -438,7 +438,7 @@ describe('jwt plugin', () => {
438438

439439
try {
440440
const test = createTestServer({
441-
singingKeyProviders: [
441+
signingKeyProviders: [
442442
// Remote, invalid
443443
createRemoteJwksSigningKeyProvider({
444444
jwksUri: `http://localhost:${(jwksServer.address() as any).port}`,
@@ -476,7 +476,7 @@ describe('jwt plugin', () => {
476476
test('should throw when lookup is configured for cookie but no cookie store available', async () => {
477477
const secret = 'topsecret';
478478
const test = createTestServer({
479-
singingKeyProviders: [createInlineSigningKeyProvider(secret)],
479+
signingKeyProviders: [createInlineSigningKeyProvider(secret)],
480480
tokenLookupLocations: [extractFromCookie({ name: 'auth' })],
481481
});
482482
const token = buildJWT({ sub: '123' }, { key: secret });
@@ -495,7 +495,7 @@ describe('jwt plugin', () => {
495495
const secret = 'topsecret';
496496
const test = createTestServer(
497497
{
498-
singingKeyProviders: [createInlineSigningKeyProvider(secret)],
498+
signingKeyProviders: [createInlineSigningKeyProvider(secret)],
499499
tokenLookupLocations: [extractFromCookie({ name: 'auth' })],
500500
},
501501
[useCookies<any>()],
@@ -508,7 +508,7 @@ describe('jwt plugin', () => {
508508
test('custom getToken functiFailed to verify authentication token. Verifon', async () => {
509509
const secret = 'topsecret';
510510
const test = createTestServer({
511-
singingKeyProviders: [createInlineSigningKeyProvider(secret)],
511+
signingKeyProviders: [createInlineSigningKeyProvider(secret)],
512512
tokenLookupLocations: [
513513
async payload => {
514514
expect(payload.request).toBeDefined();
@@ -539,7 +539,7 @@ describe('jwt plugin', () => {
539539
const secret = 'topsecret';
540540
const test = createTestServer(
541541
{
542-
singingKeyProviders: [createInlineSigningKeyProvider(secret)],
542+
signingKeyProviders: [createInlineSigningKeyProvider(secret)],
543543
tokenLookupLocations: [
544544
extractFromHeader({
545545
name: 'Authorization',

packages/plugins/jwt/src/config.ts

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,10 @@ export type JwtPluginOptions = {
2323
* If the first provider fails to fetch the keys, the plugin will try the next provider in the list.
2424
*
2525
*/
26+
signingKeyProviders: AtleastOneItem<GetSigningKeyFunction>;
27+
/**
28+
* @deprecated: please use `signingKeyProviders` instead.
29+
*/
2630
singingKeyProviders: AtleastOneItem<GetSigningKeyFunction>;
2731
/**
2832
* List of locations to look for the token in the incoming request.
@@ -77,7 +81,12 @@ export type JwtPluginOptions = {
7781
};
7882

7983
export function normalizeConfig(input: JwtPluginOptions) {
80-
if (input.singingKeyProviders.length === 0) {
84+
// TODO: remove this on next major version.
85+
if (input.singingKeyProviders) {
86+
input.signingKeyProviders = input.singingKeyProviders;
87+
}
88+
89+
if (input.signingKeyProviders.length === 0) {
8190
throw new TypeError(
8291
'You must provide at least one signing key provider. Please verify your `singingKeyProviders` configuration.',
8392
);
@@ -102,7 +111,7 @@ export function normalizeConfig(input: JwtPluginOptions) {
102111
}
103112

104113
return {
105-
singingKeyProviders: input.singingKeyProviders,
114+
singingKeyProviders: input.signingKeyProviders,
106115
tokenLookupLocations,
107116
tokenVerification: input.tokenVerification ?? {
108117
algorithms: ['RS256', 'HS256'],

0 commit comments

Comments
 (0)