neozipkit 0.1.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 (330) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +371 -200
  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 +256 -0
  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/{browser → blockchain/browser}/TokenVerifierBrowser.d.ts +11 -20
  20. package/dist/blockchain/browser/TokenVerifierBrowser.d.ts.map +1 -0
  21. package/dist/{browser → blockchain/browser}/TokenVerifierBrowser.js +106 -92
  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/{server/blockchain/WalletAnalyzer.d.ts → blockchain/core/WalletManager.d.ts} +69 -26
  36. package/dist/blockchain/core/WalletManager.d.ts.map +1 -0
  37. package/dist/{server/blockchain/WalletAnalyzer.js → blockchain/core/WalletManager.js} +172 -160
  38. package/dist/blockchain/core/WalletManager.js.map +1 -0
  39. package/dist/blockchain/core/ZipkitMinter.d.ts +141 -0
  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/core/ZipkitOTS.d.ts +126 -0
  44. package/dist/blockchain/core/ZipkitOTS.d.ts.map +1 -0
  45. package/dist/blockchain/core/ZipkitOTS.js +506 -0
  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 -0
  60. package/dist/blockchain/index.d.ts.map +1 -0
  61. package/dist/blockchain/index.js +34 -0
  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 -17
  87. package/dist/browser.js +13 -29
  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 +224 -81
  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/{shared → core}/version.d.ts +1 -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 -25
  157. package/dist/index.d.ts.map +1 -0
  158. package/dist/index.js +29 -47
  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 +6 -3
  192. package/examples/verify-tokenized-zip.ts +305 -0
  193. package/package.json +117 -23
  194. package/src/blockchain/README.md +222 -0
  195. package/src/{browser → blockchain/browser}/TokenVerifierBrowser.ts +125 -79
  196. package/src/blockchain/browser/WalletManagerBrowser.ts +486 -0
  197. package/src/blockchain/browser/ZipkitMinterBrowser.ts +400 -0
  198. package/src/blockchain/browser/index.ts +13 -0
  199. package/src/blockchain/core/WalletManager.ts +436 -0
  200. package/src/blockchain/core/ZipkitMinter.ts +716 -0
  201. package/src/blockchain/core/ZipkitOTS.ts +588 -0
  202. package/src/blockchain/core/ZipkitVerifier.ts +853 -0
  203. package/src/blockchain/core/contracts.ts +370 -0
  204. package/src/blockchain/core/index.ts +71 -0
  205. package/src/blockchain/index.ts +27 -0
  206. package/src/blockchain/node/WalletManagerNode.ts +171 -0
  207. package/src/blockchain/node/index.ts +40 -0
  208. package/src/browser/{ZipKitBrowser.ts → ZipkitBrowser.ts} +104 -41
  209. package/src/browser/index.esm.ts +37 -0
  210. package/src/browser/index.ts +25 -0
  211. package/src/core/ZipCompress.ts +398 -0
  212. package/src/core/ZipDecompress.ts +212 -0
  213. package/src/{shared → core}/ZipEntry.ts +239 -89
  214. package/src/core/Zipkit.ts +794 -0
  215. package/src/core/components/HashCalculator.ts +384 -0
  216. package/src/core/components/Logger.ts +180 -0
  217. package/src/core/components/ProgressTracker.ts +134 -0
  218. package/src/{shared → core}/components/Util.ts +12 -34
  219. package/src/{shared → core}/constants/Errors.ts +0 -4
  220. package/src/{shared → core}/constants/Headers.ts +19 -17
  221. package/src/core/encryption/Manager.ts +137 -0
  222. package/src/core/encryption/ZipCrypto.ts +650 -0
  223. package/src/core/encryption/index.ts +15 -0
  224. package/src/core/encryption/types.ts +33 -0
  225. package/src/core/index.ts +34 -0
  226. package/src/core/version.ts +33 -0
  227. package/src/index.ts +54 -32
  228. package/src/node/ZipCompressNode.ts +632 -0
  229. package/src/node/ZipDecompressNode.ts +508 -0
  230. package/src/node/ZipkitNode.ts +1559 -0
  231. package/src/node/index.ts +69 -0
  232. package/src/types/index.ts +131 -1
  233. package/src/types/opentimestamps.d.ts +1 -23
  234. package/contracts/Lock.sol +0 -34
  235. package/contracts/bytecode.txt +0 -1
  236. package/contracts/compile-contract.js +0 -168
  237. package/contracts/deploy/deploy-both-contracts.js +0 -286
  238. package/contracts/deploy/deploy-enhanced-contract.js +0 -197
  239. package/contracts/deploy/deploy-private-contract.js +0 -190
  240. package/contracts/deploy/deploy-public-clean.js +0 -1063
  241. package/contracts/deploy/deploy-public-contract.js +0 -1107
  242. package/contracts/deployment.config.example.js +0 -25
  243. package/contracts/remix-compile.js +0 -222
  244. package/contracts/setup-deployment.js +0 -51
  245. package/contracts/src/ZipFileNFT-DEPRECATED-6field.sol +0 -260
  246. package/contracts/src/ZipFileNFT-DEPRECATED-Enhanced.sol +0 -289
  247. package/dist/browser/CertificateGeneratorBrowser.d.ts +0 -75
  248. package/dist/browser/CertificateGeneratorBrowser.js +0 -433
  249. package/dist/browser/ZipKitBrowser.d.ts +0 -18
  250. package/dist/browser/ZipKitStampBrowser.d.ts +0 -2
  251. package/dist/browser/ZipKitStampBrowser.js +0 -12
  252. package/dist/browser-index.d.ts +0 -21
  253. package/dist/browser-index.js +0 -58
  254. package/dist/server/blockchain/CertificateToken.d.ts +0 -48
  255. package/dist/server/blockchain/CertificateToken.js +0 -386
  256. package/dist/server/blockchain/NFTMinter.d.ts +0 -41
  257. package/dist/server/blockchain/NFTMinter.js +0 -323
  258. package/dist/server/blockchain/TokenQuerier.d.ts +0 -31
  259. package/dist/server/blockchain/TokenQuerier.js +0 -259
  260. package/dist/server/blockchain/TokenVerifier.d.ts +0 -20
  261. package/dist/server/blockchain/TokenVerifier.js +0 -395
  262. package/dist/server/blockchain/WalletFormatter.d.ts +0 -39
  263. package/dist/server/blockchain/WalletFormatter.js +0 -196
  264. package/dist/server/blockchain/WalletManager.d.ts +0 -46
  265. package/dist/server/blockchain/WalletManager.js +0 -294
  266. package/dist/server/blockchain/ZipMetadata.d.ts +0 -27
  267. package/dist/server/blockchain/ZipMetadata.js +0 -131
  268. package/dist/server/blockchain/ZipTokenProcessor.d.ts +0 -44
  269. package/dist/server/blockchain/ZipTokenProcessor.js +0 -204
  270. package/dist/server/blockchain/constants.d.ts +0 -102
  271. package/dist/server/blockchain/constants.js +0 -968
  272. package/dist/server/blockchain/index.d.ts +0 -9
  273. package/dist/server/blockchain/index.js +0 -44
  274. package/dist/server/blockchain/test-certificate.d.ts +0 -8
  275. package/dist/server/blockchain/test-certificate.js +0 -100
  276. package/dist/server/blockchain/types.d.ts +0 -69
  277. package/dist/server/blockchain/types.js +0 -51
  278. package/dist/server/platform/server/ZipKitServer.d.ts +0 -105
  279. package/dist/server/platform/server/ZipKitServer.js +0 -437
  280. package/dist/server/platform/servercomponents/ZipKitOTS.d.ts +0 -91
  281. package/dist/server/platform/servercomponents/ZipKitOTS.js +0 -271
  282. package/dist/shared/ZipKit.d.ts +0 -249
  283. package/dist/shared/ZipKit.js +0 -789
  284. package/dist/shared/components/CertificateOTS.d.ts +0 -15
  285. package/dist/shared/components/CertificateOTS.js +0 -116
  286. package/dist/shared/components/FileSys.d.ts +0 -2
  287. package/dist/shared/components/FileSys.js +0 -113
  288. package/dist/shared/components/HashAccumulator.d.ts +0 -55
  289. package/dist/shared/components/HashAccumulator.js +0 -100
  290. package/dist/shared/components/ZipCrypto.d.ts +0 -3
  291. package/dist/shared/components/ZipCrypto.js +0 -78
  292. package/dist/shared/components/merkleTree.d.ts +0 -66
  293. package/dist/shared/components/merkleTree.js +0 -136
  294. package/dist/shared/types/index.d.ts +0 -21
  295. package/dist/shared/types/index.js +0 -3
  296. package/dist/shared/types.d.ts +0 -33
  297. package/dist/shared/types.js +0 -8
  298. package/dist/shared/version.js +0 -7
  299. package/src/browser/CertificateGeneratorBrowser.ts +0 -498
  300. package/src/browser/ZipKitStampBrowser.ts +0 -9
  301. package/src/browser-index.ts +0 -36
  302. package/src/server/blockchain/CertificateToken.ts +0 -444
  303. package/src/server/blockchain/NFTMinter.ts +0 -357
  304. package/src/server/blockchain/TokenQuerier.ts +0 -287
  305. package/src/server/blockchain/TokenVerifier.ts +0 -453
  306. package/src/server/blockchain/WalletAnalyzer.ts +0 -397
  307. package/src/server/blockchain/WalletFormatter.ts +0 -206
  308. package/src/server/blockchain/WalletManager.ts +0 -294
  309. package/src/server/blockchain/ZipMetadata.ts +0 -117
  310. package/src/server/blockchain/ZipTokenProcessor.ts +0 -234
  311. package/src/server/blockchain/constants.ts +0 -969
  312. package/src/server/blockchain/index.ts +0 -42
  313. package/src/server/blockchain/test-certificate.ts +0 -137
  314. package/src/server/blockchain/types.ts +0 -134
  315. package/src/server/platform/server/ZipKitServer.ts +0 -459
  316. package/src/server/platform/servercomponents/ZipKitOTS.ts +0 -313
  317. package/src/server/platform/servercomponents/opentimestamps.d.ts +0 -23
  318. package/src/shared/ZipKit.ts +0 -899
  319. package/src/shared/components/CertificateOTS.ts +0 -132
  320. package/src/shared/components/FileSys.ts +0 -87
  321. package/src/shared/components/HashAccumulator.ts +0 -113
  322. package/src/shared/components/ZipCrypto.ts +0 -91
  323. package/src/shared/components/merkleTree.ts +0 -162
  324. package/src/shared/types/index.ts +0 -25
  325. package/src/shared/types/modules.d.ts +0 -22
  326. package/src/shared/types/opentimestamps.d.ts +0 -23
  327. package/src/shared/types.d.ts +0 -8
  328. package/src/shared/types.ts +0 -43
  329. package/src/shared/version.ts +0 -4
  330. /package/src/{shared → core}/components/Support.ts +0 -0
