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,434 @@
1
+ "use strict";
2
+ /**
3
+ * WalletManagerBrowser - Handles browser-specific wallet operations
4
+ * Manages MetaMask, Coinbase Wallet, and other browser providers
5
+ * Extends CoreWalletManager with browser-specific functionality
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.WalletManagerBrowser = void 0;
9
+ const ethers_1 = require("ethers");
10
+ const WalletManager_1 = require("../core/WalletManager");
11
+ const contracts_1 = require("../core/contracts");
12
+ const Logger_1 = require("../../core/components/Logger");
13
+ class WalletManagerBrowser extends WalletManager_1.CoreWalletManager {
14
+ constructor(initialChainId = 84532) {
15
+ super();
16
+ this.browserProvider = null;
17
+ this.readProvider = null;
18
+ this.contract = null;
19
+ this.targetChainId = null;
20
+ // Dedicated RPC endpoints for read operations (to avoid rate limiting)
21
+ this.RPC_ENDPOINTS = {
22
+ 1: (0, contracts_1.getContractConfig)(1).rpcUrls[0],
23
+ 11155111: (0, contracts_1.getContractConfig)(11155111).rpcUrls[0],
24
+ 84532: (0, contracts_1.getContractConfig)(84532).rpcUrls[0],
25
+ 8453: (0, contracts_1.getContractConfig)(8453).rpcUrls[0]
26
+ };
27
+ this.currentConfig = (0, contracts_1.getContractConfig)(initialChainId);
28
+ }
29
+ /**
30
+ * Cleanup method to dispose of providers and stop background processes
31
+ */
32
+ cleanup() {
33
+ Logger_1.Logger.log('🧹 Cleaning up browser wallet manager providers...');
34
+ try {
35
+ // Clear providers to stop any ongoing background processes
36
+ if (this.readProvider) {
37
+ try {
38
+ this.readProvider.destroy?.();
39
+ }
40
+ catch (error) {
41
+ Logger_1.Logger.warn('Could not destroy read provider:', error);
42
+ }
43
+ this.readProvider = null;
44
+ }
45
+ if (this.browserProvider) {
46
+ this.browserProvider = null;
47
+ }
48
+ if (this.contract) {
49
+ this.contract = null;
50
+ }
51
+ Logger_1.Logger.log('✅ Browser wallet manager cleanup completed');
52
+ }
53
+ catch (error) {
54
+ Logger_1.Logger.warn('Error during browser wallet manager cleanup:', error);
55
+ }
56
+ }
57
+ getNetworkName(chainId) {
58
+ const networkNames = {
59
+ 1: "homestead",
60
+ 11155111: "sepolia",
61
+ 84532: "base-sepolia",
62
+ 8453: "base"
63
+ };
64
+ return networkNames[chainId] || `chain-${chainId}`;
65
+ }
66
+ /**
67
+ * Set the target network for wallet operations
68
+ */
69
+ setTargetNetwork(chainId) {
70
+ if (!(0, contracts_1.isNetworkSupported)(chainId)) {
71
+ throw new Error(`Network ${chainId} is not supported for tokenization`);
72
+ }
73
+ this.targetChainId = chainId;
74
+ this.currentConfig = (0, contracts_1.getContractConfig)(chainId);
75
+ Logger_1.Logger.log(`🎯 Target network set to: ${this.currentConfig.network} (${chainId})`);
76
+ Logger_1.Logger.log(`📍 Contract address: ${this.currentConfig.address}`);
77
+ }
78
+ /**
79
+ * Get the current target network configuration
80
+ */
81
+ getCurrentConfig() {
82
+ return this.currentConfig;
83
+ }
84
+ /**
85
+ * Initialize wallet with browser provider
86
+ */
87
+ async initialize(walletAddress, existingProvider) {
88
+ try {
89
+ // Use existing provider if available, otherwise create new one
90
+ if (existingProvider) {
91
+ Logger_1.Logger.log("🔄 Using existing wallet provider for tokenization");
92
+ try {
93
+ this.browserProvider = new ethers_1.ethers.BrowserProvider(existingProvider);
94
+ await this.testProviderConnection(existingProvider);
95
+ }
96
+ catch (providerError) {
97
+ Logger_1.Logger.warn("❌ Existing provider failed, falling back to window.ethereum:", providerError);
98
+ if (window.ethereum) {
99
+ this.browserProvider = new ethers_1.ethers.BrowserProvider(window.ethereum);
100
+ await this.testProviderConnection(window.ethereum);
101
+ }
102
+ else {
103
+ throw new Error("No wallet provider available");
104
+ }
105
+ }
106
+ }
107
+ else if (window.ethereum) {
108
+ Logger_1.Logger.log("🔄 Creating new provider from window.ethereum");
109
+ try {
110
+ this.browserProvider = new ethers_1.ethers.BrowserProvider(window.ethereum);
111
+ await this.testProviderConnection(window.ethereum);
112
+ }
113
+ catch (windowEthError) {
114
+ throw new Error(`Failed to connect to wallet: ${windowEthError.message}`);
115
+ }
116
+ }
117
+ else {
118
+ throw new Error("No wallet provider found");
119
+ }
120
+ // Get chain ID with rate limit protection
121
+ let chainId = null;
122
+ Logger_1.Logger.log("🔍 Starting network detection...");
123
+ try {
124
+ Logger_1.Logger.log("📡 Attempting single eth_chainId call...");
125
+ const hexChainId = await this.browserProvider.send("eth_chainId", []);
126
+ chainId = parseInt(hexChainId, 16);
127
+ Logger_1.Logger.log(`✅ Network detected: Chain ${chainId}`);
128
+ }
129
+ catch (chainIdError) {
130
+ Logger_1.Logger.warn("❌ Chain ID detection failed:", chainIdError);
131
+ chainId = this.currentConfig.chainId;
132
+ Logger_1.Logger.log(`⚠️ Using default chain ID: ${chainId}`);
133
+ }
134
+ Logger_1.Logger.log(`🎯 Final detected chain ID: ${chainId}`);
135
+ Logger_1.Logger.log(`🎯 Required chain ID: ${this.currentConfig.chainId}`);
136
+ // If no explicit target was set, adopt the detected network
137
+ if (!this.targetChainId && chainId) {
138
+ this.currentConfig = (0, contracts_1.getContractConfig)(chainId);
139
+ Logger_1.Logger.log(`🎛 Adopted current network: ${this.currentConfig.network} (${chainId})`);
140
+ }
141
+ // Set up dedicated read provider to avoid rate limiting
142
+ if (chainId && this.RPC_ENDPOINTS[chainId]) {
143
+ try {
144
+ Logger_1.Logger.log(`🔗 Testing RPC endpoint before creating provider for chain ${chainId}...`);
145
+ const rpcUrl = this.RPC_ENDPOINTS[chainId];
146
+ // Test RPC endpoint with fetch first
147
+ const controller = new AbortController();
148
+ const timeout = setTimeout(() => controller.abort(), 2500);
149
+ const testResponse = await fetch(rpcUrl, {
150
+ method: 'POST',
151
+ headers: { 'Content-Type': 'application/json' },
152
+ body: JSON.stringify({ jsonrpc: '2.0', method: 'eth_chainId', params: [], id: 1 }),
153
+ signal: controller.signal,
154
+ }).catch(() => null);
155
+ clearTimeout(timeout);
156
+ if (!testResponse || !testResponse.ok) {
157
+ throw new Error('RPC endpoint did not respond in time');
158
+ }
159
+ const testData = await testResponse.json().catch(() => null);
160
+ const actualChainId = testData && testData.result ? parseInt(testData.result, 16) : undefined;
161
+ if (actualChainId !== chainId) {
162
+ throw new Error(`Chain ID mismatch: expected ${chainId}, got ${actualChainId}`);
163
+ }
164
+ Logger_1.Logger.log(`✅ RPC endpoint test passed for chain ${chainId}`);
165
+ const networkConfig = {
166
+ name: this.getNetworkName(chainId),
167
+ chainId: chainId
168
+ };
169
+ this.readProvider = new ethers_1.ethers.JsonRpcProvider(rpcUrl, networkConfig);
170
+ Logger_1.Logger.log(`✅ Read provider initialized successfully for ${rpcUrl}`);
171
+ }
172
+ catch (readProviderError) {
173
+ Logger_1.Logger.warn("❌ Failed to set up read provider:", readProviderError);
174
+ this.readProvider = null;
175
+ }
176
+ }
177
+ // Verify chain ID if we were able to detect it
178
+ if (chainId && chainId !== this.currentConfig.chainId) {
179
+ Logger_1.Logger.log(`❌ Wrong network detected. Current: Chain ${chainId}, Required: Chain ${this.currentConfig.chainId}`);
180
+ try {
181
+ Logger_1.Logger.log(`🔄 Attempting to switch to ${this.currentConfig.network}...`);
182
+ await this.addAndSwitchNetwork();
183
+ Logger_1.Logger.log(`✅ Successfully switched to ${this.currentConfig.network}`);
184
+ // Re-verify the network after switching
185
+ await new Promise(resolve => setTimeout(resolve, 1000));
186
+ try {
187
+ const newNetwork = await this.browserProvider.getNetwork();
188
+ const newChainId = Number(newNetwork.chainId);
189
+ Logger_1.Logger.log(`🔍 Post-switch verification: Chain ${newChainId}`);
190
+ if (newChainId !== this.currentConfig.chainId) {
191
+ throw new Error(`Network switch failed. Still on Chain ${newChainId}`);
192
+ }
193
+ chainId = newChainId;
194
+ // Recreate read provider for the new network
195
+ try {
196
+ if (this.readProvider) {
197
+ try {
198
+ this.readProvider.destroy?.();
199
+ }
200
+ catch { }
201
+ this.readProvider = null;
202
+ }
203
+ const rpcUrl = this.RPC_ENDPOINTS[newChainId];
204
+ if (rpcUrl) {
205
+ const networkConfig = { name: this.getNetworkName(newChainId), chainId: newChainId };
206
+ this.readProvider = new ethers_1.ethers.JsonRpcProvider(rpcUrl, networkConfig);
207
+ Logger_1.Logger.log(`🔁 Read provider switched to ${rpcUrl}`);
208
+ }
209
+ }
210
+ catch (rpErr) {
211
+ Logger_1.Logger.warn('Could not recreate read provider after switch:', rpErr);
212
+ }
213
+ }
214
+ catch (verifyError) {
215
+ Logger_1.Logger.warn("Could not verify network after switch:", verifyError);
216
+ chainId = this.currentConfig.chainId;
217
+ }
218
+ }
219
+ catch (switchError) {
220
+ Logger_1.Logger.error("Failed to switch network:", switchError);
221
+ throw new Error(`Please manually switch to ${this.currentConfig.network} in your wallet.\n\n` +
222
+ `Current network: Chain ${chainId}\n` +
223
+ `Required network: ${this.currentConfig.network} (Chain ID: ${this.currentConfig.chainId})\n\n` +
224
+ `In MetaMask:\n` +
225
+ `1. Click the network dropdown at the top\n` +
226
+ `2. Select "Add network" or "Custom networks"\n` +
227
+ `3. Add ${this.currentConfig.network} network details\n` +
228
+ `4. Switch to ${this.currentConfig.network}\n\n` +
229
+ `Network Details:\n` +
230
+ `• Network Name: ${this.currentConfig.network}\n` +
231
+ `• RPC URL: ${this.currentConfig.rpcUrls[0]}\n` +
232
+ `• Chain ID: ${this.currentConfig.chainId}\n` +
233
+ `• Currency Symbol: ETH\n` +
234
+ `• Block Explorer: ${this.currentConfig.explorerUrl}`);
235
+ }
236
+ }
237
+ Logger_1.Logger.log(`🔗 Browser wallet manager initialized`);
238
+ Logger_1.Logger.log(`📡 Connected to ${this.currentConfig.network} (Chain ${chainId || 'unknown'})`);
239
+ Logger_1.Logger.log(`📍 Contract Address: ${this.currentConfig.address}`);
240
+ Logger_1.Logger.log(`👛 Wallet Address: ${walletAddress}`);
241
+ // Initialize contract with the actual contract address
242
+ try {
243
+ const signer = await this.browserProvider.getSigner();
244
+ this.contract = new ethers_1.ethers.Contract(this.currentConfig.address, contracts_1.NZIP_CONTRACT_ABI, signer);
245
+ // Test the contract connection by checking if it has code
246
+ try {
247
+ const providerForRead = this.readProvider || this.browserProvider;
248
+ const code = await providerForRead.getCode(this.currentConfig.address);
249
+ if (code === '0x') {
250
+ Logger_1.Logger.warn(`⚠️ No contract code found at ${this.currentConfig.address}. Contract may not be deployed on this network.`);
251
+ }
252
+ else {
253
+ Logger_1.Logger.log(`✅ Contract verified at ${this.currentConfig.address}`);
254
+ }
255
+ }
256
+ catch (codeError) {
257
+ Logger_1.Logger.warn("Could not verify contract code:", codeError);
258
+ }
259
+ }
260
+ catch (signerError) {
261
+ Logger_1.Logger.error("Failed to get signer or initialize contract:", signerError);
262
+ throw new Error("Could not connect to wallet. Please ensure your wallet is unlocked and connected.");
263
+ }
264
+ return true;
265
+ }
266
+ catch (error) {
267
+ Logger_1.Logger.error("Browser wallet manager initialization failed:", error);
268
+ if (error instanceof Error) {
269
+ if (error.message.includes("No wallet provider found")) {
270
+ throw new Error("No crypto wallet detected. Please install MetaMask, Coinbase Wallet, or another Web3 wallet.");
271
+ }
272
+ else if (error.message.includes("Please switch to")) {
273
+ throw error;
274
+ }
275
+ else if (error.message.includes("Could not connect to wallet")) {
276
+ throw error;
277
+ }
278
+ else {
279
+ throw new Error(`Wallet connection failed: ${error.message}`);
280
+ }
281
+ }
282
+ throw error;
283
+ }
284
+ }
285
+ /**
286
+ * Get the contract instance
287
+ */
288
+ getContract() {
289
+ return this.contract;
290
+ }
291
+ /**
292
+ * Get the browser provider instance
293
+ */
294
+ getBrowserProvider() {
295
+ return this.browserProvider;
296
+ }
297
+ /**
298
+ * Override parent method to return browser provider
299
+ */
300
+ getWallet() {
301
+ // Browser doesn't have direct wallet access, return null
302
+ return null;
303
+ }
304
+ /**
305
+ * Get the read provider instance
306
+ */
307
+ getReadProvider() {
308
+ return this.readProvider;
309
+ }
310
+ /**
311
+ * Override parent method to check browser provider
312
+ */
313
+ isReady() {
314
+ return this.browserProvider !== null;
315
+ }
316
+ /**
317
+ * Override parent method to check read provider
318
+ */
319
+ isOnline() {
320
+ return this.readProvider !== null || this.browserProvider !== null;
321
+ }
322
+ async addAndSwitchNetwork() {
323
+ if (!window.ethereum) {
324
+ throw new Error("Ethereum provider not found");
325
+ }
326
+ try {
327
+ // First try to switch to the network (in case it already exists)
328
+ await window.ethereum.request({
329
+ method: "wallet_switchEthereumChain",
330
+ params: [
331
+ {
332
+ chainId: `0x${this.currentConfig.chainId.toString(16)}`,
333
+ },
334
+ ],
335
+ });
336
+ Logger_1.Logger.log(`✅ Successfully switched to existing ${this.currentConfig.network}`);
337
+ }
338
+ catch (switchError) {
339
+ // If switching failed, the network might not exist, so try to add it
340
+ if (switchError.code === 4902) {
341
+ Logger_1.Logger.log(`➕ Network not found, adding ${this.currentConfig.network}...`);
342
+ try {
343
+ await window.ethereum.request({
344
+ method: "wallet_addEthereumChain",
345
+ params: [
346
+ {
347
+ chainId: `0x${this.currentConfig.chainId.toString(16)}`,
348
+ chainName: this.currentConfig.network,
349
+ nativeCurrency: {
350
+ name: "ETH",
351
+ symbol: "ETH",
352
+ decimals: 18,
353
+ },
354
+ rpcUrls: this.currentConfig.rpcUrls,
355
+ blockExplorerUrls: [
356
+ this.currentConfig.explorerUrl,
357
+ ],
358
+ },
359
+ ],
360
+ });
361
+ Logger_1.Logger.log(`✅ Successfully added and switched to ${this.currentConfig.network}`);
362
+ }
363
+ catch (addError) {
364
+ Logger_1.Logger.error("Failed to add network:", addError);
365
+ if (addError.code === 4001) {
366
+ throw new Error("User rejected the network addition request. Please manually add Base Sepolia network to your wallet.");
367
+ }
368
+ else {
369
+ throw new Error(`Failed to add ${this.currentConfig.network} network: ${addError.message}`);
370
+ }
371
+ }
372
+ }
373
+ else if (switchError.code === 4001) {
374
+ throw new Error("User rejected the network switch request. Please manually switch to Base Sepolia in your wallet.");
375
+ }
376
+ else {
377
+ Logger_1.Logger.error("Network switch failed:", switchError);
378
+ throw new Error(`Failed to switch to ${this.currentConfig.network}: ${switchError.message}`);
379
+ }
380
+ }
381
+ }
382
+ async testProviderConnection(provider) {
383
+ try {
384
+ await provider.request({ method: 'eth_chainId' });
385
+ Logger_1.Logger.log("✅ Provider connection successful (eth_chainId)");
386
+ }
387
+ catch (error) {
388
+ Logger_1.Logger.warn("❌ Provider connection failed (eth_chainId):", error);
389
+ throw new Error(`Could not establish connection to wallet: ${error.message}`);
390
+ }
391
+ }
392
+ // ===== Explorer URL Generation Methods =====
393
+ /**
394
+ * Generate block explorer URL for a transaction
395
+ */
396
+ getExplorerUrl(transactionHash) {
397
+ return `${this.currentConfig.explorerUrl}/tx/${transactionHash}`;
398
+ }
399
+ /**
400
+ * Generate block explorer URL for a contract
401
+ */
402
+ getContractExplorerUrl() {
403
+ return `${this.currentConfig.explorerUrl}/address/${this.currentConfig.address}`;
404
+ }
405
+ /**
406
+ * Generate block explorer URL for a token
407
+ * Uses the contract address page where users can search for specific token IDs
408
+ */
409
+ getTokenExplorerUrl(tokenId) {
410
+ return `${this.currentConfig.explorerUrl}/address/${this.currentConfig.address}#readContract`;
411
+ }
412
+ /**
413
+ * Generate block explorer URL for a specific token ID
414
+ * Some explorers support direct token URLs
415
+ */
416
+ getTokenDirectUrl(tokenId) {
417
+ // This varies by explorer, but most support this pattern
418
+ return `${this.currentConfig.explorerUrl}/token/${this.currentConfig.address}?a=${tokenId}`;
419
+ }
420
+ /**
421
+ * Generate block explorer URL for an address
422
+ */
423
+ getAddressExplorerUrl(address) {
424
+ return `${this.currentConfig.explorerUrl}/address/${address}`;
425
+ }
426
+ /**
427
+ * Generate block explorer URL for a block
428
+ */
429
+ getBlockExplorerUrl(blockNumber) {
430
+ return `${this.currentConfig.explorerUrl}/block/${blockNumber}`;
431
+ }
432
+ }
433
+ exports.WalletManagerBrowser = WalletManagerBrowser;
434
+ //# sourceMappingURL=WalletManagerBrowser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WalletManagerBrowser.js","sourceRoot":"","sources":["../../../src/blockchain/browser/WalletManagerBrowser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * ZipkitMinterBrowser - Browser-specific NFT minting for ZIP files
3
+ * Extends core minting functionality with browser-specific features
4
+ */
5
+ import { WalletManagerBrowser } from './WalletManagerBrowser';
6
+ import type { TokenMetadata } from '../../types';
7
+ export interface TokenizationResult {
8
+ success: boolean;
9
+ tokenId?: string;
10
+ transactionHash?: string;
11
+ error?: string;
12
+ }
13
+ export interface ExistingToken {
14
+ tokenId: string;
15
+ owner: string;
16
+ creationTimestamp: number;
17
+ mintedAt: string;
18
+ transactionHash: string;
19
+ }
20
+ export declare class ZipkitMinterBrowser {
21
+ private walletManager;
22
+ private merkleRoot;
23
+ constructor(merkleRoot: string, walletManager: WalletManagerBrowser);
24
+ /**
25
+ * Initialize the minter with wallet manager
26
+ */
27
+ initialize(): Promise<void>;
28
+ private getNetworkName;
29
+ /**
30
+ * Check for any existing tokens with the same Merkle Root
31
+ */
32
+ findTokensByMerkleRoot(): Promise<ExistingToken[]>;
33
+ /**
34
+ * Estimate gas cost for minting
35
+ */
36
+ estimateGasCost(): Promise<string>;
37
+ /**
38
+ * Mint a new token
39
+ */
40
+ mintToken(): Promise<TokenizationResult>;
41
+ /**
42
+ * Create token metadata
43
+ */
44
+ createTokenMetadata(tokenId: string, transactionHash: string): TokenMetadata;
45
+ /**
46
+ * Get explorer URL for transaction
47
+ */
48
+ getExplorerUrl(transactionHash: string): string;
49
+ /**
50
+ * Get explorer URL for contract
51
+ */
52
+ getContractExplorerUrl(): string;
53
+ /**
54
+ * Get explorer URL for token
55
+ */
56
+ getTokenExplorerUrl(tokenId: string): string;
57
+ }
58
+ //# sourceMappingURL=ZipkitMinterBrowser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ZipkitMinterBrowser.d.ts","sourceRoot":"","sources":["../../../src/blockchain/browser/ZipkitMinterBrowser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb,iBAAiB,EAAE,MAAM,CAAA;IACzB,QAAQ,EAAE,MAAM,CAAA;IAChB,eAAe,EAAE,MAAM,CAAA;CACxB;AAED,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,aAAa,CAAsB;IAC3C,OAAO,CAAC,UAAU,CAAQ;gBAEd,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,oBAAoB;IAKnE;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IASjC,OAAO,CAAC,cAAc;IAUtB;;OAEG;IACG,sBAAsB,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IAyCxD;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC;IAoExC;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,kBAAkB,CAAC;IAwL9C;;OAEG;IACH,mBAAmB,CACjB,OAAO,EAAE,MAAM,EACf,eAAe,EAAE,MAAM,GACtB,aAAa;IAiBhB;;OAEG;IACH,cAAc,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM;IAI/C;;OAEG;IACH,sBAAsB,IAAI,MAAM;IAIhC;;OAEG;IACH,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;CAG7C"}