@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,247 @@
1
+ import { InvalidFileError } from '../../../src/errors.js';
2
+ import { readUInt32LE, readUInt16LE, copyUint8Arr, buffToString } from './index.js';
3
+ // TODO: Better document what these constants are
4
+ // TODO: Document each function please
5
+ const CD_SIGNATURE = 0x02014b50;
6
+ const CENTRAL_DIRECTORY_RECORD_FIXED_SIZE = 46;
7
+ const LOCAL_FILE_HEADER_FIXED_SIZE = 30;
8
+ const VERSION_NEEDED_TO_EXTRACT_ZIP64 = 45;
9
+ const manifestMaxSize = 1024 * 1024 * 10; // 10 MB
10
+ const cp437 = '\u0000☺☻♥♦♣♠•◘○◙♂♀♪♫☼►◄↕‼¶§▬↨↑↓→←∟↔▲▼ !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~⌂ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒáíóúñѪº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ ';
11
+ /**
12
+ *
13
+ * ZipReader -
14
+ *
15
+ * This class is used to extract parts of a TDF. You may pull bytes of a given range from a
16
+ * or request specific important chunks like the 'manifest', or 'payload'.
17
+ */
18
+ export class ZipReader {
19
+ constructor(getChunk) {
20
+ this.getChunk = getChunk;
21
+ }
22
+ /**
23
+ * Utility function to get the centralDirectory for the zip file.
24
+ * It reads the end of the file to find it.
25
+ * @return The central directory represented as an object
26
+ */
27
+ async getCentralDirectory() {
28
+ const chunk = await this.getChunk(-1000);
29
+ // TODO: Does this need to be tuned??!?
30
+ // Slice off the EOCDR (End of Central Directory Record) part of the buffer so we can figure out the CD size
31
+ const cdBuffers = this.getCDBuffers(chunk);
32
+ const cdParsedBuffers = cdBuffers.map(parseCDBuffer);
33
+ for (const buffer of cdParsedBuffers) {
34
+ await this.adjustHeaders(buffer);
35
+ }
36
+ return cdParsedBuffers;
37
+ }
38
+ /**
39
+ * Gets the manifest
40
+ * @returns The manifest as a buffer represented as JSON
41
+ */
42
+ async getManifest(cdBuffers, manifestFileName) {
43
+ const cdObj = cdBuffers.find(({ fileName }) => fileName === manifestFileName);
44
+ if (!cdObj) {
45
+ throw new InvalidFileError('Unable to retrieve CD manifest');
46
+ }
47
+ const byteStart = cdObj.relativeOffsetOfLocalHeader + cdObj.headerLength;
48
+ if (cdObj.uncompressedSize > manifestMaxSize) {
49
+ throw new InvalidFileError(`manifest file too large: ${(cdObj.uncompressedSize >> 10).toLocaleString()} KiB`);
50
+ }
51
+ const byteEnd = byteStart + cdObj.uncompressedSize;
52
+ const manifest = await this.getChunk(byteStart, byteEnd);
53
+ return JSON.parse(new TextDecoder().decode(manifest));
54
+ }
55
+ async adjustHeaders(cdObj) {
56
+ if (!cdObj) {
57
+ throw new InvalidFileError('Unable to retrieve CD adjust');
58
+ }
59
+ // Calculate header length -- tdf3-js writes 0 in all the header fields
60
+ // and does not include extra field for zip64
61
+ const headerChunk = await this.getChunk(cdObj.relativeOffsetOfLocalHeader, cdObj.relativeOffsetOfLocalHeader + cdObj.headerLength);
62
+ cdObj.headerLength = recalculateHeaderLength(headerChunk);
63
+ }
64
+ async getPayloadSegment(cdBuffers, payloadName, encrpytedSegmentOffset, encryptedSegmentSize) {
65
+ const cdObj = cdBuffers.find(({ fileName }) => payloadName === fileName);
66
+ if (!cdObj) {
67
+ throw new InvalidFileError('Unable to retrieve CD');
68
+ }
69
+ const byteStart = cdObj.relativeOffsetOfLocalHeader + cdObj.headerLength + encrpytedSegmentOffset;
70
+ // TODO: what's the exact byte start?
71
+ const byteEnd = byteStart + encryptedSegmentSize;
72
+ return await this.getChunk(byteStart, byteEnd);
73
+ }
74
+ /**
75
+ * extracts the CD buffer entries from the end of a zip file.
76
+ * @param chunkBuffer The last portion of a zip file
77
+ * @returns an array of typed arrays, each element corresponding to a central directory record
78
+ */
79
+ getCDBuffers(chunkBuffer) {
80
+ const cdBuffers = [];
81
+ let lastBufferOffset = chunkBuffer.length;
82
+ for (let i = chunkBuffer.length - 22; i >= 0; i -= 1) {
83
+ // If what we're locking at isn't the start of a central directory, skip it..
84
+ if (readUInt32LE(chunkBuffer, i) !== CD_SIGNATURE) {
85
+ // eslint-disable-next-line no-continue
86
+ continue;
87
+ }
88
+ // Slice off that CD from it's start until the end of either the buffer, or whatever the start of the previously
89
+ // found CD was
90
+ cdBuffers.push(chunkBuffer.slice(i, lastBufferOffset));
91
+ // Store the last offset location so we know how to slice off hte next CD.
92
+ lastBufferOffset = i;
93
+ // We can skip over 22 iterations since we know the minimum size of a CD is 22.
94
+ i -= 22;
95
+ }
96
+ // They should be in the correct order. Since we iterate backwards, it's built backwards.
97
+ return cdBuffers.reverse();
98
+ }
99
+ }
100
+ function parseCentralDirectoryWithNoExtras(cdBuffer) {
101
+ const cd = {};
102
+ // 4 - Version made by
103
+ cd.versionMadeBy = readUInt16LE(cdBuffer, 4);
104
+ // 6 - Version needed to extract (minimum)
105
+ cd.versionNeededToExtract = readUInt16LE(cdBuffer, 6);
106
+ // 8 - General purpose bit flag
107
+ cd.generalPurposeBitFlag = readUInt16LE(cdBuffer, 8);
108
+ // 10 - Compression method
109
+ cd.compressionMethod = readUInt16LE(cdBuffer, 10);
110
+ // 12 - File last modification time
111
+ cd.lastModFileTime = readUInt16LE(cdBuffer, 12);
112
+ // 14 - File last modification date
113
+ cd.lastModFileDate = readUInt16LE(cdBuffer, 14);
114
+ // 16 - CRC-32
115
+ cd.crc32 = readUInt32LE(cdBuffer, 16);
116
+ // 20 - Compressed size
117
+ cd.compressedSize = readUInt32LE(cdBuffer, 20);
118
+ // 24 - Uncompressed size
119
+ cd.uncompressedSize = readUInt32LE(cdBuffer, 24);
120
+ // 28 - File name length (n)
121
+ cd.fileNameLength = readUInt16LE(cdBuffer, 28);
122
+ // 30 - Extra field length (m)
123
+ cd.extraFieldLength = readUInt16LE(cdBuffer, 30);
124
+ // 32 - File comment length (k)
125
+ cd.fileCommentLength = readUInt16LE(cdBuffer, 32);
126
+ // 34 - Disk number where file starts
127
+ // 36 - Internal file attributes
128
+ cd.internalFileAttributes = readUInt16LE(cdBuffer, 36);
129
+ // 38 - External file attributes
130
+ cd.externalFileAttributes = readUInt32LE(cdBuffer, 38);
131
+ // 42 - Relative offset of local file header
132
+ cd.relativeOffsetOfLocalHeader = readUInt32LE(cdBuffer, 42);
133
+ const fileNameBuffer = cdBuffer.slice(CENTRAL_DIRECTORY_RECORD_FIXED_SIZE, CENTRAL_DIRECTORY_RECORD_FIXED_SIZE + cd.fileNameLength);
134
+ // eslint-disable-next-line no-bitwise
135
+ const isUtf8 = !!(cd.generalPurposeBitFlag & 0x800);
136
+ cd.fileName = bufferToString(fileNameBuffer, 0, cd.fileNameLength, isUtf8);
137
+ cd.headerLength = LOCAL_FILE_HEADER_FIXED_SIZE + cd.fileNameLength + cd.extraFieldLength;
138
+ return cd;
139
+ }
140
+ /**
141
+ * Takes a central directory buffer and turns it into a manageable object
142
+ * that represents the CD
143
+ * @param cdBuffer The central directory buffer to parse
144
+ * @return The CD object
145
+ */
146
+ export function parseCDBuffer(cdBuffer) {
147
+ if (readUInt32LE(cdBuffer, 0) !== CD_SIGNATURE) {
148
+ throw new InvalidFileError('Invalid central directory file header signature');
149
+ }
150
+ const cd = parseCentralDirectoryWithNoExtras(cdBuffer);
151
+ if (cd.versionNeededToExtract < VERSION_NEEDED_TO_EXTRACT_ZIP64 || !cd.extraFieldLength) {
152
+ // NOTE(PLAT-1134) Zip64 was added in pkzip 4.5
153
+ return cd;
154
+ }
155
+ // Zip-64 information
156
+ const extraFieldBuffer = cdBuffer.slice(CENTRAL_DIRECTORY_RECORD_FIXED_SIZE + cd.fileNameLength, CENTRAL_DIRECTORY_RECORD_FIXED_SIZE + cd.fileNameLength + cd.extraFieldLength);
157
+ const extraFields = sliceExtraFields(extraFieldBuffer, cd);
158
+ const zip64EiefBuffer = extraFields[1];
159
+ if (zip64EiefBuffer) {
160
+ let index = 0;
161
+ // 0 - Original Size 8 bytes
162
+ if (cd.uncompressedSize === 0xffffffff) {
163
+ if (index + 8 > zip64EiefBuffer.length) {
164
+ throw new InvalidFileError('zip64 extended information extra field does not include uncompressed size');
165
+ }
166
+ cd.uncompressedSize = readUInt64LE(zip64EiefBuffer, index);
167
+ index += 8;
168
+ }
169
+ // 8 - Compressed Size 8 bytes
170
+ if (cd.compressedSize === 0xffffffff) {
171
+ if (index + 8 > zip64EiefBuffer.length) {
172
+ throw new InvalidFileError('zip64 extended information extra field does not include compressed size');
173
+ }
174
+ cd.compressedSize = readUInt64LE(zip64EiefBuffer, index);
175
+ index += 8;
176
+ }
177
+ // 16 - Relative Header Offset 8 bytes
178
+ if (cd.relativeOffsetOfLocalHeader === 0xffffffff) {
179
+ if (index + 8 > zip64EiefBuffer.length) {
180
+ throw new InvalidFileError('zip64 extended information extra field does not include relative header offset');
181
+ }
182
+ cd.relativeOffsetOfLocalHeader = readUInt64LE(zip64EiefBuffer, index);
183
+ }
184
+ // 24 - Disk Start Number 4 bytes
185
+ // not needed
186
+ }
187
+ return cd;
188
+ }
189
+ /**
190
+ * Takes a buffer, and turns it into a string
191
+ * @param buffer The buffer to convert
192
+ * @param start The start location of the part of the buffer to convert
193
+ * @param end The end location of the part of the buffer to convert
194
+ * @param isUtf8 Is it utf8? Otherwise, assumed to be CP-437
195
+ * @return The converted string
196
+ */
197
+ function bufferToString(buffer, start, end, isUtf8) {
198
+ if (isUtf8) {
199
+ return buffToString(buffer, 'utf-8', start, end);
200
+ }
201
+ let result = '';
202
+ for (let i = start; i < end; i++) {
203
+ if (cp437[buffer[i]]) {
204
+ result += cp437[buffer[i]];
205
+ }
206
+ }
207
+ return result;
208
+ }
209
+ function recalculateHeaderLength(tempHeaderBuffer) {
210
+ const fileNameLength = readUInt16LE(tempHeaderBuffer, 26);
211
+ const extraFieldLength = readUInt16LE(tempHeaderBuffer, 28);
212
+ return LOCAL_FILE_HEADER_FIXED_SIZE + fileNameLength + extraFieldLength;
213
+ }
214
+ export function readUInt64LE(buffer, offset) {
215
+ const lower32 = readUInt32LE(buffer, offset);
216
+ const upper32 = readUInt32LE(buffer, offset + 4);
217
+ const combined = upper32 * 0x100000000 + lower32;
218
+ if (!Number.isSafeInteger(combined)) {
219
+ throw Error(`Value exceeds MAX_SAFE_INTEGER: ${combined}`);
220
+ }
221
+ return combined;
222
+ }
223
+ /**
224
+ * Breaks extra field buffer into slices by field identifier.
225
+ */
226
+ function sliceExtraFields(extraFieldBuffer, cd) {
227
+ const extraFields = {};
228
+ let i = 0;
229
+ while (i < extraFieldBuffer.length - 3) {
230
+ const headerId = readUInt16LE(extraFieldBuffer, i + 0);
231
+ const dataSize = readUInt16LE(extraFieldBuffer, i + 2);
232
+ const dataStart = i + 4;
233
+ const dataEnd = dataStart + dataSize;
234
+ if (dataEnd > extraFieldBuffer.length) {
235
+ throw new InvalidFileError('extra field length exceeds extra field buffer size');
236
+ }
237
+ const dataBuffer = new Uint8Array(dataSize);
238
+ copyUint8Arr(extraFieldBuffer, dataBuffer, 0, dataStart, dataEnd);
239
+ if (extraFields[headerId]) {
240
+ throw new InvalidFileError(`Conflicting extra field #${headerId} for entry [${cd.fileName}]`);
241
+ }
242
+ extraFields[headerId] = dataBuffer;
243
+ i = dataEnd;
244
+ }
245
+ return extraFields;
246
+ }
247
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemlwLXJlYWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RkZjMvc3JjL3V0aWxzL3ppcC1yZWFkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFHMUQsT0FBTyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLFlBQVksQ0FBQztBQUVwRixpREFBaUQ7QUFDakQsc0NBQXNDO0FBQ3RDLE1BQU0sWUFBWSxHQUFHLFVBQVUsQ0FBQztBQUNoQyxNQUFNLG1DQUFtQyxHQUFHLEVBQUUsQ0FBQztBQUMvQyxNQUFNLDRCQUE0QixHQUFHLEVBQUUsQ0FBQztBQUN4QyxNQUFNLCtCQUErQixHQUFHLEVBQUUsQ0FBQztBQUMzQyxNQUFNLGVBQWUsR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLFFBQVE7QUFFbEQsTUFBTSxLQUFLLEdBQ1QseVFBQXlRLENBQUM7QUF5QzVROzs7Ozs7R0FNRztBQUNILE1BQU0sT0FBTyxTQUFTO0lBR3BCLFlBQVksUUFBaUI7UUFDM0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7SUFDM0IsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxLQUFLLENBQUMsbUJBQW1CO1FBQ3ZCLE1BQU0sS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pDLHVDQUF1QztRQUN2Qyw0R0FBNEc7UUFDNUcsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUUzQyxNQUFNLGVBQWUsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3JELEtBQUssTUFBTSxNQUFNLElBQUksZUFBZSxFQUFFO1lBQ3BDLE1BQU0sSUFBSSxDQUFDLGFBQWEs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
@@ -0,0 +1,302 @@
1
+ import { writeUInt32LE, writeUInt16LE, concatUint8 } from './index.js';
2
+ const CD_SIGNATURE = 0x02014b50;
3
+ const LOCAL_FILE_HEADER_FIXED_SIZE = 30;
4
+ const VERSION_NEEDED_TO_EXTRACT_UTF8 = 20;
5
+ const VERSION_NEEDED_TO_EXTRACT_ZIP64 = 45;
6
+ const FILE_NAME_IS_UTF8 = 1 << 11;
7
+ const UNKNOWN_CRC32_AND_FILE_SIZES = 1 << 3;
8
+ /*
9
+
10
+ { versionMadeBy: 831,
11
+ versionNeededToExtract: 20,
12
+ generalPurposeBitFlag: 2048,
13
+ compressionMethod: 0,
14
+ lastModFileTime: 29443,
15
+ lastModFileDate: 19762,
16
+ crc32: 3735382831,
17
+ compressedSize: 2583,
18
+ uncompressedSize: 2583,
19
+ fileNameLength: 15,
20
+ extraFieldLength: 0,
21
+ fileCommentLength: 0,
22
+ internalFileAttributes: 0,
23
+ externalFileAttributes: 2176057344,
24
+ relativeOffsetOfLocalHeader: 0,
25
+ fileName: '0.manifest.json',
26
+ headerLength: 45 }
27
+
28
+
29
+ */
30
+ const CENTRAL_DIRECTORY_RECORD_FIXED_SIZE = 46;
31
+ const ZIP64_EXTENDED_INFORMATION_EXTRA_FIELD_SIZE = 28;
32
+ // 3 = unix. 63 = spec version 6.3
33
+ const VERSION_MADE_BY = (3 << 8) | 63;
34
+ const NO_COMPRESSION = 0;
35
+ const DATA_DESCRIPTOR_SIZE = 16;
36
+ const ZIP64_DATA_DESCRIPTOR_SIZE = 24;
37
+ const END_OF_CENTRAL_DIRECTORY_RECORD_SIZE = 22;
38
+ const ZIP64_END_OF_CENTRAL_DIRECTORY_RECORD_SIZE = 56;
39
+ const ZIP64_END_OF_CENTRAL_DIRECTORY_LOCATOR_SIZE = 20;
40
+ // write a 64bit integer by writing 2 32bit integers
41
+ export function writeUInt64LE(buffer, n, offset) {
42
+ if (!Number.isSafeInteger(n)) {
43
+ throw new Error(`internal: unsafe number [${n}]`);
44
+ }
45
+ const high = Math.floor(n / 0x100000000);
46
+ const low = n % 0x100000000;
47
+ writeUInt32LE(buffer, low, offset);
48
+ writeUInt32LE(buffer, high, offset + 4);
49
+ }
50
+ // MS-DOS 64 bit date/time fields, as described:
51
+ // https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-dosdatetimetofiletime
52
+ export function dateToDosDateTime(jsDate) {
53
+ let date = 0;
54
+ date |= jsDate.getDate() & 0x1f; // 1-31
55
+ date |= ((jsDate.getMonth() + 1) & 0xf) << 5; // 0-11, 1-12
56
+ date |= ((jsDate.getFullYear() - 1980) & 0x7f) << 9; // 0-128, 1980-2108
57
+ let time = 0;
58
+ time |= Math.floor(jsDate.getSeconds() / 2); // 0-59, 0-29 (lose odd numbers)
59
+ time |= (jsDate.getMinutes() & 0x3f) << 5; // 0-59
60
+ time |= (jsDate.getHours() & 0x1f) << 11; // 0-23
61
+ return { date, time };
62
+ }
63
+ /**
64
+ * Utilities for writing zip file structures.
65
+ */
66
+ export class ZipWriter {
67
+ constructor() {
68
+ // Enable zip64
69
+ this.zip64 = true;
70
+ }
71
+ getLocalFileHeader(utf8FileName, crc32, compressedSize, uncompressedSize, now = new Date()) {
72
+ const fixedSizeStuff = new Uint8Array(LOCAL_FILE_HEADER_FIXED_SIZE);
73
+ let generalPurposeBitFlag = FILE_NAME_IS_UTF8;
74
+ // we can't know the size in advance
75
+ // TODO: this means we need to add a data descriptor!
76
+ generalPurposeBitFlag |= UNKNOWN_CRC32_AND_FILE_SIZES;
77
+ const dateModified = dateToDosDateTime(now);
78
+ const filenameBuffer = new TextEncoder().encode(utf8FileName);
79
+ // local file header signature 4 bytes (0x04034b50)
80
+ writeUInt32LE(fixedSizeStuff, 0x04034b50, 0);
81
+ // version needed to extract 2 bytes
82
+ writeUInt16LE(fixedSizeStuff, VERSION_NEEDED_TO_EXTRACT_UTF8, 4);
83
+ // general purpose bit flag 2 bytes
84
+ writeUInt16LE(fixedSizeStuff, generalPurposeBitFlag, 6);
85
+ // compression method 2 bytes
86
+ writeUInt16LE(fixedSizeStuff, NO_COMPRESSION, 8);
87
+ // last mod file time 2 bytes
88
+ writeUInt16LE(fixedSizeStuff, dateModified.time, 10);
89
+ // last mod file date 2 bytes
90
+ writeUInt16LE(fixedSizeStuff, dateModified.date, 12);
91
+ // crc-32 4 bytes
92
+ writeUInt32LE(fixedSizeStuff, crc32, 14);
93
+ // compressed size 4 bytes
94
+ writeUInt32LE(fixedSizeStuff, this.zip64 ? 0xffffffff : compressedSize, 18);
95
+ // uncompressed size 4 bytes
96
+ writeUInt32LE(fixedSizeStuff, this.zip64 ? 0xffffffff : uncompressedSize, 22);
97
+ // file name length 2 bytes
98
+ writeUInt16LE(fixedSizeStuff, filenameBuffer.length, 26);
99
+ let zeiefBuffer = new Uint8Array(0);
100
+ if (this.zip64) {
101
+ // ZIP64 extended information extra field
102
+ zeiefBuffer = new Uint8Array(ZIP64_EXTENDED_INFORMATION_EXTRA_FIELD_SIZE);
103
+ // 0x0001 2 bytes Tag for this "extra" block type
104
+ writeUInt16LE(zeiefBuffer, 0x0001, 0);
105
+ // size 2 bytes Size of this "extra" block
106
+ writeUInt16LE(zeiefBuffer, ZIP64_EXTENDED_INFORMATION_EXTRA_FIELD_SIZE - 4, 2);
107
+ writeUInt64LE(zeiefBuffer, compressedSize, 4);
108
+ writeUInt64LE(zeiefBuffer, uncompressedSize, 12);
109
+ writeUInt64LE(zeiefBuffer, 0, 20);
110
+ }
111
+ // extra field length 2 bytes
112
+ writeUInt16LE(fixedSizeStuff, zeiefBuffer.length, 28);
113
+ return concatUint8([
114
+ fixedSizeStuff,
115
+ // file name (variable size)
116
+ filenameBuffer,
117
+ // extra field (variable size)
118
+ zeiefBuffer,
119
+ ]);
120
+ }
121
+ writeDataDescriptor(crc32, uncompressedSize) {
122
+ // NOTE(PLAT-1134): optional signature (required according to Archive Utility)
123
+ // 4.3.9.3 Although not originally assigned a signature, the value
124
+ // 0x08074b50 has commonly been adopted as a signature value
125
+ // for the data descriptor record. Implementers should be
126
+ // aware that ZIP files may be encountered with or without this
127
+ // signature marking data descriptors and SHOULD account for
128
+ // either case when reading ZIP files to ensure compatibility.
129
+ const ddSig = 0x08074b50;
130
+ let buffer;
131
+ if (this.zip64) {
132
+ // 4.3.9.2 When compressing files, compressed and uncompressed sizes
133
+ // SHOULD be stored in ZIP64 format (as 8 byte values) when a
134
+ // file's size exceeds 0xFFFFFFFF. However ZIP64 format MAY be
135
+ // used regardless of the size of a file. When extracting, if
136
+ // the zip64 extended information extra field is present for
137
+ // the file the compressed and uncompressed sizes will be 8
138
+ // byte values.
139
+ buffer = new Uint8Array(ZIP64_DATA_DESCRIPTOR_SIZE);
140
+ writeUInt32LE(buffer, crc32, 4);
141
+ writeUInt32LE(buffer, ddSig, 0);
142
+ // We just use STORE, so compressed and uncompressed are the same.
143
+ writeUInt64LE(buffer, uncompressedSize, 8);
144
+ writeUInt64LE(buffer, uncompressedSize, 16);
145
+ }
146
+ else {
147
+ buffer = new Uint8Array(DATA_DESCRIPTOR_SIZE);
148
+ writeUInt32LE(buffer, ddSig, 0);
149
+ writeUInt32LE(buffer, crc32, 4);
150
+ writeUInt32LE(buffer, uncompressedSize, 8);
151
+ writeUInt32LE(buffer, uncompressedSize, 12);
152
+ }
153
+ return buffer;
154
+ }
155
+ writeCentralDirectoryRecord(uncompressedSize, utf8FileName, relativeOffsetOfLocalHeader, crc32, externalFileAttributes, now = new Date()) {
156
+ const fixedSizeStuff = new Uint8Array(CENTRAL_DIRECTORY_RECORD_FIXED_SIZE);
157
+ let generalPurposeBitFlag = FILE_NAME_IS_UTF8;
158
+ // we can't know the size in advance
159
+ // TODO: this means we need to add a data descriptor!
160
+ generalPurposeBitFlag |= UNKNOWN_CRC32_AND_FILE_SIZES;
161
+ let normalCompressedSize = uncompressedSize;
162
+ let normalUncompressedSize = uncompressedSize;
163
+ let normalRelativeOffsetOfLocalHeader = relativeOffsetOfLocalHeader;
164
+ let versionNeededToExtract = VERSION_NEEDED_TO_EXTRACT_UTF8;
165
+ let zeiefBuffer = new Uint8Array(0);
166
+ if (this.zip64) {
167
+ versionNeededToExtract = VERSION_NEEDED_TO_EXTRACT_ZIP64;
168
+ normalCompressedSize = 0xffffffff;
169
+ normalUncompressedSize = 0xffffffff;
170
+ normalRelativeOffsetOfLocalHeader = 0xffffffff;
171
+ // ZIP64 extended information extra field
172
+ zeiefBuffer = new Uint8Array(ZIP64_EXTENDED_INFORMATION_EXTRA_FIELD_SIZE);
173
+ // 0x0001 2 bytes Tag for this "extra" block type
174
+ writeUInt16LE(zeiefBuffer, 0x0001, 0);
175
+ // size 2 bytes Size of this "extra" block
176
+ writeUInt16LE(zeiefBuffer, ZIP64_EXTENDED_INFORMATION_EXTRA_FIELD_SIZE - 4, 2);
177
+ // uncompressed size 8 bytes Original uncompressed file size
178
+ writeUInt64LE(zeiefBuffer, uncompressedSize, 4);
179
+ // compressed Size 8 bytes Size of compressed data
180
+ writeUInt64LE(zeiefBuffer, uncompressedSize, 12);
181
+ // relative header offset 8 bytes Offset of local header record
182
+ writeUInt64LE(zeiefBuffer, relativeOffsetOfLocalHeader, 20);
183
+ // Disk Start Number 4 bytes Number of the disk on which this file starts
184
+ // (omit)
185
+ // console.log(`zeif Buffer ${utf8FileName}: ${zeiefBuffer.toString('hex')}`);
186
+ }
187
+ const dateModified = dateToDosDateTime(now);
188
+ const filenameBuffer = new TextEncoder().encode(utf8FileName);
189
+ // central file header signature 4 bytes (0x02014b50)
190
+ writeUInt32LE(fixedSizeStuff, CD_SIGNATURE, 0);
191
+ // version made by 2 bytes
192
+ writeUInt16LE(fixedSizeStuff, VERSION_MADE_BY, 4);
193
+ // version needed to extract 2 bytes
194
+ writeUInt16LE(fixedSizeStuff, versionNeededToExtract, 6);
195
+ // general purpose bit flag 2 bytes
196
+ writeUInt16LE(fixedSizeStuff, generalPurposeBitFlag, 8);
197
+ // compression method 2 bytes
198
+ writeUInt16LE(fixedSizeStuff, NO_COMPRESSION, 10);
199
+ // last mod file time 2 bytes
200
+ writeUInt16LE(fixedSizeStuff, dateModified.time, 12);
201
+ // last mod file date 2 bytes
202
+ writeUInt16LE(fixedSizeStuff, dateModified.date, 14);
203
+ // crc-32 4 bytes
204
+ writeUInt32LE(fixedSizeStuff, crc32, 16);
205
+ // compressed size 4 bytes
206
+ writeUInt32LE(fixedSizeStuff, normalCompressedSize, 20);
207
+ // uncompressed size 4 bytes
208
+ writeUInt32LE(fixedSizeStuff, normalUncompressedSize, 24);
209
+ // file name length 2 bytes
210
+ writeUInt16LE(fixedSizeStuff, filenameBuffer.length, 28);
211
+ // extra field length 2 bytes
212
+ writeUInt16LE(fixedSizeStuff, zeiefBuffer.length, 30);
213
+ // file comment length 2 bytes
214
+ writeUInt16LE(fixedSizeStuff, 0, 32);
215
+ // disk number start 2 bytes
216
+ writeUInt16LE(fixedSizeStuff, 0, 34);
217
+ // internal file attributes 2 bytes
218
+ writeUInt16LE(fixedSizeStuff, 0, 36);
219
+ // external file attributes 4 bytes
220
+ writeUInt32LE(fixedSizeStuff, externalFileAttributes, 38);
221
+ // relative offset of local header 4 bytes
222
+ writeUInt32LE(fixedSizeStuff, normalRelativeOffsetOfLocalHeader, 42);
223
+ return concatUint8([
224
+ fixedSizeStuff,
225
+ // file name (variable size)
226
+ filenameBuffer,
227
+ // extra field (variable size)
228
+ zeiefBuffer,
229
+ // file comment (variable size)
230
+ // empty comment
231
+ ]);
232
+ }
233
+ writeEndOfCentralDirectoryRecord(entriesLength, sizeOfCentralDirectory, offsetOfStartOfCentralDirectory) {
234
+ let normalEntriesLength = entriesLength;
235
+ let normalSizeOfCentralDirectory = sizeOfCentralDirectory;
236
+ let normalOffsetOfStartOfCentralDirectory = offsetOfStartOfCentralDirectory;
237
+ if (this.zip64) {
238
+ normalEntriesLength = 0xffff;
239
+ normalSizeOfCentralDirectory = 0xffffffff;
240
+ normalOffsetOfStartOfCentralDirectory = 0xffffffff;
241
+ }
242
+ const eocdrBuffer = new Uint8Array(END_OF_CENTRAL_DIRECTORY_RECORD_SIZE);
243
+ // end of central dir signature 4 bytes (0x06054b50)
244
+ writeUInt32LE(eocdrBuffer, 0x06054b50, 0);
245
+ // number of this disk 2 bytes
246
+ writeUInt16LE(eocdrBuffer, 0, 4);
247
+ // number of the disk with the start of the central directory 2 bytes
248
+ writeUInt16LE(eocdrBuffer, 0, 6);
249
+ // total number of entries in the central directory on this disk 2 bytes
250
+ writeUInt16LE(eocdrBuffer, normalEntriesLength, 8);
251
+ // total number of entries in the central directory 2 bytes
252
+ writeUInt16LE(eocdrBuffer, normalEntriesLength, 10);
253
+ // size of the central directory 4 bytes
254
+ writeUInt32LE(eocdrBuffer, normalSizeOfCentralDirectory, 12);
255
+ // offset of start of central directory with respect to the starting disk number 4 bytes
256
+ writeUInt32LE(eocdrBuffer, normalOffsetOfStartOfCentralDirectory, 16);
257
+ // .ZIP file comment length 2 bytes
258
+ writeUInt16LE(eocdrBuffer, 0, 20);
259
+ // .ZIP file comment (variable size)
260
+ // no comment
261
+ if (!this.zip64) {
262
+ return eocdrBuffer;
263
+ }
264
+ // ZIP64 format
265
+ // ZIP64 End of Central Directory Record
266
+ const zip64EocdrBuffer = new Uint8Array(ZIP64_END_OF_CENTRAL_DIRECTORY_RECORD_SIZE);
267
+ // zip64 end of central dir signature 4 bytes (0x06064b50)
268
+ writeUInt32LE(zip64EocdrBuffer, 0x06064b50, 0);
269
+ // size of zip64 end of central directory record 8 bytes
270
+ writeUInt64LE(zip64EocdrBuffer, ZIP64_END_OF_CENTRAL_DIRECTORY_RECORD_SIZE - 12, 4);
271
+ // version made by 2 bytes
272
+ writeUInt16LE(zip64EocdrBuffer, VERSION_MADE_BY, 12);
273
+ // version needed to extract 2 bytes
274
+ writeUInt16LE(zip64EocdrBuffer, VERSION_NEEDED_TO_EXTRACT_ZIP64, 14);
275
+ // number of this disk 4 bytes
276
+ writeUInt32LE(zip64EocdrBuffer, 0, 16);
277
+ // number of the disk with the start of the central directory 4 bytes
278
+ writeUInt32LE(zip64EocdrBuffer, 0, 20);
279
+ // total number of entries in the central directory on this disk 8 bytes
280
+ writeUInt64LE(zip64EocdrBuffer, entriesLength, 24);
281
+ // total number of entries in the central directory 8 bytes
282
+ writeUInt64LE(zip64EocdrBuffer, entriesLength, 32);
283
+ // size of the central directory 8 bytes
284
+ writeUInt64LE(zip64EocdrBuffer, sizeOfCentralDirectory, 40);
285
+ // offset of start of central directory with respect to the starting disk number 8 bytes
286
+ writeUInt64LE(zip64EocdrBuffer, offsetOfStartOfCentralDirectory, 48);
287
+ // zip64 extensible data sector (variable size)
288
+ // nothing in the zip64 extensible data sector
289
+ // ZIP64 End of Central Directory Locator
290
+ const zip64EocdlBuffer = new Uint8Array(ZIP64_END_OF_CENTRAL_DIRECTORY_LOCATOR_SIZE);
291
+ // zip64 end of central dir locator signature 4 bytes (0x07064b50)
292
+ writeUInt32LE(zip64EocdlBuffer, 0x07064b50, 0);
293
+ // number of the disk with the start of the zip64 end of central directory 4 bytes
294
+ writeUInt32LE(zip64EocdlBuffer, 0, 4);
295
+ // relative offset of the zip64 end of central directory record 8 bytes
296
+ writeUInt64LE(zip64EocdlBuffer, offsetOfStartOfCentralDirectory + sizeOfCentralDirectory, 8);
297
+ // total number of disks 4 bytes
298
+ writeUInt32LE(zip64EocdlBuffer, 1, 16);
299
+ return concatUint8([zip64EocdrBuffer, zip64EocdlBuffer, eocdrBuffer]);
300
+ }
301
+ }
302
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemlwLXdyaXRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RkZjMvc3JjL3V0aWxzL3ppcC13cml0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRXZFLE1BQU0sWUFBWSxHQUFHLFVBQVUsQ0FBQztBQUNoQyxNQUFNLDRCQUE0QixHQUFHLEVBQUUsQ0FBQztBQUN4QyxNQUFNLDhCQUE4QixHQUFHLEVBQUUsQ0FBQztBQUMxQyxNQUFNLCtCQUErQixHQUFHLEVBQUUsQ0FBQztBQUMzQyxNQUFNLGlCQUFpQixHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDbEMsTUFBTSw0QkFBNEIsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBRTVDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFxQkU7QUFFRixNQUFNLG1DQUFtQyxHQUFHLEVBQUUsQ0FBQztBQUMvQyxNQUFNLDJDQUEyQyxHQUFHLEVBQUUsQ0FBQztBQUV2RCxrQ0FBa0M7QUFDbEMsTUFBTSxlQUFlLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBRXRDLE1BQU0sY0FBYyxHQUFHLENBQUMsQ0FBQztBQUV6QixNQUFNLG9CQUFvQixHQUFHLEVBQUUsQ0FBQztBQUNoQyxNQUFNLDBCQUEwQixHQUFHLEVBQUUsQ0FBQztBQUV0QyxNQUFNLG9DQUFvQyxHQUFHLEVBQUUsQ0FBQztBQUNoRCxNQUFNLDBDQUEwQyxHQUFHLEVBQUUsQ0FBQztBQUN0RCxNQUFNLDJDQUEyQyxHQUFHLEVBQUUsQ0FBQztBQUV2RCxvREFBb0Q7QUFDcEQsTUFBTSxVQUFVLGFBQWEsQ0FBQyxNQUFrQixFQUFFLENBQVMsRUFBRSxNQUFjO0lBQ3pFLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQzVCLE1B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
@@ -0,0 +1,3 @@
1
+ export const version = '0.1.0';
2
+ export const clientType = 'tdf3-js-client';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RkZjMvc3JjL3ZlcnNpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQztBQUMvQixNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsZ0JBQWdCLENBQUMifQ==