@clawnch/clawncher-sdk 0.1.3 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/README.md +190 -0
  2. package/dist/analytics.d.ts +157 -0
  3. package/dist/analytics.d.ts.map +1 -0
  4. package/dist/analytics.js +468 -0
  5. package/dist/analytics.js.map +1 -0
  6. package/dist/api-deployer.d.ts.map +1 -1
  7. package/dist/api-deployer.js +38 -35
  8. package/dist/api-deployer.js.map +1 -1
  9. package/dist/claimer.d.ts.map +1 -1
  10. package/dist/claimer.js +9 -7
  11. package/dist/claimer.js.map +1 -1
  12. package/dist/errors.d.ts +13 -0
  13. package/dist/errors.d.ts.map +1 -1
  14. package/dist/errors.js +50 -0
  15. package/dist/errors.js.map +1 -1
  16. package/dist/index.d.ts +8 -0
  17. package/dist/index.d.ts.map +1 -1
  18. package/dist/index.js +16 -0
  19. package/dist/index.js.map +1 -1
  20. package/dist/liquidity.d.ts +13 -7
  21. package/dist/liquidity.d.ts.map +1 -1
  22. package/dist/liquidity.js +143 -46
  23. package/dist/liquidity.js.map +1 -1
  24. package/dist/orders.d.ts +338 -0
  25. package/dist/orders.d.ts.map +1 -0
  26. package/dist/orders.js +611 -0
  27. package/dist/orders.js.map +1 -0
  28. package/dist/permit2.d.ts +258 -0
  29. package/dist/permit2.d.ts.map +1 -0
  30. package/dist/permit2.js +520 -0
  31. package/dist/permit2.js.map +1 -0
  32. package/dist/price.d.ts +95 -0
  33. package/dist/price.d.ts.map +1 -0
  34. package/dist/price.js +207 -0
  35. package/dist/price.js.map +1 -0
  36. package/dist/swap.d.ts.map +1 -1
  37. package/dist/swap.js +21 -19
  38. package/dist/swap.js.map +1 -1
  39. package/dist/trader.d.ts +188 -0
  40. package/dist/trader.d.ts.map +1 -0
  41. package/dist/trader.js +277 -0
  42. package/dist/trader.js.map +1 -0
  43. package/dist/uniswap-abis.d.ts +525 -0
  44. package/dist/uniswap-abis.d.ts.map +1 -1
  45. package/dist/uniswap-abis.js +432 -1
  46. package/dist/uniswap-abis.js.map +1 -1
  47. package/dist/uniswap-chains.d.ts +77 -0
  48. package/dist/uniswap-chains.d.ts.map +1 -0
  49. package/dist/uniswap-chains.js +362 -0
  50. package/dist/uniswap-chains.js.map +1 -0
  51. package/dist/uniswap-quoter.d.ts +178 -0
  52. package/dist/uniswap-quoter.d.ts.map +1 -0
  53. package/dist/uniswap-quoter.js +432 -0
  54. package/dist/uniswap-quoter.js.map +1 -0
  55. package/dist/uniswap-trading.d.ts +203 -0
  56. package/dist/uniswap-trading.d.ts.map +1 -0
  57. package/dist/uniswap-trading.js +380 -0
  58. package/dist/uniswap-trading.js.map +1 -0
  59. package/dist/watcher.d.ts +117 -2
  60. package/dist/watcher.d.ts.map +1 -1
  61. package/dist/watcher.js +147 -2
  62. package/dist/watcher.js.map +1 -1
  63. package/package.json +3 -1
