@pagopa/io-react-native-jwt 0.6.4 → 1.0.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.
Files changed (52) hide show
  1. package/README.md +32 -36
  2. package/lib/commonjs/algorithms.js +34 -2
  3. package/lib/commonjs/algorithms.js.map +1 -1
  4. package/lib/commonjs/jwt/produce.js +8 -2
  5. package/lib/commonjs/jwt/produce.js.map +1 -1
  6. package/lib/commonjs/jwt/sign.js +54 -75
  7. package/lib/commonjs/jwt/sign.js.map +1 -1
  8. package/lib/commonjs/jwt/unsecured.js +2 -2
  9. package/lib/commonjs/jwt/unsecured.js.map +1 -1
  10. package/lib/commonjs/types.js +1 -1
  11. package/lib/commonjs/types.js.map +1 -1
  12. package/lib/commonjs/utils/asn1.js.map +1 -1
  13. package/lib/commonjs/utils/crypto.js +6 -0
  14. package/lib/commonjs/utils/crypto.js.map +1 -0
  15. package/lib/module/algorithms.js +31 -0
  16. package/lib/module/algorithms.js.map +1 -1
  17. package/lib/module/jwt/produce.js +8 -2
  18. package/lib/module/jwt/produce.js.map +1 -1
  19. package/lib/module/jwt/sign.js +56 -78
  20. package/lib/module/jwt/sign.js.map +1 -1
  21. package/lib/module/jwt/unsecured.js +2 -2
  22. package/lib/module/jwt/unsecured.js.map +1 -1
  23. package/lib/module/types.js +1 -1
  24. package/lib/module/types.js.map +1 -1
  25. package/lib/module/utils/asn1.js.map +1 -1
  26. package/lib/module/utils/crypto.js +2 -0
  27. package/lib/module/utils/crypto.js.map +1 -0
  28. package/lib/typescript/algorithms.d.ts +5 -2
  29. package/lib/typescript/algorithms.d.ts.map +1 -1
  30. package/lib/typescript/index.d.ts +1 -0
  31. package/lib/typescript/index.d.ts.map +1 -1
  32. package/lib/typescript/jwt/produce.d.ts +1 -1
  33. package/lib/typescript/jwt/produce.d.ts.map +1 -1
  34. package/lib/typescript/jwt/sign.d.ts +26 -26
  35. package/lib/typescript/jwt/sign.d.ts.map +1 -1
  36. package/lib/typescript/jwt/unsecured.d.ts +2 -2
  37. package/lib/typescript/jwt/unsecured.d.ts.map +1 -1
  38. package/lib/typescript/types.d.ts +5 -4
  39. package/lib/typescript/types.d.ts.map +1 -1
  40. package/lib/typescript/utils/asn1.d.ts +2 -1
  41. package/lib/typescript/utils/asn1.d.ts.map +1 -1
  42. package/lib/typescript/utils/crypto.d.ts +25 -0
  43. package/lib/typescript/utils/crypto.d.ts.map +1 -0
  44. package/package.json +1 -1
  45. package/src/algorithms.ts +38 -3
  46. package/src/index.ts +1 -0
  47. package/src/jwt/produce.ts +4 -3
  48. package/src/jwt/sign.ts +64 -101
  49. package/src/jwt/unsecured.ts +5 -5
  50. package/src/types.ts +5 -4
  51. package/src/utils/asn1.ts +6 -2
  52. package/src/utils/crypto.ts +25 -0
package/README.md CHANGED
@@ -4,12 +4,10 @@ A fast implementation of `jwt` module.
4
4
  Provides much greater performance for decoding, signing and verifying JWTs!
5
5
 
6
6
  🚀 Use only native functions via the following libraries:
7
+
7
8
  - 🤖 [nimbus-jose-jwt](https://github.com/felx/nimbus-jose-jwt/) on Android
8
9
  - 📱 [JOSESwift](https://github.com/airsidemobile/JOSESwift/) on iOS
9
10
 
10
-
11
-
12
-
13
11
  ## Installation
14
12
 
15
13
  ```sh
@@ -26,7 +24,7 @@ For detailed documentation go [here](/docs/modules/index.md)
26
24
  import { decode } from '@pagopa/io-react-native-jwt';
27
25
 
28
26
  // ...
29
- const jwt = "eyJ0eXAiOiJlbnRpdHktc3.....";
27
+ const jwt = 'eyJ0eXAiOiJlbnRpdHktc3.....';
30
28
  const result = await decode(jwt);
31
29
  console.log(result);
32
30
  ```
@@ -38,18 +36,18 @@ import { verify } from '@pagopa/io-react-native-jwt';
38
36
 
39
37
  // ...
40
38
  const pubJwk = {
41
- crv: 'P-256',
42
- kty: 'EC',
43
- x: 'qrJrj.....',
44
- y: '1H0cW.....',
45
- };
46
- const jwt = "eyJ0eXAiOiJlbnRpdHktc3.....";
39
+ crv: 'P-256',
40
+ kty: 'EC',
41
+ x: 'qrJrj.....',
42
+ y: '1H0cW.....',
43
+ };
44
+ const jwt = 'eyJ0eXAiOiJlbnRpdHktc3.....';
47
45
  const options = {
48
- typ: 'jwt',
49
- requiredClaims: ['iss', 'sub'],
50
- }
51
- const {protectedHeader, payload} = await verify(jwt, pubJwk, options);
52
- console.log(protectedHeader, payload)
46
+ typ: 'jwt',
47
+ requiredClaims: ['iss', 'sub'],
48
+ };
49
+ const { protectedHeader, payload } = await verify(jwt, pubJwk, options);
50
+ console.log(protectedHeader, payload);
53
51
  ```
54
52
 
55
53
  ### Verify JWT with JWKS fetched from remote URL
@@ -61,10 +59,10 @@ import { verify, getRemoteJWKSet } from '@pagopa/io-react-native-jwt';
61
59
  const wellKnownUrl = 'https://example.com/.well-known/openid-federation';
62
60
  const jwks = await getRemoteJWKSet(wellKnownUrl);
63
61
 
64
- const jwt = "eyJ0eXAiOiJlbnRpdHktc3.....";
62
+ const jwt = 'eyJ0eXAiOiJlbnRpdHktc3.....';
65
63
 
66
- const {protectedHeader, payload} = await verify(jwt, jwks);
67
- console.log(protectedHeader, payload)
64
+ const { protectedHeader, payload } = await verify(jwt, jwks);
65
+ console.log(protectedHeader, payload);
68
66
  ```
69
67
 
70
68
  ### Verify a JWT signature (JWS)
