@schemavaults/jwt 0.6.13

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 (112) hide show
  1. package/dist/index.d.ts +2 -0
  2. package/dist/index.js +3 -0
  3. package/dist/index.js.map +1 -0
  4. package/dist/jwt/aud.d.ts +1 -0
  5. package/dist/jwt/aud.js +3 -0
  6. package/dist/jwt/aud.js.map +1 -0
  7. package/dist/jwt/decode.d.ts +22 -0
  8. package/dist/jwt/decode.js +228 -0
  9. package/dist/jwt/decode.js.map +1 -0
  10. package/dist/jwt/encrypt_decrypt_alg.d.ts +3 -0
  11. package/dist/jwt/encrypt_decrypt_alg.js +4 -0
  12. package/dist/jwt/encrypt_decrypt_alg.js.map +1 -0
  13. package/dist/jwt/expiry.d.ts +1 -0
  14. package/dist/jwt/expiry.js +2 -0
  15. package/dist/jwt/expiry.js.map +1 -0
  16. package/dist/jwt/generate.d.ts +31 -0
  17. package/dist/jwt/generate.js +188 -0
  18. package/dist/jwt/generate.js.map +1 -0
  19. package/dist/jwt/get_audience_from_token.d.ts +1 -0
  20. package/dist/jwt/get_audience_from_token.js +17 -0
  21. package/dist/jwt/get_audience_from_token.js.map +1 -0
  22. package/dist/jwt/get_keyset_id_from_token.d.ts +2 -0
  23. package/dist/jwt/get_keyset_id_from_token.js +17 -0
  24. package/dist/jwt/get_keyset_id_from_token.js.map +1 -0
  25. package/dist/jwt/index.d.ts +9 -0
  26. package/dist/jwt/index.js +9 -0
  27. package/dist/jwt/index.js.map +1 -0
  28. package/dist/jwt/iss.d.ts +1 -0
  29. package/dist/jwt/iss.js +3 -0
  30. package/dist/jwt/iss.js.map +1 -0
  31. package/dist/jwt/jwt-factory.d.ts +34 -0
  32. package/dist/jwt/jwt-factory.js +147 -0
  33. package/dist/jwt/jwt-factory.js.map +1 -0
  34. package/dist/jwt/jwt_keys/AbstractBaseKeyPairFactory.d.ts +11 -0
  35. package/dist/jwt/jwt_keys/AbstractBaseKeyPairFactory.js +26 -0
  36. package/dist/jwt/jwt_keys/AbstractBaseKeyPairFactory.js.map +1 -0
  37. package/dist/jwt/jwt_keys/ContentEncryptionKeyPairFactory.d.ts +14 -0
  38. package/dist/jwt/jwt_keys/ContentEncryptionKeyPairFactory.js +45 -0
  39. package/dist/jwt/jwt_keys/ContentEncryptionKeyPairFactory.js.map +1 -0
  40. package/dist/jwt/jwt_keys/I_JWT_Keys.d.ts +15 -0
  41. package/dist/jwt/jwt_keys/I_JWT_Keys.js +2 -0
  42. package/dist/jwt/jwt_keys/I_JWT_Keys.js.map +1 -0
  43. package/dist/jwt/jwt_keys/JWK.d.ts +2 -0
  44. package/dist/jwt/jwt_keys/JWK.js +2 -0
  45. package/dist/jwt/jwt_keys/JWK.js.map +1 -0
  46. package/dist/jwt/jwt_keys/JWKS.d.ts +4 -0
  47. package/dist/jwt/jwt_keys/JWKS.js +2 -0
  48. package/dist/jwt/jwt_keys/JWKS.js.map +1 -0
  49. package/dist/jwt/jwt_keys/JsonSerializedJwtKey.d.ts +43 -0
  50. package/dist/jwt/jwt_keys/JsonSerializedJwtKey.js +38 -0
  51. package/dist/jwt/jwt_keys/JsonSerializedJwtKey.js.map +1 -0
  52. package/dist/jwt/jwt_keys/SigningKeyPairFactory.d.ts +14 -0
  53. package/dist/jwt/jwt_keys/SigningKeyPairFactory.js +46 -0
  54. package/dist/jwt/jwt_keys/SigningKeyPairFactory.js.map +1 -0
  55. package/dist/jwt/jwt_keys/ValidJwtKeyTypes.d.ts +4 -0
  56. package/dist/jwt/jwt_keys/ValidJwtKeyTypes.js +7 -0
  57. package/dist/jwt/jwt_keys/ValidJwtKeyTypes.js.map +1 -0
  58. package/dist/jwt/jwt_keys/generate_new_jwt_keyset.d.ts +21 -0
  59. package/dist/jwt/jwt_keys/generate_new_jwt_keyset.js +110 -0
  60. package/dist/jwt/jwt_keys/generate_new_jwt_keyset.js.map +1 -0
  61. package/dist/jwt/jwt_keys/getAlgorithmForKey.d.ts +2 -0
  62. package/dist/jwt/jwt_keys/getAlgorithmForKey.js +14 -0
  63. package/dist/jwt/jwt_keys/getAlgorithmForKey.js.map +1 -0
  64. package/dist/jwt/jwt_keys/importAsymmetricJWK.d.ts +3 -0
  65. package/dist/jwt/jwt_keys/importAsymmetricJWK.js +15 -0
  66. package/dist/jwt/jwt_keys/importAsymmetricJWK.js.map +1 -0
  67. package/dist/jwt/jwt_keys/index.d.ts +13 -0
  68. package/dist/jwt/jwt_keys/index.js +12 -0
  69. package/dist/jwt/jwt_keys/index.js.map +1 -0
  70. package/dist/jwt/jwt_keys/jwt_keys.d.ts +33 -0
  71. package/dist/jwt/jwt_keys/jwt_keys.js +96 -0
  72. package/dist/jwt/jwt_keys/jwt_keys.js.map +1 -0
  73. package/dist/jwt/jwt_keys/pem-format.d.ts +17 -0
  74. package/dist/jwt/jwt_keys/pem-format.js +69 -0
  75. package/dist/jwt/jwt_keys/pem-format.js.map +1 -0
  76. package/dist/jwt/jwt_keys/raw_jwt_keys_store.d.ts +38 -0
  77. package/dist/jwt/jwt_keys/raw_jwt_keys_store.js +191 -0
  78. package/dist/jwt/jwt_keys/raw_jwt_keys_store.js.map +1 -0
  79. package/dist/jwt/jwt_keys/to_public_jwks.d.ts +6 -0
  80. package/dist/jwt/jwt_keys/to_public_jwks.js +39 -0
  81. package/dist/jwt/jwt_keys/to_public_jwks.js.map +1 -0
  82. package/dist/jwt/payload_data.d.ts +73 -0
  83. package/dist/jwt/payload_data.js +45 -0
  84. package/dist/jwt/payload_data.js.map +1 -0
  85. package/dist/jwt/sign.d.ts +23 -0
  86. package/dist/jwt/sign.js +68 -0
  87. package/dist/jwt/sign.js.map +1 -0
  88. package/dist/jwt/sign_verify_alg.d.ts +2 -0
  89. package/dist/jwt/sign_verify_alg.js +3 -0
  90. package/dist/jwt/sign_verify_alg.js.map +1 -0
  91. package/dist/jwt/verify_signature.d.ts +23 -0
  92. package/dist/jwt/verify_signature.js +86 -0
  93. package/dist/jwt/verify_signature.js.map +1 -0
  94. package/dist/utils/fromBase64UrlEncoded.d.ts +2 -0
  95. package/dist/utils/fromBase64UrlEncoded.js +5 -0
  96. package/dist/utils/fromBase64UrlEncoded.js.map +1 -0
  97. package/dist/utils/getDefaultDebugState.d.ts +2 -0
  98. package/dist/utils/getDefaultDebugState.js +7 -0
  99. package/dist/utils/getDefaultDebugState.js.map +1 -0
  100. package/dist/utils/isValidBase64UrlEncoding.d.ts +2 -0
  101. package/dist/utils/isValidBase64UrlEncoding.js +18 -0
  102. package/dist/utils/isValidBase64UrlEncoding.js.map +1 -0
  103. package/dist/utils/isValidUuid.d.ts +2 -0
  104. package/dist/utils/isValidUuid.js +4 -0
  105. package/dist/utils/isValidUuid.js.map +1 -0
  106. package/dist/utils/maybeStripQuotes.d.ts +8 -0
  107. package/dist/utils/maybeStripQuotes.js +20 -0
  108. package/dist/utils/maybeStripQuotes.js.map +1 -0
  109. package/dist/utils/toBase64UrlEncoded.d.ts +2 -0
  110. package/dist/utils/toBase64UrlEncoded.js +5 -0
  111. package/dist/utils/toBase64UrlEncoded.js.map +1 -0
  112. package/package.json +48 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"raw_jwt_keys_store.js","sourceRoot":"","sources":["../../../src/jwt/jwt_keys/raw_jwt_keys_store.ts"],"names":[],"mappings":"AAAA,OAAO,wBAAwB,MAAM,kCAAkC,CAAC;AACxE,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,EACL,0BAA0B,GAE3B,MAAM,wBAAwB,CAAC;AAChC,OAAO,WAAW,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAiBlE,MAAM,kBAAkB;IACN,WAAW,CAAS;IACpB,SAAS,CAAS;IACjB,cAAc,CAAU;IACzB,aAAa,CAAS;IAEtC,uCAAuC;IACtB,mBAAmB,CAAgB;IACnC,mBAAmB,CAAS;IAE7C,sCAAsC;IACrB,gBAAgB,CAAgB;IAChC,qBAAqB,CAAS;IAE/C,8CAA8C;IACtC,MAAM,CAAC,aAAa,CAAC,GAAyB;QACpD,MAAM,UAAU,GAAG,0BAA0B,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAC7D,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;YACxB,OAAO,CAAC,KAAK,CACX,gDAAgD,EAChD,UAAU,CAAC,KAAK,CACjB,CAAC;YACF,MAAM,IAAI,SAAS,CAAC,gDAAgD,CAAC,CAAC;QACxE,CAAC;QAED,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;YACzB,IACE,CAAC,SAAS,CAAC,WAAW,CACpB,GAAG,CAAC,KAAK,EACT,GAAG,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CACvD,EACD,CAAC;gBACD,MAAM,IAAI,SAAS,CAAC,6BAA6B,CAAC,CAAC;YACrD,CAAC;YAED,OAAO,GAAG,CAAC,KAAK,CAAC;QACnB,CAAC;aAAM,IAAI,GAAG,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;YACtC,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzC,MAAM,IAAI,SAAS,CAAC,mCAAmC,CAAC,CAAC;YAC3D,CAAC;YAED,MAAM,cAAc,GAAW,MAAM,CAAC,IAAI,CACxC,GAAG,CAAC,KAAK,EACT,WAAW,CACZ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YACnB,OAAO,kBAAkB,CAAC,aAAa,CAAC;gBACtC,MAAM,EAAE,KAAK;gBACb,KAAK,EAAE,cAAc;gBACrB,aAAa,EAAE,GAAG,CAAC,aAAa;gBAChC,QAAQ,EAAE,GAAG,CAAC,QAAQ;gBACtB,SAAS,EAAE,GAAG,CAAC,SAAS;gBACxB,WAAW,EAAE,GAAG,CAAC,WAAW;aAC7B,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CACb,0DAA0D,CAC3D,CAAC;QACJ,CAAC;IACH,CAAC;IAEO,MAAM,CAAC,eAAe,CAAC,GAAW;QACxC,OAAO,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC;IAED,YAAmB,EACjB,WAAW,EACX,SAAS,EACT,aAAa,EACb,UAAU,EACV,UAAU,EACV,OAAO,EACP,YAAY,EACZ,cAAc,GACc;QAC5B,qBAAqB;QACrB,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,SAAS,CAAC,0CAA0C,CAAC,CAAC;QAClE,CAAC;QACD,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAE3B,uBAAuB;QACvB,IACE,OAAO,WAAW,KAAK,QAAQ;YAC/B,CAAC,iBAAiB,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,OAAO,EACjD,CAAC;YACD,MAAM,IAAI,SAAS,CACjB,qDAAqD,CACtD,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAE/B,IAAI,OAAO,aAAa,KAAK,QAAQ,IAAI,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC;YAC9D,8BAA8B;YAC9B,MAAM,IAAI,SAAS,CAAC,0CAA0C,CAAC,CAAC;QAClE,CAAC;QACD,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QAEnC,0BAA0B;QAC1B,IAAI,CAAC,mBAAmB,GAAG,UAAU,EAAE,KAAK;YAC1C,CAAC,CAAC,kBAAkB,CAAC,aAAa,CAAC,UAAU,CAAC;YAC9C,CAAC,CAAC,IAAI,CAAC;QACT,IAAI,CAAC,mBAAmB,GAAG,kBAAkB,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QACxE,IAAI,CAAC,gBAAgB,GAAG,OAAO,EAAE,KAAK;YACpC,CAAC,CAAC,kBAAkB,CAAC,aAAa,CAAC,OAAO,CAAC;YAC3C,CAAC,CAAC,IAAI,CAAC;QACT,IAAI,CAAC,qBAAqB,GAAG,kBAAkB,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;QAE5E,mFAAmF;QACnF,IAAI,CAAC,cAAc,GAAG,cAAc,IAAI,KAAK,CAAC;QAC9C,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,6DAA6D;YAC7D,IAAI,CAAC,IAAI,CAAC,mBAAmB,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACxD,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;YAC7D,CAAC;QACH,CAAC;QAED,gEAAgE;QAChE,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;QAC5D,CAAC;aAAM,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC;YACvC,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IAED,oDAAoD;IACpD,IAAW,UAAU;QACnB,OAAO,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC;IAC1C,CAAC;IAED,yCAAyC;IACzC,IAAW,UAAU;QACnB,OAAO,IAAI,CAAC,mBAAmB,CAAC;IAClC,CAAC;IAED,iDAAiD;IACjD,IAAW,OAAO;QAChB,OAAO,IAAI,CAAC,gBAAgB,CAAC;IAC/B,CAAC;IAED,2CAA2C;IAC3C,IAAW,YAAY;QACrB,OAAO,IAAI,CAAC,qBAAqB,CAAC;IACpC,CAAC;IAED,IAAW,oBAAoB;QAC7B,OAAO,IAAI,CAAC,UAAU;YACpB,CAAC,CAAC,kBAAkB,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC;YACrD,CAAC,CAAC,IAAI,CAAC;IACX,CAAC;IAED,IAAW,oBAAoB;QAC7B,OAAO,kBAAkB,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC7D,CAAC;IAED,IAAW,sBAAsB;QAC/B,OAAO,kBAAkB,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC/D,CAAC;IAED,IAAW,iBAAiB;QAC1B,OAAO,IAAI,CAAC,OAAO;YACjB,CAAC,CAAC,kBAAkB,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC;YAClD,CAAC,CAAC,IAAI,CAAC;IACX,CAAC;IAED,IAAW,eAAe;QACxB,MAAM,KAAK,GAAkB,IAAI,CAAC,UAAU,CAAC;QAC7C,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO;YACL,MAAM,EAAE,KAAK;YACb,KAAK;YACL,aAAa,EAAE,QAAQ;YACvB,QAAQ,EAAE,YAAY;YACtB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,WAAW,EAAE,IAAI,CAAC,WAAW;SAC9B,CAAC;IACJ,CAAC;IAED,IAAW,eAAe;QACxB,MAAM,KAAK,GAAW,IAAI,CAAC,UAAU,CAAC;QACtC,OAAO;YACL,MAAM,EAAE,KAAK;YACb,KAAK;YACL,aAAa,EAAE,SAAS,EAAE,sDAAsD;YAChF,QAAQ,EAAE,YAAY;YACtB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,WAAW,EAAE,IAAI,CAAC,WAAW;SAC9B,CAAC;IACJ,CAAC;IAED,IAAW,YAAY;QACrB,MAAM,KAAK,GAAkB,IAAI,CAAC,OAAO,CAAC;QAC1C,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO;YACL,MAAM,EAAE,KAAK;YACb,KAAK;YACL,aAAa,EAAE,SAAS;YACxB,QAAQ,EAAE,SAAS;YACnB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,WAAW,EAAE,IAAI,CAAC,WAAW;SAC9B,CAAC;IACJ,CAAC;IAED,IAAW,iBAAiB;QAC1B,MAAM,KAAK,GAAW,IAAI,CAAC,YAAY,CAAC;QACxC,OAAO;YACL,MAAM,EAAE,KAAK;YACb,KAAK;YACL,aAAa,EAAE,QAAQ;YACvB,QAAQ,EAAE,cAAc;YACxB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,WAAW,EAAE,IAAI,CAAC,WAAW;SAC9B,CAAC;IACJ,CAAC;IAEM,kBAAkB;QACvB,MAAM,IAAI,GAA2B;YACnC,IAAI,CAAC,eAAe;YACpB,IAAI,CAAC,iBAAiB;SACvB,CAAC;QACF,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,eAAgB,CAAC,CAAC;QACnC,CAAC;QACD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAa,CAAC,CAAC;QAChC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAED,eAAe,kBAAkB,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { I_JWT_Keys } from "../../jwt/jwt_keys";
