neozipkit 0.2.1 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (301) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +410 -186
  3. package/contracts/ABI.txt +889 -0
  4. package/contracts/Bytecode.txt +1 -0
  5. package/contracts/COMPILATION_NOTES.md +59 -0
  6. package/contracts/QUICK_DEPLOY.md +286 -0
  7. package/contracts/README.md +235 -131
  8. package/contracts/VERIFICATION.md +308 -0
  9. package/contracts/deploy-interactive.js +448 -0
  10. package/contracts/deployment-arbitrum-sepolia.json +12 -0
  11. package/contracts/deployment-arbitrum.json +12 -0
  12. package/contracts/deployment-eth-sepolia.json +12 -0
  13. package/contracts/hardhat.config.js +114 -0
  14. package/contracts/package.json +20 -0
  15. package/contracts/scripts/compile-and-extract.js +119 -0
  16. package/contracts/scripts/verify-contract.js +223 -0
  17. package/contracts/src/{NZIP-NFT-Private.sol → NZIP-NFT-v2.0.sol} +66 -151
  18. package/contracts/src/NZIP-NFT.sol +9 -15
  19. package/dist/blockchain/browser/TokenVerifierBrowser.d.ts +67 -0
  20. package/dist/blockchain/browser/TokenVerifierBrowser.d.ts.map +1 -0
  21. package/dist/blockchain/browser/TokenVerifierBrowser.js +313 -0
  22. package/dist/blockchain/browser/TokenVerifierBrowser.js.map +1 -0
  23. package/dist/blockchain/browser/WalletManagerBrowser.d.ts +98 -0
  24. package/dist/blockchain/browser/WalletManagerBrowser.d.ts.map +1 -0
  25. package/dist/blockchain/browser/WalletManagerBrowser.js +434 -0
  26. package/dist/blockchain/browser/WalletManagerBrowser.js.map +1 -0
  27. package/dist/blockchain/browser/ZipkitMinterBrowser.d.ts +58 -0
  28. package/dist/blockchain/browser/ZipkitMinterBrowser.d.ts.map +1 -0
  29. package/dist/blockchain/browser/ZipkitMinterBrowser.js +317 -0
  30. package/dist/blockchain/browser/ZipkitMinterBrowser.js.map +1 -0
  31. package/dist/blockchain/browser/index.d.ts +11 -0
  32. package/dist/blockchain/browser/index.d.ts.map +1 -0
  33. package/dist/blockchain/browser/index.js +16 -0
  34. package/dist/blockchain/browser/index.js.map +1 -0
  35. package/dist/blockchain/core/WalletManager.d.ts +124 -0
  36. package/dist/blockchain/core/WalletManager.d.ts.map +1 -0
  37. package/dist/blockchain/{ZipKitWallet.js → core/WalletManager.js} +157 -177
  38. package/dist/blockchain/core/WalletManager.js.map +1 -0
  39. package/dist/blockchain/{ZipKitMinter.d.ts → core/ZipkitMinter.d.ts} +46 -11
  40. package/dist/blockchain/core/ZipkitMinter.d.ts.map +1 -0
  41. package/dist/blockchain/core/ZipkitMinter.js +548 -0
  42. package/dist/blockchain/core/ZipkitMinter.js.map +1 -0
  43. package/dist/blockchain/{ZipKitOTS.d.ts → core/ZipkitOTS.d.ts} +6 -15
  44. package/dist/blockchain/core/ZipkitOTS.d.ts.map +1 -0
  45. package/dist/blockchain/{ZipKitOTS.js → core/ZipkitOTS.js} +26 -84
  46. package/dist/blockchain/core/ZipkitOTS.js.map +1 -0
  47. package/dist/blockchain/core/ZipkitVerifier.d.ts +177 -0
  48. package/dist/blockchain/core/ZipkitVerifier.d.ts.map +1 -0
  49. package/dist/blockchain/core/ZipkitVerifier.js +632 -0
  50. package/dist/blockchain/core/ZipkitVerifier.js.map +1 -0
  51. package/dist/blockchain/core/contracts.d.ts +83 -0
  52. package/dist/blockchain/core/contracts.d.ts.map +1 -0
  53. package/dist/blockchain/core/contracts.js +341 -0
  54. package/dist/blockchain/core/contracts.js.map +1 -0
  55. package/dist/blockchain/core/index.d.ts +12 -0
  56. package/dist/blockchain/core/index.d.ts.map +1 -0
  57. package/dist/blockchain/core/index.js +59 -0
  58. package/dist/blockchain/core/index.js.map +1 -0
  59. package/dist/blockchain/index.d.ts +11 -7
  60. package/dist/blockchain/index.d.ts.map +1 -0
  61. package/dist/blockchain/index.js +18 -34
  62. package/dist/blockchain/index.js.map +1 -0
  63. package/dist/blockchain/node/WalletManagerNode.d.ts +47 -0
  64. package/dist/blockchain/node/WalletManagerNode.d.ts.map +1 -0
  65. package/dist/blockchain/node/WalletManagerNode.js +203 -0
  66. package/dist/blockchain/node/WalletManagerNode.js.map +1 -0
  67. package/dist/blockchain/node/index.d.ts +12 -0
  68. package/dist/blockchain/node/index.d.ts.map +1 -0
  69. package/dist/blockchain/node/index.js +24 -0
  70. package/dist/blockchain/node/index.js.map +1 -0
  71. package/dist/browser/ZipkitBrowser.d.ts +27 -0
  72. package/dist/browser/ZipkitBrowser.d.ts.map +1 -0
  73. package/dist/browser/{ZipKitBrowser.js → ZipkitBrowser.js} +96 -43
  74. package/dist/browser/ZipkitBrowser.js.map +1 -0
  75. package/dist/browser/index.d.ts +12 -0
  76. package/dist/browser/index.d.ts.map +1 -0
  77. package/dist/browser/index.js +42 -0
  78. package/dist/browser/index.js.map +1 -0
  79. package/dist/browser-esm/index.d.ts +12 -0
  80. package/dist/browser-esm/index.js +59559 -0
  81. package/dist/browser-esm/index.js.map +7 -0
  82. package/dist/browser-umd/index.d.ts +12 -0
  83. package/dist/browser-umd/index.js +59576 -0
  84. package/dist/browser-umd/index.js.map +7 -0
  85. package/dist/browser-umd/index.min.js +63 -0
  86. package/dist/browser.d.ts +8 -14
  87. package/dist/browser.js +13 -28
  88. package/dist/core/ZipCompress.d.ts +99 -0
  89. package/dist/core/ZipCompress.d.ts.map +1 -0
  90. package/dist/core/ZipCompress.js +309 -0
  91. package/dist/core/ZipCompress.js.map +1 -0
  92. package/dist/core/ZipDecompress.d.ts +58 -0
  93. package/dist/core/ZipDecompress.d.ts.map +1 -0
  94. package/dist/core/ZipDecompress.js +172 -0
  95. package/dist/core/ZipDecompress.js.map +1 -0
  96. package/dist/{shared → core}/ZipEntry.d.ts +8 -1
  97. package/dist/core/ZipEntry.d.ts.map +1 -0
  98. package/dist/{shared → core}/ZipEntry.js +225 -82
  99. package/dist/core/ZipEntry.js.map +1 -0
  100. package/dist/core/Zipkit.d.ts +315 -0
  101. package/dist/core/Zipkit.d.ts.map +1 -0
  102. package/dist/core/Zipkit.js +647 -0
  103. package/dist/core/Zipkit.js.map +1 -0
  104. package/dist/core/components/HashCalculator.d.ts +138 -0
  105. package/dist/core/components/HashCalculator.d.ts.map +1 -0
  106. package/dist/core/components/HashCalculator.js +360 -0
  107. package/dist/core/components/HashCalculator.js.map +1 -0
  108. package/dist/core/components/Logger.d.ts +73 -0
  109. package/dist/core/components/Logger.d.ts.map +1 -0
  110. package/dist/core/components/Logger.js +156 -0
  111. package/dist/core/components/Logger.js.map +1 -0
  112. package/dist/core/components/ProgressTracker.d.ts +43 -0
  113. package/dist/core/components/ProgressTracker.d.ts.map +1 -0
  114. package/dist/core/components/ProgressTracker.js +112 -0
  115. package/dist/core/components/ProgressTracker.js.map +1 -0
  116. package/dist/{shared → core}/components/Support.d.ts +1 -0
  117. package/dist/core/components/Support.d.ts.map +1 -0
  118. package/dist/{shared → core}/components/Support.js +1 -0
  119. package/dist/core/components/Support.js.map +1 -0
  120. package/dist/{shared → core}/components/Util.d.ts +7 -2
  121. package/dist/core/components/Util.d.ts.map +1 -0
  122. package/dist/{shared → core}/components/Util.js +14 -34
  123. package/dist/core/components/Util.js.map +1 -0
  124. package/dist/{shared → core}/constants/Errors.d.ts +1 -2
  125. package/dist/core/constants/Errors.d.ts.map +1 -0
  126. package/dist/{shared → core}/constants/Errors.js +1 -3
  127. package/dist/core/constants/Errors.js.map +1 -0
  128. package/dist/{shared → core}/constants/Headers.d.ts +3 -0
  129. package/dist/core/constants/Headers.d.ts.map +1 -0
  130. package/dist/{shared → core}/constants/Headers.js +20 -17
  131. package/dist/core/constants/Headers.js.map +1 -0
  132. package/dist/core/encryption/Manager.d.ts +58 -0
  133. package/dist/core/encryption/Manager.d.ts.map +1 -0
  134. package/dist/core/encryption/Manager.js +121 -0
  135. package/dist/core/encryption/Manager.js.map +1 -0
  136. package/dist/core/encryption/ZipCrypto.d.ts +172 -0
  137. package/dist/core/encryption/ZipCrypto.d.ts.map +1 -0
  138. package/dist/core/encryption/ZipCrypto.js +554 -0
  139. package/dist/core/encryption/ZipCrypto.js.map +1 -0
  140. package/dist/core/encryption/index.d.ts +9 -0
  141. package/dist/core/encryption/index.d.ts.map +1 -0
  142. package/dist/core/encryption/index.js +17 -0
  143. package/dist/core/encryption/index.js.map +1 -0
  144. package/dist/core/encryption/types.d.ts +29 -0
  145. package/dist/core/encryption/types.d.ts.map +1 -0
  146. package/dist/core/encryption/types.js +12 -0
  147. package/dist/core/encryption/types.js.map +1 -0
  148. package/dist/core/index.d.ts +24 -0
  149. package/dist/core/index.d.ts.map +1 -0
  150. package/dist/core/index.js +57 -0
  151. package/dist/core/index.js.map +1 -0
  152. package/dist/core/version.d.ts +5 -0
  153. package/dist/core/version.d.ts.map +1 -0
  154. package/dist/core/version.js +31 -0
  155. package/dist/core/version.js.map +1 -0
  156. package/dist/index.d.ts +8 -18
  157. package/dist/index.d.ts.map +1 -0
  158. package/dist/index.js +29 -35
  159. package/dist/index.js.map +1 -0
  160. package/dist/node/ZipCompressNode.d.ts +123 -0
  161. package/dist/node/ZipCompressNode.d.ts.map +1 -0
  162. package/dist/node/ZipCompressNode.js +576 -0
  163. package/dist/node/ZipCompressNode.js.map +1 -0
  164. package/dist/node/ZipDecompressNode.d.ts +120 -0
  165. package/dist/node/ZipDecompressNode.d.ts.map +1 -0
  166. package/dist/node/ZipDecompressNode.js +461 -0
  167. package/dist/node/ZipDecompressNode.js.map +1 -0
  168. package/dist/node/ZipkitNode.d.ts +406 -0
  169. package/dist/node/ZipkitNode.d.ts.map +1 -0
  170. package/dist/node/ZipkitNode.js +1305 -0
  171. package/dist/node/ZipkitNode.js.map +1 -0
  172. package/dist/node/index.d.ts +26 -0
  173. package/dist/node/index.d.ts.map +1 -0
  174. package/dist/node/index.js +65 -0
  175. package/dist/node/index.js.map +1 -0
  176. package/dist/types/index.d.ts +59 -0
  177. package/dist/types/index.d.ts.map +1 -0
  178. package/dist/types/index.js +36 -1
  179. package/dist/types/index.js.map +1 -0
  180. package/examples/README.md +269 -0
  181. package/examples/blockchain-tokenize.ts +354 -0
  182. package/examples/create-zip.ts +172 -0
  183. package/examples/extract-zip.ts +158 -0
  184. package/examples/list-zip.ts +161 -0
  185. package/examples/test-files/data.json +116 -0
  186. package/examples/test-files/document.md +80 -0
  187. package/examples/test-files/document.txt +2 -0
  188. package/examples/test-files/file1.txt +48 -0
  189. package/examples/test-files/file2.txt +80 -0
  190. package/examples/tsconfig.json +44 -0
  191. package/examples/unzip-token.ts +491 -0
  192. package/examples/verify-tokenized-zip.ts +305 -0
  193. package/examples/zip-token.ts +604 -0
  194. package/package.json +108 -24
  195. package/src/blockchain/README.md +59 -66
  196. package/src/{browser/TokenVerifierBrowser.ts-remove → blockchain/browser/TokenVerifierBrowser.ts} +125 -79
  197. package/src/blockchain/browser/WalletManagerBrowser.ts +486 -0
  198. package/src/blockchain/browser/ZipkitMinterBrowser.ts +400 -0
  199. package/src/blockchain/browser/index.ts +13 -0
  200. package/src/blockchain/{ZipKitWallet.ts → core/WalletManager.ts} +241 -143
  201. package/src/blockchain/core/ZipkitMinter.ts +716 -0
  202. package/src/blockchain/{ZipKitOTS.ts → core/ZipkitOTS.ts} +28 -62
  203. package/src/blockchain/core/ZipkitVerifier.ts +853 -0
  204. package/src/blockchain/core/contracts.ts +370 -0
  205. package/src/blockchain/core/index.ts +71 -0
  206. package/src/blockchain/index.ts +21 -55
  207. package/src/blockchain/node/WalletManagerNode.ts +171 -0
  208. package/src/blockchain/node/index.ts +40 -0
  209. package/src/browser/{ZipKitBrowser.ts → ZipkitBrowser.ts} +104 -41
  210. package/src/browser/index.esm.ts +37 -0
  211. package/src/browser/index.ts +25 -0
  212. package/src/core/ZipCompress.ts +398 -0
  213. package/src/core/ZipDecompress.ts +212 -0
  214. package/src/{shared → core}/ZipEntry.ts +240 -90
  215. package/src/core/Zipkit.ts +794 -0
  216. package/src/core/components/HashCalculator.ts +384 -0
  217. package/src/core/components/Logger.ts +180 -0
  218. package/src/core/components/ProgressTracker.ts +134 -0
  219. package/src/{shared → core}/components/Util.ts +12 -34
  220. package/src/{shared → core}/constants/Errors.ts +0 -4
  221. package/src/{shared → core}/constants/Headers.ts +19 -17
  222. package/src/core/encryption/Manager.ts +137 -0
  223. package/src/core/encryption/ZipCrypto.ts +650 -0
  224. package/src/core/encryption/index.ts +15 -0
  225. package/src/core/encryption/types.ts +33 -0
  226. package/src/core/index.ts +34 -0
  227. package/src/core/version.ts +33 -0
  228. package/src/index.ts +54 -25
  229. package/src/node/ZipCompressNode.ts +632 -0
  230. package/src/node/ZipDecompressNode.ts +508 -0
  231. package/src/node/ZipkitNode.ts +1559 -0
  232. package/src/node/index.ts +69 -0
  233. package/src/types/index.ts +131 -1
  234. package/src/types/modules.d.ts +1 -11
  235. package/src/types/opentimestamps.d.ts +1 -23
  236. package/contracts/INTEGRATION.md +0 -338
  237. package/contracts/NETWORKS.md +0 -156
  238. package/contracts/NZIP-NFT-bytecode.txt +0 -1
  239. package/contracts/constants.ts +0 -952
  240. package/contracts/deploy-bytecode.mjs +0 -94
  241. package/dist/blockchain/CertificateToken.d.ts +0 -48
  242. package/dist/blockchain/CertificateToken.js +0 -386
  243. package/dist/blockchain/ZipKitMinter.js +0 -347
  244. package/dist/blockchain/ZipKitNFT.d.ts +0 -3
  245. package/dist/blockchain/ZipKitNFT.js +0 -7
  246. package/dist/blockchain/ZipKitVerifier.d.ts +0 -69
  247. package/dist/blockchain/ZipKitVerifier.js +0 -289
  248. package/dist/blockchain/ZipKitWallet.d.ts +0 -69
  249. package/dist/blockchain/contracts.d.ts +0 -14
  250. package/dist/blockchain/contracts.js +0 -77
  251. package/dist/blockchain/types.d.ts +0 -47
  252. package/dist/blockchain/types.js +0 -30
  253. package/dist/browser/ZipKitBrowser.d.ts +0 -18
  254. package/dist/browser/ZipKitStampBrowser.d.ts +0 -2
  255. package/dist/browser/ZipKitStampBrowser.js +0 -12
  256. package/dist/browser-index.d.ts +0 -18
  257. package/dist/browser-index.js +0 -57
  258. package/dist/server/ZipKitServer.d.ts +0 -74
  259. package/dist/server/ZipKitServer.js +0 -310
  260. package/dist/shared/ZipKit.d.ts +0 -243
  261. package/dist/shared/ZipKit.js +0 -772
  262. package/dist/shared/components/CertificateOTS.d.ts +0 -15
  263. package/dist/shared/components/CertificateOTS.js +0 -116
  264. package/dist/shared/components/FileSys.d.ts +0 -2
  265. package/dist/shared/components/FileSys.js +0 -113
  266. package/dist/shared/components/HashAccumulator.d.ts +0 -55
  267. package/dist/shared/components/HashAccumulator.js +0 -100
  268. package/dist/shared/components/ZipCrypto.d.ts +0 -3
  269. package/dist/shared/components/ZipCrypto.js +0 -78
  270. package/dist/shared/components/merkleTree.d.ts +0 -66
  271. package/dist/shared/components/merkleTree.js +0 -136
  272. package/dist/shared/types/index.d.ts +0 -21
  273. package/dist/shared/types/index.js +0 -3
  274. package/dist/shared/types.d.ts +0 -33
  275. package/dist/shared/types.js +0 -8
  276. package/dist/shared/version.d.ts +0 -2
  277. package/dist/shared/version.js +0 -6
  278. package/src/blockchain/CertificateToken.ts +0 -444
  279. package/src/blockchain/ZipKitMinter.ts +0 -470
  280. package/src/blockchain/ZipKitNFT.ts +0 -12
  281. package/src/blockchain/ZipKitVerifier.ts +0 -382
  282. package/src/blockchain/contracts.ts +0 -88
  283. package/src/blockchain/types.ts +0 -91
  284. package/src/browser/CertificateGeneratorBrowser.ts-remove +0 -498
  285. package/src/browser/ZipKitStampBrowser.ts +0 -9
  286. package/src/browser-index.ts +0 -36
  287. package/src/server/README.md +0 -25
  288. package/src/server/ZipKitServer.ts +0 -305
  289. package/src/shared/ZipKit.ts +0 -881
  290. package/src/shared/components/CertificateOTS.ts +0 -132
  291. package/src/shared/components/FileSys.ts +0 -87
  292. package/src/shared/components/HashAccumulator.ts +0 -113
  293. package/src/shared/components/ZipCrypto.ts +0 -91
  294. package/src/shared/components/merkleTree.ts +0 -162
  295. package/src/shared/types/index.ts +0 -25
  296. package/src/shared/types/modules.d.ts +0 -22
  297. package/src/shared/types/opentimestamps.d.ts +0 -23
  298. package/src/shared/types.d.ts +0 -8
  299. package/src/shared/types.ts +0 -43
  300. package/src/shared/version.ts +0 -3
  301. /package/src/{shared → core}/components/Support.ts +0 -0
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Node Blockchain Module Exports
3
+ * Node.js-specific blockchain functionality for ZIP file tokenization
4
+ *
5
+ * Note: ZipkitMinter and ZipkitVerifier convenience methods (retry, batch)
6
+ * are now available in the core module. Only WalletManagerNode is Node.js-specific
7
+ * due to file system operations.
8
+ */
9
+
10
+ export { WalletManagerNode, ZipkitWallet } from './WalletManagerNode';
11
+
12
+ // Re-export specific core functionality to avoid duplicates
13
+ export {
14
+ ZipkitMinter,
15
+ ZipkitVerifier,
16
+ CoreWalletManager,
17
+ WalletAnalyzer,
18
+ createTimestamp,
19
+ verifyOts,
20
+ verifyOtsZip
21
+ } from '../core';
22
+ export type {
23
+ MintingOptions,
24
+ MintingResult,
25
+ VerificationOptions,
26
+ VerificationResult,
27
+ WalletInfo,
28
+ NetworkConfig,
29
+ TokenMetadata,
30
+ WalletSetupResult,
31
+ CommonTokenConfig,
32
+ TokenInfo,
33
+ WalletBasicInfo,
34
+ TokenScanResult,
35
+ NZipTokenDetails,
36
+ TimestampResult,
37
+ TimestampInfo,
38
+ DeserializeOtsResult,
39
+ OtsVerifyResult
40
+ } from '../core';
@@ -1,39 +1,41 @@
1
1
  // ======================================
