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.
Files changed (62) hide show
  1. package/README.md +405 -0
  2. package/dist/api/index.d.mts +321 -0
  3. package/dist/api/index.d.ts +321 -0
  4. package/dist/api/index.js +312 -0
  5. package/dist/api/index.js.map +1 -0
  6. package/dist/api/index.mjs +306 -0
  7. package/dist/api/index.mjs.map +1 -0
  8. package/dist/automation/index.d.mts +140 -0
  9. package/dist/automation/index.d.ts +140 -0
  10. package/dist/automation/index.js +331 -0
  11. package/dist/automation/index.js.map +1 -0
  12. package/dist/automation/index.mjs +326 -0
  13. package/dist/automation/index.mjs.map +1 -0
  14. package/dist/campaigns/index.d.mts +286 -0
  15. package/dist/campaigns/index.d.ts +286 -0
  16. package/dist/campaigns/index.js +652 -0
  17. package/dist/campaigns/index.js.map +1 -0
  18. package/dist/campaigns/index.mjs +645 -0
  19. package/dist/campaigns/index.mjs.map +1 -0
  20. package/dist/claims/index.d.mts +190 -0
  21. package/dist/claims/index.d.ts +190 -0
  22. package/dist/claims/index.js +414 -0
  23. package/dist/claims/index.js.map +1 -0
  24. package/dist/claims/index.mjs +409 -0
  25. package/dist/claims/index.mjs.map +1 -0
  26. package/dist/index-BTG0TRJt.d.mts +555 -0
  27. package/dist/index-BTG0TRJt.d.ts +555 -0
  28. package/dist/index.d.mts +170 -0
  29. package/dist/index.d.ts +170 -0
  30. package/dist/index.js +2926 -0
  31. package/dist/index.js.map +1 -0
  32. package/dist/index.mjs +2888 -0
  33. package/dist/index.mjs.map +1 -0
  34. package/dist/marketplace/index.d.mts +225 -0
  35. package/dist/marketplace/index.d.ts +225 -0
  36. package/dist/marketplace/index.js +529 -0
  37. package/dist/marketplace/index.js.map +1 -0
  38. package/dist/marketplace/index.mjs +524 -0
  39. package/dist/marketplace/index.mjs.map +1 -0
  40. package/dist/react/index.d.mts +185 -0
  41. package/dist/react/index.d.ts +185 -0
  42. package/dist/react/index.js +340 -0
  43. package/dist/react/index.js.map +1 -0
  44. package/dist/react/index.mjs +333 -0
  45. package/dist/react/index.mjs.map +1 -0
  46. package/dist/staking/index.d.mts +158 -0
  47. package/dist/staking/index.d.ts +158 -0
  48. package/dist/staking/index.js +359 -0
  49. package/dist/staking/index.js.map +1 -0
  50. package/dist/staking/index.mjs +354 -0
  51. package/dist/staking/index.mjs.map +1 -0
  52. package/package.json +106 -0
  53. package/src/api/index.ts +577 -0
  54. package/src/automation/index.ts +436 -0
  55. package/src/campaigns/index.ts +835 -0
  56. package/src/claims/index.ts +530 -0
  57. package/src/client.ts +518 -0
  58. package/src/index.ts +101 -0
  59. package/src/marketplace/index.ts +730 -0
  60. package/src/react/index.ts +498 -0
  61. package/src/staking/index.ts +449 -0
  62. 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"]}