@tokenops/sdk 2.0.0-alpha.1 → 2.0.0-alpha.3

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 (155) hide show
  1. package/CHANGELOG.md +67 -2
  2. package/README.md +14 -8
  3. package/dist/{chunk-PUX5VXDB.cjs → chunk-4AWQJQXY.cjs} +1415 -69
  4. package/dist/{chunk-74QFZ5MK.js → chunk-4IB4IY5Y.js} +1 -1
  5. package/dist/{chunk-DZHYSUGY.js → chunk-6HCT4QIX.js} +12 -5
  6. package/dist/{chunk-FGEB7RMY.cjs → chunk-6XOAYDC6.cjs} +4 -4
  7. package/dist/{chunk-XAYGD4E4.cjs → chunk-AHU2HMNE.cjs} +3 -3
  8. package/dist/{chunk-6NAVMWZQ.js → chunk-BPIVVCSQ.js} +2 -2
  9. package/dist/{chunk-GKKDAW44.js → chunk-BXX5TETM.js} +1401 -59
  10. package/dist/{chunk-456VDDA3.js → chunk-GCJFAY4X.js} +78 -25
  11. package/dist/{chunk-CTED3MTR.cjs → chunk-GKYZQJGP.cjs} +82 -29
  12. package/dist/{chunk-JZLGCTGK.cjs → chunk-IEKTGJ4J.cjs} +2 -2
  13. package/dist/{chunk-6PXXGACR.cjs → chunk-JVNJSDQ4.cjs} +2 -2
  14. package/dist/{chunk-O5676ZWY.js → chunk-LEYYG4RF.js} +232 -6
  15. package/dist/{chunk-335Z2W67.js → chunk-NGU4JYIR.js} +1 -1
  16. package/dist/{chunk-5576FRT3.cjs → chunk-PG3WXT3K.cjs} +12 -5
  17. package/dist/{chunk-H5POPGOZ.js → chunk-PK6Q6J5F.js} +1 -1
  18. package/dist/chunk-TND5NDV7.cjs +263 -0
  19. package/dist/chunk-U3TBQRT7.js +253 -0
  20. package/dist/{chunk-EAJ7SYHE.js → chunk-WRWRA4TN.js} +1 -1
  21. package/dist/{chunk-JQYC66TO.cjs → chunk-YABHXJNH.cjs} +5 -5
  22. package/dist/{chunk-M4IT6DNJ.cjs → chunk-YTIYTV4K.cjs} +236 -4
  23. package/dist/core/addresses.d.ts +4 -4
  24. package/dist/core/errors.d.ts +1 -1
  25. package/dist/fhe/types.d.ts +2 -2
  26. package/dist/fhe-airdrop/abis/airdrop-base.d.ts +19 -0
  27. package/dist/fhe-airdrop/abis/ecdsa.d.ts +19 -0
  28. package/dist/fhe-airdrop/abis/factory.d.ts +113 -0
  29. package/dist/fhe-airdrop/abis/merkle.d.ts +43 -12
  30. package/dist/fhe-airdrop/advanced/index.cjs +4 -4
  31. package/dist/fhe-airdrop/advanced/index.js +1 -1
  32. package/dist/fhe-airdrop/advanced/react/index.cjs +620 -9
  33. package/dist/fhe-airdrop/advanced/react/index.d.cts +35 -0
  34. package/dist/fhe-airdrop/advanced/react/index.d.ts +35 -0
  35. package/dist/fhe-airdrop/advanced/react/index.js +590 -7
  36. package/dist/fhe-airdrop/advanced/react/useClearCompliancePolicy.d.ts +28 -0
  37. package/dist/fhe-airdrop/advanced/react/useClearUpgradeabilityPolicy.d.ts +26 -0
  38. package/dist/fhe-airdrop/advanced/react/useDisableCustomFee.d.ts +26 -0
  39. package/dist/fhe-airdrop/advanced/react/useEcdsaInitCodeHash.d.ts +30 -0
  40. package/dist/fhe-airdrop/advanced/react/useFactoryComplianceDelegate.d.ts +25 -0
  41. package/dist/fhe-airdrop/advanced/react/useFactoryCompliancePolicy.d.ts +38 -0
  42. package/dist/fhe-airdrop/advanced/react/useFactoryCustomFee.d.ts +24 -0
  43. package/dist/fhe-airdrop/advanced/react/useFactoryGrantRole.d.ts +32 -0
  44. package/dist/fhe-airdrop/advanced/react/useFactoryHasRole.d.ts +27 -0
  45. package/dist/fhe-airdrop/advanced/react/useFactoryImplementations.d.ts +33 -0
  46. package/dist/fhe-airdrop/advanced/react/useFactoryRenounceRole.d.ts +37 -0
  47. package/dist/fhe-airdrop/advanced/react/useFactoryRevokeRole.d.ts +37 -0
  48. package/dist/fhe-airdrop/advanced/react/useFactoryRoleConstants.d.ts +46 -0
  49. package/dist/fhe-airdrop/advanced/react/useFactoryRoleMembers.d.ts +48 -0
  50. package/dist/fhe-airdrop/advanced/react/useFactoryUpgradeabilityPolicy.d.ts +39 -0
  51. package/dist/fhe-airdrop/advanced/react/useMerkleInitCodeHash.d.ts +24 -0
  52. package/dist/fhe-airdrop/advanced/react/useSetComplianceDelegate.d.ts +33 -0
  53. package/dist/fhe-airdrop/advanced/react/useSetComplianceManagerImpl.d.ts +27 -0
  54. package/dist/fhe-airdrop/advanced/react/useSetCompliancePolicy.d.ts +28 -0
  55. package/dist/fhe-airdrop/advanced/react/useSetCustomFee.d.ts +29 -0
  56. package/dist/fhe-airdrop/advanced/react/useSetDefaultDelegateToCompliance.d.ts +31 -0
  57. package/dist/fhe-airdrop/advanced/react/useSetDefaultGasFee.d.ts +30 -0
  58. package/dist/fhe-airdrop/advanced/react/useSetDefaultUpgradeable.d.ts +27 -0
  59. package/dist/fhe-airdrop/advanced/react/useSetEcdsaImplementation.d.ts +34 -0
  60. package/dist/fhe-airdrop/advanced/react/useSetFeeCollector.d.ts +27 -0
  61. package/dist/fhe-airdrop/advanced/react/useSetMaxGasFee.d.ts +33 -0
  62. package/dist/fhe-airdrop/advanced/react/useSetMerkleImplementation.d.ts +30 -0
  63. package/dist/fhe-airdrop/advanced/react/useSetUpgradeabilityPolicy.d.ts +31 -0
  64. package/dist/fhe-airdrop/airdrop-base.d.ts +55 -8
  65. package/dist/fhe-airdrop/campaign.d.ts +61 -20
  66. package/dist/fhe-airdrop/constants.d.ts +9 -1
  67. package/dist/fhe-airdrop/ecdsa.d.ts +13 -0
  68. package/dist/fhe-airdrop/errors.d.ts +87 -0
  69. package/dist/fhe-airdrop/factory.d.ts +62 -22
  70. package/dist/fhe-airdrop/guards.d.ts +133 -4
  71. package/dist/fhe-airdrop/index.cjs +86 -971
  72. package/dist/fhe-airdrop/index.d.cts +4 -4
  73. package/dist/fhe-airdrop/index.d.ts +4 -4
  74. package/dist/fhe-airdrop/index.js +8 -927
  75. package/dist/fhe-airdrop/merkle-tree.d.ts +32 -38
  76. package/dist/fhe-airdrop/merkle.d.ts +52 -31
  77. package/dist/fhe-airdrop/react/_shared.d.ts +13 -0
  78. package/dist/fhe-airdrop/react/index.cjs +997 -87
  79. package/dist/fhe-airdrop/react/index.d.cts +53 -4
  80. package/dist/fhe-airdrop/react/index.d.ts +53 -4
  81. package/dist/fhe-airdrop/react/index.js +887 -27
  82. package/dist/fhe-airdrop/react/keys.d.ts +98 -0
  83. package/dist/fhe-airdrop/react/useAccessEcdsaClaimAmount.d.ts +26 -0
  84. package/dist/fhe-airdrop/react/useAccessMerkleClaimAmount.d.ts +27 -0
  85. package/dist/fhe-airdrop/react/useAddComplianceDelegate.d.ts +37 -0
  86. package/dist/fhe-airdrop/react/useAdminBatchDiscloseBalanceToParties.d.ts +36 -0
  87. package/dist/fhe-airdrop/react/useAdminDiscloseBalanceToParty.d.ts +31 -0
  88. package/dist/fhe-airdrop/react/useAdminGetCurrentBalance.d.ts +27 -0
  89. package/dist/fhe-airdrop/react/useAirdropConfig.d.ts +49 -0
  90. package/dist/fhe-airdrop/react/useAirdropDeploymentMode.d.ts +28 -0
  91. package/dist/fhe-airdrop/react/useAirdropGrantRole.d.ts +35 -0
  92. package/dist/fhe-airdrop/react/useAirdropRenounceRole.d.ts +36 -0
  93. package/dist/fhe-airdrop/react/useAirdropRevokeRole.d.ts +33 -0
  94. package/dist/fhe-airdrop/react/useAirdropRoleAdmin.d.ts +28 -0
  95. package/dist/fhe-airdrop/react/useAirdropRoleConstants.d.ts +67 -0
  96. package/dist/fhe-airdrop/react/useAirdropRoleMembers.d.ts +49 -0
  97. package/dist/fhe-airdrop/react/useAirdropUpgradeToAndCall.d.ts +45 -0
  98. package/dist/fhe-airdrop/react/useBatchDiscloseHandlesToParty.d.ts +32 -0
  99. package/dist/fhe-airdrop/react/useBuildMerkleCampaign.d.ts +68 -0
  100. package/dist/fhe-airdrop/react/useComplianceGrantRole.d.ts +32 -0
  101. package/dist/fhe-airdrop/react/useComplianceHasRole.d.ts +37 -0
  102. package/dist/fhe-airdrop/react/useComplianceInfo.d.ts +50 -0
  103. package/dist/fhe-airdrop/react/useComplianceManagerOf.d.ts +32 -0
  104. package/dist/fhe-airdrop/react/useComplianceRenounceRole.d.ts +38 -0
  105. package/dist/fhe-airdrop/react/useComplianceRevokeRole.d.ts +36 -0
  106. package/dist/fhe-airdrop/react/useComplianceRoleConstants.d.ts +41 -0
  107. package/dist/fhe-airdrop/react/useComplianceRoleMembers.d.ts +45 -0
  108. package/dist/fhe-airdrop/react/useCreateAndFundEcdsaAirdrop.d.ts +55 -0
  109. package/dist/fhe-airdrop/react/useCreateAndFundMerkleAirdrop.d.ts +52 -0
  110. package/dist/fhe-airdrop/react/useDiscloseHandleToParty.d.ts +35 -0
  111. package/dist/fhe-airdrop/react/useEcdsaClaim.d.ts +4 -3
  112. package/dist/fhe-airdrop/react/useEcdsaClaimAndUnwrap.d.ts +27 -0
  113. package/dist/fhe-airdrop/react/useEcdsaDomain.d.ts +41 -0
  114. package/dist/fhe-airdrop/react/useEffectiveDelegateToCompliance.d.ts +26 -0
  115. package/dist/fhe-airdrop/react/useEncryptCampaignAmounts.d.ts +59 -0
  116. package/dist/fhe-airdrop/react/useFactoryFees.d.ts +11 -4
  117. package/dist/fhe-airdrop/react/useIsActiveDelegate.d.ts +29 -0
  118. package/dist/fhe-airdrop/react/useIsAirdrop.d.ts +44 -0
  119. package/dist/fhe-airdrop/react/useIsMerkleRootMutable.d.ts +21 -0
  120. package/dist/fhe-airdrop/react/useIsSignatureValid.d.ts +46 -0
  121. package/dist/fhe-airdrop/react/useMerkleClaim.d.ts +7 -19
  122. package/dist/fhe-airdrop/react/useMerkleClaimAndUnwrap.d.ts +29 -0
  123. package/dist/fhe-airdrop/react/usePlanMerkleCampaign.d.ts +53 -0
  124. package/dist/fhe-airdrop/react/usePreflightClaim.d.ts +46 -0
  125. package/dist/fhe-airdrop/react/usePreflightCreateAirdrop.d.ts +67 -0
  126. package/dist/fhe-airdrop/react/useRefreshComplianceBalance.d.ts +36 -0
  127. package/dist/fhe-airdrop/react/useRescueERC20.d.ts +30 -0
  128. package/dist/fhe-airdrop/react/useRescueOtherConfidentialToken.d.ts +34 -0
  129. package/dist/fhe-airdrop/react/useResolveGasFee.d.ts +30 -0
  130. package/dist/fhe-airdrop/react/useRevokeComplianceDelegate.d.ts +37 -0
  131. package/dist/fhe-airdrop/react/useRotateMerkleRoot.d.ts +52 -0
  132. package/dist/fhe-airdrop/react/useSignClaimAuthorization.d.ts +42 -0
  133. package/dist/fhe-airdrop/react/useWithdrawGasFee.d.ts +37 -0
  134. package/dist/fhe-airdrop/types.d.ts +27 -1
  135. package/dist/fhe-disperse/index.cjs +21 -21
  136. package/dist/fhe-disperse/index.js +2 -2
  137. package/dist/fhe-disperse/react/index.cjs +22 -22
  138. package/dist/fhe-disperse/react/index.js +3 -3
  139. package/dist/fhe-vesting/advanced/index.cjs +5 -5
  140. package/dist/fhe-vesting/advanced/index.js +3 -3
  141. package/dist/fhe-vesting/advanced/react/index.cjs +7 -7
  142. package/dist/fhe-vesting/advanced/react/index.js +4 -4
  143. package/dist/fhe-vesting/index.cjs +8 -8
  144. package/dist/fhe-vesting/index.js +2 -2
  145. package/dist/fhe-vesting/react/index.cjs +114 -114
  146. package/dist/fhe-vesting/react/index.js +3 -3
  147. package/dist/index.cjs +18 -18
  148. package/dist/index.js +1 -1
  149. package/dist/testnet-faucet/index.cjs +14 -14
  150. package/dist/testnet-faucet/index.js +2 -2
  151. package/dist/testnet-faucet/react/index.cjs +8 -8
  152. package/dist/testnet-faucet/react/index.js +3 -3
  153. package/package.json +1 -1
  154. package/dist/chunk-NCVX3K2N.cjs +0 -161
  155. package/dist/chunk-VP2B4WM2.js +0 -154