@@ -0,0 +1,305 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Verify Tokenized ZIP Example
5
+ *
6
+ * Demonstrates verifying a tokenized ZIP file on the blockchain.
7
+ * This example:
8
+ * 1. Loads a tokenized ZIP file
9
+ * 2. Extracts token metadata from META-INF/NZIP.TOKEN
10
+ * 3. Calculates merkle root from ZIP contents
11
+ * 4. Verifies the token on the blockchain
12
+ * 5. Displays verification results
13
+ *
14
+ * SECURITY WARNING:
15
+ * - This example only reads blockchain data (no private keys required)
16
+ * - However, if you're verifying your own tokenized files, ensure:
17
+ * - Private keys used for minting are stored securely
18
+ * - Never commit private keys to version control
19
+ * - Use testnet for development and testing
20
+ *
21
+ * See SECURITY.md for complete security guidelines.
22
+ *
23
+ * Usage:
24
+ * ts-node examples/verify-tokenized-zip.ts [path-to-tokenized.zip]
25
+ */
26
+
27
+ import { ZipkitNode } from '../src/node';
28
+ import { ZipkitVerifier } from '../src/blockchain/core/ZipkitVerifier';
29
+ import type { TokenMetadata } from '../src/types';
30
+ import { TOKENIZED_METADATA } from '../src/core/constants/Headers';
31
+ import * as fs from 'fs';
32
+ import * as path from 'path';
33
+
34
+ async function main() {
35
+ console.log('Verify Tokenized ZIP Example\n');
36
+
37
+ // Get ZIP file path from command line argument or use default
38
+ const zipPath = process.argv[2] || path.join(__dirname, 'output', 'tokenized.zip');
39
+
40
+ if (!fs.existsSync(zipPath)) {
41
+ console.error(`❌ Error: ZIP file not found: ${zipPath}`);
42
+ console.error('\nUsage:');
43
+ console.error(' ts-node examples/verify-tokenized-zip.ts [path-to-tokenized.zip]');
44
+ console.error('\nExample:');
45
+ console.error(' ts-node examples/verify-tokenized-zip.ts examples/output/tokenized.zip');
46
+ process.exit(1);
47
+ }
48
+
49
+ console.log(`📦 ZIP file: ${zipPath}`);
50
+ const zipStats = fs.statSync(zipPath);
51
+ console.log(` Size: ${formatBytes(zipStats.size)}\n`);
52
+
53
+ try {
54
+ // Step 1: Load ZIP file
55
+ console.log('Step 1: Loading ZIP file...');
56
+ const zip = new ZipkitNode();
57
+ await zip.loadZipFile(zipPath);
58
+ console.log('✅ ZIP file loaded successfully\n');
59
+
60
+ // Step 2: Extract token metadata
61
+ console.log('Step 2: Extracting token metadata...');
62
+ const entries = zip.getDirectory();
63
+ const tokenEntry = entries.find(entry => entry.filename === TOKENIZED_METADATA);
64
+
65
+ if (!tokenEntry) {
66
+ console.error('❌ Error: Token metadata not found in ZIP file');
67
+ console.error(` Expected file: ${TOKENIZED_METADATA}`);
68
+ console.error('\n💡 This ZIP file does not appear to be tokenized.');
69
+ console.error(' Use blockchain-tokenize.ts to create a tokenized ZIP file.');
70
+ await zip.closeFile();
71
+ process.exit(1);
72
+ }
73
+
74
+ // Extract token metadata content to temporary file
75
+ const tempTokenFile = path.join(__dirname, 'output', '.token-metadata-temp.json');
76
+ const tempTokenDir = path.dirname(tempTokenFile);
77
+ if (!fs.existsSync(tempTokenDir)) {
78
+ fs.mkdirSync(tempTokenDir, { recursive: true });
79
+ }
80
+
81
+ let tokenMetadata: TokenMetadata;
82
+
83
+ try {
84
+ await zip.extractToFile(tokenEntry, tempTokenFile);
85
+ const tokenContent = fs.readFileSync(tempTokenFile, 'utf8');
86
+
87
+ // Clean up temp file
88
+ fs.unlinkSync(tempTokenFile);
89
+
90
+ try {
91
+ tokenMetadata = JSON.parse(tokenContent);
92
+ } catch (parseError) {
93
+ console.error('❌ Error: Invalid token metadata format');
94
+ console.error(' Token metadata must be valid JSON');
95
+ await zip.closeFile();
96
+ process.exit(1);
97
+ }
98
+ } catch (extractError) {
99
+ console.error('❌ Error: Could not extract token metadata');
100
+ console.error(` ${extractError instanceof Error ? extractError.message : String(extractError)}`);
101
+ // Clean up temp file if it exists
102
+ if (fs.existsSync(tempTokenFile)) {
103
+ try {
104
+ fs.unlinkSync(tempTokenFile);
105
+ } catch (unlinkError) {
106
+ // Ignore
107
+ }
108
+ }
109
+ await zip.closeFile();
110
+ process.exit(1);
111
+ }
112
+
113
+ // Validate token metadata structure
114
+ if (!tokenMetadata.tokenId || !tokenMetadata.contractAddress || !tokenMetadata.network) {
115
+ console.error('❌ Error: Invalid token metadata structure');
116
+ console.error(' Missing required fields: tokenId, contractAddress, or network');
117
+ await zip.closeFile();
118
+ process.exit(1);
119
+ }
120
+
121
+ console.log('✅ Token metadata extracted');
122
+ console.log(` Token ID: ${tokenMetadata.tokenId}`);
123
+ console.log(` Contract: ${tokenMetadata.contractAddress}`);
124
+ console.log(` Network: ${tokenMetadata.network}`);
125
+ if (tokenMetadata.transactionHash) {
126
+ console.log(` Transaction: ${tokenMetadata.transactionHash}`);
127
+ }
128
+ console.log();
129
+
130
+ // Step 3: Calculate merkle root from ZIP contents
131
+ console.log('Step 3: Calculating merkle root from ZIP contents...');
132
+
133
+ // Get merkle root (this excludes token metadata file automatically)
134
+ const merkleRoot = (zip as any).getMerkleRoot?.();
135
+
136
+ if (!merkleRoot) {
137
+ console.error('❌ Error: Could not calculate merkle root');
138
+ console.error(' Make sure the ZIP file was created with SHA-256 hashes enabled');
139
+ await zip.closeFile();
140
+ process.exit(1);
141
+ }
142
+
143
+ console.log(`✅ Merkle root calculated: ${merkleRoot}`);
144
+
145
+ // Compare with metadata merkle root if present
146
+ if (tokenMetadata.merkleRoot) {
147
+ if (tokenMetadata.merkleRoot === merkleRoot) {
148
+ console.log(' ✓ Matches merkle root in token metadata');
149
+ } else {
150
+ console.log(' ⚠️ WARNING: Does not match merkle root in token metadata!');
151
+ console.log(` Metadata: ${tokenMetadata.merkleRoot}`);
152
+ console.log(` Calculated: ${merkleRoot}`);
153
+ console.log(' This may indicate the ZIP file has been modified.');
154
+ }
155
+ }
156
+ console.log();
157
+
158
+ // Close file handle before verification
159
+ await zip.closeFile();
160
+
161
+ // Step 4: Verify token on blockchain
162
+ console.log('Step 4: Verifying token on blockchain...');
163
+ console.log(' This may take a few moments...\n');
164
+
165
+ const verifier = new ZipkitVerifier({
166
+ debug: false
167
+ });
168
+
169
+ const verificationResult = await verifier.verifyToken(
170
+ tokenMetadata,
171
+ merkleRoot,
172
+ {
173
+ debug: false,
174
+ skipHash: false
175
+ }
176
+ );
177
+
178
+ // Step 5: Display verification results
179
+ console.log('Step 5: Verification Results');
180
+ console.log('═'.repeat(80));
181
+
182
+ if (verificationResult.success) {
183
+ console.log('✅ VERIFICATION SUCCESSFUL');
184
+ console.log('═'.repeat(80));
185
+ console.log(`Token ID: ${tokenMetadata.tokenId}`);
186
+ console.log(`Contract: ${tokenMetadata.contractAddress}`);
187
+ console.log(`Network: ${tokenMetadata.network}`);
188
+
189
+ if (verificationResult.verificationDetails) {
190
+ const details = verificationResult.verificationDetails;
191
+ console.log(`\nBlockchain Data:`);
192
+ if (details.merkleRoot) {
193
+ console.log(` Merkle Root: ${details.merkleRoot}`);
194
+ }
195
+ if (details.mintDate) {
196
+ console.log(` Tokenization Time: ${details.mintDate}`);
197
+ }
198
+ if (details.onChainValid !== undefined) {
199
+ console.log(` On-Chain Valid: ${details.onChainValid ? 'Yes' : 'No'}`);
200
+ }
201
+ }
202
+
203
+ console.log(`\nMerkle Root Verification:`);
204
+ if (verificationResult.verificationDetails?.merkleRootMatch) {
205
+ console.log(' ✅ Calculated merkle root matches blockchain');
206
+ if (verificationResult.verificationDetails.calculatedMerkleRoot && verificationResult.verificationDetails.declaredMerkleRoot) {
207
+ console.log(` Calculated: ${verificationResult.verificationDetails.calculatedMerkleRoot}`);
208
+ console.log(` On-chain: ${verificationResult.verificationDetails.declaredMerkleRoot}`);
209
+ }
210
+ } else {
211
+ console.log(' ❌ Calculated merkle root does NOT match blockchain!');
212
+ if (verificationResult.errorDetails) {
213
+ if (verificationResult.errorDetails.calculatedMerkleRoot) {
214
+ console.log(` Calculated: ${verificationResult.errorDetails.calculatedMerkleRoot}`);
215
+ }
216
+ if (verificationResult.errorDetails.onChainMerkleRoot) {
217
+ console.log(` On-chain: ${verificationResult.errorDetails.onChainMerkleRoot}`);
218
+ }
219
+ }
220
+ }
221
+
222
+ if (verificationResult.verificationDetails?.onChainValid) {
223
+ console.log('\n✅ Token is valid and verified on blockchain');
224
+ }
225
+
226
+ // Display explorer link
227
+ const networkName = tokenMetadata.network.toLowerCase();
228
+ let explorerUrl = '';
229
+
230
+ if (networkName.includes('base') && networkName.includes('sepolia')) {
231
+ explorerUrl = `https://sepolia.basescan.org/token/${tokenMetadata.contractAddress}?a=${tokenMetadata.tokenId}`;
232
+ } else if (networkName.includes('base')) {
233
+ explorerUrl = `https://basescan.org/token/${tokenMetadata.contractAddress}?a=${tokenMetadata.tokenId}`;
234
+ } else if (networkName.includes('arbitrum') && networkName.includes('sepolia')) {
235
+ explorerUrl = `https://sepolia.arbiscan.io/token/${tokenMetadata.contractAddress}?a=${tokenMetadata.tokenId}`;
236
+ } else if (networkName.includes('arbitrum')) {
237
+ explorerUrl = `https://arbiscan.io/token/${tokenMetadata.contractAddress}?a=${tokenMetadata.tokenId}`;
238
+ } else if (networkName.includes('sepolia')) {
239
+ explorerUrl = `https://sepolia.etherscan.io/token/${tokenMetadata.contractAddress}?a=${tokenMetadata.tokenId}`;
240
+ } else if (networkName.includes('ethereum')) {
241
+ explorerUrl = `https://etherscan.io/token/${tokenMetadata.contractAddress}?a=${tokenMetadata.tokenId}`;
242
+ }
243
+
244
+ if (explorerUrl) {
245
+ console.log(`\n📄 View token on explorer:`);
246
+ console.log(` ${explorerUrl}`);
247
+ }
248
+
249
+ } else {
250
+ console.log('❌ VERIFICATION FAILED');
251
+ console.log('═'.repeat(80));
252
+ console.log(`Error: ${verificationResult.message}`);
253
+
254
+ if (verificationResult.errorDetails) {
255
+ console.log(`\nError Details:`);
256
+ console.log(` Type: ${verificationResult.errorDetails.errorType || 'UNKNOWN'}`);
257
+ if (verificationResult.errorDetails.networkName) {
258
+ console.log(` Network: ${verificationResult.errorDetails.networkName}`);
259
+ }
260
+ if (verificationResult.errorDetails.rpcUrl) {
261
+ console.log(` RPC URL: ${verificationResult.errorDetails.rpcUrl}`);
262
+ }
263
+ }
264
+
265
+ console.log('\n💡 Possible causes:');
266
+ console.log(' - Token does not exist on blockchain');
267
+ console.log(' - Merkle root mismatch (ZIP file may have been modified)');
268
+ console.log(' - Network connectivity issues');
269
+ console.log(' - Invalid contract address or network');
270
+ }
271
+
272
+ console.log('═'.repeat(80));
273
+ console.log();
274
+
275
+ // Exit with appropriate code
276
+ process.exit(verificationResult.success ? 0 : 1);
277
+
278
+ } catch (error) {
279
+ console.error('❌ Error during verification:');
280
+ console.error(error instanceof Error ? error.message : String(error));
281
+ if (error instanceof Error && error.stack) {
282
+ console.error('\nStack trace:');
283
+ console.error(error.stack);
284
+ }
285
+ process.exit(1);
286
+ }
287
+ }
288
+
289
+ /**
290
+ * Format bytes to human-readable string
291
+ */
292
+ function formatBytes(bytes: number): string {
293
+ if (bytes === 0) return '0 B';
294
+ const k = 1024;
295
+ const sizes = ['B', 'KB', 'MB', 'GB'];
296
+ const i = Math.floor(Math.log(bytes) / Math.log(k));
297
+ return Math.round((bytes / Math.pow(k, i)) * 100) / 100 + ' ' + sizes[i];
298
+ }
299
+
300
+ // Run the example
301
+ main().catch((error) => {
302
+ console.error('Fatal error:', error);
303
+ process.exit(1);
304
+ });
305
+
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "neozipkit",
3
- "version": "0.1.1",
3
+ "version": "0.3.0",
4
4
  "description": "NeoZipKit - Advanced ZIP file creation and verification with blockchain timestamping",
