@tokenops/sdk 1.5.1 → 2.0.0-alpha.1

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 (222) hide show
  1. package/CHANGELOG.md +198 -2
  2. package/CONTRIBUTING.md +4 -2
  3. package/README.md +146 -90
  4. package/SECURITY.md +7 -1
  5. package/SUPPORT.md +47 -0
  6. package/dist/{chunk-YQIBBEFJ.js → chunk-335Z2W67.js} +1 -1
  7. package/dist/{chunk-2NCLOQ56.cjs → chunk-3QHNYEQD.cjs} +77 -0
  8. package/dist/chunk-456VDDA3.js +370 -0
  9. package/dist/{chunk-SG65XWH7.js → chunk-4RAAATVY.js} +1 -3
  10. package/dist/{chunk-6BMP4ICG.js → chunk-4TSDNZQ3.js} +60 -2
  11. package/dist/{chunk-PUPKNW3R.cjs → chunk-5576FRT3.cjs} +30 -6
  12. package/dist/{chunk-AOP6HMPW.js → chunk-6GNR22OV.js} +75 -1
  13. package/dist/{chunk-NTZY6IB7.js → chunk-6NAVMWZQ.js} +4 -3
  14. package/dist/{chunk-C7BRZXJA.cjs → chunk-6PXXGACR.cjs} +8 -7
  15. package/dist/{chunk-IJFQ5L4I.js → chunk-74QFZ5MK.js} +4 -3
  16. package/dist/chunk-7AFPOE7N.cjs +59 -0
  17. package/dist/chunk-AXIPOR3C.js +56 -0
  18. package/dist/chunk-CTED3MTR.cjs +380 -0
  19. package/dist/{chunk-XGGTQQFH.js → chunk-DZHYSUGY.js} +28 -7
  20. package/dist/{chunk-OXTLPTO3.js → chunk-EAJ7SYHE.js} +4 -3
  21. package/dist/{chunk-V2PXZVBF.cjs → chunk-FGEB7RMY.cjs} +4 -4
  22. package/dist/chunk-GKKDAW44.js +8823 -0
  23. package/dist/{chunk-2PWNH3UE.js → chunk-H5POPGOZ.js} +63 -5
  24. package/dist/{chunk-W7IGCOVL.cjs → chunk-JQYC66TO.cjs} +9 -8
  25. package/dist/{chunk-PFXURMBZ.cjs → chunk-JZLGCTGK.cjs} +68 -8
  26. package/dist/{chunk-JYOTGRSO.cjs → chunk-KFRDLKMA.cjs} +61 -1
  27. package/dist/chunk-M4IT6DNJ.cjs +608 -0
  28. package/dist/{chunk-KLKI352M.cjs → chunk-MVDQMV25.cjs} +0 -3
  29. package/dist/chunk-NCVX3K2N.cjs +161 -0
  30. package/dist/chunk-NWFMBLSQ.js +4 -0
  31. package/dist/chunk-O5676ZWY.js +585 -0
  32. package/dist/chunk-PUX5VXDB.cjs +8845 -0
  33. package/dist/{chunk-IXLO7GO5.js → chunk-TWT3STIX.js} +46 -80
  34. package/dist/chunk-UG5RKLU2.cjs +6 -0
  35. package/dist/chunk-VP2B4WM2.js +154 -0
  36. package/dist/{chunk-5X5WL5CU.cjs → chunk-WJLECC22.cjs} +51 -88
  37. package/dist/{chunk-WENHUPZC.cjs → chunk-XAYGD4E4.cjs} +9 -8
  38. package/dist/core/addresses.d.ts +15 -3
  39. package/dist/core/brands.d.ts +8 -2
  40. package/dist/core/errors.d.ts +71 -10
  41. package/dist/core/preflight.d.ts +1 -0
  42. package/dist/fhe/erc7984-abi.d.ts +1 -0
  43. package/dist/fhe/index.cjs +34 -13
  44. package/dist/fhe/index.d.cts +1 -0
  45. package/dist/fhe/index.d.ts +1 -0
  46. package/dist/fhe/index.js +19 -6
  47. package/dist/fhe/mock-erc7984.d.ts +4 -4
  48. package/dist/fhe/operators.d.ts +160 -3
  49. package/dist/fhe/react/index.cjs +14 -0
  50. package/dist/fhe/react/index.d.cts +2 -0
  51. package/dist/fhe/react/index.d.ts +2 -0
  52. package/dist/fhe/react/index.js +6 -0
  53. package/dist/fhe/react/useEnsureOperator.d.ts +56 -0
  54. package/dist/fhe/react/useIsOperator.d.ts +54 -0
  55. package/dist/fhe/sepolia-encryptor-web.d.ts +18 -3
  56. package/dist/fhe/types.d.ts +6 -0
  57. package/dist/fhe-airdrop/abis/{cloneable.d.ts → airdrop-base.d.ts} +254 -396
  58. package/dist/fhe-airdrop/abis/compliance.d.ts +422 -0
  59. package/dist/fhe-airdrop/abis/ecdsa.d.ts +1316 -0
  60. package/dist/fhe-airdrop/abis/factory.d.ts +1319 -190
  61. package/dist/fhe-airdrop/abis/index.d.ts +5 -2
  62. package/dist/fhe-airdrop/abis/merkle.d.ts +1238 -0
  63. package/dist/fhe-airdrop/advanced/index.cjs +10 -12
  64. package/dist/fhe-airdrop/advanced/index.d.cts +34 -11
  65. package/dist/fhe-airdrop/advanced/index.d.ts +34 -11
  66. package/dist/fhe-airdrop/advanced/index.js +2 -8
  67. package/dist/fhe-airdrop/advanced/react/index.cjs +34 -48
  68. package/dist/fhe-airdrop/advanced/react/index.d.cts +9 -3
  69. package/dist/fhe-airdrop/advanced/react/index.d.ts +9 -3
  70. package/dist/fhe-airdrop/advanced/react/index.js +33 -48
  71. package/dist/fhe-airdrop/advanced/react/usePredictEcdsaAirdropAddress.d.ts +33 -0
  72. package/dist/fhe-airdrop/advanced/react/usePredictMerkleAirdropAddress.d.ts +27 -0
  73. package/dist/fhe-airdrop/airdrop-base.d.ts +600 -0
  74. package/dist/fhe-airdrop/campaign.d.ts +297 -0
  75. package/dist/fhe-airdrop/compliance.d.ts +302 -0
  76. package/dist/fhe-airdrop/constants.d.ts +33 -0
  77. package/dist/fhe-airdrop/ecdsa.d.ts +263 -0
  78. package/dist/fhe-airdrop/encryption.d.ts +92 -14
  79. package/dist/fhe-airdrop/errors.d.ts +245 -15
  80. package/dist/fhe-airdrop/factory.d.ts +533 -274
  81. package/dist/fhe-airdrop/guards.d.ts +273 -0
  82. package/dist/fhe-airdrop/index.cjs +1089 -33
  83. package/dist/fhe-airdrop/index.d.cts +46 -8
  84. package/dist/fhe-airdrop/index.d.ts +46 -8
  85. package/dist/fhe-airdrop/index.js +929 -7
  86. package/dist/fhe-airdrop/merkle-tree.d.ts +103 -0
  87. package/dist/fhe-airdrop/merkle.d.ts +180 -0
  88. package/dist/fhe-airdrop/react/_shared.d.ts +144 -71
  89. package/dist/fhe-airdrop/react/index.cjs +364 -413
  90. package/dist/fhe-airdrop/react/index.d.cts +53 -72
  91. package/dist/fhe-airdrop/react/index.d.ts +53 -72
  92. package/dist/fhe-airdrop/react/index.js +258 -369
  93. package/dist/fhe-airdrop/react/useAirdropGasFee.d.ts +10 -5
  94. package/dist/fhe-airdrop/react/useAirdropHasRole.d.ts +15 -6
  95. package/dist/fhe-airdrop/react/useAirdropPause.d.ts +30 -0
  96. package/dist/fhe-airdrop/react/useAirdropPaused.d.ts +17 -0
  97. package/dist/fhe-airdrop/react/useAirdropToken.d.ts +11 -4
  98. package/dist/fhe-airdrop/react/useAirdropWindow.d.ts +37 -0
  99. package/dist/fhe-airdrop/react/useClaimedAmount.d.ts +29 -0
  100. package/dist/fhe-airdrop/react/useComplianceManager.d.ts +16 -0
  101. package/dist/fhe-airdrop/react/useCreateEcdsaAirdrop.d.ts +28 -0
  102. package/dist/fhe-airdrop/react/useCreateMerkleAirdrop.d.ts +25 -0
  103. package/dist/fhe-airdrop/react/useEcdsaClaim.d.ts +23 -0
  104. package/dist/fhe-airdrop/react/useEffectiveUpgradeable.d.ts +20 -0
  105. package/dist/fhe-airdrop/react/useExtendClaimWindow.d.ts +17 -12
  106. package/dist/fhe-airdrop/react/useFactoryFees.d.ts +28 -0
  107. package/dist/fhe-airdrop/react/useFactoryRegistry.d.ts +35 -0
  108. package/dist/fhe-airdrop/react/useFundAirdrop.d.ts +35 -0
  109. package/dist/fhe-airdrop/react/useGrantInstanceRoles.d.ts +35 -0
  110. package/dist/fhe-airdrop/react/useMerkleClaim.d.ts +34 -0
  111. package/dist/fhe-airdrop/react/useMerkleRoot.d.ts +15 -0
  112. package/dist/fhe-airdrop/react/useSetMerkleRoot.d.ts +22 -0
  113. package/dist/fhe-airdrop/react/useWithdrawConfidential.d.ts +23 -0
  114. package/dist/fhe-airdrop/roles.d.ts +147 -0
  115. package/dist/fhe-airdrop/types.d.ts +68 -55
  116. package/dist/fhe-disperse/errors.d.ts +55 -0
  117. package/dist/fhe-disperse/index.cjs +34 -25
  118. package/dist/fhe-disperse/index.d.cts +1 -1
  119. package/dist/fhe-disperse/index.d.ts +1 -1
  120. package/dist/fhe-disperse/index.js +6 -5
  121. package/dist/fhe-disperse/react/index.cjs +42 -23
  122. package/dist/fhe-disperse/react/index.d.cts +3 -1
  123. package/dist/fhe-disperse/react/index.d.ts +3 -1
  124. package/dist/fhe-disperse/react/index.js +9 -6
  125. package/dist/fhe-vesting/advanced/index.cjs +8 -7
  126. package/dist/fhe-vesting/advanced/index.js +6 -5
  127. package/dist/fhe-vesting/advanced/react/index.cjs +12 -11
  128. package/dist/fhe-vesting/advanced/react/index.js +9 -8
  129. package/dist/fhe-vesting/index.cjs +35 -34
  130. package/dist/fhe-vesting/index.js +7 -6
  131. package/dist/fhe-vesting/manager.d.ts +19 -0
  132. package/dist/fhe-vesting/react/index.cjs +160 -140
  133. package/dist/fhe-vesting/react/index.d.cts +6 -4
  134. package/dist/fhe-vesting/react/index.d.ts +6 -4
  135. package/dist/fhe-vesting/react/index.js +24 -16
  136. package/dist/fhe-vesting/react/useAccessClaimableAmount.d.ts +11 -3
  137. package/dist/fhe-vesting/react/useAccessSettledAmount.d.ts +11 -3
  138. package/dist/fhe-vesting/react/useAccessTotalAllocation.d.ts +11 -3
  139. package/dist/fhe-vesting/react/useAccessVestedAmount.d.ts +11 -3
  140. package/dist/fhe-vesting/react/useAdminGetClaimableAmount.d.ts +1 -1
  141. package/dist/fhe-vesting/react/useAdminGetSettledAmount.d.ts +1 -1
  142. package/dist/fhe-vesting/react/useAdminGetTotalAllocation.d.ts +1 -1
  143. package/dist/fhe-vesting/react/useAdminGetVestedAmount.d.ts +1 -1
  144. package/dist/fhe-vesting/react/useAdminPartialClaim.d.ts +8 -0
  145. package/dist/fhe-vesting/react/useClaim.d.ts +1 -1
  146. package/dist/fhe-vesting/react/useDiscloseHandleToParty.d.ts +1 -1
  147. package/dist/fhe-vesting/react/useManagerDiscloseHandleToParty.d.ts +1 -1
  148. package/dist/fhe-vesting/react/usePartialClaim.d.ts +1 -1
  149. package/dist/fhe-vesting/react/useVestingInfo.d.ts +1 -1
  150. package/dist/fhe-vesting/types.d.ts +12 -1
  151. package/dist/index.cjs +27 -15
  152. package/dist/index.js +1 -1
  153. package/dist/testnet-faucet/index.cjs +17 -16
  154. package/dist/testnet-faucet/index.js +5 -4
  155. package/dist/testnet-faucet/react/index.cjs +11 -10
  156. package/dist/testnet-faucet/react/index.js +6 -5
  157. package/package.json +18 -9
  158. package/dist/chunk-4WPGQSNT.cjs +0 -44
  159. package/dist/chunk-6R4KNAPK.js +0 -1630
  160. package/dist/chunk-DUZIIRPF.js +0 -1655
  161. package/dist/chunk-MCRBVJGZ.cjs +0 -1637
  162. package/dist/chunk-ODLTEGHB.js +0 -41
  163. package/dist/chunk-ORFTDNFZ.js +0 -105
  164. package/dist/chunk-T46YXSBP.cjs +0 -109
  165. package/dist/chunk-TIUKIY5V.cjs +0 -1663
  166. package/dist/fhe-airdrop/advanced/factory-advanced.d.ts +0 -53
  167. package/dist/fhe-airdrop/advanced/react/usePredictAirdropAddress.d.ts +0 -49
  168. package/dist/fhe-airdrop/airdrop.d.ts +0 -310
  169. package/dist/fhe-airdrop/react/useAccessClaimAmount.d.ts +0 -31
  170. package/dist/fhe-airdrop/react/useAirdropCanExtendClaimWindow.d.ts +0 -7
  171. package/dist/fhe-airdrop/react/useAirdropClaim.d.ts +0 -27
  172. package/dist/fhe-airdrop/react/useAirdropClaimTypehash.d.ts +0 -10
  173. package/dist/fhe-airdrop/react/useAirdropClaimedSignatures.d.ts +0 -16
  174. package/dist/fhe-airdrop/react/useAirdropDeploymentBlockNumber.d.ts +0 -6
  175. package/dist/fhe-airdrop/react/useAirdropDomainSeparator.d.ts +0 -8
  176. package/dist/fhe-airdrop/react/useAirdropEndTime.d.ts +0 -10
  177. package/dist/fhe-airdrop/react/useAirdropFactoryCustomFee.d.ts +0 -17
  178. package/dist/fhe-airdrop/react/useAirdropFactoryDefaultGasFee.d.ts +0 -10
  179. package/dist/fhe-airdrop/react/useAirdropFactoryDisableCustomFee.d.ts +0 -15
  180. package/dist/fhe-airdrop/react/useAirdropFactoryFeeCollector.d.ts +0 -11
  181. package/dist/fhe-airdrop/react/useAirdropFactoryInitCodeHash.d.ts +0 -17
  182. package/dist/fhe-airdrop/react/useAirdropFactorySetCustomFee.d.ts +0 -17
  183. package/dist/fhe-airdrop/react/useAirdropFactorySetDefaultGasFee.d.ts +0 -16
  184. package/dist/fhe-airdrop/react/useAirdropFactorySetFeeCollector.d.ts +0 -15
  185. package/dist/fhe-airdrop/react/useAirdropGrantRole.d.ts +0 -16
  186. package/dist/fhe-airdrop/react/useAirdropHasClaimEnded.d.ts +0 -7
  187. package/dist/fhe-airdrop/react/useAirdropHasClaimStarted.d.ts +0 -7
  188. package/dist/fhe-airdrop/react/useAirdropIsClaimWindowActive.d.ts +0 -9
  189. package/dist/fhe-airdrop/react/useAirdropIsPaused.d.ts +0 -8
  190. package/dist/fhe-airdrop/react/useAirdropIsSignatureClaimed.d.ts +0 -22
  191. package/dist/fhe-airdrop/react/useAirdropIsSignatureValid.d.ts +0 -51
  192. package/dist/fhe-airdrop/react/useAirdropRevokeRole.d.ts +0 -15
  193. package/dist/fhe-airdrop/react/useAirdropStartTime.d.ts +0 -10
  194. package/dist/fhe-airdrop/react/useAirdropWithdrawGasFee.d.ts +0 -15
  195. package/dist/fhe-airdrop/react/useAirdropWithdrawOtherConfidentialToken.d.ts +0 -14
  196. package/dist/fhe-airdrop/react/useAirdropWithdrawOtherToken.d.ts +0 -14
  197. package/dist/fhe-airdrop/react/useClaim.d.ts +0 -31
  198. package/dist/fhe-airdrop/react/useConfidentialAirdropFactoryImplementation.d.ts +0 -11
  199. package/dist/fhe-airdrop/react/useCreateAndFundConfidentialAirdrop.d.ts +0 -41
  200. package/dist/fhe-airdrop/react/useCreateAndFundConfidentialAirdropAndGetAddress.d.ts +0 -48
  201. package/dist/fhe-airdrop/react/useCreateConfidentialAirdrop.d.ts +0 -29
  202. package/dist/fhe-airdrop/react/useCreateConfidentialAirdropAndGetAddress.d.ts +0 -31
  203. package/dist/fhe-airdrop/react/useDisableCustomFee.d.ts +0 -14
  204. package/dist/fhe-airdrop/react/useFactoryCustomFee.d.ts +0 -17
  205. package/dist/fhe-airdrop/react/useFactoryDefaultGasFee.d.ts +0 -10
  206. package/dist/fhe-airdrop/react/useFactoryFeeCollector.d.ts +0 -11
  207. package/dist/fhe-airdrop/react/useFactoryInitCodeHash.d.ts +0 -17
  208. package/dist/fhe-airdrop/react/useFundConfidentialAirdrop.d.ts +0 -33
  209. package/dist/fhe-airdrop/react/useGetClaimAmount.d.ts +0 -30
  210. package/dist/fhe-airdrop/react/usePreflightCreateAirdrop.d.ts +0 -51
  211. package/dist/fhe-airdrop/react/useSetCustomFee.d.ts +0 -16
  212. package/dist/fhe-airdrop/react/useSetDefaultGasFee.d.ts +0 -15
  213. package/dist/fhe-airdrop/react/useSetFeeCollector.d.ts +0 -14
  214. package/dist/fhe-airdrop/react/useSetPaused.d.ts +0 -14
  215. package/dist/fhe-airdrop/react/useSignClaimAuthorization.d.ts +0 -31
  216. package/dist/fhe-airdrop/react/useWithdraw.d.ts +0 -12
  217. package/dist/fhe-airdrop/react/useWithdrawOtherConfidentialToken.d.ts +0 -13
  218. package/dist/fhe-airdrop/react/useWithdrawOtherToken.d.ts +0 -13
  219. package/dist/fhe-vesting/react/useGetClaimableAmount.d.ts +0 -13
  220. package/dist/fhe-vesting/react/useGetSettledAmount.d.ts +0 -14
  221. package/dist/fhe-vesting/react/useGetTotalAllocation.d.ts +0 -13
  222. package/dist/fhe-vesting/react/useGetVestedAmount.d.ts +0 -25
