@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
@@ -1,11 +1,12 @@
1
1
  import { mapZamaError } from './chunk-WMACINXO.js';
2
2
  import { getFhevmAclAddress, requireFhevmAclAddress, ACL_ALLOWED_EVENT } from './chunk-ZWXJTBZO.js';
3
- import { SDK_VERSION, isContractRevert, mapContractRevert } from './chunk-SG65XWH7.js';
4
- import { getFheDisperseSingletonAddress } from './chunk-XGGTQQFH.js';
3
+ import { SDK_VERSION } from './chunk-NWFMBLSQ.js';
4
+ import { isContractRevert, mapContractRevert } from './chunk-4RAAATVY.js';
5
+ import { getFheDisperseSingletonAddress } from './chunk-DZHYSUGY.js';
5
6
  import { normaliseAddress } from './chunk-ZA673I3O.js';
6
- import { withTelemetry } from './chunk-Q2GP5UDC.js';
7
7
  import { asExternalInputProof, asEncryptedHandle } from './chunk-KWFFIJYX.js';
8
8
  import { InvalidArgumentError, TokenOpsSdkError, DeploymentAddressUnavailableError, PausedError, InsufficientFeeError, MissingEncryptorError, ReceiptEventAmbiguousError, MissingWalletClientError, MissingAccountError, BatchTooLargeError } from './chunk-QBJ7O2B4.js';
9
+ import { withTelemetry } from './chunk-Q2GP5UDC.js';
9
10
  import { bytesToHex, keccak256, encodePacked, parseEventLogs, isAddress, getCreate2Address } from 'viem';
10
11
 
11
12
  // src/fhe-disperse/abis/singleton.ts
@@ -1771,6 +1772,44 @@ var NotRegisteredError = class extends TokenOpsSdkError {
1771
1772
  );
1772
1773
  }
1773
1774
  };
1775
+ var SubwalletsNotApprovedError = class extends TokenOpsSdkError {
1776
+ name = "SubwalletsNotApprovedError";
1777
+ constructor(args) {
1778
+ super(
1779
+ `${args.method}: sub-wallets are not fully approved for token ${args.token} \u2014 wallet0: ${args.wallet0Approved}, wallet1: ${args.wallet1Approved}. Call \`approveUserWalletsForToken\` first.`,
1780
+ {
1781
+ code: "TOKENOPS_SUBWALLETS_NOT_APPROVED",
1782
+ cause: args.cause,
1783
+ context: {
1784
+ method: args.method,
1785
+ contractAddress: args.contractAddress,
1786
+ user: args.user,
1787
+ token: args.token,
1788
+ wallet0Approved: args.wallet0Approved,
1789
+ wallet1Approved: args.wallet1Approved
1790
+ }
1791
+ }
1792
+ );
1793
+ }
1794
+ };
1795
+ var SingletonNotApprovedError = class extends TokenOpsSdkError {
1796
+ name = "SingletonNotApprovedError";
1797
+ constructor(args) {
1798
+ super(
1799
+ `${args.method}: ${args.user} has not approved the singleton ${args.contractAddress} as an operator on token ${args.token}. Call setOperator() (see @tokenops/sdk/fhe) before this transaction.`,
1800
+ {
1801
+ code: "TOKENOPS_SINGLETON_NOT_APPROVED",
1802
+ cause: args.cause,
1803
+ context: {
1804
+ method: args.method,
1805
+ contractAddress: args.contractAddress,
1806
+ user: args.user,
1807
+ token: args.token
1808
+ }
1809
+ }
1810
+ );
1811
+ }
1812
+ };
1774
1813
  var AlreadyRegisteredError = class extends TokenOpsSdkError {
1775
1814
  name = "AlreadyRegisteredError";
1776
1815
  constructor(args) {
@@ -2335,13 +2374,32 @@ var ConfidentialDisperseClient = class {
2335
2374
  })
2336
2375
  );