@@ -93,21 +91,19 @@ if isValid {
93
91
  ### Create and sign a JWT with a JWS
94
92
 
95
93
  ```js
96
- // Create unsecured jwt
97
- let jwtToSign = new SignJWT({ metadata: 'demo' })
98
- .setProtectedHeader({ alg: 'ES256', typ: 'JWT' })
94
+ // Define a cryptographic context suitable for the application needs
95
+ const crypto: CryptoContext = userDefinedCryptoContext();
96
+
97
+ // Create jwt
98
+ const jwt = new SignJWT(crypto)
99
+ .setPayload({ metadata: 'demo' })
100
+ .setProtectedHeader({ typ: 'JWT' })
99
101
  .setAudience('demo')
100
102
  .setExpirationTime('1h')
101
- .setIssuedAt()
102
- .toSign();
103
-
104
- // Create signature
105
- let signature = signWithMyCustomFunction(jwtToSign);
106
-
107
- // Create signed JWT
108
- let signedJwt = await SignJWT.appendSignature(jwtToSign, signature);
103
+ .setIssuedAt();
109
104
 
110
- console.log(signedJwt)
105
+ // get signed jwt
106
+ const signedJwt = jwt.sign();
111
107
  ```
112
108
 
113
109
  ### JWK thumbprint
@@ -117,13 +113,13 @@ import { thumbprint } from '@pagopa/io-react-native-jwt';
117
113
 
118
114
  // ...
119
115
  const pubJwk = {
120
- crv: 'P-256',
121
- kty: 'EC',
122
- x: 'qrJrj.....',
123
- y: '1H0cW.....',
124
- };
116
+ crv: 'P-256',
117
+ kty: 'EC',
118
+ x: 'qrJrj.....',
119
+ y: '1H0cW.....',
120
+ };
125
121
  const thumbprint = await thumbprint(pubJwk);
