@opentdf/sdk 0.9.0-beta.91 → 0.9.0-beta.93

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 (182) hide show
  1. package/dist/cjs/src/access/access-fetch.js +1 -2
  2. package/dist/cjs/src/access/access-rpc.js +1 -3
  3. package/dist/cjs/src/access.js +1 -14
  4. package/dist/cjs/src/auth/auth.js +13 -10
  5. package/dist/cjs/src/auth/dpop.js +121 -0
  6. package/dist/cjs/src/auth/oidc-clientcredentials-provider.js +37 -3
  7. package/dist/cjs/src/auth/oidc-externaljwt-provider.js +37 -3
  8. package/dist/cjs/src/auth/oidc-refreshtoken-provider.js +37 -3
  9. package/dist/cjs/src/auth/oidc.js +10 -8
  10. package/dist/cjs/src/auth/providers.js +35 -12
  11. package/dist/cjs/src/crypto/index.js +16 -2
  12. package/dist/cjs/src/crypto/pemPublicToCrypto.js +17 -11
  13. package/dist/cjs/src/opentdf.js +40 -10
  14. package/dist/cjs/tdf3/index.js +4 -2
  15. package/dist/cjs/tdf3/src/assertions.js +71 -31
  16. package/dist/cjs/tdf3/src/ciphers/aes-gcm-cipher.js +1 -1
  17. package/dist/cjs/tdf3/src/ciphers/symmetric-cipher-base.js +4 -2
  18. package/dist/cjs/tdf3/src/client/index.js +23 -33
  19. package/dist/cjs/tdf3/src/crypto/crypto-utils.js +12 -5
  20. package/dist/cjs/tdf3/src/crypto/declarations.js +1 -1
  21. package/dist/cjs/tdf3/src/crypto/index.js +849 -88
  22. package/dist/cjs/tdf3/src/crypto/jose/jwt-claims-set.js +11 -0
  23. package/dist/cjs/tdf3/src/crypto/jose/validate-crit.js +8 -0
  24. package/dist/cjs/tdf3/src/crypto/jose/vendor/lib/buffer_utils.js +41 -0
  25. package/dist/cjs/tdf3/src/crypto/jose/vendor/lib/epoch.js +6 -0
  26. package/dist/cjs/tdf3/src/crypto/jose/vendor/lib/is_object.js +21 -0
  27. package/dist/cjs/tdf3/src/crypto/jose/vendor/lib/jwt_claims_set.js +112 -0
  28. package/dist/cjs/tdf3/src/crypto/jose/vendor/lib/secs.js +60 -0
  29. package/dist/cjs/tdf3/src/crypto/jose/vendor/lib/validate_crit.js +38 -0
  30. package/dist/cjs/tdf3/src/crypto/jose/vendor/util/errors.js +135 -0
  31. package/dist/cjs/tdf3/src/crypto/jwt.js +183 -0
  32. package/dist/cjs/tdf3/src/crypto/salt.js +14 -8
  33. package/dist/cjs/tdf3/src/models/encryption-information.js +17 -20
  34. package/dist/cjs/tdf3/src/models/key-access.js +43 -63
  35. package/dist/cjs/tdf3/src/tdf.js +75 -75
  36. package/dist/cjs/tdf3/src/utils/index.js +5 -39
  37. package/dist/types/src/access/access-fetch.d.ts.map +1 -1
  38. package/dist/types/src/access/access-rpc.d.ts.map +1 -1
  39. package/dist/types/src/access.d.ts +0 -5
  40. package/dist/types/src/access.d.ts.map +1 -1
  41. package/dist/types/src/auth/auth.d.ts +9 -6
  42. package/dist/types/src/auth/auth.d.ts.map +1 -1
  43. package/dist/types/src/auth/dpop.d.ts +60 -0
  44. package/dist/types/src/auth/dpop.d.ts.map +1 -0
  45. package/dist/types/src/auth/oidc-clientcredentials-provider.d.ts +3 -2
  46. package/dist/types/src/auth/oidc-clientcredentials-provider.d.ts.map +1 -1
  47. package/dist/types/src/auth/oidc-externaljwt-provider.d.ts +3 -2
  48. package/dist/types/src/auth/oidc-externaljwt-provider.d.ts.map +1 -1
  49. package/dist/types/src/auth/oidc-refreshtoken-provider.d.ts +3 -2
  50. package/dist/types/src/auth/oidc-refreshtoken-provider.d.ts.map +1 -1
  51. package/dist/types/src/auth/oidc.d.ts +6 -4
  52. package/dist/types/src/auth/oidc.d.ts.map +1 -1
  53. package/dist/types/src/auth/providers.d.ts +5 -4
  54. package/dist/types/src/auth/providers.d.ts.map +1 -1
  55. package/dist/types/src/crypto/index.d.ts +2 -1
  56. package/dist/types/src/crypto/index.d.ts.map +1 -1
  57. package/dist/types/src/crypto/pemPublicToCrypto.d.ts +18 -0
  58. package/dist/types/src/crypto/pemPublicToCrypto.d.ts.map +1 -1
  59. package/dist/types/src/opentdf.d.ts +13 -4
  60. package/dist/types/src/opentdf.d.ts.map +1 -1
  61. package/dist/types/tdf3/index.d.ts +3 -3
  62. package/dist/types/tdf3/index.d.ts.map +1 -1
  63. package/dist/types/tdf3/src/assertions.d.ts +23 -8
  64. package/dist/types/tdf3/src/assertions.d.ts.map +1 -1
  65. package/dist/types/tdf3/src/ciphers/aes-gcm-cipher.d.ts +3 -3
  66. package/dist/types/tdf3/src/ciphers/aes-gcm-cipher.d.ts.map +1 -1
  67. package/dist/types/tdf3/src/ciphers/symmetric-cipher-base.d.ts +4 -4
  68. package/dist/types/tdf3/src/ciphers/symmetric-cipher-base.d.ts.map +1 -1
  69. package/dist/types/tdf3/src/client/builders.d.ts +2 -2
  70. package/dist/types/tdf3/src/client/builders.d.ts.map +1 -1
  71. package/dist/types/tdf3/src/client/index.d.ts +6 -5
  72. package/dist/types/tdf3/src/client/index.d.ts.map +1 -1
  73. package/dist/types/tdf3/src/crypto/crypto-utils.d.ts +14 -4
  74. package/dist/types/tdf3/src/crypto/crypto-utils.d.ts.map +1 -1
  75. package/dist/types/tdf3/src/crypto/declarations.d.ts +283 -18
  76. package/dist/types/tdf3/src/crypto/declarations.d.ts.map +1 -1
  77. package/dist/types/tdf3/src/crypto/index.d.ts +105 -28
  78. package/dist/types/tdf3/src/crypto/index.d.ts.map +1 -1
  79. package/dist/types/tdf3/src/crypto/jose/jwt-claims-set.d.ts +3 -0
  80. package/dist/types/tdf3/src/crypto/jose/jwt-claims-set.d.ts.map +1 -0
  81. package/dist/types/tdf3/src/crypto/jose/validate-crit.d.ts +5 -0
  82. package/dist/types/tdf3/src/crypto/jose/validate-crit.d.ts.map +1 -0
  83. package/dist/types/tdf3/src/crypto/jose/vendor/lib/buffer_utils.d.ts +6 -0
  84. package/dist/types/tdf3/src/crypto/jose/vendor/lib/buffer_utils.d.ts.map +1 -0
  85. package/dist/types/tdf3/src/crypto/jose/vendor/lib/epoch.d.ts +3 -0
  86. package/dist/types/tdf3/src/crypto/jose/vendor/lib/epoch.d.ts.map +1 -0
  87. package/dist/types/tdf3/src/crypto/jose/vendor/lib/is_object.d.ts +3 -0
  88. package/dist/types/tdf3/src/crypto/jose/vendor/lib/is_object.d.ts.map +1 -0
  89. package/dist/types/tdf3/src/crypto/jose/vendor/lib/jwt_claims_set.d.ts +3 -0
  90. package/dist/types/tdf3/src/crypto/jose/vendor/lib/jwt_claims_set.d.ts.map +1 -0
  91. package/dist/types/tdf3/src/crypto/jose/vendor/lib/secs.d.ts +3 -0
  92. package/dist/types/tdf3/src/crypto/jose/vendor/lib/secs.d.ts.map +1 -0
  93. package/dist/types/tdf3/src/crypto/jose/vendor/lib/validate_crit.d.ts +3 -0
  94. package/dist/types/tdf3/src/crypto/jose/vendor/lib/validate_crit.d.ts.map +1 -0
  95. package/dist/types/tdf3/src/crypto/jose/vendor/util/errors.d.ts +76 -0
  96. package/dist/types/tdf3/src/crypto/jose/vendor/util/errors.d.ts.map +1 -0
  97. package/dist/types/tdf3/src/crypto/jwt.d.ts +76 -0
  98. package/dist/types/tdf3/src/crypto/jwt.d.ts.map +1 -0
  99. package/dist/types/tdf3/src/crypto/salt.d.ts +6 -1
  100. package/dist/types/tdf3/src/crypto/salt.d.ts.map +1 -1
  101. package/dist/types/tdf3/src/models/encryption-information.d.ts +4 -4
  102. package/dist/types/tdf3/src/models/encryption-information.d.ts.map +1 -1
  103. package/dist/types/tdf3/src/models/key-access.d.ts +8 -5
  104. package/dist/types/tdf3/src/models/key-access.d.ts.map +1 -1
  105. package/dist/types/tdf3/src/tdf.d.ts +8 -8
  106. package/dist/types/tdf3/src/tdf.d.ts.map +1 -1
  107. package/dist/types/tdf3/src/utils/index.d.ts +4 -3
  108. package/dist/types/tdf3/src/utils/index.d.ts.map +1 -1
  109. package/dist/web/src/access/access-fetch.js +3 -4
  110. package/dist/web/src/access/access-rpc.js +3 -5
  111. package/dist/web/src/access.js +1 -13
  112. package/dist/web/src/auth/auth.js +13 -10
  113. package/dist/web/src/auth/dpop.js +118 -0
  114. package/dist/web/src/auth/oidc-clientcredentials-provider.js +4 -3
  115. package/dist/web/src/auth/oidc-externaljwt-provider.js +4 -3
  116. package/dist/web/src/auth/oidc-refreshtoken-provider.js +4 -3
  117. package/dist/web/src/auth/oidc.js +11 -9
  118. package/dist/web/src/auth/providers.js +13 -12
  119. package/dist/web/src/crypto/index.js +4 -2
  120. package/dist/web/src/crypto/pemPublicToCrypto.js +11 -9
  121. package/dist/web/src/opentdf.js +7 -10
  122. package/dist/web/tdf3/index.js +3 -2
  123. package/dist/web/tdf3/src/assertions.js +71 -31
  124. package/dist/web/tdf3/src/ciphers/aes-gcm-cipher.js +1 -1
  125. package/dist/web/tdf3/src/ciphers/symmetric-cipher-base.js +4 -2
  126. package/dist/web/tdf3/src/client/index.js +25 -35
  127. package/dist/web/tdf3/src/crypto/crypto-utils.js +12 -5
  128. package/dist/web/tdf3/src/crypto/declarations.js +1 -1
  129. package/dist/web/tdf3/src/crypto/index.js +830 -84
  130. package/dist/web/tdf3/src/crypto/jose/jwt-claims-set.js +5 -0
  131. package/dist/web/tdf3/src/crypto/jose/validate-crit.js +3 -0
  132. package/dist/web/tdf3/src/crypto/jose/vendor/lib/buffer_utils.js +35 -0
  133. package/dist/web/tdf3/src/crypto/jose/vendor/lib/epoch.js +4 -0
  134. package/dist/web/tdf3/src/crypto/jose/vendor/lib/is_object.js +19 -0
  135. package/dist/web/tdf3/src/crypto/jose/vendor/lib/jwt_claims_set.js +107 -0
  136. package/dist/web/tdf3/src/crypto/jose/vendor/lib/secs.js +58 -0
  137. package/dist/web/tdf3/src/crypto/jose/vendor/lib/validate_crit.js +36 -0
  138. package/dist/web/tdf3/src/crypto/jose/vendor/util/errors.js +117 -0
  139. package/dist/web/tdf3/src/crypto/jwt.js +174 -0
  140. package/dist/web/tdf3/src/crypto/salt.js +13 -7
  141. package/dist/web/tdf3/src/models/encryption-information.js +11 -14
  142. package/dist/web/tdf3/src/models/key-access.js +44 -31
  143. package/dist/web/tdf3/src/tdf.js +71 -71
  144. package/dist/web/tdf3/src/utils/index.js +5 -6
  145. package/package.json +11 -4
  146. package/src/access/access-fetch.ts +2 -8
  147. package/src/access/access-rpc.ts +0 -7
  148. package/src/access.ts +0 -17
  149. package/src/auth/auth.ts +21 -12
  150. package/src/auth/dpop.ts +222 -0
  151. package/src/auth/oidc-clientcredentials-provider.ts +23 -15
  152. package/src/auth/oidc-externaljwt-provider.ts +23 -15
  153. package/src/auth/oidc-refreshtoken-provider.ts +23 -15
  154. package/src/auth/oidc.ts +21 -10
  155. package/src/auth/providers.ts +46 -29
  156. package/src/crypto/index.ts +21 -1
  157. package/src/crypto/pemPublicToCrypto.ts +11 -9
  158. package/src/opentdf.ts +19 -14
  159. package/tdf3/index.ts +32 -5
  160. package/tdf3/src/assertions.ts +99 -30
  161. package/tdf3/src/ciphers/aes-gcm-cipher.ts +7 -2
  162. package/tdf3/src/ciphers/symmetric-cipher-base.ts +7 -4
  163. package/tdf3/src/client/builders.ts +2 -2
  164. package/tdf3/src/client/index.ts +60 -59
  165. package/tdf3/src/crypto/crypto-utils.ts +15 -8
  166. package/tdf3/src/crypto/declarations.ts +338 -22
  167. package/tdf3/src/crypto/index.ts +1021 -118
  168. package/tdf3/src/crypto/jose/jwt-claims-set.ts +10 -0
  169. package/tdf3/src/crypto/jose/validate-crit.ts +9 -0
  170. package/tdf3/src/crypto/jose/vendor/lib/buffer_utils.ts +34 -0
  171. package/tdf3/src/crypto/jose/vendor/lib/epoch.ts +3 -0
  172. package/tdf3/src/crypto/jose/vendor/lib/is_object.ts +18 -0
  173. package/tdf3/src/crypto/jose/vendor/lib/jwt_claims_set.ts +106 -0
  174. package/tdf3/src/crypto/jose/vendor/lib/secs.ts +57 -0
  175. package/tdf3/src/crypto/jose/vendor/lib/validate_crit.ts +35 -0
  176. package/tdf3/src/crypto/jose/vendor/util/errors.ts +101 -0
  177. package/tdf3/src/crypto/jwt.ts +256 -0
  178. package/tdf3/src/crypto/salt.ts +16 -8
  179. package/tdf3/src/models/encryption-information.ts +14 -21
  180. package/tdf3/src/models/key-access.ts +57 -41
  181. package/tdf3/src/tdf.ts +110 -93
  182. package/tdf3/src/utils/index.ts +5 -6