2337
2376
  } else if (mode === "wallet" || mode === "wallet-token-fee") {
2338
- if (!hasApprovedSubwallets.both)
2377
+ if (!hasApprovedSubwallets.both) {
2339
2378
  blockers.push(
2340
2379
  `Wallets not fully approved for token \u2014 wallet0: ${hasApprovedSubwallets.wallet0}, wallet1: ${hasApprovedSubwallets.wallet1}`
2341
2380
  );
2381
+ blockerErrors.push(
2382
+ new SubwalletsNotApprovedError({
2383
+ method: "preflightDisperse",
2384
+ contractAddress: this.address,
2385
+ user: args.user,
2386
+ token: args.token,
2387
+ wallet0Approved: hasApprovedSubwallets.wallet0,
2388
+ wallet1Approved: hasApprovedSubwallets.wallet1
2389
+ })
2390
+ );
2391
+ }
2342
2392
  }
2343
2393
  if (mode === "direct" && hasApprovedSingleton === false) {
2344
2394
  blockers.push("Sender has not approved the singleton as operator on the token");
2395
+ blockerErrors.push(
2396
+ new SingletonNotApprovedError({
2397
+ method: "preflightDisperse",
2398
+ contractAddress: this.address,
2399
+ user: args.user,
2400
+ token: args.token
2401
+ })
2402
+ );
2345
2403
  }
