@pagopa/io-react-native-jwt 0.5.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/jwt/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,2BAA2B,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAK7E,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAEpC,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AACvB,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACzC;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,MAAM,UAAW,MAAM,KAAG,eAAwC,CAAC;AAEhF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,gBAAgB,UAAW,MAAM,OAAO,GAAG,KAAG,QAAQ,OAAO,CACrC,CAAC;AAEtC;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,eAAO,MAAM,MAAM,UACV,MAAM,OACR,GAAG,YACC,2BAA2B,KACnC,QAAQ,eAAe,CAUzB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/jwt/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EACnB,2BAA2B,EAC3B,eAAe,EAChB,MAAM,UAAU,CAAC;AAKlB,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAGpC,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AACvB,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACzC;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,MAAM,UAAW,MAAM,KAAG,eAAwC,CAAC;AAEhF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,gBAAgB,UAAW,MAAM,OAAO,GAAG,KAAG,QAAQ,OAAO,CACrC,CAAC;AAEtC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,eAAO,MAAM,MAAM,UACV,MAAM,OACR,GAAG,GAAG,GAAG,EAAE,YACP,2BAA2B,KACnC,QAAQ,eAAe,CAczB,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,gBAAgB,WACnB,mBAAmB,QACrB,GAAG,EAAE,KACV,GAYF,CAAC"}
@@ -1,3 +1,4 @@
1
+ import { z } from 'zod';
1
2
  export interface JWTDecodeResult {
2
3
  /** JWT Claims Set. */
3
4
  payload: JWTPayload;
@@ -132,46 +133,342 @@ export interface JWTClaimVerificationOptions {
132
133
  */
133
134
  requiredClaims?: string[];
134
135
  }
135
- export interface JWK {
136
- /** JWK "alg" (Algorithm) Parameter. */
137
- 'alg'?: string;
138
- 'crv'?: string;
139
- 'd'?: string;
140
- 'dp'?: string;
141
- 'dq'?: string;
142
- 'e'?: string;
136
+ export type JWK = z.infer<typeof JWK>;
137
+ export declare const JWK: z.ZodObject<{
138
+ alg: z.ZodOptional<z.ZodString>;
139
+ crv: z.ZodOptional<z.ZodString>;
140
+ d: z.ZodOptional<z.ZodString>;
141
+ dp: z.ZodOptional<z.ZodString>;
142
+ dq: z.ZodOptional<z.ZodString>;
143
+ e: z.ZodOptional<z.ZodString>;
143
144
  /** JWK "ext" (Extractable) Parameter. */
144
- 'ext'?: boolean;
145
- 'k'?: string;
145
+ ext: z.ZodOptional<z.ZodBoolean>;
146
+ k: z.ZodOptional<z.ZodString>;
146
147
  /** JWK "key_ops" (Key Operations) Parameter. */
147
- 'key_ops'?: string[];
148
+ key_ops: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
148
149
  /** JWK "kid" (Key ID) Parameter. */
149
- 'kid'?: string;
150
+ kid: z.ZodOptional<z.ZodString>;
150
151
  /** JWK "kty" (Key Type) Parameter.
151
152
  * This attribute is required to discriminate the
152
153
  * type of EC/RSA algorithm */
153
- 'kty': string;
154
- 'n'?: string;
155
- 'oth'?: Array<{
156
- d?: string;
157
- r?: string;
158
- t?: string;
159
- }>;
160
- 'p'?: string;
161
- 'q'?: string;
162
- 'qi'?: string;
154
+ kty: z.ZodString;
155
+ n: z.ZodOptional<z.ZodString>;
156
+ oth: z.ZodOptional<z.ZodArray<z.ZodObject<{
157
+ d: z.ZodOptional<z.ZodString>;
158
+ r: z.ZodOptional<z.ZodString>;
159
+ t: z.ZodOptional<z.ZodString>;
160
+ }, "strip", z.ZodTypeAny, {
161
+ d?: string | undefined;
162
+ r?: string | undefined;
163
+ t?: string | undefined;
164
+ }, {
165
+ d?: string | undefined;
166
+ r?: string | undefined;
167
+ t?: string | undefined;
168
+ }>, "many">>;
169
+ p: z.ZodOptional<z.ZodString>;
170
+ q: z.ZodOptional<z.ZodString>;
171
+ qi: z.ZodOptional<z.ZodString>;
163
172
  /** JWK "use" (Public Key Use) Parameter. */
164
- 'use'?: string;
165
- 'x'?: string;
166
- 'y'?: string;
173
+ use: z.ZodOptional<z.ZodString>;
174
+ x: z.ZodOptional<z.ZodString>;
175
+ y: z.ZodOptional<z.ZodString>;
167
176
  /** JWK "x5c" (X.509 Certificate Chain) Parameter. */
168
- 'x5c'?: string[];
177
+ x5c: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
169
178
  /** JWK "x5t" (X.509 Certificate SHA-1 Thumbprint) Parameter. */
170
- 'x5t'?: string;
179
+ x5t: z.ZodOptional<z.ZodString>;
171
180
  /** "x5t#S256" (X.509 Certificate SHA-256 Thumbprint) Parameter. */
172
- 'x5t#S256'?: string;
181
+ 'x5t#S256': z.ZodOptional<z.ZodString>;
173
182
  /** JWK "x5u" (X.509 URL) Parameter. */
174
- 'x5u'?: string;
175
- [propName: string]: unknown;
176
- }
183
+ x5u: z.ZodOptional<z.ZodString>;
184
+ }, "strip", z.ZodTypeAny, {
185
+ kty: string;
186
+ alg?: string | undefined;
187
+ crv?: string | undefined;
188
+ d?: string | undefined;
189
+ dp?: string | undefined;
190
+ dq?: string | undefined;
191
+ e?: string | undefined;
192
+ ext?: boolean | undefined;
193
+ k?: string | undefined;
194
+ key_ops?: string[] | undefined;
195
+ kid?: string | undefined;
196
+ n?: string | undefined;
197
+ oth?: {
198
+ d?: string | undefined;
199
+ r?: string | undefined;
200
+ t?: string | undefined;
201
+ }[] | undefined;
202
+ p?: string | undefined;
203
+ q?: string | undefined;
204
+ qi?: string | undefined;
205
+ use?: string | undefined;
206
+ x?: string | undefined;
207
+ y?: string | undefined;
208
+ x5c?: string[] | undefined;
209
+ x5t?: string | undefined;
210
+ 'x5t#S256'?: string | undefined;
211
+ x5u?: string | undefined;
212
+ }, {
213
+ kty: string;
214
+ alg?: string | undefined;
215
+ crv?: string | undefined;
216
+ d?: string | undefined;
217
+ dp?: string | undefined;
218
+ dq?: string | undefined;
219
+ e?: string | undefined;
220
+ ext?: boolean | undefined;
221
+ k?: string | undefined;
222
+ key_ops?: string[] | undefined;
223
+ kid?: string | undefined;
224
+ n?: string | undefined;
225
+ oth?: {
226
+ d?: string | undefined;
227
+ r?: string | undefined;
228
+ t?: string | undefined;
229
+ }[] | undefined;
230
+ p?: string | undefined;
231
+ q?: string | undefined;
232
+ qi?: string | undefined;
233
+ use?: string | undefined;
234
+ x?: string | undefined;
235
+ y?: string | undefined;
236
+ x5c?: string[] | undefined;
237
+ x5t?: string | undefined;
238
+ 'x5t#S256'?: string | undefined;
239
+ x5u?: string | undefined;
240
+ }>;
241
+ export type WithJWKS = z.infer<typeof WithJWKS>;
242
+ export declare const WithJWKS: z.ZodObject<{
243
+ jwks: z.ZodObject<{
244
+ keys: z.ZodArray<z.ZodObject<{
245
+ alg: z.ZodOptional<z.ZodString>;
246
+ crv: z.ZodOptional<z.ZodString>;
247
+ d: z.ZodOptional<z.ZodString>;
248
+ dp: z.ZodOptional<z.ZodString>;
249
+ dq: z.ZodOptional<z.ZodString>;
250
+ e: z.ZodOptional<z.ZodString>;
251
+ /** JWK "ext" (Extractable) Parameter. */
252
+ ext: z.ZodOptional<z.ZodBoolean>;
253
+ k: z.ZodOptional<z.ZodString>;
254
+ /** JWK "key_ops" (Key Operations) Parameter. */
255
+ key_ops: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
256
+ /** JWK "kid" (Key ID) Parameter. */
257
+ kid: z.ZodOptional<z.ZodString>;
258
+ /** JWK "kty" (Key Type) Parameter.
259
+ * This attribute is required to discriminate the
260
+ * type of EC/RSA algorithm */
261
+ kty: z.ZodString;
262
+ n: z.ZodOptional<z.ZodString>;
263
+ oth: z.ZodOptional<z.ZodArray<z.ZodObject<{
264
+ d: z.ZodOptional<z.ZodString>;
265
+ r: z.ZodOptional<z.ZodString>;
266
+ t: z.ZodOptional<z.ZodString>;
267
+ }, "strip", z.ZodTypeAny, {
268
+ d?: string | undefined;
269
+ r?: string | undefined;
270
+ t?: string | undefined;
271
+ }, {
272
+ d?: string | undefined;
273
+ r?: string | undefined;
274
+ t?: string | undefined;
275
+ }>, "many">>;
276
+ p: z.ZodOptional<z.ZodString>;
277
+ q: z.ZodOptional<z.ZodString>;
278
+ qi: z.ZodOptional<z.ZodString>;
279
+ /** JWK "use" (Public Key Use) Parameter. */
280
+ use: z.ZodOptional<z.ZodString>;
281
+ x: z.ZodOptional<z.ZodString>;
282
+ y: z.ZodOptional<z.ZodString>;
283
+ /** JWK "x5c" (X.509 Certificate Chain) Parameter. */
284
+ x5c: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
285
+ /** JWK "x5t" (X.509 Certificate SHA-1 Thumbprint) Parameter. */
286
+ x5t: z.ZodOptional<z.ZodString>;
287
+ /** "x5t#S256" (X.509 Certificate SHA-256 Thumbprint) Parameter. */
288
+ 'x5t#S256': z.ZodOptional<z.ZodString>;
289
+ /** JWK "x5u" (X.509 URL) Parameter. */
290
+ x5u: z.ZodOptional<z.ZodString>;
291
+ }, "strip", z.ZodTypeAny, {
292
+ kty: string;
293
+ alg?: string | undefined;
294
+ crv?: string | undefined;
295
+ d?: string | undefined;
296
+ dp?: string | undefined;
297
+ dq?: string | undefined;
298
+ e?: string | undefined;
299
+ ext?: boolean | undefined;
300
+ k?: string | undefined;
301
+ key_ops?: string[] | undefined;
302
+ kid?: string | undefined;
303
+ n?: string | undefined;
304
+ oth?: {
305
+ d?: string | undefined;
306
+ r?: string | undefined;
307
+ t?: string | undefined;
308
+ }[] | undefined;
309
+ p?: string | undefined;
310
+ q?: string | undefined;
311
+ qi?: string | undefined;
312
+ use?: string | undefined;
313
+ x?: string | undefined;
314
+ y?: string | undefined;
315
+ x5c?: string[] | undefined;
316
+ x5t?: string | undefined;
317
+ 'x5t#S256'?: string | undefined;
318
+ x5u?: string | undefined;
319
+ }, {
320
+ kty: string;
321
+ alg?: string | undefined;
322
+ crv?: string | undefined;
323
+ d?: string | undefined;
324
+ dp?: string | undefined;
325
+ dq?: string | undefined;
326
+ e?: string | undefined;
327
+ ext?: boolean | undefined;
328
+ k?: string | undefined;
329
+ key_ops?: string[] | undefined;
330
+ kid?: string | undefined;
331
+ n?: string | undefined;
332
+ oth?: {
333
+ d?: string | undefined;
334
+ r?: string | undefined;
335
+ t?: string | undefined;
336
+ }[] | undefined;
337
+ p?: string | undefined;
338
+ q?: string | undefined;
339
+ qi?: string | undefined;
340
+ use?: string | undefined;
341
+ x?: string | undefined;
342
+ y?: string | undefined;
343
+ x5c?: string[] | undefined;
344
+ x5t?: string | undefined;
345
+ 'x5t#S256'?: string | undefined;
346
+ x5u?: string | undefined;
347
+ }>, "many">;
348
+ }, "strip", z.ZodTypeAny, {
349
+ keys: {
350
+ kty: string;
351
+ alg?: string | undefined;
352
+ crv?: string | undefined;
353
+ d?: string | undefined;
354
+ dp?: string | undefined;
355
+ dq?: string | undefined;
356
+ e?: string | undefined;
357
+ ext?: boolean | undefined;
358
+ k?: string | undefined;
359
+ key_ops?: string[] | undefined;
360
+ kid?: string | undefined;
361
+ n?: string | undefined;
362
+ oth?: {
363
+ d?: string | undefined;
364
+ r?: string | undefined;
365
+ t?: string | undefined;
366
+ }[] | undefined;
367
+ p?: string | undefined;
368
+ q?: string | undefined;
369
+ qi?: string | undefined;
370
+ use?: string | undefined;
371
+ x?: string | undefined;
372
+ y?: string | undefined;
373
+ x5c?: string[] | undefined;
374
+ x5t?: string | undefined;
375
+ 'x5t#S256'?: string | undefined;
376
+ x5u?: string | undefined;
377
+ }[];
378
+ }, {
379
+ keys: {
380
+ kty: string;
381
+ alg?: string | undefined;
382
+ crv?: string | undefined;
383
+ d?: string | undefined;
384
+ dp?: string | undefined;
385
+ dq?: string | undefined;
386
+ e?: string | undefined;
387
+ ext?: boolean | undefined;
388
+ k?: string | undefined;
389
+ key_ops?: string[] | undefined;
390
+ kid?: string | undefined;
391
+ n?: string | undefined;
392
+ oth?: {
393
+ d?: string | undefined;
394
+ r?: string | undefined;
395
+ t?: string | undefined;
396
+ }[] | undefined;
397
+ p?: string | undefined;
398
+ q?: string | undefined;
399
+ qi?: string | undefined;
400
+ use?: string | undefined;
401
+ x?: string | undefined;
402
+ y?: string | undefined;
403
+ x5c?: string[] | undefined;
404
+ x5t?: string | undefined;
405
+ 'x5t#S256'?: string | undefined;
406
+ x5u?: string | undefined;
407
+ }[];
408
+ }>;
409
+ }, "strip", z.ZodTypeAny, {
410
+ jwks: {
411
+ keys: {
412
+ kty: string;
413
+ alg?: string | undefined;
414
+ crv?: string | undefined;
415
+ d?: string | undefined;
416
+ dp?: string | undefined;
417
+ dq?: string | undefined;
418
+ e?: string | undefined;
419
+ ext?: boolean | undefined;
420
+ k?: string | undefined;
421
+ key_ops?: string[] | undefined;
422
+ kid?: string | undefined;
423
+ n?: string | undefined;
424
+ oth?: {
425
+ d?: string | undefined;
426
+ r?: string | undefined;
427
+ t?: string | undefined;
428
+ }[] | undefined;
429
+ p?: string | undefined;
430
+ q?: string | undefined;
431
+ qi?: string | undefined;
432
+ use?: string | undefined;
433
+ x?: string | undefined;
434
+ y?: string | undefined;
435
+ x5c?: string[] | undefined;
436
+ x5t?: string | undefined;
437
+ 'x5t#S256'?: string | undefined;
438
+ x5u?: string | undefined;
439
+ }[];
440
+ };
441
+ }, {
442
+ jwks: {
443
+ keys: {
444
+ kty: string;
445
+ alg?: string | undefined;
446
+ crv?: string | undefined;
447
+ d?: string | undefined;
448
+ dp?: string | undefined;
449
+ dq?: string | undefined;
450
+ e?: string | undefined;
451
+ ext?: boolean | undefined;
452
+ k?: string | undefined;
453
+ key_ops?: string[] | undefined;
454
+ kid?: string | undefined;
455
+ n?: string | undefined;
456
+ oth?: {
457
+ d?: string | undefined;
458
+ r?: string | undefined;
459
+ t?: string | undefined;
460
+ }[] | undefined;
461
+ p?: string | undefined;
462
+ q?: string | undefined;
463
+ qi?: string | undefined;
464
+ use?: string | undefined;
465
+ x?: string | undefined;
466
+ y?: string | undefined;
467
+ x5c?: string[] | undefined;
468
+ x5t?: string | undefined;
469
+ 'x5t#S256'?: string | undefined;
470
+ x5u?: string | undefined;
471
+ }[];
472
+ };
473
+ }>;
177
474
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
@@ -177,4 +177,18 @@ export declare class JWEInvalid extends JOSEError {
177
177
  static get code(): 'ERR_JWE_INVALID';
178
178
  code: string;
179
179
  }
180
+ /**
181
+ * An error subclass thrown when a JWKSet is invalid.
182
+ */
183
+ export declare class JWKSetInvalid extends JOSEError {
184
+ static get code(): 'ERR_JWKS_INVALID';
185
+ code: string;
186
+ }
187
+ /**
188
+ * An error subclass thrown when a JWK is not found.
189
+ */
190
+ export declare class JWKNotFound extends JOSEError {
191
+ static get code(): 'ERR_JWK_NOT_FOUND';
192
+ code: string;
193
+ }
180
194
  //# sourceMappingURL=errors.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/utils/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,qBAAa,SAAU,SAAQ,KAAK;IAClC,6DAA6D;IAC7D,MAAM,KAAK,IAAI,IAAI,MAAM,CAExB;IAED,6DAA6D;IAC7D,IAAI,EAAE,MAAM,CAAsB;gBAEtB,OAAO,CAAC,EAAE,MAAM;CAM7B;AACD,qBAAa,wBAAyB,SAAQ,SAAS;IACrD,MAAM,KAAK,IAAI,IAAI,iCAAiC,CAEnD;IAED,IAAI,SAAqC;IAEzC,iDAAiD;IACjD,KAAK,EAAE,MAAM,CAAC;IAEd,8CAA8C;IAC9C,MAAM,EAAE,MAAM,CAAC;gBAEH,OAAO,EAAE,MAAM,EAAE,KAAK,SAAgB,EAAE,MAAM,SAAgB;CAK3E;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,UAAW,SAAQ,SAAU,YAAW,wBAAwB;IAC3E,MAAM,KAAK,IAAI,IAAI,iBAAiB,CAEnC;IAED,IAAI,SAAqB;IAEzB,iDAAiD;IACjD,KAAK,EAAE,MAAM,CAAC;IAEd,8CAA8C;IAC9C,MAAM,EAAE,MAAM,CAAC;gBAEH,OAAO,EAAE,MAAM,EAAE,KAAK,SAAgB,EAAE,MAAM,SAAgB;CAK3E;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,iBAAkB,SAAQ,SAAS;IAC9C,MAAM,KAAK,IAAI,IAAI,0BAA0B,CAE5C;IAED,IAAI,SAA8B;CACnC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,gBAAiB,SAAQ,SAAS;IAC7C,MAAM,KAAK,IAAI,IAAI,wBAAwB,CAE1C;IAED,IAAI,SAA4B;CACjC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,UAAW,SAAQ,SAAS;IACvC,MAAM,KAAK,IAAI,IAAI,iBAAiB,CAEnC;IAED,IAAI,SAAqB;CAC1B;AAED;;GAEG;AACH,qBAAa,UAAW,SAAQ,SAAS;IACvC,MAAM,KAAK,IAAI,IAAI,iBAAiB,CAEnC;IACD,IAAI,SAAqB;CAC1B;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,8BAA+B,SAAQ,SAAS;IAC3D,MAAM,KAAK,IAAI,IAAI,uCAAuC,CAEzD;IAED,IAAI,SAA2C;IAE/C,OAAO,SAAmC;CAC3C;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,UAAW,SAAQ,SAAS;IACvC,MAAM,KAAK,IAAI,IAAI,iBAAiB,CAEnC;IAED,IAAI,SAAqB;CAC1B"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/utils/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,qBAAa,SAAU,SAAQ,KAAK;IAClC,6DAA6D;IAC7D,MAAM,KAAK,IAAI,IAAI,MAAM,CAExB;IAED,6DAA6D;IAC7D,IAAI,EAAE,MAAM,CAAsB;gBAEtB,OAAO,CAAC,EAAE,MAAM;CAM7B;AACD,qBAAa,wBAAyB,SAAQ,SAAS;IACrD,MAAM,KAAK,IAAI,IAAI,iCAAiC,CAEnD;IAED,IAAI,SAAqC;IAEzC,iDAAiD;IACjD,KAAK,EAAE,MAAM,CAAC;IAEd,8CAA8C;IAC9C,MAAM,EAAE,MAAM,CAAC;gBAEH,OAAO,EAAE,MAAM,EAAE,KAAK,SAAgB,EAAE,MAAM,SAAgB;CAK3E;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,UAAW,SAAQ,SAAU,YAAW,wBAAwB;IAC3E,MAAM,KAAK,IAAI,IAAI,iBAAiB,CAEnC;IAED,IAAI,SAAqB;IAEzB,iDAAiD;IACjD,KAAK,EAAE,MAAM,CAAC;IAEd,8CAA8C;IAC9C,MAAM,EAAE,MAAM,CAAC;gBAEH,OAAO,EAAE,MAAM,EAAE,KAAK,SAAgB,EAAE,MAAM,SAAgB;CAK3E;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,iBAAkB,SAAQ,SAAS;IAC9C,MAAM,KAAK,IAAI,IAAI,0BAA0B,CAE5C;IAED,IAAI,SAA8B;CACnC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,gBAAiB,SAAQ,SAAS;IAC7C,MAAM,KAAK,IAAI,IAAI,wBAAwB,CAE1C;IAED,IAAI,SAA4B;CACjC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,UAAW,SAAQ,SAAS;IACvC,MAAM,KAAK,IAAI,IAAI,iBAAiB,CAEnC;IAED,IAAI,SAAqB;CAC1B;AAED;;GAEG;AACH,qBAAa,UAAW,SAAQ,SAAS;IACvC,MAAM,KAAK,IAAI,IAAI,iBAAiB,CAEnC;IACD,IAAI,SAAqB;CAC1B;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,8BAA+B,SAAQ,SAAS;IAC3D,MAAM,KAAK,IAAI,IAAI,uCAAuC,CAEzD;IAED,IAAI,SAA2C;IAE/C,OAAO,SAAmC;CAC3C;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,UAAW,SAAQ,SAAS;IACvC,MAAM,KAAK,IAAI,IAAI,iBAAiB,CAEnC;IAED,IAAI,SAAqB;CAC1B;AAED;;GAEG;AACH,qBAAa,aAAc,SAAQ,SAAS;IAC1C,MAAM,KAAK,IAAI,IAAI,kBAAkB,CAEpC;IAED,IAAI,SAAsB;CAC3B;AAED;;GAEG;AACH,qBAAa,WAAY,SAAQ,SAAS;IACxC,MAAM,KAAK,IAAI,IAAI,mBAAmB,CAErC;IAED,IAAI,SAAuB;CAC5B"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pagopa/io-react-native-jwt",
3
- "version": "0.5.0",
3
+ "version": "0.6.0",
4
4
  "description": "Native support for JWT",
5
5
  "main": "lib/commonjs/index",
6
6
  "module": "lib/module/index",
@@ -165,6 +165,7 @@
165
165
  ]