2
- // ZipKitBrowser.ts
2
+ // ZipkitBrowser.ts
3
3
  // Copyright (c) 2025 NeoWare, Inc. All rights reserved.
4
4
  // ======================================
5
5
 
6
- import ZipKit, { CompressOptions, CreateZipOptions } from '../shared/ZipKit';
7
- import ZipEntry from '../shared/ZipEntry';
8
- import Errors from '../shared/constants/Errors';
9
- import * as Headers from '../shared/constants/Headers';
10
- import { TOKENIZED_METADATA, TIMESTAMP_SUBMITTED, TIMESTAMP_METADATA } from '../shared/constants/Headers';
11
- import { sha256 } from '../shared/components/ZipCrypto';
12
- import { crc32 } from '../shared/components/Util';
13
- import { DATATYPE, getTypeOf } from '../shared/components/Util';
14
- import type { FileData } from '../shared/types';
15
-
16
- // Re-export everything from ZipKit
17
- export * from '../shared/ZipKit';
6
+ import Zipkit, { CompressOptions, CreateZipOptions } from '../core';
7
+ import ZipEntry from '../core/ZipEntry';
8
+ import { ZipCompress } from '../core/ZipCompress';
9
+ import Errors from '../core/constants/Errors';
10
+ import * as Headers from '../core/constants/Headers';
11
+ import { TOKENIZED_METADATA, TIMESTAMP_SUBMITTED, TIMESTAMP_METADATA } from '../core/constants/Headers';
12
+ import { sha256, crc32 } from '../core/encryption/ZipCrypto';
13
+ import { DATATYPE, getTypeOf } from '../core/components/Util';
14
+ import type { FileData } from '../types';
15
+ import HashCalculator from '../core/components/HashCalculator';
16
+
17
+ // Re-export everything from Zipkit
18
+ export * from '../core';
18
19
  export { ZipEntry, Errors, Headers, sha256, getTypeOf };