2346
2404
  if (isPaused) {
2347
2405
  blockers.push("Singleton is paused");
@@ -3414,4 +3472,4 @@ var PAUSER_ROLE = "0x65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440
3414
3472
  var WITHDRAWER_ROLE = "0x10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4";
3415
3473
  var DEFAULT_ADMIN_ROLE = "0x0000000000000000000000000000000000000000000000000000000000000000";
3416
3474
 
3417
- export { AlreadyRegisteredError, ConfidentialDisperseClient, DEFAULT_ADMIN_ROLE, DisperseEncryptedReserveNotGrantedError, DisperseSubwalletNotFoundError, FEE_COLLECTOR_ROLE, FEE_MANAGER_ROLE, NotRegisteredError, PAUSER_ROLE, WITHDRAWER_ROLE, computeSubtotals, createConfidentialDisperseClient, disperseConfidentialAbi, disperseWalletAbi, encryptUint64, encryptUint64Batch, resolveEncryptor };
3475
+ export { AlreadyRegisteredError, ConfidentialDisperseClient, DEFAULT_ADMIN_ROLE, DisperseEncryptedReserveNotGrantedError, DisperseSubwalletNotFoundError, FEE_COLLECTOR_ROLE, FEE_MANAGER_ROLE, NotRegisteredError, PAUSER_ROLE, SingletonNotApprovedError, SubwalletsNotApprovedError, WITHDRAWER_ROLE, computeSubtotals, createConfidentialDisperseClient, disperseConfidentialAbi, disperseWalletAbi, encryptUint64, encryptUint64Batch, resolveEncryptor };
@@ -1,8 +1,9 @@
1
1
  'use strict';
2
2
 
3
- var chunk5X5WL5CU_cjs = require('./chunk-5X5WL5CU.cjs');
4
- var chunkC7BRZXJA_cjs = require('./chunk-C7BRZXJA.cjs');
5
- var chunkPUPKNW3R_cjs = require('./chunk-PUPKNW3R.cjs');
3
+ var chunkWJLECC22_cjs = require('./chunk-WJLECC22.cjs');
4
+ var chunk3QHNYEQD_cjs = require('./chunk-3QHNYEQD.cjs');
5
+ var chunk6PXXGACR_cjs = require('./chunk-6PXXGACR.cjs');
6
+ var chunk5576FRT3_cjs = require('./chunk-5576FRT3.cjs');
6
7
  var chunk67OV5CX2_cjs = require('./chunk-67OV5CX2.cjs');
7
8
  var react = require('react');
8
9
  var wagmi = require('wagmi');
@@ -25,7 +26,7 @@ function useHookFiredEvent(hookName, telemetry, hasWallet, chainId) {
25
26
  function tryResolveFactoryAddress(override, chainId) {
26
27
  if (override) return override;
27
28
  if (chainId === void 0) return void 0;
28
- return chunkPUPKNW3R_cjs.getFheVestingFactoryAddress(chainId);
29
+ return chunk5576FRT3_cjs.getFheVestingFactoryAddress(chainId);
29
30
  }
30
31
  function useMemoFactoryClient(opts = {}) {
31
32
  const publicClient = wagmi.usePublicClient({ chainId: opts.chainId });
@@ -38,7 +39,7 @@ function useMemoFactoryClient(opts = {}) {
38
39
  const client = react.useMemo(() => {
39
40
  if (!publicClient) return void 0;
40
41
  if (!resolvedAddress) return void 0;
41
- return chunkC7BRZXJA_cjs.createConfidentialVestingFactoryClient({
42
+ return chunk6PXXGACR_cjs.createConfidentialVestingFactoryClient({
42
43
  publicClient,
43
44
  ...walletClient ? { walletClient } : {},
44
45
  address: resolvedAddress,
@@ -65,7 +66,7 @@ function computeFactoryResolutionError(override, chainId) {
65
66
  clientLabel: "ConfidentialVestingFactoryClient"
66
67
  });
67
68
  }
68
- const resolved = chunkPUPKNW3R_cjs.getFheVestingFactoryAddress(chainId);
69
+ const resolved = chunk5576FRT3_cjs.getFheVestingFactoryAddress(chainId);
69
70
  if (!resolved) {
70
71
  return new chunk67OV5CX2_cjs.DeploymentAddressUnavailableError({
71
72
  reason: "registry-not-deployed",
@@ -88,13 +89,13 @@ function useMemoManagerClient(opts) {
88
89
  const client = react.useMemo(() => {
89
90
  if (!publicClient) return void 0;
90
91
  if (!opts.address) return void 0;
91
- return chunk5X5WL5CU_cjs.createConfidentialVestingManagerClient({
92
+ return chunkWJLECC22_cjs.createConfidentialVestingManagerClient({
92
93
  publicClient,
93
94
  ...walletClient ? { walletClient } : {},
94
95
  address: opts.address,
95
96
  // Lazy — invoked per-encryption inside the headless client. Picks up
96
97
  // whichever EncryptorSource the consumer last passed in.
97
- encryptor: () => chunk5X5WL5CU_cjs.resolveEncryptor(encryptorSourceRef.current),
98
+ encryptor: () => chunk3QHNYEQD_cjs.resolveEncryptor(encryptorSourceRef.current),
98
99
  ...opts.aclAddress ? { aclAddress: opts.aclAddress } : {},
99
100
  ...telemetry ? { telemetry } : {}
100
101
  });
@@ -2,12 +2,13 @@
2
2
 
3
3
  var chunkTEBM66WA_cjs = require('./chunk-TEBM66WA.cjs');
4
4
  var chunkFAXIIH5R_cjs = require('./chunk-FAXIIH5R.cjs');
5
- var chunkKLKI352M_cjs = require('./chunk-KLKI352M.cjs');
6
- var chunkPUPKNW3R_cjs = require('./chunk-PUPKNW3R.cjs');
5
+ var chunkUG5RKLU2_cjs = require('./chunk-UG5RKLU2.cjs');
6
+ var chunkMVDQMV25_cjs = require('./chunk-MVDQMV25.cjs');
7
+ var chunk5576FRT3_cjs = require('./chunk-5576FRT3.cjs');
7
8
  var chunkJK4XMMKM_cjs = require('./chunk-JK4XMMKM.cjs');
8
- var chunkVJKZWYYJ_cjs = require('./chunk-VJKZWYYJ.cjs');
9
9
  var chunk66IHPTOK_cjs = require('./chunk-66IHPTOK.cjs');
10
10
  var chunk67OV5CX2_cjs = require('./chunk-67OV5CX2.cjs');
11
+ var chunkVJKZWYYJ_cjs = require('./chunk-VJKZWYYJ.cjs');
11
12
  var viem = require('viem');
12
13
 
13
14
  // src/fhe-disperse/abis/singleton.ts
@@ -1773,6 +1774,44 @@ var NotRegisteredError = class extends chunk67OV5CX2_cjs.TokenOpsSdkError {
1773
1774
  );
1774
1775
  }
1775
1776
  };
1777
+ var SubwalletsNotApprovedError = class extends chunk67OV5CX2_cjs.TokenOpsSdkError {
1778
+ name = "SubwalletsNotApprovedError";
1779
+ constructor(args) {
1780
+ super(
1781
+ `${args.method}: sub-wallets are not fully approved for token ${args.token} \u2014 wallet0: ${args.wallet0Approved}, wallet1: ${args.wallet1Approved}. Call \`approveUserWalletsForToken\` first.`,
1782
+ {
1783
+ code: "TOKENOPS_SUBWALLETS_NOT_APPROVED",
1784
+ cause: args.cause,
1785
+ context: {
1786
+ method: args.method,
1787
+ contractAddress: args.contractAddress,
1788
+ user: args.user,
1789
+ token: args.token,
1790
+ wallet0Approved: args.wallet0Approved,
1791
+ wallet1Approved: args.wallet1Approved
1792
+ }
1793
+ }
1794
+ );
1795
+ }
1796
+ };
1797
+ var SingletonNotApprovedError = class extends chunk67OV5CX2_cjs.TokenOpsSdkError {
1798
+ name = "SingletonNotApprovedError";
1799
+ constructor(args) {
1800
+ super(
1801
+ `${args.method}: ${args.user} has not approved the singleton ${args.contractAddress} as an operator on token ${args.token}. Call setOperator() (see @tokenops/sdk/fhe) before this transaction.`,
1802
+ {
1803
+ code: "TOKENOPS_SINGLETON_NOT_APPROVED",
1804
+ cause: args.cause,
1805
+ context: {
1806
+ method: args.method,
1807
+ contractAddress: args.contractAddress,
1808
+ user: args.user,
1809
+ token: args.token
1810
+ }
1811
+ }
1812
+ );
1813
+ }
1814
+ };
1776
1815
  var AlreadyRegisteredError = class extends chunk67OV5CX2_cjs.TokenOpsSdkError {
1777
1816
  name = "AlreadyRegisteredError";
1778
1817
  constructor(args) {
@@ -2013,7 +2052,7 @@ var ConfidentialDisperseClient = class {
2013
2052
  this.#telemetry = config.telemetry;
2014
2053
  const chainId = config.chainId ?? config.publicClient.chain?.id;
2015
2054
  const addressOverride = config.address ? chunkJK4XMMKM_cjs.normaliseAddress(config.address) : void 0;
2016
- const resolved = addressOverride ?? (chainId === void 0 ? void 0 : chunkPUPKNW3R_cjs.getFheDisperseSingletonAddress(chainId));
2055
+ const resolved = addressOverride ?? (chainId === void 0 ? void 0 : chunk5576FRT3_cjs.getFheDisperseSingletonAddress(chainId));
2017
2056
  if (!resolved) {
2018
2057
  throw new chunk67OV5CX2_cjs.DeploymentAddressUnavailableError({
2019
2058
  reason: chainId === void 0 ? "chain-id-missing" : "registry-not-deployed",
@@ -2030,7 +2069,7 @@ var ConfidentialDisperseClient = class {
2030
2069
  chainId: chainId ?? null,
2031
2070
  hasWallet: !!this.walletClient,
2032
2071
  aclResolved: !!config.aclAddress || chainId !== void 0 && !!chunkFAXIIH5R_cjs.getFhevmAclAddress(chainId),
2033
- sdkVersion: chunkKLKI352M_cjs.SDK_VERSION
2072
+ sdkVersion: chunkUG5RKLU2_cjs.SDK_VERSION
2034
2073
  });
2035
2074
  }
2036
2075
  /**
@@ -2337,13 +2376,32 @@ var ConfidentialDisperseClient = class {
2337
2376
  })
2338
2377
  );
2339
2378
  } else if (mode === "wallet" || mode === "wallet-token-fee") {
2340
- if (!hasApprovedSubwallets.both)
2379
+ if (!hasApprovedSubwallets.both) {
2341
2380
  blockers.push(
2342
2381
  `Wallets not fully approved for token \u2014 wallet0: ${hasApprovedSubwallets.wallet0}, wallet1: ${hasApprovedSubwallets.wallet1}`
2343
2382
  );
2383
+ blockerErrors.push(
2384
+ new SubwalletsNotApprovedError({
2385
+ method: "preflightDisperse",
2386
+ contractAddress: this.address,
2387
+ user: args.user,
2388
+ token: args.token,
2389
+ wallet0Approved: hasApprovedSubwallets.wallet0,
2390
+ wallet1Approved: hasApprovedSubwallets.wallet1
2391
+ })
2392
+ );
2393
+ }
2344
2394
  }
2345
2395
  if (mode === "direct" && hasApprovedSingleton === false) {
2346
2396
  blockers.push("Sender has not approved the singleton as operator on the token");
2397
+ blockerErrors.push(
2398
+ new SingletonNotApprovedError({
2399
+ method: "preflightDisperse",
2400
+ contractAddress: this.address,
2401
+ user: args.user,
2402
+ token: args.token
2403
+ })
2404
+ );
2347
2405
  }
2348
2406
  if (isPaused) {
2349
2407
  blockers.push("Singleton is paused");
@@ -3231,13 +3289,13 @@ var ConfidentialDisperseClient = class {
3231
3289
  ...value !== void 0 ? { value } : {}
3232
3290
  });
3233
3291
  } catch (err) {
3234
- if (chunkKLKI352M_cjs.isContractRevert(err)) {
3292
+ if (chunkMVDQMV25_cjs.isContractRevert(err)) {
3235
3293
  throw this.#mapRevert(method, err, productContext, accountAddress(account));
3236
3294
  }
3237
3295
  }
3238
3296
  }
3239
3297
  #mapRevert(method, err, productContext, account) {
3240
- return chunkKLKI352M_cjs.mapContractRevert(err, {
3298
+ return chunkMVDQMV25_cjs.mapContractRevert(err, {
3241
3299
  method,
3242
3300
  contractAddress: this.address,
3243
3301
  abi: disperseConfidentialAbi,
@@ -3425,6 +3483,8 @@ exports.FEE_COLLECTOR_ROLE = FEE_COLLECTOR_ROLE;
3425
3483
  exports.FEE_MANAGER_ROLE = FEE_MANAGER_ROLE;
3426
3484
  exports.NotRegisteredError = NotRegisteredError;
3427
3485
  exports.PAUSER_ROLE = PAUSER_ROLE;
3486
+ exports.SingletonNotApprovedError = SingletonNotApprovedError;
3487
+ exports.SubwalletsNotApprovedError = SubwalletsNotApprovedError;
3428
3488
  exports.WITHDRAWER_ROLE = WITHDRAWER_ROLE;
3429
3489
  exports.computeSubtotals = computeSubtotals;
3430
3490
  exports.createConfidentialDisperseClient = createConfidentialDisperseClient;
@@ -1,8 +1,9 @@
1
1
  'use strict';
2
2
 
3
+ var chunkFWHYQZ5E_cjs = require('./chunk-FWHYQZ5E.cjs');
3
4
  var chunkJK4XMMKM_cjs = require('./chunk-JK4XMMKM.cjs');
4
- var chunkVJKZWYYJ_cjs = require('./chunk-VJKZWYYJ.cjs');
5
5
  var chunk67OV5CX2_cjs = require('./chunk-67OV5CX2.cjs');
6
+ var chunkVJKZWYYJ_cjs = require('./chunk-VJKZWYYJ.cjs');
6
7
 
7
8
  // src/fhe/operators.ts
8
9
  var ERC7984_SET_OPERATOR_ABI = [
@@ -94,8 +95,67 @@ async function revokeOperator(args) {
94
95
  });
95
96
  });
96
97
  }
98
+ async function isOperator(args) {
99
+ const token = chunkJK4XMMKM_cjs.normaliseAddress(args.token);
100
+ const holder = chunkJK4XMMKM_cjs.normaliseAddress(args.holder);
101
+ const spender = chunkJK4XMMKM_cjs.normaliseAddress(args.spender);
102
+ return chunkVJKZWYYJ_cjs.withTelemetry(args.telemetry, "fhe.isOperator", async () => {
103
+ try {
104
+ return await args.publicClient.readContract({
105
+ address: token,
106
+ abi: chunkFWHYQZ5E_cjs.erc7984OperatorAbi,
107
+ functionName: "isOperator",
108
+ args: [holder, spender]
109
+ });
110
+ } catch (err) {
111
+ throw new chunk67OV5CX2_cjs.TokenOpsContractError(
112
+ `isOperator: readContract failed (token=${token}, holder=${holder}, spender=${spender})`,
113
+ { contract: "ERC7984", call: "isOperator", token, holder, spender, cause: err }
114
+ );
115
+ }
116
+ });
117
+ }
118
+ async function ensureOperator(args) {
119
+ return chunkVJKZWYYJ_cjs.withTelemetry(args.telemetry, "fhe.ensureOperator", async () => {
120
+ if (args.deadline <= 0n || args.deadline > ERC7984_OPERATOR_MAX_DEADLINE) {
121
+ throw new chunk67OV5CX2_cjs.TokenOpsContractError(
122
+ `ensureOperator: deadline ${args.deadline} out of range (0, ${ERC7984_OPERATOR_MAX_DEADLINE}]`,
123
+ { contract: "ERC7984", call: "ensureOperator", deadline: args.deadline.toString() }
124
+ );
125
+ }
126
+ const fromAccount = args.account ?? args.walletClient.account;
127
+ if (!fromAccount) {
128
+ throw new chunk67OV5CX2_cjs.TokenOpsContractError(
129
+ "ensureOperator: no account available \u2014 pass `account` explicitly or attach an account to the walletClient",
130
+ { contract: "ERC7984", call: "ensureOperator" }
131
+ );
132
+ }
133
+ const holder = typeof fromAccount === "string" ? fromAccount : fromAccount.address;
134
+ const authorized = await isOperator({
135
+ publicClient: args.publicClient,
136
+ token: args.token,
137
+ holder,
138
+ spender: args.spender
139
+ });
140
+ if (authorized) {
141
+ return { alreadyOperator: true, hash: null };
142
+ }
143
+ const hash = await setOperator({
144
+ publicClient: args.publicClient,
145
+ walletClient: args.walletClient,
146
+ ...args.account !== void 0 ? { account: args.account } : {},
147
+ token: args.token,
148
+ spender: args.spender,
149
+ deadline: args.deadline,
150
+ ...args.waitForReceipt !== void 0 ? { waitForReceipt: args.waitForReceipt } : {}
151
+ });
152
+ return { alreadyOperator: false, hash };
153
+ });
154
+ }
97
155
 
98
156
  exports.ERC7984_OPERATOR_MAX_DEADLINE = ERC7984_OPERATOR_MAX_DEADLINE;
99
157
  exports.ERC7984_SET_OPERATOR_ABI = ERC7984_SET_OPERATOR_ABI;
158
+ exports.ensureOperator = ensureOperator;
159
+ exports.isOperator = isOperator;
100
160
  exports.revokeOperator = revokeOperator;
101
161
  exports.setOperator = setOperator;