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
@@ -1,498 +0,0 @@
1
- // ======================================
2
- // CertificateGeneratorBrowser.ts
3
- // Browser-compatible certificate generator for tokenized ZIP files
4
- // Copyright (c) 2025 NeoWare, Inc. All rights reserved.
5
- // ======================================
6
-
7
- import { ZipEntry } from '../shared/ZipKit';
8
- import { NZipTokenInfo, BlockchainVerification } from './TokenVerifierBrowser';
9
- import { TOKENIZED_METADATA } from '../shared/constants/Headers';
10
-
11
- // Token-specific types
12
- export interface TokenInfo {
13
- tokenId: string;
14
- contractAddress: string;
15
- network: string;
16
- transactionHash: string;
17
- wallet?: string;
18
- timestamp?: number;
19
- note?: string;
20
- }
21
-
22
- export interface WalletInfo {
23
- address: string;
24
- network: string;
25
- balance?: string;
26
- ensName?: string;
27
- }
28
-
29
- export interface ZipFileInfo {
30
- filename: string;
31
- size: number;
32
- date: string;
33
- hash: string;
34
- }
35
-
36
- /**
37
- * Browser-compatible certificate generator class
38
- */
39
- export class CertificateGeneratorBrowser {
40
- /**
41
- * Generates a certificate HTML document for tokenized ZIP files
42
- */
43
- createTokenCertificate(
44
- tokenInfo: TokenInfo,
45
- zipFile: string,
46
- blockchainVerification: BlockchainVerification,
47
- walletInfo?: WalletInfo,
48
- zipFiles?: ZipFileInfo[],
49
- options?: { narrow?: boolean; includeQR?: boolean }
50
- ): string {
51
-
52
- // Generate token information HTML
53
- const tokenHTML = this.generateTokenSection(tokenInfo);
54
-
55
- // Generate blockchain verification HTML
56
- const verificationHTML = this.generateVerificationSection(blockchainVerification);
57
-
58
- // Generate wallet information HTML
59
- const walletHTML = walletInfo ? this.generateWalletSection(walletInfo) : '';
60
-
61
- // Generate files table HTML
62
- const filesTableHTML = zipFiles ? this.generateFilesTable(zipFiles) : '';
63
-
64
- // Get the complete HTML template
65
- const htmlTemplate = this.getCertificateTemplate();
66
-
67
- // Create the complete attestation HTML combining all sections
68
- const attestHTML = tokenHTML + verificationHTML + walletHTML;
69
-
70
- // Replace placeholders in the template
71
- const html = htmlTemplate
72
- .replace(/{{ATTEST_STR}}/g, `NFT Token Certificate for ${zipFile}`)
73
- .replace(/{{UPDATE_WARNING}}/g, blockchainVerification.verificationStatus === 'FAILED' ?
74
- '<div class="warning">⚠️ Warning: Blockchain verification failed. This archive may have been tampered with.</div>' : '')
75
- .replace(/{{ZIP_FILE}}/g, zipFile)
76
- .replace(/{{HASH_DIGEST}}/g, blockchainVerification.calculatedMerkleRoot)
77
- .replace(/{{ATTESTATION_HTML}}/g, attestHTML)
78
- .replace(/{{FILES_TABLE_HTML}}/g, filesTableHTML)
79
- .replace(/{{GENERATION_TIME}}/g, new Date().toUTCString());
80
-
81
- return html;
82
- }
83
-
84
- /**
85
- * Saves a certificate as a downloadable file (browser-compatible)
86
- */
87
- saveCertificate(
88
- fileName: string,
89
- certificateHTML: string
90
- ): void {
91
- const baseName = fileName.replace(/\.zip$/i, '');
92
- const certFileName = `${baseName}.token-certificate.html`;
93
-
94
- // Create a blob with the HTML content
95
- const blob = new Blob([certificateHTML], { type: 'text/html' });
96
-
97
- // Create a download link
98
- const url = URL.createObjectURL(blob);
99
- const link = document.createElement('a');
100
- link.href = url;
101
- link.download = certFileName;
102
-
103
- // Trigger download
104
- document.body.appendChild(link);
105
- link.click();
106
- document.body.removeChild(link);
107
-
108
- // Clean up the URL object
109
- URL.revokeObjectURL(url);
110
- }
111
-
112
- /**
113
- * Generate token information section
114
- */
115
- private generateTokenSection(tokenInfo: TokenInfo): string {
116
- return `
117
- <div class="token-section">
118
- <h3>🎫 NFT Token Information</h3>
119
- <div class="key-value-pair">
120
- <div class="key">Token ID:</div>
121
- <div class="value"><code>${tokenInfo.tokenId}</code></div>
122
- </div>
123
- <div class="key-value-pair">
124
- <div class="key">Network:</div>
125
- <div class="value">${tokenInfo.network}</div>
126
- </div>
127
- <div class="key-value-pair">
128
- <div class="key">Contract Address:</div>
129
- <div class="value"><code>${tokenInfo.contractAddress}</code></div>
130
- </div>
131
- <div class="key-value-pair">
132
- <div class="key">Transaction Hash:</div>
133
- <div class="value"><code>${tokenInfo.transactionHash}</code></div>
134
- </div>
135
- ${tokenInfo.wallet ? `
136
- <div class="key-value-pair">
137
- <div class="key">Wallet:</div>
138
- <div class="value"><code>${tokenInfo.wallet}</code></div>
139
- </div>
140
- ` : ''}
141
- ${tokenInfo.timestamp ? `
142
- <div class="key-value-pair">
143
- <div class="key">Minted At:</div>
144
- <div class="value">${new Date(tokenInfo.timestamp * 1000).toUTCString()}</div>
145
- </div>
146
- ` : ''}
147
- ${tokenInfo.note ? `
148
- <div class="key-value-pair">
149
- <div class="key">Note:</div>
150
- <div class="value">${tokenInfo.note}</div>
151
- </div>
152
- ` : ''}
153
- </div>
154
- `;
155
- }
156
-
157
- /**
158
- * Generate blockchain verification section
159
- */
160
- private generateVerificationSection(verification: BlockchainVerification): string {
161
- const statusIcon = verification.verificationStatus === 'PASSED' ? '✅' :
162
- verification.verificationStatus === 'FAILED' ? '❌' : '⚠️';
163
-
164
- return `
165
- <div class="verification-section ${verification.verificationStatus.toLowerCase()}">
166
- <h3>🔐 Blockchain Verification</h3>
167
- <div class="verification-status ${verification.verificationStatus.toLowerCase()}">
168
- ${statusIcon} <strong>Status: ${verification.verificationStatus}</strong>
169
- </div>
170
- <div class="key-value-pair">
171
- <div class="key">Blockchain Merkle Root:</div>
172
- <div class="value"><code>${verification.blockchainMerkleRoot}</code></div>
173
- </div>
174
- <div class="key-value-pair">
175
- <div class="key">Calculated Merkle Root:</div>
176
- <div class="value"><code>${verification.calculatedMerkleRoot}</code></div>
177
- </div>
178
- <div class="key-value-pair">
179
- <div class="key">Integrity Check:</div>
180
- <div class="value">${verification.merkleRootMatches ?
181
- '✅ Archive contents match blockchain record' :
182
- '❌ Archive contents do not match blockchain record'}</div>
183
- </div>
184
- ${verification.verificationTime ? `
185
- <div class="key-value-pair">
186
- <div class="key">Verified At:</div>
187
- <div class="value">${new Date(verification.verificationTime * 1000).toUTCString()}</div>
188
- </div>
189
- ` : ''}
190
- ${verification.blockNumber ? `
191
- <div class="key-value-pair">
192
- <div class="key">Block Number:</div>
193
- <div class="value">${verification.blockNumber}</div>
194
- </div>
195
- ` : ''}
196
- </div>
197
- `;
198
- }
199
-
200
- /**
201
- * Generate wallet information section
202
- */
203
- private generateWalletSection(walletInfo: WalletInfo): string {
204
- return `
205
- <div class="wallet-section">
206
- <h3>👛 Wallet Information</h3>
207
- <div class="key-value-pair">
208
- <div class="key">Address:</div>
209
- <div class="value"><code>${walletInfo.address}</code></div>
210
- </div>
211
- <div class="key-value-pair">
212
- <div class="key">Network:</div>
213
- <div class="value">${walletInfo.network}</div>
214
- </div>
215
- ${walletInfo.balance ? `
216
- <div class="key-value-pair">
217
- <div class="key">Balance:</div>
218
- <div class="value">${walletInfo.balance}</div>
219
- </div>
220
- ` : ''}
221
- ${walletInfo.ensName ? `
222
- <div class="key-value-pair">
223
- <div class="key">ENS Name:</div>
224
- <div class="value">${walletInfo.ensName}</div>
225
- </div>
226
- ` : ''}
227
- </div>
228
- `;
229
- }
230
-
231
- /**
232
- * Generate files table
233
- */
234
- private generateFilesTable(zipFiles: ZipFileInfo[]): string {
235
- if (zipFiles.length === 0) {
236
- return '<tr><td colspan="4">No files found</td></tr>';
237
- }
238
-
239
- return zipFiles.map(file => `
240
- <tr>
241
- <td class="table-data1">${file.filename}</td>
242
- <td>${file.size.toLocaleString()}</td>
243
- <td>${file.date}</td>
244
- <td><code>${file.hash}</code></td>
245
- </tr>
246
- `).join('');
247
- }
248
-
249
- /**
250
- * Get the HTML template for certificates
251
- */
252
- private getCertificateTemplate(): string {
253
- return `<!DOCTYPE html>
254
- <html lang="en">
255
- <head>
256
- <meta charset="UTF-8">
257
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
258
- <title>NFT Token Certificate - {{ZIP_FILE}}</title>
259
- <style>
260
- body {
261
- font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
262
- line-height: 1.6;
263
- margin: 0;
264
- padding: 20px;
265
- background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
266
- min-height: 100vh;
267
- }
268
- .certificate {
269
- max-width: 900px;
270
- margin: 0 auto;
271
- background: white;
272
- border-radius: 15px;
273
- box-shadow: 0 20px 40px rgba(0,0,0,0.1);
274
- overflow: hidden;
275
- }
276
- .header {
277
- background: linear-gradient(135deg, #2c3e50 0%, #3498db 100%);
278
- color: white;
279
- padding: 30px;
280
- text-align: center;
281
- }
282
- .header h1 {
283
- margin: 0;
284
- font-size: 2.5em;
285
- font-weight: 300;
286
- }
287
- .header h2 {
288
- margin: 10px 0 0 0;
289
- font-size: 1.2em;
290
- opacity: 0.9;
291
- }
292
- .content {
293
- padding: 40px;
294
- }
295
- .token-section, .verification-section, .wallet-section {
296
- margin-bottom: 30px;
297
- padding: 20px;
298
- border-radius: 10px;
299
- border-left: 4px solid #3498db;
300
- background: #f8f9fa;
301
- }
302
- .verification-section.passed {
303
- border-left-color: #27ae60;
304
- }
305
- .verification-section.failed {
306
- border-left-color: #e74c3c;
307
- }
308
- .verification-section.unavailable {
309
- border-left-color: #f39c12;
310
- }
311
- .verification-status {
312
- font-size: 1.2em;
313
- margin-bottom: 15px;
314
- padding: 10px;
315
- border-radius: 5px;
316
- }
317
- .verification-status.passed {
318
- background: #d4edda;
319
- color: #155724;
320
- }
321
- .verification-status.failed {
322
- background: #f8d7da;
323
- color: #721c24;
324
- }
325
- .verification-status.unavailable {
326
- background: #fff3cd;
327
- color: #856404;
328
- }
329
- .key-value-pair {
330
- display: flex;
331
- margin-bottom: 10px;
332
- align-items: flex-start;
333
- }
334
- .key {
335
- font-weight: bold;
336
- min-width: 200px;
337
- color: #2c3e50;
338
- }
339
- .value {
340
- flex: 1;
341
- word-break: break-all;
342
- }
343
- .value code {
344
- background: #e9ecef;
345
- padding: 2px 6px;
346
- border-radius: 3px;
347
- font-family: 'Monaco', 'Menlo', monospace;
348
- font-size: 0.9em;
349
- }
350
- .files-section {
351
- margin-top: 30px;
352
- }
353
- .files-table {
354
- width: 100%;
355
- border-collapse: collapse;
356
- margin-top: 15px;
357
- }
358
- .files-table th,
359
- .files-table td {
360
- padding: 12px;
361
- text-align: left;
362
- border-bottom: 1px solid #dee2e6;
363
- }
364
- .files-table th {
365
- background: #f8f9fa;
366
- font-weight: bold;
367
- color: #2c3e50;
368
- }
369
- .table-data1 {
370
- font-weight: bold;
371
- }
372
- .warning {
373
- background: #fff3cd;
374
- color: #856404;
375
- padding: 15px;
376
- border-radius: 5px;
377
- margin-bottom: 20px;
378
- border-left: 4px solid #ffc107;
379
- }
380
- .footer {
381
- text-align: center;
382
- padding: 20px;
383
- background: #f8f9fa;
384
- color: #6c757d;
385
- font-size: 0.9em;
386
- }
387
- h3 {
388
- margin-top: 0;
389
- color: #2c3e50;
390
- font-size: 1.3em;
391
- }
392
- </style>
393
- </head>
394
- <body>
395
- <div class="certificate">
396
- <div class="header">
397
- <h1>🎫 NFT Token Certificate</h1>
398
- <h2>Blockchain-Verified Digital Archive</h2>
399
- </div>
400
-
401
- <div class="content">
402
- {{UPDATE_WARNING}}
403
-
404
- <div class="key-value-pair" style="margin-bottom: 30px; font-size: 1.1em;">
405
- <div class="key">Archive File:</div>
406
- <div class="value"><strong>{{ZIP_FILE}}</strong></div>
407
- </div>
408
-
409
- {{ATTESTATION_HTML}}
410
-
411
- <div class="files-section">
412
- <h3>📁 Archive Contents</h3>
413
- <table class="files-table">
414
- <thead>
415
- <tr>
416
- <th>File Name</th>
417
- <th>Size (bytes)</th>
418
- <th>Date Modified</th>
419
- <th>SHA256 Hash</th>
420
- </tr>
421
- </thead>
422
- <tbody>
423
- {{FILES_TABLE_HTML}}
424
- </tbody>
425
- </table>
426
- </div>
427
- </div>
428
-
429
- <div class="footer">
430
- <p>This certificate verifies the integrity and authenticity of the tokenized archive through blockchain technology.</p>
431
- <p>Generated on: {{GENERATION_TIME}}</p>
432
- </div>
433
- </div>
434
- </body>
435
- </html>`;
436
- }
437
-
438
- /**
439
- * Prepares file information from ZIP entries for certificate generation
440
- */
441
- prepareZipFileInfo(zipEntries: ZipEntry[]): ZipFileInfo[] {
442
- const zipFiles: ZipFileInfo[] = [];
443
-
444
- for (const entry of zipEntries) {
445
- // Skip the token file itself and directories
446
- if (entry.filename !== TOKENIZED_METADATA &&
447
- !entry.isDirectory &&
448
- entry.sha256) {
449
- zipFiles.push({
450
- filename: entry.filename,
451
- size: entry.uncompressedSize,
452
- date: this.formatEntryDate(entry),
453
- hash: entry.sha256
454
- });
455
- }
456
- }
457
-
458
- return zipFiles;
459
- }
460
-
461
- /**
462
- * Formats the date from a ZIP entry
463
- */
464
- private formatEntryDate(entry: ZipEntry): string {
465
- try {
466
- // Try to use the entry's date formatting if available
467
- if (typeof (entry as any).toFormattedUTCDateString === 'function') {
468
- return (entry as any).toFormattedUTCDateString();
469
- }
470
-
471
- // Fallback to current date
472
- return new Date().toUTCString();
473
- } catch (error) {
474
- return new Date().toUTCString();
475
- }
476
- }
477
- }
478
-
479
- /**
480
- * Creates a new CertificateGeneratorBrowser instance
481
- */
482
- export function createCertificateGenerator(): CertificateGeneratorBrowser {
483
- return new CertificateGeneratorBrowser();
484
- }
485
-
486
- /**
487
- * Convenience function to generate a certificate
488
- */
489
- export function generateTokenCertificate(
490
- tokenInfo: TokenInfo,
491
- zipFile: string,
492
- blockchainVerification: BlockchainVerification,
493
- walletInfo?: WalletInfo,
494
- zipFiles?: ZipFileInfo[]
495
- ): string {
496
- const generator = new CertificateGeneratorBrowser();
497
- return generator.createTokenCertificate(tokenInfo, zipFile, blockchainVerification, walletInfo, zipFiles);
498
- }
@@ -1,9 +0,0 @@
1
- // A browser-safe version of ZipKitStamp
2
-
3
- export const createTimestamp = async (hash: string, options: any = {}): Promise<any> => {
4
- throw new Error('Blockchain timestamp creation is not supported in browsers');
5
- };
6
-
7
- export const verifyTimestamp = async (timestamp: any, options: any = {}): Promise<any> => {
8
- throw new Error('Blockchain timestamp verification is not supported in browsers');
9
- };
@@ -1,36 +0,0 @@
1
- // =============================================================================
2
- // NeoZipKit - Browser-Only Package Exports
3
- // =============================================================================
4
-
5
- // Core shared exports
6
- import ZipKit from './shared/ZipKit';
7
- export { ZipEntry, Errors, CMP_METHOD, TIMESTAMP_METADATA, TIMESTAMP_SUBMITTED } from './shared/ZipKit';
8
- export type { CompressOptions } from './shared/ZipKit';
9
- export * from './shared/ZipKit';
10
- export * from './shared/ZipEntry';
11
- export default ZipKit;
12
-
13
- // Browser-only exports
14
- export { default as ZipKitBrowser } from './browser/ZipKitBrowser';
15
- // export { CertificateGeneratorBrowser } from './browser/CertificateGeneratorBrowser';
16
- // export { TokenVerificationResult, checkForTokenization as checkForTokenizationBrowser, NZipTokenInfo } from './browser/TokenVerifierBrowser';
17
- // export type { TokenVerificationOptions } from './browser/TokenVerifierBrowser';
18
-
19
- // Shared component exports
20
- export { default as HashAccumulator } from './shared/components/HashAccumulator';
21
- export * from './shared/components/Util';
22
- export * from './shared/components/Support';
23
-
24
- // Type and constant exports
25
- export * from './shared/types';
26
- export * from './shared/constants/Headers';
27
- export * from './shared/constants/Errors';
28
- export * from './shared/version';
29
-
30
- // Platform-specific conditional exports
31
- export const PlatformUtils = {
32
- // Browser detection
33
- isBrowser: typeof window !== 'undefined' && typeof document !== 'undefined',
34
- // Node.js detection
35
- isNode: typeof process !== 'undefined' && process.versions && process.versions.node,
36
- };
@@ -1,25 +0,0 @@
1
- ### Server APIs
2
-
3
- #### ZipKitServer
4
- - `loadZipFile(path)`
5
- - Open or create a ZIP for writing; prepares entries for add/update operations.
6
- - `loadUnzipFile(path)`
7
- - Open an existing ZIP for reading/extraction; throws on missing files.
8
- - `addFile(path, freshen?, update?)`
9
- - Add a new entry or update an existing one (respects freshen/update flags).
10
- - `addFiles(paths[], freshen?, update?)`
11
- - Batch add/update using `addFile` logic.
12
- - `createZip(path, options)`
13
- - Write all staged entries to disk (no OpenTimestamps metadata).
14
- - `createZipOTS(path, options)`
15
- - Write entries to disk and embed OpenTimestamps (OTS) metadata using the Merkle root.
16
- - `deleteFiles(paths[])`
17
- - Delete entries by filename and rebuild central directory.
18
- - `upgradeOTS(zipPath, upgradedOts)`
19
- - Replace OTS metadata in an existing archive with upgraded OTS bytes.
20
-
21
- Notes:
22
- - All read/write callbacks use Node Buffers. Ensure files exist on disk during `createZip*` flows.
23
-
24
- For OpenTimestamps utilities, see `src/blockchain/ZipKitOTS.ts`.
25
-