@@ -0,0 +1,258 @@
1
+ /**
2
+ * Permit2 — EIP-712 signature-based token approvals for Uniswap V4.
3
+ *
4
+ * Permit2 replaces per-contract ERC20 approvals with a two-step model:
5
+ * 1. Owner approves Permit2 once (ERC20.approve(Permit2, MAX))
6
+ * 2. For each swap/LP action, owner signs an EIP-712 permit granting
7
+ * the router/PositionManager a time-limited, amount-limited allowance
8
+ *
9
+ * Two transfer modes:
10
+ *
11
+ * **AllowanceTransfer** — used by PositionManager for LP operations
12
+ * - On-chain nonce tracking (uint48, auto-incremented per token+spender)
13
+ * - Supports amount limits and expiration timestamps
14
+ * - sign PermitSingle/PermitBatch → call permit() → router calls transferFrom()
15
+ *
16
+ * **SignatureTransfer** — used by UniversalRouter for swaps
17
+ * - Off-chain nonce (uint256, bitmap-based, single-use)
18
+ * - No on-chain state change for the permit itself
19
+ * - sign PermitTransferFrom → router calls permitTransferFrom() in one tx
20
+ * - Supports "witness" data for swap parameters
21
+ *
22
+ * @see https://docs.uniswap.org/contracts/permit2/overview
23
+ * @see https://github.com/Uniswap/permit2
24
+ */
25
+ import { type Address, type Hash, type Hex, type PublicClient, type WalletClient } from 'viem';
26
+ /** Permit2 is deployed at the same address on all chains */
27
+ export declare const PERMIT2_ADDRESS: Address;
28
+ export interface Permit2Config {
29
+ /** Wallet client for signing and sending transactions */
30
+ wallet: WalletClient & {
31
+ account: {
32
+ address: Address;
33
+ };
34
+ };
35
+ /** Public client for reads */
36
+ publicClient: PublicClient;
37
+ /** Chain ID (default: 8453 = Base) */
38
+ chainId?: number;
39
+ }
40
+ /** Permit2 allowance state for a token/spender pair */
41
+ export interface Permit2Allowance {
42
+ /** Current approved amount (uint160) */
43
+ amount: bigint;
44
+ /** Expiration timestamp (unix seconds) */
45
+ expiration: number;
46
+ /** Current nonce (auto-increments on each permit() call) */
47
+ nonce: number;
48
+ }
49
+ /** Parameters for signing a single AllowanceTransfer permit */
50
+ export interface PermitSingleParams {
51
+ /** Token to permit */
52
+ token: Address;
53
+ /** Spender (e.g. UniversalRouter or PositionManager) */
54
+ spender: Address;
55
+ /** Amount to permit (default: max uint160) */
56
+ amount?: bigint;
57
+ /** Permit expiration in seconds from now (default: 30 days) */
58
+ expirationSeconds?: number;
59
+ /** Signature deadline in seconds from now (default: 30 minutes) */
60
+ sigDeadlineSeconds?: number;
61
+ }
62
+ /** Parameters for signing a batch AllowanceTransfer permit */
63
+ export interface PermitBatchParams {
64
+ /** Tokens and amounts to permit */
65
+ tokens: Array<{
66
+ token: Address;
67
+ amount?: bigint;
68
+ expirationSeconds?: number;
69
+ }>;
70
+ /** Spender (e.g. PositionManager) */
71
+ spender: Address;
72
+ /** Signature deadline in seconds from now (default: 30 minutes) */
73
+ sigDeadlineSeconds?: number;
74
+ }
75
+ /** Parameters for signing a SignatureTransfer permit (used by UniversalRouter) */
76
+ export interface PermitTransferFromParams {
77
+ /** Token to transfer */
78
+ token: Address;
79
+ /** Max amount to transfer */
80
+ amount: bigint;
81
+ /** Spender (the contract that will call permitTransferFrom) */
82
+ spender: Address;
83
+ /** Nonce (caller-chosen, must be unused) */
84
+ nonce: bigint;
85
+ /** Deadline in seconds from now (default: 30 minutes) */
86
+ deadlineSeconds?: number;
87
+ }
88
+ /** Signed permit ready for submission */
89
+ export interface SignedPermitSingle {
90
+ permit: {
91
+ details: {
92
+ token: Address;
93
+ amount: bigint;
94
+ expiration: number;
95
+ nonce: number;
96
+ };
97
+ spender: Address;
98
+ sigDeadline: bigint;
99
+ };
100
+ signature: Hex;
101
+ owner: Address;
102
+ }
103
+ /** Signed batch permit */
104
+ export interface SignedPermitBatch {
105
+ permit: {
106
+ details: Array<{
107
+ token: Address;
108
+ amount: bigint;
109
+ expiration: number;
110
+ nonce: number;
111
+ }>;
112
+ spender: Address;
113
+ sigDeadline: bigint;
114
+ };
115
+ signature: Hex;
116
+ owner: Address;
117
+ }
118
+ /** Signed SignatureTransfer permit */
119
+ export interface SignedPermitTransferFrom {
120
+ permit: {
121
+ permitted: {
122
+ token: Address;
123
+ amount: bigint;
124
+ };
125
+ nonce: bigint;
126
+ deadline: bigint;
127
+ };
128
+ signature: Hex;
129
+ owner: Address;
130
+ /** Transfer recipient and amount (filled in by the caller/router) */
131
+ transferDetails?: {
132
+ to: Address;
133
+ requestedAmount: bigint;
134
+ };
135
+ }
136
+ export declare class Permit2Client {
137
+ private readonly wallet;
138
+ private readonly publicClient;
139
+ private readonly chainId;
140
+ constructor(config: Permit2Config);
141
+ /** Owner address */
142
+ get owner(): Address;
143
+ /**
144
+ * Ensure a token has approved the Permit2 contract for max spending.
145
+ *
146
+ * This is a one-time operation per token. After this, all future
147
+ * permits are gas-free (off-chain signatures).
148
+ *
149
+ * @returns Transaction hash if approval was needed, null if already approved
150
+ */
151
+ ensureTokenApproval(token: Address): Promise<Hash | null>;
152
+ /**
153
+ * Batch-approve multiple tokens for Permit2.
154
+ * Only sends transactions for tokens that need approval.
155
+ *
156
+ * @returns Map of token → txHash (only tokens that needed approval)
157
+ */
158
+ ensureTokenApprovals(tokens: Address[]): Promise<Map<Address, Hash>>;
159
+ /**
160
+ * Read the current Permit2 allowance for a token/spender pair.
161
+ */
162
+ getAllowance(token: Address, spender: Address): Promise<Permit2Allowance>;
163
+ /**
164
+ * Check if a Permit2 allowance is sufficient and not expired.
165
+ */
166
+ isAllowanceSufficient(token: Address, spender: Address, requiredAmount: bigint): Promise<boolean>;
167
+ /**
168
+ * Sign a PermitSingle for a single token → spender allowance.
169
+ *
170
+ * This is an off-chain operation (no gas). The returned signature
171
+ * can be submitted by the spender to claim the allowance.
172
+ *
173
+ * Used by: PositionManager (LP operations), UniversalRouter (some flows)
174
+ */
175
+ signPermitSingle(params: PermitSingleParams): Promise<SignedPermitSingle>;
176
+ /**
177
+ * Sign a PermitBatch for multiple tokens → single spender.
178
+ *
179
+ * Used by PositionManager when minting LP with two tokens.
180
+ */
181
+ signPermitBatch(params: PermitBatchParams): Promise<SignedPermitBatch>;
182
+ /**
183
+ * Submit a signed PermitSingle to the Permit2 contract.
184
+ *
185
+ * After this, the spender can call transferFrom() on Permit2.
186
+ * In practice, this is often bundled in the same tx as the router call
187
+ * via multicall, so you may not need to call this separately.
188
+ */
189
+ submitPermitSingle(signed: SignedPermitSingle): Promise<Hash>;
190
+ /**
191
+ * Directly approve a spender on Permit2 (no signature, costs gas).
192
+ *
193
+ * Simpler but requires an on-chain tx. For agent wallets that control
194
+ * their own private key, this is often easier than signing a permit.
195
+ */
196
+ directApprove(token: Address, spender: Address, amount?: bigint, expirationSeconds?: number): Promise<Hash>;
197
+ /**
198
+ * Direct-approve multiple tokens for a spender in sequence.
199
+ */
200
+ directApproveBatch(tokens: Address[], spender: Address, amount?: bigint, expirationSeconds?: number): Promise<Hash[]>;
201
+ /**
202
+ * Sign a PermitTransferFrom for the UniversalRouter.
203
+ *
204
+ * This creates a single-use, nonce-specific permit. The router
205
+ * calls `permitTransferFrom()` which atomically verifies the sig
206
+ * and transfers the tokens.
207
+ *
208
+ * @param params.nonce - Must be an unused nonce. Use `findUnusedNonce()` to find one.
209
+ */
210
+ signPermitTransferFrom(params: PermitTransferFromParams): Promise<SignedPermitTransferFrom>;
211
+ /**
212
+ * Check if a specific nonce has been used (SignatureTransfer).
213
+ *
214
+ * Permit2 uses a bitmap: nonce N is stored in word N/256, bit N%256.
215
+ */
216
+ isNonceUsed(nonce: bigint): Promise<boolean>;
217
+ /**
218
+ * Find an unused nonce for SignatureTransfer.
219
+ *
220
+ * Scans from `startNonce` forward until an unused one is found.
221
+ * Uses bitmap reads for efficiency (checks 256 nonces per read).
222
+ */
223
+ findUnusedNonce(startNonce?: bigint): Promise<bigint>;
224
+ /**
225
+ * Revoke all Permit2 allowances for specific token/spender pairs.
226
+ *
227
+ * Sets amount=0 and expiration=0 for each pair. This is the
228
+ * emergency kill switch if you need to revoke access immediately.
229
+ */
230
+ lockdown(pairs: Array<{
231
+ token: Address;
232
+ spender: Address;
233
+ }>): Promise<Hash>;
234
+ /**
235
+ * Complete AllowanceTransfer flow for a single token:
236
+ * 1. Ensure ERC20 → Permit2 approval
237
+ * 2. Check if Permit2 allowance is sufficient for the spender
238
+ * 3. If not, sign a PermitSingle and submit it
239
+ *
240
+ * Returns the current nonce after the flow completes.
241
+ */
242
+ ensurePermit2Allowance(token: Address, spender: Address, amount: bigint): Promise<{
243
+ approvalTxHash: Hash | null;
244
+ permitTxHash: Hash | null;
245
+ }>;
246
+ /**
247
+ * Complete flow for two tokens (LP operations):
248
+ * 1. Ensure ERC20 → Permit2 for both
249
+ * 2. Direct-approve both on Permit2 for the spender
250
+ */
251
+ ensurePermit2AllowancePair(token0: Address, token1: Address, spender: Address, amount0: bigint, amount1: bigint): Promise<{
252
+ token0ApprovalTx: Hash | null;
253
+ token1ApprovalTx: Hash | null;
254
+ permit0Tx: Hash | null;
255
+ permit1Tx: Hash | null;
256
+ }>;
257
+ }
258
+ //# sourceMappingURL=permit2.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permit2.d.ts","sourceRoot":"","sources":["../src/permit2.ts"],"names":[],"mappings":"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"}