126
- console.log(thumbprint)
122
+ console.log(thumbprint);
127
123
  ```
128
124
 
129
125
  ##  Signature format
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.supportedAlgorithms = exports.isAlgSupported = exports.getKtyFromAlg = exports.getCoordinateOctetLength = void 0;
6
+ exports.supportedAlgorithms = exports.isAlgSupported = exports.getKtyFromAlg = exports.getCoordinateOctetLength = exports.getAlgFromKey = void 0;
7
7
  var _errors = require("./utils/errors");
8
8
  const supportedAlgorithms = ['RS256', 'RS384', 'RS512', 'PS256', 'PS384', 'PS512', 'ES256', 'ES384', 'ES512'];
9
9
  exports.supportedAlgorithms = supportedAlgorithms;
@@ -20,9 +20,41 @@ const getKtyFromAlg = alg => {
20
20
  throw new _errors.JOSENotSupported('Unsupported "alg" value for a JSON Web Key Set');
21
21
  }
22
22
  };
23
+ exports.getKtyFromAlg = getKtyFromAlg;
24
+ const getAlgFromKey = _ref => {
25
+ let {
26
+ kty,
27
+ alg,
28
+ crv
29
+ } = _ref;
30
+ if (kty === 'RSA' && alg && isAlgSupported(alg)) {
31
+ return alg;
32
+ } else if (kty === 'EC') {
33
+ return getAlgFromEllipticCurveKey(crv);
34
+ }
35
+ throw new _errors.JOSENotSupported(`Unable to determine a supported algorithm for ${JSON.stringify({
36
+ kty,
37
+ alg,
38
+ crv
39
+ })}`);
40
+ };
41
+ exports.getAlgFromKey = getAlgFromKey;
42
+ const getAlgFromEllipticCurveKey = crv => {
43
+ switch (crv) {
44
+ case 'P-256':
45
+ return 'ES256';
46
+ case 'P-384':
47
+ return 'ES384';
48
+ case 'P-512':
49
+ case 'P-521':
50
+ // https://github.com/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/blob/dev/src/Microsoft.IdentityModel.Tokens/JsonWebKeyECTypes.cs#L40
51
+ return 'ES512';
52
+ default:
53
+ throw new _errors.JOSENotSupported(`Unsupported "crv" value for an elliptic curve key (${crv})`);
54
+ }
55
+ };
23
56
 
24
57
  // Coordinates length in bytes: bits/8
25
- exports.getKtyFromAlg = getKtyFromAlg;
26
58
  const getCoordinateOctetLength = alg => {
27
59
  switch (alg.slice(2, 5)) {
28
60
  case '256':
@@ -1 +1 @@
1
- {"version":3,"names":["_errors","require","supportedAlgorithms","exports","isAlgSupported","alg","includes","toUpperCase","getKtyFromAlg","slice","JOSENotSupported","getCoordinateOctetLength"],"sourceRoot":"../../src","sources":["algorithms.ts"],"mappings":";;;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AAEO,MAAMC,mBAAmB,GAAG,CACjC,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,CACR;AAACC,OAAA,CAAAD,mBAAA,GAAAA,mBAAA;AAEK,MAAME,cAAc,GAAIC,GAAW,IACxCH,mBAAmB,CAACI,QAAQ,CAACD,GAAG,CAACE,WAAW,CAAC,CAAC,CAAC;AAACJ,OAAA,CAAAC,cAAA,GAAAA,cAAA;AAE3C,MAAMI,aAAa,GAAIH,GAAW,IAAK;EAC5C,QAAQA,GAAG,CAACI,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;IACrB,KAAK,IAAI;IACT,KAAK,IAAI;MACP,OAAO,KAAK;IACd,KAAK,IAAI;MACP,OAAO,IAAI;IACb;MACE,MAAM,IAAIC,wBAAgB,CACxB,gDACF,CAAC;EACL;AACF,CAAC;;AAED;AAAAP,OAAA,CAAAK,aAAA,GAAAA,aAAA;AACO,MAAMG,wBAAwB,GAAIN,GAAW,IAAK;EACvD,QAAQA,GAAG,CAACI,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;IACrB,KAAK,KAAK;MACR,OAAO,EAAE;IACX,KAAK,KAAK;MACR,OAAO,EAAE;IACX,KAAK,KAAK;MACR,OAAO,EAAE;IACX;MACE,MAAM,IAAIC,wBAAgB,CACxB,gDACF,CAAC;EACL;AACF,CAAC;AAACP,OAAA,CAAAQ,wBAAA,GAAAA,wBAAA"}
1
+ {"version":3,"names":["_errors","require","supportedAlgorithms","exports","isAlgSupported","alg","includes","toUpperCase","getKtyFromAlg","slice","JOSENotSupported","getAlgFromKey","_ref","kty","crv","getAlgFromEllipticCurveKey","JSON","stringify","getCoordinateOctetLength"],"sourceRoot":"../../src","sources":["algorithms.ts"],"mappings":";;;;;;AACA,IAAAA,OAAA,GAAAC,OAAA;AAEO,MAAMC,mBAAmB,GAAG,CACjC,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,CACC;AAACC,OAAA,CAAAD,mBAAA,GAAAA,mBAAA;AAGJ,MAAME,cAAc,GAAIC,GAAW,IACvCH,mBAAmB,CAAyBI,QAAQ,CAACD,GAAG,CAACE,WAAW,CAAC,CAAC,CAAC;AAACJ,OAAA,CAAAC,cAAA,GAAAA,cAAA;AAEpE,MAAMI,aAAa,GAAIH,GAAW,IAAK;EAC5C,QAAQA,GAAG,CAACI,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;IACrB,KAAK,IAAI;IACT,KAAK,IAAI;MACP,OAAO,KAAK;IACd,KAAK,IAAI;MACP,OAAO,IAAI;IACb;MACE,MAAM,IAAIC,wBAAgB,CACxB,gDACF,CAAC;EACL;AACF,CAAC;AAACP,OAAA,CAAAK,aAAA,GAAAA,aAAA;AAEK,MAAMG,aAAa,GAAGC,IAAA,IAAgD;EAAA,IAA/C;IAAEC,GAAG;IAAER,GAAG;IAAES;EAAS,CAAC,GAAAF,IAAA;EAClD,IAAIC,GAAG,KAAK,KAAK,IAAIR,GAAG,IAAID,cAAc,CAACC,GAAG,CAAC,EAAE;IAC/C,OAAOA,GAAG;EACZ,CAAC,MAAM,IAAIQ,GAAG,KAAK,IAAI,EAAE;IACvB,OAAOE,0BAA0B,CAACD,GAAG,CAAC;EACxC;EAEA,MAAM,IAAIJ,wBAAgB,CACvB,iDAAgDM,IAAI,CAACC,SAAS,CAAC;IAC9DJ,GAAG;IACHR,GAAG;IACHS;EACF,CAAC,CAAE,EACL,CAAC;AACH,CAAC;AAACX,OAAA,CAAAQ,aAAA,GAAAA,aAAA;AAEF,MAAMI,0BAA0B,GAAID,GAAe,IAAyB;EAC1E,QAAQA,GAAG;IACT,KAAK,OAAO;MACV,OAAO,OAAO;IAChB,KAAK,OAAO;MACV,OAAO,OAAO;IAChB,KAAK,OAAO;IACZ,KAAK,OAAO;MAAE;MACZ,OAAO,OAAO;IAEhB;MACE,MAAM,IAAIJ,wBAAgB,CACvB,sDAAqDI,GAAI,GAC5D,CAAC;EACL;AACF,CAAC;;AAED;AACO,MAAMI,wBAAwB,GAAIb,GAAW,IAAK;EACvD,QAAQA,GAAG,CAACI,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;IACrB,KAAK,KAAK;MACR,OAAO,EAAE;IACX,KAAK,KAAK;MACR,OAAO,EAAE;IACX,KAAK,KAAK;MACR,OAAO,EAAE;IACX;MACE,MAAM,IAAIC,wBAAgB,CACxB,gDACF,CAAC;EACL;AACF,CAAC;AAACP,OAAA,CAAAe,wBAAA,GAAAA,wBAAA"}
@@ -11,12 +11,18 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
11
11
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
12
12
  /** Generic class for JWT producing. */
13
13
  class ProduceJWT {
14
+ _payload = {};
15
+
14
16
  /** @param payload The JWT Claims Set object. */
15
- constructor(payload) {
17
+ setPayload(payload) {
16
18
  if (!(0, _is_object.default)(payload)) {
17
19
  throw new TypeError('JWT Claims Set MUST be an object');
18
20
  }
19
- this._payload = payload;
21
+ this._payload = {
22
+ ...this._payload,
23
+ ...payload
24
+ };
25
+ return this;
20
26
  }
21
27
 
22
28
  /**
@@ -1 +1 @@
1
- {"version":3,"names":["_is_object","_interopRequireDefault","require","_secs","_interopRequireWildcard","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","default","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","ProduceJWT","constructor","payload","isObject","TypeError","_payload","setIssuer","issuer","iss","setSubject","subject","sub","setAudience","audience","aud","setJti","jwtId","jti","setNotBefore","input","nbf","epoch","Date","secs","setExpirationTime","exp","setIssuedAt","iat","exports"],"sourceRoot":"../../../src","sources":["jwt/produce.ts"],"mappings":"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"}
1
+ {"version":3,"names":["_is_object","_interopRequireDefault","require","_secs","_interopRequireWildcard","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","default","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","ProduceJWT","_payload","setPayload","payload","isObject","TypeError","setIssuer","issuer","iss","setSubject","subject","sub","setAudience","audience","aud","setJti","jwtId","jti","setNotBefore","input","nbf","epoch","Date","secs","setExpirationTime","exp","setIssuedAt","iat","exports"],"sourceRoot":"../../../src","sources":["jwt/produce.ts"],"mappings":";;;;;;AACA,IAAAA,UAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,KAAA,GAAAC,uBAAA,CAAAF,OAAA;AAA4C,SAAAG,yBAAAC,WAAA,eAAAC,OAAA,kCAAAC,iBAAA,OAAAD,OAAA,QAAAE,gBAAA,OAAAF,OAAA,YAAAF,wBAAA,YAAAA,CAAAC,WAAA,WAAAA,WAAA,GAAAG,gBAAA,GAAAD,iBAAA,KAAAF,WAAA;AAAA,SAAAF,wBAAAM,GAAA,EAAAJ,WAAA,SAAAA,WAAA,IAAAI,GAAA,IAAAA,GAAA,CAAAC,UAAA,WAAAD,GAAA,QAAAA,GAAA,oBAAAA,GAAA,wBAAAA,GAAA,4BAAAE,OAAA,EAAAF,GAAA,UAAAG,KAAA,GAAAR,wBAAA,CAAAC,WAAA,OAAAO,KAAA,IAAAA,KAAA,CAAAC,GAAA,CAAAJ,GAAA,YAAAG,KAAA,CAAAE,GAAA,CAAAL,GAAA,SAAAM,MAAA,WAAAC,qBAAA,GAAAC,MAAA,CAAAC,cAAA,IAAAD,MAAA,CAAAE,wBAAA,WAAAC,GAAA,IAAAX,GAAA,QAAAW,GAAA,kBAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAd,GAAA,EAAAW,GAAA,SAAAI,IAAA,GAAAR,qBAAA,GAAAC,MAAA,CAAAE,wBAAA,CAAAV,GAAA,EAAAW,GAAA,cAAAI,IAAA,KAAAA,IAAA,CAAAV,GAAA,IAAAU,IAAA,CAAAC,GAAA,KAAAR,MAAA,CAAAC,cAAA,CAAAH,MAAA,EAAAK,GAAA,EAAAI,IAAA,YAAAT,MAAA,CAAAK,GAAA,IAAAX,GAAA,CAAAW,GAAA,SAAAL,MAAA,CAAAJ,OAAA,GAAAF,GAAA,MAAAG,KAAA,IAAAA,KAAA,CAAAa,GAAA,CAAAhB,GAAA,EAAAM,MAAA,YAAAA,MAAA;AAAA,SAAAf,uBAAAS,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAE5C;AACO,MAAMiB,UAAU,CAAC;EACZC,QAAQ,GAAe,CAAC,CAAC;;EAEnC;EACAC,UAAUA,CAACC,OAAmB,EAAE;IAC9B,IAAI,CAAC,IAAAC,kBAAQ,EAACD,OAAO,CAAC,EAAE;MACtB,MAAM,IAAIE,SAAS,CAAC,kCAAkC,CAAC;IACzD;IACA,IAAI,CAACJ,QAAQ,GAAG;MAAE,GAAG,IAAI,CAACA,QAAQ;MAAE,GAAGE;IAAQ,CAAC;IAChD,OAAO,IAAI;EACb;;EAEA;AACF;AACA;AACA;AACA;EACEG,SAASA,CAACC,MAAc,EAAE;IACxB,IAAI,CAACN,QAAQ,GAAG;MAAE,GAAG,IAAI,CAACA,QAAQ;MAAEO,GAAG,EAAED;IAAO,CAAC;IACjD,OAAO,IAAI;EACb;;EAEA;AACF;AACA;AACA;AACA;EACEE,UAAUA,CAACC,OAAe,EAAE;IAC1B,IAAI,CAACT,QAAQ,GAAG;MAAE,GAAG,IAAI,CAACA,QAAQ;MAAEU,GAAG,EAAED;IAAQ,CAAC;IAClD,OAAO,IAAI;EACb;;EAEA;AACF;AACA;AACA;AACA;EACEE,WAAWA,CAACC,QAA2B,EAAE;IACvC,IAAI,CAACZ,QAAQ,GAAG;MAAE,GAAG,IAAI,CAACA,QAAQ;MAAEa,GAAG,EAAED;IAAS,CAAC;IACnD,OAAO,IAAI;EACb;;EAEA;AACF;AACA;AACA;AACA;EACEE,MAAMA,CAACC,KAAa,EAAE;IACpB,IAAI,CAACf,QAAQ,GAAG;MAAE,GAAG,IAAI,CAACA,QAAQ;MAAEgB,GAAG,EAAED;IAAM,CAAC;IAChD,OAAO,IAAI;EACb;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACEE,YAAYA,CAACC,KAAsB,EAAE;IACnC,IAAI,OAAOA,KAAK,KAAK,QAAQ,EAAE;MAC7B,IAAI,CAAClB,QAAQ,GAAG;QAAE,GAAG,IAAI,CAACA,QAAQ;QAAEmB,GAAG,EAAED;MAAM,CAAC;IAClD,CAAC,MAAM;MACL,IAAI,CAAClB,QAAQ,GAAG;QACd,GAAG,IAAI,CAACA,QAAQ;QAChBmB,GAAG,EAAE,IAAAC,WAAK,EAAC,IAAIC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAAC,aAAI,EAACJ,KAAK;MACrC,CAAC;IACH;IACA,OAAO,IAAI;EACb;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACEK,iBAAiBA,CAACL,KAAsB,EAAE;IACxC,IAAI,OAAOA,KAAK,KAAK,QAAQ,EAAE;MAC7B,IAAI,CAAClB,QAAQ,GAAG;QAAE,GAAG,IAAI,CAACA,QAAQ;QAAEwB,GAAG,EAAEN;MAAM,CAAC;IAClD,CAAC,MAAM;MACL,IAAI,CAAClB,QAAQ,GAAG;QACd,GAAG,IAAI,CAACA,QAAQ;QAChBwB,GAAG,EAAE,IAAAJ,WAAK,EAAC,IAAIC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAAC,aAAI,EAACJ,KAAK;MACrC,CAAC;IACH;IACA,OAAO,IAAI;EACb;;EAEA;AACF;AACA;AACA;AACA;AACA;EACEO,WAAWA,CAACP,KAAc,EAAE;IAC1B,IAAI,OAAOA,KAAK,KAAK,WAAW,EAAE;MAChC,IAAI,CAAClB,QAAQ,GAAG;QAAE,GAAG,IAAI,CAACA,QAAQ;QAAE0B,GAAG,EAAE,IAAAN,WAAK,EAAC,IAAIC,IAAI,CAAC,CAAC;MAAE,CAAC;IAC9D,CAAC,MAAM;MACL,IAAI,CAACrB,QAAQ,GAAG;QAAE,GAAG,IAAI,CAACA,QAAQ;QAAE0B,GAAG,EAAER;MAAM,CAAC;IAClD;IACA,OAAO,IAAI;EACb;AACF;AAACS,OAAA,CAAA5B,UAAA,GAAAA,UAAA"}
@@ -15,115 +15,94 @@ var _asn = require("../utils/asn1");
15
15
  * @example Usage with a given signature
16
16
  *
17
17
  * ```js
