@gatewayfm/ups-sdk 0.1.13

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 (47) hide show
  1. package/dist/account/index.d.mts +18 -0
  2. package/dist/account/index.d.ts +18 -0
  3. package/dist/account/index.js +12 -0
  4. package/dist/account/index.js.map +1 -0
  5. package/dist/account/index.mjs +3 -0
  6. package/dist/account/index.mjs.map +1 -0
  7. package/dist/chunk-2S2KS5ZI.js +150 -0
  8. package/dist/chunk-2S2KS5ZI.js.map +1 -0
  9. package/dist/chunk-BH5YEAE6.mjs +47 -0
  10. package/dist/chunk-BH5YEAE6.mjs.map +1 -0
  11. package/dist/chunk-BUSFZFJS.mjs +55 -0
  12. package/dist/chunk-BUSFZFJS.mjs.map +1 -0
  13. package/dist/chunk-G525R6AV.js +54 -0
  14. package/dist/chunk-G525R6AV.js.map +1 -0
  15. package/dist/chunk-PMX24TXY.js +138 -0
  16. package/dist/chunk-PMX24TXY.js.map +1 -0
  17. package/dist/chunk-S65V52WZ.mjs +148 -0
  18. package/dist/chunk-S65V52WZ.mjs.map +1 -0
  19. package/dist/chunk-VORGSH76.mjs +136 -0
  20. package/dist/chunk-VORGSH76.mjs.map +1 -0
  21. package/dist/chunk-XKQI2VMJ.js +57 -0
  22. package/dist/chunk-XKQI2VMJ.js.map +1 -0
  23. package/dist/http-client-D9JtkvUx.d.mts +22 -0
  24. package/dist/http-client-D9JtkvUx.d.ts +22 -0
  25. package/dist/index-1p5DSytk.d.mts +35 -0
  26. package/dist/index-Csrh5-dl.d.mts +160 -0
  27. package/dist/index-Csrh5-dl.d.ts +160 -0
  28. package/dist/index-D_ytPgEV.d.ts +35 -0
  29. package/dist/index.d.mts +130 -0
  30. package/dist/index.d.ts +130 -0
  31. package/dist/index.js +485 -0
  32. package/dist/index.js.map +1 -0
  33. package/dist/index.mjs +445 -0
  34. package/dist/index.mjs.map +1 -0
  35. package/dist/payment/index.d.mts +25 -0
  36. package/dist/payment/index.d.ts +25 -0
  37. package/dist/payment/index.js +13 -0
  38. package/dist/payment/index.js.map +1 -0
  39. package/dist/payment/index.mjs +4 -0
  40. package/dist/payment/index.mjs.map +1 -0
  41. package/dist/wallet/index.d.mts +2 -0
  42. package/dist/wallet/index.d.ts +2 -0
  43. package/dist/wallet/index.js +13 -0
  44. package/dist/wallet/index.js.map +1 -0
  45. package/dist/wallet/index.mjs +4 -0
  46. package/dist/wallet/index.mjs.map +1 -0
  47. package/package.json +56 -0
