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,321 @@
|
|
|
1
|
+
import { Address } from 'viem';
|
|
2
|
+
import { i as PaginatedResponse, j as ApiCampaign, k as ApiOrder, l as ApiStakingPool } from '../index-BTG0TRJt.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* API Client Module
|
|
6
|
+
*
|
|
7
|
+
* Provides methods for querying indexed blockchain data:
|
|
8
|
+
* - Campaign queries
|
|
9
|
+
* - Order queries
|
|
10
|
+
* - Wallet activity
|
|
11
|
+
* - Token information
|
|
12
|
+
* - Staking pool queries
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Query parameters for campaigns
|
|
17
|
+
*/
|
|
18
|
+
interface CampaignQueryParams {
|
|
19
|
+
/** Filter by campaign kind */
|
|
20
|
+
kind?: 'instant_airdrop' | 'vested_airdrop' | 'lock' | 'vesting';
|
|
21
|
+
/** Filter by creator address */
|
|
22
|
+
creator?: Address;
|
|
23
|
+
/** Filter by token address */
|
|
24
|
+
token?: Address;
|
|
25
|
+
/** Filter by status */
|
|
26
|
+
status?: 'active' | 'paused' | 'finalized';
|
|
27
|
+
/** Page number (1-indexed) */
|
|
28
|
+
page?: number;
|
|
29
|
+
/** Items per page */
|
|
30
|
+
pageSize?: number;
|
|
31
|
+
/** Sort field */
|
|
32
|
+
sortBy?: 'createdAt' | 'totalAllocated' | 'recipientCount';
|
|
33
|
+
/** Sort direction */
|
|
34
|
+
sortOrder?: 'asc' | 'desc';
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Query parameters for orders
|
|
38
|
+
*/
|
|
39
|
+
interface OrderQueryParams {
|
|
40
|
+
/** Filter by order type */
|
|
41
|
+
orderType?: 'instant' | 'vested' | 'tradable';
|
|
42
|
+
/** Filter by seller */
|
|
43
|
+
seller?: Address;
|
|
44
|
+
/** Filter by sell token */
|
|
45
|
+
sellToken?: Address;
|
|
46
|
+
/** Filter by pay token */
|
|
47
|
+
payToken?: Address;
|
|
48
|
+
/** Filter by status */
|
|
49
|
+
status?: 'open' | 'filled' | 'canceled' | 'expired';
|
|
50
|
+
/** Filter by campaign (for tradable) */
|
|
51
|
+
campaignId?: string;
|
|
52
|
+
/** Page number */
|
|
53
|
+
page?: number;
|
|
54
|
+
/** Items per page */
|
|
55
|
+
pageSize?: number;
|
|
56
|
+
/** Sort field */
|
|
57
|
+
sortBy?: 'createdAt' | 'totalPrice' | 'expiresAt';
|
|
58
|
+
/** Sort direction */
|
|
59
|
+
sortOrder?: 'asc' | 'desc';
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Query parameters for staking pools
|
|
63
|
+
*/
|
|
64
|
+
interface PoolQueryParams {
|
|
65
|
+
/** Filter by stake token */
|
|
66
|
+
stakeToken?: Address;
|
|
67
|
+
/** Filter by reward token */
|
|
68
|
+
rewardToken?: Address;
|
|
69
|
+
/** Filter by creator */
|
|
70
|
+
creator?: Address;
|
|
71
|
+
/** Filter by active status */
|
|
72
|
+
isActive?: boolean;
|
|
73
|
+
/** Page number */
|
|
74
|
+
page?: number;
|
|
75
|
+
/** Items per page */
|
|
76
|
+
pageSize?: number;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Wallet activity summary
|
|
80
|
+
*/
|
|
81
|
+
interface WalletActivity {
|
|
82
|
+
address: Address;
|
|
83
|
+
/** Campaigns where wallet is a recipient */
|
|
84
|
+
campaigns: {
|
|
85
|
+
id: string;
|
|
86
|
+
kind: string;
|
|
87
|
+
allocated: string;
|
|
88
|
+
claimed: string;
|
|
89
|
+
due: string;
|
|
90
|
+
}[];
|
|
91
|
+
/** Open orders created by wallet */
|
|
92
|
+
openOrders: ApiOrder[];
|
|
93
|
+
/** Staking positions */
|
|
94
|
+
stakes: {
|
|
95
|
+
poolId: string;
|
|
96
|
+
amount: string;
|
|
97
|
+
pendingRewards: string;
|
|
98
|
+
}[];
|
|
99
|
+
/** Total value across all positions (in USD if available) */
|
|
100
|
+
totalValue?: string;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Token information from enrichment
|
|
104
|
+
*/
|
|
105
|
+
interface TokenInfo {
|
|
106
|
+
address: Address;
|
|
107
|
+
chainId: number;
|
|
108
|
+
symbol: string;
|
|
109
|
+
name: string;
|
|
110
|
+
decimals: number;
|
|
111
|
+
logoUrl?: string;
|
|
112
|
+
priceUsd?: string;
|
|
113
|
+
marketCap?: string;
|
|
114
|
+
volume24h?: string;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* API client for indexed blockchain data
|
|
118
|
+
*/
|
|
119
|
+
declare class ApiClient {
|
|
120
|
+
private readonly baseUrl;
|
|
121
|
+
private readonly chainId;
|
|
122
|
+
constructor(baseUrl: string, chainId: number);
|
|
123
|
+
/**
|
|
124
|
+
* Get campaigns with optional filtering
|
|
125
|
+
*
|
|
126
|
+
* @example
|
|
127
|
+
* ```typescript
|
|
128
|
+
* const campaigns = await sdk.api.getCampaigns({
|
|
129
|
+
* kind: 'vested_airdrop',
|
|
130
|
+
* status: 'active',
|
|
131
|
+
* page: 1,
|
|
132
|
+
* pageSize: 20,
|
|
133
|
+
* });
|
|
134
|
+
* ```
|
|
135
|
+
*/
|
|
136
|
+
getCampaigns(params?: CampaignQueryParams): Promise<PaginatedResponse<ApiCampaign>>;
|
|
137
|
+
/**
|
|
138
|
+
* Get a single campaign by ID
|
|
139
|
+
*/
|
|
140
|
+
getCampaign(campaignId: string): Promise<ApiCampaign>;
|
|
141
|
+
/**
|
|
142
|
+
* Get campaign recipients
|
|
143
|
+
*/
|
|
144
|
+
getCampaignRecipients(campaignId: string, params?: {
|
|
145
|
+
page?: number;
|
|
146
|
+
pageSize?: number;
|
|
147
|
+
}): Promise<PaginatedResponse<{
|
|
148
|
+
address: Address;
|
|
149
|
+
allocated: string;
|
|
150
|
+
claimed: string;
|
|
151
|
+
blocked: boolean;
|
|
152
|
+
}>>;
|
|
153
|
+
/**
|
|
154
|
+
* Get campaign activity/claims
|
|
155
|
+
*/
|
|
156
|
+
getCampaignActivity(campaignId: string, params?: {
|
|
157
|
+
page?: number;
|
|
158
|
+
pageSize?: number;
|
|
159
|
+
}): Promise<PaginatedResponse<{
|
|
160
|
+
recipient: Address;
|
|
161
|
+
amount: string;
|
|
162
|
+
timestamp: string;
|
|
163
|
+
txHash: string;
|
|
164
|
+
}>>;
|
|
165
|
+
/**
|
|
166
|
+
* Get marketplace orders with optional filtering
|
|
167
|
+
*
|
|
168
|
+
* @example
|
|
169
|
+
* ```typescript
|
|
170
|
+
* const orders = await sdk.api.getOrders({
|
|
171
|
+
* orderType: 'tradable',
|
|
172
|
+
* status: 'open',
|
|
173
|
+
* sortBy: 'totalPrice',
|
|
174
|
+
* sortOrder: 'asc',
|
|
175
|
+
* });
|
|
176
|
+
* ```
|
|
177
|
+
*/
|
|
178
|
+
getOrders(params?: OrderQueryParams): Promise<PaginatedResponse<ApiOrder>>;
|
|
179
|
+
/**
|
|
180
|
+
* Get a single order by ID
|
|
181
|
+
*/
|
|
182
|
+
getOrder(orderId: string): Promise<ApiOrder>;
|
|
183
|
+
/**
|
|
184
|
+
* Get order price quote
|
|
185
|
+
*/
|
|
186
|
+
getOrderQuote(orderId: string): Promise<{
|
|
187
|
+
totalPrice: string;
|
|
188
|
+
protocolFee: string;
|
|
189
|
+
sellerReceives: string;
|
|
190
|
+
isValid: boolean;
|
|
191
|
+
}>;
|
|
192
|
+
/**
|
|
193
|
+
* Get staking pools with optional filtering
|
|
194
|
+
*/
|
|
195
|
+
getStakingPools(params?: PoolQueryParams): Promise<PaginatedResponse<ApiStakingPool>>;
|
|
196
|
+
/**
|
|
197
|
+
* Get a single staking pool by ID
|
|
198
|
+
*/
|
|
199
|
+
getStakingPool(poolId: string): Promise<ApiStakingPool>;
|
|
200
|
+
/**
|
|
201
|
+
* Get stakers for a pool
|
|
202
|
+
*/
|
|
203
|
+
getPoolStakers(poolId: string, params?: {
|
|
204
|
+
page?: number;
|
|
205
|
+
pageSize?: number;
|
|
206
|
+
}): Promise<PaginatedResponse<{
|
|
207
|
+
address: Address;
|
|
208
|
+
amount: string;
|
|
209
|
+
pendingRewards: string;
|
|
210
|
+
}>>;
|
|
211
|
+
/**
|
|
212
|
+
* Get wallet activity summary
|
|
213
|
+
*
|
|
214
|
+
* @example
|
|
215
|
+
* ```typescript
|
|
216
|
+
* const activity = await sdk.api.getWalletActivity(address);
|
|
217
|
+
* console.log('Campaigns:', activity.campaigns.length);
|
|
218
|
+
* console.log('Open orders:', activity.openOrders.length);
|
|
219
|
+
* console.log('Stakes:', activity.stakes.length);
|
|
220
|
+
* ```
|
|
221
|
+
*/
|
|
222
|
+
getWalletActivity(address: Address): Promise<WalletActivity>;
|
|
223
|
+
/**
|
|
224
|
+
* Get wallet claims history
|
|
225
|
+
*/
|
|
226
|
+
getWalletClaims(address: Address, params?: {
|
|
227
|
+
page?: number;
|
|
228
|
+
pageSize?: number;
|
|
229
|
+
}): Promise<PaginatedResponse<{
|
|
230
|
+
campaignId: string;
|
|
231
|
+
amount: string;
|
|
232
|
+
timestamp: string;
|
|
233
|
+
txHash: string;
|
|
234
|
+
}>>;
|
|
235
|
+
/**
|
|
236
|
+
* Get wallet positions (campaigns where wallet has allocations)
|
|
237
|
+
*/
|
|
238
|
+
getWalletPositions(address: Address): Promise<{
|
|
239
|
+
campaignId: string;
|
|
240
|
+
kind: string;
|
|
241
|
+
token: Address;
|
|
242
|
+
allocated: string;
|
|
243
|
+
claimed: string;
|
|
244
|
+
due: string;
|
|
245
|
+
vestingProgress: number;
|
|
246
|
+
}[]>;
|
|
247
|
+
/**
|
|
248
|
+
* Search for tokens
|
|
249
|
+
*
|
|
250
|
+
* @example
|
|
251
|
+
* ```typescript
|
|
252
|
+
* const tokens = await sdk.api.searchTokens('USDC');
|
|
253
|
+
* ```
|
|
254
|
+
*/
|
|
255
|
+
searchTokens(query: string): Promise<TokenInfo[]>;
|
|
256
|
+
/**
|
|
257
|
+
* Get token information by address
|
|
258
|
+
*/
|
|
259
|
+
getToken(address: Address): Promise<TokenInfo>;
|
|
260
|
+
/**
|
|
261
|
+
* Get token price
|
|
262
|
+
*/
|
|
263
|
+
getTokenPrice(address: Address): Promise<{
|
|
264
|
+
priceUsd: string;
|
|
265
|
+
priceChange24h: string;
|
|
266
|
+
timestamp: string;
|
|
267
|
+
}>;
|
|
268
|
+
/**
|
|
269
|
+
* Check API health
|
|
270
|
+
*/
|
|
271
|
+
health(): Promise<{
|
|
272
|
+
status: 'ok' | 'degraded' | 'down';
|
|
273
|
+
indexerBlockHeight: number;
|
|
274
|
+
chainBlockHeight: number;
|
|
275
|
+
lag: number;
|
|
276
|
+
}>;
|
|
277
|
+
/**
|
|
278
|
+
* Get supported chains
|
|
279
|
+
*/
|
|
280
|
+
getChains(): Promise<{
|
|
281
|
+
chainId: number;
|
|
282
|
+
name: string;
|
|
283
|
+
rpcUrl: string;
|
|
284
|
+
diamondAddress: Address;
|
|
285
|
+
}[]>;
|
|
286
|
+
/**
|
|
287
|
+
* Prepare a claim transaction
|
|
288
|
+
*
|
|
289
|
+
* Returns the calldata for a claim transaction.
|
|
290
|
+
*/
|
|
291
|
+
prepareClaimTx(params: {
|
|
292
|
+
campaignId: string;
|
|
293
|
+
recipient: Address;
|
|
294
|
+
}): Promise<{
|
|
295
|
+
to: Address;
|
|
296
|
+
data: `0x${string}`;
|
|
297
|
+
value: string;
|
|
298
|
+
estimatedGas: string;
|
|
299
|
+
}>;
|
|
300
|
+
/**
|
|
301
|
+
* Prepare a fill order transaction
|
|
302
|
+
*/
|
|
303
|
+
prepareFillOrderTx(params: {
|
|
304
|
+
orderId: string;
|
|
305
|
+
}): Promise<{
|
|
306
|
+
to: Address;
|
|
307
|
+
data: `0x${string}`;
|
|
308
|
+
value: string;
|
|
309
|
+
estimatedGas: string;
|
|
310
|
+
}>;
|
|
311
|
+
private fetch;
|
|
312
|
+
}
|
|
313
|
+
/**
|
|
314
|
+
* API error class
|
|
315
|
+
*/
|
|
316
|
+
declare class ApiError extends Error {
|
|
317
|
+
readonly status: number;
|
|
318
|
+
constructor(status: number, message: string);
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
export { ApiClient, ApiError, type CampaignQueryParams, type OrderQueryParams, type PoolQueryParams, type TokenInfo, type WalletActivity, ApiClient as default };
|
|
@@ -0,0 +1,312 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
// src/api/index.ts
|
|
6
|
+
var ApiClient = class {
|
|
7
|
+
baseUrl;
|
|
8
|
+
chainId;
|
|
9
|
+
constructor(baseUrl, chainId) {
|
|
10
|
+
this.baseUrl = baseUrl.endsWith("/") ? baseUrl.slice(0, -1) : baseUrl;
|
|
11
|
+
this.chainId = chainId;
|
|
12
|
+
}
|
|
13
|
+
// ============================================================================
|
|
14
|
+
// Campaign Queries
|
|
15
|
+
// ============================================================================
|
|
16
|
+
/**
|
|
17
|
+
* Get campaigns with optional filtering
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```typescript
|
|
21
|
+
* const campaigns = await sdk.api.getCampaigns({
|
|
22
|
+
* kind: 'vested_airdrop',
|
|
23
|
+
* status: 'active',
|
|
24
|
+
* page: 1,
|
|
25
|
+
* pageSize: 20,
|
|
26
|
+
* });
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
async getCampaigns(params = {}) {
|
|
30
|
+
const searchParams = new URLSearchParams();
|
|
31
|
+
if (params.kind) searchParams.set("kind", params.kind);
|
|
32
|
+
if (params.creator) searchParams.set("creator", params.creator);
|
|
33
|
+
if (params.token) searchParams.set("token", params.token);
|
|
34
|
+
if (params.status) searchParams.set("status", params.status);
|
|
35
|
+
if (params.page) searchParams.set("page", String(params.page));
|
|
36
|
+
if (params.pageSize) searchParams.set("pageSize", String(params.pageSize));
|
|
37
|
+
if (params.sortBy) searchParams.set("sortBy", params.sortBy);
|
|
38
|
+
if (params.sortOrder) searchParams.set("sortOrder", params.sortOrder);
|
|
39
|
+
searchParams.set("chainId", String(this.chainId));
|
|
40
|
+
return this.fetch(
|
|
41
|
+
`/v1/campaigns?${searchParams.toString()}`
|
|
42
|
+
);
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Get a single campaign by ID
|
|
46
|
+
*/
|
|
47
|
+
async getCampaign(campaignId) {
|
|
48
|
+
return this.fetch(
|
|
49
|
+
`/v1/campaigns/${campaignId}?chainId=${this.chainId}`
|
|
50
|
+
);
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Get campaign recipients
|
|
54
|
+
*/
|
|
55
|
+
async getCampaignRecipients(campaignId, params = {}) {
|
|
56
|
+
const searchParams = new URLSearchParams();
|
|
57
|
+
searchParams.set("chainId", String(this.chainId));
|
|
58
|
+
if (params.page) searchParams.set("page", String(params.page));
|
|
59
|
+
if (params.pageSize) searchParams.set("pageSize", String(params.pageSize));
|
|
60
|
+
return this.fetch(
|
|
61
|
+
`/v1/campaigns/${campaignId}/recipients?${searchParams.toString()}`
|
|
62
|
+
);
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Get campaign activity/claims
|
|
66
|
+
*/
|
|
67
|
+
async getCampaignActivity(campaignId, params = {}) {
|
|
68
|
+
const searchParams = new URLSearchParams();
|
|
69
|
+
searchParams.set("chainId", String(this.chainId));
|
|
70
|
+
if (params.page) searchParams.set("page", String(params.page));
|
|
71
|
+
if (params.pageSize) searchParams.set("pageSize", String(params.pageSize));
|
|
72
|
+
return this.fetch(
|
|
73
|
+
`/v1/campaigns/${campaignId}/activity?${searchParams.toString()}`
|
|
74
|
+
);
|
|
75
|
+
}
|
|
76
|
+
// ============================================================================
|
|
77
|
+
// Order Queries
|
|
78
|
+
// ============================================================================
|
|
79
|
+
/**
|
|
80
|
+
* Get marketplace orders with optional filtering
|
|
81
|
+
*
|
|
82
|
+
* @example
|
|
83
|
+
* ```typescript
|
|
84
|
+
* const orders = await sdk.api.getOrders({
|
|
85
|
+
* orderType: 'tradable',
|
|
86
|
+
* status: 'open',
|
|
87
|
+
* sortBy: 'totalPrice',
|
|
88
|
+
* sortOrder: 'asc',
|
|
89
|
+
* });
|
|
90
|
+
* ```
|
|
91
|
+
*/
|
|
92
|
+
async getOrders(params = {}) {
|
|
93
|
+
const searchParams = new URLSearchParams();
|
|
94
|
+
if (params.orderType) searchParams.set("orderType", params.orderType);
|
|
95
|
+
if (params.seller) searchParams.set("seller", params.seller);
|
|
96
|
+
if (params.sellToken) searchParams.set("sellToken", params.sellToken);
|
|
97
|
+
if (params.payToken) searchParams.set("payToken", params.payToken);
|
|
98
|
+
if (params.status) searchParams.set("status", params.status);
|
|
99
|
+
if (params.campaignId) searchParams.set("campaignId", params.campaignId);
|
|
100
|
+
if (params.page) searchParams.set("page", String(params.page));
|
|
101
|
+
if (params.pageSize) searchParams.set("pageSize", String(params.pageSize));
|
|
102
|
+
if (params.sortBy) searchParams.set("sortBy", params.sortBy);
|
|
103
|
+
if (params.sortOrder) searchParams.set("sortOrder", params.sortOrder);
|
|
104
|
+
searchParams.set("chainId", String(this.chainId));
|
|
105
|
+
return this.fetch(
|
|
106
|
+
`/v1/marketplace/orders?${searchParams.toString()}`
|
|
107
|
+
);
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Get a single order by ID
|
|
111
|
+
*/
|
|
112
|
+
async getOrder(orderId) {
|
|
113
|
+
return this.fetch(
|
|
114
|
+
`/v1/marketplace/orders/${orderId}?chainId=${this.chainId}`
|
|
115
|
+
);
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Get order price quote
|
|
119
|
+
*/
|
|
120
|
+
async getOrderQuote(orderId) {
|
|
121
|
+
return this.fetch(
|
|
122
|
+
`/v1/marketplace/orders/${orderId}/quote?chainId=${this.chainId}`
|
|
123
|
+
);
|
|
124
|
+
}
|
|
125
|
+
// ============================================================================
|
|
126
|
+
// Staking Queries
|
|
127
|
+
// ============================================================================
|
|
128
|
+
/**
|
|
129
|
+
* Get staking pools with optional filtering
|
|
130
|
+
*/
|
|
131
|
+
async getStakingPools(params = {}) {
|
|
132
|
+
const searchParams = new URLSearchParams();
|
|
133
|
+
if (params.stakeToken) searchParams.set("stakeToken", params.stakeToken);
|
|
134
|
+
if (params.rewardToken) searchParams.set("rewardToken", params.rewardToken);
|
|
135
|
+
if (params.creator) searchParams.set("creator", params.creator);
|
|
136
|
+
if (params.isActive !== void 0)
|
|
137
|
+
searchParams.set("isActive", String(params.isActive));
|
|
138
|
+
if (params.page) searchParams.set("page", String(params.page));
|
|
139
|
+
if (params.pageSize) searchParams.set("pageSize", String(params.pageSize));
|
|
140
|
+
searchParams.set("chainId", String(this.chainId));
|
|
141
|
+
return this.fetch(
|
|
142
|
+
`/v1/staking/pools?${searchParams.toString()}`
|
|
143
|
+
);
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Get a single staking pool by ID
|
|
147
|
+
*/
|
|
148
|
+
async getStakingPool(poolId) {
|
|
149
|
+
return this.fetch(
|
|
150
|
+
`/v1/staking/pools/${poolId}?chainId=${this.chainId}`
|
|
151
|
+
);
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Get stakers for a pool
|
|
155
|
+
*/
|
|
156
|
+
async getPoolStakers(poolId, params = {}) {
|
|
157
|
+
const searchParams = new URLSearchParams();
|
|
158
|
+
searchParams.set("chainId", String(this.chainId));
|
|
159
|
+
if (params.page) searchParams.set("page", String(params.page));
|
|
160
|
+
if (params.pageSize) searchParams.set("pageSize", String(params.pageSize));
|
|
161
|
+
return this.fetch(
|
|
162
|
+
`/v1/staking/pools/${poolId}/stakers?${searchParams.toString()}`
|
|
163
|
+
);
|
|
164
|
+
}
|
|
165
|
+
// ============================================================================
|
|
166
|
+
// Wallet Queries
|
|
167
|
+
// ============================================================================
|
|
168
|
+
/**
|
|
169
|
+
* Get wallet activity summary
|
|
170
|
+
*
|
|
171
|
+
* @example
|
|
172
|
+
* ```typescript
|
|
173
|
+
* const activity = await sdk.api.getWalletActivity(address);
|
|
174
|
+
* console.log('Campaigns:', activity.campaigns.length);
|
|
175
|
+
* console.log('Open orders:', activity.openOrders.length);
|
|
176
|
+
* console.log('Stakes:', activity.stakes.length);
|
|
177
|
+
* ```
|
|
178
|
+
*/
|
|
179
|
+
async getWalletActivity(address) {
|
|
180
|
+
return this.fetch(
|
|
181
|
+
`/v1/wallets/${address}?chainId=${this.chainId}`
|
|
182
|
+
);
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Get wallet claims history
|
|
186
|
+
*/
|
|
187
|
+
async getWalletClaims(address, params = {}) {
|
|
188
|
+
const searchParams = new URLSearchParams();
|
|
189
|
+
searchParams.set("chainId", String(this.chainId));
|
|
190
|
+
if (params.page) searchParams.set("page", String(params.page));
|
|
191
|
+
if (params.pageSize) searchParams.set("pageSize", String(params.pageSize));
|
|
192
|
+
return this.fetch(
|
|
193
|
+
`/v1/wallets/${address}/claims?${searchParams.toString()}`
|
|
194
|
+
);
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Get wallet positions (campaigns where wallet has allocations)
|
|
198
|
+
*/
|
|
199
|
+
async getWalletPositions(address) {
|
|
200
|
+
return this.fetch(
|
|
201
|
+
`/v1/wallets/${address}/positions?chainId=${this.chainId}`
|
|
202
|
+
);
|
|
203
|
+
}
|
|
204
|
+
// ============================================================================
|
|
205
|
+
// Token Queries
|
|
206
|
+
// ============================================================================
|
|
207
|
+
/**
|
|
208
|
+
* Search for tokens
|
|
209
|
+
*
|
|
210
|
+
* @example
|
|
211
|
+
* ```typescript
|
|
212
|
+
* const tokens = await sdk.api.searchTokens('USDC');
|
|
213
|
+
* ```
|
|
214
|
+
*/
|
|
215
|
+
async searchTokens(query) {
|
|
216
|
+
return this.fetch(
|
|
217
|
+
`/v1/tokens?q=${encodeURIComponent(query)}&chainId=${this.chainId}`
|
|
218
|
+
);
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Get token information by address
|
|
222
|
+
*/
|
|
223
|
+
async getToken(address) {
|
|
224
|
+
return this.fetch(
|
|
225
|
+
`/v1/tokens/${address}?chainId=${this.chainId}`
|
|
226
|
+
);
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Get token price
|
|
230
|
+
*/
|
|
231
|
+
async getTokenPrice(address) {
|
|
232
|
+
return this.fetch(
|
|
233
|
+
`/v1/tokens/${address}/price?chainId=${this.chainId}`
|
|
234
|
+
);
|
|
235
|
+
}
|
|
236
|
+
// ============================================================================
|
|
237
|
+
// Health & Status
|
|
238
|
+
// ============================================================================
|
|
239
|
+
/**
|
|
240
|
+
* Check API health
|
|
241
|
+
*/
|
|
242
|
+
async health() {
|
|
243
|
+
return this.fetch("/health");
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Get supported chains
|
|
247
|
+
*/
|
|
248
|
+
async getChains() {
|
|
249
|
+
return this.fetch("/v1/chains");
|
|
250
|
+
}
|
|
251
|
+
// ============================================================================
|
|
252
|
+
// Actions (Transaction Preparation)
|
|
253
|
+
// ============================================================================
|
|
254
|
+
/**
|
|
255
|
+
* Prepare a claim transaction
|
|
256
|
+
*
|
|
257
|
+
* Returns the calldata for a claim transaction.
|
|
258
|
+
*/
|
|
259
|
+
async prepareClaimTx(params) {
|
|
260
|
+
return this.fetch("/v1/actions/claim", {
|
|
261
|
+
method: "POST",
|
|
262
|
+
body: JSON.stringify({
|
|
263
|
+
...params,
|
|
264
|
+
chainId: this.chainId
|
|
265
|
+
})
|
|
266
|
+
});
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Prepare a fill order transaction
|
|
270
|
+
*/
|
|
271
|
+
async prepareFillOrderTx(params) {
|
|
272
|
+
return this.fetch("/v1/actions/fill-order", {
|
|
273
|
+
method: "POST",
|
|
274
|
+
body: JSON.stringify({
|
|
275
|
+
...params,
|
|
276
|
+
chainId: this.chainId
|
|
277
|
+
})
|
|
278
|
+
});
|
|
279
|
+
}
|
|
280
|
+
// ============================================================================
|
|
281
|
+
// Helpers
|
|
282
|
+
// ============================================================================
|
|
283
|
+
async fetch(endpoint, options = {}) {
|
|
284
|
+
const url = `${this.baseUrl}${endpoint}`;
|
|
285
|
+
const response = await fetch(url, {
|
|
286
|
+
...options,
|
|
287
|
+
headers: {
|
|
288
|
+
"Content-Type": "application/json",
|
|
289
|
+
...options.headers
|
|
290
|
+
}
|
|
291
|
+
});
|
|
292
|
+
if (!response.ok) {
|
|
293
|
+
const error = await response.text();
|
|
294
|
+
throw new ApiError(response.status, error);
|
|
295
|
+
}
|
|
296
|
+
return response.json();
|
|
297
|
+
}
|
|
298
|
+
};
|
|
299
|
+
var ApiError = class extends Error {
|
|
300
|
+
constructor(status, message) {
|
|
301
|
+
super(`API Error (${status}): ${message}`);
|
|
302
|
+
this.status = status;
|
|
303
|
+
this.name = "ApiError";
|
|
304
|
+
}
|
|
305
|
+
};
|
|
306
|
+
var api_default = ApiClient;
|
|
307
|
+
|
|
308
|
+
exports.ApiClient = ApiClient;
|
|
309
|
+
exports.ApiError = ApiError;
|
|
310
|
+
exports.default = api_default;
|
|
311
|
+
//# sourceMappingURL=index.js.map
|
|
312
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/api/index.ts"],"names":[],"mappings":"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","file":"index.js","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"]}
|