18
- * const alg = 'RS256'
19
- * const signature = 'Axy0....'
18
+ * const crypto: Crypto = { any implementation fo Crypto interface }
20
19
  *
21
- * const jwt = new SignJWT({ 'urn:example:claim': true })
22
- * .setProtectedHeader({ alg })
20
+ * const jwt = new SignJWT(crypto)
21
+ * .setPayload({ 'urn:example:claim': true })
22
+ * .setProtectedHeader({ typ })
23
23
  * .setIssuedAt()
24
24
  * .setIssuer('urn:example:issuer')
25
25
  * .setAudience('urn:example:audience')
26
26
  * .setExpirationTime('2h')
27
- * .sign(signature)
28
27
  *
29
- * console.log(jwt)
28
+ * jwt.data()
29
+ * await jwt.sign()
30
30
  * ```
31
31
  */
32
+
32
33
  class SignJWT extends _produce.ProduceJWT {
34
+ _protectedHeader = {};
35
+ /**
36
+ * @param crypto An implementation of the crypto interface. @see utils/crypto for more.
37
+ */
38
+ constructor(crypto) {
39
+ super();
40
+ this.crypto = crypto;
41
+ }
42
+
33
43
  /**
34
44
  * Sets the JWS Protected Header on the SignJWT object.
45
+ * Any invocation overrides what's been already put in the header.
46
+ * Value for "alg" are ignored, as it will be inferred by the key used by the cryptographic context.
35
47
  *
36
- * @param protectedHeader JWS Protected Header. Must contain an "alg" (JWS Algorithm) property.
48
+ * @param protectedHeader JWS Protected Header.
37
49
  */
38
50
  setProtectedHeader(protectedHeader) {
39
- if (protectedHeader.alg && (0, _algorithms.isAlgSupported)(protectedHeader.alg)) {
40
- this._protectedHeader = protectedHeader;
41
- return this;
42
- }
43
- throw new _errors.JOSENotSupported('Unsupported "alg" value');
51
+ this._protectedHeader = protectedHeader;
52
+ return this;
44
53
  }
45
54
 
46
55
  /**
47
- * Return a JWT without signature (`header.payload`) to sign.
56
+ * Return a JWT without signature (`header.payload`).
48
57
  *
49
58
  */
50
- toSign() {
51
- if (!this._protectedHeader || !this._protectedHeader.alg) {
52
- throw new _errors.JWSInvalid('Missing signature algorithm. Specify the `alg` field');
53
- }
54
- const protectedHeader = (0, _base.encodeBase64)(JSON.stringify(this._protectedHeader));
55
- const payload = (0, _base.encodeBase64)(JSON.stringify(this._payload));
56
- if (payload && protectedHeader) {
57
- return `${protectedHeader}.${payload}`;
58
- } else {
59
- throw new _errors.JWSInvalid();
60
- }
59
+ async unsigned() {
60
+ const {
61
+ alg
62
+ } = await this.getSelectedSigningAlgorithm();
63
+ return [{
64
+ ...this._protectedHeader,
65
+ alg
66
+ }, this._payload].map(e => JSON.stringify(e)).map(_base.encodeBase64).join('.');
67
+ }
68
+ async getSelectedSigningAlgorithm() {
69
+ const publicKey = await this.crypto.getPublicKey();
70
+ const alg = (0, _algorithms.getAlgFromKey)(publicKey);
71
+ return {
72
+ kty: publicKey.kty,
73
+ alg
74
+ };
61
75
  }
62
76
 
63
77
  /**
64
- * Append signature to unsigned JWT.
65
- * For an ECDSA signature it is required that this is in ASN.1/DER encoded format.
66
- * The same format used by the TEE. Conversion to JWS is handled automatically.
78
+ * Return a signed JWT.
67
79
  *
68
- * @param jwtWithoutSignature
69
- * @param signature
70
80
  */
71
- static async appendSignature(jwtWithoutSignature, signature) {
72
- if (typeof jwtWithoutSignature !== 'string' || typeof signature !== 'string') {
73
- throw new _errors.JWTInvalid('JWS must be a string');
74
- }
75
- if (signature === '') throw new _errors.JWSInvalid('Invalid signature');
76
- const jwtDecoded = SignJWT.decodeJwtWithoutSignature(jwtWithoutSignature);
77
- const alg = jwtDecoded.header.alg;
78
- const kty = (0, _algorithms.getKtyFromAlg)(alg);
79
- if (kty === 'EC') {
80
- const encodedJws = await (0, _asn.derToJose)(signature, alg);
81
- return `${jwtWithoutSignature}.${encodedJws}`;
82
- } else {
83
- const encodedJws = (0, _base.removePadding)(signature);
84
- return `${jwtWithoutSignature}.${encodedJws}`;
85
- }
81
+ async sign() {
82
+ const unsigned = await this.unsigned();
83
+ const signature = await this.crypto.getSignature(unsigned);
84
+ const {
85
+ kty,
86
+ alg
87
+ } = await this.getSelectedSigningAlgorithm();
88
+ const encodedJws = await (kty === 'EC' ? (0, _asn.derToJose)(signature, alg) : (0, _base.removePadding)(signature));
89
+ return `${unsigned}.${encodedJws}`;
86
90
  }
87
91
 
88
92
  /**
89
- * Decodes a JWT without signature
90
- *
91
- * @param jwtWithoutSignature JWT to sign that needs to be decoded.
93
+ * Plain data of the produced JWT
92
94
  */
93
- static decodeJwtWithoutSignature(jwtWithoutSignature) {
94
- if (typeof jwtWithoutSignature !== 'string') {
95
- throw new _errors.JWTInvalid('JWT must be a string');
96
- }
97
- const {
98
- 0: encodedHeader,
99
- 1: encodedPayload,
100
- length
101
- } = jwtWithoutSignature.split('.');
102
- let header;
103
- try {
104
- let decoded = (0, _base.decodeBase64)(encodedHeader);
105
- header = JSON.parse(decoded);
106
- if (!header.alg || !(0, _algorithms.isAlgSupported)(header.alg)) {
107
- throw new _errors.JOSENotSupported('Unsupported "alg" value');
108
- }
109
- } catch {
110
- throw new _errors.JWTInvalid('Unable to decode JWT header');
111
- }
112
- if (length !== 2 || encodedPayload === '') {
113
- throw new _errors.JWTInvalid('Invalid JWT to sign');
114
- }
115
- let decodedPayload = (0, _base.decodeBase64)(encodedPayload);
116
- const payload = JSON.parse(decodedPayload);
95
+ data() {
117
96
  return {
118
- payload,
119
- header
97
+ protectedHeader: this._protectedHeader,
98
+ payload: this._payload
120
99
  };
121
100
  }
122
101
 
123
102
  /**
124
- * Decodes a JWT without signature
103
+ * Decodes a signed JWT
125
104
  *
126
- * @param jwtWithoutSignature JWT to sign that needs to be decoded.
105
+ * @param jwt JWT to sign that needs to be decoded.
127
106
  */
128
107
  static decode(jwt) {
129
108
  if (typeof jwt !== 'string') {
@@ -1 +1 @@
1
- {"version":3,"names":["_errors","require","_produce","_base","_algorithms","_asn","SignJWT","ProduceJWT","setProtectedHeader","protectedHeader","alg","isAlgSupported","_protectedHeader","JOSENotSupported","toSign","JWSInvalid","encodeBase64","JSON","stringify","payload","_payload","appendSignature","jwtWithoutSignature","signature","JWTInvalid","jwtDecoded","decodeJwtWithoutSignature","header","kty","getKtyFromAlg","encodedJws","derToJose","removePadding","encodedHeader","encodedPayload","length","split","decoded","decodeBase64","parse","decodedPayload","decode","jwt","exports"],"sourceRoot":"../../../src","sources":["jwt/sign.ts"],"mappings":"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"}
1
+ {"version":3,"names":["_errors","require","_produce","_base","_algorithms","_asn","SignJWT","ProduceJWT","_protectedHeader","constructor","crypto","setProtectedHeader","protectedHeader","unsigned","alg","getSelectedSigningAlgorithm","_payload","map","e","JSON","stringify","encodeBase64","join","publicKey","getPublicKey","getAlgFromKey","kty","sign","signature","getSignature","encodedJws","derToJose","removePadding","data","payload","decode","jwt","JWTInvalid","encodedHeader","encodedPayload","length","split","decoded","decodeBase64","parse","isAlgSupported","JOSENotSupported","decodedPayload","exports"],"sourceRoot":"../../../src","sources":["jwt/sign.ts"],"mappings":"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"}
@@ -81,14 +81,14 @@ class UnsecuredJWT extends _produce.ProduceJWT {
81
81
  try {
82
82
  let decoded = (0, _base.decodeBase64)(encodedHeader);
83
83
  header = JSON.parse(decoded);
84
- if (header.alg !== 'none') throw new Error();
84
+ if ('alg' in header && header.alg !== 'none') throw new Error();
85
85
  } catch {
86
86
  throw new _errors.JWTInvalid('Invalid Unsecured JWT');
87
87
  }
88
88
  let payload = UnsecuredJWT.decodePayload(encodedPayload, options);
89
89
  return {
90
90
  payload,
91
- header
91
+ header: JSON.parse((0, _base.decodeBase64)(encodedHeader))
92
92
  };
93
93
  }
94
94
 
@@ -1 +1 @@
1
- {"version":3,"names":["_errors","require","_jwt_claims_set","_interopRequireDefault","_produce","_base","obj","__esModule","default","UnsecuredJWT","ProduceJWT","encode","header","encodeBase64","JSON","stringify","alg","payload","_payload","decode","jwt","options","JWTInvalid","encodedHeader","encodedPayload","signature","length","split","decoded","decodeBase64","parse","Error","decodePayload","decodedPayload","jwtPayload","exports"],"sourceRoot":"../../../src","sources":["jwt/unsecured.ts"],"mappings":"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"}
1
+ {"version":3,"names":["_errors","require","_jwt_claims_set","_interopRequireDefault","_produce","_base","obj","__esModule","default","UnsecuredJWT","ProduceJWT","encode","header","encodeBase64","JSON","stringify","alg","payload","_payload","decode","jwt","options","JWTInvalid","encodedHeader","encodedPayload","signature","length","split","decoded","decodeBase64","parse","Error","decodePayload","decodedPayload","jwtPayload","exports"],"sourceRoot":"../../../src","sources":["jwt/unsecured.ts"],"mappings":"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"}
@@ -7,7 +7,7 @@ exports.WithJWKS = exports.JWK = void 0;
7
7
  var _zod = require("zod");
8
8
  /** Recognized JWS Header Parameters, any other Header Members may also be present. */
9
9
 
10
- /** Recognized Compact JWS Header Parameters, any other Header Members may also be present. */
10
+ /** JOSE Header for an unsecued JWT */
11
11
 
12
12
  /** Recognized JWE Header Parameters, any other Header members may also be present. */
13
13
 
@@ -1 +1 @@
1
- {"version":3,"names":["_zod","require","JWK","z","object","string","optional","boolean","array","d","r","t","exports","WithJWKS","jwks","keys"],"sourceRoot":"../../src","sources":["types.ts"],"mappings":"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"}
1
+ {"version":3,"names":["_zod","require","JWK","z","object","string","optional","boolean","array","d","r","t","exports","WithJWKS","jwks","keys"],"sourceRoot":"../../src","sources":["types.ts"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"names":["_algorithms","require","_proxy","_base","_errors","derToJose","asn1Signature","alg","kty","getKtyFromAlg","unpackedJws","IoReactNativeJwt","unpackBerEncodedASN1","getCoordinateOctetLength","encodedJws","removePadding","replace","JOSENotSupported","exports"],"sourceRoot":"../../../src","sources":["utils/asn1.ts"],"mappings":";;;;;;AAAA,IAAAA,WAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AACA,IAAAE,KAAA,GAAAF,OAAA;AACA,IAAAG,OAAA,GAAAH,OAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMI,SAAS,GAAG,MAAAA,CACvBC,aAAqB,EACrBC,GAAW,KACS;EACpB,MAAMC,GAAG,GAAG,IAAAC,yBAAa,EAACF,GAAG,CAAC;EAC9B,IAAIC,GAAG,KAAK,IAAI,EAAE;IAChB,MAAME,WAAW,GAAG,MAAMC,uBAAgB,CAACC,oBAAoB,CAC7DN,aAAa,EACb,IAAAO,oCAAwB,EAACN,GAAG,CAC9B,CAAC;IACD,MAAMO,UAAU,GAAG,IAAAC,mBAAa,EAACL,WAAW,CAAC,CAACM,OAAO,CACnD,iBAAiB,EACjB,EACF,CAAC;IACD,OAAOF,UAAU;EACnB,CAAC,MAAM;IACL,MAAM,IAAIG,wBAAgB,CAAC,yBAAyB,CAAC;EACvD;AACF,CAAC;AAACC,OAAA,CAAAb,SAAA,GAAAA,SAAA"}
1
+ {"version":3,"names":["_algorithms","require","_proxy","_base","_errors","derToJose","asn1Signature","alg","kty","getKtyFromAlg","unpackedJws","IoReactNativeJwt","unpackBerEncodedASN1","getCoordinateOctetLength","encodedJws","removePadding","replace","JOSENotSupported","exports"],"sourceRoot":"../../../src","sources":["utils/asn1.ts"],"mappings":";;;;;;AAAA,IAAAA,WAAA,GAAAC,OAAA;AAKA,IAAAC,MAAA,GAAAD,OAAA;AACA,IAAAE,KAAA,GAAAF,OAAA;AACA,IAAAG,OAAA,GAAAH,OAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMI,SAAS,GAAG,MAAAA,CACvBC,aAAqB,EACrBC,GAAuB,KACH;EACpB,MAAMC,GAAG,GAAG,IAAAC,yBAAa,EAACF,GAAG,CAAC;EAC9B,IAAIC,GAAG,KAAK,IAAI,EAAE;IAChB,MAAME,WAAW,GAAG,MAAMC,uBAAgB,CAACC,oBAAoB,CAC7DN,aAAa,EACb,IAAAO,oCAAwB,EAACN,GAAG,CAC9B,CAAC;IACD,MAAMO,UAAU,GAAG,IAAAC,mBAAa,EAACL,WAAW,CAAC,CAACM,OAAO,CACnD,iBAAiB,EACjB,EACF,CAAC;IACD,OAAOF,UAAU;EACnB,CAAC,MAAM;IACL,MAAM,IAAIG,wBAAgB,CAAC,yBAAyB,CAAC;EACvD;AACF,CAAC;AAACC,OAAA,CAAAb,SAAA,GAAAA,SAAA"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ //# sourceMappingURL=crypto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sourceRoot":"../../../src","sources":["utils/crypto.ts"],"mappings":""}
@@ -12,6 +12,37 @@ export const getKtyFromAlg = alg => {
12
12
  throw new JOSENotSupported('Unsupported "alg" value for a JSON Web Key Set');
13
13
  }
14
14
  };
15
+ export const getAlgFromKey = _ref => {
16
+ let {
17
+ kty,
18
+ alg,
19
+ crv
20
+ } = _ref;
21
+ if (kty === 'RSA' && alg && isAlgSupported(alg)) {
22
+ return alg;
23
+ } else if (kty === 'EC') {
24
+ return getAlgFromEllipticCurveKey(crv);
25
+ }
26
+ throw new JOSENotSupported(`Unable to determine a supported algorithm for ${JSON.stringify({
27
+ kty,
28
+ alg,
29
+ crv
30
+ })}`);
31
+ };
32
+ const getAlgFromEllipticCurveKey = crv => {
33
+ switch (crv) {
34
+ case 'P-256':
35
+ return 'ES256';
36
+ case 'P-384':
37
+ return 'ES384';
38
+ case 'P-512':
39
+ case 'P-521':
40
+ // https://github.com/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/blob/dev/src/Microsoft.IdentityModel.Tokens/JsonWebKeyECTypes.cs#L40
41
+ return 'ES512';
42
+ default:
43
+ throw new JOSENotSupported(`Unsupported "crv" value for an elliptic curve key (${crv})`);
44
+ }
45
+ };
15
46
 
16
47
  // Coordinates length in bytes: bits/8
17
48
  export const getCoordinateOctetLength = alg => {
@@ -1 +1 @@
1
- {"version":3,"names":["JOSENotSupported","supportedAlgorithms","isAlgSupported","alg","includes","toUpperCase","getKtyFromAlg","slice","getCoordinateOctetLength"],"sourceRoot":"../../src","sources":["algorithms.ts"],"mappings":"AAAA,SAASA,gBAAgB,QAAQ,gBAAgB;AAEjD,OAAO,MAAMC,mBAAmB,GAAG,CACjC,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,CACR;AAED,OAAO,MAAMC,cAAc,GAAIC,GAAW,IACxCF,mBAAmB,CAACG,QAAQ,CAACD,GAAG,CAACE,WAAW,CAAC,CAAC,CAAC;AAEjD,OAAO,MAAMC,aAAa,GAAIH,GAAW,IAAK;EAC5C,QAAQA,GAAG,CAACI,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;IACrB,KAAK,IAAI;IACT,KAAK,IAAI;MACP,OAAO,KAAK;IACd,KAAK,IAAI;MACP,OAAO,IAAI;IACb;MACE,MAAM,IAAIP,gBAAgB,CACxB,gDACF,CAAC;EACL;AACF,CAAC;;AAED;AACA,OAAO,MAAMQ,wBAAwB,GAAIL,GAAW,IAAK;EACvD,QAAQA,GAAG,CAACI,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;IACrB,KAAK,KAAK;MACR,OAAO,EAAE;IACX,KAAK,KAAK;MACR,OAAO,EAAE;IACX,KAAK,KAAK;MACR,OAAO,EAAE;IACX;MACE,MAAM,IAAIP,gBAAgB,CACxB,gDACF,CAAC;EACL;AACF,CAAC"}
1
+ {"version":3,"names":["JOSENotSupported","supportedAlgorithms","isAlgSupported","alg","includes","toUpperCase","getKtyFromAlg","slice","getAlgFromKey","_ref","kty","crv","getAlgFromEllipticCurveKey","JSON","stringify","getCoordinateOctetLength"],"sourceRoot":"../../src","sources":["algorithms.ts"],"mappings":"AACA,SAASA,gBAAgB,QAAQ,gBAAgB;AAEjD,OAAO,MAAMC,mBAAmB,GAAG,CACjC,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,CACC;AAGV,OAAO,MAAMC,cAAc,GAAIC,GAAW,IACvCF,mBAAmB,CAAyBG,QAAQ,CAACD,GAAG,CAACE,WAAW,CAAC,CAAC,CAAC;AAE1E,OAAO,MAAMC,aAAa,GAAIH,GAAW,IAAK;EAC5C,QAAQA,GAAG,CAACI,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;IACrB,KAAK,IAAI;IACT,KAAK,IAAI;MACP,OAAO,KAAK;IACd,KAAK,IAAI;MACP,OAAO,IAAI;IACb;MACE,MAAM,IAAIP,gBAAgB,CACxB,gDACF,CAAC;EACL;AACF,CAAC;AAED,OAAO,MAAMQ,aAAa,GAAGC,IAAA,IAAgD;EAAA,IAA/C;IAAEC,GAAG;IAAEP,GAAG;IAAEQ;EAAS,CAAC,GAAAF,IAAA;EAClD,IAAIC,GAAG,KAAK,KAAK,IAAIP,GAAG,IAAID,cAAc,CAACC,GAAG,CAAC,EAAE;IAC/C,OAAOA,GAAG;EACZ,CAAC,MAAM,IAAIO,GAAG,KAAK,IAAI,EAAE;IACvB,OAAOE,0BAA0B,CAACD,GAAG,CAAC;EACxC;EAEA,MAAM,IAAIX,gBAAgB,CACvB,iDAAgDa,IAAI,CAACC,SAAS,CAAC;IAC9DJ,GAAG;IACHP,GAAG;IACHQ;EACF,CAAC,CAAE,EACL,CAAC;AACH,CAAC;AAED,MAAMC,0BAA0B,GAAID,GAAe,IAAyB;EAC1E,QAAQA,GAAG;IACT,KAAK,OAAO;MACV,OAAO,OAAO;IAChB,KAAK,OAAO;MACV,OAAO,OAAO;IAChB,KAAK,OAAO;IACZ,KAAK,OAAO;MAAE;MACZ,OAAO,OAAO;IAEhB;MACE,MAAM,IAAIX,gBAAgB,CACvB,sDAAqDW,GAAI,GAC5D,CAAC;EACL;AACF,CAAC;;AAED;AACA,OAAO,MAAMI,wBAAwB,GAAIZ,GAAW,IAAK;EACvD,QAAQA,GAAG,CAACI,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;IACrB,KAAK,KAAK;MACR,OAAO,EAAE;IACX,KAAK,KAAK;MACR,OAAO,EAAE;IACX,KAAK,KAAK;MACR,OAAO,EAAE;IACX;MACE,MAAM,IAAIP,gBAAgB,CACxB,gDACF,CAAC;EACL;AACF,CAAC"}
@@ -3,12 +3,18 @@ import secs, { epoch } from '../utils/secs';
3
3
 
4
4
  /** Generic class for JWT producing. */
5
5
  export class ProduceJWT {
6
+ _payload = {};
7
+
6
8
  /** @param payload The JWT Claims Set object. */
7
- constructor(payload) {
9
+ setPayload(payload) {
8
10
  if (!isObject(payload)) {
9
11
  throw new TypeError('JWT Claims Set MUST be an object');
10
12
  }
11
- this._payload = payload;
13
+ this._payload = {
14
+ ...this._payload,
15
+ ...payload
16
+ };
17
+ return this;
12
18
  }
13
19
 
14
20
  /**
@@ -1 +1 @@
1
- {"version":3,"names":["isObject","secs","epoch","ProduceJWT","constructor","payload","TypeError","_payload","setIssuer","issuer","iss","setSubject","subject","sub","setAudience","audience","aud","setJti","jwtId","jti","setNotBefore","input","nbf","Date","setExpirationTime","exp","setIssuedAt","iat"],"sourceRoot":"../../../src","sources":["jwt/produce.ts"],"mappings":"AACA,OAAOA,QAAQ,MAAM,oBAAoB;AACzC,OAAOC,IAAI,IAAIC,KAAK,QAAQ,eAAe;;AAE3C;AACA,OAAO,MAAMC,UAAU,CAAC;EAGtB;EACAC,WAAWA,CAACC,OAAmB,EAAE;IAC/B,IAAI,CAACL,QAAQ,CAACK,OAAO,CAAC,EAAE;MACtB,MAAM,IAAIC,SAAS,CAAC,kCAAkC,CAAC;IACzD;IACA,IAAI,CAACC,QAAQ,GAAGF,OAAO;EACzB;;EAEA;AACF;AACA;AACA;AACA;EACEG,SAASA,CAACC,MAAc,EAAE;IACxB,IAAI,CAACF,QAAQ,GAAG;MAAE,GAAG,IAAI,CAACA,QAAQ;MAAEG,GAAG,EAAED;IAAO,CAAC;IACjD,OAAO,IAAI;EACb;;EAEA;AACF;AACA;AACA;AACA;EACEE,UAAUA,CAACC,OAAe,EAAE;IAC1B,IAAI,CAACL,QAAQ,GAAG;MAAE,GAAG,IAAI,CAACA,QAAQ;MAAEM,GAAG,EAAED;IAAQ,CAAC;IAClD,OAAO,IAAI;EACb;;EAEA;AACF;AACA;AACA;AACA;EACEE,WAAWA,CAACC,QAA2B,EAAE;IACvC,IAAI,CAACR,QAAQ,GAAG;MAAE,GAAG,IAAI,CAACA,QAAQ;MAAES,GAAG,EAAED;IAAS,CAAC;IACnD,OAAO,IAAI;EACb;;EAEA;AACF;AACA;AACA;AACA;EACEE,MAAMA,CAACC,KAAa,EAAE;IACpB,IAAI,CAACX,QAAQ,GAAG;MAAE,GAAG,IAAI,CAACA,QAAQ;MAAEY,GAAG,EAAED;IAAM,CAAC;IAChD,OAAO,IAAI;EACb;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACEE,YAAYA,CAACC,KAAsB,EAAE;IACnC,IAAI,OAAOA,KAAK,KAAK,QAAQ,EAAE;MAC7B,IAAI,CAACd,QAAQ,GAAG;QAAE,GAAG,IAAI,CAACA,QAAQ;QAAEe,GAAG,EAAED;MAAM,CAAC;IAClD,CAAC,MAAM;MACL,IAAI,CAACd,QAAQ,GAAG;QACd,GAAG,IAAI,CAACA,QAAQ;QAChBe,GAAG,EAAEpB,KAAK,CAAC,IAAIqB,IAAI,CAAC,CAAC,CAAC,GAAGtB,IAAI,CAACoB,KAAK;MACrC,CAAC;IACH;IACA,OAAO,IAAI;EACb;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACEG,iBAAiBA,CAACH,KAAsB,EAAE;IACxC,IAAI,OAAOA,KAAK,KAAK,QAAQ,EAAE;MAC7B,IAAI,CAACd,QAAQ,GAAG;QAAE,GAAG,IAAI,CAACA,QAAQ;QAAEkB,GAAG,EAAEJ;MAAM,CAAC;IAClD,CAAC,MAAM;MACL,IAAI,CAACd,QAAQ,GAAG;QACd,GAAG,IAAI,CAACA,QAAQ;QAChBkB,GAAG,EAAEvB,KAAK,CAAC,IAAIqB,IAAI,CAAC,CAAC,CAAC,GAAGtB,IAAI,CAACoB,KAAK;MACrC,CAAC;IACH;IACA,OAAO,IAAI;EACb;;EAEA;AACF;AACA;AACA;AACA;AACA;EACEK,WAAWA,CAACL,KAAc,EAAE;IAC1B,IAAI,OAAOA,KAAK,KAAK,WAAW,EAAE;MAChC,IAAI,CAACd,QAAQ,GAAG;QAAE,GAAG,IAAI,CAACA,QAAQ;QAAEoB,GAAG,EAAEzB,KAAK,CAAC,IAAIqB,IAAI,CAAC,CAAC;MAAE,CAAC;IAC9D,CAAC,MAAM;MACL,IAAI,CAAChB,QAAQ,GAAG;QAAE,GAAG,IAAI,CAACA,QAAQ;QAAEoB,GAAG,EAAEN;MAAM,CAAC;IAClD;IACA,OAAO,IAAI;EACb;AACF"}
1
+ {"version":3,"names":["isObject","secs","epoch","ProduceJWT","_payload","setPayload","payload","TypeError","setIssuer","issuer","iss","setSubject","subject","sub","setAudience","audience","aud","setJti","jwtId","jti","setNotBefore","input","nbf","Date","setExpirationTime","exp","setIssuedAt","iat"],"sourceRoot":"../../../src","sources":["jwt/produce.ts"],"mappings":"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"}