5
5
  "main": "index.js",
6
6
  "types": "index.d.ts",
@@ -25,21 +25,32 @@
25
25
  "types": "./dist/browser/*.d.ts",
26
26
  "default": "./dist/browser/*.js"
27
27
  },
28
- "./server": {
29
- "types": "./dist/server/index.d.ts",
30
- "default": "./dist/server/index.js"
28
+ "./browser-esm": {
29
+ "types": "./dist/browser-esm/index.d.ts",
30
+ "import": "./dist/browser-esm/index.js"
31
31
  },
32
- "./server/*": {
33
- "types": "./dist/server/*.d.ts",
34
- "default": "./dist/server/*.js"
32
+ "./browser-umd": {
33
+ "types": "./dist/browser-umd/index.d.ts",
34
+ "import": "./dist/browser-umd/index.js",
35
+ "require": "./dist/browser-umd/index.js"
35
36
  },
36
- "./server/blockchain/*": {
37
- "types": "./dist/server/blockchain/*.d.ts",
38
- "default": "./dist/server/blockchain/*.js"
37
+ "./node": {
38
+ "types": "./dist/node/index.d.ts",
39
+ "import": "./dist/node/index.js",
40
+ "require": "./dist/node/index.js",
41
+ "default": "./dist/node/index.js"
39
42
  },
40
- "./server/platform/*": {
41
- "types": "./dist/server/platform/*.d.ts",
42
- "default": "./dist/server/platform/*.js"
43
+ "./node/*": {
44
+ "types": "./dist/node/*.d.ts",
45
+ "default": "./dist/node/*.js"
46
+ },
47
+ "./node/blockchain/*": {
48
+ "types": "./dist/node/blockchain/*.d.ts",
49
+ "default": "./dist/node/blockchain/*.js"
50
+ },
51
+ "./node/platform/*": {
52
+ "types": "./dist/node/platform/*.d.ts",
53
+ "default": "./dist/node/platform/*.js"
43
54
  },
44
55
  "./shared": {
45
56
  "types": "./dist/shared/index.d.ts",
@@ -56,25 +67,98 @@
56
67
  "./shared/constants/*": {
57
68
  "types": "./dist/shared/constants/*.d.ts",
58
69
  "default": "./dist/shared/constants/*.js"
70
+ },
71
+ "./blockchain": {
72
+ "types": "./dist/blockchain/index.d.ts",
73
+ "default": "./dist/blockchain/index.js"
74
+ },
75
+ "./blockchain/*": {
76
+ "types": "./dist/blockchain/*.d.ts",
77
+ "default": "./dist/blockchain/*.js"
78
+ },
79
+ "./src": {
80
+ "types": "./src/index.ts",
81
+ "default": "./src/index.ts"
82
+ },
83
+ "./src/*": {
84
+ "types": "./src/*.ts",
85
+ "default": "./src/*.ts"
86
+ },
87
+ "./src/node": {
88
+ "types": "./src/node/index.ts",
89
+ "default": "./src/node/index.ts"
90
+ },
91
+ "./src/node/*": {
92
+ "types": "./src/node/*.ts",
93
+ "default": "./src/node/*.ts"
94
+ },
95
+ "./src/blockchain": {
96
+ "types": "./src/blockchain/index.ts",
97
+ "default": "./src/blockchain/index.ts"
98
+ },
99
+ "./src/blockchain/*": {
100
+ "types": "./src/blockchain/*.ts",
101
+ "default": "./src/blockchain/*.ts"
102
+ },
103
+ "./src/components/*": {
104
+ "types": "./src/components/*.ts",
105
+ "default": "./src/components/*.ts"
59
106
  }
60
107
  },
61
108
  "files": [
62
109
  "dist/",
63
110
  "src/",
64
- "contracts/",
111
+ "contracts/ABI.txt",
112
+ "contracts/Bytecode.txt",
113
+ "contracts/COMPILATION_NOTES.md",
114
+ "contracts/README.md",
115
+ "contracts/QUICK_DEPLOY.md",
116
+ "contracts/VERIFICATION.md",
117
+ "contracts/deploy-interactive.js",
118
+ "contracts/deployment-*.json",
119
+ "contracts/hardhat.config.js",
120
+ "contracts/package.json",
121
+ "contracts/src/",
122
+ "contracts/scripts/",
65
123
  "examples/",
66
124
  "README.md",
67
- "PACKAGE_STRUCTURE.md",
68
- "BLOCKCHAIN_INTEGRATION.md",
69
- "TYPESCRIPT_WORKFLOW.md"
125
+ "LICENSE"
70
126
  ],
71
127
  "scripts": {
72
- "clean": "rm -rf dist/ && rm -rf *.js *.d.ts components constants platform types blockchain",
128
+ "clean": "node scripts/clean.js",
73
129
  "compile": "tsc",
74
- "create-browser-entry": "cp dist/browser-index.js dist/browser.js && cp dist/browser-index.d.ts dist/browser.d.ts",
75
- "build": "npm run clean && npm run compile && npm run create-browser-entry",
130
+ "create-browser-entry": "node scripts/create-browser-entry.js",
131
+ "build": "npm run clean && npm run compile && npm run create-browser-entry && npm run build:browser",
132
+ "build:browser": "npm run build:browser:esm && npm run build:browser:umd",
133
+ "build:browser:esm": "node scripts/build-browser-bundle.js --esm",
134
+ "build:browser:umd": "node scripts/build-browser-bundle.js --umd",
76
135
  "watch": "tsc --watch",
77
- "test": "echo \"No tests specified\" && exit 0"
136
+ "dev:clean": "node scripts/dev-clean.js",
137
+ "dev:compile": "tsc --project tsconfig.dev.json",
138
+ "dev:create-browser-entry": "node scripts/dev-create-browser-entry.js",
139
+ "dev:build": "npm run dev:clean && npm run dev:compile && npm run dev:create-browser-entry",
140
+ "dev:watch": "tsc --project tsconfig.dev.json --watch",
141
+ "build:auto": "node scripts/auto-build.js",
142
+ "build:ci": "node scripts/check-branch.js && npm run clean && npm run compile && npm run create-browser-entry && npm run build:browser",
143
+ "test": "jest",
144
+ "test:unit": "jest tests/unit",
145
+ "test:examples": "npx ts-node scripts/test-examples.ts",
146
+ "test:all": "npm run test:unit && npm run test:examples",
147
+ "test:watch": "jest --watch",
148
+ "test:coverage": "jest --coverage",
149
+ "example:create-zip": "npx ts-node examples/create-zip.ts",
150
+ "example:extract-zip": "npx ts-node examples/extract-zip.ts",
151
+ "example:list-zip": "npx ts-node examples/list-zip.ts",
152
+ "example:blockchain-tokenize": "npx ts-node examples/blockchain-tokenize.ts",
153
+ "example:verify-tokenized-zip": "npx ts-node examples/verify-tokenized-zip.ts",
154
+ "check:nft": "npx ts-node scripts/check-nft.ts",
155
+ "deploy:base": "node contracts/deploy-bytecode.mjs",
156
+ "deploy:base:sepolia": "NETWORK=base-sepolia node contracts/deploy-bytecode.mjs",
157
+ "version": "node scripts/update-version.js",
158
+ "version:set": "node scripts/update-version.js",
159
+ "version:patch": "node scripts/update-version.js patch",
160
+ "version:minor": "node scripts/update-version.js minor",
161
+ "version:major": "node scripts/update-version.js major"
78
162
  },
79
163
  "keywords": [
80
164
  "zip",
@@ -97,13 +181,22 @@
97
181
  "homepage": "https://github.com/NeoWareInc/neozipkit#readme",
98
182
  "license": "MIT",
99
183
  "devDependencies": {
100
- "@types/node": "^20.0.0",
184
+ "@openzeppelin/contracts": "^5.4.0",
185
+ "@types/jest": "^30.0.0",
186
+ "@types/node": "^24.3.1",
101
187
  "@types/pako": "^2.0.3",
102
188
  "@types/uuid": "^9.0.0",
189
+ "dotenv": "^17.2.3",
190
+ "esbuild": "^0.19.12",
191
+ "hardhat": "^3.0.15",
192
+ "jest": "^30.2.0",
193
+ "minimatch": "^10.1.1",
194
+ "ts-jest": "^29.4.6",
103
195
  "typescript": "^5.0.0"
104
196
  },
105
197
  "dependencies": {
106
198
  "@oneidentity/zstd-js": "^1.0.3",
199
+ "buffer": "^6.0.3",
107
200
  "ethers": "^6.0.0",
108
201
  "opentimestamps": "^0.4.9",
109
202
  "pako": "^2.1.0",
@@ -113,5 +206,6 @@
113
206
  "peerDependencies": {
114
207
  "ethers": "^6.0.0",
115
208
  "web3": "^4.0.0"
116
- }
209
+ },
210
+ "packageManager": "yarn@4.9.2+sha512.1fc009bc09d13cfd0e19efa44cbfc2b9cf6ca61482725eb35bbc5e257e093ebf4130db6dfe15d604ff4b79efd8e1e8e99b25fa7d0a6197c9f9826358d4d65c3c"
117
211
  }