2
+ import { type JWK } from "jose";
3
+ export declare function to_public_jwks(active_keysets: I_JWT_Keys | readonly I_JWT_Keys[]): Promise<{
4
+ keys: readonly JWK[];
5
+ }>;
6
+ export default to_public_jwks;
@@ -0,0 +1,39 @@
1
+ import { exportJWK } from "jose";
2
+ import getAlgorithmForKey from "./getAlgorithmForKey";
3
+ export async function to_public_jwks(active_keysets) {
4
+ const keysets = Array.isArray(active_keysets)
5
+ ? active_keysets
6
+ : [active_keysets];
7
+ const output_jwks = [];
8
+ for (const keyset of keysets) {
9
+ const keyset_id = keyset.keyset_id;
10
+ if (keyset.keyset_expiry && keyset.keyset_expiry < Date.now()) {
11
+ // don't use any keys from this expired keyset
12
+ continue;
13
+ }
14
+ const keys_in_set = keyset.listSerializedKeys();
15
+ for (const key of keys_in_set) {
16
+ const key_type = key.key_type;
17
+ if (key_type !== "decryption" && key_type !== "verification") {
18
+ continue; // Skip keys that are not decryption or verification keys
19
+ }
20
+ if (key.keyset_id !== keyset_id) {
21
+ throw new Error(`Keyset '${keyset_id}' contains a key that is not part of it!`);
22
+ }
23
+ const jose_activated_key = await keyset[`${key_type}_key`];
24
+ const alg = getAlgorithmForKey(key);
25
+ const jwk = await exportJWK(jose_activated_key);
26
+ output_jwks.push({
27
+ ...jwk,
28
+ kid: `${keyset_id}-${key.key_type}`,
29
+ alg,
30
+ });
31
+ continue;
32
+ }
33
+ }
34
+ return {
35
+ keys: output_jwks,
36
+ };
37
+ }
38
+ export default to_public_jwks;
39
+ //# sourceMappingURL=to_public_jwks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"to_public_jwks.js","sourceRoot":"","sources":["../../../src/jwt/jwt_keys/to_public_jwks.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAY,MAAM,MAAM,CAAC;AAC3C,OAAO,kBAAkB,MAAM,sBAAsB,CAAC;AAEtD,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,cAAkD;IAElD,MAAM,OAAO,GAA0B,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC;QAClE,CAAC,CAAC,cAAc;QAChB,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC;IAErB,MAAM,WAAW,GAAU,EAAE,CAAC;IAE9B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,SAAS,GAAW,MAAM,CAAC,SAAS,CAAC;QAE3C,IAAI,MAAM,CAAC,aAAa,IAAI,MAAM,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;YAC9D,8CAA8C;YAC9C,SAAS;QACX,CAAC;QAED,MAAM,WAAW,GACf,MAAM,CAAC,kBAAkB,EAAE,CAAC;QAC9B,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;YAC9B,MAAM,QAAQ,GAAe,GAAG,CAAC,QAAQ,CAAC;YAC1C,IAAI,QAAQ,KAAK,YAAY,IAAI,QAAQ,KAAK,cAAc,EAAE,CAAC;gBAC7D,SAAS,CAAC,yDAAyD;YACrE,CAAC;YACD,IAAI,GAAG,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;gBAChC,MAAM,IAAI,KAAK,CACb,WAAW,SAAS,0CAA0C,CAC/D,CAAC;YACJ,CAAC;YACD,MAAM,kBAAkB,GAAc,MAAM,MAAM,CAAC,GAAG,QAAQ,MAAM,CAAC,CAAC;YAEtE,MAAM,GAAG,GAAW,kBAAkB,CAAC,GAAG,CAAC,CAAC;YAE5C,MAAM,GAAG,GAAQ,MAAM,SAAS,CAAC,kBAAkB,CAAC,CAAC;YACrD,WAAW,CAAC,IAAI,CAAC;gBACf,GAAG,GAAG;gBACN,GAAG,EAAE,GAAG,SAAS,IAAI,GAAG,CAAC,QAAQ,EAAE;gBACnC,GAAG;aACJ,CAAC,CAAC;YACH,SAAS;QACX,CAAC;IACH,CAAC;IAED,OAAO;QACL,IAAI,EAAE,WAAW;KAClB,CAAC;AACJ,CAAC;AAED,eAAe,cAAc,CAAC"}
@@ -0,0 +1,73 @@
1
+ import { z } from "zod";
2
+ export declare const jwtPayloadSchema: z.ZodEffects<z.ZodObject<{
3
+ sub: z.ZodString;
4
+ uid: z.ZodString;
5
+ email: z.ZodString;
6
+ email_verified: z.ZodBoolean;
7
+ aud: z.ZodUnion<[z.ZodString, z.ZodLiteral<"schemavaults-registry">, z.ZodLiteral<"schemavaults-auth">, z.ZodLiteral<"schemavaults-mail">]>;
8
+ app: z.ZodUnion<readonly [z.ZodString, z.ZodEffects<z.ZodString, "schemavaults-auth" | "schemavaults-mail" | "schemavaults-web" | "schemavaults-cli", string>]>;
9
+ admin: z.ZodBoolean;
10
+ disabled: z.ZodBoolean;
11
+ created_at: z.ZodEffects<z.ZodNumber, number, number>;
12
+ sig: z.ZodString;
13
+ iss: z.ZodLiteral<"schemavaults-auth">;
14
+ env: z.ZodEnum<["development", "staging", "test", "production"]>;
15
+ orgs: z.ZodReadonly<z.ZodArray<z.ZodEffects<z.ZodString, string, string>, "many">>;
16
+ }, "strict", z.ZodTypeAny, {
17
+ sub: string;
18
+ uid: string;
19
+ email: string;
20
+ email_verified: boolean;
21
+ aud: string;
22
+ app: string;
23
+ admin: boolean;
24
+ disabled: boolean;
25
+ created_at: number;
26
+ sig: string;
27
+ iss: "schemavaults-auth";
28
+ env: "development" | "staging" | "test" | "production";
29
+ orgs: readonly string[];
30
+ }, {
31
+ sub: string;
32
+ uid: string;
33
+ email: string;
34
+ email_verified: boolean;
35
+ aud: string;
36
+ app: string;
37
+ admin: boolean;
38
+ disabled: boolean;
39
+ created_at: number;
40
+ sig: string;
41
+ iss: "schemavaults-auth";
42
+ env: "development" | "staging" | "test" | "production";
43
+ orgs: readonly string[];
44
+ }>, {
45
+ sub: string;
46
+ uid: string;
47
+ email: string;
48
+ email_verified: boolean;
49
+ aud: string;
50
+ app: string;
51
+ admin: boolean;
52
+ disabled: boolean;
53
+ created_at: number;
54
+ sig: string;
55
+ iss: "schemavaults-auth";
56
+ env: "development" | "staging" | "test" | "production";
57
+ orgs: readonly string[];
58
+ }, {
59
+ sub: string;
60
+ uid: string;
61
+ email: string;
62
+ email_verified: boolean;
63
+ aud: string;
64
+ app: string;
65
+ admin: boolean;
66
+ disabled: boolean;
67
+ created_at: number;
68
+ sig: string;
69
+ iss: "schemavaults-auth";
70
+ env: "development" | "staging" | "test" | "production";
71
+ orgs: readonly string[];
72
+ }>;
73
+ export type CustomJWTPayload = z.infer<typeof jwtPayloadSchema>;
@@ -0,0 +1,45 @@
1
+ import { z } from "zod";
2
+ import { REFRESH_TOKEN_AUDIENCE } from "./aud";
3
+ import { appIdSchema, schemaVaultsAppEnvironmentSchema, } from "@schemavaults/app-definitions";
4
+ import { audienceRefSchema, organizationIdSchema } from "@schemavaults/auth-common";
5
+ // Data to hold in the JWT
6
+ export const jwtPayloadSchema = z
7
+ .object({
8
+ uid: z.string().uuid(),
9
+ sub: z.string().uuid(),
10
+ email: z.string().email(),
11
+ email_verified: z.boolean(),
12
+ aud: audienceRefSchema, // Backend resource API UUID, either auth server url or a registered api server's unique UUID
13
+ app: appIdSchema, // Frontend client app UUID, either auth server url or a registered app's unique UUID
14
+ admin: z.boolean(),
15
+ disabled: z.boolean(),
16
+ created_at: z.number().refine(
17
+ // What time the user was created at
18
+ (creation_time) => {
19
+ return (creation_time <= Date.now());
20
+ }, "Creation time must not be in the future"),
21
+ sig: z.string().min(32).max(4096),
22
+ iss: z.literal(REFRESH_TOKEN_AUDIENCE),
23
+ env: schemaVaultsAppEnvironmentSchema,
24
+ orgs: organizationIdSchema.array().readonly(),
25
+ })
26
+ .required({
27
+ uid: true,
28
+ sub: true,
29
+ email: true,
30
+ email_verified: true,
31
+ aud: true,
32
+ app: true,
33
+ admin: true,
34
+ disabled: true,
35
+ created_at: true,
36
+ sig: true,
37
+ iss: true,
38
+ env: true,
39
+ orgs: true,
40
+ })
41
+ .strict()
42
+ .refine((jwt_payload) => {
43
+ return jwt_payload.sub === jwt_payload.uid;
44
+ }, "Token subject does not match user ID");
45
+ //# sourceMappingURL=payload_data.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payload_data.js","sourceRoot":"","sources":["../../src/jwt/payload_data.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,sBAAsB,EAAE,MAAM,OAAO,CAAC;AAC/C,OAAO,EACL,WAAW,EACX,gCAAgC,GACjC,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEpF,0BAA0B;AAC1B,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC;KAC9B,MAAM,CAAC;IACN,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE;IACtB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE;IACtB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE;IACzB,cAAc,EAAE,CAAC,CAAC,OAAO,EAAE;IAC3B,GAAG,EAAE,iBAAiB,EAAE,6FAA6F;IACrH,GAAG,EAAE,WAAW,EAAE,qFAAqF;IACvG,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE;IAClB,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE;IACrB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM;IAC3B,oCAAoC;IACpC,CAAC,aAAa,EAAW,EAAE;QACzB,OAAO,CAAC,aAAa,IAAI,IAAI,CAAC,GAAG,EAAE,CAAmB,CAAC;IACzD,CAAC,EACD,yCAAyC,CAC1C;IACD,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;IACjC,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,sBAAsB,CAAC;IACtC,GAAG,EAAE,gCAAgC;IACrC,IAAI,EAAE,oBAAoB,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE;CAC9C,CAAC;KACD,QAAQ,CAAC;IACR,GAAG,EAAE,IAAI;IACT,GAAG,EAAE,IAAI;IACT,KAAK,EAAE,IAAI;IACX,cAAc,EAAE,IAAI;IACpB,GAAG,EAAE,IAAI;IACT,GAAG,EAAE,IAAI;IACT,KAAK,EAAE,IAAI;IACX,QAAQ,EAAE,IAAI;IACd,UAAU,EAAE,IAAI;IAChB,GAAG,EAAE,IAAI;IACT,GAAG,EAAE,IAAI;IACT,GAAG,EAAE,IAAI;IACT,IAAI,EAAE,IAAI;CACX,CAAC;KACD,MAAM,EAAE;KACR,MAAM,CAAC,CAAC,WAAW,EAAE,EAAE;IACtB,OAAO,WAAW,CAAC,GAAG,KAAK,WAAW,CAAC,GAAG,CAAC;AAC7C,CAAC,EAAE,sCAAsC,CAAC,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { type CryptoKey } from "jose";
2
+ import JWT_Keys from "./jwt_keys";
3
+ import type { AuthTokenTypes, OrganizationID } from "@schemavaults/auth-common";
4
+ import type { SchemaVaultsAppEnvironment } from "@schemavaults/app-definitions";
5
+ interface BaseSignJSONWebTokenInputOptions<TokenType extends AuthTokenTypes> {
6
+ iat: number;
7
+ uid: string;
8
+ email: string;
9
+ audience: string;
10
+ type: TokenType;
11
+ env: SchemaVaultsAppEnvironment;
12
+ orgs: readonly OrganizationID[];
13
+ }
14
+ interface SignJSONWebTokenInputWithAllKeysOptions<TokenType extends AuthTokenTypes> extends BaseSignJSONWebTokenInputOptions<TokenType> {
15
+ jwt_keys: JWT_Keys;
16
+ }
17
+ interface SignJSONWebTokenInputWithSigningCryptoKeyOptions<TokenType extends AuthTokenTypes> extends BaseSignJSONWebTokenInputOptions<TokenType> {
18
+ signing_key: CryptoKey;
19
+ keyset_id: string;
20
+ }
21
+ export type SignJSONWebTokenInputOptions<TokenType extends AuthTokenTypes> = SignJSONWebTokenInputWithAllKeysOptions<TokenType> | SignJSONWebTokenInputWithSigningCryptoKeyOptions<TokenType>;
22
+ export declare function signJWT<TokenType extends AuthTokenTypes>(opts: SignJSONWebTokenInputOptions<TokenType>): Promise<string>;
23
+ export {};
@@ -0,0 +1,68 @@
1
+ import { SignJWT } from "jose";
2
+ import JWT_Keys from "./jwt_keys";
3
+ import { issuer } from "./iss";
4
+ import { getExpiryDurationString } from "./expiry";
5
+ import signAndVerifyAlg from "./sign_verify_alg";
6
+ import isValidUuid from "../utils/isValidUuid";
7
+ export async function signJWT(opts) {
8
+ const type = opts.type;
9
+ const uid = opts.uid;
10
+ const sub = uid;
11
+ const orgs = opts.orgs;
12
+ if (typeof uid !== "string" || typeof sub !== "string" || uid !== sub) {
13
+ throw new Error("uid and sub must be defined and equal strings");
14
+ }
15
+ const env = opts.env;
16
+ let private_signing_key;
17
+ let keyset_id;
18
+ try {
19
+ if ("jwt_keys" in opts && opts.jwt_keys instanceof JWT_Keys) {
20
+ const jwt_keys = opts.jwt_keys;
21
+ const private_key_promise = jwt_keys.signing_key;
22
+ if (!private_key_promise) {
23
+ throw new Error("Failed to load private signing key from key store!");
24
+ }
25
+ private_signing_key = await private_key_promise;
26
+ keyset_id = jwt_keys.keyset_id;
27
+ }
28
+ else if ("signing_key" in opts) {
29
+ private_signing_key = opts.signing_key;
30
+ keyset_id = opts.keyset_id;
31
+ }
32
+ else {
33
+ throw new Error("Neither JWT keys nor signing key provided!");
34
+ }
35
+ }
36
+ catch (e) {
37
+ console.error("Failed to load private signing key from key store or input options: ", e);
38
+ throw new Error("Failed to load private signing key from key store or input options!");
39
+ }
40
+ if (!isValidUuid(keyset_id)) {
41
+ throw new Error("Invalid keyset ID provided!");
42
+ }
43
+ const signaturePayload = {
44
+ sub,
45
+ uid,
46
+ type,
47
+ env,
48
+ orgs
49
+ };
50
+ try {
51
+ return await new SignJWT(signaturePayload)
52
+ .setProtectedHeader({
53
+ alg: signAndVerifyAlg,
54
+ keyset_id,
55
+ kid: `${keyset_id}-verification` // the key needed for verification
56
+ })
57
+ .setAudience(opts.audience)
58
+ .setIssuedAt(opts.iat)
59
+ .setIssuer(issuer)
60
+ .setExpirationTime(getExpiryDurationString(type))
61
+ .sign(private_signing_key);
62
+ }
63
+ catch (e) {
64
+ console.error("Failed to sign JWT: ", e);
65
+ throw new Error("Failed to sign JWT!");
66
+ }
67
+ }
68
+ //# sourceMappingURL=sign.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sign.js","sourceRoot":"","sources":["../../src/jwt/sign.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmC,OAAO,EAAE,MAAM,MAAM,CAAC;AAChE,OAAO,QAAQ,MAAM,YAAY,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;AAGnD,OAAO,gBAAgB,MAAM,mBAAmB,CAAC;AACjD,OAAO,WAAW,MAAM,qBAAqB,CAAC;AA+B9C,MAAM,CAAC,KAAK,UAAU,OAAO,CAC3B,IAA6C;IAE7C,MAAM,IAAI,GAAc,IAAI,CAAC,IAAI,CAAC;IAClC,MAAM,GAAG,GAAW,IAAI,CAAC,GAAG,CAAC;IAC7B,MAAM,GAAG,GAAW,GAAG,CAAC;IACxB,MAAM,IAAI,GAAsB,IAAI,CAAC,IAAI,CAAC;IAE1C,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,GAAG,EAAE,CAAC;QACtE,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;IACnE,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;IAGrB,IAAI,mBAA8B,CAAC;IACnC,IAAI,SAAiB,CAAC;IACtB,IAAI,CAAC;QACH,IAAI,UAAU,IAAI,IAAI,IAAI,IAAI,CAAC,QAAQ,YAAY,QAAQ,EAAE,CAAC;YAC5D,MAAM,QAAQ,GAAa,IAAI,CAAC,QAAQ,CAAC;YACzC,MAAM,mBAAmB,GAA8B,QAAQ,CAAC,WAAW,CAAC;YAC5E,IAAI,CAAC,mBAAmB,EAAE,CAAC;gBACzB,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAA;YACvE,CAAC;YACD,mBAAmB,GAAG,MAAM,mBAAmB,CAAC;YAChD,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;QACjC,CAAC;aAAM,IAAI,aAAa,IAAI,IAAI,EAAE,CAAC;YACjC,mBAAmB,GAAG,IAAI,CAAC,WAAW,CAAC;YACvC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QAC7B,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IAAC,OAAO,CAAU,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,sEAAsE,EAAE,CAAC,CAAC,CAAC;QACzF,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC,CAAC;IACzF,CAAC;IAED,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACjD,CAAC;IAED,MAAM,gBAAgB,GAAe;QACnC,GAAG;QACH,GAAG;QACH,IAAI;QACJ,GAAG;QACH,IAAI;KACL,CAAC;IAEF,IAAI,CAAC;QACH,OAAO,MAAM,IAAI,OAAO,CAAC,gBAAgB,CAAC;aACvC,kBAAkB,CAAC;YAClB,GAAG,EAAE,gBAAgB;YACrB,SAAS;YACT,GAAG,EAAE,GAAG,SAAS,eAAe,CAAC,kCAAkC;SACpE,CAAC;aACD,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC;aAC1B,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC;aACrB,SAAS,CAAC,MAAM,CAAC;aACjB,iBAAiB,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC;aAChD,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAC/B,CAAC;IAAC,OAAO,CAAU,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,sBAAsB,EAAE,CAAC,CAAC,CAAC;QACzC,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACzC,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const alg: "RS256";
2
+ export default alg;
@@ -0,0 +1,3 @@
1
+ export const alg = "RS256";
2
+ export default alg;
3
+ //# sourceMappingURL=sign_verify_alg.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sign_verify_alg.js","sourceRoot":"","sources":["../../src/jwt/sign_verify_alg.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,GAAG,GAAG,OAAgB,CAAC;AACpC,eAAe,GAAG,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { type CryptoKey } from "jose";
2
+ import { JWT_Keys } from "./jwt_keys";
3
+ import type { AuthTokenTypes } from "@schemavaults/auth-common";
4
+ import type { SchemaVaultsAppEnvironment } from "@schemavaults/app-definitions";
5
+ interface BaseVerifyJWTSignatureInputOptions<TokenType extends AuthTokenTypes> {
6
+ jwt: string;
7
+ aud: string;
8
+ iat: number;
9
+ type: TokenType;
10
+ sub: string;
11
+ uid: string;
12
+ env: SchemaVaultsAppEnvironment;
13
+ }
14
+ interface VerifyJWTSignatureInputWithAllKeysOptions<TokenType extends AuthTokenTypes> extends BaseVerifyJWTSignatureInputOptions<TokenType> {
15
+ jwt_keys: JWT_Keys;
16
+ }
17
+ interface VerifyJWTSignatureInputWithVerificationKeyOptions<TokenType extends AuthTokenTypes> extends BaseVerifyJWTSignatureInputOptions<TokenType> {
18
+ verification_key: CryptoKey;
19
+ keyset_id: string;
20
+ }
21
+ export type VerifyJWTSignatureInputOptions<TokenType extends AuthTokenTypes> = VerifyJWTSignatureInputWithAllKeysOptions<TokenType> | VerifyJWTSignatureInputWithVerificationKeyOptions<TokenType>;
22
+ export declare function verifyJWTSignature<TokenType extends AuthTokenTypes>({ jwt, ...opts }: VerifyJWTSignatureInputOptions<TokenType>): Promise<boolean>;
23
+ export {};
@@ -0,0 +1,86 @@
1
+ import { jwtVerify, decodeProtectedHeader } from "jose";
2
+ import { JWT_Keys } from "./jwt_keys";
3
+ import { issuer } from "./iss";
4
+ import isValidUuid from "../utils/isValidUuid";
5
+ import signVerifyAlg from './sign_verify_alg';
6
+ export async function verifyJWTSignature({ jwt, ...opts }) {
7
+ if (typeof opts.aud !== "string") {
8
+ console.error("Did not receive an audience option!");
9
+ return false;
10
+ }
11
+ if (!opts.sub || !opts.uid || opts.sub !== opts.uid) {
12
+ throw new Error("Invalid sub/uid field for jwt!");
13
+ }
14
+ let verification_key;
15
+ let keyset_id;
16
+ try {
17
+ if ("jwt_keys" in opts && opts.jwt_keys instanceof JWT_Keys) {
18
+ const verifierKeyPromise = opts.jwt_keys.verification_key;
19
+ verification_key = await verifierKeyPromise;
20
+ keyset_id = opts.jwt_keys.keyset_id;
21
+ }
22
+ else if ("verification_key" in opts) {
23
+ verification_key = opts.verification_key;
24
+ keyset_id = opts.keyset_id;
25
+ }
26
+ else {
27
+ throw new Error("Invalid input options, missing verification key!");
28
+ }
29
+ }
30
+ catch (e) {
31
+ console.error("Failed to retrieve verification key from key store or input options: ", e);
32
+ throw new Error("Failed to retrieve verification key from key store or input options!");
33
+ }
34
+ if (!isValidUuid(keyset_id)) {
35
+ throw new Error("Invalid keyset id!");
36
+ }
37
+ let alg;
38
+ let kid;
39
+ try {
40
+ const header = decodeProtectedHeader(jwt);
41
+ if (!header.alg || typeof header.alg !== 'string') {
42
+ throw new Error("Missing 'alg' claim in protected header!");
43
+ }
44
+ alg = header.alg;
45
+ if (!header.kid || typeof header.kid !== 'string') {
46
+ throw new Error("Missing 'kid' claim in protected header!");
47
+ }
48
+ kid = header.kid;
49
+ if (header.keyset_id !== keyset_id) {
50
+ throw new Error("Invalid keyset id; mismatch between 'keyset_id' in header and keyset ID associated with verification key!");
51
+ }
52
+ }
53
+ catch (e) {
54
+ console.error("Failed to decode protected header: ", e);
55
+ throw new Error("Failed to decode protected header!");
56
+ }
57
+ if (alg !== signVerifyAlg) {
58
+ throw new Error("Invalid algorithm; mismatch between 'alg' in header and algorithm associated with verification key!");
59
+ }
60
+ if (kid !== `${keyset_id}-verification`) {
61
+ throw new Error("Invalid key id; mismatch between 'kid' in header and key ID associated with verification key!");
62
+ }
63
+ try {
64
+ const verify_result = await jwtVerify(jwt, verification_key, {
65
+ audience: opts.aud,
66
+ issuer,
67
+ subject: opts.sub,
68
+ algorithms: [signVerifyAlg]
69
+ });
70
+ if (verify_result.payload.aud !== opts.aud) {
71
+ throw new Error("Decoded payload does not match input audience!");
72
+ }
73
+ if (verify_result.payload.iss !== issuer) {
74
+ throw new Error("Unexpected 'iss' claim in signature token!");
75
+ }
76
+ if (verify_result.payload.env !== opts.env) {
77
+ throw new Error("App environment mismatch!");
78
+ }
79
+ }
80
+ catch (e) {
81
+ console.error("Failed to verify jwt signature: ", e);
82
+ return false;
83
+ }
84
+ return true;
85
+ }
86
+ //# sourceMappingURL=verify_signature.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify_signature.js","sourceRoot":"","sources":["../../src/jwt/verify_signature.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function fromBase64UrlEncoded(base64url: string): string;
2
+ export default fromBase64UrlEncoded;
@@ -0,0 +1,5 @@
1
+ export function fromBase64UrlEncoded(base64url) {
2
+ return Buffer.from(base64url, "base64url").toString("utf8").trim();
3
+ }
4
+ export default fromBase64UrlEncoded;
5
+ //# sourceMappingURL=fromBase64UrlEncoded.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fromBase64UrlEncoded.js","sourceRoot":"","sources":["../../src/utils/fromBase64UrlEncoded.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,oBAAoB,CAAC,SAAiB;IACpD,OAAO,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;AACrE,CAAC;AAED,eAAe,oBAAoB,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { SchemaVaultsAppEnvironment } from "@schemavaults/app-definitions";
2
+ export declare function getDefaultDebugState(environment: SchemaVaultsAppEnvironment): boolean;
@@ -0,0 +1,7 @@
1
+ export function getDefaultDebugState(environment) {
2
+ if (environment === "development") {
3
+ return true;
4
+ }
5
+ return false;
6
+ }
7
+ //# sourceMappingURL=getDefaultDebugState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getDefaultDebugState.js","sourceRoot":"","sources":["../../src/utils/getDefaultDebugState.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,oBAAoB,CAClC,WAAuC;IAEvC,IAAI,WAAW,KAAK,aAAa,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function isValidBase64UrlEncoding(str: string): boolean;
2
+ export default isValidBase64UrlEncoding;
@@ -0,0 +1,18 @@
1
+ // Alternative version with more strict length validation
2
+ function isBase64UrlStrict(str) {
3
+ // Base64URL regex with optional length validation
4
+ const base64UrlRegex = /^[A-Za-z0-9_-]+$/;
5
+ if (!str || str.length === 0) {
6
+ return false;
7
+ }
8
+ // Check regex pattern
9
+ if (!base64UrlRegex.test(str)) {
10
+ return false;
11
+ }
12
+ return str.length >= 1;
13
+ }
14
+ export function isValidBase64UrlEncoding(str) {
15
+ return isBase64UrlStrict(str);
16
+ }
17
+ export default isValidBase64UrlEncoding;
18
+ //# sourceMappingURL=isValidBase64UrlEncoding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isValidBase64UrlEncoding.js","sourceRoot":"","sources":["../../src/utils/isValidBase64UrlEncoding.ts"],"names":[],"mappings":"AAAA,yDAAyD;AACzD,SAAS,iBAAiB,CAAC,GAAW;IACpC,kDAAkD;IAClD,MAAM,cAAc,GAAG,kBAAkB,CAAC;IAE1C,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,sBAAsB;IACtB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,GAAW;IAClD,OAAO,iBAAiB,CAAC,GAAG,CAAC,CAAC;AAChC,CAAC;AAED,eAAe,wBAAwB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const isValidUuid: (value: unknown) => value is string;
2
+ export default isValidUuid;
@@ -0,0 +1,4 @@
1
+ import { z } from "zod";
2
+ export const isValidUuid = (value) => z.string().uuid().safeParse(value).success;
3
+ export default isValidUuid;
4
+ //# sourceMappingURL=isValidUuid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isValidUuid.js","sourceRoot":"","sources":["../../src/utils/isValidUuid.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAAA,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,KAAc,EAAmB,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC;AACnI,eAAe,WAAW,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ *
3
+ * @param maybeQuotes A string or undefined
4
+ * @returns If the string is wrapped in quotes or whitespace, returns string without those quotes/whitespace
5
+ * @description Useful helper for parsing environment variables
6
+ */
7
+ export declare function maybeStripQuotes(maybeQuotes?: string | undefined): string | undefined;
8
+ export default maybeStripQuotes;
@@ -0,0 +1,20 @@
1
+ /**
2
+ *
3
+ * @param maybeQuotes A string or undefined
4
+ * @returns If the string is wrapped in quotes or whitespace, returns string without those quotes/whitespace
5
+ * @description Useful helper for parsing environment variables
6
+ */
7
+ export function maybeStripQuotes(maybeQuotes) {
8
+ if (!maybeQuotes)
9
+ return maybeQuotes;
10
+ const trimmed = maybeQuotes.trim();
11
+ if (trimmed.startsWith('"') && trimmed.endsWith('"')) {
12
+ return trimmed.slice(1, -1);
13
+ }
14
+ if (trimmed.startsWith("'") && trimmed.endsWith("'")) {
15
+ return trimmed.slice(1, -1);
16
+ }
17
+ return trimmed;
18
+ }
19
+ export default maybeStripQuotes;
20
+ //# sourceMappingURL=maybeStripQuotes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"maybeStripQuotes.js","sourceRoot":"","sources":["../../src/utils/maybeStripQuotes.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAC9B,WAAgC;IAEhC,IAAI,CAAC,WAAW;QAAE,OAAO,WAAW,CAAC;IACrC,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC;IACnC,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACrD,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC9B,CAAC;IACD,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACrD,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC9B,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,eAAe,gBAAgB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function toBase64UrlEncoded(utf8: string): string;
2
+ export default toBase64UrlEncoded;
@@ -0,0 +1,5 @@
1
+ export function toBase64UrlEncoded(utf8) {
2
+ return Buffer.from(utf8, "utf8").toString("base64url").trim();
3
+ }
4
+ export default toBase64UrlEncoded;
5
+ //# sourceMappingURL=toBase64UrlEncoded.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toBase64UrlEncoded.js","sourceRoot":"","sources":["../../src/utils/toBase64UrlEncoded.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,CAAC;AAChE,CAAC;AAED,eAAe,kBAAkB,CAAC"}
package/package.json ADDED
@@ -0,0 +1,48 @@
1
+ {
2
+ "name": "@schemavaults/jwt",
3
+ "description": "Utility functions for authentication and authorization for use from the auth server or a resource server",
4
+ "version": "0.6.13",
5
+ "license": "UNLICENSED",
6
+ "private": false,
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/schemavaults/auth.git",
10
+ "directory": "packages/jwt"
11
+ },
12
+ "type": "module",
13
+ "main": "dist/index.js",
14
+ "module": "dist/index.js",
15
+ "types": "dist/index.d.ts",
16
+ "dependencies": {
17
+ "zod": "3.23.8",
18
+ "jose": "6.1.3",
19
+ "@schemavaults/auth-common": "0.7.27",
20
+ "@schemavaults/app-definitions": "0.6.1"
21
+ },
22
+ "scripts": {
23
+ "build": "tsc --project tsconfig.json && tsc-alias --project tsconfig.json",
24
+ "test": "SCHEMAVAULTS_APP_ENVIRONMENT=test bun test",
25
+ "cleanup:compiled-tests-output": "find ./dist -type f \\( -name \"*.test.js\" -o -name \"*.test.js.map\" -o -name \"*.test.d.ts\" \\) -delete",
26
+ "cleanup:delete-tests-dir": "rm -rf ./dist/tests",
27
+ "cleanup": "bun run cleanup:delete-tests-dir && bun run cleanup:compiled-tests-output",
28
+ "postbuild": "bun run cleanup",
29
+ "lint": "eslint src --ext .ts,.tsx"
30
+ },
31
+ "devDependencies": {
32
+ "typescript": "5.9.3",
33
+ "bun-types": "1.3.6",
34
+ "tsc-alias": "1.8.16",
35
+ "eslint": "9.39.1",
36
+ "@eslint/js": "9.39.1",
37
+ "globals": "16.5.0",
38
+ "@typescript-eslint/eslint-plugin": "8.48.1",
39
+ "@typescript-eslint/parser": "8.48.1"
40
+ },
41
+ "browser": {
42
+ "crypto": false
43
+ },
44
+ "publishConfig": {
45
+ "access": "public"
46
+ },
47
+ "packageManager": "bun@1.3.6"
48
+ }