@@ -0,0 +1,253 @@
1
+ import { createConfidentialAirdropFactoryClient, resolveEncryptor, createAirdropBaseClient, createMerkleAirdropClient, createComplianceManagerClient, createEcdsaAirdropClient } from './chunk-BXX5TETM.js';
2
+ import { getFheAirdropFactoryAddress } from './chunk-6HCT4QIX.js';
3
+ import { DeploymentAddressUnavailableError } from './chunk-QBJ7O2B4.js';
4
+ import { useRef, useMemo } from 'react';
5
+ import { usePublicClient, useWalletClient } from 'wagmi';
6
+
7
+ var FHE_AIRDROP_KEY = "tokenops-sdk";
8
+ var FHE_AIRDROP_NAMESPACE = "fhe-airdrop";
9
+ function airdropQueryKey(params) {
10
+ return [
11
+ FHE_AIRDROP_KEY,
12
+ FHE_AIRDROP_NAMESPACE,
13
+ params.chainId ?? null,
14
+ params.address ? normalizeKeyArg(params.address) : null,
15
+ params.fn,
16
+ params.args.map(normalizeKeyArg)
17
+ ];
18
+ }
19
+ function airdropQueryKeyPrefix(params) {
20
+ const prefix = [
21
+ FHE_AIRDROP_KEY,
22
+ FHE_AIRDROP_NAMESPACE,
23
+ params.chainId ?? null,
24
+ params.address ? normalizeKeyArg(params.address) : null
25
+ ];
26
+ if (params.fn !== void 0) prefix.push(params.fn);
27
+ return prefix;
28
+ }
29
+ function normalizeKeyArg(value) {
30
+ if (typeof value === "bigint") return value.toString();
31
+ if (Array.isArray(value)) return value.map(normalizeKeyArg);
32
+ if (value && typeof value === "object") {
33
+ return Object.fromEntries(
34
+ Object.entries(value).map(([k, v]) => [k, normalizeKeyArg(v)])
35
+ );
36
+ }
37
+ if (typeof value === "string" && value.startsWith("0x")) return value.toLowerCase();
38
+ return value;
39
+ }
40
+ function tryResolveAirdropFactoryAddress(override, chainId) {
41
+ if (override) return override;
42
+ if (chainId === void 0) return void 0;
43
+ return getFheAirdropFactoryAddress(chainId);
44
+ }
45
+ function computeAirdropFactoryResolutionError(override, chainId) {
46
+ if (override) return void 0;
47
+ if (chainId === void 0) {
48
+ return new DeploymentAddressUnavailableError({
49
+ reason: "chain-id-missing",
50
+ product: "fheAirdrop",
51
+ contract: "airdropFactory",
52
+ clientLabel: "ConfidentialAirdropFactoryClient"
53
+ });
54
+ }
55
+ const resolved = getFheAirdropFactoryAddress(chainId);
56
+ if (!resolved) {
57
+ return new DeploymentAddressUnavailableError({
58
+ reason: "registry-not-deployed",
59
+ product: "fheAirdrop",
60
+ contract: "airdropFactory",
61
+ chainId,
62
+ clientLabel: "ConfidentialAirdropFactoryClient"
63
+ });
64
+ }
65
+ return void 0;
66
+ }
67
+ function useMemoAirdropFactoryClient(opts = {}) {
68
+ const publicClient = usePublicClient({ chainId: opts.chainId });
69
+ const { data: walletClient } = useWalletClient({ chainId: opts.chainId });
70
+ const chainId = opts.chainId ?? publicClient?.chain?.id;
71
+ const resolvedAddress = tryResolveAirdropFactoryAddress(opts.address, chainId);
72
+ const resolutionError = computeAirdropFactoryResolutionError(opts.address, chainId);
73
+ const encryptorSourceRef = useRef(opts.encryptor);
74
+ encryptorSourceRef.current = opts.encryptor;
75
+ const telemetry = opts.telemetry;
76
+ const client = useMemo(() => {
77
+ if (!publicClient) return void 0;
78
+ if (!resolvedAddress) return void 0;
79
+ return createConfidentialAirdropFactoryClient({
80
+ publicClient,
81
+ ...walletClient ? { walletClient } : {},
82
+ address: resolvedAddress,
83
+ ...chainId !== void 0 ? { chainId } : {},
84
+ // Lazy — invoked per-encryption inside the headless client.
85
+ encryptor: () => resolveEncryptor(encryptorSourceRef.current),
86
+ ...telemetry ? { telemetry } : {}
87
+ });
88
+ }, [publicClient, walletClient, resolvedAddress, chainId, telemetry]);
89
+ return {
90
+ client,
91
+ resolutionError,
92
+ publicClient,
93
+ walletClient: walletClient ?? void 0,
94
+ chainId,
95
+ resolvedAddress
96
+ };
97
+ }
98
+ function useMemoAirdropBaseClient(opts) {
99
+ const publicClient = usePublicClient({ chainId: opts.chainId });
100
+ const { data: walletClient } = useWalletClient({ chainId: opts.chainId });
101
+ const chainId = opts.chainId ?? publicClient?.chain?.id;
102
+ const telemetry = opts.telemetry;
103
+ const client = useMemo(() => {
104
+ if (!publicClient) return void 0;
105
+ if (!opts.address) return void 0;
106
+ return createAirdropBaseClient({
107
+ publicClient,
108
+ ...walletClient ? { walletClient } : {},
109
+ address: opts.address,
110
+ ...chainId !== void 0 ? { chainId } : {},
111
+ ...telemetry ? { telemetry } : {}
112
+ });
113
+ }, [publicClient, walletClient, opts.address, chainId, telemetry]);
114
+ return { client, publicClient, walletClient: walletClient ?? void 0, chainId };
115
+ }
116
+ function useMemoMerkleAirdropClient(opts) {
117
+ const publicClient = usePublicClient({ chainId: opts.chainId });
118
+ const { data: walletClient } = useWalletClient({ chainId: opts.chainId });
119
+ const chainId = opts.chainId ?? publicClient?.chain?.id;
120
+ const telemetry = opts.telemetry;
121
+ const client = useMemo(() => {
122
+ if (!publicClient) return void 0;
123
+ if (!opts.address) return void 0;
124
+ return createMerkleAirdropClient({
125
+ publicClient,
126
+ ...walletClient ? { walletClient } : {},
127
+ address: opts.address,
128
+ ...chainId !== void 0 ? { chainId } : {},
129
+ ...telemetry ? { telemetry } : {}
130
+ });
131
+ }, [publicClient, walletClient, opts.address, chainId, telemetry]);
132
+ return { client, publicClient, walletClient: walletClient ?? void 0, chainId };
133
+ }
134
+ function useMemoComplianceManagerClient(opts) {
135
+ const publicClient = usePublicClient({ chainId: opts.chainId });
136
+ const { data: walletClient } = useWalletClient({ chainId: opts.chainId });
137
+ const chainId = opts.chainId ?? publicClient?.chain?.id;
138
+ const telemetry = opts.telemetry;
139
+ const client = useMemo(() => {
140
+ if (!publicClient) return void 0;
141
+ if (!opts.address) return void 0;
142
+ return createComplianceManagerClient({
143
+ publicClient,
144
+ ...walletClient ? { walletClient } : {},
145
+ address: opts.address,
146
+ ...chainId !== void 0 ? { chainId } : {},
147
+ ...telemetry ? { telemetry } : {}
148
+ });
149
+ }, [publicClient, walletClient, opts.address, chainId, telemetry]);
150
+ return { client, publicClient, walletClient: walletClient ?? void 0, chainId };
151
+ }
152
+ function useMemoEcdsaAirdropClient(opts) {
153
+ const publicClient = usePublicClient({ chainId: opts.chainId });
154
+ const { data: walletClient } = useWalletClient({ chainId: opts.chainId });
155
+ const chainId = opts.chainId ?? publicClient?.chain?.id;
156
+ const telemetry = opts.telemetry;
157
+ const client = useMemo(() => {
158
+ if (!publicClient) return void 0;
159
+ if (!opts.address) return void 0;
160
+ return createEcdsaAirdropClient({
161
+ publicClient,
162
+ ...walletClient ? { walletClient } : {},
163
+ address: opts.address,
164
+ dedupMode: opts.dedupMode,
165
+ ...chainId !== void 0 ? { chainId } : {},
166
+ ...telemetry ? { telemetry } : {}
167
+ });
168
+ }, [publicClient, walletClient, opts.address, opts.dedupMode, chainId, telemetry]);
169
+ return { client, publicClient, walletClient: walletClient ?? void 0, chainId };
170
+ }
171
+
172
+ // src/fhe-airdrop/react/keys.ts
173
+ var AIRDROP_FN = {
174
+ // instance reads
175
+ claimedAmount: "getClaimedAmount",
176
+ paused: "paused",
177
+ window: "window",
178
+ config: "config",
179
+ merkleRoot: "merkleRoot",
180
+ merkleRootMutable: "isMerkleRootMutable",
181
+ hasRole: "hasRole",
182
+ roleMembers: "roleMembers",
183
+ gasFee: "gasFee",
184
+ preflightCreate: "preflightCreate",
185
+ isSignatureValid: "isSignatureValid",
186
+ // factory reads
187
+ fees: "fees",
188
+ registry: "registry",
189
+ isAirdrop: "isAirdrop",
190
+ resolvedGasFee: "resolvedGasFee",
191
+ customFee: "customFee",
192
+ implementations: "implementations",
193
+ compliancePolicy: "compliancePolicy",
194
+ upgradeabilityPolicy: "upgradeabilityPolicy",
195
+ factoryHasRole: "factoryHasRole",
196
+ factoryRoleMembers: "factoryRoleMembers",
197
+ // compliance-manager reads
198
+ complianceInfo: "complianceInfo",
199
+ activeDelegate: "isActiveDelegate",
200
+ clientDelegates: "clientDelegates",
201
+ complianceHasRole: "complianceHasRole",
202
+ complianceRoleMembers: "complianceRoleMembers"
203
+ };
204
+ var airdropKeys = {
205
+ /** One account's cumulative delivered total. Keyed on the CLAIM IDENTITY, never the sender. */
206
+ claimedAmount: (s, account) => airdropQueryKey({ ...s, fn: AIRDROP_FN.claimedAmount, args: [account] }),
207
+ paused: (s) => airdropQueryKey({ ...s, fn: AIRDROP_FN.paused, args: [] }),
208
+ window: (s) => airdropQueryKey({ ...s, fn: AIRDROP_FN.window, args: [] }),
209
+ config: (s) => airdropQueryKey({ ...s, fn: AIRDROP_FN.config, args: [] }),
210
+ gasFee: (s) => airdropQueryKey({ ...s, fn: AIRDROP_FN.gasFee, args: [] }),
211
+ merkleRoot: (s) => airdropQueryKey({ ...s, fn: AIRDROP_FN.merkleRoot, args: [] }),
212
+ merkleRootMutable: (s) => airdropQueryKey({ ...s, fn: AIRDROP_FN.merkleRootMutable, args: [] }),
213
+ hasRole: (s, role, holder) => airdropQueryKey({ ...s, fn: AIRDROP_FN.hasRole, args: [role, holder] }),
214
+ /** Every cached `hasRole` for this instance, whatever role/holder pair was queried. */
215
+ hasRoleAll: (s) => airdropQueryKeyPrefix({ ...s, fn: AIRDROP_FN.hasRole }),
216
+ roleMembers: (s, role) => airdropQueryKey({ ...s, fn: AIRDROP_FN.roleMembers, args: [role] }),
217
+ roleMembersAll: (s) => airdropQueryKeyPrefix({ ...s, fn: AIRDROP_FN.roleMembers }),
218
+ /** Every cached create-preflight, whatever params/mode/salt combination was queried. */
219
+ preflightCreateAll: (s) => airdropQueryKeyPrefix({ ...s, fn: AIRDROP_FN.preflightCreate }),
220
+ /** Every cached signature check on this instance; a claim consumes a digest and flips it. */
221
+ isSignatureValidAll: (s) => airdropQueryKeyPrefix({ ...s, fn: AIRDROP_FN.isSignatureValid }),
222
+ fees: (s) => airdropQueryKey({ ...s, fn: AIRDROP_FN.fees, args: [] }),
223
+ customFee: (s, creator) => airdropQueryKey({ ...s, fn: AIRDROP_FN.customFee, args: [creator] }),
224
+ customFeeAll: (s) => airdropQueryKeyPrefix({ ...s, fn: AIRDROP_FN.customFee }),
225
+ resolvedGasFee: (s, creator) => airdropQueryKey({ ...s, fn: AIRDROP_FN.resolvedGasFee, args: [creator] }),
226
+ /** Every creator's resolved fee; the default and any override both move it. */
227
+ resolvedGasFeeAll: (s) => airdropQueryKeyPrefix({ ...s, fn: AIRDROP_FN.resolvedGasFee }),
228
+ /** Every registry page, whatever offset/limit was queried. */
229
+ registryAll: (s) => airdropQueryKeyPrefix({ ...s, fn: AIRDROP_FN.registry }),
230
+ isAirdrop: (s, candidate) => airdropQueryKey({ ...s, fn: AIRDROP_FN.isAirdrop, args: [candidate] }),
231
+ /** Every genuineness answer from this factory; a create adds one address. */
232
+ isAirdropAll: (s) => airdropQueryKeyPrefix({ ...s, fn: AIRDROP_FN.isAirdrop }),
233
+ implementations: (s) => airdropQueryKey({ ...s, fn: AIRDROP_FN.implementations, args: [] }),
234
+ compliancePolicy: (s, creator) => airdropQueryKey({ ...s, fn: AIRDROP_FN.compliancePolicy, args: [creator] }),
235
+ compliancePolicyAll: (s) => airdropQueryKeyPrefix({ ...s, fn: AIRDROP_FN.compliancePolicy }),
236
+ upgradeabilityPolicy: (s, creator) => airdropQueryKey({ ...s, fn: AIRDROP_FN.upgradeabilityPolicy, args: [creator] }),
237
+ upgradeabilityPolicyAll: (s) => airdropQueryKeyPrefix({ ...s, fn: AIRDROP_FN.upgradeabilityPolicy }),
238
+ factoryHasRole: (s, role, holder) => airdropQueryKey({ ...s, fn: AIRDROP_FN.factoryHasRole, args: [role, holder] }),
239
+ factoryHasRoleAll: (s) => airdropQueryKeyPrefix({ ...s, fn: AIRDROP_FN.factoryHasRole }),
240
+ factoryRoleMembers: (s, role) => airdropQueryKey({ ...s, fn: AIRDROP_FN.factoryRoleMembers, args: [role] }),
241
+ factoryRoleMembersAll: (s) => airdropQueryKeyPrefix({ ...s, fn: AIRDROP_FN.factoryRoleMembers }),
242
+ complianceInfo: (s) => airdropQueryKey({ ...s, fn: AIRDROP_FN.complianceInfo, args: [] }),
243
+ activeDelegate: (s, delegate) => airdropQueryKey({ ...s, fn: AIRDROP_FN.activeDelegate, args: [delegate] }),
244
+ activeDelegateAll: (s) => airdropQueryKeyPrefix({ ...s, fn: AIRDROP_FN.activeDelegate }),
245
+ clientDelegates: (s, index) => airdropQueryKey({ ...s, fn: AIRDROP_FN.clientDelegates, args: [index] }),
246
+ clientDelegatesAll: (s) => airdropQueryKeyPrefix({ ...s, fn: AIRDROP_FN.clientDelegates }),
247
+ complianceHasRole: (s, role, holder) => airdropQueryKey({ ...s, fn: AIRDROP_FN.complianceHasRole, args: [role, holder] }),
248
+ complianceHasRoleAll: (s) => airdropQueryKeyPrefix({ ...s, fn: AIRDROP_FN.complianceHasRole }),
249
+ complianceRoleMembers: (s, role) => airdropQueryKey({ ...s, fn: AIRDROP_FN.complianceRoleMembers, args: [role] }),
250
+ complianceRoleMembersAll: (s) => airdropQueryKeyPrefix({ ...s, fn: AIRDROP_FN.complianceRoleMembers })
251
+ };
252
+
253
+ export { AIRDROP_FN, airdropKeys, airdropQueryKey, airdropQueryKeyPrefix, useMemoAirdropBaseClient, useMemoAirdropFactoryClient, useMemoComplianceManagerClient, useMemoEcdsaAirdropClient, useMemoMerkleAirdropClient };
@@ -1,6 +1,6 @@
1
1
  import { SDK_VERSION } from './chunk-NWFMBLSQ.js';