@@ -1,4 +1,3 @@
1
- import * as WebCryptoService from '../crypto/index.js';
2
1
  import { SplitKey } from '../models/index.js';
3
2
  import { AesGcmCipher } from '../ciphers/aes-gcm-cipher.js';
4
3
  import { ConfigurationError } from '../../../src/errors.js';
@@ -237,12 +236,12 @@ export function base64ToBytes(str) {
237
236
  *
238
237
  * @returns {Object}:
239
238
  * {
240
- * keyForEncryption: Binary;
241
- * keyForManifest: Binary;
239
+ * keyForEncryption: KeyInfo;
240
+ * keyForManifest: KeyInfo;
242
241
  * }
243
242
  */
244
- export async function keyMiddleware() {
245
- const cipher = new AesGcmCipher(WebCryptoService);
243
+ export async function keyMiddleware(cryptoService) {
244
+ const cipher = new AesGcmCipher(cryptoService);
246
245
  const encryptionInformation = new SplitKey(cipher);
247
246
  if (!encryptionInformation?.generateKey) {
248
247
  throw new ConfigurationError('Crypto service not initialised');
@@ -250,4 +249,4 @@ export async function keyMiddleware() {
250
249
  const key = await encryptionInformation.generateKey();
251
250
  return { keyForEncryption: key, keyForManifest: key };
252
251
  }
253
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZGYzL3NyYy91dGlscy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssZ0JBQWdCLE1BQU0sb0JBQW9CLENBQUM7QUFDdkQsT0FBTyxFQUFXLFFBQVEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXZELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUV4RixPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzFELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM1QyxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFJdEUsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLEdBQUcsRUFBRTtJQUNoQyxNQUFNLFFBQVEsR0FBRyxrQkFBa0IsQ0FBQztJQUNwQyxNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM3QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDNUIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNuQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDNUIsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxRQUFR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
252
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZGYzL3NyYy91dGlscy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQVcsUUFBUSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDdkQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzVELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRTVELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRXhGLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUl0RSxNQUFNLG1CQUFtQixHQUFHLENBQUMsR0FBRyxFQUFFO0lBQ2hDLE1BQU0sUUFBUSxHQUFHLGtCQUFrQixDQUFDO0lBQ3BDLE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzdCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUM1QixNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ25CLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUM1QixLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0MsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFFTCxNQUFNLFVBQVUsV0FBVyxDQUFDLFdBQXlCO0lBQ25ELE1BQU0sU0FBUyxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQ2xDLENBQUMsV0FBVyxFQUFFLFlBQVksRUFBRSxFQUFFLENBQUMsV0FBVyxHQUFHLFlBQVksQ0FBQyxNQUFNLEVBQ2hFLENBQUMsQ0FDRixDQUFDO0lBQ0YsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUVyRCxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDZixLQUFLLE1BQU0sVUFBVSxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQ3JDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDM0MsTUFBTSxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUM7SUFDOUIsQ0FBQztJQUVELE9BQU8sa0JBQWtCLENBQUM7QUFDNUIsQ0FBQztBQUVELE1BQU0sVUFBVSxZQUFZLENBQUMsVUFBc0IsRUFBRSxNQUFjO0lBQ2pFLE9BQU8sQ0FDTCxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUM7UUFDakIsQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3QixDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzlCLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNqQyxDQUFDLENBQ0YsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLFVBQVUsWUFBWSxDQUFDLFVBQXNCLEVBQUUsTUFBYztJQUNqRSxPQUFPLFVBQVUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDNUQsQ0FBQztBQUVELE1BQU0sVUFBVSxZQUFZLENBQUMsV0FBd0IsRUFBRSxNQUFjO0lBQ25FLE1BQU0sSUFBSSxHQUFHLElBQUksUUFBUSxDQUFDLFdBQVcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbEQsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNsQyxDQUFDO0FBRUQsTUFBTSxVQUFVLGFBQWEsQ0FBQyxVQUFzQixFQUFFLEtBQWEsRUFBRSxNQUFjO0lBQ2pGLFVBQVUsQ0FBQyxNQUFNLENBQUMsR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDO0lBQ2xDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQy9DLENBQUM7QUFFRCxNQUFNLFVBQVUsYUFBYSxDQUFDLFVBQXNCLEVBQUUsS0FBYSxFQUFFLE1BQWM7SUFDakYsVUFBVSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUM7SUFDbEMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7SUFDN0MsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUM7SUFDOUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDaEQsQ0FBQztBQUVELE1BQU0sVUFBVSxZQUFZLENBQzFCLE1BQWtCLEVBQ2xCLE1BQWtCLEVBQ2xCLGNBQXNCLENBQUMsRUFDdkIsY0FBc0IsQ0FBQyxFQUN2QixZQUFvQixNQUFNLENBQUMsTUFBTTtJQUVqQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsR0FBRyxXQUFXLEVBQUUsTUFBTSxDQUFDLE1BQU0sR0FBRyxXQUFXLENBQUMsQ0FBQztJQUM5RSxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLFdBQVcsR0FBRyxNQUFNLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUM1RSxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQsOERBQThEO0FBQzlELFNBQVMsUUFBUSxDQUFDLEdBQWUsRUFBRSxRQUFnQixDQUFDLEVBQUUsTUFBYyxHQUFHLENBQUMsTUFBTTtJQUM1RSxNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDO0lBRXZCLElBQUksQ0FBQyxLQUFLLElBQUksS0FBSyxHQUFHLENBQUM7UUFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBQ25DLElBQUksQ0FBQyxHQUFHLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRztRQUFFLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFFNUMsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDO0lBQ2IsS0FBSyxJQUFJLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQ2pDLEdBQUcsSUFBSSxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsOERBQThEO0FBQzlELFNBQVMsV0FBVyxDQUFDLEdBQWUsRUFBRSxLQUFhLEVBQUUsR0FBVztJQUM5RCxJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7SUFDaEIsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztJQUVoQyxLQUFLLElBQUksQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDakMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBQyxHQUFlLEVBQUUsS0FBYSxFQUFFLEdBQVc7SUFDOUQsSUFBSSxLQUFLLEtBQUssQ0FBQyxJQUFJLEdBQUcsS0FBSyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDdEMsT0FBTyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNoQyxDQUFDO1NBQU0sQ0FBQztRQUNOLE9BQU8saUJBQWlCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNsRCxDQUFDO0FBQ0gsQ0FBQztBQUVELDZEQUE2RDtBQUM3RCxNQUFNLFVBQVUsWUFBWSxDQUMxQixNQUFrQixFQUNsQixXQUE4QixNQUFNLEVBQ3BDLEtBQUssR0FBRyxDQUFDLEVBQ1QsR0FBRyxHQUFHLE1BQU0sQ0FBQyxNQUFNO0lBRW5CLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ2QsS0FBSyxHQUFHLENBQUMsQ0FBQztJQUNaLENBQUM7SUFFRCxJQUFJLEdBQUcsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDeEIsR0FBRyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDdEIsQ0FBQztJQUVELCtFQUErRTtJQUMvRSx1QkFBdUI7SUFDdkIsSUFBSSxLQUFLLEdBQUcsTUFBTSxDQUFDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUN0RCxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRCxRQUFRLFFBQVEsRUFBRSxDQUFDO1FBQ2pCLEtBQUssS0FBSztZQUNSLE9BQU8sUUFBUSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFFdEMsS0FBSyxNQUFNLENBQUM7UUFDWixLQUFLLE9BQU87WUFDVixPQUFPLFNBQVMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBRXZDLEtBQUssUUFBUSxDQUFDO1FBQ2QsS0FBSyxRQUFRO1lBQ1gsT0FBTyxXQUFXLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztRQUV6QyxLQUFLLFFBQVE7WUFDWCxPQUFPLFdBQVcsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzNDLENBQUM7QUFDSCxDQUFDO0FBRUQsNkRBQTZEO0FBQzdELE1BQU0sVUFBVSxTQUFTLENBQUMsR0FBZSxFQUFFLEtBQWEsRUFBRSxHQUFXO0lBQ25FLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDaEMsTUFBTSxHQUFHLEdBQWEsRUFBRSxDQUFDO0lBRXpCLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQztJQUNkLE9BQU8sQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO1FBQ2YsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pCLElBQUksU0FBUyxHQUFrQixJQUFJLENBQUM7UUFDcEMsSUFBSSxnQkFBZ0IsR0FBRyxTQUFTLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFOUYsSUFBSSxDQUFDLEdBQUcsZ0JBQWdCLElBQUksR0FBRyxFQUFFLENBQUM7WUFDaEMsSUFBSSxVQUFVLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxhQUFhLENBQUM7WUFFckQsUUFBUSxnQkFBZ0IsRUFBRSxDQUFDO2dCQUN6QixLQUFLLENBQUM7b0JBQ0osSUFBSSxTQUFTLEdBQUcsSUFBSSxFQUFFLENBQUM7d0JBQ3JCLFNBQVMsR0FBRyxTQUFTLENBQUM7b0JBQ3hCLENBQUM7b0JBQ0QsTUFBTTtnQkFDUixLQUFLLENBQUM7b0JBQ0osVUFBVSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7b0JBQ3hCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7d0JBQ2pDLGFBQWEsR0FBRyxDQUFDLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxDQUFDO3dCQUNsRSxJQUFJLGFBQWEsR0FBRyxJQUFJLEVBQUUsQ0FBQzs0QkFDekIsU0FBUyxHQUFHLGFBQWEsQ0FBQzt3QkFDNUIsQ0FBQztvQkFDSCxDQUFDO29CQUNELE1BQU07Z0JBQ1IsS0FBSyxDQUFDO29CQUNKLFVBQVUsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO29CQUN4QixTQUFTLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztvQkFDdkIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7d0JBQ2hFLGFBQWE7NEJBQ1gsQ0FBQyxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxDQUFDO3dCQUNqRixJQUFJLGFBQWEsR0FBRyxLQUFLLElBQUksQ0FBQyxhQUFhLEdBQUcsTUFBTSxJQUFJLGFBQWEsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDOzRCQUNoRixTQUFTLEdBQUcsYUFBYSxDQUFDO3dCQUM1QixDQUFDO29CQUNILENBQUM7b0JBQ0QsTUFBTTtnQkFDUixLQUFLLENBQUM7b0JBQ0osVUFBVSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7b0JBQ3hCLFNBQVMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO29CQUN2QixVQUFVLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztvQkFDeEIsSUFDRSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJO3dCQUM1QixDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJO3dCQUMzQixDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQzVCLENBQUM7d0JBQ0QsYUFBYTs0QkFDWCxDQUFDLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQztnQ0FDM0IsQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUM7Z0NBQzVCLENBQUMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDO2dDQUMzQixDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsQ0FBQzt3QkFDdEIsSUFBSSxhQUFhLEdBQUcsTUFBTSxJQUFJLGFBQWEsR0FBRyxRQUFRLEVBQUUsQ0FBQzs0QkFDdkQsU0FBUyxHQUFHLGFBQWEsQ0FBQzt3QkFDNUIsQ0FBQztvQkFDSCxDQUFDO1lBQ0wsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLFNBQVMsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUN2QixvREFBb0Q7WUFDcEQsb0RBQW9EO1lBQ3BELFNBQVMsR0FBRyxNQUFNLENBQUM7WUFDbkIsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZCLENBQUM7YUFBTSxJQUFJLFNBQVMsR0FBRyxNQUFNLEVBQUUsQ0FBQztZQUM5Qix5Q0FBeUM7WUFDekMsU0FBUyxJQUFJLE9BQU8sQ0FBQztZQUNyQixHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLEtBQUssRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUM7WUFDaEQsU0FBUyxHQUFHLE1BQU0sR0FBRyxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsQ0FBQztRQUMzQyxDQUFDO1FBRUQsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNwQixDQUFDLElBQUksZ0JBQWdCLENBQUM7SUFDeEIsQ0FBQztJQUVELE9BQU8scUJBQXFCLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEMsQ0FBQztBQUVELE1BQU0sb0JBQW9CLEdBQUcsTUFBTSxDQUFDO0FBRXBDLDhEQUE4RDtBQUM5RCxTQUFTLHFCQUFxQixDQUFDLFVBQW9CO0lBQ2pELE1BQU0sR0FBRyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUM7SUFDOUIsSUFBSSxHQUFHLElBQUksb0JBQW9CLEVBQUUsQ0FBQztRQUNoQyxPQUFPLE1BQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLHNCQUFzQjtJQUNuRSxDQUFDO0lBRUQsd0RBQXdEO0lBQ3hELElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztJQUNiLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNWLE9BQU8sQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO1FBQ2YsR0FBRyxJQUFJLE1BQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsRixDQUFDO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsTUFBTSxpQkFBaUIsR0FBRyxtQkFBbUIsQ0FBQztBQUU5Qzs7Ozs7Ozs7Ozs7R0FXRztBQUNILFNBQVMsV0FBVyxDQUFDLEdBQVc7SUFDOUIsdURBQXVEO0lBQ3ZELEdBQUcsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hCLHdGQUF3RjtJQUN4RixHQUFHLEdBQUcsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNoRCw4Q0FBOEM7SUFDOUMsSUFBSSxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUM7UUFBRSxPQUFPLEVBQUUsQ0FBQztJQUM5Qix1RkFBdUY7SUFDdkYsT0FBTyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUM1QixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUNsQixDQUFDO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsTUFBTSxVQUFVLGFBQWEsQ0FBQyxHQUFXO0lBQ3ZDLE9BQU8sSUFBSSxVQUFVLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3RCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsYUFBYSxDQUFDLGFBQTRCO0lBSTlELE1BQU0sTUFBTSxHQUFHLElBQUksWUFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQy9DLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbkQsSUFBSSxDQUFDLHFCQUFxQixFQUFFLFdBQVcsRUFBRSxDQUFDO1FBQ3hDLE1BQU0sSUFBSSxrQkFBa0IsQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFDRCxNQUFNLEdBQUcsR0FBRyxNQUFNLHFCQUFxQixDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3RELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxHQUFHLEVBQUUsY0FBYyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3hELENBQUMifQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opentdf/sdk",
3
- "version": "0.9.0-beta.91",
3
+ "version": "0.9.0-beta.93",
4
4
  "description": "OpenTDF for the Web",
5
5
  "homepage": "https://github.com/opentdf/web-sdk",
6
6
  "bugs": {
@@ -48,6 +48,13 @@
48
48
  "import": "./dist/web/src/encodings/index.js"
49
49
  }
50
50
  },
51
+ "./cryptoutils": {
52
+ "default": {
53
+ "types": "./dist/types/src/crypto/index.d.ts",
54
+ "require": "./dist/cjs/src/crypto/index.js",
55
+ "import": "./dist/web/src/crypto/index.js"
56
+ }
57
+ },
51
58
  "./platform": {
52
59
  "types": "./dist/types/src/platform.d.ts",
53
60
  "require": "./dist/cjs/src/platform.js",
@@ -60,7 +67,7 @@
60
67
  }
61
68
  },
62
69
  "scripts": {
63
- "build": "npm run clean && tsc && tsc --project tsconfig.commonjs.json && ../scripts/add-module-types.sh",
70
+ "build": "npm run vendor:jose-jwt-helpers && npm run clean && tsc && tsc --project tsconfig.commonjs.json && ../scripts/add-module-types.sh",
64
71
  "build:watch": "tsc --watch",
65
72
  "clean": "rm -rf {build,coverage,dist,tests/mocha/dist}",
66
73
  "coverage:merge": "for x in mocha wtr; do cp coverage/$x/coverage-final.json coverage/$x.json; done; nyc report --reporter text --reporter lcov -t coverage --lines 75 --statements 75 --branches 70 --functions 65 --check-coverage >coverage/coverage.txt",
@@ -71,6 +78,7 @@
71
78
  "lint": "eslint ./src/**/*.ts ./tdf3/**/*.ts ./tests/**/*.ts",
72
79
  "prepack": "npm run build",
73
80
  "test": "npm run build && npm run test:with-server",
81
+ "vendor:jose-jwt-helpers": "node scripts/vendor-jose-jwt-helpers.cjs",
74
82
  "mock:platform": "npm run build && node dist/web/tests/server.js",
75
83
  "test:with-server": "node dist/web/tests/server.js & trap \"node dist/web/tests/stopServer.js\" EXIT; npm run test:mocha && npm run test:wtr && npm run test:browser && npm run coverage:merge",
76
84
  "test:browser": "npx webpack --config webpack.test.config.cjs && npx karma start karma.conf.cjs",
@@ -83,8 +91,7 @@
83
91
  "@connectrpc/connect": "^2.0.2",
84
92
  "@connectrpc/connect-web": "^2.0.2",
85
93
  "buffer-crc32": "^1.0.0",
86
- "dpop": "^1.4.1",
87
- "jose": "^6.0.8",
94
+ "jose": "6.0.8",
88
95
  "json-canonicalize": "^1.0.6",
89
96
  "uuid": "~11.1.0"
90
97
  },
@@ -1,9 +1,4 @@
1
- import {
2
- KasPublicKeyAlgorithm,
3
- KasPublicKeyInfo,
4
- noteInvalidPublicKey,
5
- OriginAllowList,
6
- } from '../access.js';
1
+ import { KasPublicKeyAlgorithm, KasPublicKeyInfo, OriginAllowList } from '../access.js';
7
2
  import { type AuthProvider } from '../auth/auth.js';
8
3
  import {
9
4
  ConfigurationError,
@@ -13,7 +8,7 @@ import {
13
8
  ServiceError,
14
9
  UnauthenticatedError,
15
10
  } from '../errors.js';
16
- import { pemToCryptoPublicKey, validateSecureUrl } from '../utils.js';
11
+ import { validateSecureUrl } from '../utils.js';
17
12
 
18
13
  export type RewrapRequest = {
19
14
  signedRequestToken: string;
@@ -194,7 +189,6 @@ export async function fetchKasPubKey(
194
189
  );
195
190
  }
196
191
  return {
197
- key: noteInvalidPublicKey(pkUrlV2, pemToCryptoPublicKey(publicKey)),
198
192
  publicKey,
199
193
  url: kasEndpoint,
200
194
  algorithm: algorithm || 'rsa:2048',
@@ -3,7 +3,6 @@ import {
3
3
  isPublicKeyAlgorithm,
4
4
  KasPublicKeyAlgorithm,
5
5
  KasPublicKeyInfo,
6
- noteInvalidPublicKey,
7
6
  OriginAllowList,
8
7
  } from '../access.js';
9
8
 
@@ -22,7 +21,6 @@ import { ListKeyAccessServersResponse } from '../platform/policy/kasregistry/key
22
21
  import {
23
22
  extractRpcErrorMessage,
24
23
  getPlatformUrlFromKasEndpoint,
25
- pemToCryptoPublicKey,
26
24
  validateSecureUrl,
27
25
  } from '../utils.js';
28
26
  import { X_REWRAP_ADDITIONAL_CONTEXT } from './constants.js';
@@ -201,7 +199,6 @@ export async function fetchKasPubKey(
201
199
  v: '2',
202
200
  });
203
201
  const result: KasPublicKeyInfo = {
204
- key: noteInvalidPublicKey(new URL(platformUrl), pemToCryptoPublicKey(publicKey)),
205
202
  publicKey,
206
203
  url: kasEndpoint,
207
204
  algorithm: algorithm || 'rsa:2048',
@@ -240,10 +237,6 @@ export async function fetchKasBasePubKey(kasEndpoint: string): Promise<KasPublic
240
237
  }
241
238
 
242
239
  const result: KasPublicKeyInfo = {
243
- key: noteInvalidPublicKey(
244
- new URL(baseKey.kas_uri),
245
- pemToCryptoPublicKey(baseKey.public_key.pem)
246
- ),
247
240
  publicKey: baseKey.public_key.pem,
248
241
  url: baseKey.kas_uri,
249
242
  algorithm: baseKey.public_key.algorithm,
package/src/access.ts CHANGED
@@ -1,5 +1,4 @@
1
1
  import { type AuthProvider } from './auth/auth.js';
2
- import { ServiceError } from './errors.js';
3
2
  import { RewrapResponse } from './platform/kas/kas_pb.js';
4
3
  import { getPlatformUrlFromKasEndpoint, validateSecureUrl } from './utils.js';
5
4
  import { base64 } from './encodings/index.js';
@@ -155,24 +154,8 @@ export type KasPublicKeyInfo = {
155
154
 
156
155
  /** The key value, encoded within a PEM envelope */
157
156
  publicKey: string;
158
-
159
- /** A subtle crypto version of the key.
160
- * This can be used for wrapping key data for key access objects (with RSA)
161
- * or to derive key data (with EC keys). */
162
- key: Promise<CryptoKey>;
163
157
  };
164
158
 
165
- export async function noteInvalidPublicKey(url: URL, r: Promise<CryptoKey>): Promise<CryptoKey> {
166
- try {
167
- return await r;
168
- } catch (e) {
169
- if (e instanceof TypeError) {
170
- throw new ServiceError(`invalid public key from [${url}]`, e);
171
- }
172
- throw e;
173
- }
174
- }
175
-
176
159
  /**
177
160
  * Fetches the key access servers for a given platform URL.
178
161
  * @param platformUrl The platform URL to fetch key access servers for.
package/src/auth/auth.ts CHANGED
@@ -1,4 +1,9 @@
1
- import { type JWTHeaderParameters, type JWTPayload, SignJWT } from 'jose';
1
+ import {
2
+ type CryptoService,
3
+ type KeyPair,
4
+ type PrivateKey,
5
+ } from '../../tdf3/src/crypto/declarations.js';
6
+ import { signJwt, type JwtHeader, type JwtPayload } from '../../tdf3/src/crypto/jwt.js';
2
7
 
3
8
  export type HttpMethod =
4
9
  | 'GET'
@@ -54,22 +59,26 @@ function getTimestampInSeconds() {
54
59
 
55
60
  /**
56
61
  * Generate a JWT (or JWS-ed object)
57
- * @param toSign the data to sign. Interpreted as JWTPayload but AFAIK this isn't required
58
- * @param privateKey an RSA key
62
+ * @param toSign the data to sign. Interpreted as JwtPayload but AFAIK this isn't required
63
+ * @param privateKey an opaque RSA private key
64
+ * @param cryptoService the crypto service to use for signing
65
+ * @param jwtProtectedHeader optional JWT header, defaults to RS256
59
66
  * @returns the signed object, with a JWS header. This may be a JWT.
60
67
  */
61
68
  export async function reqSignature(
62
69
  toSign: unknown,
63
- privateKey: CryptoKey,
64
- jwtProtectedHeader: JWTHeaderParameters = { alg: 'RS256' }
70
+ privateKey: PrivateKey,
71
+ cryptoService: CryptoService,
72
+ jwtProtectedHeader: JwtHeader = { alg: 'RS256' }
65
73
  ) {
66
74
  const now = getTimestampInSeconds();
67
75
  const anHour = 3600;
68
- return new SignJWT(toSign as JWTPayload)
69
- .setProtectedHeader(jwtProtectedHeader)
70
- .setIssuedAt(now - anHour)
71
- .setExpirationTime(now + anHour)
72
- .sign(privateKey);
76
+ const payload: JwtPayload = {
77
+ ...(toSign as JwtPayload),
78
+ iat: now - anHour,
79
+ exp: now + anHour,
80
+ };
81
+ return signJwt(cryptoService, payload, privateKey, jwtProtectedHeader);
73
82
  }
74
83
 
75
84
  /**
@@ -90,10 +99,10 @@ export type AuthProvider = {
90
99
  * using the cached refresh token, and update the auth server config with the
91
100
  * current key.
92
101
  *
93
- * @param signingKey the client signing key pair. Will be bound
102
+ * @param signingKey the client signing key pair (opaque keys). Will be bound
94
103
  * to the OIDC token and require a DPoP header, when set.
95
104
  */
96
- updateClientPublicKey(signingKey?: CryptoKeyPair): Promise<void>;
105
+ updateClientPublicKey(signingKey?: KeyPair): Promise<void>;
97
106
 
98
107
  /**
99
108
  * Augment the provided http request with custom auth info to be used by backend services.
@@ -0,0 +1,222 @@
1
+ // pulled from https://github.com/panva/dpop/tree/v1.4.1
2
+ // Modified to use CryptoService instead of crypto.subtle
3
+
4
+ import type {
5
+ CryptoService,
6
+ KeyPair,
7
+ PrivateKey,
8
+ AsymmetricSigningAlgorithm,
9
+ } from '../../tdf3/src/crypto/declarations.js';
10
+
11
+ export type JsonObject = { [Key in string]?: JsonValue };
12
+ export type JsonArray = JsonValue[];
13
+ export type JsonPrimitive = string | number | boolean | null;
14
+ export type JsonValue = JsonPrimitive | JsonObject | JsonArray;
15
+
16
+ const encoder = new TextEncoder();
17
+
18
+ function buf(input: string): Uint8Array {
19
+ return encoder.encode(input);
20
+ }
21
+
22
+ interface DPoPJwtHeaderParameters {
23
+ alg: JWSAlgorithm;
24
+ typ: string;
25
+ jwk: JsonWebKey;
26
+ }
27
+
28
+ /**
29
+ * Minimal JWT sign() implementation using CryptoService.
30
+ */
31
+ async function jwt(
32
+ header: DPoPJwtHeaderParameters,
33
+ claimsSet: Record<string, unknown>,
34
+ privateKey: PrivateKey,
35
+ cryptoService: CryptoService
36
+ ) {
37
+ const input = `${b64u(buf(JSON.stringify(header)))}.${b64u(buf(JSON.stringify(claimsSet)))}`;
38
+ const signature = await cryptoService.sign(
39
+ buf(input),
40
+ privateKey,
41
+ header.alg as AsymmetricSigningAlgorithm
42
+ );
43
+ return `${input}.${b64u(signature)}`;
44
+ }
45
+
46
+ const CHUNK_SIZE = 0x8000;
47
+ function encodeBase64Url(input: Uint8Array | ArrayBuffer) {
48
+ const bytes = input instanceof ArrayBuffer ? new Uint8Array(input) : input;
49
+
50
+ const arr = [];
51
+ for (let i = 0; i < bytes.byteLength; i += CHUNK_SIZE) {
52
+ arr.push(
53
+ String.fromCharCode.apply(null, bytes.subarray(i, i + CHUNK_SIZE) as unknown as number[])
54
+ );
55
+ }
56
+ return btoa(arr.join('')).replace(/=/g, '').replace(/\+/g, '-').replace(/\//g, '_');
57
+ }
58
+
59
+ function b64u(input: Uint8Array | ArrayBuffer) {
60
+ return encodeBase64Url(input);
61
+ }
62
+
63
+ /**
64
+ * Generates 32 random bytes and encodes them using base64url.
65
+ */
66
+ async function randomBytes(cryptoService: CryptoService) {
67
+ return b64u(await cryptoService.randomBytes(32));
68
+ }
69
+
70
+ /**
71
+ * Supported JWS `alg` Algorithm identifiers.
72
+ *
73
+ * @example PS256 CryptoKey algorithm
74
+ * ```ts
75
+ * interface Ps256Algorithm extends RsaHashedKeyAlgorithm {
76
+ * name: 'RSA-PSS'
77
+ * hash: { name: 'SHA-256' }
78
+ * }
79
+ * ```
80
+ *
81
+ * @example CryptoKey algorithm for the `ES256` JWS Algorithm Identifier
82
+ * ```ts
83
+ * interface Es256Algorithm extends EcKeyAlgorithm {
84
+ * name: 'ECDSA'
85
+ * namedCurve: 'P-256'
86
+ * }
87
+ * ```
88
+ *
89
+ * @example CryptoKey algorithm for the `RS256` JWS Algorithm Identifier
90
+ * ```ts
91
+ * interface Rs256Algorithm extends RsaHashedKeyAlgorithm {
92
+ * name: 'RSASSA-PKCS1-v1_5'
93
+ * hash: { name: 'SHA-256' }
94
+ * }
95
+ * ```
96
+ *
97
+ * @example CryptoKey algorithm for the `EdDSA` JWS Algorithm Identifier (Experimental)
98
+ *
99
+ * Runtime support for this algorithm is very limited, it depends on the [Secure Curves in the Web
100
+ * Cryptography API](https://wicg.github.io/webcrypto-secure-curves/) proposal which is yet to be
101
+ * widely adopted. If the proposal changes this implementation will follow up with a minor release.
102
+ *
103
+ * ```ts
104
+ * interface EdDSAAlgorithm extends KeyAlgorithm {
105
+ * name: 'Ed25519'
106
+ * }
107
+ * ```
108
+ */
109
+ export type JWSAlgorithm = 'PS256' | 'ES256' | 'ES384' | 'ES512' | 'RS256' | 'EdDSA';
110
+
111
+ class UnsupportedOperationError extends Error {
112
+ constructor(message?: string) {
113
+ super(message ?? 'operation not supported');
114
+ this.name = this.constructor.name;
115
+ Error.captureStackTrace?.(this, this.constructor);
116
+ }
117
+ }
118
+
119
+ /**
120
+ * Determines a supported JWS `alg` identifier from PublicKeyInfo algorithm string.
121
+ */
122
+ function determineJWSAlgorithmFromKeyInfo(algorithm: string): JWSAlgorithm {
123
+ if (algorithm.startsWith('rsa:')) {
124
+ return 'RS256';
125
+ }
126
+ switch (algorithm) {
127
+ case 'ec:secp256r1':
128
+ return 'ES256';
129
+ case 'ec:secp384r1':
130
+ return 'ES384';
131
+ case 'ec:secp521r1':
132
+ return 'ES512';
133
+ default:
134
+ throw new UnsupportedOperationError(`unsupported key algorithm: ${algorithm}`);
135
+ }
136
+ }
137
+
138
+ /**
139
+ * Returns the current unix timestamp in seconds.
140
+ */
141
+ function epochTime() {
142
+ return Math.floor(Date.now() / 1000);
143
+ }
144
+
145
+ /**
146
+ * Generates a unique DPoP Proof JWT.
147
+ *
148
+ * @param keypair Opaque key pair
149
+ * @param cryptoService CryptoService for cryptographic operations
150
+ * @param htu The HTTP URI (without query and fragment parts) of the request
151
+ * @param htm The HTTP method of the request
152
+ * @param nonce Server-provided nonce.
153
+ * @param accessToken Associated access token's value.
154
+ * @param additional Any additional claims.
155
+ */
156
+ export default async function DPoP(
157
+ keypair: KeyPair,
158
+ cryptoService: CryptoService,
159
+ htu: string,
160
+ htm: string,
161
+ nonce?: string,
162
+ accessToken?: string,
163
+ additional?: Record<string, JsonValue>
164
+ ): Promise<string> {
165
+ const privateKey = keypair?.privateKey;
166
+ const publicKey = keypair?.publicKey;
167
+
168
+ if (typeof htu !== 'string') {
169
+ throw new TypeError('"htu" must be a string');
170
+ }
171
+
172
+ if (typeof htm !== 'string') {
173
+ throw new TypeError('"htm" must be a string');
174
+ }
175
+
176
+ if (nonce !== undefined && typeof nonce !== 'string') {
177
+ throw new TypeError('"nonce" must be a string or undefined');
178
+ }
179
+
180
+ if (accessToken !== undefined && typeof accessToken !== 'string') {
181
+ throw new TypeError('"accessToken" must be a string or undefined');
182
+ }
183
+
184
+ if (
185
+ additional !== undefined &&
186
+ (typeof additional !== 'object' || additional === null || Array.isArray(additional))
187
+ ) {
188
+ throw new TypeError('"additional" must be an object');
189
+ }
190
+
191
+ // Detect algorithm from opaque key metadata
192
+ const alg = determineJWSAlgorithmFromKeyInfo(publicKey.algorithm);
193
+
194
+ // Export public key as JWK for the header
195
+ const jwk = await cryptoService.exportPublicKeyJwk(publicKey);
196
+
197
+ // Compute access token hash if provided
198
+ let ath: string | undefined;
199
+ if (accessToken) {
200
+ const athBytes = await cryptoService.digest('SHA-256', buf(accessToken));
201
+ ath = b64u(athBytes);
202
+ }
203
+
204
+ return jwt(
205
+ {
206
+ alg,
207
+ typ: 'dpop+jwt',
208
+ jwk,
209
+ },
210
+ {
211
+ ...additional,
212
+ iat: epochTime(),
213
+ jti: await randomBytes(cryptoService),
214
+ htm,
215
+ nonce,
216
+ htu,
217
+ ath,
218
+ },
219
+ privateKey,
220
+ cryptoService
221
+ );
222
+ }
@@ -1,32 +1,40 @@
1
1
  import { ConfigurationError } from '../errors.js';
2
2
  import { AuthProvider, type HttpRequest } from './auth.js';
3
3
  import { AccessToken, type ClientSecretCredentials } from './oidc.js';
4
+ import * as defaultCryptoService from '../../tdf3/src/crypto/index.js';
5
+ import { type CryptoService, type KeyPair } from '../../tdf3/src/crypto/declarations.js';
4
6
 
5
7
  export class OIDCClientCredentialsProvider implements AuthProvider {
6
8
  oidcAuth: AccessToken;
7
9
 
8
- constructor({
9
- clientId,
10
- clientSecret,
11
- oidcOrigin,
12
- oidcTokenEndpoint,
13
- oidcUserInfoEndpoint,
14
- }: Partial<ClientSecretCredentials> & Omit<ClientSecretCredentials, 'exchange'>) {
15
- if (!clientId || !clientSecret) {
16
- throw new ConfigurationError('clientId & clientSecret required for client credentials flow');
17
- }
18
-
19
- this.oidcAuth = new AccessToken({
20
- exchange: 'client',
10
+ constructor(
11
+ {
21
12
  clientId,
22
13
  clientSecret,
23
14
  oidcOrigin,
24
15
  oidcTokenEndpoint,
25
16
  oidcUserInfoEndpoint,
26
- });
17
+ }: Partial<ClientSecretCredentials> & Omit<ClientSecretCredentials, 'exchange'>,
18
+ cryptoService: CryptoService = defaultCryptoService
19
+ ) {
20
+ if (!clientId || !clientSecret) {
21
+ throw new ConfigurationError('clientId & clientSecret required for client credentials flow');
22
+ }
23
+
24
+ this.oidcAuth = new AccessToken(
25
+ {
26
+ exchange: 'client',
27
+ clientId,
28
+ clientSecret,
29
+ oidcOrigin,
30
+ oidcTokenEndpoint,
31
+ oidcUserInfoEndpoint,
32
+ },
33
+ cryptoService
34
+ );
27
35
  }
28
36
 
29
- async updateClientPublicKey(signingKey: CryptoKeyPair): Promise<void> {
37
+ async updateClientPublicKey(signingKey: KeyPair): Promise<void> {
30
38
  await this.oidcAuth.refreshTokenClaimsWithClientPubkeyIfNeeded(signingKey);
31
39
  }
32
40
 
@@ -1,35 +1,43 @@
1
1
  import { ConfigurationError } from '../errors.js';
2
2
  import { type AuthProvider, type HttpRequest } from './auth.js';
3
3
  import { AccessToken, type ExternalJwtCredentials } from './oidc.js';
4
+ import * as defaultCryptoService from '../../tdf3/src/crypto/index.js';
5
+ import { type CryptoService, type KeyPair } from '../../tdf3/src/crypto/declarations.js';
4
6
 
5
7
  export class OIDCExternalJwtProvider implements AuthProvider {
6
8
  oidcAuth: AccessToken;
7
9
  externalJwt?: string;
8
10
 
9
- constructor({
10
- clientId,
11
- externalJwt,
12
- oidcOrigin,
13
- oidcTokenEndpoint,
14
- oidcUserInfoEndpoint,
15
- }: Partial<ExternalJwtCredentials> & Omit<ExternalJwtCredentials, 'exchange'>) {
16
- if (!clientId || !externalJwt) {
17
- throw new ConfigurationError('external JWT exchange reequires client id and jwt');
18
- }
19
-
20
- this.oidcAuth = new AccessToken({
21
- exchange: 'external',
11
+ constructor(
12
+ {
22
13
  clientId,
23
14
  externalJwt,
24
15
  oidcOrigin,
25
16
  oidcTokenEndpoint,
26
17
  oidcUserInfoEndpoint,
27
- });
18
+ }: Partial<ExternalJwtCredentials> & Omit<ExternalJwtCredentials, 'exchange'>,
19
+ cryptoService: CryptoService = defaultCryptoService
20
+ ) {
21
+ if (!clientId || !externalJwt) {
22
+ throw new ConfigurationError('external JWT exchange reequires client id and jwt');
23
+ }
24
+
25
+ this.oidcAuth = new AccessToken(
26
+ {
27
+ exchange: 'external',
28
+ clientId,
29
+ externalJwt,
30
+ oidcOrigin,
31
+ oidcTokenEndpoint,
32
+ oidcUserInfoEndpoint,
33
+ },
34
+ cryptoService
35
+ );
28
36
 
29
37
  this.externalJwt = externalJwt;
30
38
  }
31
39
 
32
- async updateClientPublicKey(signingKey: CryptoKeyPair): Promise<void> {
40
+ async updateClientPublicKey(signingKey: KeyPair): Promise<void> {
33
41
  this.oidcAuth.refreshTokenClaimsWithClientPubkeyIfNeeded(signingKey);
34
42
  }
35
43
 
@@ -1,6 +1,8 @@
1
1
  import { ConfigurationError } from '../errors.js';
2
2
  import { type AuthProvider, type HttpRequest } from './auth.js';
3
3
  import { AccessToken, type RefreshTokenCredentials } from './oidc.js';
4
+ import * as defaultCryptoService from '../../tdf3/src/crypto/index.js';
5
+ import { type CryptoService, type KeyPair } from '../../tdf3/src/crypto/declarations.js';
4
6
 
5
7
  /**
6
8
  * An AuthProvider that uses an OIDC refresh token to obtain an access token.
@@ -20,29 +22,35 @@ export class OIDCRefreshTokenProvider implements AuthProvider {
20
22
  oidcAuth: AccessToken;
21
23
  refreshToken?: string;
22
24
 
23
- constructor({
24
- clientId,
25
- refreshToken,
26
- oidcOrigin,
27
- oidcTokenEndpoint,
28
- oidcUserInfoEndpoint,
29
- }: Partial<RefreshTokenCredentials> & Omit<RefreshTokenCredentials, 'exchange'>) {
30
- if (!clientId || !refreshToken) {
31
- throw new ConfigurationError('refresh token or client id missing');
32
- }
33
-
34
- this.oidcAuth = new AccessToken({
35
- exchange: 'refresh',
25
+ constructor(
26
+ {
36
27
  clientId,
37
28
  refreshToken,
38
29
  oidcOrigin,
39
30
  oidcTokenEndpoint,
40
31
  oidcUserInfoEndpoint,
41
- });
32
+ }: Partial<RefreshTokenCredentials> & Omit<RefreshTokenCredentials, 'exchange'>,
33
+ cryptoService: CryptoService = defaultCryptoService
34
+ ) {
35
+ if (!clientId || !refreshToken) {
36
+ throw new ConfigurationError('refresh token or client id missing');
37
+ }
38
+
39
+ this.oidcAuth = new AccessToken(
40
+ {
41
+ exchange: 'refresh',
42
+ clientId,
43
+ refreshToken,
44
+ oidcOrigin,
45
+ oidcTokenEndpoint,
46
+ oidcUserInfoEndpoint,
47
+ },
48
+ cryptoService
49
+ );
42
50
  this.refreshToken = refreshToken;
43
51
  }
44
52
 
45
- async updateClientPublicKey(signingKey: CryptoKeyPair): Promise<void> {
53
+ async updateClientPublicKey(signingKey: KeyPair): Promise<void> {
46
54
  await this.oidcAuth.refreshTokenClaimsWithClientPubkeyIfNeeded(signingKey);
47
55
  }
48
56