@@ -0,0 +1,608 @@
1
+ 'use strict';
2
+
3
+ var chunkMVDQMV25_cjs = require('./chunk-MVDQMV25.cjs');
4
+ var chunk67OV5CX2_cjs = require('./chunk-67OV5CX2.cjs');
5
+ var viem = require('viem');
6
+
7
+ // src/fhe-airdrop/constants.ts
8
+ var AIRDROP_CONTRACTS_COMMIT = "8e5b144bdbcdf35b9f36b62f5257d795bf954e8e";
9
+ var DEPLOYMENT_MODE = { clone: 0, uups: 1 };
10
+ var DEDUP_MODE = { perAddress: 0, perDedupId: 1, both: 2, none: 3 };
11
+
12
+ // src/fhe-airdrop/errors.ts
13
+ var MerkleUupsUnsupportedError = class extends chunk67OV5CX2_cjs.TokenOpsSdkError {
14
+ name = "MerkleUupsUnsupportedError";
15
+ constructor(options) {
16
+ super(
17
+ 'Merkle campaigns cannot use `mode: "uups"`: the per-account `claimedAmount` mapping occupies an ERC-7201 namespaced slot that an earlier revision typed differently, so an in-place upgrade across that change reinterprets existing storage and can re-open claims that were already settled. Use `mode: "clone"`.',
18
+ {
19
+ code: "TOKENOPS_MERKLE_UUPS_UNSUPPORTED",
20
+ cause: options?.cause,
21
+ context: { constraint: "merkle-uups-storage-retype" }
22
+ }
23
+ );
24
+ }
25
+ };
26
+ var NonStockWrapperError = class extends chunk67OV5CX2_cjs.TokenOpsSdkError {
27
+ name = "NonStockWrapperError";
28
+ constructor(args) {
29
+ const detail = args?.token ? ` (token: ${args.token})` : "";
30
+ super(
31
+ `\`claimAndUnwrap\` is only exact for a stock ERC7984ERC20Wrapper${detail}: it burns from the airdrop instance's pooled wrapper balance, not from a per-claimant sub-balance, so the delivered amount is bounded by the pool's balance rather than by the claimant's own outstanding amount. A hooked or fee-taking wrapper can throw that accounting off, so a claimant can be credited against tokens that are not theirs.`,
32
+ {
33
+ code: "TOKENOPS_NON_STOCK_WRAPPER",
34
+ cause: args?.cause,
35
+ context: { constraint: "wrapper-unwrap-pool-bound", token: args?.token }
36
+ }
37
+ );
38
+ }
39
+ };
40
+ var SaltCollisionError = class extends chunk67OV5CX2_cjs.TokenOpsSdkError {
41
+ name = "SaltCollisionError";
42
+ constructor(args) {
43
+ super(
44
+ `${args.method}: the predicted address ${args.predictedAddress} already holds code. A ${args.variant} instance address commits only to (implementation, mode, deployer, userSalt) - the params struct is ignored - so this (mode, deployer, userSalt) tuple has already been deployed. Pick a fresh \`userSalt\` for each campaign.`,
45
+ {
46
+ code: "TOKENOPS_SALT_COLLISION",
47
+ cause: args.cause,
48
+ context: {
49
+ method: args.method,
50
+ variant: args.variant,
51
+ mode: args.mode,
52
+ deployer: args.deployer,
53
+ userSalt: args.userSalt,
54
+ predictedAddress: args.predictedAddress
55
+ }
56
+ }
57
+ );
58
+ }
59
+ };
60
+ var PredictionDriftError = class extends chunk67OV5CX2_cjs.TokenOpsSdkError {
61
+ name = "PredictionDriftError";
62
+ constructor(args) {
63
+ const where = args.predictedAddress ? ` ${args.predictedAddress}` : "";
64
+ super(
65
+ `${args.method}: the factory's ${args.variant} init-code hash changed from ${args.initCodeHashBefore} to ${args.initCodeHashAfter} mid-flight. An implementation rotation landed while the prediction was in use, so the predicted address${where} is stale and anything bound to it (a Merkle campaign's ciphertexts above all) will not match the instance the create produces. Re-predict and rebuild.`,
66
+ {
67
+ code: "TOKENOPS_PREDICTION_DRIFT",
68
+ cause: args.cause,
69
+ context: {
70
+ method: args.method,
71
+ variant: args.variant,
72
+ initCodeHashBefore: args.initCodeHashBefore,
73
+ initCodeHashAfter: args.initCodeHashAfter,
74
+ predictedAddress: args.predictedAddress
75
+ }
76
+ }
77
+ );
78
+ }
79
+ };
80
+ var UpgradeabilityNotAllowedError = class extends chunk67OV5CX2_cjs.TokenOpsSdkError {
81
+ name = "UpgradeabilityNotAllowedError";
82
+ constructor(args) {
83
+ const label = args.method ? `${args.method}: ` : "";
84
+ const who = args.creator ? ` for creator ${args.creator}` : "";
85
+ super(
86
+ `${label}\`mode: "uups"\` is not permitted${who} \u2014 call \`setDefaultUpgradeable(true)\` or \`setUpgradeabilityPolicy(creator, true)\` (UPGRADE_MANAGER_ROLE), or use \`mode: "clone"\`.`,
87
+ {
88
+ code: "TOKENOPS_UPGRADEABILITY_NOT_ALLOWED",
89
+ cause: args.cause,
90
+ context: {
91
+ method: args.method,
92
+ contractAddress: args.contractAddress,
93
+ creator: args.creator
94
+ }
95
+ }
96
+ );
97
+ }
98
+ };
99
+ var FeeCollectorSelfAdministeredError = class extends chunk67OV5CX2_cjs.TokenOpsSdkError {
100
+ name = "FeeCollectorSelfAdministeredError";
101
+ constructor(args) {
102
+ super(
103
+ "FEE_COLLECTOR_ROLE is self-administered (its own role admin, not DEFAULT_ADMIN_ROLE) \u2014 grantInstanceRoles cannot grant it from the caller's admin role. Have an existing FEE_COLLECTOR_ROLE holder call `grantRole` directly.",
104
+ {
105
+ code: "TOKENOPS_FEE_COLLECTOR_SELF_ADMINISTERED",
106
+ cause: args?.cause,
107
+ context: { requestedGrantee: args?.requestedGrantee }
108
+ }
109
+ );
110
+ }
111
+ };
112
+ var DedupIdConsumedError = class extends chunk67OV5CX2_cjs.TokenOpsSdkError {
113
+ name = "DedupIdConsumedError";
114
+ constructor(args) {
115
+ const which = args.dedupId ? ` ${args.dedupId}` : "";
116
+ super(`${args.method}: dedupId${which} has already been claimed.`, {
117
+ code: "TOKENOPS_DEDUP_ID_CONSUMED",
118
+ cause: args.cause,
119
+ context: {
120
+ method: args.method,
121
+ contractAddress: args.contractAddress,
122
+ dedupId: args.dedupId
123
+ }
124
+ });
125
+ }
126
+ };
127
+ var AlreadyClaimedError = class extends chunk67OV5CX2_cjs.TokenOpsSdkError {
128
+ name = "AlreadyClaimedError";
129
+ constructor(args) {
130
+ super(`${args.method}: already claimed (${args.replayGuard} replay guard).`, {
131
+ code: "TOKENOPS_ALREADY_CLAIMED",
132
+ cause: args.cause,
133
+ context: {
134
+ method: args.method,
135
+ contractAddress: args.contractAddress,
136
+ replayGuard: args.replayGuard
137
+ }
138
+ });
139
+ }
140
+ };
141
+ var ClaimNotStartedError = class extends chunk67OV5CX2_cjs.TokenOpsSdkError {
142
+ name = "ClaimNotStartedError";
143
+ constructor(args) {
144
+ const detail = args.startTime !== void 0 ? ` Opens at unix timestamp ${args.startTime}.` : "";
145
+ super(`${args.method}: the claim window has not opened yet.${detail}`, {
146
+ code: "TOKENOPS_CLAIM_NOT_STARTED",
147
+ cause: args.cause,
148
+ context: {
149
+ method: args.method,
150
+ contractAddress: args.contractAddress,
151
+ startTime: args.startTime,
152
+ currentTime: args.currentTime
153
+ }
154
+ });
155
+ }
156
+ };
157
+ var SignatureExpiredError = class extends chunk67OV5CX2_cjs.TokenOpsSdkError {
158
+ name = "SignatureExpiredError";
159
+ constructor(args) {
160
+ const detail = args.deadline !== void 0 && args.currentTime !== void 0 ? ` The signature's deadline (unix timestamp ${args.deadline}) has passed; current time is ${args.currentTime}.` : "";
161
+ super(`${args.method}: signature has expired.${detail} Re-sign with a later deadline.`, {
162
+ code: "TOKENOPS_SIGNATURE_EXPIRED",
163
+ cause: args.cause,
164
+ context: {
165
+ method: args.method,
166
+ contractAddress: args.contractAddress,
167
+ deadline: args.deadline,
168
+ currentTime: args.currentTime
169
+ }
170
+ });
171
+ }
172
+ };
173
+ var ClaimWindowClosedError = class extends chunk67OV5CX2_cjs.TokenOpsSdkError {
174
+ name = "ClaimWindowClosedError";
175
+ constructor(args) {
176
+ const detail = args.endTime !== void 0 ? ` Closed at unix timestamp ${args.endTime}.` : "";
177
+ super(`${args.method}: the claim window has closed.${detail}`, {
178
+ code: "TOKENOPS_CLAIM_WINDOW_CLOSED",
179
+ cause: args.cause,
180
+ context: {
181
+ method: args.method,
182
+ contractAddress: args.contractAddress,
183
+ endTime: args.endTime,
184
+ currentTime: args.currentTime
185
+ }
186
+ });
187
+ }
188
+ };
189
+ var airdropProductMapper = (name, errArgs, ctx) => {
190
+ switch (name) {
191
+ // ---- guarded conditions, caught on-chain instead of pre-flight -------
192
+ case "TokenNotAWrapper": {
193
+ const token = ctx.productContext?.["token"];
194
+ return new NonStockWrapperError({ token });
195
+ }
196
+ case "UpgradeabilityNotAllowed": {
197
+ const creator = ctx.productContext?.["creator"];
198
+ return new UpgradeabilityNotAllowedError({ ...ctx, creator });
199
+ }
200
+ // ---- claim lifecycle --------------------------------------------------
201
+ case "ClaimNotStarted": {
202
+ const startTime = numberArg(errArgs?.[0]);
203
+ const currentTime = numberArg(errArgs?.[1]);
204
+ return new ClaimNotStartedError({ ...ctx, startTime, currentTime });
205
+ }
206
+ case "ClaimWindowFinished": {
207
+ const endTime = numberArg(errArgs?.[0]);
208
+ const currentTime = numberArg(errArgs?.[1]);
209
+ return new ClaimWindowClosedError({ ...ctx, endTime, currentTime });
210
+ }
211
+ case "AddressAlreadyClaimed":
212
+ return new AlreadyClaimedError({ ...ctx, replayGuard: "address" });
213
+ case "SignatureAlreadyUsed":
214
+ return new AlreadyClaimedError({ ...ctx, replayGuard: "signature" });
215
+ case "DedupIdAlreadyClaimed": {
216
+ const dedupId = ctx.productContext?.["dedupId"];
217
+ return new DedupIdConsumedError({ ...ctx, dedupId });
218
+ }
219
+ case "InsufficientFee": {
220
+ const provided = errArgs?.[0];
221
+ const required = errArgs?.[1];
222
+ return new chunk67OV5CX2_cjs.InsufficientFeeError({ ...ctx, feeKind: "gas", provided, required });
223
+ }
224
+ case "InsufficientFeeBalance": {
225
+ const requested = errArgs?.[0];
226
+ const available = errArgs?.[1];
227
+ return new chunk67OV5CX2_cjs.InsufficientBalanceError({ ...ctx, balanceKind: "eth", requested, available });
228
+ }
229
+ case "EthTransferFailed":
230
+ return new chunk67OV5CX2_cjs.TransferFailedError({ ...ctx, asset: "eth" });
231
+ case "HandleNotAllowed": {
232
+ const handle = errArgs?.[0];
233
+ return new chunk67OV5CX2_cjs.FheHandleNotAllowedError({ ...ctx, handle });
234
+ }
235
+ // ---- Merkle-specific ----------------------------------------------
236
+ case "InvalidMerkleProof":
237
+ return new chunk67OV5CX2_cjs.InvalidArgumentError({
238
+ method: ctx.method,
239
+ argument: "merkleProof",
240
+ reason: "the contract reverted with `InvalidMerkleProof` \u2014 the proof does not verify against the current on-chain root. If the root was recently rotated, rebuild the proof against the new root."
241
+ });
242
+ case "RootImmutable":
243
+ return new chunk67OV5CX2_cjs.FeatureDisabledError({ ...ctx, feature: "merkleRootRotation" });
244
+ // ---- FHEVM chain config ---------------------------------------------
245
+ case "ZamaProtocolUnsupported": {
246
+ const chainId = ctx.productContext?.["chainId"] ?? 0;
247
+ return new chunk67OV5CX2_cjs.UnsupportedChainError(chainId);
248
+ }
249
+ // ---- ECDSA-specific signature reverts --------------------------------
250
+ case "SignatureExpired": {
251
+ const deadline = errArgs?.[0];
252
+ const currentTime = errArgs?.[1];
253
+ return new SignatureExpiredError({ ...ctx, deadline, currentTime });
254
+ }
255
+ // ---- argument-validation bucket: reverts not already covered by the
256
+ // cross-product default mapper's `Zero*`/`Invalid*` list ---------------
257
+ case "ZeroToken":
258
+ return invalidArg(ctx, "token", name);
259
+ case "ZeroFeeCollector":
260
+ return invalidArg(
261
+ ctx,
262
+ "feeCollector",
263
+ name,
264
+ "validates the factory-injected fee-collector init parameter"
265
+ );
266
+ case "ZeroComplianceManager":
267
+ return invalidArg(ctx, "complianceManager", name);
268
+ case "ZeroRecipient":
269
+ return invalidArg(ctx, "recipient", name);
270
+ case "ZeroAdminGrant":
271
+ return invalidArg(
272
+ ctx,
273
+ "admin",
274
+ name,
275
+ "granting DEFAULT_ADMIN_ROLE to the zero address is never valid"
276
+ );
277
+ case "ZeroFeeCollectorGrant":
278
+ return invalidArg(
279
+ ctx,
280
+ "feeCollector",
281
+ name,
282
+ "granting FEE_COLLECTOR_ROLE to the zero address is never valid on a fee-charging campaign"
283
+ );
284
+ case "LastAdmin":
285
+ return invalidArg(
286
+ ctx,
287
+ "admin",
288
+ name,
289
+ "revoking or renouncing the sole DEFAULT_ADMIN_ROLE member would leave the instance permanently ungovernable"
290
+ );
291
+ case "LastFeeCollector":
292
+ return invalidArg(
293
+ ctx,
294
+ "feeCollector",
295
+ name,
296
+ "revoking the sole FEE_COLLECTOR_ROLE member would strand accrued claim-fee ETH on a fee-charging campaign"
297
+ );
298
+ case "CannotRescueAirdropToken":
299
+ return invalidArg(ctx, "token", name, "the rescue target cannot be the airdrop's own token");
300
+ case "TokenNotUnwrappable":
301
+ return new chunk67OV5CX2_cjs.FeatureDisabledError({ ...ctx, feature: "claimAndUnwrap" });
302
+ case "ZeroAdmin":
303
+ return invalidArg(ctx, "admin", name);
304
+ case "ZeroImplementation":
305
+ return invalidArg(ctx, "implementation", name);
306
+ case "ZeroComplianceManagerImpl":
307
+ return invalidArg(ctx, "complianceManagerImpl", name);
308
+ case "ZeroComplianceDelegate":
309
+ return invalidArg(
310
+ ctx,
311
+ "complianceDelegate",
312
+ name,
313
+ "required while the default compliance-delegate policy is on"
314
+ );
315
+ case "IndexOutOfBounds": {
316
+ const index = errArgs?.[0];
317
+ const count = errArgs?.[1];
318
+ return invalidArg(
319
+ ctx,
320
+ "index",
321
+ name,
322
+ `requested index ${index?.toString() ?? "?"}, but only ${count?.toString() ?? "?"} airdrops exist`
323
+ );
324
+ }
325
+ case "UnknownAirdrop":
326
+ return invalidArg(ctx, "airdrop", name, "was not created by this factory");
327
+ case "SaltAlreadyUsed": {
328
+ const existingAirdrop = errArgs?.[0];
329
+ return new chunk67OV5CX2_cjs.InvalidArgumentError({
330
+ method: ctx.method,
331
+ argument: "userSalt",
332
+ reason: `this (creator, mode, userSalt) tuple already predicts an existing instance${existingAirdrop ? ` at ${existingAirdrop}` : ""}.`,
333
+ value: existingAirdrop
334
+ });
335
+ }
336
+ case "ZeroSigner":
337
+ return invalidArg(ctx, "signer", name);
338
+ case "ZeroMerkleRoot":
339
+ return invalidArg(
340
+ ctx,
341
+ "merkleRoot",
342
+ name,
343
+ "a zero root is only permitted when `isMerkleRootMutable` is true"
344
+ );
345
+ // ---- compliance manager clone (`ComplianceRoleManager`) --------------
346
+ case "ZeroAirdrop":
347
+ return invalidArg(ctx, "airdrop", name);
348
+ case "ZeroClientAdmin":
349
+ return invalidArg(ctx, "clientAdmin", name);
350
+ case "ZeroDelegate":
351
+ return invalidArg(ctx, "delegate", name);
352
+ case "AirdropAndManagerAreSameAddress":
353
+ return invalidArg(
354
+ ctx,
355
+ "airdrop",
356
+ name,
357
+ "cannot equal this compliance manager clone's own address"
358
+ );
359
+ case "DelegateAndManagerAreSameAddress":
360
+ return invalidArg(
361
+ ctx,
362
+ "delegate",
363
+ name,
364
+ "cannot equal this compliance manager clone's own address"
365
+ );
366
+ case "DelegateAndAirdropAreSameAddress":
367
+ return invalidArg(ctx, "delegate", name, "cannot equal the airdrop instance's address");
368
+ case "DelegateAlreadyAdded":
369
+ return invalidArg(ctx, "delegate", name, "already an active client delegate");
370
+ case "DelegateNotFound":
371
+ return invalidArg(ctx, "delegate", name, "not an active client delegate");
372
+ case "CannotManageComplianceDelegate":
373
+ return invalidArg(
374
+ ctx,
375
+ "delegate",
376
+ name,
377
+ "targets the factory-designated platform compliance delegate, which cannot be managed this way"
378
+ );
379
+ default:
380
+ return void 0;
381
+ }
382
+ };
383
+ function invalidArg(ctx, argument, revertName, detail) {
384
+ const suffix = detail ? ` ${detail}.` : "";
385
+ return new chunk67OV5CX2_cjs.InvalidArgumentError({
386
+ method: ctx.method,
387
+ argument,
388
+ reason: `the contract reverted with \`${revertName}\`.${suffix}`
389
+ });
390
+ }
391
+ function numberArg(value) {
392
+ return typeof value === "bigint" ? Number(value) : void 0;
393
+ }
394
+ var SUPPORTED_CHAIN_IDS = [1, 11155111, 31337];
395
+ function assertSupportedChain(chainId) {
396
+ if (!SUPPORTED_CHAIN_IDS.includes(chainId)) {
397
+ throw new chunk67OV5CX2_cjs.UnsupportedChainError(chainId);
398
+ }
399
+ }
400
+ function assertMerkleModeSupported(mode) {
401
+ if (mode === "uups") {
402
+ throw new MerkleUupsUnsupportedError();
403
+ }
404
+ }
405
+ var WRAPPER_PROBE_ABI = [
406
+ {
407
+ inputs: [],
408
+ name: "underlying",
409
+ outputs: [{ internalType: "address", name: "", type: "address" }],
410
+ stateMutability: "view",
411
+ type: "function"
412
+ }
413
+ ];
414
+ function isProbeAnswer(error) {
415
+ if (chunkMVDQMV25_cjs.isContractRevert(error)) return true;
416
+ if (!(error instanceof viem.BaseError)) return false;
417
+ return error.walk((e) => e instanceof viem.ContractFunctionZeroDataError) !== null;
418
+ }
419
+ async function assertStockWrapper(args) {
420
+ if (!args.unwrappable) return;
421
+ let underlying;
422
+ try {
423
+ underlying = await args.publicClient.readContract({
424
+ address: args.token,
425
+ abi: WRAPPER_PROBE_ABI,
426
+ functionName: "underlying"
427
+ });
428
+ } catch (cause) {
429
+ if (!isProbeAnswer(cause)) throw cause;
430
+ throw new NonStockWrapperError({ token: args.token, cause });
431
+ }
432
+ if (viem.isAddressEqual(underlying, viem.zeroAddress)) {
433
+ throw new NonStockWrapperError({ token: args.token });
434
+ }
435
+ }
436
+ async function assertSaltAvailable(args) {
437
+ const code = await args.publicClient.getCode({ address: args.predictedAddress });
438
+ if (code === void 0 || code === "0x") return;
439
+ throw new SaltCollisionError({
440
+ method: args.method,
441
+ variant: args.variant,
442
+ mode: args.mode,
443
+ deployer: args.deployer,
444
+ userSalt: args.userSalt,
445
+ predictedAddress: args.predictedAddress
446
+ });
447
+ }
448
+ function assertPredictionFresh(args) {
449
+ if (args.initCodeHashBefore.toLowerCase() === args.initCodeHashAfter.toLowerCase()) return;
450
+ throw new PredictionDriftError({
451
+ method: args.method,
452
+ variant: args.variant,
453
+ initCodeHashBefore: args.initCodeHashBefore,
454
+ initCodeHashAfter: args.initCodeHashAfter,
455
+ predictedAddress: args.predictedAddress
456
+ });
457
+ }
458
+ async function preflightCreate(args) {
459
+ const method = args.variant === "merkle" ? "createMerkleAirdrop" : "createEcdsaAirdrop";
460
+ const blockers = [];
461
+ collect(blockers, () => assertSupportedChain(args.factory.chainId));
462
+ if (args.variant === "merkle") {
463
+ collect(blockers, () => assertMerkleModeSupported(args.mode));
464
+ }
465
+ const predictArgs = {
466
+ mode: args.mode,
467
+ deployer: args.creator,
468
+ userSalt: args.userSalt
469
+ };
470
+ const predictedAddress = args.variant === "merkle" ? await args.factory.predictMerkleAirdropAddress({ params: args.params, ...predictArgs }) : await args.factory.predictEcdsaAirdropAddress({ params: args.params, ...predictArgs });
471
+ const liveInitCodeHash = args.variant === "merkle" ? await args.factory.getMerkleInitCodeHash({ params: args.params, mode: args.mode }) : await args.factory.getEcdsaInitCodeHash({ params: args.params, mode: args.mode });
472
+ if (args.mode === "uups") {
473
+ const allowed = await args.factory.effectiveUpgradeable(args.creator);
474
+ if (!allowed) {
475
+ blockers.push(
476
+ new UpgradeabilityNotAllowedError({
477
+ method,
478
+ contractAddress: args.factory.address,
479
+ creator: args.creator
480
+ })
481
+ );
482
+ }
483
+ }
484
+ await collectAsync(
485
+ blockers,
486
+ () => assertStockWrapper({
487
+ publicClient: args.factory.publicClient,
488
+ token: args.params.common.token,
489
+ unwrappable: args.params.common.unwrappable
490
+ })
491
+ );
492
+ await collectAsync(
493
+ blockers,
494
+ () => assertSaltAvailable({
495
+ publicClient: args.factory.publicClient,
496
+ predictedAddress,
497
+ variant: args.variant,
498
+ mode: args.mode,
499
+ deployer: args.creator,
500
+ userSalt: args.userSalt,
501
+ method
502
+ })
503
+ );
504
+ if (args.expectedInitCodeHash !== void 0) {
505
+ collect(
506
+ blockers,
507
+ () => assertPredictionFresh({
508
+ variant: args.variant,
509
+ initCodeHashBefore: args.expectedInitCodeHash,
510
+ initCodeHashAfter: liveInitCodeHash,
511
+ predictedAddress,
512
+ method
513
+ })
514
+ );
515
+ }
516
+ return { ready: blockers.length === 0, blockers };
517
+ }
518
+ async function preflightClaim(args) {
519
+ const { airdrop, claimant } = args;
520
+ const method = "preflightClaim";
521
+ const blockers = [];
522
+ collect(blockers, () => assertSupportedChain(airdrop.chainId));
523
+ const [started, ended, paused, fee, balance] = await Promise.all([
524
+ airdrop.hasClaimStarted(),
525
+ airdrop.hasClaimEnded(),
526
+ airdrop.paused(),
527
+ airdrop.gasFee(),
528
+ airdrop.publicClient.getBalance({ address: claimant })
529
+ ]);
530
+ if (paused) {
531
+ blockers.push(new chunk67OV5CX2_cjs.PausedError({ method, contractAddress: airdrop.address }));
532
+ }
533
+ if (!started) {
534
+ blockers.push(
535
+ new ClaimNotStartedError({
536
+ method,
537
+ contractAddress: airdrop.address,
538
+ startTime: await airdrop.startTime()
539
+ })
540
+ );
541
+ }
542
+ if (ended) {
543
+ blockers.push(
544
+ new ClaimWindowClosedError({
545
+ method,
546
+ contractAddress: airdrop.address,
547
+ endTime: await airdrop.endTime()
548
+ })
549
+ );
550
+ }
551
+ if (balance < fee) {
552
+ blockers.push(
553
+ new chunk67OV5CX2_cjs.InsufficientFeeError({
554
+ method,
555
+ contractAddress: airdrop.address,
556
+ feeKind: "gas",
557
+ provided: balance,
558
+ required: fee
559
+ })
560
+ );
561
+ }
562
+ if (args.signature && airdrop.isSignatureValid) {
563
+ const valid = await airdrop.isSignatureValid({ recipient: claimant, ...args.signature });
564
+ if (!valid) {
565
+ blockers.push(new chunk67OV5CX2_cjs.InvalidSignatureError({ method, contractAddress: airdrop.address }));
566
+ }
567
+ }
568
+ return { ready: blockers.length === 0, blockers };
569
+ }
570
+ function collect(blockers, run) {
571
+ try {
572
+ run();
573
+ } catch (err) {
574
+ if (!chunk67OV5CX2_cjs.isTokenOpsSdkError(err)) throw err;
575
+ blockers.push(err);
576
+ }
577
+ }
578
+ async function collectAsync(blockers, run) {
579
+ try {
580
+ await run();
581
+ } catch (err) {
582
+ if (!chunk67OV5CX2_cjs.isTokenOpsSdkError(err)) throw err;
583
+ blockers.push(err);
584
+ }
585
+ }
586
+
587
+ exports.AIRDROP_CONTRACTS_COMMIT = AIRDROP_CONTRACTS_COMMIT;
588
+ exports.AlreadyClaimedError = AlreadyClaimedError;
589
+ exports.ClaimNotStartedError = ClaimNotStartedError;
590
+ exports.ClaimWindowClosedError = ClaimWindowClosedError;
591
+ exports.DEDUP_MODE = DEDUP_MODE;
592
+ exports.DEPLOYMENT_MODE = DEPLOYMENT_MODE;
593
+ exports.DedupIdConsumedError = DedupIdConsumedError;
594
+ exports.FeeCollectorSelfAdministeredError = FeeCollectorSelfAdministeredError;
595
+ exports.MerkleUupsUnsupportedError = MerkleUupsUnsupportedError;
596
+ exports.NonStockWrapperError = NonStockWrapperError;
597
+ exports.PredictionDriftError = PredictionDriftError;
598
+ exports.SaltCollisionError = SaltCollisionError;
599
+ exports.SignatureExpiredError = SignatureExpiredError;
600
+ exports.UpgradeabilityNotAllowedError = UpgradeabilityNotAllowedError;
601
+ exports.airdropProductMapper = airdropProductMapper;
602
+ exports.assertMerkleModeSupported = assertMerkleModeSupported;
603
+ exports.assertPredictionFresh = assertPredictionFresh;
604
+ exports.assertSaltAvailable = assertSaltAvailable;
605
+ exports.assertStockWrapper = assertStockWrapper;
606
+ exports.assertSupportedChain = assertSupportedChain;
607
+ exports.preflightClaim = preflightClaim;
608
+ exports.preflightCreate = preflightCreate;
@@ -3,8 +3,6 @@
3
3
  var chunk67OV5CX2_cjs = require('./chunk-67OV5CX2.cjs');
4
4
  var viem = require('viem');
5
5
 
6
- // src/core/version.ts
7
- var SDK_VERSION = "1.0.0";
8
6
  var ERC7984_ERRORS_ABI = [
9
7
  {
10
8
  type: "error",
@@ -380,6 +378,5 @@ function coerceRevertHex(value) {
380
378
  return void 0;
381
379
  }
382
380
 
383
- exports.SDK_VERSION = SDK_VERSION;
384
381
  exports.isContractRevert = isContractRevert;
385
382
  exports.mapContractRevert = mapContractRevert;