pepay-streams-sdk 0.1.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.
- package/README.md +405 -0
- package/dist/api/index.d.mts +321 -0
- package/dist/api/index.d.ts +321 -0
- package/dist/api/index.js +312 -0
- package/dist/api/index.js.map +1 -0
- package/dist/api/index.mjs +306 -0
- package/dist/api/index.mjs.map +1 -0
- package/dist/automation/index.d.mts +140 -0
- package/dist/automation/index.d.ts +140 -0
- package/dist/automation/index.js +331 -0
- package/dist/automation/index.js.map +1 -0
- package/dist/automation/index.mjs +326 -0
- package/dist/automation/index.mjs.map +1 -0
- package/dist/campaigns/index.d.mts +286 -0
- package/dist/campaigns/index.d.ts +286 -0
- package/dist/campaigns/index.js +652 -0
- package/dist/campaigns/index.js.map +1 -0
- package/dist/campaigns/index.mjs +645 -0
- package/dist/campaigns/index.mjs.map +1 -0
- package/dist/claims/index.d.mts +190 -0
- package/dist/claims/index.d.ts +190 -0
- package/dist/claims/index.js +414 -0
- package/dist/claims/index.js.map +1 -0
- package/dist/claims/index.mjs +409 -0
- package/dist/claims/index.mjs.map +1 -0
- package/dist/index-BTG0TRJt.d.mts +555 -0
- package/dist/index-BTG0TRJt.d.ts +555 -0
- package/dist/index.d.mts +170 -0
- package/dist/index.d.ts +170 -0
- package/dist/index.js +2926 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +2888 -0
- package/dist/index.mjs.map +1 -0
- package/dist/marketplace/index.d.mts +225 -0
- package/dist/marketplace/index.d.ts +225 -0
- package/dist/marketplace/index.js +529 -0
- package/dist/marketplace/index.js.map +1 -0
- package/dist/marketplace/index.mjs +524 -0
- package/dist/marketplace/index.mjs.map +1 -0
- package/dist/react/index.d.mts +185 -0
- package/dist/react/index.d.ts +185 -0
- package/dist/react/index.js +340 -0
- package/dist/react/index.js.map +1 -0
- package/dist/react/index.mjs +333 -0
- package/dist/react/index.mjs.map +1 -0
- package/dist/staking/index.d.mts +158 -0
- package/dist/staking/index.d.ts +158 -0
- package/dist/staking/index.js +359 -0
- package/dist/staking/index.js.map +1 -0
- package/dist/staking/index.mjs +354 -0
- package/dist/staking/index.mjs.map +1 -0
- package/package.json +106 -0
- package/src/api/index.ts +577 -0
- package/src/automation/index.ts +436 -0
- package/src/campaigns/index.ts +835 -0
- package/src/claims/index.ts +530 -0
- package/src/client.ts +518 -0
- package/src/index.ts +101 -0
- package/src/marketplace/index.ts +730 -0
- package/src/react/index.ts +498 -0
- package/src/staking/index.ts +449 -0
- package/src/types/index.ts +631 -0
|
@@ -0,0 +1,306 @@
|
|
|
1
|
+
// src/api/index.ts
|
|
2
|
+
var ApiClient = class {
|
|
3
|
+
baseUrl;
|
|
4
|
+
chainId;
|
|
5
|
+
constructor(baseUrl, chainId) {
|
|
6
|
+
this.baseUrl = baseUrl.endsWith("/") ? baseUrl.slice(0, -1) : baseUrl;
|
|
7
|
+
this.chainId = chainId;
|
|
8
|
+
}
|
|
9
|
+
// ============================================================================
|
|
10
|
+
// Campaign Queries
|
|
11
|
+
// ============================================================================
|
|
12
|
+
/**
|
|
13
|
+
* Get campaigns with optional filtering
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```typescript
|
|
17
|
+
* const campaigns = await sdk.api.getCampaigns({
|
|
18
|
+
* kind: 'vested_airdrop',
|
|
19
|
+
* status: 'active',
|
|
20
|
+
* page: 1,
|
|
21
|
+
* pageSize: 20,
|
|
22
|
+
* });
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
async getCampaigns(params = {}) {
|
|
26
|
+
const searchParams = new URLSearchParams();
|
|
27
|
+
if (params.kind) searchParams.set("kind", params.kind);
|
|
28
|
+
if (params.creator) searchParams.set("creator", params.creator);
|
|
29
|
+
if (params.token) searchParams.set("token", params.token);
|
|
30
|
+
if (params.status) searchParams.set("status", params.status);
|
|
31
|
+
if (params.page) searchParams.set("page", String(params.page));
|
|
32
|
+
if (params.pageSize) searchParams.set("pageSize", String(params.pageSize));
|
|
33
|
+
if (params.sortBy) searchParams.set("sortBy", params.sortBy);
|
|
34
|
+
if (params.sortOrder) searchParams.set("sortOrder", params.sortOrder);
|
|
35
|
+
searchParams.set("chainId", String(this.chainId));
|
|
36
|
+
return this.fetch(
|
|
37
|
+
`/v1/campaigns?${searchParams.toString()}`
|
|
38
|
+
);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Get a single campaign by ID
|
|
42
|
+
*/
|
|
43
|
+
async getCampaign(campaignId) {
|
|
44
|
+
return this.fetch(
|
|
45
|
+
`/v1/campaigns/${campaignId}?chainId=${this.chainId}`
|
|
46
|
+
);
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Get campaign recipients
|
|
50
|
+
*/
|
|
51
|
+
async getCampaignRecipients(campaignId, params = {}) {
|
|
52
|
+
const searchParams = new URLSearchParams();
|
|
53
|
+
searchParams.set("chainId", String(this.chainId));
|
|
54
|
+
if (params.page) searchParams.set("page", String(params.page));
|
|
55
|
+
if (params.pageSize) searchParams.set("pageSize", String(params.pageSize));
|
|
56
|
+
return this.fetch(
|
|
57
|
+
`/v1/campaigns/${campaignId}/recipients?${searchParams.toString()}`
|
|
58
|
+
);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Get campaign activity/claims
|
|
62
|
+
*/
|
|
63
|
+
async getCampaignActivity(campaignId, params = {}) {
|
|
64
|
+
const searchParams = new URLSearchParams();
|
|
65
|
+
searchParams.set("chainId", String(this.chainId));
|
|
66
|
+
if (params.page) searchParams.set("page", String(params.page));
|
|
67
|
+
if (params.pageSize) searchParams.set("pageSize", String(params.pageSize));
|
|
68
|
+
return this.fetch(
|
|
69
|
+
`/v1/campaigns/${campaignId}/activity?${searchParams.toString()}`
|
|
70
|
+
);
|
|
71
|
+
}
|
|
72
|
+
// ============================================================================
|
|
73
|
+
// Order Queries
|
|
74
|
+
// ============================================================================
|
|
75
|
+
/**
|
|
76
|
+
* Get marketplace orders with optional filtering
|
|
77
|
+
*
|
|
78
|
+
* @example
|
|
79
|
+
* ```typescript
|
|
80
|
+
* const orders = await sdk.api.getOrders({
|
|
81
|
+
* orderType: 'tradable',
|
|
82
|
+
* status: 'open',
|
|
83
|
+
* sortBy: 'totalPrice',
|
|
84
|
+
* sortOrder: 'asc',
|
|
85
|
+
* });
|
|
86
|
+
* ```
|
|
87
|
+
*/
|
|
88
|
+
async getOrders(params = {}) {
|
|
89
|
+
const searchParams = new URLSearchParams();
|
|
90
|
+
if (params.orderType) searchParams.set("orderType", params.orderType);
|
|
91
|
+
if (params.seller) searchParams.set("seller", params.seller);
|
|
92
|
+
if (params.sellToken) searchParams.set("sellToken", params.sellToken);
|
|
93
|
+
if (params.payToken) searchParams.set("payToken", params.payToken);
|
|
94
|
+
if (params.status) searchParams.set("status", params.status);
|
|
95
|
+
if (params.campaignId) searchParams.set("campaignId", params.campaignId);
|
|
96
|
+
if (params.page) searchParams.set("page", String(params.page));
|
|
97
|
+
if (params.pageSize) searchParams.set("pageSize", String(params.pageSize));
|
|
98
|
+
if (params.sortBy) searchParams.set("sortBy", params.sortBy);
|
|
99
|
+
if (params.sortOrder) searchParams.set("sortOrder", params.sortOrder);
|
|
100
|
+
searchParams.set("chainId", String(this.chainId));
|
|
101
|
+
return this.fetch(
|
|
102
|
+
`/v1/marketplace/orders?${searchParams.toString()}`
|
|
103
|
+
);
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Get a single order by ID
|
|
107
|
+
*/
|
|
108
|
+
async getOrder(orderId) {
|
|
109
|
+
return this.fetch(
|
|
110
|
+
`/v1/marketplace/orders/${orderId}?chainId=${this.chainId}`
|
|
111
|
+
);
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Get order price quote
|
|
115
|
+
*/
|
|
116
|
+
async getOrderQuote(orderId) {
|
|
117
|
+
return this.fetch(
|
|
118
|
+
`/v1/marketplace/orders/${orderId}/quote?chainId=${this.chainId}`
|
|
119
|
+
);
|
|
120
|
+
}
|
|
121
|
+
// ============================================================================
|
|
122
|
+
// Staking Queries
|
|
123
|
+
// ============================================================================
|
|
124
|
+
/**
|
|
125
|
+
* Get staking pools with optional filtering
|
|
126
|
+
*/
|
|
127
|
+
async getStakingPools(params = {}) {
|
|
128
|
+
const searchParams = new URLSearchParams();
|
|
129
|
+
if (params.stakeToken) searchParams.set("stakeToken", params.stakeToken);
|
|
130
|
+
if (params.rewardToken) searchParams.set("rewardToken", params.rewardToken);
|
|
131
|
+
if (params.creator) searchParams.set("creator", params.creator);
|
|
132
|
+
if (params.isActive !== void 0)
|
|
133
|
+
searchParams.set("isActive", String(params.isActive));
|
|
134
|
+
if (params.page) searchParams.set("page", String(params.page));
|
|
135
|
+
if (params.pageSize) searchParams.set("pageSize", String(params.pageSize));
|
|
136
|
+
searchParams.set("chainId", String(this.chainId));
|
|
137
|
+
return this.fetch(
|
|
138
|
+
`/v1/staking/pools?${searchParams.toString()}`
|
|
139
|
+
);
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Get a single staking pool by ID
|
|
143
|
+
*/
|
|
144
|
+
async getStakingPool(poolId) {
|
|
145
|
+
return this.fetch(
|
|
146
|
+
`/v1/staking/pools/${poolId}?chainId=${this.chainId}`
|
|
147
|
+
);
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Get stakers for a pool
|
|
151
|
+
*/
|
|
152
|
+
async getPoolStakers(poolId, params = {}) {
|
|
153
|
+
const searchParams = new URLSearchParams();
|
|
154
|
+
searchParams.set("chainId", String(this.chainId));
|
|
155
|
+
if (params.page) searchParams.set("page", String(params.page));
|
|
156
|
+
if (params.pageSize) searchParams.set("pageSize", String(params.pageSize));
|
|
157
|
+
return this.fetch(
|
|
158
|
+
`/v1/staking/pools/${poolId}/stakers?${searchParams.toString()}`
|
|
159
|
+
);
|
|
160
|
+
}
|
|
161
|
+
// ============================================================================
|
|
162
|
+
// Wallet Queries
|
|
163
|
+
// ============================================================================
|
|
164
|
+
/**
|
|
165
|
+
* Get wallet activity summary
|
|
166
|
+
*
|
|
167
|
+
* @example
|
|
168
|
+
* ```typescript
|
|
169
|
+
* const activity = await sdk.api.getWalletActivity(address);
|
|
170
|
+
* console.log('Campaigns:', activity.campaigns.length);
|
|
171
|
+
* console.log('Open orders:', activity.openOrders.length);
|
|
172
|
+
* console.log('Stakes:', activity.stakes.length);
|
|
173
|
+
* ```
|
|
174
|
+
*/
|
|
175
|
+
async getWalletActivity(address) {
|
|
176
|
+
return this.fetch(
|
|
177
|
+
`/v1/wallets/${address}?chainId=${this.chainId}`
|
|
178
|
+
);
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Get wallet claims history
|
|
182
|
+
*/
|
|
183
|
+
async getWalletClaims(address, params = {}) {
|
|
184
|
+
const searchParams = new URLSearchParams();
|
|
185
|
+
searchParams.set("chainId", String(this.chainId));
|
|
186
|
+
if (params.page) searchParams.set("page", String(params.page));
|
|
187
|
+
if (params.pageSize) searchParams.set("pageSize", String(params.pageSize));
|
|
188
|
+
return this.fetch(
|
|
189
|
+
`/v1/wallets/${address}/claims?${searchParams.toString()}`
|
|
190
|
+
);
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Get wallet positions (campaigns where wallet has allocations)
|
|
194
|
+
*/
|
|
195
|
+
async getWalletPositions(address) {
|
|
196
|
+
return this.fetch(
|
|
197
|
+
`/v1/wallets/${address}/positions?chainId=${this.chainId}`
|
|
198
|
+
);
|
|
199
|
+
}
|
|
200
|
+
// ============================================================================
|
|
201
|
+
// Token Queries
|
|
202
|
+
// ============================================================================
|
|
203
|
+
/**
|
|
204
|
+
* Search for tokens
|
|
205
|
+
*
|
|
206
|
+
* @example
|
|
207
|
+
* ```typescript
|
|
208
|
+
* const tokens = await sdk.api.searchTokens('USDC');
|
|
209
|
+
* ```
|
|
210
|
+
*/
|
|
211
|
+
async searchTokens(query) {
|
|
212
|
+
return this.fetch(
|
|
213
|
+
`/v1/tokens?q=${encodeURIComponent(query)}&chainId=${this.chainId}`
|
|
214
|
+
);
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Get token information by address
|
|
218
|
+
*/
|
|
219
|
+
async getToken(address) {
|
|
220
|
+
return this.fetch(
|
|
221
|
+
`/v1/tokens/${address}?chainId=${this.chainId}`
|
|
222
|
+
);
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Get token price
|
|
226
|
+
*/
|
|
227
|
+
async getTokenPrice(address) {
|
|
228
|
+
return this.fetch(
|
|
229
|
+
`/v1/tokens/${address}/price?chainId=${this.chainId}`
|
|
230
|
+
);
|
|
231
|
+
}
|
|
232
|
+
// ============================================================================
|
|
233
|
+
// Health & Status
|
|
234
|
+
// ============================================================================
|
|
235
|
+
/**
|
|
236
|
+
* Check API health
|
|
237
|
+
*/
|
|
238
|
+
async health() {
|
|
239
|
+
return this.fetch("/health");
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Get supported chains
|
|
243
|
+
*/
|
|
244
|
+
async getChains() {
|
|
245
|
+
return this.fetch("/v1/chains");
|
|
246
|
+
}
|
|
247
|
+
// ============================================================================
|
|
248
|
+
// Actions (Transaction Preparation)
|
|
249
|
+
// ============================================================================
|
|
250
|
+
/**
|
|
251
|
+
* Prepare a claim transaction
|
|
252
|
+
*
|
|
253
|
+
* Returns the calldata for a claim transaction.
|
|
254
|
+
*/
|
|
255
|
+
async prepareClaimTx(params) {
|
|
256
|
+
return this.fetch("/v1/actions/claim", {
|
|
257
|
+
method: "POST",
|
|
258
|
+
body: JSON.stringify({
|
|
259
|
+
...params,
|
|
260
|
+
chainId: this.chainId
|
|
261
|
+
})
|
|
262
|
+
});
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* Prepare a fill order transaction
|
|
266
|
+
*/
|
|
267
|
+
async prepareFillOrderTx(params) {
|
|
268
|
+
return this.fetch("/v1/actions/fill-order", {
|
|
269
|
+
method: "POST",
|
|
270
|
+
body: JSON.stringify({
|
|
271
|
+
...params,
|
|
272
|
+
chainId: this.chainId
|
|
273
|
+
})
|
|
274
|
+
});
|
|
275
|
+
}
|
|
276
|
+
// ============================================================================
|
|
277
|
+
// Helpers
|
|
278
|
+
// ============================================================================
|
|
279
|
+
async fetch(endpoint, options = {}) {
|
|
280
|
+
const url = `${this.baseUrl}${endpoint}`;
|
|
281
|
+
const response = await fetch(url, {
|
|
282
|
+
...options,
|
|
283
|
+
headers: {
|
|
284
|
+
"Content-Type": "application/json",
|
|
285
|
+
...options.headers
|
|
286
|
+
}
|
|
287
|
+
});
|
|
288
|
+
if (!response.ok) {
|
|
289
|
+
const error = await response.text();
|
|
290
|
+
throw new ApiError(response.status, error);
|
|
291
|
+
}
|
|
292
|
+
return response.json();
|
|
293
|
+
}
|
|
294
|
+
};
|
|
295
|
+
var ApiError = class extends Error {
|
|
296
|
+
constructor(status, message) {
|
|
297
|
+
super(`API Error (${status}): ${message}`);
|
|
298
|
+
this.status = status;
|
|
299
|
+
this.name = "ApiError";
|
|
300
|
+
}
|
|
301
|
+
};
|
|
302
|
+
var api_default = ApiClient;
|
|
303
|
+
|
|
304
|
+
export { ApiClient, ApiError, api_default as default };
|
|
305
|
+
//# sourceMappingURL=index.mjs.map
|
|
306
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/api/index.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["/**\r\n * API Client Module\r\n *\r\n * Provides methods for querying indexed blockchain data:\r\n * - Campaign queries\r\n * - Order queries\r\n * - Wallet activity\r\n * - Token information\r\n * - Staking pool queries\r\n */\r\nimport type { Address } from 'viem';\r\nimport type {\r\n ApiCampaign,\r\n ApiOrder,\r\n ApiStakingPool,\r\n PaginatedResponse,\r\n} from '../types';\r\n\r\n/**\r\n * Query parameters for campaigns\r\n */\r\nexport interface CampaignQueryParams {\r\n /** Filter by campaign kind */\r\n kind?: 'instant_airdrop' | 'vested_airdrop' | 'lock' | 'vesting';\r\n /** Filter by creator address */\r\n creator?: Address;\r\n /** Filter by token address */\r\n token?: Address;\r\n /** Filter by status */\r\n status?: 'active' | 'paused' | 'finalized';\r\n /** Page number (1-indexed) */\r\n page?: number;\r\n /** Items per page */\r\n pageSize?: number;\r\n /** Sort field */\r\n sortBy?: 'createdAt' | 'totalAllocated' | 'recipientCount';\r\n /** Sort direction */\r\n sortOrder?: 'asc' | 'desc';\r\n}\r\n\r\n/**\r\n * Query parameters for orders\r\n */\r\nexport interface OrderQueryParams {\r\n /** Filter by order type */\r\n orderType?: 'instant' | 'vested' | 'tradable';\r\n /** Filter by seller */\r\n seller?: Address;\r\n /** Filter by sell token */\r\n sellToken?: Address;\r\n /** Filter by pay token */\r\n payToken?: Address;\r\n /** Filter by status */\r\n status?: 'open' | 'filled' | 'canceled' | 'expired';\r\n /** Filter by campaign (for tradable) */\r\n campaignId?: string;\r\n /** Page number */\r\n page?: number;\r\n /** Items per page */\r\n pageSize?: number;\r\n /** Sort field */\r\n sortBy?: 'createdAt' | 'totalPrice' | 'expiresAt';\r\n /** Sort direction */\r\n sortOrder?: 'asc' | 'desc';\r\n}\r\n\r\n/**\r\n * Query parameters for staking pools\r\n */\r\nexport interface PoolQueryParams {\r\n /** Filter by stake token */\r\n stakeToken?: Address;\r\n /** Filter by reward token */\r\n rewardToken?: Address;\r\n /** Filter by creator */\r\n creator?: Address;\r\n /** Filter by active status */\r\n isActive?: boolean;\r\n /** Page number */\r\n page?: number;\r\n /** Items per page */\r\n pageSize?: number;\r\n}\r\n\r\n/**\r\n * Wallet activity summary\r\n */\r\nexport interface WalletActivity {\r\n address: Address;\r\n /** Campaigns where wallet is a recipient */\r\n campaigns: {\r\n id: string;\r\n kind: string;\r\n allocated: string;\r\n claimed: string;\r\n due: string;\r\n }[];\r\n /** Open orders created by wallet */\r\n openOrders: ApiOrder[];\r\n /** Staking positions */\r\n stakes: {\r\n poolId: string;\r\n amount: string;\r\n pendingRewards: string;\r\n }[];\r\n /** Total value across all positions (in USD if available) */\r\n totalValue?: string;\r\n}\r\n\r\n/**\r\n * Token information from enrichment\r\n */\r\nexport interface TokenInfo {\r\n address: Address;\r\n chainId: number;\r\n symbol: string;\r\n name: string;\r\n decimals: number;\r\n logoUrl?: string;\r\n priceUsd?: string;\r\n marketCap?: string;\r\n volume24h?: string;\r\n}\r\n\r\n/**\r\n * API client for indexed blockchain data\r\n */\r\nexport class ApiClient {\r\n private readonly baseUrl: string;\r\n private readonly chainId: number;\r\n\r\n constructor(baseUrl: string, chainId: number) {\r\n this.baseUrl = baseUrl.endsWith('/') ? baseUrl.slice(0, -1) : baseUrl;\r\n this.chainId = chainId;\r\n }\r\n\r\n // ============================================================================\r\n // Campaign Queries\r\n // ============================================================================\r\n\r\n /**\r\n * Get campaigns with optional filtering\r\n *\r\n * @example\r\n * ```typescript\r\n * const campaigns = await sdk.api.getCampaigns({\r\n * kind: 'vested_airdrop',\r\n * status: 'active',\r\n * page: 1,\r\n * pageSize: 20,\r\n * });\r\n * ```\r\n */\r\n async getCampaigns(\r\n params: CampaignQueryParams = {}\r\n ): Promise<PaginatedResponse<ApiCampaign>> {\r\n const searchParams = new URLSearchParams();\r\n\r\n if (params.kind) searchParams.set('kind', params.kind);\r\n if (params.creator) searchParams.set('creator', params.creator);\r\n if (params.token) searchParams.set('token', params.token);\r\n if (params.status) searchParams.set('status', params.status);\r\n if (params.page) searchParams.set('page', String(params.page));\r\n if (params.pageSize) searchParams.set('pageSize', String(params.pageSize));\r\n if (params.sortBy) searchParams.set('sortBy', params.sortBy);\r\n if (params.sortOrder) searchParams.set('sortOrder', params.sortOrder);\r\n\r\n searchParams.set('chainId', String(this.chainId));\r\n\r\n return this.fetch<PaginatedResponse<ApiCampaign>>(\r\n `/v1/campaigns?${searchParams.toString()}`\r\n );\r\n }\r\n\r\n /**\r\n * Get a single campaign by ID\r\n */\r\n async getCampaign(campaignId: string): Promise<ApiCampaign> {\r\n return this.fetch<ApiCampaign>(\r\n `/v1/campaigns/${campaignId}?chainId=${this.chainId}`\r\n );\r\n }\r\n\r\n /**\r\n * Get campaign recipients\r\n */\r\n async getCampaignRecipients(\r\n campaignId: string,\r\n params: { page?: number; pageSize?: number } = {}\r\n ): Promise<\r\n PaginatedResponse<{\r\n address: Address;\r\n allocated: string;\r\n claimed: string;\r\n blocked: boolean;\r\n }>\r\n > {\r\n const searchParams = new URLSearchParams();\r\n searchParams.set('chainId', String(this.chainId));\r\n if (params.page) searchParams.set('page', String(params.page));\r\n if (params.pageSize) searchParams.set('pageSize', String(params.pageSize));\r\n\r\n return this.fetch(\r\n `/v1/campaigns/${campaignId}/recipients?${searchParams.toString()}`\r\n );\r\n }\r\n\r\n /**\r\n * Get campaign activity/claims\r\n */\r\n async getCampaignActivity(\r\n campaignId: string,\r\n params: { page?: number; pageSize?: number } = {}\r\n ): Promise<\r\n PaginatedResponse<{\r\n recipient: Address;\r\n amount: string;\r\n timestamp: string;\r\n txHash: string;\r\n }>\r\n > {\r\n const searchParams = new URLSearchParams();\r\n searchParams.set('chainId', String(this.chainId));\r\n if (params.page) searchParams.set('page', String(params.page));\r\n if (params.pageSize) searchParams.set('pageSize', String(params.pageSize));\r\n\r\n return this.fetch(\r\n `/v1/campaigns/${campaignId}/activity?${searchParams.toString()}`\r\n );\r\n }\r\n\r\n // ============================================================================\r\n // Order Queries\r\n // ============================================================================\r\n\r\n /**\r\n * Get marketplace orders with optional filtering\r\n *\r\n * @example\r\n * ```typescript\r\n * const orders = await sdk.api.getOrders({\r\n * orderType: 'tradable',\r\n * status: 'open',\r\n * sortBy: 'totalPrice',\r\n * sortOrder: 'asc',\r\n * });\r\n * ```\r\n */\r\n async getOrders(\r\n params: OrderQueryParams = {}\r\n ): Promise<PaginatedResponse<ApiOrder>> {\r\n const searchParams = new URLSearchParams();\r\n\r\n if (params.orderType) searchParams.set('orderType', params.orderType);\r\n if (params.seller) searchParams.set('seller', params.seller);\r\n if (params.sellToken) searchParams.set('sellToken', params.sellToken);\r\n if (params.payToken) searchParams.set('payToken', params.payToken);\r\n if (params.status) searchParams.set('status', params.status);\r\n if (params.campaignId) searchParams.set('campaignId', params.campaignId);\r\n if (params.page) searchParams.set('page', String(params.page));\r\n if (params.pageSize) searchParams.set('pageSize', String(params.pageSize));\r\n if (params.sortBy) searchParams.set('sortBy', params.sortBy);\r\n if (params.sortOrder) searchParams.set('sortOrder', params.sortOrder);\r\n\r\n searchParams.set('chainId', String(this.chainId));\r\n\r\n return this.fetch<PaginatedResponse<ApiOrder>>(\r\n `/v1/marketplace/orders?${searchParams.toString()}`\r\n );\r\n }\r\n\r\n /**\r\n * Get a single order by ID\r\n */\r\n async getOrder(orderId: string): Promise<ApiOrder> {\r\n return this.fetch<ApiOrder>(\r\n `/v1/marketplace/orders/${orderId}?chainId=${this.chainId}`\r\n );\r\n }\r\n\r\n /**\r\n * Get order price quote\r\n */\r\n async getOrderQuote(orderId: string): Promise<{\r\n totalPrice: string;\r\n protocolFee: string;\r\n sellerReceives: string;\r\n isValid: boolean;\r\n }> {\r\n return this.fetch(\r\n `/v1/marketplace/orders/${orderId}/quote?chainId=${this.chainId}`\r\n );\r\n }\r\n\r\n // ============================================================================\r\n // Staking Queries\r\n // ============================================================================\r\n\r\n /**\r\n * Get staking pools with optional filtering\r\n */\r\n async getStakingPools(\r\n params: PoolQueryParams = {}\r\n ): Promise<PaginatedResponse<ApiStakingPool>> {\r\n const searchParams = new URLSearchParams();\r\n\r\n if (params.stakeToken) searchParams.set('stakeToken', params.stakeToken);\r\n if (params.rewardToken) searchParams.set('rewardToken', params.rewardToken);\r\n if (params.creator) searchParams.set('creator', params.creator);\r\n if (params.isActive !== undefined)\r\n searchParams.set('isActive', String(params.isActive));\r\n if (params.page) searchParams.set('page', String(params.page));\r\n if (params.pageSize) searchParams.set('pageSize', String(params.pageSize));\r\n\r\n searchParams.set('chainId', String(this.chainId));\r\n\r\n return this.fetch<PaginatedResponse<ApiStakingPool>>(\r\n `/v1/staking/pools?${searchParams.toString()}`\r\n );\r\n }\r\n\r\n /**\r\n * Get a single staking pool by ID\r\n */\r\n async getStakingPool(poolId: string): Promise<ApiStakingPool> {\r\n return this.fetch<ApiStakingPool>(\r\n `/v1/staking/pools/${poolId}?chainId=${this.chainId}`\r\n );\r\n }\r\n\r\n /**\r\n * Get stakers for a pool\r\n */\r\n async getPoolStakers(\r\n poolId: string,\r\n params: { page?: number; pageSize?: number } = {}\r\n ): Promise<\r\n PaginatedResponse<{\r\n address: Address;\r\n amount: string;\r\n pendingRewards: string;\r\n }>\r\n > {\r\n const searchParams = new URLSearchParams();\r\n searchParams.set('chainId', String(this.chainId));\r\n if (params.page) searchParams.set('page', String(params.page));\r\n if (params.pageSize) searchParams.set('pageSize', String(params.pageSize));\r\n\r\n return this.fetch(\r\n `/v1/staking/pools/${poolId}/stakers?${searchParams.toString()}`\r\n );\r\n }\r\n\r\n // ============================================================================\r\n // Wallet Queries\r\n // ============================================================================\r\n\r\n /**\r\n * Get wallet activity summary\r\n *\r\n * @example\r\n * ```typescript\r\n * const activity = await sdk.api.getWalletActivity(address);\r\n * console.log('Campaigns:', activity.campaigns.length);\r\n * console.log('Open orders:', activity.openOrders.length);\r\n * console.log('Stakes:', activity.stakes.length);\r\n * ```\r\n */\r\n async getWalletActivity(address: Address): Promise<WalletActivity> {\r\n return this.fetch<WalletActivity>(\r\n `/v1/wallets/${address}?chainId=${this.chainId}`\r\n );\r\n }\r\n\r\n /**\r\n * Get wallet claims history\r\n */\r\n async getWalletClaims(\r\n address: Address,\r\n params: { page?: number; pageSize?: number } = {}\r\n ): Promise<\r\n PaginatedResponse<{\r\n campaignId: string;\r\n amount: string;\r\n timestamp: string;\r\n txHash: string;\r\n }>\r\n > {\r\n const searchParams = new URLSearchParams();\r\n searchParams.set('chainId', String(this.chainId));\r\n if (params.page) searchParams.set('page', String(params.page));\r\n if (params.pageSize) searchParams.set('pageSize', String(params.pageSize));\r\n\r\n return this.fetch(\r\n `/v1/wallets/${address}/claims?${searchParams.toString()}`\r\n );\r\n }\r\n\r\n /**\r\n * Get wallet positions (campaigns where wallet has allocations)\r\n */\r\n async getWalletPositions(\r\n address: Address\r\n ): Promise<\r\n {\r\n campaignId: string;\r\n kind: string;\r\n token: Address;\r\n allocated: string;\r\n claimed: string;\r\n due: string;\r\n vestingProgress: number;\r\n }[]\r\n > {\r\n return this.fetch(\r\n `/v1/wallets/${address}/positions?chainId=${this.chainId}`\r\n );\r\n }\r\n\r\n // ============================================================================\r\n // Token Queries\r\n // ============================================================================\r\n\r\n /**\r\n * Search for tokens\r\n *\r\n * @example\r\n * ```typescript\r\n * const tokens = await sdk.api.searchTokens('USDC');\r\n * ```\r\n */\r\n async searchTokens(query: string): Promise<TokenInfo[]> {\r\n return this.fetch<TokenInfo[]>(\r\n `/v1/tokens?q=${encodeURIComponent(query)}&chainId=${this.chainId}`\r\n );\r\n }\r\n\r\n /**\r\n * Get token information by address\r\n */\r\n async getToken(address: Address): Promise<TokenInfo> {\r\n return this.fetch<TokenInfo>(\r\n `/v1/tokens/${address}?chainId=${this.chainId}`\r\n );\r\n }\r\n\r\n /**\r\n * Get token price\r\n */\r\n async getTokenPrice(address: Address): Promise<{\r\n priceUsd: string;\r\n priceChange24h: string;\r\n timestamp: string;\r\n }> {\r\n return this.fetch(\r\n `/v1/tokens/${address}/price?chainId=${this.chainId}`\r\n );\r\n }\r\n\r\n // ============================================================================\r\n // Health & Status\r\n // ============================================================================\r\n\r\n /**\r\n * Check API health\r\n */\r\n async health(): Promise<{\r\n status: 'ok' | 'degraded' | 'down';\r\n indexerBlockHeight: number;\r\n chainBlockHeight: number;\r\n lag: number;\r\n }> {\r\n return this.fetch('/health');\r\n }\r\n\r\n /**\r\n * Get supported chains\r\n */\r\n async getChains(): Promise<\r\n {\r\n chainId: number;\r\n name: string;\r\n rpcUrl: string;\r\n diamondAddress: Address;\r\n }[]\r\n > {\r\n return this.fetch('/v1/chains');\r\n }\r\n\r\n // ============================================================================\r\n // Actions (Transaction Preparation)\r\n // ============================================================================\r\n\r\n /**\r\n * Prepare a claim transaction\r\n *\r\n * Returns the calldata for a claim transaction.\r\n */\r\n async prepareClaimTx(params: {\r\n campaignId: string;\r\n recipient: Address;\r\n }): Promise<{\r\n to: Address;\r\n data: `0x${string}`;\r\n value: string;\r\n estimatedGas: string;\r\n }> {\r\n return this.fetch('/v1/actions/claim', {\r\n method: 'POST',\r\n body: JSON.stringify({\r\n ...params,\r\n chainId: this.chainId,\r\n }),\r\n });\r\n }\r\n\r\n /**\r\n * Prepare a fill order transaction\r\n */\r\n async prepareFillOrderTx(params: {\r\n orderId: string;\r\n }): Promise<{\r\n to: Address;\r\n data: `0x${string}`;\r\n value: string;\r\n estimatedGas: string;\r\n }> {\r\n return this.fetch('/v1/actions/fill-order', {\r\n method: 'POST',\r\n body: JSON.stringify({\r\n ...params,\r\n chainId: this.chainId,\r\n }),\r\n });\r\n }\r\n\r\n // ============================================================================\r\n // Helpers\r\n // ============================================================================\r\n\r\n private async fetch<T>(\r\n endpoint: string,\r\n options: RequestInit = {}\r\n ): Promise<T> {\r\n const url = `${this.baseUrl}${endpoint}`;\r\n\r\n const response = await fetch(url, {\r\n ...options,\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n ...options.headers,\r\n },\r\n });\r\n\r\n if (!response.ok) {\r\n const error = await response.text();\r\n throw new ApiError(response.status, error);\r\n }\r\n\r\n return response.json() as Promise<T>;\r\n }\r\n}\r\n\r\n/**\r\n * API error class\r\n */\r\nexport class ApiError extends Error {\r\n constructor(\r\n public readonly status: number,\r\n message: string\r\n ) {\r\n super(`API Error (${status}): ${message}`);\r\n this.name = 'ApiError';\r\n }\r\n}\r\n\r\nexport default ApiClient;\r\n"]}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import { PublicClient, WalletClient, Address } from 'viem';
|
|
2
|
+
import { E as EnableAutoWithdrawParams, T as TransactionResult, h as EnableAutoReleaseParams, A as AutomationStatus } from '../index-BTG0TRJt.mjs';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Automation Module
|
|
6
|
+
*
|
|
7
|
+
* Provides methods for keeper automation:
|
|
8
|
+
* - Enable/disable auto-withdraw for vesting campaigns
|
|
9
|
+
* - Enable/disable auto-release for locks
|
|
10
|
+
* - Query automation status
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Automation module for keeper-powered operations
|
|
15
|
+
*/
|
|
16
|
+
declare class AutomationModule {
|
|
17
|
+
private readonly publicClient;
|
|
18
|
+
private readonly walletClient;
|
|
19
|
+
private readonly diamondAddress;
|
|
20
|
+
constructor(publicClient: PublicClient, walletClient: WalletClient | undefined, diamondAddress: Address);
|
|
21
|
+
/**
|
|
22
|
+
* Enable auto-withdraw for a vesting campaign
|
|
23
|
+
*
|
|
24
|
+
* Keepers will automatically claim vested tokens on behalf of recipients.
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```typescript
|
|
28
|
+
* const result = await sdk.automation.enableAutoWithdraw({
|
|
29
|
+
* campaignId: 1n,
|
|
30
|
+
* frequency: 7 * 24 * 60 * 60, // Weekly
|
|
31
|
+
* tipAmount: parseEther('0.1'), // 0.1 ETH for keeper
|
|
32
|
+
* });
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
enableAutoWithdraw(params: EnableAutoWithdrawParams): Promise<TransactionResult>;
|
|
36
|
+
/**
|
|
37
|
+
* Disable auto-withdraw for a campaign
|
|
38
|
+
*
|
|
39
|
+
* Returns remaining tip balance to caller.
|
|
40
|
+
*/
|
|
41
|
+
disableAutoWithdraw(campaignId: bigint): Promise<TransactionResult>;
|
|
42
|
+
/**
|
|
43
|
+
* Enable auto-release for a lock campaign
|
|
44
|
+
*
|
|
45
|
+
* Keepers will automatically release tokens when unlock time passes.
|
|
46
|
+
*
|
|
47
|
+
* @example
|
|
48
|
+
* ```typescript
|
|
49
|
+
* const result = await sdk.automation.enableAutoRelease({
|
|
50
|
+
* campaignId: 5n,
|
|
51
|
+
* frequency: 3600, // Check every hour
|
|
52
|
+
* tipAmount: parseEther('0.05'), // 0.05 ETH for keeper
|
|
53
|
+
* });
|
|
54
|
+
* ```
|
|
55
|
+
*/
|
|
56
|
+
enableAutoRelease(params: EnableAutoReleaseParams & {
|
|
57
|
+
frequency?: number;
|
|
58
|
+
}): Promise<TransactionResult>;
|
|
59
|
+
/**
|
|
60
|
+
* Disable auto-release for a lock campaign
|
|
61
|
+
*/
|
|
62
|
+
disableAutoRelease(campaignId: bigint): Promise<TransactionResult>;
|
|
63
|
+
/**
|
|
64
|
+
* Get auto-withdraw status for a campaign
|
|
65
|
+
*
|
|
66
|
+
* @example
|
|
67
|
+
* ```typescript
|
|
68
|
+
* const status = await sdk.automation.getAutoWithdrawStatus(campaignId);
|
|
69
|
+
* console.log('Enabled:', status.enabled);
|
|
70
|
+
* console.log('Next run:', new Date(status.nextRun * 1000));
|
|
71
|
+
* console.log('Tip balance:', formatEther(status.tipBalance));
|
|
72
|
+
* ```
|
|
73
|
+
*/
|
|
74
|
+
getAutoWithdrawStatus(campaignId: bigint): Promise<AutomationStatus>;
|
|
75
|
+
/**
|
|
76
|
+
* Get auto-release status for a lock campaign
|
|
77
|
+
*/
|
|
78
|
+
getAutoReleaseStatus(campaignId: bigint): Promise<{
|
|
79
|
+
enabled: boolean;
|
|
80
|
+
frequency: number;
|
|
81
|
+
lastRun: number;
|
|
82
|
+
nextRun: number;
|
|
83
|
+
}>;
|
|
84
|
+
/**
|
|
85
|
+
* Preview automation for specific recipients
|
|
86
|
+
*/
|
|
87
|
+
previewAutomation(campaignId: bigint, recipients: Address[]): Promise<{
|
|
88
|
+
pendingCount: bigint;
|
|
89
|
+
nextFeeWei: bigint;
|
|
90
|
+
escrowWei: bigint;
|
|
91
|
+
}>;
|
|
92
|
+
/**
|
|
93
|
+
* Get automation run statistics
|
|
94
|
+
*/
|
|
95
|
+
getAutomationStats(campaignId: bigint, lockMode?: boolean): Promise<{
|
|
96
|
+
runsObserved: number;
|
|
97
|
+
avgRecipientsPerRun: number;
|
|
98
|
+
lastRecipientsProcessed: number;
|
|
99
|
+
maxRecipientsPerRun: number;
|
|
100
|
+
}>;
|
|
101
|
+
/**
|
|
102
|
+
* Check if auto-withdraw is currently runnable
|
|
103
|
+
*
|
|
104
|
+
* Returns true if cooldown has passed and there are pending recipients.
|
|
105
|
+
*/
|
|
106
|
+
isAutoWithdrawRunnable(campaignId: bigint): Promise<boolean>;
|
|
107
|
+
/**
|
|
108
|
+
* Check if auto-release is currently runnable
|
|
109
|
+
*/
|
|
110
|
+
isAutoReleaseRunnable(campaignId: bigint): Promise<boolean>;
|
|
111
|
+
/**
|
|
112
|
+
* Execute auto-withdraw for specific recipients (keeper only)
|
|
113
|
+
*
|
|
114
|
+
* @example
|
|
115
|
+
* ```typescript
|
|
116
|
+
* // Get recipients from registry or external source
|
|
117
|
+
* const recipients = ['0x...', '0x...', '0x...'];
|
|
118
|
+
* await sdk.automation.executeAutoWithdraw(campaignId, recipients);
|
|
119
|
+
* ```
|
|
120
|
+
*/
|
|
121
|
+
executeAutoWithdraw(campaignId: bigint, recipients: Address[]): Promise<TransactionResult>;
|
|
122
|
+
/**
|
|
123
|
+
* Execute auto-withdraw using registry cursor (keeper only)
|
|
124
|
+
*
|
|
125
|
+
* Processes up to batchSize recipients from the registry.
|
|
126
|
+
*/
|
|
127
|
+
executeAutoWithdrawNext(campaignId: bigint, batchSize?: number): Promise<TransactionResult>;
|
|
128
|
+
/**
|
|
129
|
+
* Execute auto-release for specific recipients (keeper only)
|
|
130
|
+
*/
|
|
131
|
+
executeAutoRelease(campaignId: bigint, recipients: Address[]): Promise<TransactionResult>;
|
|
132
|
+
/**
|
|
133
|
+
* Execute auto-release using registry cursor (keeper only)
|
|
134
|
+
*/
|
|
135
|
+
executeAutoReleaseNext(campaignId: bigint, batchSize?: number): Promise<TransactionResult>;
|
|
136
|
+
private requireWallet;
|
|
137
|
+
private createTransactionResult;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
export { AutomationModule, AutomationModule as default };
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import { PublicClient, WalletClient, Address } from 'viem';
|
|
2
|
+
import { E as EnableAutoWithdrawParams, T as TransactionResult, h as EnableAutoReleaseParams, A as AutomationStatus } from '../index-BTG0TRJt.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Automation Module
|
|
6
|
+
*
|
|
7
|
+
* Provides methods for keeper automation:
|
|
8
|
+
* - Enable/disable auto-withdraw for vesting campaigns
|
|
9
|
+
* - Enable/disable auto-release for locks
|
|
10
|
+
* - Query automation status
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Automation module for keeper-powered operations
|
|
15
|
+
*/
|
|
16
|
+
declare class AutomationModule {
|
|
17
|
+
private readonly publicClient;
|
|
18
|
+
private readonly walletClient;
|
|
19
|
+
private readonly diamondAddress;
|
|
20
|
+
constructor(publicClient: PublicClient, walletClient: WalletClient | undefined, diamondAddress: Address);
|
|
21
|
+
/**
|
|
22
|
+
* Enable auto-withdraw for a vesting campaign
|
|
23
|
+
*
|
|
24
|
+
* Keepers will automatically claim vested tokens on behalf of recipients.
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```typescript
|
|
28
|
+
* const result = await sdk.automation.enableAutoWithdraw({
|
|
29
|
+
* campaignId: 1n,
|
|
30
|
+
* frequency: 7 * 24 * 60 * 60, // Weekly
|
|
31
|
+
* tipAmount: parseEther('0.1'), // 0.1 ETH for keeper
|
|
32
|
+
* });
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
enableAutoWithdraw(params: EnableAutoWithdrawParams): Promise<TransactionResult>;
|
|
36
|
+
/**
|
|
37
|
+
* Disable auto-withdraw for a campaign
|
|
38
|
+
*
|
|
39
|
+
* Returns remaining tip balance to caller.
|
|
40
|
+
*/
|
|
41
|
+
disableAutoWithdraw(campaignId: bigint): Promise<TransactionResult>;
|
|
42
|
+
/**
|
|
43
|
+
* Enable auto-release for a lock campaign
|
|
44
|
+
*
|
|
45
|
+
* Keepers will automatically release tokens when unlock time passes.
|
|
46
|
+
*
|
|
47
|
+
* @example
|
|
48
|
+
* ```typescript
|
|
49
|
+
* const result = await sdk.automation.enableAutoRelease({
|
|
50
|
+
* campaignId: 5n,
|
|
51
|
+
* frequency: 3600, // Check every hour
|
|
52
|
+
* tipAmount: parseEther('0.05'), // 0.05 ETH for keeper
|
|
53
|
+
* });
|
|
54
|
+
* ```
|
|
55
|
+
*/
|
|
56
|
+
enableAutoRelease(params: EnableAutoReleaseParams & {
|
|
57
|
+
frequency?: number;
|
|
58
|
+
}): Promise<TransactionResult>;
|
|
59
|
+
/**
|
|
60
|
+
* Disable auto-release for a lock campaign
|
|
61
|
+
*/
|
|
62
|
+
disableAutoRelease(campaignId: bigint): Promise<TransactionResult>;
|
|
63
|
+
/**
|
|
64
|
+
* Get auto-withdraw status for a campaign
|
|
65
|
+
*
|
|
66
|
+
* @example
|
|
67
|
+
* ```typescript
|
|
68
|
+
* const status = await sdk.automation.getAutoWithdrawStatus(campaignId);
|
|
69
|
+
* console.log('Enabled:', status.enabled);
|
|
70
|
+
* console.log('Next run:', new Date(status.nextRun * 1000));
|
|
71
|
+
* console.log('Tip balance:', formatEther(status.tipBalance));
|
|
72
|
+
* ```
|
|
73
|
+
*/
|
|
74
|
+
getAutoWithdrawStatus(campaignId: bigint): Promise<AutomationStatus>;
|
|
75
|
+
/**
|
|
76
|
+
* Get auto-release status for a lock campaign
|
|
77
|
+
*/
|
|
78
|
+
getAutoReleaseStatus(campaignId: bigint): Promise<{
|
|
79
|
+
enabled: boolean;
|
|
80
|
+
frequency: number;
|
|
81
|
+
lastRun: number;
|
|
82
|
+
nextRun: number;
|
|
83
|
+
}>;
|
|
84
|
+
/**
|
|
85
|
+
* Preview automation for specific recipients
|
|
86
|
+
*/
|
|
87
|
+
previewAutomation(campaignId: bigint, recipients: Address[]): Promise<{
|
|
88
|
+
pendingCount: bigint;
|
|
89
|
+
nextFeeWei: bigint;
|
|
90
|
+
escrowWei: bigint;
|
|
91
|
+
}>;
|
|
92
|
+
/**
|
|
93
|
+
* Get automation run statistics
|
|
94
|
+
*/
|
|
95
|
+
getAutomationStats(campaignId: bigint, lockMode?: boolean): Promise<{
|
|
96
|
+
runsObserved: number;
|
|
97
|
+
avgRecipientsPerRun: number;
|
|
98
|
+
lastRecipientsProcessed: number;
|
|
99
|
+
maxRecipientsPerRun: number;
|
|
100
|
+
}>;
|
|
101
|
+
/**
|
|
102
|
+
* Check if auto-withdraw is currently runnable
|
|
103
|
+
*
|
|
104
|
+
* Returns true if cooldown has passed and there are pending recipients.
|
|
105
|
+
*/
|
|
106
|
+
isAutoWithdrawRunnable(campaignId: bigint): Promise<boolean>;
|
|
107
|
+
/**
|
|
108
|
+
* Check if auto-release is currently runnable
|
|
109
|
+
*/
|
|
110
|
+
isAutoReleaseRunnable(campaignId: bigint): Promise<boolean>;
|
|
111
|
+
/**
|
|
112
|
+
* Execute auto-withdraw for specific recipients (keeper only)
|
|
113
|
+
*
|
|
114
|
+
* @example
|
|
115
|
+
* ```typescript
|
|
116
|
+
* // Get recipients from registry or external source
|
|
117
|
+
* const recipients = ['0x...', '0x...', '0x...'];
|
|
118
|
+
* await sdk.automation.executeAutoWithdraw(campaignId, recipients);
|
|
119
|
+
* ```
|
|
120
|
+
*/
|
|
121
|
+
executeAutoWithdraw(campaignId: bigint, recipients: Address[]): Promise<TransactionResult>;
|
|
122
|
+
/**
|
|
123
|
+
* Execute auto-withdraw using registry cursor (keeper only)
|
|
124
|
+
*
|
|
125
|
+
* Processes up to batchSize recipients from the registry.
|
|
126
|
+
*/
|
|
127
|
+
executeAutoWithdrawNext(campaignId: bigint, batchSize?: number): Promise<TransactionResult>;
|
|
128
|
+
/**
|
|
129
|
+
* Execute auto-release for specific recipients (keeper only)
|
|
130
|
+
*/
|
|
131
|
+
executeAutoRelease(campaignId: bigint, recipients: Address[]): Promise<TransactionResult>;
|
|
132
|
+
/**
|
|
133
|
+
* Execute auto-release using registry cursor (keeper only)
|
|
134
|
+
*/
|
|
135
|
+
executeAutoReleaseNext(campaignId: bigint, batchSize?: number): Promise<TransactionResult>;
|
|
136
|
+
private requireWallet;
|
|
137
|
+
private createTransactionResult;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
export { AutomationModule, AutomationModule as default };
|