2
2
  import { mapContractRevert, isContractRevert } from './chunk-4RAAATVY.js';
3
- import { getFheVestingFactoryAddress } from './chunk-DZHYSUGY.js';
3
+ import { getFheVestingFactoryAddress } from './chunk-6HCT4QIX.js';
4
4
  import { normaliseAddress } from './chunk-ZA673I3O.js';
5
5
  import { asTxHash } from './chunk-KWFFIJYX.js';
6
6
  import { DeploymentAddressUnavailableError, TokenOpsSdkError, MissingWalletClientError, MissingAccountError } from './chunk-QBJ7O2B4.js';
@@ -2,8 +2,8 @@
2
2
 
3
3
  var chunkWJLECC22_cjs = require('./chunk-WJLECC22.cjs');
4
4
  var chunk3QHNYEQD_cjs = require('./chunk-3QHNYEQD.cjs');
5
- var chunk6PXXGACR_cjs = require('./chunk-6PXXGACR.cjs');
6
- var chunk5576FRT3_cjs = require('./chunk-5576FRT3.cjs');
5
+ var chunkJVNJSDQ4_cjs = require('./chunk-JVNJSDQ4.cjs');
6
+ var chunkPG3WXT3K_cjs = require('./chunk-PG3WXT3K.cjs');
7
7
  var chunk67OV5CX2_cjs = require('./chunk-67OV5CX2.cjs');