166
166
  },
167
167
  "dependencies": {
168
- "abab": "^2.0.6"
168
+ "abab": "^2.0.6",
169
+ "zod": "^3.21.4"
169
170
  }
170
171
  }
package/src/jwk/index.ts CHANGED
@@ -1,5 +1,7 @@
1
1
  import { IoReactNativeJwt } from '../utils/proxy';
2
- import type { JWK } from '../types';
2
+ import { WithJWKS, JWK } from '../types';
3
+ import { JWKSetInvalid } from '../utils/errors';
4
+ import { decode } from '..';
3
5
 
4
6
  /**
5
7
  * Calculate JWK thumbprint
@@ -22,3 +24,28 @@ import type { JWK } from '../types';
22
24
  */
23
25
  export const thumbprint = (jwk: JWK): Promise<string> =>
24
26
  IoReactNativeJwt.thumbprint(jwk);
27
+
28
+ /**
29
+ * Returns a JSON Web Key Set (JWKS) downloaded from a remote endpoint,
30
+ * that is, for example, an OAuth 2.0 or OIDC jwks_uri.
31
+ *
32
+ * @param url URL string to fetch the JSON Web Key Set from.
33
+ * @param appFetch fetch function (optional)
34
+ */
35
+ export const getRemoteJWKSet = async (
36
+ url: string,
37
+ appFetch: GlobalFetch['fetch'] = fetch
38
+ ): Promise<JWK[]> => {
39
+ let response = await appFetch(url);
40
+
41
+ if (response.status === 200) {
42
+ const jwt = await response.text();
43
+ const { payload } = await decode(jwt);
44
+ const parsedPayload = WithJWKS.parse(payload);
45
+ return parsedPayload.jwks.keys;
46
+ }
47
+
48
+ throw new JWKSetInvalid(
49
+ `Unable to obtain JWKSet from given url. Response status: ${response.status}`
50
+ );
51
+ };
package/src/jwt/index.ts CHANGED
@@ -1,9 +1,14 @@
1
- import type { JWTClaimVerificationOptions, JWTDecodeResult } from '../types';
1
+ import type {
2
+ JWSHeaderParameters,
3
+ JWTClaimVerificationOptions,
4
+ JWTDecodeResult,
5
+ } from '../types';
2
6
  import jwtPayload from './jwt_claims_set';
