@opentdf/sdk 0.1.0-beta.1701

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 (566) hide show
  1. package/README.md +52 -0
  2. package/dist/cjs/package.json +3 -0
  3. package/dist/cjs/src/access.js +155 -0
  4. package/dist/cjs/src/auth/Eas.js +60 -0
  5. package/dist/cjs/src/auth/auth.js +79 -0
  6. package/dist/cjs/src/auth/oidc-clientcredentials-provider.js +26 -0
  7. package/dist/cjs/src/auth/oidc-externaljwt-provider.js +33 -0
  8. package/dist/cjs/src/auth/oidc-refreshtoken-provider.js +34 -0
  9. package/dist/cjs/src/auth/oidc.js +222 -0
  10. package/dist/cjs/src/auth/providers.js +143 -0
  11. package/dist/cjs/src/encodings/base64.js +154 -0
  12. package/dist/cjs/src/encodings/hex.js +70 -0
  13. package/dist/cjs/src/encodings/index.js +29 -0
  14. package/dist/cjs/src/errors.js +138 -0
  15. package/dist/cjs/src/index.js +344 -0
  16. package/dist/cjs/src/nanotdf/Client.js +296 -0
  17. package/dist/cjs/src/nanotdf/NanoTDF.js +94 -0
  18. package/dist/cjs/src/nanotdf/browser-entry.js +19 -0
  19. package/dist/cjs/src/nanotdf/constants.js +5 -0
  20. package/dist/cjs/src/nanotdf/decrypt.js +17 -0
  21. package/dist/cjs/src/nanotdf/encrypt-dataset.js +38 -0
  22. package/dist/cjs/src/nanotdf/encrypt.js +132 -0
  23. package/dist/cjs/src/nanotdf/enum/CipherEnum.js +13 -0
  24. package/dist/cjs/src/nanotdf/enum/CurveNameEnum.js +15 -0
  25. package/dist/cjs/src/nanotdf/enum/EncodingEnum.js +8 -0
  26. package/dist/cjs/src/nanotdf/enum/PolicyTypeEnum.js +11 -0
  27. package/dist/cjs/src/nanotdf/enum/ProtocolEnum.js +10 -0
  28. package/dist/cjs/src/nanotdf/enum/ResourceLocatorIdentifierEnum.js +11 -0
  29. package/dist/cjs/src/nanotdf/helpers/calculateByCurve.js +29 -0
  30. package/dist/cjs/src/nanotdf/helpers/getHkdfSalt.js +11 -0
  31. package/dist/cjs/src/nanotdf/index.js +25 -0
  32. package/dist/cjs/src/nanotdf/interfaces/PolicyInterface.js +3 -0
  33. package/dist/cjs/src/nanotdf/models/Ciphers.js +61 -0
  34. package/dist/cjs/src/nanotdf/models/DefaultParams.js +27 -0
  35. package/dist/cjs/src/nanotdf/models/EcCurves.js +39 -0
  36. package/dist/cjs/src/nanotdf/models/Header.js +255 -0
  37. package/dist/cjs/src/nanotdf/models/Payload.js +158 -0
  38. package/dist/cjs/src/nanotdf/models/Policy/AbstractPolicy.js +73 -0
  39. package/dist/cjs/src/nanotdf/models/Policy/EmbeddedPolicy.js +82 -0
  40. package/dist/cjs/src/nanotdf/models/Policy/PolicyFactory.js +38 -0
  41. package/dist/cjs/src/nanotdf/models/Policy/RemotePolicy.js +62 -0
  42. package/dist/cjs/src/nanotdf/models/ResourceLocator.js +211 -0
  43. package/dist/cjs/src/nanotdf/models/Signature.js +77 -0
  44. package/dist/cjs/src/nanotdf-crypto/ciphers.js +17 -0
  45. package/dist/cjs/src/nanotdf-crypto/decrypt.js +24 -0
  46. package/dist/cjs/src/nanotdf-crypto/digest.js +7 -0
  47. package/dist/cjs/src/nanotdf-crypto/ecdsaSignature.js +83 -0
  48. package/dist/cjs/src/nanotdf-crypto/encrypt.js +24 -0
  49. package/dist/cjs/src/nanotdf-crypto/enums.js +52 -0
  50. package/dist/cjs/src/nanotdf-crypto/exportCryptoKey.js +20 -0
  51. package/dist/cjs/src/nanotdf-crypto/generateKeyPair.js +13 -0
  52. package/dist/cjs/src/nanotdf-crypto/generateRandomNumber.js +12 -0
  53. package/dist/cjs/src/nanotdf-crypto/importRawKey.js +18 -0
  54. package/dist/cjs/src/nanotdf-crypto/index.js +52 -0
  55. package/dist/cjs/src/nanotdf-crypto/keyAgreement.js +91 -0
  56. package/dist/cjs/src/nanotdf-crypto/pemPublicToCrypto.js +225 -0
  57. package/dist/cjs/src/policy/api.js +58 -0
  58. package/dist/cjs/src/policy/attributes.js +3 -0
  59. package/dist/cjs/src/policy/granter.js +146 -0
  60. package/dist/cjs/src/tdf/AttributeObject.js +15 -0
  61. package/dist/cjs/src/tdf/AttributeObjectJwt.js +3 -0
  62. package/dist/cjs/src/tdf/Crypto.js +47 -0
  63. package/dist/cjs/src/tdf/EntityObject.js +3 -0
  64. package/dist/cjs/src/tdf/NanoTDF/NanoTDF.js +38 -0
  65. package/dist/cjs/src/tdf/Policy.js +50 -0
  66. package/dist/cjs/src/tdf/PolicyObject.js +3 -0
  67. package/dist/cjs/src/tdf/TypedArray.js +3 -0
  68. package/dist/cjs/src/tdf/index.js +35 -0
  69. package/dist/cjs/src/types/index.js +3 -0
  70. package/dist/cjs/src/utils.js +147 -0
  71. package/dist/cjs/src/version.js +12 -0
  72. package/dist/cjs/tdf3/index.js +57 -0
  73. package/dist/cjs/tdf3/src/assertions.js +118 -0
  74. package/dist/cjs/tdf3/src/binary.js +153 -0
  75. package/dist/cjs/tdf3/src/ciphers/aes-gcm-cipher.js +56 -0
  76. package/dist/cjs/tdf3/src/ciphers/algorithms.js +8 -0
  77. package/dist/cjs/tdf3/src/ciphers/index.js +8 -0
  78. package/dist/cjs/tdf3/src/ciphers/symmetric-cipher-base.js +22 -0
  79. package/dist/cjs/tdf3/src/client/DecoratedReadableStream.js +116 -0
  80. package/dist/cjs/tdf3/src/client/builders.js +561 -0
  81. package/dist/cjs/tdf3/src/client/index.js +460 -0
  82. package/dist/cjs/tdf3/src/client/validation.js +63 -0
  83. package/dist/cjs/tdf3/src/crypto/crypto-utils.js +116 -0
  84. package/dist/cjs/tdf3/src/crypto/declarations.js +8 -0
  85. package/dist/cjs/tdf3/src/crypto/index.js +315 -0
  86. package/dist/cjs/tdf3/src/index.js +34 -0
  87. package/dist/cjs/tdf3/src/models/attribute-set.js +122 -0
  88. package/dist/cjs/tdf3/src/models/encryption-information.js +90 -0
  89. package/dist/cjs/tdf3/src/models/index.js +25 -0
  90. package/dist/cjs/tdf3/src/models/key-access.js +103 -0
  91. package/dist/cjs/tdf3/src/models/manifest.js +3 -0
  92. package/dist/cjs/tdf3/src/models/payload.js +3 -0
  93. package/dist/cjs/tdf3/src/models/policy.js +24 -0
  94. package/dist/cjs/tdf3/src/models/upsert-response.js +3 -0
  95. package/dist/cjs/tdf3/src/tdf.js +907 -0
  96. package/dist/cjs/tdf3/src/templates/default.html.js +98 -0
  97. package/dist/cjs/tdf3/src/templates/escaper.js +15 -0
  98. package/dist/cjs/tdf3/src/templates/index.js +12 -0
  99. package/dist/cjs/tdf3/src/utils/buffer-crc32.js +48 -0
  100. package/dist/cjs/tdf3/src/utils/chunkers.js +106 -0
  101. package/dist/cjs/tdf3/src/utils/index.js +296 -0
  102. package/dist/cjs/tdf3/src/utils/keysplit.js +61 -0
  103. package/dist/cjs/tdf3/src/utils/zip-reader.js +253 -0
  104. package/dist/cjs/tdf3/src/utils/zip-writer.js +308 -0
  105. package/dist/cjs/tdf3/src/version.js +6 -0
  106. package/dist/types/src/access.d.ts +47 -0
  107. package/dist/types/src/access.d.ts.map +1 -0
  108. package/dist/types/src/auth/Eas.d.ts +34 -0
  109. package/dist/types/src/auth/Eas.d.ts.map +1 -0
  110. package/dist/types/src/auth/auth.d.ts +86 -0
  111. package/dist/types/src/auth/auth.d.ts.map +1 -0
  112. package/dist/types/src/auth/oidc-clientcredentials-provider.d.ts +9 -0
  113. package/dist/types/src/auth/oidc-clientcredentials-provider.d.ts.map +1 -0
  114. package/dist/types/src/auth/oidc-externaljwt-provider.d.ts +10 -0
  115. package/dist/types/src/auth/oidc-externaljwt-provider.d.ts.map +1 -0
  116. package/dist/types/src/auth/oidc-refreshtoken-provider.d.ts +10 -0
  117. package/dist/types/src/auth/oidc-refreshtoken-provider.d.ts.map +1 -0
  118. package/dist/types/src/auth/oidc.d.ts +104 -0
  119. package/dist/types/src/auth/oidc.d.ts.map +1 -0
  120. package/dist/types/src/auth/providers.d.ts +67 -0
  121. package/dist/types/src/auth/providers.d.ts.map +1 -0
  122. package/dist/types/src/encodings/base64.d.ts +18 -0
  123. package/dist/types/src/encodings/base64.d.ts.map +1 -0
  124. package/dist/types/src/encodings/hex.d.ts +5 -0
  125. package/dist/types/src/encodings/hex.d.ts.map +1 -0
  126. package/dist/types/src/encodings/index.d.ts +3 -0
  127. package/dist/types/src/encodings/index.d.ts.map +1 -0
  128. package/dist/types/src/errors.d.ts +72 -0
  129. package/dist/types/src/errors.d.ts.map +1 -0
  130. package/dist/types/src/index.d.ts +138 -0
  131. package/dist/types/src/index.d.ts.map +1 -0
  132. package/dist/types/src/nanotdf/Client.d.ts +95 -0
  133. package/dist/types/src/nanotdf/Client.d.ts.map +1 -0
  134. package/dist/types/src/nanotdf/NanoTDF.d.ts +25 -0
  135. package/dist/types/src/nanotdf/NanoTDF.d.ts.map +1 -0
  136. package/dist/types/src/nanotdf/browser-entry.d.ts +17 -0
  137. package/dist/types/src/nanotdf/browser-entry.d.ts.map +1 -0
  138. package/dist/types/src/nanotdf/constants.d.ts +2 -0
  139. package/dist/types/src/nanotdf/constants.d.ts.map +1 -0
  140. package/dist/types/src/nanotdf/decrypt.d.ts +9 -0
  141. package/dist/types/src/nanotdf/decrypt.d.ts.map +1 -0
  142. package/dist/types/src/nanotdf/encrypt-dataset.d.ts +12 -0
  143. package/dist/types/src/nanotdf/encrypt-dataset.d.ts.map +1 -0
  144. package/dist/types/src/nanotdf/encrypt.d.ts +14 -0
  145. package/dist/types/src/nanotdf/encrypt.d.ts.map +1 -0
  146. package/dist/types/src/nanotdf/enum/CipherEnum.d.ts +10 -0
  147. package/dist/types/src/nanotdf/enum/CipherEnum.d.ts.map +1 -0
  148. package/dist/types/src/nanotdf/enum/CurveNameEnum.d.ts +12 -0
  149. package/dist/types/src/nanotdf/enum/CurveNameEnum.d.ts.map +1 -0
  150. package/dist/types/src/nanotdf/enum/EncodingEnum.d.ts +5 -0
  151. package/dist/types/src/nanotdf/enum/EncodingEnum.d.ts.map +1 -0
  152. package/dist/types/src/nanotdf/enum/PolicyTypeEnum.d.ts +8 -0
  153. package/dist/types/src/nanotdf/enum/PolicyTypeEnum.d.ts.map +1 -0
  154. package/dist/types/src/nanotdf/enum/ProtocolEnum.d.ts +7 -0
  155. package/dist/types/src/nanotdf/enum/ProtocolEnum.d.ts.map +1 -0
  156. package/dist/types/src/nanotdf/enum/ResourceLocatorIdentifierEnum.d.ts +8 -0
  157. package/dist/types/src/nanotdf/enum/ResourceLocatorIdentifierEnum.d.ts.map +1 -0
  158. package/dist/types/src/nanotdf/helpers/calculateByCurve.d.ts +20 -0
  159. package/dist/types/src/nanotdf/helpers/calculateByCurve.d.ts.map +1 -0
  160. package/dist/types/src/nanotdf/helpers/getHkdfSalt.d.ts +9 -0
  161. package/dist/types/src/nanotdf/helpers/getHkdfSalt.d.ts.map +1 -0
  162. package/dist/types/src/nanotdf/index.d.ts +9 -0
  163. package/dist/types/src/nanotdf/index.d.ts.map +1 -0
  164. package/dist/types/src/nanotdf/interfaces/PolicyInterface.d.ts +17 -0
  165. package/dist/types/src/nanotdf/interfaces/PolicyInterface.d.ts.map +1 -0
  166. package/dist/types/src/nanotdf/models/Ciphers.d.ts +14 -0
  167. package/dist/types/src/nanotdf/models/Ciphers.d.ts.map +1 -0
  168. package/dist/types/src/nanotdf/models/DefaultParams.d.ts +21 -0
  169. package/dist/types/src/nanotdf/models/DefaultParams.d.ts.map +1 -0
  170. package/dist/types/src/nanotdf/models/EcCurves.d.ts +15 -0
  171. package/dist/types/src/nanotdf/models/EcCurves.d.ts.map +1 -0
  172. package/dist/types/src/nanotdf/models/Header.d.ts +73 -0
  173. package/dist/types/src/nanotdf/models/Header.d.ts.map +1 -0
  174. package/dist/types/src/nanotdf/models/Payload.d.ts +47 -0
  175. package/dist/types/src/nanotdf/models/Payload.d.ts.map +1 -0
  176. package/dist/types/src/nanotdf/models/Policy/AbstractPolicy.d.ts +52 -0
  177. package/dist/types/src/nanotdf/models/Policy/AbstractPolicy.d.ts.map +1 -0
  178. package/dist/types/src/nanotdf/models/Policy/EmbeddedPolicy.d.ts +35 -0
  179. package/dist/types/src/nanotdf/models/Policy/EmbeddedPolicy.d.ts.map +1 -0
  180. package/dist/types/src/nanotdf/models/Policy/PolicyFactory.d.ts +11 -0
  181. package/dist/types/src/nanotdf/models/Policy/PolicyFactory.d.ts.map +1 -0
  182. package/dist/types/src/nanotdf/models/Policy/RemotePolicy.d.ts +31 -0
  183. package/dist/types/src/nanotdf/models/Policy/RemotePolicy.d.ts.map +1 -0
  184. package/dist/types/src/nanotdf/models/ResourceLocator.d.ts +65 -0
  185. package/dist/types/src/nanotdf/models/ResourceLocator.d.ts.map +1 -0
  186. package/dist/types/src/nanotdf/models/Signature.d.ts +33 -0
  187. package/dist/types/src/nanotdf/models/Signature.d.ts.map +1 -0
  188. package/dist/types/src/nanotdf-crypto/ciphers.d.ts +8 -0
  189. package/dist/types/src/nanotdf-crypto/ciphers.d.ts.map +1 -0
  190. package/dist/types/src/nanotdf-crypto/decrypt.d.ts +14 -0
  191. package/dist/types/src/nanotdf-crypto/decrypt.d.ts.map +1 -0
  192. package/dist/types/src/nanotdf-crypto/digest.d.ts +3 -0
  193. package/dist/types/src/nanotdf-crypto/digest.d.ts.map +1 -0
  194. package/dist/types/src/nanotdf-crypto/ecdsaSignature.d.ts +35 -0
  195. package/dist/types/src/nanotdf-crypto/ecdsaSignature.d.ts.map +1 -0
  196. package/dist/types/src/nanotdf-crypto/encrypt.d.ts +14 -0
  197. package/dist/types/src/nanotdf-crypto/encrypt.d.ts.map +1 -0
  198. package/dist/types/src/nanotdf-crypto/enums.d.ts +42 -0
  199. package/dist/types/src/nanotdf-crypto/enums.d.ts.map +1 -0
  200. package/dist/types/src/nanotdf-crypto/exportCryptoKey.d.ts +7 -0
  201. package/dist/types/src/nanotdf-crypto/exportCryptoKey.d.ts.map +1 -0
  202. package/dist/types/src/nanotdf-crypto/generateKeyPair.d.ts +10 -0
  203. package/dist/types/src/nanotdf-crypto/generateKeyPair.d.ts.map +1 -0
  204. package/dist/types/src/nanotdf-crypto/generateRandomNumber.d.ts +5 -0
  205. package/dist/types/src/nanotdf-crypto/generateRandomNumber.d.ts.map +1 -0
  206. package/dist/types/src/nanotdf-crypto/importRawKey.d.ts +13 -0
  207. package/dist/types/src/nanotdf-crypto/importRawKey.d.ts.map +1 -0
  208. package/dist/types/src/nanotdf-crypto/index.d.ts +12 -0
  209. package/dist/types/src/nanotdf-crypto/index.d.ts.map +1 -0
  210. package/dist/types/src/nanotdf-crypto/keyAgreement.d.ts +28 -0
  211. package/dist/types/src/nanotdf-crypto/keyAgreement.d.ts.map +1 -0
  212. package/dist/types/src/nanotdf-crypto/pemPublicToCrypto.d.ts +28 -0
  213. package/dist/types/src/nanotdf-crypto/pemPublicToCrypto.d.ts.map +1 -0
  214. package/dist/types/src/policy/api.d.ts +4 -0
  215. package/dist/types/src/policy/api.d.ts.map +1 -0
  216. package/dist/types/src/policy/attributes.d.ts +95 -0
  217. package/dist/types/src/policy/attributes.d.ts.map +1 -0
  218. package/dist/types/src/policy/granter.d.ts +23 -0
  219. package/dist/types/src/policy/granter.d.ts.map +1 -0
  220. package/dist/types/src/tdf/AttributeObject.d.ts +13 -0
  221. package/dist/types/src/tdf/AttributeObject.d.ts.map +1 -0
  222. package/dist/types/src/tdf/AttributeObjectJwt.d.ts +4 -0
  223. package/dist/types/src/tdf/AttributeObjectJwt.d.ts.map +1 -0
  224. package/dist/types/src/tdf/Crypto.d.ts +37 -0
  225. package/dist/types/src/tdf/Crypto.d.ts.map +1 -0
  226. package/dist/types/src/tdf/EntityObject.d.ts +18 -0
  227. package/dist/types/src/tdf/EntityObject.d.ts.map +1 -0
  228. package/dist/types/src/tdf/NanoTDF/NanoTDF.d.ts +99 -0
  229. package/dist/types/src/tdf/NanoTDF/NanoTDF.d.ts.map +1 -0
  230. package/dist/types/src/tdf/Policy.d.ts +28 -0
  231. package/dist/types/src/tdf/Policy.d.ts.map +1 -0
  232. package/dist/types/src/tdf/PolicyObject.d.ts +11 -0
  233. package/dist/types/src/tdf/PolicyObject.d.ts.map +1 -0
  234. package/dist/types/src/tdf/TypedArray.d.ts +3 -0
  235. package/dist/types/src/tdf/TypedArray.d.ts.map +1 -0
  236. package/dist/types/src/tdf/index.d.ts +7 -0
  237. package/dist/types/src/tdf/index.d.ts.map +1 -0
  238. package/dist/types/src/types/index.d.ts +45 -0
  239. package/dist/types/src/types/index.d.ts.map +1 -0
  240. package/dist/types/src/utils.d.ts +45 -0
  241. package/dist/types/src/utils.d.ts.map +1 -0
  242. package/dist/types/src/version.d.ts +9 -0
  243. package/dist/types/src/version.d.ts.map +1 -0
  244. package/dist/types/tdf3/index.d.ts +16 -0
  245. package/dist/types/tdf3/index.d.ts.map +1 -0
  246. package/dist/types/tdf3/src/assertions.d.ts +63 -0
  247. package/dist/types/tdf3/src/assertions.d.ts.map +1 -0
  248. package/dist/types/tdf3/src/binary.d.ts +38 -0
  249. package/dist/types/tdf3/src/binary.d.ts.map +1 -0
  250. package/dist/types/tdf3/src/ciphers/aes-gcm-cipher.d.ts +18 -0
  251. package/dist/types/tdf3/src/ciphers/aes-gcm-cipher.d.ts.map +1 -0
  252. package/dist/types/tdf3/src/ciphers/algorithms.d.ts +4 -0
  253. package/dist/types/tdf3/src/ciphers/algorithms.d.ts.map +1 -0
  254. package/dist/types/tdf3/src/ciphers/index.d.ts +3 -0
  255. package/dist/types/tdf3/src/ciphers/index.d.ts.map +1 -0
  256. package/dist/types/tdf3/src/ciphers/symmetric-cipher-base.d.ts +14 -0
  257. package/dist/types/tdf3/src/ciphers/symmetric-cipher-base.d.ts.map +1 -0
  258. package/dist/types/tdf3/src/client/DecoratedReadableStream.d.ts +53 -0
  259. package/dist/types/tdf3/src/client/DecoratedReadableStream.d.ts.map +1 -0
  260. package/dist/types/tdf3/src/client/builders.d.ts +436 -0
  261. package/dist/types/tdf3/src/client/builders.d.ts.map +1 -0
  262. package/dist/types/tdf3/src/client/index.d.ts +139 -0
  263. package/dist/types/tdf3/src/client/index.d.ts.map +1 -0
  264. package/dist/types/tdf3/src/client/validation.d.ts +8 -0
  265. package/dist/types/tdf3/src/client/validation.d.ts.map +1 -0
  266. package/dist/types/tdf3/src/crypto/crypto-utils.d.ts +34 -0
  267. package/dist/types/tdf3/src/crypto/crypto-utils.d.ts.map +1 -0
  268. package/dist/types/tdf3/src/crypto/declarations.d.ts +60 -0
  269. package/dist/types/tdf3/src/crypto/declarations.d.ts.map +1 -0
  270. package/dist/types/tdf3/src/crypto/index.d.ts +103 -0
  271. package/dist/types/tdf3/src/crypto/index.d.ts.map +1 -0
  272. package/dist/types/tdf3/src/index.d.ts +5 -0
  273. package/dist/types/tdf3/src/index.d.ts.map +1 -0
  274. package/dist/types/tdf3/src/models/attribute-set.d.ts +65 -0
  275. package/dist/types/tdf3/src/models/attribute-set.d.ts.map +1 -0
  276. package/dist/types/tdf3/src/models/encryption-information.d.ts +49 -0
  277. package/dist/types/tdf3/src/models/encryption-information.d.ts.map +1 -0
  278. package/dist/types/tdf3/src/models/index.d.ts +9 -0
  279. package/dist/types/tdf3/src/models/index.d.ts.map +1 -0
  280. package/dist/types/tdf3/src/models/key-access.d.ts +42 -0
  281. package/dist/types/tdf3/src/models/key-access.d.ts.map +1 -0
  282. package/dist/types/tdf3/src/models/manifest.d.ts +9 -0
  283. package/dist/types/tdf3/src/models/manifest.d.ts.map +1 -0
  284. package/dist/types/tdf3/src/models/payload.d.ts +7 -0
  285. package/dist/types/tdf3/src/models/payload.d.ts.map +1 -0
  286. package/dist/types/tdf3/src/models/policy.d.ts +13 -0
  287. package/dist/types/tdf3/src/models/policy.d.ts.map +1 -0
  288. package/dist/types/tdf3/src/models/upsert-response.d.ts +16 -0
  289. package/dist/types/tdf3/src/models/upsert-response.d.ts.map +1 -0
  290. package/dist/types/tdf3/src/tdf.d.ts +152 -0
  291. package/dist/types/tdf3/src/tdf.d.ts.map +1 -0
  292. package/dist/types/tdf3/src/templates/default.html.d.ts +8 -0
  293. package/dist/types/tdf3/src/templates/default.html.d.ts.map +1 -0
  294. package/dist/types/tdf3/src/templates/escaper.d.ts +6 -0
  295. package/dist/types/tdf3/src/templates/escaper.d.ts.map +1 -0
  296. package/dist/types/tdf3/src/templates/index.d.ts +3 -0
  297. package/dist/types/tdf3/src/templates/index.d.ts.map +1 -0
  298. package/dist/types/tdf3/src/utils/buffer-crc32.d.ts +2 -0
  299. package/dist/types/tdf3/src/utils/buffer-crc32.d.ts.map +1 -0
  300. package/dist/types/tdf3/src/utils/chunkers.d.ts +29 -0
  301. package/dist/types/tdf3/src/utils/chunkers.d.ts.map +1 -0
  302. package/dist/types/tdf3/src/utils/index.d.ts +36 -0
  303. package/dist/types/tdf3/src/utils/index.d.ts.map +1 -0
  304. package/dist/types/tdf3/src/utils/keysplit.d.ts +19 -0
  305. package/dist/types/tdf3/src/utils/keysplit.d.ts.map +1 -0
  306. package/dist/types/tdf3/src/utils/zip-reader.d.ts +63 -0
  307. package/dist/types/tdf3/src/utils/zip-reader.d.ts.map +1 -0
  308. package/dist/types/tdf3/src/utils/zip-writer.d.ts +35 -0
  309. package/dist/types/tdf3/src/utils/zip-writer.d.ts.map +1 -0
  310. package/dist/types/tdf3/src/version.d.ts +3 -0
  311. package/dist/types/tdf3/src/version.d.ts.map +1 -0
  312. package/dist/web/package.json +3 -0
  313. package/dist/web/src/access.js +147 -0
  314. package/dist/web/src/auth/Eas.js +55 -0
  315. package/dist/web/src/auth/auth.js +71 -0
  316. package/dist/web/src/auth/oidc-clientcredentials-provider.js +22 -0
  317. package/dist/web/src/auth/oidc-externaljwt-provider.js +29 -0
  318. package/dist/web/src/auth/oidc-refreshtoken-provider.js +30 -0
  319. package/dist/web/src/auth/oidc.js +215 -0
  320. package/dist/web/src/auth/providers.js +119 -0
  321. package/dist/web/src/encodings/base64.js +147 -0
  322. package/dist/web/src/encodings/hex.js +63 -0
  323. package/dist/web/src/encodings/index.js +3 -0
  324. package/dist/web/src/errors.js +123 -0
  325. package/dist/web/src/index.js +313 -0
  326. package/dist/web/src/nanotdf/Client.js +268 -0
  327. package/dist/web/src/nanotdf/NanoTDF.js +89 -0
  328. package/dist/web/src/nanotdf/browser-entry.js +14 -0
  329. package/dist/web/src/nanotdf/constants.js +2 -0
  330. package/dist/web/src/nanotdf/decrypt.js +14 -0
  331. package/dist/web/src/nanotdf/encrypt-dataset.js +32 -0
  332. package/dist/web/src/nanotdf/encrypt.js +126 -0
  333. package/dist/web/src/nanotdf/enum/CipherEnum.js +11 -0
  334. package/dist/web/src/nanotdf/enum/CurveNameEnum.js +13 -0
  335. package/dist/web/src/nanotdf/enum/EncodingEnum.js +6 -0
  336. package/dist/web/src/nanotdf/enum/PolicyTypeEnum.js +9 -0
  337. package/dist/web/src/nanotdf/enum/ProtocolEnum.js +8 -0
  338. package/dist/web/src/nanotdf/enum/ResourceLocatorIdentifierEnum.js +9 -0
  339. package/dist/web/src/nanotdf/helpers/calculateByCurve.js +24 -0
  340. package/dist/web/src/nanotdf/helpers/getHkdfSalt.js +8 -0
  341. package/dist/web/src/nanotdf/index.js +11 -0
  342. package/dist/web/src/nanotdf/interfaces/PolicyInterface.js +2 -0
  343. package/dist/web/src/nanotdf/models/Ciphers.js +54 -0
  344. package/dist/web/src/nanotdf/models/DefaultParams.js +22 -0
  345. package/dist/web/src/nanotdf/models/EcCurves.js +32 -0
  346. package/dist/web/src/nanotdf/models/Header.js +250 -0
  347. package/dist/web/src/nanotdf/models/Payload.js +156 -0
  348. package/dist/web/src/nanotdf/models/Policy/AbstractPolicy.js +71 -0
  349. package/dist/web/src/nanotdf/models/Policy/EmbeddedPolicy.js +77 -0
  350. package/dist/web/src/nanotdf/models/Policy/PolicyFactory.js +33 -0
  351. package/dist/web/src/nanotdf/models/Policy/RemotePolicy.js +57 -0
  352. package/dist/web/src/nanotdf/models/ResourceLocator.js +206 -0
  353. package/dist/web/src/nanotdf/models/Signature.js +74 -0
  354. package/dist/web/src/nanotdf-crypto/ciphers.js +14 -0
  355. package/dist/web/src/nanotdf-crypto/decrypt.js +21 -0
  356. package/dist/web/src/nanotdf-crypto/digest.js +4 -0
  357. package/dist/web/src/nanotdf-crypto/ecdsaSignature.js +77 -0
  358. package/dist/web/src/nanotdf-crypto/encrypt.js +21 -0
  359. package/dist/web/src/nanotdf-crypto/enums.js +49 -0
  360. package/dist/web/src/nanotdf-crypto/exportCryptoKey.js +17 -0
  361. package/dist/web/src/nanotdf-crypto/generateKeyPair.js +10 -0
  362. package/dist/web/src/nanotdf-crypto/generateRandomNumber.js +9 -0
  363. package/dist/web/src/nanotdf-crypto/importRawKey.js +15 -0
  364. package/dist/web/src/nanotdf-crypto/index.js +12 -0
  365. package/dist/web/src/nanotdf-crypto/keyAgreement.js +87 -0
  366. package/dist/web/src/nanotdf-crypto/pemPublicToCrypto.js +197 -0
  367. package/dist/web/src/policy/api.js +54 -0
  368. package/dist/web/src/policy/attributes.js +2 -0
  369. package/dist/web/src/policy/granter.js +141 -0
  370. package/dist/web/src/tdf/AttributeObject.js +11 -0
  371. package/dist/web/src/tdf/AttributeObjectJwt.js +2 -0
  372. package/dist/web/src/tdf/Crypto.js +44 -0
  373. package/dist/web/src/tdf/EntityObject.js +2 -0
  374. package/dist/web/src/tdf/NanoTDF/NanoTDF.js +35 -0
  375. package/dist/web/src/tdf/Policy.js +48 -0
  376. package/dist/web/src/tdf/PolicyObject.js +2 -0
  377. package/dist/web/src/tdf/TypedArray.js +2 -0
  378. package/dist/web/src/tdf/index.js +4 -0
  379. package/dist/web/src/types/index.js +2 -0
  380. package/dist/web/src/utils.js +133 -0
  381. package/dist/web/src/version.js +9 -0
  382. package/dist/web/tdf3/index.js +13 -0
  383. package/dist/web/tdf3/src/assertions.js +111 -0
  384. package/dist/web/tdf3/src/binary.js +149 -0
  385. package/dist/web/tdf3/src/ciphers/aes-gcm-cipher.js +52 -0
  386. package/dist/web/tdf3/src/ciphers/algorithms.js +5 -0
  387. package/dist/web/tdf3/src/ciphers/index.js +3 -0
  388. package/dist/web/tdf3/src/ciphers/symmetric-cipher-base.js +18 -0
  389. package/dist/web/tdf3/src/client/DecoratedReadableStream.js +107 -0
  390. package/dist/web/tdf3/src/client/builders.js +557 -0
  391. package/dist/web/tdf3/src/client/index.js +423 -0
  392. package/dist/web/tdf3/src/client/validation.js +58 -0
  393. package/dist/web/tdf3/src/crypto/crypto-utils.js +107 -0
  394. package/dist/web/tdf3/src/crypto/declarations.js +5 -0
  395. package/dist/web/tdf3/src/crypto/index.js +296 -0
  396. package/dist/web/tdf3/src/index.js +5 -0
  397. package/dist/web/tdf3/src/models/attribute-set.js +118 -0
  398. package/dist/web/tdf3/src/models/encryption-information.js +86 -0
  399. package/dist/web/tdf3/src/models/index.js +9 -0
  400. package/dist/web/tdf3/src/models/key-access.js +74 -0
  401. package/dist/web/tdf3/src/models/manifest.js +2 -0
  402. package/dist/web/tdf3/src/models/payload.js +2 -0
  403. package/dist/web/tdf3/src/models/policy.js +20 -0
  404. package/dist/web/tdf3/src/models/upsert-response.js +2 -0
  405. package/dist/web/tdf3/src/tdf.js +866 -0
  406. package/dist/web/tdf3/src/templates/default.html.js +96 -0
  407. package/dist/web/tdf3/src/templates/escaper.js +10 -0
  408. package/dist/web/tdf3/src/templates/index.js +3 -0
  409. package/dist/web/tdf3/src/utils/buffer-crc32.js +44 -0
  410. package/dist/web/tdf3/src/utils/chunkers.js +96 -0
  411. package/dist/web/tdf3/src/utils/index.js +248 -0
  412. package/dist/web/tdf3/src/utils/keysplit.js +55 -0
  413. package/dist/web/tdf3/src/utils/zip-reader.js +247 -0
  414. package/dist/web/tdf3/src/utils/zip-writer.js +302 -0
  415. package/dist/web/tdf3/src/version.js +3 -0
  416. package/package.json +126 -0
  417. package/src/access.ts +198 -0
  418. package/src/auth/Eas.ts +79 -0
  419. package/src/auth/auth.ts +141 -0
  420. package/src/auth/oidc-clientcredentials-provider.ts +32 -0
  421. package/src/auth/oidc-externaljwt-provider.ts +41 -0
  422. package/src/auth/oidc-refreshtoken-provider.ts +41 -0
  423. package/src/auth/oidc.ts +307 -0
  424. package/src/auth/providers.ts +139 -0
  425. package/src/encodings/base64.ts +160 -0
  426. package/src/encodings/hex.ts +69 -0
  427. package/src/encodings/index.ts +2 -0
  428. package/src/errors.ts +113 -0
  429. package/src/index.ts +441 -0
  430. package/src/nanotdf/Client.ts +349 -0
  431. package/src/nanotdf/NanoTDF.ts +121 -0
  432. package/src/nanotdf/browser-entry.ts +20 -0
  433. package/src/nanotdf/constants.ts +1 -0
  434. package/src/nanotdf/decrypt.ts +19 -0
  435. package/src/nanotdf/encrypt-dataset.ts +52 -0
  436. package/src/nanotdf/encrypt.ts +197 -0
  437. package/src/nanotdf/enum/CipherEnum.ts +10 -0
  438. package/src/nanotdf/enum/CurveNameEnum.ts +12 -0
  439. package/src/nanotdf/enum/EncodingEnum.ts +5 -0
  440. package/src/nanotdf/enum/PolicyTypeEnum.ts +8 -0
  441. package/src/nanotdf/enum/ProtocolEnum.ts +7 -0
  442. package/src/nanotdf/enum/ResourceLocatorIdentifierEnum.ts +8 -0
  443. package/src/nanotdf/helpers/calculateByCurve.ts +26 -0
  444. package/src/nanotdf/helpers/getHkdfSalt.ts +15 -0
  445. package/src/nanotdf/index.ts +10 -0
  446. package/src/nanotdf/interfaces/PolicyInterface.ts +27 -0
  447. package/src/nanotdf/models/Ciphers.ts +67 -0
  448. package/src/nanotdf/models/DefaultParams.ts +24 -0
  449. package/src/nanotdf/models/EcCurves.ts +40 -0
  450. package/src/nanotdf/models/Header.ts +322 -0
  451. package/src/nanotdf/models/Payload.ts +196 -0
  452. package/src/nanotdf/models/Policy/AbstractPolicy.ts +90 -0
  453. package/src/nanotdf/models/Policy/EmbeddedPolicy.ts +101 -0
  454. package/src/nanotdf/models/Policy/PolicyFactory.ts +48 -0
  455. package/src/nanotdf/models/Policy/RemotePolicy.ts +74 -0
  456. package/src/nanotdf/models/ResourceLocator.ts +212 -0
  457. package/src/nanotdf/models/Signature.ts +85 -0
  458. package/src/nanotdf-crypto/ciphers.ts +13 -0
  459. package/src/nanotdf-crypto/decrypt.ts +30 -0
  460. package/src/nanotdf-crypto/digest.ts +8 -0
  461. package/src/nanotdf-crypto/ecdsaSignature.ts +109 -0
  462. package/src/nanotdf-crypto/encrypt.ts +30 -0
  463. package/src/nanotdf-crypto/enums.ts +47 -0
  464. package/src/nanotdf-crypto/exportCryptoKey.ts +17 -0
  465. package/src/nanotdf-crypto/generateKeyPair.ts +19 -0
  466. package/src/nanotdf-crypto/generateRandomNumber.ts +8 -0
  467. package/src/nanotdf-crypto/importRawKey.ts +19 -0
  468. package/src/nanotdf-crypto/index.ts +11 -0
  469. package/src/nanotdf-crypto/keyAgreement.ts +139 -0
  470. package/src/nanotdf-crypto/pemPublicToCrypto.ts +232 -0
  471. package/src/package-lock.json +6 -0
  472. package/src/package.json +3 -0
  473. package/src/platform/authorization/authorization_connect.d.ts +44 -0
  474. package/src/platform/authorization/authorization_connect.js +44 -0
  475. package/src/platform/authorization/authorization_pb.d.ts +707 -0
  476. package/src/platform/authorization/authorization_pb.js +372 -0
  477. package/src/platform/common/common_pb.d.ts +129 -0
  478. package/src/platform/common/common_pb.js +58 -0
  479. package/src/platform/entityresolution/entity_resolution_connect.d.ts +35 -0
  480. package/src/platform/entityresolution/entity_resolution_connect.js +35 -0
  481. package/src/platform/entityresolution/entity_resolution_pb.d.ts +242 -0
  482. package/src/platform/entityresolution/entity_resolution_pb.js +139 -0
  483. package/src/platform/kas/kas_connect.d.ts +59 -0
  484. package/src/platform/kas/kas_connect.js +59 -0
  485. package/src/platform/kas/kas_pb.d.ts +200 -0
  486. package/src/platform/kas/kas_pb.js +84 -0
  487. package/src/platform/policy/attributes/attributes_connect.d.ts +168 -0
  488. package/src/platform/policy/attributes/attributes_connect.js +168 -0
  489. package/src/platform/policy/attributes/attributes_pb.d.ts +929 -0
  490. package/src/platform/policy/attributes/attributes_pb.js +363 -0
  491. package/src/platform/policy/kasregistry/key_access_server_registry_connect.d.ts +62 -0
  492. package/src/platform/policy/kasregistry/key_access_server_registry_connect.js +62 -0
  493. package/src/platform/policy/kasregistry/key_access_server_registry_pb.d.ts +283 -0
  494. package/src/platform/policy/kasregistry/key_access_server_registry_pb.js +113 -0
  495. package/src/platform/policy/namespaces/namespaces_connect.d.ts +62 -0
  496. package/src/platform/policy/namespaces/namespaces_connect.js +62 -0
  497. package/src/platform/policy/namespaces/namespaces_pb.d.ts +270 -0
  498. package/src/platform/policy/namespaces/namespaces_pb.js +110 -0
  499. package/src/platform/policy/objects_pb.d.ts +725 -0
  500. package/src/platform/policy/objects_pb.js +288 -0
  501. package/src/platform/policy/resourcemapping/resource_mapping_connect.d.ts +259 -0
  502. package/src/platform/policy/resourcemapping/resource_mapping_connect.js +259 -0
  503. package/src/platform/policy/resourcemapping/resource_mapping_pb.d.ts +314 -0
  504. package/src/platform/policy/resourcemapping/resource_mapping_pb.js +142 -0
  505. package/src/platform/policy/selectors_pb.d.ts +269 -0
  506. package/src/platform/policy/selectors_pb.js +110 -0
  507. package/src/platform/policy/subjectmapping/subject_mapping_connect.d.ts +118 -0
  508. package/src/platform/policy/subjectmapping/subject_mapping_connect.js +118 -0
  509. package/src/platform/policy/subjectmapping/subject_mapping_pb.d.ts +672 -0
  510. package/src/platform/policy/subjectmapping/subject_mapping_pb.js +260 -0
  511. package/src/platform/wellknownconfiguration/wellknown_configuration_connect.d.ts +26 -0
  512. package/src/platform/wellknownconfiguration/wellknown_configuration_connect.js +26 -0
  513. package/src/platform/wellknownconfiguration/wellknown_configuration_pb.d.ts +75 -0
  514. package/src/platform/wellknownconfiguration/wellknown_configuration_pb.js +35 -0
  515. package/src/policy/api.ts +61 -0
  516. package/src/policy/attributes.ts +117 -0
  517. package/src/policy/granter.ts +181 -0
  518. package/src/tdf/AttributeObject.ts +27 -0
  519. package/src/tdf/AttributeObjectJwt.ts +3 -0
  520. package/src/tdf/Crypto.ts +42 -0
  521. package/src/tdf/EntityObject.ts +18 -0
  522. package/src/tdf/NanoTDF/NanoTDF.ts +120 -0
  523. package/src/tdf/Policy.ts +51 -0
  524. package/src/tdf/PolicyObject.ts +12 -0
  525. package/src/tdf/TypedArray.ts +12 -0
  526. package/src/tdf/index.ts +6 -0
  527. package/src/types/index.ts +55 -0
  528. package/src/utils.ts +149 -0
  529. package/src/version.ts +9 -0
  530. package/tdf3/index.ts +91 -0
  531. package/tdf3/package-lock.json +6 -0
  532. package/tdf3/package.json +3 -0
  533. package/tdf3/src/assertions.ts +191 -0
  534. package/tdf3/src/binary.ts +195 -0
  535. package/tdf3/src/ciphers/aes-gcm-cipher.ts +76 -0
  536. package/tdf3/src/ciphers/algorithms.ts +9 -0
  537. package/tdf3/src/ciphers/index.ts +2 -0
  538. package/tdf3/src/ciphers/symmetric-cipher-base.ts +38 -0
  539. package/tdf3/src/client/DecoratedReadableStream.ts +148 -0
  540. package/tdf3/src/client/builders.ts +701 -0
  541. package/tdf3/src/client/index.ts +637 -0
  542. package/tdf3/src/client/validation.ts +79 -0
  543. package/tdf3/src/crypto/crypto-utils.ts +119 -0
  544. package/tdf3/src/crypto/declarations.ts +89 -0
  545. package/tdf3/src/crypto/index.ts +394 -0
  546. package/tdf3/src/index.ts +4 -0
  547. package/tdf3/src/models/attribute-set.ts +142 -0
  548. package/tdf3/src/models/encryption-information.ts +172 -0
  549. package/tdf3/src/models/index.ts +8 -0
  550. package/tdf3/src/models/key-access.ts +128 -0
  551. package/tdf3/src/models/manifest.ts +9 -0
  552. package/tdf3/src/models/payload.ts +6 -0
  553. package/tdf3/src/models/policy.ts +35 -0
  554. package/tdf3/src/models/upsert-response.ts +17 -0
  555. package/tdf3/src/tdf.ts +1351 -0
  556. package/tdf3/src/templates/default.html.ts +105 -0
  557. package/tdf3/src/templates/escaper.ts +10 -0
  558. package/tdf3/src/templates/index.ts +2 -0
  559. package/tdf3/src/utils/buffer-crc32.ts +46 -0
  560. package/tdf3/src/utils/chunkers.ts +118 -0
  561. package/tdf3/src/utils/index.ts +309 -0
  562. package/tdf3/src/utils/keysplit.ts +63 -0
  563. package/tdf3/src/utils/zip-reader.ts +341 -0
  564. package/tdf3/src/utils/zip-writer.ts +375 -0
  565. package/tdf3/src/version.ts +2 -0
  566. package/tdf3/types.d.ts +14 -0