8
8
  var react = require('react');
9
9
  var wagmi = require('wagmi');
@@ -26,7 +26,7 @@ function useHookFiredEvent(hookName, telemetry, hasWallet, chainId) {
26
26
  function tryResolveFactoryAddress(override, chainId) {
27
27
  if (override) return override;
28
28
  if (chainId === void 0) return void 0;
29
- return chunk5576FRT3_cjs.getFheVestingFactoryAddress(chainId);
29
+ return chunkPG3WXT3K_cjs.getFheVestingFactoryAddress(chainId);
30
30
  }
31
31
  function useMemoFactoryClient(opts = {}) {
32
32
  const publicClient = wagmi.usePublicClient({ chainId: opts.chainId });
@@ -39,7 +39,7 @@ function useMemoFactoryClient(opts = {}) {
39
39
  const client = react.useMemo(() => {
40
40
  if (!publicClient) return void 0;
41
41
  if (!resolvedAddress) return void 0;
42
- return chunk6PXXGACR_cjs.createConfidentialVestingFactoryClient({
42
+ return chunkJVNJSDQ4_cjs.createConfidentialVestingFactoryClient({
43
43
  publicClient,
44
44
  ...walletClient ? { walletClient } : {},
45
45
  address: resolvedAddress,
@@ -66,7 +66,7 @@ function computeFactoryResolutionError(override, chainId) {
66
66
  clientLabel: "ConfidentialVestingFactoryClient"
67
67
  });
68
68
  }
69
- const resolved = chunk5576FRT3_cjs.getFheVestingFactoryAddress(chainId);
69
+ const resolved = chunkPG3WXT3K_cjs.getFheVestingFactoryAddress(chainId);
70
70
  if (!resolved) {
71
71
  return new chunk67OV5CX2_cjs.DeploymentAddressUnavailableError({
72
72
  reason: "registry-not-deployed",
@@ -5,9 +5,10 @@ var chunk67OV5CX2_cjs = require('./chunk-67OV5CX2.cjs');
5
5
  var viem = require('viem');
6
6
 
7
7
  // src/fhe-airdrop/constants.ts
8
- var AIRDROP_CONTRACTS_COMMIT = "8e5b144bdbcdf35b9f36b62f5257d795bf954e8e";
8
+ var AIRDROP_CONTRACTS_COMMIT = "c5c12c2087f61bcd5bd1daa802563ed3cd68f002";
9
9
  var DEPLOYMENT_MODE = { clone: 0, uups: 1 };
10
10
  var DEDUP_MODE = { perAddress: 0, perDedupId: 1, both: 2, none: 3 };
11
+ var UINT96_MAX = (1n << 96n) - 1n;
11
12
 
12
13
  // src/fhe-airdrop/errors.ts
13
14
  var MerkleUupsUnsupportedError = class extends chunk67OV5CX2_cjs.TokenOpsSdkError {
@@ -37,6 +38,25 @@ var NonStockWrapperError = class extends chunk67OV5CX2_cjs.TokenOpsSdkError {
37
38
  );
38
39
  }
39
40
  };
41
+ var UnauthorizedRedirectError = class extends chunk67OV5CX2_cjs.TokenOpsSdkError {
42
+ name = "UnauthorizedRedirectError";
43
+ constructor(args) {
44
+ const who = args?.submitter ? ` (submitter: ${args.submitter})` : "";
45
+ super(
46
+ `Only the claim identity may redirect its own payout${who}: \`to\` (${args?.to ?? "unknown"}) differs from \`account\` (${args?.account ?? "unknown"}) and the submitter is not that account. Leave \`to\` unset (or equal to \`account\`) when submitting on someone else's behalf.`,
47
+ {
48
+ code: "TOKENOPS_UNAUTHORIZED_REDIRECT",
49
+ cause: args?.cause,
50
+ context: {
51
+ constraint: "merkle-third-party-redirect",
52
+ account: args?.account,
53
+ to: args?.to,
54
+ submitter: args?.submitter
55
+ }
56
+ }
57
+ );
58
+ }
59
+ };
40
60
  var SaltCollisionError = class extends chunk67OV5CX2_cjs.TokenOpsSdkError {
41
61
  name = "SaltCollisionError";
42
62
  constructor(args) {
@@ -186,6 +206,42 @@ var ClaimWindowClosedError = class extends chunk67OV5CX2_cjs.TokenOpsSdkError {
186
206
  });
187
207
  }
188
208
  };
209
+ var GasFeeNotAcceptedError = class extends chunk67OV5CX2_cjs.TokenOpsSdkError {
210
+ name = "GasFeeNotAcceptedError";
211
+ constructor(args) {
212
+ const detail = args.resolvedFee !== void 0 && args.maxAcceptedGasFee !== void 0 ? ` The factory resolved ${args.resolvedFee} wei; \`maxAcceptedGasFee\` is ${args.maxAcceptedGasFee} wei.` : "";
213
+ super(
214
+ `${args.method}: the resolved per-claim gas fee exceeds \`common.maxAcceptedGasFee\`.${detail} The fee is frozen into the instance at create and cannot be changed after. Every claimant pays it on every claim, so raise the bound only if that is a fee you accept charging them.`,
215
+ {
216
+ code: "TOKENOPS_GAS_FEE_NOT_ACCEPTED",
217
+ cause: args.cause,
218
+ context: {
219
+ method: args.method,
220
+ contractAddress: args.contractAddress,
221
+ resolvedFee: args.resolvedFee,
222
+ maxAcceptedGasFee: args.maxAcceptedGasFee
223
+ }
224
+ }
225
+ );
226
+ }
227
+ };
228
+ var UnrecognisedAirdropError = class extends chunk67OV5CX2_cjs.TokenOpsSdkError {
229
+ name = "UnrecognisedAirdropError";
230
+ constructor(args) {
231
+ super(
232
+ `${args.method}: ${args.contractAddress} was not created by the factory at ${args.factory}, so it is not a TokenOps airdrop. Treat its ABI, its events and its pool as unverified.`,
233
+ {
234
+ code: "TOKENOPS_UNRECOGNISED_AIRDROP",
235
+ cause: args.cause,
236
+ context: {
237
+ method: args.method,
238
+ contractAddress: args.contractAddress,
239
+ factory: args.factory
240
+ }
241
+ }
242
+ );
243
+ }
244
+ };
189
245
  var airdropProductMapper = (name, errArgs, ctx) => {
190
246
  switch (name) {
191
247
  // ---- guarded conditions, caught on-chain instead of pre-flight -------
@@ -241,6 +297,22 @@ var airdropProductMapper = (name, errArgs, ctx) => {
241
297
  });
242
298
  case "RootImmutable":
243
299
  return new chunk67OV5CX2_cjs.FeatureDisabledError({ ...ctx, feature: "merkleRootRotation" });
300
+ case "ZeroAccount":
301
+ return invalidArg(
302
+ ctx,
303
+ "account",
304
+ name,
305
+ "the claim identity is mandatory and is never defaulted from the caller"
306
+ );
307
+ case "UnauthorizedRedirect": {
308
+ const account = errArgs?.[0];
309
+ const to = errArgs?.[1];
310
+ return new UnauthorizedRedirectError({
311
+ account,
312
+ to,
313
+ submitter: ctx.productContext?.["creator"]
314
+ });
315
+ }
244
316
  // ---- FHEVM chain config ---------------------------------------------
245
317
  case "ZamaProtocolUnsupported": {
246
318
  const chainId = ctx.productContext?.["chainId"] ?? 0;
@@ -254,6 +326,28 @@ var airdropProductMapper = (name, errArgs, ctx) => {
254
326
  }
255
327
  // ---- argument-validation bucket: reverts not already covered by the
256
328
  // cross-product default mapper's `Zero*`/`Invalid*` list ---------------
329
+ case "GasFeeNotAccepted": {
330
+ const resolvedFee = errArgs?.[0];
331
+ const maxAcceptedGasFee = errArgs?.[1];
332
+ return new GasFeeNotAcceptedError({ ...ctx, resolvedFee, maxAcceptedGasFee });
333
+ }
334
+ case "GasFeeExceedsMaximum": {
335
+ const gasFee = errArgs?.[0];
336
+ const maxGasFee = errArgs?.[1];
337
+ return new chunk67OV5CX2_cjs.InvalidArgumentError({
338
+ method: ctx.method,
339
+ argument: "gasFee",
340
+ reason: `exceeds the factory's own maximum${gasFee !== void 0 && maxGasFee !== void 0 ? ` (${gasFee} wei > ${maxGasFee} wei)` : ""}; \`setMaxGasFee\` is DEFAULT_ADMIN_ROLE-gated and bounds what FEE_MANAGER_ROLE may configure`,
341
+ value: gasFee
342
+ });
343
+ }
344
+ case "ZeroUnwrapRequestId":
345
+ return invalidArg(
346
+ ctx,
347
+ "token",
348
+ name,
349
+ "the wrapper returned the zero request id, which names no handle to read the delivered amount from; the campaign token is not a conforming ERC7984ERC20Wrapper"
350
+ );
257
351
  case "ZeroToken":
258
352
  return invalidArg(ctx, "token", name);
259
353
  case "ZeroFeeCollector":
@@ -286,7 +380,7 @@ var airdropProductMapper = (name, errArgs, ctx) => {
286
380
  ctx,
287
381
  "admin",
288
382
  name,
289
- "revoking or renouncing the sole DEFAULT_ADMIN_ROLE member would leave the instance permanently ungovernable"
383
+ "revoking or renouncing the sole DEFAULT_ADMIN_ROLE member would leave the contract permanently ungovernable. Declared once and enforced by BOTH the instances and the factory, each on its own admin set (audit-14) - grant a second admin first, then renounce"
290
384
  );
291
385
  case "LastFeeCollector":
292
386
  return invalidArg(
@@ -445,6 +539,27 @@ async function assertSaltAvailable(args) {
445
539
  predictedAddress: args.predictedAddress
446
540
  });
447
541
  }
542
+ function assertMaxAcceptedGasFeeRange(value, method) {
543
+ if (value < 0n || value > UINT96_MAX) {
544
+ throw new chunk67OV5CX2_cjs.InvalidArgumentError({
545
+ method,
546
+ argument: "common.maxAcceptedGasFee",
547
+ reason: `is outside uint96 (0 to ${UINT96_MAX}); the params tuple cannot be ABI-encoded at all`,
548
+ value
549
+ });
550
+ }
551
+ }
552
+ async function assertGasFeeAccepted(args) {
553
+ assertMaxAcceptedGasFeeRange(args.maxAcceptedGasFee, args.method);
554
+ const resolvedFee = await args.factory.resolveGasFee(args.creator);
555
+ if (resolvedFee <= args.maxAcceptedGasFee) return;
556
+ throw new GasFeeNotAcceptedError({
557
+ method: args.method,
558
+ contractAddress: args.factory.address,
559
+ resolvedFee,
560
+ maxAcceptedGasFee: args.maxAcceptedGasFee
561
+ });
562
+ }
448
563
  function assertPredictionFresh(args) {
449
564
  if (args.initCodeHashBefore.toLowerCase() === args.initCodeHashAfter.toLowerCase()) return;
450
565
  throw new PredictionDriftError({
@@ -462,6 +577,20 @@ async function preflightCreate(args) {
462
577
  if (args.variant === "merkle") {
463
578
  collect(blockers, () => assertMerkleModeSupported(args.mode));
464
579
  }
580
+ const encodable = collect(
581
+ blockers,
582
+ () => assertMaxAcceptedGasFeeRange(args.params.common.maxAcceptedGasFee, method)
583
+ );
584
+ if (!encodable) return { ready: false, blockers };
585
+ await collectAsync(
586
+ blockers,
587
+ () => assertGasFeeAccepted({
588
+ factory: args.factory,
589
+ creator: args.creator,
590
+ maxAcceptedGasFee: args.params.common.maxAcceptedGasFee,
591
+ method
592
+ })
593
+ );
465
594
  const predictArgs = {
466
595
  mode: args.mode,
467
596
  deployer: args.creator,
@@ -515,18 +644,113 @@ async function preflightCreate(args) {
515
644
  }
516
645
  return { ready: blockers.length === 0, blockers };
517
646
  }
647
+ async function assertKnownAirdrop(args) {
648
+ if (args.factory.chainId !== args.chainId) {
649
+ throw new chunk67OV5CX2_cjs.InvalidArgumentError({
650
+ method: args.method,
651
+ argument: "factory",
652
+ reason: `is bound to chain ${args.factory.chainId} but the airdrop is on chain ${args.chainId}; a registry answer from another chain proves nothing about this instance`,
653
+ value: args.factory.address
654
+ });
655
+ }
656
+ if (await args.factory.isAirdrop(args.airdrop)) return;
657
+ throw new UnrecognisedAirdropError({
658
+ method: args.method,
659
+ contractAddress: args.airdrop,
660
+ factory: args.factory.address
661
+ });
662
+ }
663
+ function assertMerkleClaimIdentity(args) {
664
+ const { method, account, submitter, boundTo, to, entrypoint = "claim" } = args;
665
+ for (const [argument, value] of [
666
+ ["account", account],
667
+ ["entry.boundTo", boundTo],
668
+ ["to", to],
669
+ ["submitter", submitter]
670
+ ]) {
671
+ if (value !== void 0 && !viem.isAddress(value, { strict: false })) {
672
+ throw new chunk67OV5CX2_cjs.InvalidArgumentError({
673
+ method,
674
+ argument,
675
+ reason: "is not a 20-byte hex address",
676
+ value
677
+ });
678
+ }
679
+ }
680
+ if (viem.isAddressEqual(account, viem.zeroAddress)) {
681
+ throw new chunk67OV5CX2_cjs.InvalidArgumentError({
682
+ method,
683
+ argument: "account",
684
+ reason: "is the zero address; the claim identity is mandatory and is never defaulted from the caller"
685
+ });
686
+ }
687
+ if (boundTo !== void 0 && !viem.isAddressEqual(boundTo, submitter)) {
688
+ throw new chunk67OV5CX2_cjs.InvalidArgumentError({
689
+ method,
690
+ argument: "entry.boundTo",
691
+ reason: `is ${boundTo}, but this transaction is sent from ${submitter}; the FHE input proof is bound to the sender, so only ${boundTo} can submit this entry`
692
+ });
693
+ }
694
+ if (entrypoint === "claimAndUnwrap") {
695
+ if (!viem.isAddressEqual(account, submitter)) {
696
+ throw new chunk67OV5CX2_cjs.InvalidArgumentError({
697
+ method,
698
+ argument: "entry.account",
699
+ reason: `is ${account}, but \`claimAndUnwrap\` is always submitted for the caller (${submitter}); use \`claim\` to settle on someone else's behalf`
700
+ });
701
+ }
702
+ return;
703
+ }
704
+ const beneficiary = to === void 0 || viem.isAddressEqual(to, viem.zeroAddress) ? account : to;
705
+ if (!viem.isAddressEqual(beneficiary, account) && !viem.isAddressEqual(submitter, account)) {
706
+ throw new UnauthorizedRedirectError({ account, to: beneficiary, submitter });
707
+ }
708
+ }
518
709
  async function preflightClaim(args) {
519
710
  const { airdrop, claimant } = args;
520
711
  const method = "preflightClaim";
521
712
  const blockers = [];
522
713
  collect(blockers, () => assertSupportedChain(airdrop.chainId));
523
- const [started, ended, paused, fee, balance] = await Promise.all([
714
+ if (args.factory) {
715
+ await collectAsync(
716
+ blockers,
717
+ () => assertKnownAirdrop({
718
+ factory: args.factory,
719
+ airdrop: airdrop.address,
720
+ chainId: airdrop.chainId,
721
+ method
722
+ })
723
+ );
724
+ }
725
+ if (args.account !== void 0 || args.entrypoint !== void 0) {
726
+ collect(
727
+ blockers,
728
+ () => assertMerkleClaimIdentity({
729
+ method,
730
+ account: args.account ?? claimant,
731
+ submitter: claimant,
732
+ to: args.to,
733
+ entrypoint: args.entrypoint
734
+ })
735
+ );
736
+ }
737
+ const [started, ended, paused, fee, balance, unwrappable] = await Promise.all([
524
738
  airdrop.hasClaimStarted(),
525
739
  airdrop.hasClaimEnded(),
526
740
  airdrop.paused(),
527
741
  airdrop.gasFee(),
528
- airdrop.publicClient.getBalance({ address: claimant })
742
+ airdrop.publicClient.getBalance({ address: claimant }),
743
+ args.entrypoint === "claimAndUnwrap" && airdrop.unwrappable ? airdrop.unwrappable() : Promise.resolve(true)
529
744
  ]);
745
+ if (!unwrappable) {
746
+ blockers.push(
747
+ new chunk67OV5CX2_cjs.FeatureDisabledError({
748
+ method,
749
+ contractAddress: airdrop.address,
750
+ feature: "claimAndUnwrap"
751
+ })
752
+ );
753
+ }
530
754
  if (paused) {
531
755
  blockers.push(new chunk67OV5CX2_cjs.PausedError({ method, contractAddress: airdrop.address }));
532
756
  }
@@ -570,9 +794,11 @@ async function preflightClaim(args) {
570
794
  function collect(blockers, run) {
571
795
  try {
572
796
  run();
797
+ return true;
573
798
  } catch (err) {
574
799
  if (!chunk67OV5CX2_cjs.isTokenOpsSdkError(err)) throw err;
575
800
  blockers.push(err);
801
+ return false;
576
802
  }
577
803
  }
578
804
  async function collectAsync(blockers, run) {
@@ -592,13 +818,19 @@ exports.DEDUP_MODE = DEDUP_MODE;
592
818
  exports.DEPLOYMENT_MODE = DEPLOYMENT_MODE;
593
819
  exports.DedupIdConsumedError = DedupIdConsumedError;
594
820
  exports.FeeCollectorSelfAdministeredError = FeeCollectorSelfAdministeredError;
821
+ exports.GasFeeNotAcceptedError = GasFeeNotAcceptedError;
595
822
  exports.MerkleUupsUnsupportedError = MerkleUupsUnsupportedError;
596
823
  exports.NonStockWrapperError = NonStockWrapperError;
597
824
  exports.PredictionDriftError = PredictionDriftError;
598
825
  exports.SaltCollisionError = SaltCollisionError;
599
826
  exports.SignatureExpiredError = SignatureExpiredError;
827
+ exports.UINT96_MAX = UINT96_MAX;
828
+ exports.UnauthorizedRedirectError = UnauthorizedRedirectError;
829
+ exports.UnrecognisedAirdropError = UnrecognisedAirdropError;
600
830
  exports.UpgradeabilityNotAllowedError = UpgradeabilityNotAllowedError;
601
831
  exports.airdropProductMapper = airdropProductMapper;
832
+ exports.assertGasFeeAccepted = assertGasFeeAccepted;
833
+ exports.assertMerkleClaimIdentity = assertMerkleClaimIdentity;
602
834
  exports.assertMerkleModeSupported = assertMerkleModeSupported;
603
835
  exports.assertPredictionFresh = assertPredictionFresh;
604
836
  exports.assertSaltAvailable = assertSaltAvailable;
@@ -15,16 +15,16 @@ export declare const DEPLOYED_ADDRESSES: {
15
15
  };
16
16
  readonly fheAirdrop: {
17
17
  readonly airdropFactory: {
18
- readonly 11155111: "0x383083B6f13a0ee513596A6750B511c5E482d2d1";
18
+ readonly 11155111: "0xA10ff713cfeE5348313Cda0B2CA1b190A1194cab";
19
19
  };
20
20
  readonly ecdsaImplementation: {
21
- readonly 11155111: "0xefE40570C1837210f8E4Ae938635e11bd1ae788E";
21
+ readonly 11155111: "0x8d4E8F379f73D5488a76B6C3CC8a2fD489936BDe";
22
22
  };
23
23
  readonly merkleImplementation: {
24
- readonly 11155111: "0x9f3156546744F3ceE98Dc44bed817d98A8b8ae74";
24
+ readonly 11155111: "0x4B4F43Ed9aB3F9D10468b59C03d14f55A9d4E82F";
25
25
  };
26
26
  readonly complianceManagerImplementation: {
27
- readonly 11155111: "0x6adA841250C048364d1d3027958C662Dd4E62136";
27
+ readonly 11155111: "0x14bdE71e6b32b50dF1a5Dca1bccD150a319168e2";
28
28
  };
29
29
  };
30
30
  readonly fheDisperse: {
@@ -13,7 +13,7 @@ declare const TOKENOPS_SDK_ERROR_BRAND: unique symbol;
13
13
  * human-readable and may evolve between versions.
14
14
  * @public
15
15
  */
16
- export type TokenOpsSdkErrorCode = "TOKENOPS_UNSUPPORTED_CHAIN" | "TOKENOPS_DEPLOYMENT_ADDRESS_UNAVAILABLE" | "TOKENOPS_MISSING_PUBLIC_CLIENT" | "TOKENOPS_MISSING_WALLET_CLIENT" | "TOKENOPS_MISSING_ACCOUNT" | "TOKENOPS_MISSING_ENCRYPTOR" | "TOKENOPS_MISSING_CLIENT" | "TOKENOPS_INVALID_ARGUMENT" | "TOKENOPS_RECEIPT_EVENT_NOT_FOUND" | "TOKENOPS_RECEIPT_EVENT_AMBIGUOUS" | "TOKENOPS_CONTRACT_REVERT" | "TOKENOPS_PAUSED" | "TOKENOPS_ACCESS_DENIED" | "TOKENOPS_OPERATOR_NOT_APPROVED" | "TOKENOPS_INSUFFICIENT_FEE" | "TOKENOPS_INSUFFICIENT_BALANCE" | "TOKENOPS_BATCH_TOO_LARGE" | "TOKENOPS_FEATURE_DISABLED" | "TOKENOPS_TRANSFER_FAILED" | "TOKENOPS_FHE_HANDLE_NOT_ALLOWED" | "TOKENOPS_ALREADY_INITIALIZED" | "TOKENOPS_REENTRANCY" | "TOKENOPS_INVALID_SIGNATURE" | "TOKENOPS_WALLET_REJECTED" | "TOKENOPS_WALLET_CHAIN_MISMATCH" | "TOKENOPS_NETWORK_ERROR" | "TOKENOPS_INSUFFICIENT_GAS_FUNDS" | "TOKENOPS_UNKNOWN_WRITE_FAILURE" | "TOKENOPS_USER_REJECTED" | "TOKENOPS_SIGNING_FAILED" | "TOKENOPS_RELAYER_UNREACHABLE" | "TOKENOPS_ENCRYPTION_FAILED" | "TOKENOPS_DECRYPTION_FAILED" | "TOKENOPS_USER_DECRYPT_NOT_ALLOWED" | "TOKENOPS_VESTING_NOT_FOUND" | "TOKENOPS_NOT_RECIPIENT" | "TOKENOPS_CLAIM_LOCKED" | "TOKENOPS_VESTING_REVOKED" | "TOKENOPS_NOT_REVOCABLE" | "TOKENOPS_VESTING_EXPIRED" | "TOKENOPS_TRANSFER_ALREADY_PENDING" | "TOKENOPS_NO_PENDING_TRANSFER" | "TOKENOPS_NOT_PENDING_RECIPIENT" | "TOKENOPS_TRANSFER_EXPIRED" | "TOKENOPS_ALREADY_CLAIMED" | "TOKENOPS_CLAIM_NOT_STARTED" | "TOKENOPS_CLAIM_WINDOW_CLOSED" | "TOKENOPS_NOT_REGISTERED" | "TOKENOPS_ALREADY_REGISTERED" | "TOKENOPS_SUBWALLETS_NOT_APPROVED" | "TOKENOPS_SINGLETON_NOT_APPROVED" | "TOKENOPS_FAUCET_SUPPLY_EXHAUSTED" | "TOKENOPS_MERKLE_UUPS_UNSUPPORTED" | "TOKENOPS_NON_STOCK_WRAPPER" | "TOKENOPS_UPGRADEABILITY_NOT_ALLOWED" | "TOKENOPS_FEE_COLLECTOR_SELF_ADMINISTERED" | "TOKENOPS_DEDUP_ID_CONSUMED" | "TOKENOPS_SIGNATURE_EXPIRED" | "TOKENOPS_SALT_COLLISION" | "TOKENOPS_PREDICTION_DRIFT";
16
+ export type TokenOpsSdkErrorCode = "TOKENOPS_UNSUPPORTED_CHAIN" | "TOKENOPS_DEPLOYMENT_ADDRESS_UNAVAILABLE" | "TOKENOPS_MISSING_PUBLIC_CLIENT" | "TOKENOPS_MISSING_WALLET_CLIENT" | "TOKENOPS_MISSING_ACCOUNT" | "TOKENOPS_MISSING_ENCRYPTOR" | "TOKENOPS_MISSING_CLIENT" | "TOKENOPS_INVALID_ARGUMENT" | "TOKENOPS_RECEIPT_EVENT_NOT_FOUND" | "TOKENOPS_RECEIPT_EVENT_AMBIGUOUS" | "TOKENOPS_CONTRACT_REVERT" | "TOKENOPS_PAUSED" | "TOKENOPS_ACCESS_DENIED" | "TOKENOPS_OPERATOR_NOT_APPROVED" | "TOKENOPS_INSUFFICIENT_FEE" | "TOKENOPS_INSUFFICIENT_BALANCE" | "TOKENOPS_BATCH_TOO_LARGE" | "TOKENOPS_FEATURE_DISABLED" | "TOKENOPS_TRANSFER_FAILED" | "TOKENOPS_FHE_HANDLE_NOT_ALLOWED" | "TOKENOPS_ALREADY_INITIALIZED" | "TOKENOPS_REENTRANCY" | "TOKENOPS_INVALID_SIGNATURE" | "TOKENOPS_WALLET_REJECTED" | "TOKENOPS_WALLET_CHAIN_MISMATCH" | "TOKENOPS_NETWORK_ERROR" | "TOKENOPS_INSUFFICIENT_GAS_FUNDS" | "TOKENOPS_UNKNOWN_WRITE_FAILURE" | "TOKENOPS_USER_REJECTED" | "TOKENOPS_SIGNING_FAILED" | "TOKENOPS_RELAYER_UNREACHABLE" | "TOKENOPS_ENCRYPTION_FAILED" | "TOKENOPS_DECRYPTION_FAILED" | "TOKENOPS_USER_DECRYPT_NOT_ALLOWED" | "TOKENOPS_VESTING_NOT_FOUND" | "TOKENOPS_NOT_RECIPIENT" | "TOKENOPS_CLAIM_LOCKED" | "TOKENOPS_VESTING_REVOKED" | "TOKENOPS_NOT_REVOCABLE" | "TOKENOPS_VESTING_EXPIRED" | "TOKENOPS_TRANSFER_ALREADY_PENDING" | "TOKENOPS_NO_PENDING_TRANSFER" | "TOKENOPS_NOT_PENDING_RECIPIENT" | "TOKENOPS_TRANSFER_EXPIRED" | "TOKENOPS_ALREADY_CLAIMED" | "TOKENOPS_CLAIM_NOT_STARTED" | "TOKENOPS_CLAIM_WINDOW_CLOSED" | "TOKENOPS_NOT_REGISTERED" | "TOKENOPS_ALREADY_REGISTERED" | "TOKENOPS_SUBWALLETS_NOT_APPROVED" | "TOKENOPS_SINGLETON_NOT_APPROVED" | "TOKENOPS_FAUCET_SUPPLY_EXHAUSTED" | "TOKENOPS_MERKLE_UUPS_UNSUPPORTED" | "TOKENOPS_NON_STOCK_WRAPPER" | "TOKENOPS_UPGRADEABILITY_NOT_ALLOWED" | "TOKENOPS_FEE_COLLECTOR_SELF_ADMINISTERED" | "TOKENOPS_DEDUP_ID_CONSUMED" | "TOKENOPS_SIGNATURE_EXPIRED" | "TOKENOPS_SALT_COLLISION" | "TOKENOPS_PREDICTION_DRIFT" | "TOKENOPS_UNAUTHORIZED_REDIRECT" | "TOKENOPS_GAS_FEE_NOT_ACCEPTED" | "TOKENOPS_UNRECOGNISED_AIRDROP";
17
17
  /** @public */
18
18
  export interface TokenOpsSdkErrorInit {
19
19
  code: TokenOpsSdkErrorCode;