19
20
 
20
21
  // ======================================
21
- // ZipKitBrowser
22
+ // ZipkitBrowser
22
23
  // ======================================
23
24
 
24
- export default class ZipKitBrowser extends ZipKit {
25
+ export default class ZipkitBrowser extends Zipkit {
25
26
  constructor() {
26
27
  super(); // Call the parent constructor
27
28
 
28
- // console.log('ZipKit.support.isNode: ', ZipKit.support.isNode);
29
- // console.log('ZipKit.support.buffer: ', ZipKit.support.buffer);
30
- // console.log('ZipKit.support.blob: ', ZipKit.support.blob);
31
- // console.log('ZipKit.support.streams: ', ZipKit.support.streams);
32
- // console.log('ZipKit.support.fileReader: ', ZipKit.support.fileReader);
29
+ // console.log('Zipkit.support.isNode: ', Zipkit.support.isNode);
30
+ // console.log('Zipkit.support.buffer: ', Zipkit.support.buffer);
31
+ // console.log('Zipkit.support.blob: ', Zipkit.support.blob);
32
+ // console.log('Zipkit.support.streams: ', Zipkit.support.streams);
33
+ // console.log('Zipkit.support.fileReader: ', Zipkit.support.fileReader);
33
34
  }
34
35
 
35
36
  // --------------------------------------
36
37
  // Load a ZIP file from a Blob and return the ZipEntry array
38
+ // Always uses loadZip() to ensure proper initialization
37
39
 
38
40
  async loadZipBlob(data: Blob): Promise<ZipEntry[] | null> {
39
41
  if (getTypeOf(data) !== DATATYPE.BLOB) {
@@ -41,30 +43,34 @@ export default class ZipKitBrowser extends ZipKit {
41
43
  }
42
44
 
43
45
  return new Promise((resolve, reject) => {
44
- const _readEntries = (data: Buffer): ZipEntry[] | null => {
45
- try {
46
- super.loadZip(data);
47
- return super.getDirectory();
48
- } catch (error) {
49
- reject(error);
50
- return null;
51
- }
52
- };
53
-
54
46
  const reader = new window.FileReader();
55
47
  reader.readAsArrayBuffer(data);
56
48
 
57
- reader.onload = function(this: FileReader, e: ProgressEvent<FileReader>) {
58
- if (!this.result) {
49
+ reader.onload = (e: ProgressEvent<FileReader>) => {
50
+ if (!reader.result) {
59
51
  reject(new Error('Failed to read file'));
60
52
  return;
61
53
  }
62
- const _inBuf = Buffer.from(this.result as ArrayBuffer);
63
- resolve(_readEntries(_inBuf));
54
+
55
+ try {
56
+ // Convert ArrayBuffer to Buffer
57
+ const buffer = Buffer.from(reader.result as ArrayBuffer);
58
+
59
+ // Always use loadZip() which:
60
+ // 1. Resets ZIP data
61
+ // 2. Stores buffer in this.inBuffer
62
+ // 3. Loads EOCD and parses central directory
63
+ // 4. Stores entries in this.zipEntries
64
+ // 5. Returns the entries
65
+ const entries = super.loadZip(buffer);
66
+ resolve(entries);
67
+ } catch (error) {
68
+ reject(error);
69
+ }
64
70
  };
65
71
 
66
- reader.onerror = function(this: FileReader, e: ProgressEvent<FileReader>) {
67
- reject(this.error || new Error('Failed to read file'));
72
+ reader.onerror = () => {
73
+ reject(reader.error || new Error('Failed to read file'));
68
74
  };
69
75
  });
70
76
  }
@@ -104,7 +110,8 @@ export default class ZipKitBrowser extends ZipKit {
104
110
 
105
111
  return new Promise(async (resolve, reject) => {
106
112
  const _compressData = async (entry: ZipEntry, data: Buffer, options?: CompressOptions): Promise<Buffer> => {
107
- return await super.compressData(entry, data, options);
113
+ // Use Zipkit wrapper method
114
+ return await this.compressData(entry, data, options);
108
115
  };
109
116
 
110
117
  const reader = new window.FileReader();
@@ -135,7 +142,7 @@ export default class ZipKitBrowser extends ZipKit {
135
142
 
136
143
  async extractBlob(entry: ZipEntry, skipHashCheck?: boolean): Promise<Blob | null> {
137
144
  try {
138
- const _outBuf = await super.extract(entry, skipHashCheck);
145
+ const _outBuf = await this.extract(entry, skipHashCheck);
139
146
  if (!_outBuf) return null;
140
147
 
141
148
  // Convert Buffer to Uint8Array for Blob compatibility
@@ -170,7 +177,7 @@ export default class ZipKitBrowser extends ZipKit {
170
177
  entry.isUpdated = true;
171
178
  // Don't continue here - let it fall through to special handling below
172
179
  } else {
173
- const inData = super.copyEntry(entry);
180
+ const inData = await super.copyEntry(entry);
174
181
  entry.localHdrOffset = offset;
175
182
  offset += inData.length;
176
183
  buffers.push(inData);
@@ -186,6 +193,19 @@ export default class ZipKitBrowser extends ZipKit {
186
193
 
187
194
  const fileBuffer = await entry.fileData.arrayBuffer();
188
195
 
196
+ // Special handling for already-compressed entries - use existing compressed data
197
+ if (entry.cmpData && entry.compressedSize && entry.crc) {
198
+ // Entry is already compressed, use the existing compressed data
199
+ const localHdr = entry.createLocalHdr();
200
+ entry.localHdrOffset = offset;
201
+ offset += localHdr.length + entry.cmpData.length;
202
+
203
+ buffers.push(localHdr);
204
+ buffers.push(entry.cmpData);
205
+ _onEntryDone(entry, 'Written (pre-compressed)');
206
+ continue;
207
+ }
208
+
189
209
  // Special handling for token metadata files - store uncompressed with CRC-32
190
210
  if (entry.filename === TOKENIZED_METADATA || entry.filename === TIMESTAMP_SUBMITTED || entry.filename === TIMESTAMP_METADATA) {
191
211
  // For token metadata, use STORED compression (no compression)
@@ -211,7 +231,7 @@ export default class ZipKitBrowser extends ZipKit {
211
231
  _onEntryDone(entry, 'Stored (metadata)');
212
232
  } else {
213
233
  // Normal file processing with compression
214
- const cmpData = await super.compressData(entry, Buffer.from(fileBuffer), cmpOptions);
234
+ const cmpData = await this.compressData(entry, Buffer.from(fileBuffer), cmpOptions);
215
235
  const localHdr = entry.createLocalHdr();
216
236
 
217
237
  entry.localHdrOffset = offset;
@@ -238,5 +258,48 @@ export default class ZipKitBrowser extends ZipKit {
238
258
  // Convert Buffer to Uint8Array for Blob compatibility
239
259
  const uint8Array = new Uint8Array(combinedBuffer);
240
260
  return new Blob([uint8Array], { type: 'application/zip' });
241
- }
261
+ }
262
+
263
+ /**
264
+ * Checks if a filename is a blockchain metadata file that should be excluded from Merkle Root calculation
265
+ * @param filename - The filename to check
266
+ * @returns boolean - True if the file is a metadata file
267
+ */
268
+ private isMetadataFile(filename: string): boolean {
269
+ return filename === TIMESTAMP_SUBMITTED ||
270
+ filename === TIMESTAMP_METADATA ||
271
+ filename === TOKENIZED_METADATA;
272
+ }
273
+
274
+ // --------------------------------------
275
+ // Helper method: Add a file to the ZIP with compression
276
+ // Simplifies the common workflow of creating entry + compressing
277
+
278
+ async addFile(file: FileData, options?: CompressOptions): Promise<ZipEntry> {
279
+ // Create entry
280
+ const entry = this.createZipFileEntry(file);
281
+
282
+ // Compress the file
283
+ // In browser, File objects implement both FileData and Blob interfaces
284
+ // We need to convert FileData to Blob for compressDataBlob
285
+ const fileBlob = file as unknown as Blob;
286
+ const compressedData = await this.compressDataBlob(entry, fileBlob, options);
287
+ entry.cmpData = compressedData;
288
+
289
+ return entry;
290
+ }
291
+
292
+ // --------------------------------------
293
+ // Verify a ZIP entry by attempting to extract it
294
+ // Returns true if the entry is valid, false otherwise
295
+
296
+ async verifyEntry(entry: ZipEntry, skipHashCheck?: boolean): Promise<boolean> {
297
+ try {
298
+ const blob = await this.extractBlob(entry, skipHashCheck);
299
+ return blob !== null;
300
+ } catch (error) {
301
+ console.error(`Verification failed for ${entry.filename}:`, error);
302
+ return false;
303
+ }
304
+ }
242
305
  }
@@ -0,0 +1,37 @@
1
+ // =============================================================================
2
+ // NeoZipkit - Browser ES Module Entry Point
3
+ // =============================================================================
4
+ // This is a clean ES module entry point for browser bundles
5
+ // All exports are named exports for better tree-shaking support
6
+
7
+ // Buffer polyfill for browser
8
+ import { Buffer } from 'buffer';
9
+ if (typeof globalThis !== 'undefined') {
10
+ (globalThis as any).Buffer = Buffer;
11
+ }
12
+
13
+ // Core exports
14
+ export * from '../core';
15
+
16
+ // Browser-specific class
17
+ export { default as ZipkitBrowser } from './ZipkitBrowser';
18
+
19
+ // Re-export ZipEntry as named export for convenience
20
+ export { default as ZipEntry } from '../core/ZipEntry';
21
+
22
+ // Re-export commonly used types and constants
23
+ export type { CompressOptions, CreateZipOptions } from '../core/ZipCompress';
24
+ export type { FileData, TokenMetadata } from '../types';
25
+ export * from '../core/constants/Headers';
26
+ export * from '../core/constants/Errors';
27
+
28
+ // Blockchain exports for browser (if needed)
29
+ export * from '../blockchain/browser';
30
+ export { createTokenVerifier } from '../blockchain/browser';
31
+
32
+ // Platform utilities
33
+ export const PlatformUtils = {
34
+ isBrowser: typeof window !== 'undefined' && typeof document !== 'undefined',
35
+ isNode: typeof process !== 'undefined' && process.versions && process.versions.node,
36
+ };
37
+
@@ -0,0 +1,25 @@
1
+ // =============================================================================
2
+ // NeoZipkit - Browser-Only Package Exports
3
+ // =============================================================================
4
+
5
+ // Core shared exports (re-exported from core module)
6
+ export * from '../core';
7
+ import Zipkit from '../core';
8
+ export default Zipkit;
9
+
10
+ // Browser-only exports
11
+ export { default as ZipkitBrowser } from './ZipkitBrowser';
12
+ export { TokenMetadata } from '../types';
13
+
14
+ // Blockchain exports for browser
15
+ export * from '../blockchain/browser';
16
+ export { createTokenVerifier } from '../blockchain/browser';
17
+
18
+ // Platform-specific conditional exports
19
+ export const PlatformUtils = {
20
+ // Browser detection
21
+ isBrowser: typeof window !== 'undefined' && typeof document !== 'undefined',
22
+ // Node.js detection
23
+ isNode: typeof process !== 'undefined' && process.versions && process.versions.node,
24
+ };
25
+