@@ -0,0 +1,215 @@
1
+ import { default as dpopFn } from 'dpop';
2
+ import { withHeaders } from './auth.js';
3
+ import { base64 } from '../encodings/index.js';
4
+ import { ConfigurationError, TdfError } from '../errors.js';
5
+ import { cryptoPublicToPem, rstrip } from '../utils.js';
6
+ const qstringify = (obj) => new URLSearchParams(obj).toString();
7
+ /**
8
+ * Class that provides OIDC functionality to auth providers, assuming 'enhanced'
9
+ * tokens and sessions with tdf_claims and either one or both of signing keys
10
+ * or DPoP.
11
+ *
12
+ * Note that this class itself is not a provider - providers implement
13
+ * `AuthProvider` and make use of this class.
14
+ *
15
+ * Both browser and non-browser flows use OIDC, but the supported OIDC auth
16
+ * mechanisms differ between public (e.g. browser) clients, and confidential
17
+ * (e.g. Node) clients.
18
+ *
19
+ * The non-browser flow just expects a `clientId` and `clientSecret` to be
20
+ * provided in the `clientConfig`, and will use that
21
+ * to grant tokens via the OIDC `clientCredentials` flow.
22
+ *
23
+ * For either kind of client, the client's public key must be set in all OIDC
24
+ * token requests in order to recieve a token with valid TDF claims. The public
25
+ * key may be passed to this provider's constructor, or supplied
26
+ * post-construction by calling @see updateClientPublicKey, which forces an
27
+ * explicit token refresh
28
+ */
29
+ export class AccessToken {
30
+ constructor(cfg, request) {
31
+ this.extraHeaders = {};
32
+ if (!cfg.clientId) {
33
+ throw new ConfigurationError('A Keycloak client identifier is currently required for all auth mechanisms');
34
+ }
35
+ if (cfg.exchange === 'client' && !cfg.clientSecret) {
36
+ throw new ConfigurationError('When using client credentials, both clientId and clientSecret are required');
37
+ }
38
+ if (cfg.exchange === 'refresh' && !cfg.refreshToken) {
39
+ throw new ConfigurationError('When using refresh token, a refresh token must be provided');
40
+ }
41
+ if (cfg.exchange === 'external' && !cfg.externalJwt) {
42
+ throw new ConfigurationError('When using external JWT, the jwt must be provided');
43
+ }
44
+ if (!cfg.exchange) {
45
+ throw new ConfigurationError('Invalid oidc configuration');
46
+ }
47
+ this.config = cfg;
48
+ this.request = request;
49
+ this.baseUrl = rstrip(cfg.oidcOrigin, '/');
50
+ this.signingKey = cfg.signingKey;
51
+ }
52
+ /**
53
+ * https://connect2id.com/products/server/docs/api/userinfo
54
+ * @param accessToken the current access_token or code
55
+ * @returns
56
+ */
57
+ async info(accessToken) {
58
+ const url = `${this.baseUrl}/protocol/openid-connect/userinfo`;
59
+ const headers = {
60
+ ...this.extraHeaders,
61
+ Authorization: `Bearer ${accessToken}`,
62
+ };
63
+ if (this.config.dpopEnabled && this.signingKey) {
64
+ headers.DPoP = await dpopFn(this.signingKey, url, 'POST');
65
+ }
66
+ const response = await (this.request || fetch)(url, {
67
+ headers,
68
+ });
69
+ if (!response.ok) {
70
+ console.error(await response.text());
71
+ throw new TdfError(`auth info fail: GET [${url}] => ${response.status} ${response.statusText}`);
72
+ }
73
+ return (await response.json());
74
+ }
75
+ async doPost(url, o) {
76
+ const headers = {
77
+ 'Content-Type': 'application/x-www-form-urlencoded',
78
+ Accept: 'application/json',
79
+ };
80
+ // add DPoP headers if configured
81
+ if (this.config.dpopEnabled) {
82
+ if (!this.signingKey) {
83
+ throw new ConfigurationError('No signature configured');
84
+ }
85
+ const clientPubKey = await cryptoPublicToPem(this.signingKey.publicKey);
86
+ headers['X-VirtruPubKey'] = base64.encode(clientPubKey);
87
+ headers.DPoP = await dpopFn(this.signingKey, url, 'POST');
88
+ }
89
+ return (this.request || fetch)(url, {
90
+ method: 'POST',
91
+ headers,
92
+ body: qstringify(o),
93
+ });
94
+ }
95
+ async accessTokenLookup(cfg) {
96
+ const url = `${this.baseUrl}/protocol/openid-connect/token`;
97
+ let body;
98
+ switch (cfg.exchange) {
99
+ case 'client':
100
+ body = {
101
+ grant_type: 'client_credentials',
102
+ client_id: cfg.clientId,
103
+ client_secret: cfg.clientSecret,
104
+ };
105
+ break;
106
+ case 'external':
107
+ body = {
108
+ grant_type: 'urn:ietf:params:oauth:grant-type:token-exchange',
109
+ subject_token: cfg.externalJwt,
110
+ subject_token_type: 'urn:ietf:params:oauth:token-type:jwt',
111
+ audience: cfg.clientId,
112
+ client_id: cfg.clientId,
113
+ };
114
+ break;
115
+ case 'refresh':
116
+ body = {
117
+ grant_type: 'refresh_token',
118
+ refresh_token: cfg.refreshToken,
119
+ client_id: cfg.clientId,
120
+ };
121
+ break;
122
+ }
123
+ const response = await this.doPost(url, body);
124
+ if (!response.ok) {
125
+ console.error(await response.text());
126
+ throw new TdfError(`token/code exchange fail: POST [${url}] => ${response.status} ${response.statusText}`);
127
+ }
128
+ return response.json();
129
+ }
130
+ /**
131
+ * Gets an access token; operates lazily/cached, with an optional check for freshness.
132
+ * @param validate if we should run a inline check against the OIDC 'userinfo' endpoint to make sure any cached access token is still valid
133
+ * @returns
134
+ */
135
+ async get(validate = true) {
136
+ if (this.data?.access_token) {
137
+ try {
138
+ if (validate) {
139
+ await this.info(this.data.access_token);
140
+ }
141
+ return this.data.access_token;
142
+ }
143
+ catch (e) {
144
+ console.log('access_token fails on user_info endpoint; attempting to renew', e);
145
+ if (this.data.refresh_token) {
146
+ // Prefer the latest refresh_token if present over creds passed in
147
+ // to constructor
148
+ this.config = {
149
+ ...this.config,
150
+ exchange: 'refresh',
151
+ refreshToken: this.data.refresh_token,
152
+ };
153
+ }
154
+ delete this.data;
155
+ }
156
+ }
157
+ const tokenResponse = (this.data = await this.accessTokenLookup(this.config));
158
+ return tokenResponse.access_token;
159
+ }
160
+ /**
161
+ * A TDF client MUST call this method whenever the client wants to use a new
162
+ * ephemeral key set. This updates the keys used to:
163
+ * or wishes to set the keypair after creating the object.
164
+ *
165
+ * Calling this function will trigger a forcible token refresh using the cached refresh token, and contact the auth server.
166
+ */
167
+ async refreshTokenClaimsWithClientPubkeyIfNeeded(signingKey) {
168
+ // If we already have a token, and the pubkey changes,
169
+ // we need to force a refresh now - otherwise
170
+ // we can wait until we create the token for the first time
171
+ if (this.currentAccessToken && signingKey === this.signingKey) {
172
+ return;
173
+ }
174
+ delete this.currentAccessToken;
175
+ this.signingKey = signingKey;
176
+ }
177
+ /**
178
+ * Converts included refresh token or external JWT for a new one.
179
+ */
180
+ async exchangeForRefreshToken() {
181
+ const cfg = this.config;
182
+ if (cfg.exchange != 'external' && cfg.exchange != 'refresh') {
183
+ throw new ConfigurationError('no refresh token provided!');
184
+ }
185
+ const tokenResponse = (this.data = await this.accessTokenLookup(this.config));
186
+ if (!tokenResponse.refresh_token) {
187
+ console.log('No refresh_token returned');
188
+ return ((cfg.exchange == 'refresh' && cfg.refreshToken) ||
189
+ (cfg.exchange == 'external' && cfg.externalJwt) ||
190
+ '');
191
+ }
192
+ // Prefer the latest refresh_token if present over creds passed in
193
+ // to constructor
194
+ this.config = {
195
+ ...this.config,
196
+ exchange: 'refresh',
197
+ refreshToken: tokenResponse.refresh_token,
198
+ };
199
+ return tokenResponse.access_token;
200
+ }
201
+ async withCreds(httpReq) {
202
+ if (!this.signingKey) {
203
+ throw new ConfigurationError('Client public key was not set via `updateClientPublicKey` or passed in via constructor, cannot fetch OIDC token with valid Virtru claims');
204
+ }
205
+ const accessToken = (this.currentAccessToken ??= await this.get());
206
+ if (this.config.dpopEnabled && this.signingKey) {
207
+ const dpopToken = await dpopFn(this.signingKey, httpReq.url, httpReq.method,
208
+ /* nonce */ undefined, accessToken);
209
+ // TODO: Consider: only set DPoP if cnf.jkt is present in access token?
210
+ return withHeaders(httpReq, { Authorization: `Bearer ${accessToken}`, DPoP: dpopToken });
211
+ }
212
+ return withHeaders(httpReq, { Authorization: `Bearer ${accessToken}` });
213
+ }
214
+ }
215
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2lkYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hdXRoL29pZGMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sSUFBSSxNQUFNLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDekMsT0FBTyxFQUFlLFdBQVcsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNyRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFFBQVEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM1RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBa0R4RCxNQUFNLFVBQVUsR0FBRyxDQUFDLEdBQTJCLEVBQUUsRUFBRSxDQUFDLElBQUksZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBT3hGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQkc7QUFDSCxNQUFNLE9BQU8sV0FBVztJQWV0QixZQUFZLEdBQW9CLEVBQUUsT0FBc0I7UUFKeEQsaUJBQVksR0FBMkIsRUFBRSxDQUFDO1FBS3hDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFO1lBQ2pCLE1BQU0sSUFBSSxrQkFBa0IsQ0FDMUIsNEVBQTRFLENBQzdFLENBQUM7U0FDSDtRQUNELElBQUksR0FBRyxDQUFDLFFBQVEsS0FBSyxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFO1lBQ2xELE1BQU0sSUFBSSxrQkFBa0IsQ0FDMUIsNEVBQTRFLENBQzdFLENBQUM7U0FDSDtRQUNELElBQUksR0FBRyxDQUFDLFFBQVEsS0FBSyxTQUFTLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFO1lBQ25ELE1BQU0sSUFBSSxrQkFBa0IsQ0FBQyw0REFBNEQsQ0FBQyxDQUFDO1NBQzVGO1FBQ0QsSUFBSSxHQUFHLENBQUMsUUFBUSxL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
@@ -0,0 +1,119 @@
1
+ import { OIDCClientCredentialsProvider } from './oidc-clientcredentials-provider.js';
2
+ import { OIDCExternalJwtProvider } from './oidc-externaljwt-provider.js';
3
+ import { OIDCRefreshTokenProvider } from './oidc-refreshtoken-provider.js';
4
+ import { isBrowser } from '../utils.js';
5
+ import { ConfigurationError } from '../errors.js';
6
+ /**
7
+ * Creates an OIDC Client Credentials Provider for non-browser contexts.
8
+ *
9
+ * Both browser and non-browser flows use OIDC, but the supported OIDC auth mechanisms differ between
10
+ * public (e.g. browser) clients, and confidential (e.g. Node) clients.
11
+ *
12
+ * This provider supports Client Credentials auth, where the client has previously been issued a ClientID and ClientSecret.
13
+ * Browser contexts should *never* use Client Credentials auth, as ClientSecrets are not secure for public client flows,
14
+ * and should use one of the other Authorization Code-based OIDC auth mechanisms instead.
15
+ *
16
+ * This just expects a clientId and clientSecret to be provided in the clientConfig, and will use that
17
+ * to grant tokens via the OIDC clientCredentials flow.
18
+ *
19
+ * The client's public key must be set in all OIDC token requests in order to recieve a token with valid
20
+ * Virtru claims. The public key may be passed to this provider's constructor, or supplied post-construction by calling
21
+ * {@link updateClientPublicKey} which will force an explicit token refresh
22
+ *
23
+ */
24
+ export const clientSecretAuthProvider = async (clientConfig) => {
25
+ return new OIDCClientCredentialsProvider({
26
+ clientId: clientConfig.clientId,
27
+ clientSecret: clientConfig.clientSecret,
28
+ oidcOrigin: clientConfig.oidcOrigin,
29
+ });
30
+ };
31
+ /**
32
+ * Create an OIDC External JWT Provider for browser contexts.
33
+ *
34
+ * Both browser and non-browser flows use OIDC, but the supported OIDC auth mechanisms differ between
35
+ * public (e.g. browser) clients, and confidential (e.g. Node) clients.
36
+ *
37
+ * This provider supports External JWT token exchange auth. This flow assumes that the client has previously authenticated
38
+ * with an external 3rd-party IdP that oidcOrigin has been configured to trust.
39
+ *
40
+ * The client can supply this provider with a JWT issued by that trusted 3rd-party IdP, and that JWT will be exchanged
41
+ * for a tokenset with TDF claims.
42
+ *
43
+ * The client's public key must be set in all OIDC token requests in order to recieve a token with valid
44
+ * Virtru claims. The public key may be passed to this provider's constructor, or supplied post-construction by calling
45
+ * {@link updateClientPublicKey}, which will force an explicit token refresh.
46
+ */
47
+ export const externalAuthProvider = async (clientConfig) => {
48
+ return new OIDCExternalJwtProvider({
49
+ clientId: clientConfig.clientId,
50
+ externalJwt: clientConfig.externalJwt,
51
+ oidcOrigin: clientConfig.oidcOrigin,
52
+ });
53
+ };
54
+ /**
55
+ * Creates an OIDC Refresh Token Provider for browser and non-browser contexts.
56
+ *
57
+ * Both browser and non-browser flows use OIDC, but the supported OIDC auth mechanisms differ between
58
+ * public (e.g. browser) clients, and confidential (e.g. Node) clients.
59
+ *
60
+ * This provider supports Refresh Token auth. This flow assumes the client has already authenticated with the OIDC
61
+ * IdP using the OIDC flow fo their choice, and can provide a Refresh Token which will be exchanged (along with the client pubkey)
62
+ * for a new tokenset containing valid TDF claims.
63
+ *
64
+ * The client's public key must be set in all OIDC token requests in order to recieve a token with valid
65
+ * Virtru claims. The public key may be passed to this provider's constructor, or supplied post-construction by calling
66
+ * {@link updateClientPublicKey} which will force an explicit token refresh
67
+ */
68
+ export const refreshAuthProvider = async (clientConfig) => {
69
+ return new OIDCRefreshTokenProvider({
70
+ clientId: clientConfig.clientId,
71
+ refreshToken: clientConfig.refreshToken,
72
+ oidcOrigin: clientConfig.oidcOrigin,
73
+ });
74
+ };
75
+ /**
76
+ * Generate an auth provder.
77
+ * @param clientConfig OIDC client credentials
78
+ * @returns a promise for a new auth provider with the requested excahnge type
79
+ */
80
+ export const clientAuthProvider = async (clientConfig) => {
81
+ if (!clientConfig.clientId) {
82
+ throw new ConfigurationError('Client ID must be provided to constructor');
83
+ }
84
+ if (isBrowser()) {
85
+ //If you're in a browser and passing client secrets, you're Doing It Wrong.
86
+ // if (clientConfig.clientSecret) {
87
+ // throw new ConfigurationError('Client credentials not supported in a browser context');
88
+ // }
89
+ //Are we exchanging a refreshToken for a bearer token (normal AuthCode browser auth flow)?
90
+ //If this is a browser context, we expect the caller to handle the initial
91
+ //browser-based OIDC login and authentication process against the OIDC endpoint using their chosen method,
92
+ //and provide us with a valid refresh token/clientId obtained from that process.
93
+ switch (clientConfig.exchange) {
94
+ case 'refresh': {
95
+ return refreshAuthProvider(clientConfig);
96
+ }
97
+ case 'external': {
98
+ return externalAuthProvider(clientConfig);
99
+ }
100
+ case 'client': {
101
+ return clientSecretAuthProvider(clientConfig);
102
+ }
103
+ default:
104
+ throw new ConfigurationError(`Unsupported client type`);
105
+ }
106
+ }
107
+ //If you're NOT in a browser and are NOT passing client secrets, you're Doing It Wrong.
108
+ //If this is not a browser context, we expect the caller to supply their client ID and client secret, so that
109
+ // we can authenticate them directly with the OIDC endpoint.
110
+ if (clientConfig.exchange !== 'client') {
111
+ throw new ConfigurationError('When using client credentials, must supply both client ID and client secret to constructor');
112
+ }
113
+ return clientSecretAuthProvider(clientConfig);
114
+ };
115
+ export * from './auth.js';
116
+ export { OIDCClientCredentialsProvider } from './oidc-clientcredentials-provider.js';
117
+ export { OIDCExternalJwtProvider } from './oidc-externaljwt-provider.js';
118
+ export { OIDCRefreshTokenProvider } from './oidc-refreshtoken-provider.js';
119
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2F1dGgvcHJvdmlkZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU1BLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3JGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRXpFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDeEMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRWxEOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQUNILE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLEtBQUssRUFDM0MsWUFBcUMsRUFDRyxFQUFFO0lBQzFDLE9BQU8sSUFBSSw2QkFBNkIsQ0FBQztRQUN2QyxRQUFRLEVBQUUsWUFBWSxDQUFDLFFBQVE7UUFDL0IsWUFBWSxFQUFFLFlBQVksQ0FBQyxZQUFZO1FBQ3ZDLFVBQVUsRUFBRSxZQUFZLENBQUMsVUFBVTtLQUNwQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUM7QUFFRjs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxLQUFLLEVBQ3ZDLFlBQW9DLEVBQ0YsRUFBRTtJQUNwQyxPQUFPLElBQUksdUJBQXVCLENBQUM7UUFDakMsUUFBUSxFQUFFLFlBQVksQ0FBQyxRQUFRO1FBQy9CLFdBQVcsRUFBRSxZQUFZLENBQUMsV0FBVztRQUNyQyxVQUFVLEVBQUUsWUFBWSxDQUFDLFVBQVU7S0FDcEMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDO0FBRUY7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLEtBQUssRUFDdEMsWUFBcUMsRUFDRixFQUFFO0lBQ3JDLE9BQU8sSUFBSSx3QkFBd0IsQ0FBQztRQUNsQyxRQUFRLEVBQUUsWUFBWSxDQUFDLFFBQVE7UUFDL0IsWUFBWSxFQUFFLFlBQVksQ0FBQyxZQUFZO1FBQ3ZDLFVBQVUsRUFBRSxZQUFZLENBQUMsVUFBVTtLQUNwQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUM7QUFFRjs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsS0FBSyxFQUFFLFlBQTZCLEVBQXlCLEVBQUU7SUFDL0YsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUU7UUFDMUIsTUFBTSxJQUFJLGtCQUFrQixDQUFDLDJDQUEyQyxDQUFDLENBQUM7S0FDM0U7SUFFRCxJQUFJLFNBQVMsRUFBRSxFQUFFO1FBQ2YsMkVBQTJFO1FBQzNFLG1DQUFtQztRQUNuQywyRkFBMkY7UUFDM0YsSUFBSTtRQUNKLDBGQUEwRjtRQUMxRiwwRUFBMEU7UUFDMUUsMEdBQTBHO1FBQzFHLGdGQUFnRjtRQUNoRixRQUFRLFlBQVksQ0FBQyxRQUFRLEVBQUU7WUFDN0IsS0FBSyxTQUFTLENBQUMsQ0FBQztnQkFDZCxPQUFPLG1CQUFtQixDQUFDLFlBQVksQ0FBQyxDQUFDO2FBQzFDO1lBQ0QsS0FBSyxVQUFVLENBQUMsQ0FBQztnQkFDZixPQUFPLG9CQUFvQixDQUFDLFlBQVksQ0FBQyxDQUFDO2FBQzNDO1lBQ0QsS0FBSyxRQUFRLENBQUMsQ0FBQztnQkFDYixPQUFPLHdCQUF3QixDQUFDLFlBQVksQ0FBQyxDQUFDO2FBQy9DO1lBQ0Q7Z0JBQ0UsTUFBTSxJQUFJLGtCQUFrQixDQUFDLHlCQUF5QixDQUFDLENBQUM7U0FDM0Q7S0FDRjtJQUNELHVGQUF1RjtJQUN2Riw2R0FBNkc7SUFDN0csNERBQTREO0lBQzVELElBQUksWUFBWSxDQUFDLFFBQVEsS0FBSyxRQUFRLEVBQUU7UUFDdEMsTUFBTSxJQUFJLGtCQUFrQixDQUMxQiw0RkFBNEYsQ0FDN0YsQ0FBQztLQUNIO0lBQ0QsT0FBTyx3QkFBd0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUNoRCxDQUFDLENBQUM7QUFFRixjQUFjLFdBQVcsQ0FBQztBQUMxQixPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUNyRixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN6RSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQyJ9
@@ -0,0 +1,147 @@
1
+ const charsStandard = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
2
+ const charsUrlSafe = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_';
3
+ // Quick reference from encoded char to source 6 bits.
4
+ let _lut;
5
+ let _padding;
6
+ function lookup(i) {
7
+ if (!_lut) {
8
+ _lut = new Array(256);
9
+ for (let i = 0; i < 64; i++) {
10
+ _lut[charsStandard.charCodeAt(i)] = i;
11
+ }
12
+ for (let i = 62; i < 64; i++) {
13
+ _lut[charsUrlSafe.charCodeAt(i)] = i;
14
+ }
15
+ _padding = charsStandard.charCodeAt(64);
16
+ }
17
+ const r = _lut[i];
18
+ if (r === undefined) {
19
+ if (i === _padding) {
20
+ return -1;
21
+ }
22
+ else if (Number.isNaN(i)) {
23
+ return 0;
24
+ }
25
+ throw new InvalidCharacterError();
26
+ }
27
+ return r;
28
+ }
29
+ class InvalidCharacterError extends Error {
30
+ constructor(message) {
31
+ super(message || 'Invalid character');
32
+ Object.setPrototypeOf(this, new.target.prototype);
33
+ }
34
+ }
35
+ // encoder
36
+ // [https://gist.github.com/999166] by [https://github.com/nignag]
37
+ function encodeFallback(input, urlSafe) {
38
+ let output = '';
39
+ const len = input.length;
40
+ const chars = urlSafe ? charsUrlSafe : charsStandard;
41
+ for (
42
+ // initialize result and counter
43
+ let block = 0, charCode, idx = 0, map = chars;
44
+ // if the next input index does not exist:
45
+ // change the mapping table to "="
46
+ // check if d has no fractional digits
47
+ input.charAt(idx | 0) || ((map = '='), idx % 1);
48
+ // "8 - idx % 1 * 8" generates the sequence 2, 4, 6, 8
49
+ output += map.charAt(63 & (block >> (8 - (idx % 1) * 8)))) {
50
+ charCode = input.charCodeAt((idx += 3 / 4));
51
+ if (charCode > 0xff) {
52
+ throw new InvalidCharacterError(`Invalid input at character ${idx}`);
53
+ }
54
+ block = (block << 8) | charCode;
55
+ }
56
+ if (urlSafe) {
57
+ if (len % 3 === 2) {
58
+ return output.substring(0, output.length - 1);
59
+ }
60
+ else if (len % 3 === 1) {
61
+ return output.substring(0, output.length - 2);
62
+ }
63
+ }
64
+ return output;
65
+ }
66
+ /**
67
+ * Encode array buffer to base64 string
68
+ *
69
+ * GitHub @niklasvh
70
+ * Copyright (c) 2012 Niklas von Hertzen
71
+ * MIT License
72
+ */
73
+ function encodeArrayBuffer(arrayBuffer, urlSafe) {
74
+ const bytes = new Uint8Array(arrayBuffer);
75
+ const len = bytes.length;
76
+ const chars = urlSafe ? charsUrlSafe : charsStandard;
77
+ let base64 = '';
78
+ for (let i = 0; i < len; i += 3) {
79
+ base64 += chars[bytes[i] >> 2];
80
+ // bitshifting `undefined` results in 0, so this fills anything past
81
+ // the end of the buffer with the appropriate value.
82
+ base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];
83
+ base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];
84
+ base64 += chars[bytes[i + 2] & 63];
85
+ }
86
+ let padding = '';
87
+ if (len % 3 === 2) {
88
+ base64 = base64.substring(0, base64.length - 1);
89
+ if (!urlSafe) {
90
+ padding = '=';
91
+ }
92
+ }
93
+ else if (len % 3 === 1) {
94
+ base64 = base64.substring(0, base64.length - 2);
95
+ if (!urlSafe) {
96
+ padding = '==';
97
+ }
98
+ }
99
+ return base64 + padding;
100
+ }
101
+ function decodeFallback(input) {
102
+ input = input.replace(/={1,3}$/, '');
103
+ if (input.length % 4 === 1) {
104
+ throw new InvalidCharacterError('Invalid input.');
105
+ }
106
+ let output = '';
107
+ for (
108
+ // initialize result and counters
109
+ let bc = 0, bs = 0, buffer, idx = 0;
110
+ // get next character
111
+ (buffer = input.charCodeAt(idx++));
112
+ // character found in table? initialize bit storage and add its ascii value;
113
+ ~buffer &&
114
+ ((bs = bc % 4 ? bs * 64 + buffer : buffer),
115
+ // and if not first of each 4 characters,
116
+ // convert the first 8 bits to one ascii character
117
+ bc++ % 4)
118
+ ? (output += String.fromCharCode(255 & (bs >> ((-2 * bc) & 6))))
119
+ : 0) {
120
+ // try to find character in table (0-63, not found => -1)
121
+ buffer = lookup(buffer);
122
+ }
123
+ return output;
124
+ }
125
+ function decodeArrayBuffer(base64) {
126
+ const strLength = base64.length;
127
+ const paddingLength = (base64[strLength - 2] === '=' && 2) || (base64[strLength - 1] === '=' && 1) || 0;
128
+ if (strLength % 4 === 1 || base64[strLength - 3] === '=') {
129
+ throw new InvalidCharacterError('Invalid input.');
130
+ }
131
+ const binLength = (strLength >> 1) + ((strLength + 1) >> 2) - paddingLength;
132
+ const bytes = new Uint8Array(binLength);
133
+ for (let i = 0, p = 0; i < strLength; i += 4, p += 3) {
134
+ const encoded1 = lookup(base64.charCodeAt(i));
135
+ const encoded2 = lookup(base64.charCodeAt(i + 1));
136
+ const encoded3 = lookup(base64.charCodeAt(i + 2));
137
+ const encoded4 = lookup(base64.charCodeAt(i + 3));
138
+ bytes[p] = (encoded1 << 2) | (encoded2 >> 4);
139
+ bytes[p + 1] = ((encoded2 & 15) << 4) | (encoded3 >> 2);
140
+ bytes[p + 2] = ((encoded3 & 3) << 6) | (encoded4 & 63);
141
+ }
142
+ return bytes.buffer;
143
+ }
144
+ const decode = decodeFallback;
145
+ const encode = encodeFallback;
146
+ export { decode, decodeArrayBuffer, encode, encodeArrayBuffer, InvalidCharacterError };
147
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZTY0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2VuY29kaW5ncy9iYXNlNjQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxhQUFhLEdBQUcsbUVBQW1FLENBQUM7QUFDMUYsTUFBTSxZQUFZLEdBQUcsa0VBQWtFLENBQUM7QUFFeEYsc0RBQXNEO0FBQ3RELElBQUksSUFBYyxDQUFDO0FBQ25CLElBQUksUUFBZ0IsQ0FBQztBQUNyQixTQUFTLE1BQU0sQ0FBQyxDQUFTO0lBQ3ZCLElBQUksQ0FBQyxJQUFJLEVBQUU7UUFDVCxJQUFJLEdBQUcsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUMzQixJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUN2QztRQUNELEtBQUssSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDNUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDdEM7UUFDRCxRQUFRLEdBQUcsYUFBYSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztLQUN6QztJQUNELE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQixJQUFJLENBQUMsS0FBSyxTQUFTLEVBQUU7UUFDbkIsSUFBSSxDQUFDLEtBQUssUUFBUSxFQUFFO1lBQ2xCLE9BQU8sQ0FBQyxDQUFDLENBQUM7U0FDWDthQUFNLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUMxQixPQUFPLENBQUMsQ0FBQztTQUNWO1FBQ0QsTUFBTSxJ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
@@ -0,0 +1,63 @@
1
+ import { InvalidCharacterError } from './base64.js';
2
+ export function encode(str) {
3
+ let hex = '';
4
+ for (let i = 0; i < str.length; i++) {
5
+ const s = str.charCodeAt(i).toString(16);
6
+ if (s.length < 2) {
7
+ hex += '0' + s;
8
+ }
9
+ else if (s.length > 2) {
10
+ throw new InvalidCharacterError(`invalid input at char ${i} == [${hex.substring(i, i + 1)}]`);
11
+ }
12
+ else {
13
+ hex += `${s}`;
14
+ }
15
+ }
16
+ return hex;
17
+ }
18
+ export function decode(hex) {
19
+ if (hex.length & 1) {
20
+ throw new InvalidCharacterError('invalid input.');
21
+ }
22
+ let str = '';
23
+ for (let i = 0; i < hex.length; i += 2) {
24
+ const b = parseInt(hex.substring(i, i + 2), 16);
25
+ if (isNaN(b)) {
26
+ throw new InvalidCharacterError(`invalid input at char ${i} == [${hex.substring(i, i + 2)}]`);
27
+ }
28
+ str += String.fromCharCode(b);
29
+ }
30
+ return str;
31
+ }
32
+ export function decodeArrayBuffer(hex) {
33
+ const binLength = hex.length >> 1; // 1 byte per 2 characters
34
+ if (hex.length & 1) {
35
+ throw new InvalidCharacterError('invalid input.');
36
+ }
37
+ const bytes = new Uint8Array(binLength);
38
+ for (let i = 0; i < hex.length; i += 2) {
39
+ const b = parseInt(hex.substring(i, i + 2), 16);
40
+ if (isNaN(b)) {
41
+ throw new InvalidCharacterError(`invalid input at char ${i} == [${hex.substring(i, i + 2)}]`);
42
+ }
43
+ bytes[i >> 1] = b;
44
+ }
45
+ return bytes.buffer;
46
+ }
47
+ export function encodeArrayBuffer(arrayBuffer) {
48
+ if (typeof arrayBuffer !== 'object') {
49
+ throw new TypeError('Expected input to be an ArrayBuffer Object');
50
+ }
51
+ const byteArray = new Uint8Array(arrayBuffer);
52
+ let hexString = '';
53
+ let nextHexByte;
54
+ for (let i = 0; i < byteArray.byteLength; i++) {
55
+ nextHexByte = byteArray[i].toString(16);
56
+ if (nextHexByte.length < 2) {
57
+ nextHexByte = '0' + nextHexByte;
58
+ }
59
+ hexString += nextHexByte;
60
+ }
61
+ return hexString;
62
+ }
63
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGV4LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2VuY29kaW5ncy9oZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRXBELE1BQU0sVUFBVSxNQUFNLENBQUMsR0FBVztJQUNoQyxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUM7SUFDYixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUNuQyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ2hCLEdBQUcsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDO1NBQ2hCO2FBQU0sSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUN2QixNQUFNLElBQUkscUJBQXFCLENBQUMseUJBQXlCLENBQUMsUUFBUSxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQy9GO2FBQU07WUFDTCxHQUFHLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQztTQUNmO0tBQ0Y7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRCxNQUFNLFVBQVUsTUFBTSxDQUFDLEdBQVc7SUFDaEMsSUFBSSxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtRQUNsQixNQUFNLElBQUkscUJBQXFCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztLQUNuRDtJQUNELElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztJQUNiLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDdEMsTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNoRCxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNaLE1BQU0sSUFBSSxxQkFBcUIsQ0FBQyx5QkFBeUIsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDL0Y7UUFDRCxHQUFHLElBQUksTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUMvQjtJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxHQUFXO0lBQzNDLE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsMEJBQTBCO0lBQzdELElBQUksR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDbEIsTUFBTSxJQUFJLHFCQUFxQixDQUFDLGdCQUFnQixDQUFDLENBQUM7S0FDbkQ7SUFDRCxNQUFNLEtBQUssR0FBRyxJQUFJLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN4QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ3RDLE1BQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDaEQsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDWixNQUFNLElBQUkscUJBQXFCLENBQUMseUJBQXlCLENBQUMsUUFBUSxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQy9GO1FBQ0QsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDbkI7SUFDRCxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDdEIsQ0FBQztBQUVELE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxXQUF3QjtJQUN4RCxJQUFJLE9BQU8sV0FBVyxLQUFLLFFBQVEsRUFBRTtRQUNuQyxNQUFNLElBQUksU0FBUyxDQUFDLDRDQUE0QyxDQUFDLENBQUM7S0FDbkU7SUFFRCxNQUFNLFNBQVMsR0FBRyxJQUFJLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUM5QyxJQUFJLFNBQVMsR0FBRyxFQUFFLENBQUM7SUFDbkIsSUFBSSxXQUFXLENBQUM7SUFFaEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDN0MsV0FBVyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFeEMsSUFBSSxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUMxQixXQUFXLEdBQUcsR0FBRyxHQUFHLFdBQVcsQ0FBQztTQUNqQztRQUVELFNBQVMsSUFBSSxXQUFXLENBQUM7S0FDMUI7SUFFRCxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDIn0=
@@ -0,0 +1,3 @@
1
+ export * as base64 from './base64.js';
2
+ export * as hex from './hex.js';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZW5jb2RpbmdzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxNQUFNLE1BQU0sYUFBYSxDQUFDO0FBQ3RDLE9BQU8sS0FBSyxHQUFHLE1BQU0sVUFBVSxDQUFDIn0=