@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,28 @@
1
+ import { type UseMutationResult } from "@tanstack/react-query";
2
+ import type { Address, Hex } from "viem";
3
+ import type { WriteAccountOverride } from "../../airdrop-base.js";
4
+ import { type AirdropClientOptions } from "../../react/_shared.js";
5
+ /** @alpha */
6
+ export interface ClearCompliancePolicyArgs extends WriteAccountOverride {
7
+ /** The creator whose override is dropped - not the admin sending the transaction. */
8
+ creator: Address;
9
+ }
10
+ /**
11
+ * Drop a creator's {@link useSetCompliancePolicy} override, reverting them to
12
+ * the factory default. Requires `COMPLIANCE_WIRING_ROLE`.
13
+ *
14
+ * The cleared state is `overridden: false, delegateToCompliance: false`, so
15
+ * `effectiveDelegateToCompliance` then follows the factory default set by
16
+ * {@link useSetDefaultDelegateToCompliance} rather than staying at whatever
17
+ * the override had been.
18
+ *
19
+ * **Invalidates:** `fn "compliancePolicy"` and
20
+ * `fn "effectiveDelegateToCompliance"`, both keyed on `args.creator`.
21
+ *
22
+ * @example
23
+ * const clearPolicy = useClearCompliancePolicy();
24
+ * await clearPolicy.mutateAsync({ creator });
25
+ *
26
+ * @alpha
27
+ */
28
+ export declare function useClearCompliancePolicy(options?: AirdropClientOptions): UseMutationResult<Hex, Error, ClearCompliancePolicyArgs>;
@@ -0,0 +1,26 @@
1
+ import { type UseMutationResult } from "@tanstack/react-query";
2
+ import type { Address, Hex } from "viem";
3
+ import type { WriteAccountOverride } from "../../airdrop-base.js";
4
+ import { type AirdropClientOptions } from "../../react/_shared.js";
5
+ /** @alpha */
6
+ export interface ClearUpgradeabilityPolicyArgs extends WriteAccountOverride {
7
+ /** The creator whose override is dropped - not the admin sending the transaction. */
8
+ creator: Address;
9
+ }
10
+ /**
11
+ * Drop a creator's {@link useSetUpgradeabilityPolicy} override, reverting
12
+ * them to the factory default. Requires `UPGRADE_MANAGER_ROLE`.
13
+ *
14
+ * **Invalidates:** `fn "effectiveUpgradeable"` and `fn "upgradeabilityPolicy"`, both
15
+ * keyed on `args.creator`, plus the `fn "preflightCreate"` PREFIX. Reverting to the
16
+ * default flips `effectiveUpgradeable` exactly as setting an override does, and
17
+ * `preflightCreate` reads it to decide whether a `mode: "uups"` create is refused - so
18
+ * omitting the prefix here would leave a create form showing a stale allow/deny.
19
+ *
20
+ * @example
21
+ * const clearPolicy = useClearUpgradeabilityPolicy();
22
+ * await clearPolicy.mutateAsync({ creator });
23
+ *
24
+ * @alpha
25
+ */
26
+ export declare function useClearUpgradeabilityPolicy(options?: AirdropClientOptions): UseMutationResult<Hex, Error, ClearUpgradeabilityPolicyArgs>;
@@ -0,0 +1,26 @@
1
+ import { type UseMutationResult } from "@tanstack/react-query";
2
+ import type { Address, Hex } from "viem";
3
+ import type { WriteAccountOverride } from "../../airdrop-base.js";
4
+ import { type AirdropClientOptions } from "../../react/_shared.js";
5
+ /** @alpha */
6
+ export interface DisableCustomFeeArgs extends WriteAccountOverride {
7
+ /** The creator whose override is dropped - NOT the admin sending the transaction. */
8
+ creator: Address;
9
+ }
10
+ /**
11
+ * Drop a creator's per-creator fee override, reverting them to the factory's
12
+ * `defaultGasFee`.
13
+ *
14
+ * Requires `FEE_MANAGER_ROLE`.
15
+ *
16
+ * **Invalidates:** `useFactoryCustomFee({ creator })` for the TARGET creator -
17
+ * `variables.creator`, never the sending admin. Also every `useResolveGasFee`
18
+ * entry: dropping the override sends this creator back to the default.
19
+ *
20
+ * @example
21
+ * const disableCustomFee = useDisableCustomFee();
22
+ * await disableCustomFee.mutateAsync({ creator });
23
+ *
24
+ * @alpha
25
+ */
26
+ export declare function useDisableCustomFee(options?: AirdropClientOptions): UseMutationResult<Hex, Error, DisableCustomFeeArgs>;
@@ -0,0 +1,30 @@
1
+ import { type UseQueryResult } from "@tanstack/react-query";
2
+ import type { Hex } from "viem";
3
+ import type { DeploymentMode } from "../../constants.js";
4
+ import { type AirdropHookOptions } from "../../react/_shared.js";
5
+ import type { EcdsaAirdropParams } from "../../types.js";
6
+ /** @alpha */
7
+ export interface UseEcdsaInitCodeHashArgs extends AirdropHookOptions<Hex> {
8
+ params: EcdsaAirdropParams;
9
+ mode: DeploymentMode;
10
+ }
11
+ /**
12
+ * Init-code hash of the ECDSA proxy the factory would deploy for `mode`.
13
+ *
14
+ * The hash tracks the factory's current implementation pointer, so it exists
15
+ * to bracket a prediction for freshness: read it before a campaign build and
16
+ * again after, and a change between the two means an implementation swap
17
+ * landed mid-flight and every address derived from
18
+ * {@link usePredictEcdsaAirdropAddress} is stale. Feed the first observation
19
+ * to `usePreflightCreateAirdrop`'s `expectedInitCodeHash` to have the drift
20
+ * check made for you.
21
+ *
22
+ * Lives on `/advanced/react` beside the predict hooks rather than the
23
+ * headline subpath: on its own the hash answers nothing a UI can act on.
24
+ *
25
+ * @example
26
+ * const before = useEcdsaInitCodeHash({ params, mode: "clone" });
27
+ *
28
+ * @alpha
29
+ */
30
+ export declare function useEcdsaInitCodeHash(args: UseEcdsaInitCodeHashArgs): UseQueryResult<Hex, Error>;
@@ -0,0 +1,25 @@
1
+ import { type UseQueryResult } from "@tanstack/react-query";
2
+ import type { Address } from "viem";
3
+ import { type AirdropHookOptions } from "../../react/_shared.js";
4
+ /** @alpha */
5
+ export type UseFactoryComplianceDelegateArgs = AirdropHookOptions<Address>;
6
+ /**
7
+ * The platform-designated compliance delegate the FACTORY wires into every
8
+ * new compliance-manager clone.
9
+ *
10
+ * Deliberately unbundled: its being set is what gates
11
+ * {@link useSetDefaultDelegateToCompliance} with `on: true` (that write
12
+ * reverts `ZeroComplianceDelegate` against the zero address), so an admin
13
+ * panel reads it alone to decide whether to enable the toggle at all.
14
+ *
15
+ * **Not** `ComplianceManagerClient.complianceDelegate()`. That method has the
16
+ * same name on a different contract and returns the delegate one already-
17
+ * deployed manager clone actually uses; this is the factory-level value
18
+ * applied to future clones.
19
+ *
20
+ * @example
21
+ * const { data: delegate } = useFactoryComplianceDelegate();
22
+ *
23
+ * @alpha
24
+ */
25
+ export declare function useFactoryComplianceDelegate(args?: UseFactoryComplianceDelegateArgs): UseQueryResult<Address, Error>;
@@ -0,0 +1,38 @@
1
+ import { type UseQueryResult } from "@tanstack/react-query";
2
+ import type { Address } from "viem";
3
+ import { type AirdropHookOptions } from "../../react/_shared.js";
4
+ /**
5
+ * One creator's delegate-to-compliance override plus what actually applies.
6
+ *
7
+ * @alpha
8
+ */
9
+ export interface FactoryCompliancePolicy {
10
+ /** Whether this creator has an override at all. `false` means the factory default applies. */
11
+ overridden: boolean;
12
+ /** The override's value. Meaningless while `overridden` is `false`. */
13
+ delegateToCompliance: boolean;
14
+ /** What the factory actually resolves for this creator - the override if `overridden`, else the default. */
15
+ effective: boolean;
16
+ }
17
+ /** @alpha */
18
+ export interface UseFactoryCompliancePolicyArgs extends AirdropHookOptions<FactoryCompliancePolicy> {
19
+ /** The creator whose policy to inspect. */
20
+ creator?: Address;
21
+ }
22
+ /**
23
+ * The admin's per-creator compliance view: the stored override AND the value
24
+ * the factory resolves for that creator. Bundled because only the pair
25
+ * answers "is this creator's setting doing anything?" - an `overridden: true`
26
+ * whose `delegateToCompliance` already matches the default is a no-op a panel
27
+ * should show as such.
28
+ *
29
+ * Overlaps the creator-facing `useEffectiveDelegateToCompliance` by its
30
+ * `effective` field. Intentional: different subpath, different audience, same
31
+ * split as `useEffectiveUpgradeable` vs {@link useFactoryUpgradeabilityPolicy}.
32
+ *
33
+ * @example
34
+ * const { data: policy } = useFactoryCompliancePolicy({ creator });
35
+ *
36
+ * @alpha
37
+ */
38
+ export declare function useFactoryCompliancePolicy(args?: UseFactoryCompliancePolicyArgs): UseQueryResult<FactoryCompliancePolicy, Error>;
@@ -0,0 +1,24 @@
1
+ import { type UseQueryResult } from "@tanstack/react-query";
2
+ import type { Address } from "viem";
3
+ import type { CustomFee } from "../../factory.js";
4
+ import { type AirdropHookOptions } from "../../react/_shared.js";
5
+ /** @alpha */
6
+ export interface UseFactoryCustomFeeArgs extends AirdropHookOptions<CustomFee> {
7
+ /** The creator whose override to read. Disabled until set. */
8
+ creator?: Address;
9
+ }
10
+ /**
11
+ * Read one creator's per-claim fee override. `enabled: false` means the
12
+ * factory's `defaultGasFee` (see `useFactoryFees`) applies to them instead.
13
+ *
14
+ * Kept out of the `useFactoryFees` bundle on purpose: this read is
15
+ * per-creator, and folding it in would put a creator address into that
16
+ * chain-wide fee key and fragment the cache one slot per creator.
17
+ *
18
+ * @example
19
+ * const { data: custom } = useFactoryCustomFee({ creator });
20
+ * const fee = custom?.enabled ? custom.gasFee : fees?.defaultGasFee;
21
+ *
22
+ * @alpha
23
+ */
24
+ export declare function useFactoryCustomFee(args?: UseFactoryCustomFeeArgs): UseQueryResult<CustomFee, Error>;
@@ -0,0 +1,32 @@
1
+ import { type UseMutationResult } from "@tanstack/react-query";
2
+ import type { Address, Hex } from "viem";
3
+ import type { WriteAccountOverride } from "../../airdrop-base.js";
4
+ import { type AirdropClientOptions } from "../../react/_shared.js";
5
+ /** @alpha */
6
+ export interface FactoryGrantRoleArgs extends WriteAccountOverride {
7
+ /** A `bytes32` role identifier - from {@link useFactoryRoleConstants}, never hand-hashed. */
8
+ role: Hex;
9
+ /** The account receiving the role. Distinct from `account`, which is who sends the transaction. */
10
+ holder: Address;
11
+ }
12
+ /**
13
+ * Grant one factory role.
14
+ *
15
+ * Requires `DEFAULT_ADMIN_ROLE`: the factory administers all five of its roles
16
+ * through the root role and never calls `_setRoleAdmin`, so unlike an airdrop
17
+ * instance there is no self-administered role here - one admin key can grant
18
+ * every one of them.
19
+ *
20
+ * **Invalidates:** this factory's {@link useFactoryHasRole} entry for exactly
21
+ * `(role, holder)` and its {@link useFactoryRoleMembers} entry for `role` (the
22
+ * list and the count both move). Keyed off `variables.holder`, never the
23
+ * sending `account` - the submitter is an admin whose own membership does not
24
+ * change here.
25
+ *
26
+ * @example
27
+ * const grant = useFactoryGrantRole();
28
+ * await grant.mutateAsync({ role: roles.FEE_MANAGER_ROLE, holder: opsAddress });
29
+ *
30
+ * @alpha
31
+ */
32
+ export declare function useFactoryGrantRole(options?: AirdropClientOptions): UseMutationResult<Hex, Error, FactoryGrantRoleArgs>;
@@ -0,0 +1,27 @@
1
+ import { type UseQueryResult } from "@tanstack/react-query";
2
+ import type { Address, Hex } from "viem";
3
+ import { type AirdropHookOptions } from "../../react/_shared.js";
4
+ /** @alpha */
5
+ export interface UseFactoryHasRoleArgs extends AirdropHookOptions<boolean> {
6
+ /** A `bytes32` role identifier - from {@link useFactoryRoleConstants}, never hand-hashed. */
7
+ role?: Hex;
8
+ /** The account to check. */
9
+ holder?: Address;
10
+ }
11
+ /**
12
+ * Whether `holder` holds `role` on the factory.
13
+ *
14
+ * Stays disabled (no request fired) until both `role` and `holder` are defined,
15
+ * so a UI can call it unconditionally while a form is still being filled in.
16
+ *
17
+ * Named apart from the instance-level `useAirdropHasRole` and the clone-level
18
+ * `useComplianceHasRole` because these are three different contracts' role
19
+ * sets; the cache never confuses them either, since the key's address segment
20
+ * is the factory.
21
+ *
22
+ * @example
23
+ * const { data: isFeeManager } = useFactoryHasRole({ role: roles?.FEE_MANAGER_ROLE, holder });
24
+ *
25
+ * @alpha
26
+ */
27
+ export declare function useFactoryHasRole(args?: UseFactoryHasRoleArgs): UseQueryResult<boolean, Error>;
@@ -0,0 +1,33 @@
1
+ import { type UseQueryResult } from "@tanstack/react-query";
2
+ import type { Address } from "viem";
3
+ import { type AirdropHookOptions } from "../../react/_shared.js";
4
+ /**
5
+ * The three implementation pointers future clones are cut from.
6
+ *
7
+ * @alpha
8
+ */
9
+ export interface FactoryImplementations {
10
+ /** What `createEcdsaAirdrop*` currently clones. */
11
+ ecdsa: Address;
12
+ /** What `createMerkleAirdrop*` currently clones. */
13
+ merkle: Address;
14
+ /** What each new compliance-manager clone is cut from. */
15
+ complianceManager: Address;
16
+ }
17
+ /** @alpha */
18
+ export type UseFactoryImplementationsArgs = AirdropHookOptions<FactoryImplementations>;
19
+ /**
20
+ * Read all three of the factory's implementation pointers in one round trip -
21
+ * the row an admin panel shows together, so they are bundled rather than
22
+ * shipped as three one-line hooks over three parallel `eth_call`s.
23
+ *
24
+ * These describe FUTURE creates only. Already-deployed instances and
25
+ * compliance-manager clones stay pinned to whatever was live when they were
26
+ * created.
27
+ *
28
+ * @example
29
+ * const { data: impls } = useFactoryImplementations();
30
+ *
31
+ * @alpha
32
+ */
33
+ export declare function useFactoryImplementations(args?: UseFactoryImplementationsArgs): UseQueryResult<FactoryImplementations, Error>;
@@ -0,0 +1,37 @@
1
+ import { type UseMutationResult } from "@tanstack/react-query";
2
+ import type { Hex } from "viem";
3
+ import type { WriteAccountOverride } from "../../airdrop-base.js";
4
+ import { type AirdropClientOptions } from "../../react/_shared.js";
5
+ /** @alpha */
6
+ export interface FactoryRenounceRoleArgs extends WriteAccountOverride {
7
+ /** A `bytes32` role identifier - from {@link useFactoryRoleConstants}, never hand-hashed. */
8
+ role: Hex;
9
+ }
10
+ /**
11
+ * Give up a factory role yourself.
12
+ *
13
+ * Self-only by construction: the contract's `renounceRole(role, callerConfirmation)`
14
+ * reverts `AccessControlBadConfirmation` unless the confirmation is the sender,
15
+ * so there is no holder to pass - the headless client fills it from the
16
+ * resolved sending account. To remove a role from somebody else use
17
+ * {@link useFactoryRevokeRole}.
18
+ *
19
+ * **A sole `DEFAULT_ADMIN_ROLE` holder cannot renounce** (audit-14): the factory
20
+ * carries the same `LastAdmin` floor the instances do, so the call reverts
21
+ * instead of freezing role administration permanently. Grant the successor
22
+ * first, then renounce.
23
+ *
24
+ * **Invalidates:** every {@link useFactoryHasRole} entry for this factory
25
+ * (prefix, all role/holder pairs), plus its {@link useFactoryRoleMembers} entry
26
+ * for `role`. The prefix is deliberate - the holder here is whichever account
27
+ * the wallet client resolves at submit time, which need not match any
28
+ * `(role, holder)` pair a component happens to have cached, and a narrower key
29
+ * would invalidate nothing while throwing nothing.
30
+ *
31
+ * @example
32
+ * const renounce = useFactoryRenounceRole();
33
+ * await renounce.mutateAsync({ role: roles.UPGRADE_MANAGER_ROLE });
34
+ *
35
+ * @alpha
36
+ */
37
+ export declare function useFactoryRenounceRole(options?: AirdropClientOptions): UseMutationResult<Hex, Error, FactoryRenounceRoleArgs>;
@@ -0,0 +1,37 @@
1
+ import { type UseMutationResult } from "@tanstack/react-query";
2
+ import type { Address, Hex } from "viem";
3
+ import type { WriteAccountOverride } from "../../airdrop-base.js";
4
+ import { type AirdropClientOptions } from "../../react/_shared.js";
5
+ /** @alpha */
6
+ export interface FactoryRevokeRoleArgs extends WriteAccountOverride {
7
+ /** A `bytes32` role identifier - from {@link useFactoryRoleConstants}, never hand-hashed. */
8
+ role: Hex;
9
+ /** The account losing the role. Distinct from `account`, which is who sends the transaction. */
10
+ holder: Address;
11
+ }
12
+ /**
13
+ * Revoke one factory role from one holder.
14
+ *
15
+ * Requires `DEFAULT_ADMIN_ROLE`, which administers all five factory roles.
16
+ *
17
+ * **`DEFAULT_ADMIN_ROLE` is floored at one live member** (audit-14). Revoking
18
+ * the last holder reverts `LastAdmin` rather than succeeding and freezing role
19
+ * administration, which is what it used to do. Granting the role to the zero
20
+ * address reverts `ZeroAdminGrant`, so the floor cannot be satisfied with a
21
+ * member nobody controls either.
22
+ *
23
+ * On the live deployment all five roles sit on one key, so a handover is two
24
+ * steps: grant the successor, then revoke. Show {@link useFactoryRoleMembers}'s
25
+ * `count` next to the button and disable it at `1n`.
26
+ *
27
+ * **Invalidates:** this factory's {@link useFactoryHasRole} entry for exactly
28
+ * `(role, holder)` and its {@link useFactoryRoleMembers} entry for `role`.
29
+ * Keyed off `variables.holder`, never the sending `account`.
30
+ *
31
+ * @example
32
+ * const revoke = useFactoryRevokeRole();
33
+ * await revoke.mutateAsync({ role: roles.IMPL_MANAGER_ROLE, holder: formerOpsAddress });
34
+ *
35
+ * @alpha
36
+ */
37
+ export declare function useFactoryRevokeRole(options?: AirdropClientOptions): UseMutationResult<Hex, Error, FactoryRevokeRoleArgs>;
@@ -0,0 +1,46 @@
1
+ import { type UseQueryResult } from "@tanstack/react-query";
2
+ import type { Hex } from "viem";
3
+ import { type AirdropHookOptions } from "../../react/_shared.js";
4
+ /**
5
+ * The five `bytes32` role identifiers the factory's admin surface is gated on.
6
+ *
7
+ * @alpha
8
+ */
9
+ export interface FactoryRoleConstants {
10
+ /** Gates `useSetFeeCollector`, `useSetDefaultGasFee`, `useSetCustomFee`, `useDisableCustomFee`. */
11
+ FEE_MANAGER_ROLE: Hex;
12
+ /** Gates `useSetEcdsaImplementation` and `useSetMerkleImplementation`. */
13
+ IMPL_MANAGER_ROLE: Hex;
14
+ /** Gates the compliance-wiring setters. */
15
+ COMPLIANCE_WIRING_ROLE: Hex;
16
+ /** Gates the upgradeability-policy setters. */
17
+ UPGRADE_MANAGER_ROLE: Hex;
18
+ /** OpenZeppelin's root role, read off the factory rather than assumed to be `bytes32(0)`. It administers the other four and itself. */
19
+ DEFAULT_ADMIN_ROLE: Hex;
20
+ }
21
+ /** @alpha */
22
+ export type UseFactoryRoleConstantsArgs = AirdropHookOptions<FactoryRoleConstants>;
23
+ /**
24
+ * Read the factory's role identifiers in one fan-out.
25
+ *
26
+ * Every value is a bytecode constant, so this defaults to `staleTime: Infinity`
27
+ * (overridable through `query`). Feed the results into
28
+ * {@link useFactoryHasRole}, {@link useFactoryRoleMembers} and the three
29
+ * factory role mutations - hand-hashing `keccak256("FEE_MANAGER_ROLE")`
30
+ * client-side would turn a constant renamed in a future factory version into a
31
+ * `grantRole` that silently grants a role nothing checks.
32
+ *
33
+ * Bundled rather than shipped as five one-liners: a role panel needs the whole
34
+ * palette to render at all. Paired with {@link useFactoryRoleMembers} it is
35
+ * also the live check `FACTORY_ROLE_CONCENTRATION_NOTE` asks for - read the
36
+ * five roles, list each one's holders, and see for yourself whether they sit on
37
+ * one key on the chain you are actually connected to, rather than trusting a
38
+ * fixed string about one deployment at one point in time.
39
+ *
40
+ * @example
41
+ * const { data: roles } = useFactoryRoleConstants();
42
+ * const { data: feeManagers } = useFactoryRoleMembers({ role: roles?.FEE_MANAGER_ROLE });
43
+ *
44
+ * @alpha
45
+ */
46
+ export declare function useFactoryRoleConstants(args?: UseFactoryRoleConstantsArgs): UseQueryResult<FactoryRoleConstants, Error>;
@@ -0,0 +1,48 @@
1
+ import { type UseQueryResult } from "@tanstack/react-query";
2
+ import type { Address, Hex } from "viem";
3
+ import { type AirdropHookOptions } from "../../react/_shared.js";
4
+ /**
5
+ * One factory role's membership - the set and its size, read together.
6
+ *
7
+ * @alpha
8
+ */
9
+ export interface FactoryRoleMembership {
10
+ /** Every account currently holding the role, in the contract's `EnumerableSet` order. */
11
+ members: readonly Address[];
12
+ /** How many accounts hold it. */
13
+ count: bigint;
14
+ }
15
+ /** @alpha */
16
+ export interface UseFactoryRoleMembersArgs extends AirdropHookOptions<FactoryRoleMembership> {
17
+ /** The role whose members to list - from {@link useFactoryRoleConstants}, never hand-hashed. */
18
+ role?: Hex;
19
+ }
20
+ /**
21
+ * List who holds `role` on the factory, with the member count.
22
+ *
23
+ * This is the live half of the role-concentration check
24
+ * `FACTORY_ROLE_CONCENTRATION_NOTE` prescribes: run it over the five roles from
25
+ * {@link useFactoryRoleConstants} and compare the holder sets, instead of
26
+ * trusting a fixed string that describes one deployment at one moment.
27
+ *
28
+ * `count` is bundled with the list rather than split into its own hook because
29
+ * it is what a UI needs in the same render to decide whether a revoke will be
30
+ * accepted: since audit-14 the factory floors `DEFAULT_ADMIN_ROLE` at one live
31
+ * member, so revoking or renouncing the last holder reverts `LastAdmin`.
32
+ * Disable the button at `count === 1n` rather than letting the user burn gas
33
+ * discovering it.
34
+ *
35
+ * Unpaginated: factory role sets are operator-sized, not user-sized.
36
+ *
37
+ * @remarks
38
+ * Invalidated by {@link useFactoryGrantRole}, {@link useFactoryRevokeRole} and
39
+ * {@link useFactoryRenounceRole}. Member order is `EnumerableSet`'s and is not
40
+ * stable across grants and revokes - treat it as a set, not a list.
41
+ *
42
+ * @example
43
+ * const { data } = useFactoryRoleMembers({ role: roles?.DEFAULT_ADMIN_ROLE });
44
+ * const lastAdmin = data?.count === 1n; // revoke/renounce would revert LastAdmin
45
+ *
46
+ * @alpha
47
+ */
48
+ export declare function useFactoryRoleMembers(args?: UseFactoryRoleMembersArgs): UseQueryResult<FactoryRoleMembership, Error>;
@@ -0,0 +1,39 @@
1
+ import { type UseQueryResult } from "@tanstack/react-query";
2
+ import type { Address } from "viem";
3
+ import { type AirdropHookOptions } from "../../react/_shared.js";
4
+ /**
5
+ * The factory default, one creator's override, and the resolved value.
6
+ *
7
+ * @alpha
8
+ */
9
+ export interface FactoryUpgradeabilityPolicy {
10
+ /** What applies to creators with no override. */
11
+ defaultUpgradeable: boolean;
12
+ /** Whether this creator has an override at all. */
13
+ overridden: boolean;
14
+ /** The override's value. Meaningless while `overridden` is `false`. */
15
+ allowed: boolean;
16
+ /** What the factory actually resolves for this creator, and what a `mode: "uups"` create is checked against. */
17
+ effective: boolean;
18
+ }
19
+ /** @alpha */
20
+ export interface UseFactoryUpgradeabilityPolicyArgs extends AirdropHookOptions<FactoryUpgradeabilityPolicy> {
21
+ /** The creator whose policy to inspect. */
22
+ creator?: Address;
23
+ }
24
+ /**
25
+ * The admin panel's full upgradeability answer for one creator, in one round
26
+ * trip: the factory default, the per-creator override, and the resolved
27
+ * value. Absorbing `defaultUpgradeable()` here is why it needs no hook of its
28
+ * own.
29
+ *
30
+ * Duplicates the creator-facing `useEffectiveUpgradeable`'s single field
31
+ * rather than replacing it - that hook stays the cheap read a create form
32
+ * uses to decide whether to offer UUPS.
33
+ *
34
+ * @example
35
+ * const { data: policy } = useFactoryUpgradeabilityPolicy({ creator });
36
+ *
37
+ * @alpha
38
+ */
39
+ export declare function useFactoryUpgradeabilityPolicy(args?: UseFactoryUpgradeabilityPolicyArgs): UseQueryResult<FactoryUpgradeabilityPolicy, Error>;
@@ -0,0 +1,24 @@
1
+ import { type UseQueryResult } from "@tanstack/react-query";
2
+ import type { Hex } from "viem";
3
+ import type { DeploymentMode } from "../../constants.js";
4
+ import { type AirdropHookOptions } from "../../react/_shared.js";
5
+ import type { MerkleAirdropParams } from "../../types.js";
6
+ /** @alpha */
7
+ export interface UseMerkleInitCodeHashArgs extends AirdropHookOptions<Hex> {
8
+ params: MerkleAirdropParams;
9
+ mode: DeploymentMode;
10
+ }
11
+ /**
12
+ * Init-code hash of the Merkle proxy the factory would deploy for `mode` -
13
+ * the Merkle counterpart of {@link useEcdsaInitCodeHash}, with the same
14
+ * before/after bracketing job and the same `/advanced/react` home.
15
+ *
16
+ * `usePlanMerkleCampaign` already brackets its own build with this read, so
17
+ * reach for the hook only when driving prediction by hand.
18
+ *
19
+ * @example
20
+ * const before = useMerkleInitCodeHash({ params, mode: "clone" });
21
+ *
22
+ * @alpha
23
+ */
24
+ export declare function useMerkleInitCodeHash(args: UseMerkleInitCodeHashArgs): UseQueryResult<Hex, Error>;
@@ -0,0 +1,33 @@
1
+ import { type UseMutationResult } from "@tanstack/react-query";
2
+ import type { Address, Hex } from "viem";
3
+ import type { WriteAccountOverride } from "../../airdrop-base.js";
4
+ import { type AirdropClientOptions } from "../../react/_shared.js";
5
+ /** @alpha */
6
+ export interface SetComplianceDelegateArgs extends WriteAccountOverride {
7
+ /** Platform delegate wired into future compliance-manager clones. The zero address reverts `ZeroComplianceDelegate`. */
8
+ delegate: Address;
9
+ }
10
+ /**
11
+ * Set the platform-designated compliance delegate that every new
12
+ * compliance-manager clone wires in. Requires `COMPLIANCE_WIRING_ROLE`.
13
+ *
14
+ * **Ordering is load-bearing.** Call this before
15
+ * {@link useSetDefaultDelegateToCompliance} with `on: true` - turning
16
+ * delegation on while no delegate is set reverts `ZeroComplianceDelegate`. An
17
+ * admin panel must sequence the two writes, and read
18
+ * {@link useFactoryComplianceDelegate} to decide whether the toggle is even
19
+ * offerable.
20
+ *
21
+ * Applies to FUTURE clones only; it cannot retro-wire managers that already
22
+ * exist.
23
+ *
24
+ * **Invalidates:** the factory's `fn "complianceDelegate"` entry
25
+ * ({@link useFactoryComplianceDelegate}).
26
+ *
27
+ * @example
28
+ * const setDelegate = useSetComplianceDelegate();
29
+ * await setDelegate.mutateAsync({ delegate: platformDelegate });
30
+ *
31
+ * @alpha
32
+ */
33
+ export declare function useSetComplianceDelegate(options?: AirdropClientOptions): UseMutationResult<Hex, Error, SetComplianceDelegateArgs>;
@@ -0,0 +1,27 @@
1
+ import { type UseMutationResult } from "@tanstack/react-query";
2
+ import type { Address, Hex } from "viem";
3
+ import type { WriteAccountOverride } from "../../airdrop-base.js";
4
+ import { type AirdropClientOptions } from "../../react/_shared.js";
5
+ /** @alpha */
6
+ export interface SetComplianceManagerImplArgs extends WriteAccountOverride {
7
+ /** New compliance-manager implementation. The zero address reverts `ZeroComplianceManagerImpl`. */
8
+ implementation: Address;
9
+ }
10
+ /**
11
+ * Point future compliance-manager clones at a new implementation. Requires
12
+ * `COMPLIANCE_WIRING_ROLE`.
13
+ *
14
+ * Only clones created after this lands use the new code — already-deployed
15
+ * managers keep the implementation they were cloned from, so this is not a
16
+ * fleet-wide upgrade.
17
+ *
18
+ * **Invalidates:** the factory's `fn "implementations"` entry, which carries
19
+ * `complianceManagerImpl` alongside the ECDSA/Merkle pointers.
20
+ *
21
+ * @example
22
+ * const setImpl = useSetComplianceManagerImpl();
23
+ * await setImpl.mutateAsync({ implementation: newManagerImpl });
24
+ *
25
+ * @alpha
26
+ */
27
+ export declare function useSetComplianceManagerImpl(options?: AirdropClientOptions): UseMutationResult<Hex, Error, SetComplianceManagerImplArgs>;
@@ -0,0 +1,28 @@
1
+ import { type UseMutationResult } from "@tanstack/react-query";
2
+ import type { Address, Hex } from "viem";
3
+ import type { WriteAccountOverride } from "../../airdrop-base.js";
4
+ import { type AirdropClientOptions } from "../../react/_shared.js";
5
+ /** @alpha */
6
+ export interface SetCompliancePolicyArgs extends WriteAccountOverride {
7
+ /** The creator the override applies to - not the admin sending the transaction. */
8
+ creator: Address;
9
+ /** Whether that creator's new instances delegate compliance disclosure to the platform delegate. */
10
+ delegateToCompliance: boolean;
11
+ }
12
+ /**
13
+ * Override the factory's default delegate-to-compliance policy for one
14
+ * creator. Requires `COMPLIANCE_WIRING_ROLE`.
15
+ *
16
+ * **Invalidates:** `fn "compliancePolicy"` and
17
+ * `fn "effectiveDelegateToCompliance"`, both keyed on `args.creator` - the
18
+ * TARGET creator, never the sending admin. Keying on the sender would leave
19
+ * the panel's view of the creator it just edited stale while invalidating an
20
+ * entry nobody rendered.
21
+ *
22
+ * @example
23
+ * const setPolicy = useSetCompliancePolicy();
24
+ * await setPolicy.mutateAsync({ creator, delegateToCompliance: true });
25
+ *
26
+ * @alpha
27
+ */
28
+ export declare function useSetCompliancePolicy(options?: AirdropClientOptions): UseMutationResult<Hex, Error, SetCompliancePolicyArgs>;