package/dist/index.mjs ADDED
@@ -0,0 +1,445 @@
1
+ import { AccountModule } from './chunk-BUSFZFJS.mjs';
2
+ export { AccountModule } from './chunk-BUSFZFJS.mjs';
3
+ import { PaymentModule } from './chunk-VORGSH76.mjs';
4
+ export { PaymentModule } from './chunk-VORGSH76.mjs';
5
+ import { WalletModule } from './chunk-S65V52WZ.mjs';
6
+ export { WalletModule } from './chunk-S65V52WZ.mjs';
7
+ import { AuthError, NetworkError, UPSError, WalletError } from './chunk-BH5YEAE6.mjs';
8
+ export { AuthError, NetworkError, PaymentError, RateLimitError, UPSError, WalletError } from './chunk-BH5YEAE6.mjs';
9
+
10
+ // src/types/index.ts
11
+ var PaymentType = /* @__PURE__ */ ((PaymentType2) => {
12
+ PaymentType2["UNSPECIFIED"] = "UNSPECIFIED";
13
+ PaymentType2["DIRECT"] = "DIRECT";
14
+ PaymentType2["ESCROW"] = "ESCROW";
15
+ return PaymentType2;
16
+ })(PaymentType || {});
17
+
18
+ // src/core/http-client.ts
19
+ var HttpClient = class {
20
+ baseUrl;
21
+ timeout;
22
+ retryAttempts;
23
+ getToken;
24
+ constructor(config) {
25
+ this.baseUrl = config.baseUrl.replace(/\/$/, "");
26
+ this.timeout = config.timeout || 3e4;
27
+ this.retryAttempts = config.retryAttempts || 3;
28
+ this.getToken = config.getToken;
29
+ }
30
+ async request(path, options = {}) {
31
+ const url = `${this.baseUrl}${path.startsWith("/") ? path : "/" + path}`;
32
+ const headers = new Headers(options.headers);
33
+ if (!headers.has("Content-Type")) {
34
+ headers.set("Content-Type", "application/json");
35
+ }
36
+ if (!options.skipAuth && this.getToken) {
37
+ const token = this.getToken();
38
+ if (token) {
39
+ headers.set("Authorization", `Bearer ${token}`);
40
+ }
41
+ }
42
+ const config = {
43
+ ...options,
44
+ headers
45
+ };
46
+ let lastError = null;
47
+ for (let attempt = 0; attempt <= this.retryAttempts; attempt++) {
48
+ try {
49
+ const controller = new AbortController();
50
+ const timeoutId = setTimeout(() => controller.abort(), this.timeout);
51
+ try {
52
+ const response = await fetch(url, {
53
+ ...config,
54
+ signal: controller.signal
55
+ });
56
+ if (response.status === 429) {
57
+ const retryAfter = response.headers.get("Retry-After");
58
+ const waitTime = retryAfter ? parseInt(retryAfter, 10) * 1e3 : Math.pow(2, attempt) * 1e3;
59
+ await this.delay(waitTime);
60
+ continue;
61
+ }
62
+ if (response.status === 401) {
63
+ throw new AuthError("Authentication failed");
64
+ }
65
+ if (!response.ok) {
66
+ let errorDetails;
67
+ const text = await response.text();
68
+ try {
69
+ errorDetails = JSON.parse(text);
70
+ } catch {
71
+ errorDetails = text;
72
+ }
73
+ const detailsStr = typeof errorDetails === "string" ? errorDetails : JSON.stringify(errorDetails);
74
+ throw new NetworkError(`Request failed with status ${response.status}: ${detailsStr}`, errorDetails, response.status);
75
+ }
76
+ if (response.status === 204) {
77
+ return void 0;
78
+ }
79
+ return await response.json();
80
+ } finally {
81
+ clearTimeout(timeoutId);
82
+ }
83
+ } catch (error) {
84
+ lastError = error;
85
+ if (error instanceof AuthError) {
86
+ throw error;
87
+ }
88
+ if (error.name === "AbortError") {
89
+ lastError = new NetworkError("Request timed out", error);
90
+ } else if (!(error instanceof NetworkError) && !(error instanceof UPSError)) {
91
+ lastError = new NetworkError(error.message || "Unknown error", error);
92
+ }
93
+ if (attempt < this.retryAttempts) {
94
+ const waitTime = Math.pow(2, attempt) * 1e3;
95
+ await this.delay(waitTime);
96
+ continue;
97
+ }
98
+ }
99
+ }
100
+ throw lastError || new NetworkError("Request failed after retries");
101
+ }
102
+ async get(path, options) {
103
+ return this.request(path, { ...options, method: "GET" });
104
+ }
105
+ async post(path, body, options) {
106
+ return this.request(path, {
107
+ ...options,
108
+ method: "POST",
109
+ body: JSON.stringify(body)
110
+ });
111
+ }
112
+ delay(ms) {
113
+ return new Promise((resolve) => setTimeout(resolve, ms));
114
+ }
115
+ };
116
+
117
+ // src/core/event-bus.ts
118
+ var EventBus = class {
119
+ listeners = /* @__PURE__ */ new Map();
120
+ emit(event, payload) {
121
+ const callbacks = this.listeners.get(event);
122
+ if (callbacks) {
123
+ callbacks.forEach((callback) => {
124
+ try {
125
+ callback(payload);
126
+ } catch (error) {
127
+ console.error(`Error in event handler for ${event}:`, error);
128
+ }
129
+ });
130
+ }
131
+ }
132
+ on(event, callback) {
133
+ if (!this.listeners.has(event)) {
134
+ this.listeners.set(event, /* @__PURE__ */ new Set());
135
+ }
136
+ this.listeners.get(event).add(callback);
137
+ return () => this.off(event, callback);
138
+ }
139
+ once(event, callback) {
140
+ const unsubscribe = this.on(event, (payload) => {
141
+ unsubscribe();
142
+ callback(payload);
143
+ });
144
+ return unsubscribe;
145
+ }
146
+ off(event, callback) {
147
+ const callbacks = this.listeners.get(event);
148
+ if (callbacks) {
149
+ callbacks.delete(callback);
150
+ if (callbacks.size === 0) {
151
+ this.listeners.delete(event);
152
+ }
153
+ }
154
+ }
155
+ clear() {
156
+ this.listeners.clear();
157
+ }
158
+ };
159
+
160
+ // src/core/auth-manager.ts
161
+ var AuthManager = class {
162
+ constructor(http, eventBus, refreshInterval = 6e4) {
163
+ this.http = http;
164
+ this.eventBus = eventBus;
165
+ this.refreshInterval = refreshInterval;
166
+ }
167
+ _state = {
168
+ isAuthenticated: false,
169
+ token: null,
170
+ expiresAt: null,
171
+ address: null
172
+ };
173
+ refreshTimer = null;
174
+ refreshInterval;
175
+ get state() {
176
+ return { ...this._state };
177
+ }
178
+ /**
179
+ * Unified connect method - creates user if new, authenticates if existing
180
+ * This is the preferred authentication method.
181
+ */
182
+ async connect(walletAddress, message, signature) {
183
+ const result = await this.http.post("/auth/connect", {
184
+ wallet_address: walletAddress,
185
+ message,
186
+ signature
187
+ }, { skipAuth: true });
188
+ const connectResult = {
189
+ user: this.mapUser(result.user),
190
+ token: result.token,
191
+ expiresAt: result.expires_at,
192
+ isNewUser: result.is_new_user ?? false
193
+ };
194
+ this.handleAuthSuccess({ token: result.token, expiresAt: result.expires_at }, walletAddress);
195
+ return connectResult;
196
+ }
197
+ /**
198
+ * @deprecated Use connect() instead
199
+ */
200
+ async login(walletAddress, message, signature) {
201
+ const result = await this.http.post("/auth/login", {
202
+ wallet_address: walletAddress,
203
+ message,
204
+ signature
205
+ }, { skipAuth: true });
206
+ const authResult = {
207
+ token: result.token,
208
+ expiresAt: result.expires_at || result.expiresAt
209
+ };
210
+ this.handleAuthSuccess(authResult, walletAddress);
211
+ return authResult;
212
+ }
213
+ /**
214
+ * @deprecated Use connect() instead
215
+ */
216
+ async register(walletAddress, message, signature) {
217
+ const result = await this.http.post("/auth/register", {
218
+ wallet_address: walletAddress,
219
+ message,
220
+ signature
221
+ }, { skipAuth: true });
222
+ const authResult = {
223
+ token: result.token,
224
+ expiresAt: result.expires_at || result.expiresAt || new Date(Date.now() + 24 * 60 * 60 * 1e3).toISOString()
225
+ };
226
+ this.handleAuthSuccess(authResult, walletAddress);
227
+ return authResult;
228
+ }
229
+ handleAuthSuccess(result, walletAddress) {
230
+ this.updateState({
231
+ isAuthenticated: true,
232
+ token: result.token,
233
+ expiresAt: new Date(result.expiresAt),
234
+ address: walletAddress
235
+ });
236
+ this.scheduleRefresh();
237
+ }
238
+ async refresh() {
239
+ if (!this._state.token) return;
240
+ try {
241
+ const result = await this.http.post("/auth/refresh");
242
+ this.updateState({
243
+ ...this._state,
244
+ token: result.token,
245
+ expiresAt: new Date(result.expires_at)
246
+ });
247
+ this.scheduleRefresh();
248
+ } catch (error) {
249
+ console.error("Token refresh failed:", error);
250
+ this.logout();
251
+ }
252
+ }
253
+ mapUser(data) {
254
+ return {
255
+ id: data.id,
256
+ walletAddress: data.wallet_address,
257
+ status: data.status,
258
+ createdAt: data.created_at
259
+ };
260
+ }
261
+ logout() {
262
+ if (this.refreshTimer) {
263
+ clearTimeout(this.refreshTimer);
264
+ this.refreshTimer = null;
265
+ }
266
+ this.updateState({
267
+ isAuthenticated: false,
268
+ token: null,
269
+ expiresAt: null,
270
+ address: null
271
+ });
272
+ }
273
+ getToken() {
274
+ return this._state.token;
275
+ }
276
+ isAuthenticated() {
277
+ return this._state.isAuthenticated;
278
+ }
279
+ onStateChange(callback) {
280
+ return this.eventBus.on("auth:changed", callback);
281
+ }
282
+ updateState(newState) {
283
+ this._state = newState;
284
+ this.eventBus.emit("auth:changed", this._state);
285
+ }
286
+ scheduleRefresh() {
287
+ if (this.refreshTimer) {
288
+ clearTimeout(this.refreshTimer);
289
+ }
290
+ if (!this._state.expiresAt) return;
291
+ const expiresAt = this._state.expiresAt.getTime();
292
+ const now = Date.now();
293
+ if (expiresAt <= now) {
294
+ return;
295
+ }
296
+ const timeUntilExpiry = expiresAt - now;
297
+ const refreshTime = Math.min(this.refreshInterval, timeUntilExpiry - 6e4);
298
+ if (refreshTime > 0) {
299
+ this.refreshTimer = setTimeout(() => this.refresh(), refreshTime);
300
+ }
301
+ }
302
+ };
303
+
304
+ // src/escrow/index.ts
305
+ var EscrowModule = class {
306
+ constructor(http) {
307
+ this.http = http;
308
+ }
309
+ /**
310
+ * Get escrow details by ID
311
+ * @param escrowId Escrow ID
312
+ */
313
+ async get(escrowId) {
314
+ return this.http.get(`/x402/escrow/${escrowId}`, { skipAuth: false });
315
+ }
316
+ /**
317
+ * Release escrow funds (Payer or Arbiter only)
318
+ * @param escrowId Escrow ID
319
+ */
320
+ async release(escrowId, network) {
321
+ return this.http.post(`/x402/escrow/${escrowId}/release`, {
322
+ network
323
+ });
324
+ }
325
+ /**
326
+ * Refund escrow funds (Arbiter only)
327
+ * @param escrowId Escrow ID
328
+ */
329
+ async refund(escrowId, network) {
330
+ return this.http.post(`/x402/escrow/${escrowId}/refund`, {
331
+ network
332
+ });
333
+ }
334
+ };
335
+
336
+ // src/user/index.ts
337
+ var UserModule = class {
338
+ constructor(http) {
339
+ this.http = http;
340
+ }
341
+ /**
342
+ * Get the current authenticated user's profile.
343
+ * Requires authentication.
344
+ */
345
+ async getCurrentUser() {
346
+ const response = await this.http.get("/users/me");
347
+ return this.mapUser(response.user);
348
+ }
349
+ mapUser(data) {
350
+ return {
351
+ id: data.id,
352
+ walletAddress: data.wallet_address,
353
+ status: data.status,
354
+ createdAt: data.created_at
355
+ };
356
+ }
357
+ };
358
+
359
+ // src/client.ts
360
+ var UPSClient = class {
361
+ config;
362
+ wallet;
363
+ auth;
364
+ account;
365
+ payment;
366
+ escrow;
367
+ user;
368
+ http;
369
+ eventBus;
370
+ constructor(config) {
371
+ this.config = config;
372
+ if (!this.config.chainId && this.config.network.startsWith("eip155:")) {
373
+ this.config.chainId = parseInt(this.config.network.split(":")[1], 10);
374
+ }
375
+ this.eventBus = new EventBus();
376
+ this.http = new HttpClient({
377
+ baseUrl: config.baseUrl,
378
+ timeout: config.timeout,
379
+ retryAttempts: config.retryAttempts,
380
+ getToken: () => this.auth.getToken()
381
+ });
382
+ this.auth = new AuthManager(this.http, this.eventBus, config.refreshInterval);
383
+ this.wallet = new WalletModule(this.eventBus);
384
+ this.account = new AccountModule(this.http);
385
+ this.payment = new PaymentModule(this.http, this.wallet);
386
+ this.escrow = new EscrowModule(this.http);
387
+ this.user = new UserModule(this.http);
388
+ }
389
+ async connect(provider) {
390
+ return this.wallet.connect(provider);
391
+ }
392
+ /**
393
+ * Authenticate with the UPS backend using the unified /auth/connect endpoint.
394
+ * This will create a new user if one doesn't exist, or authenticate an existing user.
395
+ *
396
+ * @returns ConnectResult containing user info and whether this is a new user
397
+ */
398
+ async authenticate() {
399
+ if (!this.wallet.isConnected()) {
400
+ throw new WalletError("Wallet must be connected to authenticate");
401
+ }
402
+ const address = this.wallet.getAddress();
403
+ if (!address) throw new WalletError("No wallet address available");
404
+ const message = `Connect to UPSx402`;
405
+ const signature = await this.wallet.signMessage(message);
406
+ return this.auth.connect(address, message, signature);
407
+ }
408
+ /**
409
+ * @deprecated Use authenticate() instead which uses the unified /auth/connect endpoint.
410
+ * This method uses the legacy login/register flow.
411
+ */
412
+ async authenticateLegacy() {
413
+ if (!this.wallet.isConnected()) {
414
+ throw new WalletError("Wallet must be connected to authenticate");
415
+ }
416
+ const address = this.wallet.getAddress();
417
+ if (!address) throw new WalletError("No wallet address available");
418
+ const loginMessage = `Login to UPSx402`;
419
+ try {
420
+ const signature = await this.wallet.signMessage(loginMessage);
421
+ await this.auth.login(address, loginMessage, signature);
422
+ } catch (error) {
423
+ const isAuthError = error.status === 404 || error.status === 401 || error.status === 400 || error.message?.includes("not found") || error.details?.message?.includes("not found");
424
+ if (isAuthError) {
425
+ const registerMessage = `Register for UPSx402`;
426
+ const signature = await this.wallet.signMessage(registerMessage);
427
+ await this.auth.register(address, registerMessage, signature);
428
+ } else {
429
+ throw error;
430
+ }
431
+ }
432
+ }
433
+ async disconnect() {
434
+ await this.wallet.disconnect();
435
+ this.auth.logout();
436
+ }
437
+ destroy() {
438
+ this.auth.logout();
439
+ this.eventBus.clear();
440
+ }
441
+ };
442
+
443
+ export { AuthManager, EscrowModule, EventBus, HttpClient, PaymentType, UPSClient, UserModule };
444
+ //# sourceMappingURL=index.mjs.map
445
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/types/index.ts","../src/core/http-client.ts","../src/core/event-bus.ts","../src/core/auth-manager.ts","../src/escrow/index.ts","../src/user/index.ts","../src/client.ts"],"names":["PaymentType"],"mappings":"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","file":"index.mjs","sourcesContent":["export interface UPSConfig {\n baseUrl: string; // API base URL\n network: string; // CAIP-2 format: \"eip155:737998412\"\n chainId?: number; // Optional, parsed from network if not provided\n timeout?: number; // Request timeout (default: 30000)\n retryAttempts?: number; // Retry count (default: 3)\n refreshInterval?: number; // Token refresh interval in ms (default: 60000 = 1 min)\n}\n\n// Authentication\nexport interface AuthState {\n isAuthenticated: boolean;\n token: string | null;\n expiresAt: Date | null;\n address: string | null;\n}\n\nexport interface AuthResult {\n token: string;\n expiresAt: string;\n}\n\n// User (from /auth/connect and /users/me)\nexport interface User {\n id: string;\n walletAddress: string;\n status: string;\n createdAt: string;\n}\n\n// Connect auth result (unified auth flow)\nexport interface ConnectResult {\n user: User;\n token: string;\n expiresAt: string;\n isNewUser: boolean;\n}\n\n// Wallet\nexport type EIP1193Provider = {\n request: (args: { method: string; params?: unknown[] }) => Promise<unknown>;\n on?: (event: string, handler: (...args: any[]) => void) => void;\n removeListener?: (event: string, handler: (...args: any[]) => void) => void;\n};\n\nexport interface WalletState {\n isConnected: boolean;\n address: string | null;\n chainId: number | null;\n provider: EIP1193Provider | null;\n}\n\nexport interface ConnectedWallet {\n address: string;\n chainId: number;\n provider: EIP1193Provider;\n}\n\n// Account\nexport type AccountStatus = 'pending' | 'kyc_in_progress' | 'active' | 'frozen' | 'closed';\n\nexport interface Account {\n id: string;\n ownerAddress: string;\n walletAddress: string;\n status: AccountStatus;\n kycLevel: number;\n userId?: string;\n createdAt: string;\n updatedAt?: string;\n}\n\nexport interface CreateAccountParams {\n ownerAddress: string;\n salt: string; // 0x-prefixed 32-byte hex\n}\n\nexport interface CreateAccountResponse {\n account: Account;\n txHash: string;\n}\n\n// Payment (x402)\nexport interface PaymentRequirements {\n scheme: string;\n network: string;\n maxAmountRequired: string;\n asset: string;\n payTo: string;\n maxTimeoutSeconds: number;\n resource?: string;\n description?: string;\n\n extra?: PaymentExtra;\n from?: string;\n}\n\nexport enum PaymentType {\n UNSPECIFIED = 'UNSPECIFIED',\n DIRECT = 'DIRECT',\n ESCROW = 'ESCROW'\n}\n\nexport interface PaymentExtra {\n name?: string;\n version?: string;\n payment_type?: PaymentType; // snake_case from API\n arbiter?: string;\n release_time?: number; // snake_case from API\n payee?: string; // intended recipient for escrow\n}\n\nexport interface PaymentAuthorization {\n from: string;\n to: string;\n value: string;\n validAfter: number;\n validBefore: number;\n nonce: string; // bytes32 hex\n}\n\nexport interface SignedAuthorization extends PaymentAuthorization {\n signature: string;\n}\n\nexport interface VerifyResponse {\n isValid: boolean;\n invalidReason?: string;\n payer?: string;\n}\n\nexport interface SettleResponse {\n success: boolean;\n errorReason?: string;\n transaction?: string;\n network?: string;\n payer?: string;\n}\n\n// x402 Supported Schemes\nexport interface SupportedScheme {\n x402Version: number;\n scheme: string;\n network: string;\n}\n\nexport interface SupportedSchemesResponse {\n kinds: SupportedScheme[];\n extensions?: string[];\n signers?: Record<string, string[]>;\n}\n\n// EIP-712 Typed Data\nexport interface EIP712Domain {\n name: string;\n version: string;\n chainId: number;\n verifyingContract: string;\n}\n\nexport interface EIP712Type {\n name: string;\n type: string;\n}\n\nexport interface EIP712TypedData {\n domain: EIP712Domain;\n types: Record<string, EIP712Type[]>;\n primaryType: string;\n message: Record<string, unknown>;\n}\n\n// Escrow\nexport interface Escrow {\n escrowId: string;\n payer: string;\n payee: string;\n amount: string;\n arbiter: string;\n releaseTime: number;\n status: EscrowStatus;\n}\n\nexport type EscrowStatus = 'ACTIVE' | 'RELEASED' | 'REFUNDED';\n\nexport interface EscrowActionResponse {\n success: boolean;\n errorReason?: string;\n transaction?: string;\n network?: string;\n}\n\n\n","import { NetworkError, AuthError, UPSError } from './errors';\n\ninterface HttpClientConfig {\n baseUrl: string;\n timeout?: number;\n retryAttempts?: number;\n getToken?: () => string | null;\n}\n\ninterface RequestOptions extends RequestInit {\n skipAuth?: boolean;\n}\n\nexport class HttpClient {\n private baseUrl: string;\n private timeout: number;\n private retryAttempts: number;\n private getToken?: () => string | null;\n\n constructor(config: HttpClientConfig) {\n this.baseUrl = config.baseUrl.replace(/\\/$/, '');\n this.timeout = config.timeout || 30000;\n this.retryAttempts = config.retryAttempts || 3;\n this.getToken = config.getToken;\n }\n\n async request<T>(path: string, options: RequestOptions = {}): Promise<T> {\n const url = `${this.baseUrl}${path.startsWith('/') ? path : '/' + path}`;\n const headers = new Headers(options.headers);\n\n if (!headers.has('Content-Type')) {\n headers.set('Content-Type', 'application/json');\n }\n\n if (!options.skipAuth && this.getToken) {\n const token = this.getToken();\n if (token) {\n headers.set('Authorization', `Bearer ${token}`);\n }\n }\n\n const config: RequestInit = {\n ...options,\n headers,\n };\n\n let lastError: Error | null = null;\n for (let attempt = 0; attempt <= this.retryAttempts; attempt++) {\n try {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.timeout);\n\n try {\n const response = await fetch(url, {\n ...config,\n signal: controller.signal,\n });\n\n if (response.status === 429) {\n const retryAfter = response.headers.get('Retry-After');\n const waitTime = retryAfter ? parseInt(retryAfter, 10) * 1000 : Math.pow(2, attempt) * 1000;\n await this.delay(waitTime);\n continue;\n }\n\n if (response.status === 401) {\n throw new AuthError('Authentication failed');\n }\n\n if (!response.ok) {\n let errorDetails;\n const text = await response.text();\n try {\n errorDetails = JSON.parse(text);\n } catch {\n errorDetails = text;\n }\n const detailsStr = typeof errorDetails === 'string' ? errorDetails : JSON.stringify(errorDetails);\n throw new NetworkError(`Request failed with status ${response.status}: ${detailsStr}`, errorDetails, response.status);\n }\n\n // Handle 204 No Content\n if (response.status === 204) {\n return undefined as unknown as T;\n }\n\n return await response.json();\n } finally {\n clearTimeout(timeoutId);\n }\n } catch (error: any) {\n lastError = error;\n\n if (error instanceof AuthError) {\n throw error;\n }\n\n if (error.name === 'AbortError') {\n lastError = new NetworkError('Request timed out', error);\n } else if (!(error instanceof NetworkError) && !(error instanceof UPSError)) {\n // Wrap unknown errors\n lastError = new NetworkError(error.message || 'Unknown error', error);\n }\n\n if (attempt < this.retryAttempts) {\n const waitTime = Math.pow(2, attempt) * 1000;\n await this.delay(waitTime);\n continue;\n }\n }\n }\n\n throw lastError || new NetworkError('Request failed after retries');\n }\n\n async get<T>(path: string, options?: RequestOptions): Promise<T> {\n return this.request<T>(path, { ...options, method: 'GET' });\n }\n\n async post<T>(path: string, body?: unknown, options?: RequestOptions): Promise<T> {\n return this.request<T>(path, {\n ...options,\n method: 'POST',\n body: JSON.stringify(body),\n });\n }\n\n private delay(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n}\n","type Callback<T = any> = (payload: T) => void;\ntype Unsubscribe = () => void;\n\nexport class EventBus {\n private listeners: Map<string, Set<Callback>> = new Map();\n\n emit<T>(event: string, payload: T): void {\n const callbacks = this.listeners.get(event);\n if (callbacks) {\n callbacks.forEach((callback) => {\n try {\n callback(payload);\n } catch (error) {\n console.error(`Error in event handler for ${event}:`, error);\n }\n });\n }\n }\n\n on<T>(event: string, callback: Callback<T>): Unsubscribe {\n if (!this.listeners.has(event)) {\n this.listeners.set(event, new Set());\n }\n this.listeners.get(event)!.add(callback);\n\n return () => this.off(event, callback);\n }\n\n once<T>(event: string, callback: Callback<T>): Unsubscribe {\n const unsubscribe = this.on<T>(event, (payload) => {\n unsubscribe();\n callback(payload);\n });\n return unsubscribe;\n }\n\n off(event: string, callback: Callback): void {\n const callbacks = this.listeners.get(event);\n if (callbacks) {\n callbacks.delete(callback);\n if (callbacks.size === 0) {\n this.listeners.delete(event);\n }\n }\n }\n\n clear(): void {\n this.listeners.clear();\n }\n}\n","import { HttpClient } from './http-client';\nimport { EventBus } from './event-bus';\nimport { AuthState, AuthResult, ConnectResult, User } from '../types';\n\nexport class AuthManager {\n private _state: AuthState = {\n isAuthenticated: false,\n token: null,\n expiresAt: null,\n address: null,\n };\n private refreshTimer: NodeJS.Timeout | null = null;\n private refreshInterval: number;\n\n constructor(\n private http: HttpClient,\n private eventBus: EventBus,\n refreshInterval: number = 60000 // Default 1 minute\n ) {\n this.refreshInterval = refreshInterval;\n }\n\n get state(): AuthState {\n return { ...this._state };\n }\n\n /**\n * Unified connect method - creates user if new, authenticates if existing\n * This is the preferred authentication method.\n */\n async connect(walletAddress: string, message: string, signature: string): Promise<ConnectResult> {\n const result = await this.http.post<any>('/auth/connect', {\n wallet_address: walletAddress,\n message,\n signature,\n }, { skipAuth: true });\n\n const connectResult: ConnectResult = {\n user: this.mapUser(result.user),\n token: result.token,\n expiresAt: result.expires_at,\n isNewUser: result.is_new_user ?? false,\n };\n\n this.handleAuthSuccess({ token: result.token, expiresAt: result.expires_at }, walletAddress);\n return connectResult;\n }\n\n /**\n * @deprecated Use connect() instead\n */\n async login(walletAddress: string, message: string, signature: string): Promise<AuthResult> {\n const result = await this.http.post<any>('/auth/login', {\n wallet_address: walletAddress,\n message,\n signature,\n }, { skipAuth: true });\n\n const authResult: AuthResult = {\n token: result.token,\n expiresAt: result.expires_at || result.expiresAt,\n };\n\n this.handleAuthSuccess(authResult, walletAddress);\n return authResult;\n }\n\n /**\n * @deprecated Use connect() instead\n */\n async register(walletAddress: string, message: string, signature: string): Promise<AuthResult> {\n const result = await this.http.post<any>('/auth/register', {\n wallet_address: walletAddress,\n message,\n signature,\n }, { skipAuth: true });\n\n const authResult: AuthResult = {\n token: result.token,\n expiresAt: result.expires_at || result.expiresAt || new Date(Date.now() + 24 * 60 * 60 * 1000).toISOString(),\n };\n\n this.handleAuthSuccess(authResult, walletAddress);\n return authResult;\n }\n\n private handleAuthSuccess(result: AuthResult, walletAddress: string) {\n this.updateState({\n isAuthenticated: true,\n token: result.token,\n expiresAt: new Date(result.expiresAt),\n address: walletAddress,\n });\n this.scheduleRefresh();\n }\n\n async refresh(): Promise<void> {\n if (!this._state.token) return;\n\n try {\n const result = await this.http.post<{ token: string; expires_at: string }>('/auth/refresh');\n\n this.updateState({\n ...this._state,\n token: result.token,\n expiresAt: new Date(result.expires_at),\n });\n\n this.scheduleRefresh();\n } catch (error) {\n console.error('Token refresh failed:', error);\n this.logout();\n }\n }\n\n private mapUser(data: any): User {\n return {\n id: data.id,\n walletAddress: data.wallet_address,\n status: data.status,\n createdAt: data.created_at,\n };\n }\n\n logout(): void {\n if (this.refreshTimer) {\n clearTimeout(this.refreshTimer);\n this.refreshTimer = null;\n }\n\n this.updateState({\n isAuthenticated: false,\n token: null,\n expiresAt: null,\n address: null,\n });\n }\n\n getToken(): string | null {\n return this._state.token;\n }\n\n isAuthenticated(): boolean {\n return this._state.isAuthenticated;\n }\n\n onStateChange(callback: (state: AuthState) => void): () => void {\n return this.eventBus.on('auth:changed', callback);\n }\n\n private updateState(newState: AuthState) {\n this._state = newState;\n this.eventBus.emit('auth:changed', this._state);\n }\n\n private scheduleRefresh() {\n if (this.refreshTimer) {\n clearTimeout(this.refreshTimer);\n }\n\n if (!this._state.expiresAt) return;\n\n const expiresAt = this._state.expiresAt.getTime();\n const now = Date.now();\n\n // If token is already expired, don't schedule refresh\n if (expiresAt <= now) {\n return;\n }\n\n // Schedule refresh at the configured interval (e.g., 1 hour)\n // But ensure we refresh before the token expires\n const timeUntilExpiry = expiresAt - now;\n const refreshTime = Math.min(this.refreshInterval, timeUntilExpiry - 60000); // At least 1 min buffer\n\n if (refreshTime > 0) {\n this.refreshTimer = setTimeout(() => this.refresh(), refreshTime);\n }\n }\n}\n","import { HttpClient } from '../core/http-client';\nimport { Escrow, EscrowActionResponse } from '../types';\n\nexport class EscrowModule {\n constructor(private http: HttpClient) { }\n\n /**\n * Get escrow details by ID\n * @param escrowId Escrow ID\n */\n async get(escrowId: string): Promise<Escrow> {\n return this.http.get<Escrow>(`/x402/escrow/${escrowId}`, { skipAuth: false });\n }\n\n /**\n * Release escrow funds (Payer or Arbiter only)\n * @param escrowId Escrow ID\n */\n async release(escrowId: string, network: string): Promise<EscrowActionResponse> {\n return this.http.post<EscrowActionResponse>(`/x402/escrow/${escrowId}/release`, {\n network\n });\n }\n\n /**\n * Refund escrow funds (Arbiter only)\n * @param escrowId Escrow ID\n */\n async refund(escrowId: string, network: string): Promise<EscrowActionResponse> {\n return this.http.post<EscrowActionResponse>(`/x402/escrow/${escrowId}/refund`, {\n network\n });\n }\n}\n","import { HttpClient } from '../core/http-client';\nimport { User } from '../types';\n\n/**\n * UserModule provides access to user profile operations.\n * \n * @example\n * ```typescript\n * const user = await client.user.getCurrentUser();\n * console.log(user.id, user.walletAddress);\n * ```\n */\nexport class UserModule {\n constructor(private http: HttpClient) { }\n\n /**\n * Get the current authenticated user's profile.\n * Requires authentication.\n */\n async getCurrentUser(): Promise<User> {\n const response = await this.http.get<{ user: any }>('/users/me');\n return this.mapUser(response.user);\n }\n\n private mapUser(data: any): User {\n return {\n id: data.id,\n walletAddress: data.wallet_address,\n status: data.status,\n createdAt: data.created_at,\n };\n }\n}\n","import { HttpClient } from './core/http-client';\nimport { EventBus } from './core/event-bus';\nimport { AuthManager } from './core/auth-manager';\nimport { WalletModule } from './wallet';\nimport { AccountModule } from './account';\nimport { PaymentModule } from './payment';\nimport { EscrowModule } from './escrow';\nimport { UserModule } from './user';\nimport { UPSConfig, ConnectedWallet, EIP1193Provider, ConnectResult } from './types';\nimport { WalletError } from './core/errors';\n\nexport class UPSClient {\n readonly config: UPSConfig;\n readonly wallet: WalletModule;\n readonly auth: AuthManager;\n readonly account: AccountModule;\n readonly payment: PaymentModule;\n readonly escrow: EscrowModule;\n readonly user: UserModule;\n\n private http: HttpClient;\n private eventBus: EventBus;\n\n constructor(config: UPSConfig) {\n this.config = config;\n\n // Parse chainId if not provided but network is \"eip155:123\"\n if (!this.config.chainId && this.config.network.startsWith('eip155:')) {\n this.config.chainId = parseInt(this.config.network.split(':')[1], 10);\n }\n\n this.eventBus = new EventBus();\n\n this.http = new HttpClient({\n baseUrl: config.baseUrl,\n timeout: config.timeout,\n retryAttempts: config.retryAttempts,\n getToken: () => this.auth.getToken(),\n });\n\n this.auth = new AuthManager(this.http, this.eventBus, config.refreshInterval);\n this.wallet = new WalletModule(this.eventBus);\n this.account = new AccountModule(this.http);\n this.payment = new PaymentModule(this.http, this.wallet);\n this.escrow = new EscrowModule(this.http);\n this.user = new UserModule(this.http);\n }\n\n async connect(provider: EIP1193Provider): Promise<ConnectedWallet> {\n return this.wallet.connect(provider);\n }\n\n /**\n * Authenticate with the UPS backend using the unified /auth/connect endpoint.\n * This will create a new user if one doesn't exist, or authenticate an existing user.\n * \n * @returns ConnectResult containing user info and whether this is a new user\n */\n async authenticate(): Promise<ConnectResult> {\n if (!this.wallet.isConnected()) {\n throw new WalletError('Wallet must be connected to authenticate');\n }\n\n const address = this.wallet.getAddress();\n if (!address) throw new WalletError('No wallet address available');\n\n const message = `Connect to UPSx402`;\n const signature = await this.wallet.signMessage(message);\n\n return this.auth.connect(address, message, signature);\n }\n\n /**\n * @deprecated Use authenticate() instead which uses the unified /auth/connect endpoint.\n * This method uses the legacy login/register flow.\n */\n async authenticateLegacy(): Promise<void> {\n if (!this.wallet.isConnected()) {\n throw new WalletError('Wallet must be connected to authenticate');\n }\n\n const address = this.wallet.getAddress();\n if (!address) throw new WalletError('No wallet address available');\n\n // Try Login\n const loginMessage = `Login to UPSx402`;\n try {\n const signature = await this.wallet.signMessage(loginMessage);\n await this.auth.login(address, loginMessage, signature);\n } catch (error: any) {\n // If related to \"User not found\" or 404/401/400, try Register\n const isAuthError = error.status === 404 || error.status === 401 || error.status === 400 || error.message?.includes('not found') || error.details?.message?.includes('not found');\n\n if (isAuthError) {\n const registerMessage = `Register for UPSx402`;\n const signature = await this.wallet.signMessage(registerMessage);\n await this.auth.register(address, registerMessage, signature);\n } else {\n throw error;\n }\n }\n }\n\n async disconnect(): Promise<void> {\n await this.wallet.disconnect();\n this.auth.logout();\n }\n\n destroy(): void {\n this.auth.logout(); // Clears refresh timer\n this.eventBus.clear();\n }\n}\n"]}
@@ -0,0 +1,25 @@
1
+ import { H as HttpClient } from '../http-client-D9JtkvUx.mjs';
2
+ import { W as WalletModule } from '../index-1p5DSytk.mjs';
3
+ import { o as PaymentRequirements, S as SettleResponse, P as PaymentAuthorization, q as SignedAuthorization, V as VerifyResponse, s as SupportedSchemesResponse } from '../index-Csrh5-dl.mjs';
4
+
5
+ declare class PaymentModule {
6
+ private http;
7
+ private wallet;
8
+ constructor(http: HttpClient, wallet: WalletModule);
9
+ pay(request: {
10
+ requirements: PaymentRequirements;
11
+ from?: string;
12
+ }): Promise<SettleResponse>;
13
+ buildAuthorization(requirements: PaymentRequirements, from: string): PaymentAuthorization;
14
+ signAuthorization(authorization: PaymentAuthorization, requirements: PaymentRequirements): Promise<SignedAuthorization>;
15
+ encodePaymentHeader(signed: SignedAuthorization, requirements: PaymentRequirements): string;
16
+ verify(signed: SignedAuthorization, requirements: PaymentRequirements): Promise<VerifyResponse>;
17
+ settle(signed: SignedAuthorization, requirements: PaymentRequirements): Promise<SettleResponse>;
18
+ /**
19
+ * Get supported payment schemes from the facilitator.
20
+ * This endpoint does not require authentication.
21
+ */
22
+ getSupportedSchemes(): Promise<SupportedSchemesResponse>;
23
+ }
24
+
25
+ export { PaymentModule };
@@ -0,0 +1,25 @@
1
+ import { H as HttpClient } from '../http-client-D9JtkvUx.js';
2
+ import { W as WalletModule } from '../index-D_ytPgEV.js';
3
+ import { o as PaymentRequirements, S as SettleResponse, P as PaymentAuthorization, q as SignedAuthorization, V as VerifyResponse, s as SupportedSchemesResponse } from '../index-Csrh5-dl.js';
4
+
5
+ declare class PaymentModule {
6
+ private http;
7
+ private wallet;
8
+ constructor(http: HttpClient, wallet: WalletModule);
9
+ pay(request: {
10
+ requirements: PaymentRequirements;
11
+ from?: string;
12
+ }): Promise<SettleResponse>;
13
+ buildAuthorization(requirements: PaymentRequirements, from: string): PaymentAuthorization;
14
+ signAuthorization(authorization: PaymentAuthorization, requirements: PaymentRequirements): Promise<SignedAuthorization>;
15
+ encodePaymentHeader(signed: SignedAuthorization, requirements: PaymentRequirements): string;
16
+ verify(signed: SignedAuthorization, requirements: PaymentRequirements): Promise<VerifyResponse>;
17
+ settle(signed: SignedAuthorization, requirements: PaymentRequirements): Promise<SettleResponse>;
18
+ /**
19
+ * Get supported payment schemes from the facilitator.
20
+ * This endpoint does not require authentication.
21
+ */
22
+ getSupportedSchemes(): Promise<SupportedSchemesResponse>;
23
+ }
24
+
25
+ export { PaymentModule };
@@ -0,0 +1,13 @@
1
+ 'use strict';
2
+
3
+ var chunkPMX24TXY_js = require('../chunk-PMX24TXY.js');
4
+ require('../chunk-G525R6AV.js');
5
+
6
+
7
+
8
+ Object.defineProperty(exports, "PaymentModule", {
9
+ enumerable: true,
10
+ get: function () { return chunkPMX24TXY_js.PaymentModule; }
11
+ });
12
+ //# sourceMappingURL=index.js.map
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}
@@ -0,0 +1,4 @@
1
+ export { PaymentModule } from '../chunk-VORGSH76.mjs';
2
+ import '../chunk-BH5YEAE6.mjs';
3
+ //# sourceMappingURL=index.mjs.map
4
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"index.mjs"}
@@ -0,0 +1,2 @@
1
+ import '../index-Csrh5-dl.mjs';
2
+ export { W as WalletModule } from '../index-1p5DSytk.mjs';
@@ -0,0 +1,2 @@
1
+ import '../index-Csrh5-dl.js';
2
+ export { W as WalletModule } from '../index-D_ytPgEV.js';
@@ -0,0 +1,13 @@
1
+ 'use strict';
2
+
3
+ var chunk2S2KS5ZI_js = require('../chunk-2S2KS5ZI.js');
4
+ require('../chunk-G525R6AV.js');
5
+
6
+
7
+
8
+ Object.defineProperty(exports, "WalletModule", {
9
+ enumerable: true,
10
+ get: function () { return chunk2S2KS5ZI_js.WalletModule; }
11
+ });
12
+ //# sourceMappingURL=index.js.map
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}
@@ -0,0 +1,4 @@
1
+ export { WalletModule } from '../chunk-S65V52WZ.mjs';
2
+ import '../chunk-BH5YEAE6.mjs';
3
+ //# sourceMappingURL=index.mjs.map
4
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"index.mjs"}