3
- import { JWSSignatureVerificationFailed } from '../utils/errors';
7
+ import { JWKNotFound, JWSSignatureVerificationFailed } from '../utils/errors';
4
8
  import { IoReactNativeJwt } from '../utils/proxy';
5
9
  import { SignJWT } from './sign';
6
10
  import type { JWK } from '../types';
11
+ import { getKtyFromAlg } from '../algorithms';
7
12
 
8
13
  export * from './produce';
9
14
  export * from './sign';
@@ -74,18 +79,37 @@ export const isSignatureValid = (token: string, jwk: JWK): Promise<boolean> =>
74
79
  * })
75
80
  * ```
76
81
  *
82
+ * * @example Usage with a JWKSet
83
+ *
84
+ * ```js
85
+ * const wellKnownUrl = 'https://example.com/.well-known/openid-federation';
86
+ * const jwks = await getRemoteJWKSet(wellKnownUrl);
87
+ *
88
+ * const jwt =
89
+ * 'eyJ0eXAiOiJlbnRpdHktc3RhdGVtZW50K2p3dCIsImtpZCI6IkVDIzEiLCJhbGciOiJFUzI1NiJ9.eyJpc3MiOiJodHRwczovL2lvLWQtd2FsbGV0LWl0LmF6dXJld2Vic2l0ZXMubmV0LyIsInN1YiI6Imh0dHBzOi8vaW8tZC13YWxsZXQtaXQuYXp1cmV3ZWJzaXRlcy5uZXQvIiwibWV0YWRhdGEiOnsiZXVkaV93YWxsZXRfcHJvdmlkZXIiOnsiandrcyI6W3siY3J2IjoiUC0yNTYiLCJrdHkiOiJFQyIsIngiOiJxckpyajNBZl9CNTdzYk9JUnJjQk03YnI3d09jOHluajdsSEZQVGVmZlVrIiwieSI6IjFIMGNXRHlHZ3ZVOHcta1BLVV94eWNPQ1VOVDJvMGJ3c2xJUXRuUFU2aU0iLCJraWQiOiJFQyMxIn1dLCJ0b2tlbl9lbmRwb2ludCI6Imh0dHBzOi8vaW8tZC13YWxsZXQtaXQuYXp1cmV3ZWJzaXRlcy5uZXQvdG9rZW4iLCJhc2NfdmFsdWVzX3N1cHBvcnRlZCI6WyJodHRwczovL2lvLWQtd2FsbGV0LWl0LmF6dXJld2Vic2l0ZXMubmV0L0xvQS9iYXNpYyIsImh0dHBzOi8vaW8tZC13YWxsZXQtaXQuYXp1cmV3ZWJzaXRlcy5uZXQvTG9BL21lZGl1bSIsImh0dHBzOi8vaW8tZC13YWxsZXQtaXQuYXp1cmV3ZWJzaXRlcy5uZXQvTG9BL2hpZ2h0Il0sImdyYW50X3R5cGVzX3N1cHBvcnRlZCI6WyJ1cm46aWV0ZjpwYXJhbXM6b2F1dGg6Y2xpZW50LWFzc2VydGlvbi10eXBlOmp3dC1rZXktYXR0ZXN0YXRpb24iXSwidG9rZW5fZW5kcG9pbnRfYXV0aF9tZXRob2RzX3N1cHBvcnRlZCI6WyJwcml2YXRlX2tleV9qd3QiXSwidG9rZW5fZW5kcG9pbnRfYXV0aF9zaWduaW5nX2FsZ192YWx1ZXNfc3VwcG9ydGVkIjpbIkVTMjU2IiwiRVMyNTZLIiwiRVMzODQiLCJFUzUxMiIsIlJTMjU2IiwiUlMzODQiLCJSUzUxMiIsIlBTMjU2IiwiUFMzODQiLCJQUzUxMiJdfSwiZmVkZXJhdGlvbl9lbnRpdHkiOnsib3JnYW5pemF0aW9uX25hbWUiOiJQYWdvUGEgUy5wLkEuIiwiaG9tZXBhZ2VfdXJpIjoiaHR0cHM6Ly9pby5pdGFsaWEuaXQvIiwicG9saWN5X3VyaSI6Imh0dHBzOi8vaW8uaXRhbGlhLml0L3ByaXZhY3ktcG9saWN5LyIsInRvc191cmkiOiJodHRwczovL2lvLml0YWxpYS5pdC9wcml2YWN5LXBvbGljeS8iLCJsb2dvX3VyaSI6Imh0dHBzOi8vaW8uaXRhbGlhLml0L2Fzc2V0cy9pbWcvaW8taXQtbG9nby13aGl0ZS5zdmcifX0sImlhdCI6MTY4OTIzNjYzNSwiZXhwIjoxNjg5MjQwMjM1fQ.6wA0M6rNYNSFN_EylzMA6ElAibW7FVSZyoLNEkHU5c_RKuiNenT08YIMvbysYautLZotUedEMP5xCyNpY34x6Q'
90
+ *
91
+ * const { payload, protectedHeader } = await verify(jwt, jwks, {
92
+ * typ: 'entity-statement+jwt',
93
+ * requiredClaims: ['iss', 'sub', 'metadata'],
94
+ * })
95
+ * ```
96
+ *
77
97
  * @param jwt JSON Web Token value (encoded as JWS).
78
- * @param key Public key to verify the JWT in JWK format.
98
+ * @param key Public key to verify the JWT in JWK format or JWKS (array of JWK).
79
99
  * @param options JWT Decryption and JWT Claims Set validation options.
80
100
  */
81
101
  export const verify = async (
82
102
  token: string,
83
- jwk: JWK,
103
+ jwk: JWK | JWK[],
84
104
  options: JWTClaimVerificationOptions = {}
85
105
  ): Promise<JWTDecodeResult> => {
86
106
  const { protectedHeader, payload } = await decode(token);
87
- const signatureIsValid = await isSignatureValid(token, jwk);
88
107
 
108
+ const selectedJwk = Array.isArray(jwk)
109
+ ? getJwkFromHeader(protectedHeader, jwk)
110
+ : jwk;
111
+
112
+ const signatureIsValid = await isSignatureValid(token, selectedJwk);
89
113
  if (signatureIsValid) {
90
114
  const verifiedPayload = jwtPayload(protectedHeader, payload, options);
91
115
  return { payload: verifiedPayload, protectedHeader };
@@ -93,3 +117,32 @@ export const verify = async (
93
117
  throw new JWSSignatureVerificationFailed();
94
118
  }
95
119
  };
120
+
121
+ /**
122
+ * Given the header of a JWT return the corresponding key from a JWKS.
123
+ *
124
+ * It uses the "alg" (JWS Algorithm) Header Parameter to determine the right JWK "kty" (Key Type),
125
+ * then proceeds to match the JWK "kid" (Key ID) with one found in the JWS Header Parameters (if
126
+ * there is one).
127
+ * Only a single public key must match the selection process.
128
+ *
129
+ * @param header JWT header
130
+ * @param jwks Json Web Key Set (JWKS)
131
+ *
132
+ */
133
+ export const getJwkFromHeader = (
134
+ header: JWSHeaderParameters,
135
+ jwks: JWK[]
136
+ ): JWK => {
137
+ const { alg, kid } = header;
138
+ if (alg && kid) {
139
+ const kty = getKtyFromAlg(alg);
140
+ const filteredJwks = jwks.find((el) => el.kty === kty && el.kid === kid);
141
+
142
+ if (filteredJwks) {
143
+ return filteredJwks;
144
+ }
145
+ }
146
+
147
+ throw new JWKNotFound(`No JWKs found that match alg:${alg} and kid:${kid}`);
148
+ };
package/src/types.ts CHANGED
@@ -1,3 +1,5 @@
1
+ import { z } from 'zod';
2
+
1
3
  export interface JWTDecodeResult {
2
4
  /** JWT Claims Set. */
3
5
  payload: JWTPayload;
@@ -166,46 +168,55 @@ export interface JWTClaimVerificationOptions {
166
168
  requiredClaims?: string[];
167
169
  }
168
170
 
169
- export interface JWK {
170
- /** JWK "alg" (Algorithm) Parameter. */
171
- 'alg'?: string;
172
- 'crv'?: string;
173
- 'd'?: string;
174
- 'dp'?: string;
175
- 'dq'?: string;
176
- 'e'?: string;
171
+ export type JWK = z.infer<typeof JWK>;
172
+ export const JWK = z.object({
173
+ 'alg': z.string().optional(),
174
+ 'crv': z.string().optional(),
175
+ 'd': z.string().optional(),
176
+ 'dp': z.string().optional(),
177
+ 'dq': z.string().optional(),
178
+ 'e': z.string().optional(),
177
179
  /** JWK "ext" (Extractable) Parameter. */
178
- 'ext'?: boolean;
179
- 'k'?: string;
180
+ 'ext': z.boolean().optional(),
181
+ 'k': z.string().optional(),
180
182
  /** JWK "key_ops" (Key Operations) Parameter. */
181
- 'key_ops'?: string[];
183
+ 'key_ops': z.array(z.string()).optional(),
182
184
  /** JWK "kid" (Key ID) Parameter. */
183
- 'kid'?: string;
185
+ 'kid': z.string().optional(),
184
186
  /** JWK "kty" (Key Type) Parameter.
185
187
  * This attribute is required to discriminate the
186
188
  * type of EC/RSA algorithm */
187
- 'kty': string;
188
- 'n'?: string;
189
- 'oth'?: Array<{
190
- d?: string;
191
- r?: string;
192
- t?: string;
193
- }>;
194
- 'p'?: string;
195
- 'q'?: string;
196
- 'qi'?: string;
189
+ 'kty': z.string(),
190
+ 'n': z.string().optional(),
191
+ 'oth': z
192
+ .array(
193
+ z.object({
194
+ d: z.string().optional(),
195
+ r: z.string().optional(),
196
+ t: z.string().optional(),
197
+ })
198
+ )
199
+ .optional(),
200
+ 'p': z.string().optional(),
201
+ 'q': z.string().optional(),
202
+ 'qi': z.string().optional(),
197
203
  /** JWK "use" (Public Key Use) Parameter. */
198
- 'use'?: string;
199
- 'x'?: string;
200
- 'y'?: string;
204
+ 'use': z.string().optional(),
205
+ 'x': z.string().optional(),
206
+ 'y': z.string().optional(),
201
207
  /** JWK "x5c" (X.509 Certificate Chain) Parameter. */
202
- 'x5c'?: string[];
208
+ 'x5c': z.array(z.string()).optional(),
203
209
  /** JWK "x5t" (X.509 Certificate SHA-1 Thumbprint) Parameter. */
204
- 'x5t'?: string;
210
+ 'x5t': z.string().optional(),
205
211
  /** "x5t#S256" (X.509 Certificate SHA-256 Thumbprint) Parameter. */
206
- 'x5t#S256'?: string;
212
+ 'x5t#S256': z.string().optional(),
207
213
  /** JWK "x5u" (X.509 URL) Parameter. */
208
- 'x5u'?: string;
209
-
210
- [propName: string]: unknown;
211
- }
214
+ 'x5u': z.string().optional(),
215
+ });
216
+
217
+ export type WithJWKS = z.infer<typeof WithJWKS>;
218
+ export const WithJWKS = z.object({
219
+ jwks: z.object({
220
+ keys: z.array(JWK),
221
+ }),
222
+ });