@moneymq/sdk 0.1.1 → 0.2.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 +3 -3
- package/dist/index.d.mts +4 -4
- package/dist/index.d.ts +4 -4
- package/dist/index.js +29 -29
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +29 -29
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -18,7 +18,7 @@ yarn add @moneymq/sdk
|
|
|
18
18
|
import { MoneyMQ } from '@moneymq/sdk';
|
|
19
19
|
|
|
20
20
|
const moneymq = new MoneyMQ({
|
|
21
|
-
|
|
21
|
+
endpoint: 'http://localhost:8488',
|
|
22
22
|
});
|
|
23
23
|
|
|
24
24
|
// Create a product
|
|
@@ -47,8 +47,8 @@ const session = await moneymq.payment.checkout.create({
|
|
|
47
47
|
|
|
48
48
|
```typescript
|
|
49
49
|
const moneymq = new MoneyMQ({
|
|
50
|
-
// Required: MoneyMQ API
|
|
51
|
-
|
|
50
|
+
// Required: MoneyMQ API endpoint
|
|
51
|
+
endpoint: 'http://localhost:8488',
|
|
52
52
|
|
|
53
53
|
// Optional: Secret key for authenticated requests
|
|
54
54
|
secret: process.env.MONEYMQ_SECRET,
|
package/dist/index.d.mts
CHANGED
|
@@ -354,7 +354,7 @@ declare class PaymentAPI {
|
|
|
354
354
|
* @example
|
|
355
355
|
* ```typescript
|
|
356
356
|
* const config: MoneyMQConfig = {
|
|
357
|
-
*
|
|
357
|
+
* endpoint: 'https://api.moneymq.com',
|
|
358
358
|
* secret: 'your-api-secret', // Optional
|
|
359
359
|
* timeout: 30000,
|
|
360
360
|
* };
|
|
@@ -362,10 +362,10 @@ declare class PaymentAPI {
|
|
|
362
362
|
*/
|
|
363
363
|
interface MoneyMQConfig {
|
|
364
364
|
/**
|
|
365
|
-
* MoneyMQ API
|
|
365
|
+
* MoneyMQ API endpoint
|
|
366
366
|
* @example 'http://localhost:8488' or 'https://api.moneymq.com'
|
|
367
367
|
*/
|
|
368
|
-
|
|
368
|
+
endpoint: string;
|
|
369
369
|
/**
|
|
370
370
|
* Optional secret key for authenticated requests
|
|
371
371
|
* Used for server-side operations that require authentication
|
|
@@ -385,7 +385,7 @@ interface MoneyMQConfig {
|
|
|
385
385
|
* import { MoneyMQ } from '@moneymq/sdk';
|
|
386
386
|
*
|
|
387
387
|
* const moneymq = new MoneyMQ({
|
|
388
|
-
*
|
|
388
|
+
* endpoint: process.env.MONEYMQ_ENDPOINT ?? 'http://localhost:8488',
|
|
389
389
|
* });
|
|
390
390
|
*
|
|
391
391
|
* // Create a product
|
package/dist/index.d.ts
CHANGED
|
@@ -354,7 +354,7 @@ declare class PaymentAPI {
|
|
|
354
354
|
* @example
|
|
355
355
|
* ```typescript
|
|
356
356
|
* const config: MoneyMQConfig = {
|
|
357
|
-
*
|
|
357
|
+
* endpoint: 'https://api.moneymq.com',
|
|
358
358
|
* secret: 'your-api-secret', // Optional
|
|
359
359
|
* timeout: 30000,
|
|
360
360
|
* };
|
|
@@ -362,10 +362,10 @@ declare class PaymentAPI {
|
|
|
362
362
|
*/
|
|
363
363
|
interface MoneyMQConfig {
|
|
364
364
|
/**
|
|
365
|
-
* MoneyMQ API
|
|
365
|
+
* MoneyMQ API endpoint
|
|
366
366
|
* @example 'http://localhost:8488' or 'https://api.moneymq.com'
|
|
367
367
|
*/
|
|
368
|
-
|
|
368
|
+
endpoint: string;
|
|
369
369
|
/**
|
|
370
370
|
* Optional secret key for authenticated requests
|
|
371
371
|
* Used for server-side operations that require authentication
|
|
@@ -385,7 +385,7 @@ interface MoneyMQConfig {
|
|
|
385
385
|
* import { MoneyMQ } from '@moneymq/sdk';
|
|
386
386
|
*
|
|
387
387
|
* const moneymq = new MoneyMQ({
|
|
388
|
-
*
|
|
388
|
+
* endpoint: process.env.MONEYMQ_ENDPOINT ?? 'http://localhost:8488',
|
|
389
389
|
* });
|
|
390
390
|
*
|
|
391
391
|
* // Create a product
|
package/dist/index.js
CHANGED
|
@@ -32,7 +32,7 @@ var ProductsAPI = class {
|
|
|
32
32
|
this.config = config;
|
|
33
33
|
}
|
|
34
34
|
async request(method, path, body) {
|
|
35
|
-
const url = `${this.config.
|
|
35
|
+
const url = `${this.config.endpoint}${path}`;
|
|
36
36
|
const headers = { "Content-Type": "application/json" };
|
|
37
37
|
if (this.config.secret) headers["Authorization"] = `Bearer ${this.config.secret}`;
|
|
38
38
|
const response = await fetch(url, {
|
|
@@ -50,13 +50,13 @@ var ProductsAPI = class {
|
|
|
50
50
|
* Create a new product
|
|
51
51
|
*/
|
|
52
52
|
async create(params) {
|
|
53
|
-
return this.request("POST", "/v1/products", params);
|
|
53
|
+
return this.request("POST", "/catalog/v1/products", params);
|
|
54
54
|
}
|
|
55
55
|
/**
|
|
56
56
|
* Retrieve a product by ID
|
|
57
57
|
*/
|
|
58
58
|
async retrieve(id) {
|
|
59
|
-
return this.request("GET", `/v1/products/${id}`);
|
|
59
|
+
return this.request("GET", `/catalog/v1/products/${id}`);
|
|
60
60
|
}
|
|
61
61
|
/**
|
|
62
62
|
* List all products
|
|
@@ -67,19 +67,19 @@ var ProductsAPI = class {
|
|
|
67
67
|
if (params?.limit) query.set("limit", String(params.limit));
|
|
68
68
|
if (params?.startingAfter) query.set("starting_after", params.startingAfter);
|
|
69
69
|
const queryString = query.toString();
|
|
70
|
-
return this.request("GET", `/v1/products${queryString ? `?${queryString}` : ""}`);
|
|
70
|
+
return this.request("GET", `/catalog/v1/products${queryString ? `?${queryString}` : ""}`);
|
|
71
71
|
}
|
|
72
72
|
/**
|
|
73
73
|
* Update a product
|
|
74
74
|
*/
|
|
75
75
|
async update(id, params) {
|
|
76
|
-
return this.request("PUT", `/v1/products/${id}`, params);
|
|
76
|
+
return this.request("PUT", `/catalog/v1/products/${id}`, params);
|
|
77
77
|
}
|
|
78
78
|
/**
|
|
79
79
|
* Delete a product
|
|
80
80
|
*/
|
|
81
81
|
async delete(id) {
|
|
82
|
-
return this.request("DELETE", `/v1/products/${id}`);
|
|
82
|
+
return this.request("DELETE", `/catalog/v1/products/${id}`);
|
|
83
83
|
}
|
|
84
84
|
};
|
|
85
85
|
var PricesAPI = class {
|
|
@@ -87,7 +87,7 @@ var PricesAPI = class {
|
|
|
87
87
|
this.config = config;
|
|
88
88
|
}
|
|
89
89
|
async request(method, path, body) {
|
|
90
|
-
const url = `${this.config.
|
|
90
|
+
const url = `${this.config.endpoint}${path}`;
|
|
91
91
|
const headers = { "Content-Type": "application/json" };
|
|
92
92
|
if (this.config.secret) headers["Authorization"] = `Bearer ${this.config.secret}`;
|
|
93
93
|
const response = await fetch(url, {
|
|
@@ -105,13 +105,13 @@ var PricesAPI = class {
|
|
|
105
105
|
* Create a new price
|
|
106
106
|
*/
|
|
107
107
|
async create(params) {
|
|
108
|
-
return this.request("POST", "/v1/prices", params);
|
|
108
|
+
return this.request("POST", "/catalog/v1/prices", params);
|
|
109
109
|
}
|
|
110
110
|
/**
|
|
111
111
|
* Retrieve a price by ID
|
|
112
112
|
*/
|
|
113
113
|
async retrieve(id) {
|
|
114
|
-
return this.request("GET", `/v1/prices/${id}`);
|
|
114
|
+
return this.request("GET", `/catalog/v1/prices/${id}`);
|
|
115
115
|
}
|
|
116
116
|
/**
|
|
117
117
|
* List all prices
|
|
@@ -122,7 +122,7 @@ var PricesAPI = class {
|
|
|
122
122
|
if (params?.active !== void 0) query.set("active", String(params.active));
|
|
123
123
|
if (params?.limit) query.set("limit", String(params.limit));
|
|
124
124
|
const queryString = query.toString();
|
|
125
|
-
return this.request("GET", `/v1/prices${queryString ? `?${queryString}` : ""}`);
|
|
125
|
+
return this.request("GET", `/catalog/v1/prices${queryString ? `?${queryString}` : ""}`);
|
|
126
126
|
}
|
|
127
127
|
};
|
|
128
128
|
var CatalogAPI = class {
|
|
@@ -135,7 +135,7 @@ var CatalogAPI = class {
|
|
|
135
135
|
// src/payment.ts
|
|
136
136
|
function createRequester(config) {
|
|
137
137
|
return async function request(method, path, body) {
|
|
138
|
-
const url = `${config.
|
|
138
|
+
const url = `${config.endpoint}${path}`;
|
|
139
139
|
const headers = { "Content-Type": "application/json" };
|
|
140
140
|
if (config.secret) headers["Authorization"] = `Bearer ${config.secret}`;
|
|
141
141
|
const response = await fetch(url, {
|
|
@@ -158,13 +158,13 @@ var CheckoutAPI = class {
|
|
|
158
158
|
* Create a checkout session
|
|
159
159
|
*/
|
|
160
160
|
async create(params) {
|
|
161
|
-
return this.request("POST", "/payment/checkout", params);
|
|
161
|
+
return this.request("POST", "/payment/v1/checkout", params);
|
|
162
162
|
}
|
|
163
163
|
/**
|
|
164
164
|
* Retrieve a checkout session
|
|
165
165
|
*/
|
|
166
166
|
async retrieve(id) {
|
|
167
|
-
return this.request("GET", `/payment/checkout/${id}`);
|
|
167
|
+
return this.request("GET", `/payment/v1/checkout/${id}`);
|
|
168
168
|
}
|
|
169
169
|
};
|
|
170
170
|
var LinksAPI = class {
|
|
@@ -175,7 +175,7 @@ var LinksAPI = class {
|
|
|
175
175
|
* Create a payment link
|
|
176
176
|
*/
|
|
177
177
|
async create(params) {
|
|
178
|
-
return this.request("POST", "/payment/links", {
|
|
178
|
+
return this.request("POST", "/payment/v1/links", {
|
|
179
179
|
...params,
|
|
180
180
|
expiresAt: params.expiresAt instanceof Date ? params.expiresAt.getTime() : params.expiresAt
|
|
181
181
|
});
|
|
@@ -184,13 +184,13 @@ var LinksAPI = class {
|
|
|
184
184
|
* Retrieve a payment link
|
|
185
185
|
*/
|
|
186
186
|
async retrieve(id) {
|
|
187
|
-
return this.request("GET", `/payment/links/${id}`);
|
|
187
|
+
return this.request("GET", `/payment/v1/links/${id}`);
|
|
188
188
|
}
|
|
189
189
|
/**
|
|
190
190
|
* Deactivate a payment link
|
|
191
191
|
*/
|
|
192
192
|
async deactivate(id) {
|
|
193
|
-
return this.request("PUT", `/payment/links/${id}`, { active: false });
|
|
193
|
+
return this.request("PUT", `/payment/v1/links/${id}`, { active: false });
|
|
194
194
|
}
|
|
195
195
|
};
|
|
196
196
|
var CustomersAPI = class {
|
|
@@ -201,20 +201,20 @@ var CustomersAPI = class {
|
|
|
201
201
|
* Create a customer
|
|
202
202
|
*/
|
|
203
203
|
async create(params) {
|
|
204
|
-
return this.request("POST", "/payment/customers", params);
|
|
204
|
+
return this.request("POST", "/payment/v1/customers", params);
|
|
205
205
|
}
|
|
206
206
|
/**
|
|
207
207
|
* Retrieve a customer
|
|
208
208
|
*/
|
|
209
209
|
async retrieve(id, options) {
|
|
210
210
|
const query = options?.expand ? `?expand=${options.expand.join(",")}` : "";
|
|
211
|
-
return this.request("GET", `/payment/customers/${id}${query}`);
|
|
211
|
+
return this.request("GET", `/payment/v1/customers/${id}${query}`);
|
|
212
212
|
}
|
|
213
213
|
/**
|
|
214
214
|
* Update a customer
|
|
215
215
|
*/
|
|
216
216
|
async update(id, params) {
|
|
217
|
-
return this.request("PUT", `/payment/customers/${id}`, params);
|
|
217
|
+
return this.request("PUT", `/payment/v1/customers/${id}`, params);
|
|
218
218
|
}
|
|
219
219
|
/**
|
|
220
220
|
* List customers
|
|
@@ -224,7 +224,7 @@ var CustomersAPI = class {
|
|
|
224
224
|
if (params?.email) query.set("email", params.email);
|
|
225
225
|
if (params?.limit) query.set("limit", String(params.limit));
|
|
226
226
|
const queryString = query.toString();
|
|
227
|
-
return this.request("GET", `/payment/customers${queryString ? `?${queryString}` : ""}`);
|
|
227
|
+
return this.request("GET", `/payment/v1/customers${queryString ? `?${queryString}` : ""}`);
|
|
228
228
|
}
|
|
229
229
|
};
|
|
230
230
|
var PayoutsAPI = class {
|
|
@@ -236,13 +236,13 @@ var PayoutsAPI = class {
|
|
|
236
236
|
* Create a manual payout
|
|
237
237
|
*/
|
|
238
238
|
async create(params) {
|
|
239
|
-
return this.request("POST", "/payment/payouts", params);
|
|
239
|
+
return this.request("POST", "/payment/v1/payouts", params);
|
|
240
240
|
}
|
|
241
241
|
/**
|
|
242
242
|
* Retrieve a payout
|
|
243
243
|
*/
|
|
244
244
|
async retrieve(id) {
|
|
245
|
-
return this.request("GET", `/payment/payouts/${id}`);
|
|
245
|
+
return this.request("GET", `/payment/v1/payouts/${id}`);
|
|
246
246
|
}
|
|
247
247
|
/**
|
|
248
248
|
* List payouts
|
|
@@ -253,7 +253,7 @@ var PayoutsAPI = class {
|
|
|
253
253
|
if (params?.limit) query.set("limit", String(params.limit));
|
|
254
254
|
if (params?.startingAfter) query.set("starting_after", params.startingAfter);
|
|
255
255
|
const queryString = query.toString();
|
|
256
|
-
return this.request("GET", `/payment/payouts${queryString ? `?${queryString}` : ""}`);
|
|
256
|
+
return this.request("GET", `/payment/v1/payouts${queryString ? `?${queryString}` : ""}`);
|
|
257
257
|
}
|
|
258
258
|
};
|
|
259
259
|
var PayoutSettingsAPI = class {
|
|
@@ -264,13 +264,13 @@ var PayoutSettingsAPI = class {
|
|
|
264
264
|
* Get payout settings
|
|
265
265
|
*/
|
|
266
266
|
async retrieve() {
|
|
267
|
-
return this.request("GET", "/payment/payouts/settings");
|
|
267
|
+
return this.request("GET", "/payment/v1/payouts/settings");
|
|
268
268
|
}
|
|
269
269
|
/**
|
|
270
270
|
* Update payout settings
|
|
271
271
|
*/
|
|
272
272
|
async update(params) {
|
|
273
|
-
return this.request("PUT", "/payment/payouts/settings", params);
|
|
273
|
+
return this.request("PUT", "/payment/v1/payouts/settings", params);
|
|
274
274
|
}
|
|
275
275
|
};
|
|
276
276
|
var WebhooksAPI = class {
|
|
@@ -281,7 +281,7 @@ var WebhooksAPI = class {
|
|
|
281
281
|
* Trigger a test webhook event (for testing)
|
|
282
282
|
*/
|
|
283
283
|
async trigger(event, data) {
|
|
284
|
-
return this.request("POST", "/payment/webhooks/test", { event, data });
|
|
284
|
+
return this.request("POST", "/payment/v1/webhooks/test", { event, data });
|
|
285
285
|
}
|
|
286
286
|
};
|
|
287
287
|
var PaymentAPI = class {
|
|
@@ -297,7 +297,7 @@ var PaymentAPI = class {
|
|
|
297
297
|
* Retrieve a payment by ID
|
|
298
298
|
*/
|
|
299
299
|
async retrieve(id) {
|
|
300
|
-
return this.request("GET", `/payment/${id}`);
|
|
300
|
+
return this.request("GET", `/payment/v1/${id}`);
|
|
301
301
|
}
|
|
302
302
|
/**
|
|
303
303
|
* List payments
|
|
@@ -309,7 +309,7 @@ var PaymentAPI = class {
|
|
|
309
309
|
if (params?.limit) query.set("limit", String(params.limit));
|
|
310
310
|
if (params?.startingAfter) query.set("starting_after", params.startingAfter);
|
|
311
311
|
const queryString = query.toString();
|
|
312
|
-
return this.request("GET", `/payment${queryString ? `?${queryString}` : ""}`);
|
|
312
|
+
return this.request("GET", `/payment/v1${queryString ? `?${queryString}` : ""}`);
|
|
313
313
|
}
|
|
314
314
|
};
|
|
315
315
|
|
|
@@ -327,7 +327,7 @@ var MoneyMQ = class {
|
|
|
327
327
|
* Make an authenticated request to the MoneyMQ API
|
|
328
328
|
*/
|
|
329
329
|
async request(method, path, body) {
|
|
330
|
-
const url = `${this.config.
|
|
330
|
+
const url = `${this.config.endpoint}${path}`;
|
|
331
331
|
const headers = {
|
|
332
332
|
"Content-Type": "application/json"
|
|
333
333
|
};
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/catalog.ts","../src/payment.ts","../src/client.ts","../src/config.ts"],"sourcesContent":["export { MoneyMQ } from './client';\nexport type { MoneyMQConfig } from './client';\n\n// Config utilities\nexport { fetchConfig, getRpcUrl } from './config';\nexport type { ServerConfig } from './config';\n\n// Catalog types\nexport type {\n Product,\n ProductCreateParams,\n ProductListParams,\n Price,\n PriceCreateParams,\n} from './catalog';\n\n// Payment types\nexport type {\n CheckoutSession,\n CheckoutCreateParams,\n PaymentLink,\n PaymentLinkCreateParams,\n Payment,\n PaymentListParams,\n Customer,\n CustomerCreateParams,\n CustomerUpdateParams,\n Payout,\n PayoutCreateParams,\n PayoutListParams,\n PayoutSettings,\n PayoutSettingsUpdateParams,\n} from './payment';\n","import type { MoneyMQConfig } from './client';\n\n// Types\nexport interface Product {\n id: string;\n object: 'product';\n name: string;\n description?: string;\n active: boolean;\n metadata?: Record<string, string>;\n created: number;\n updated: number;\n}\n\nexport interface ProductCreateParams {\n name: string;\n description?: string;\n active?: boolean;\n metadata?: Record<string, string>;\n}\n\nexport interface ProductListParams {\n active?: boolean;\n limit?: number;\n startingAfter?: string;\n}\n\nexport interface Price {\n id: string;\n object: 'price';\n product: string;\n currency: string;\n amount: number;\n type: 'one_time' | 'recurring';\n recurring?: {\n interval: 'day' | 'week' | 'month' | 'year';\n intervalCount: number;\n };\n active: boolean;\n metadata?: Record<string, string>;\n created: number;\n}\n\nexport interface PriceCreateParams {\n product: string;\n currency: string;\n amount: number;\n type: 'one_time' | 'recurring';\n recurring?: {\n interval: 'day' | 'week' | 'month' | 'year';\n intervalCount?: number;\n };\n metadata?: Record<string, string>;\n}\n\n// API Classes\nclass ProductsAPI {\n constructor(private config: MoneyMQConfig) {}\n\n private async request<T>(method: string, path: string, body?: unknown): Promise<T> {\n const url = `${this.config.url}${path}`;\n const headers: Record<string, string> = { 'Content-Type': 'application/json' };\n if (this.config.secret) headers['Authorization'] = `Bearer ${this.config.secret}`;\n\n const response = await fetch(url, {\n method,\n headers,\n body: body ? JSON.stringify(body) : undefined,\n });\n\n if (!response.ok) {\n const errorData = (await response.json().catch(() => ({}))) as { message?: string };\n throw new Error(errorData.message || `Request failed: ${response.status}`);\n }\n\n return response.json() as Promise<T>;\n }\n\n /**\n * Create a new product\n */\n async create(params: ProductCreateParams): Promise<Product> {\n return this.request('POST', '/v1/products', params);\n }\n\n /**\n * Retrieve a product by ID\n */\n async retrieve(id: string): Promise<Product> {\n return this.request('GET', `/v1/products/${id}`);\n }\n\n /**\n * List all products\n */\n async list(params?: ProductListParams): Promise<{ data: Product[]; hasMore: boolean }> {\n const query = new URLSearchParams();\n if (params?.active !== undefined) query.set('active', String(params.active));\n if (params?.limit) query.set('limit', String(params.limit));\n if (params?.startingAfter) query.set('starting_after', params.startingAfter);\n\n const queryString = query.toString();\n return this.request('GET', `/v1/products${queryString ? `?${queryString}` : ''}`);\n }\n\n /**\n * Update a product\n */\n async update(id: string, params: Partial<ProductCreateParams>): Promise<Product> {\n return this.request('PUT', `/v1/products/${id}`, params);\n }\n\n /**\n * Delete a product\n */\n async delete(id: string): Promise<{ deleted: boolean }> {\n return this.request('DELETE', `/v1/products/${id}`);\n }\n}\n\nclass PricesAPI {\n constructor(private config: MoneyMQConfig) {}\n\n private async request<T>(method: string, path: string, body?: unknown): Promise<T> {\n const url = `${this.config.url}${path}`;\n const headers: Record<string, string> = { 'Content-Type': 'application/json' };\n if (this.config.secret) headers['Authorization'] = `Bearer ${this.config.secret}`;\n\n const response = await fetch(url, {\n method,\n headers,\n body: body ? JSON.stringify(body) : undefined,\n });\n\n if (!response.ok) {\n const errorData = (await response.json().catch(() => ({}))) as { message?: string };\n throw new Error(errorData.message || `Request failed: ${response.status}`);\n }\n\n return response.json() as Promise<T>;\n }\n\n /**\n * Create a new price\n */\n async create(params: PriceCreateParams): Promise<Price> {\n return this.request('POST', '/v1/prices', params);\n }\n\n /**\n * Retrieve a price by ID\n */\n async retrieve(id: string): Promise<Price> {\n return this.request('GET', `/v1/prices/${id}`);\n }\n\n /**\n * List all prices\n */\n async list(params?: {\n product?: string;\n active?: boolean;\n limit?: number;\n }): Promise<{ data: Price[]; hasMore: boolean }> {\n const query = new URLSearchParams();\n if (params?.product) query.set('product', params.product);\n if (params?.active !== undefined) query.set('active', String(params.active));\n if (params?.limit) query.set('limit', String(params.limit));\n\n const queryString = query.toString();\n return this.request('GET', `/v1/prices${queryString ? `?${queryString}` : ''}`);\n }\n}\n\n/**\n * Catalog API for managing products and prices\n */\nexport class CatalogAPI {\n /** Products API */\n public readonly products: ProductsAPI;\n\n /** Prices API */\n public readonly prices: PricesAPI;\n\n constructor(config: MoneyMQConfig) {\n this.products = new ProductsAPI(config);\n this.prices = new PricesAPI(config);\n }\n}\n","import type { MoneyMQConfig } from './client';\n\n// Types\nexport interface LineItem {\n price: string;\n quantity: number;\n}\n\nexport interface CheckoutSession {\n id: string;\n object: 'checkout.session';\n url: string;\n status: 'open' | 'complete' | 'expired';\n paymentStatus: 'unpaid' | 'paid';\n customer?: string;\n lineItems: LineItem[];\n successUrl: string;\n cancelUrl: string;\n expiresAt: number;\n created: number;\n}\n\nexport interface CheckoutCreateParams {\n lineItems: LineItem[];\n successUrl: string;\n cancelUrl: string;\n customerEmail?: string;\n customer?: string;\n metadata?: Record<string, string>;\n}\n\nexport interface PaymentLink {\n id: string;\n object: 'payment_link';\n url: string;\n active: boolean;\n lineItems: LineItem[];\n expiresAt?: number;\n created: number;\n}\n\nexport interface PaymentLinkCreateParams {\n lineItems: LineItem[];\n expiresAt?: Date | number;\n metadata?: Record<string, string>;\n}\n\nexport interface Payment {\n id: string;\n object: 'payment';\n amount: number;\n currency: string;\n status: 'completed' | 'pending' | 'failed';\n customer?: string;\n checkout?: string;\n signature?: string;\n metadata?: Record<string, string>;\n created: number;\n}\n\nexport interface PaymentListParams {\n customerId?: string;\n status?: 'completed' | 'pending' | 'failed';\n limit?: number;\n startingAfter?: string;\n}\n\nexport interface Customer {\n id: string;\n object: 'customer';\n email: string;\n name?: string;\n metadata?: Record<string, string>;\n subscriptions?: unknown[];\n payments?: Payment[];\n created: number;\n}\n\nexport interface CustomerCreateParams {\n email: string;\n name?: string;\n metadata?: Record<string, string>;\n}\n\nexport interface CustomerUpdateParams {\n email?: string;\n name?: string;\n metadata?: Record<string, string>;\n}\n\nexport interface Payout {\n id: string;\n object: 'payout';\n amount: number;\n currency: string;\n status: 'pending' | 'completed' | 'failed';\n destination: string;\n created: number;\n}\n\nexport interface PayoutCreateParams {\n amount: number;\n currency: string;\n destination: string;\n}\n\nexport interface PayoutListParams {\n status?: 'pending' | 'completed' | 'failed';\n limit?: number;\n startingAfter?: string;\n}\n\nexport interface PayoutSettings {\n destination: {\n type: 'wallet';\n address: string;\n currency: string;\n };\n schedule: 'instant' | 'daily' | 'weekly' | 'monthly';\n minimumAmount?: number;\n}\n\nexport interface PayoutSettingsUpdateParams {\n destination?: PayoutSettings['destination'];\n schedule?: PayoutSettings['schedule'];\n minimumAmount?: number;\n}\n\n// Helper for making requests\nfunction createRequester(config: MoneyMQConfig) {\n return async function request<T>(method: string, path: string, body?: unknown): Promise<T> {\n const url = `${config.url}${path}`;\n const headers: Record<string, string> = { 'Content-Type': 'application/json' };\n if (config.secret) headers['Authorization'] = `Bearer ${config.secret}`;\n\n const response = await fetch(url, {\n method,\n headers,\n body: body ? JSON.stringify(body) : undefined,\n });\n\n if (!response.ok) {\n const errorData = (await response.json().catch(() => ({}))) as { message?: string };\n throw new Error(errorData.message || `Request failed: ${response.status}`);\n }\n\n return response.json() as Promise<T>;\n };\n}\n\n// API Classes\nclass CheckoutAPI {\n private request: ReturnType<typeof createRequester>;\n\n constructor(config: MoneyMQConfig) {\n this.request = createRequester(config);\n }\n\n /**\n * Create a checkout session\n */\n async create(params: CheckoutCreateParams): Promise<CheckoutSession> {\n return this.request('POST', '/payment/checkout', params);\n }\n\n /**\n * Retrieve a checkout session\n */\n async retrieve(id: string): Promise<CheckoutSession> {\n return this.request('GET', `/payment/checkout/${id}`);\n }\n}\n\nclass LinksAPI {\n private request: ReturnType<typeof createRequester>;\n\n constructor(config: MoneyMQConfig) {\n this.request = createRequester(config);\n }\n\n /**\n * Create a payment link\n */\n async create(params: PaymentLinkCreateParams): Promise<PaymentLink> {\n return this.request('POST', '/payment/links', {\n ...params,\n expiresAt: params.expiresAt instanceof Date ? params.expiresAt.getTime() : params.expiresAt,\n });\n }\n\n /**\n * Retrieve a payment link\n */\n async retrieve(id: string): Promise<PaymentLink> {\n return this.request('GET', `/payment/links/${id}`);\n }\n\n /**\n * Deactivate a payment link\n */\n async deactivate(id: string): Promise<PaymentLink> {\n return this.request('PUT', `/payment/links/${id}`, { active: false });\n }\n}\n\nclass CustomersAPI {\n private request: ReturnType<typeof createRequester>;\n\n constructor(config: MoneyMQConfig) {\n this.request = createRequester(config);\n }\n\n /**\n * Create a customer\n */\n async create(params: CustomerCreateParams): Promise<Customer> {\n return this.request('POST', '/payment/customers', params);\n }\n\n /**\n * Retrieve a customer\n */\n async retrieve(id: string, options?: { expand?: string[] }): Promise<Customer> {\n const query = options?.expand ? `?expand=${options.expand.join(',')}` : '';\n return this.request('GET', `/payment/customers/${id}${query}`);\n }\n\n /**\n * Update a customer\n */\n async update(id: string, params: CustomerUpdateParams): Promise<Customer> {\n return this.request('PUT', `/payment/customers/${id}`, params);\n }\n\n /**\n * List customers\n */\n async list(params?: {\n email?: string;\n limit?: number;\n }): Promise<{ data: Customer[]; hasMore: boolean }> {\n const query = new URLSearchParams();\n if (params?.email) query.set('email', params.email);\n if (params?.limit) query.set('limit', String(params.limit));\n\n const queryString = query.toString();\n return this.request('GET', `/payment/customers${queryString ? `?${queryString}` : ''}`);\n }\n}\n\nclass PayoutsAPI {\n private request: ReturnType<typeof createRequester>;\n\n /** Payout settings */\n public readonly settings: PayoutSettingsAPI;\n\n constructor(config: MoneyMQConfig) {\n this.request = createRequester(config);\n this.settings = new PayoutSettingsAPI(config);\n }\n\n /**\n * Create a manual payout\n */\n async create(params: PayoutCreateParams): Promise<Payout> {\n return this.request('POST', '/payment/payouts', params);\n }\n\n /**\n * Retrieve a payout\n */\n async retrieve(id: string): Promise<Payout> {\n return this.request('GET', `/payment/payouts/${id}`);\n }\n\n /**\n * List payouts\n */\n async list(params?: PayoutListParams): Promise<{ data: Payout[]; hasMore: boolean }> {\n const query = new URLSearchParams();\n if (params?.status) query.set('status', params.status);\n if (params?.limit) query.set('limit', String(params.limit));\n if (params?.startingAfter) query.set('starting_after', params.startingAfter);\n\n const queryString = query.toString();\n return this.request('GET', `/payment/payouts${queryString ? `?${queryString}` : ''}`);\n }\n}\n\nclass PayoutSettingsAPI {\n private request: ReturnType<typeof createRequester>;\n\n constructor(config: MoneyMQConfig) {\n this.request = createRequester(config);\n }\n\n /**\n * Get payout settings\n */\n async retrieve(): Promise<PayoutSettings> {\n return this.request('GET', '/payment/payouts/settings');\n }\n\n /**\n * Update payout settings\n */\n async update(params: PayoutSettingsUpdateParams): Promise<PayoutSettings> {\n return this.request('PUT', '/payment/payouts/settings', params);\n }\n}\n\nclass WebhooksAPI {\n private request: ReturnType<typeof createRequester>;\n\n constructor(config: MoneyMQConfig) {\n this.request = createRequester(config);\n }\n\n /**\n * Trigger a test webhook event (for testing)\n */\n async trigger(event: string, data: Record<string, unknown>): Promise<{ success: boolean }> {\n return this.request('POST', '/payment/webhooks/test', { event, data });\n }\n}\n\n/**\n * Payment API for checkout, links, customers, and payouts\n */\nexport class PaymentAPI {\n private request: ReturnType<typeof createRequester>;\n\n /** Checkout sessions API */\n public readonly checkout: CheckoutAPI;\n\n /** Payment links API */\n public readonly links: LinksAPI;\n\n /** Customers API */\n public readonly customers: CustomersAPI;\n\n /** Payouts API */\n public readonly payouts: PayoutsAPI;\n\n /** Webhooks API */\n public readonly webhooks: WebhooksAPI;\n\n constructor(config: MoneyMQConfig) {\n this.request = createRequester(config);\n this.checkout = new CheckoutAPI(config);\n this.links = new LinksAPI(config);\n this.customers = new CustomersAPI(config);\n this.payouts = new PayoutsAPI(config);\n this.webhooks = new WebhooksAPI(config);\n }\n\n /**\n * Retrieve a payment by ID\n */\n async retrieve(id: string): Promise<Payment> {\n return this.request('GET', `/payment/${id}`);\n }\n\n /**\n * List payments\n */\n async list(params?: PaymentListParams): Promise<{ data: Payment[]; hasMore: boolean }> {\n const query = new URLSearchParams();\n if (params?.customerId) query.set('customer', params.customerId);\n if (params?.status) query.set('status', params.status);\n if (params?.limit) query.set('limit', String(params.limit));\n if (params?.startingAfter) query.set('starting_after', params.startingAfter);\n\n const queryString = query.toString();\n return this.request('GET', `/payment${queryString ? `?${queryString}` : ''}`);\n }\n}\n","import { CatalogAPI } from './catalog';\nimport { PaymentAPI } from './payment';\n\n/**\n * Configuration options for the MoneyMQ client\n *\n * @example\n * ```typescript\n * const config: MoneyMQConfig = {\n * url: 'https://api.moneymq.com',\n * secret: 'your-api-secret', // Optional\n * timeout: 30000,\n * };\n * ```\n */\nexport interface MoneyMQConfig {\n /**\n * MoneyMQ API URL\n * @example 'http://localhost:8488' or 'https://api.moneymq.com'\n */\n url: string;\n /**\n * Optional secret key for authenticated requests\n * Used for server-side operations that require authentication\n */\n secret?: string;\n /**\n * Request timeout in milliseconds\n * @default 30000\n */\n timeout?: number;\n}\n\n/**\n * MoneyMQ SDK client for accepting stablecoin payments\n *\n * @example\n * ```typescript\n * import { MoneyMQ } from '@moneymq/sdk';\n *\n * const moneymq = new MoneyMQ({\n * url: process.env.MONEYMQ_URL ?? 'http://localhost:8488',\n * });\n *\n * // Create a product\n * const product = await moneymq.catalog.products.create({\n * name: 'Pro Plan',\n * description: 'Full access to all features',\n * });\n *\n * // Create a checkout session\n * const session = await moneymq.payment.checkout.create({\n * lineItems: [{ price: 'price_xxx', quantity: 1 }],\n * successUrl: 'https://example.com/success',\n * cancelUrl: 'https://example.com/cancel',\n * });\n * ```\n */\nexport class MoneyMQ {\n public readonly config: MoneyMQConfig;\n\n /** Catalog API for products and prices */\n public readonly catalog: CatalogAPI;\n\n /** Payment API for checkout, links, customers, and payouts */\n public readonly payment: PaymentAPI;\n\n constructor(config: MoneyMQConfig) {\n this.config = {\n timeout: 30000,\n ...config,\n };\n\n this.catalog = new CatalogAPI(this.config);\n this.payment = new PaymentAPI(this.config);\n }\n\n /**\n * Make an authenticated request to the MoneyMQ API\n */\n async request<T>(\n method: 'GET' | 'POST' | 'PUT' | 'DELETE',\n path: string,\n body?: unknown,\n ): Promise<T> {\n const url = `${this.config.url}${path}`;\n\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n };\n\n if (this.config.secret) {\n headers['Authorization'] = `Bearer ${this.config.secret}`;\n }\n\n const response = await fetch(url, {\n method,\n headers,\n body: body ? JSON.stringify(body) : undefined,\n signal: AbortSignal.timeout(this.config.timeout!),\n });\n\n if (!response.ok) {\n const errorData = (await response.json().catch(() => ({}))) as { message?: string };\n throw new MoneyMQError(\n errorData.message || `Request failed with status ${response.status}`,\n response.status,\n errorData,\n );\n }\n\n return response.json() as Promise<T>;\n }\n}\n\n/**\n * MoneyMQ API error\n */\nexport class MoneyMQError extends Error {\n constructor(\n message: string,\n public readonly statusCode: number,\n public readonly raw?: unknown,\n ) {\n super(message);\n this.name = 'MoneyMQError';\n }\n}\n","/**\n * MoneyMQ server configuration returned from /config endpoint\n */\nexport interface ServerConfig {\n account: {\n name: string;\n description: string;\n };\n x402: {\n payoutAccount: {\n currency: string;\n decimals: number;\n address: string;\n tokenAddress: string;\n };\n facilitator: {\n operatorAccount: {\n out: string;\n in: {\n currency: string;\n decimals: number;\n address: string;\n tokenAddress: string;\n };\n };\n url: string;\n };\n validator: {\n network: string;\n rpcUrl: string;\n bindHost: string;\n rpcPort: number;\n wsPort: number;\n };\n };\n}\n\n/**\n * Fetch server configuration from MoneyMQ API\n *\n * @param apiUrl - The MoneyMQ API URL\n * @returns Server configuration including RPC URL\n *\n * @example\n * ```typescript\n * const config = await fetchConfig('http://localhost:8488');\n * console.log(config.x402.validator.rpcUrl);\n * ```\n */\nexport async function fetchConfig(apiUrl: string): Promise<ServerConfig> {\n const response = await fetch(`${apiUrl}/config`);\n if (!response.ok) {\n throw new Error(`Failed to fetch config: ${response.status}`);\n }\n return response.json() as Promise<ServerConfig>;\n}\n\n/**\n * Get the Solana RPC URL from server config\n *\n * @param apiUrl - The MoneyMQ API URL\n * @param fallback - Fallback RPC URL if fetch fails\n * @returns RPC URL string\n */\nexport async function getRpcUrl(\n apiUrl: string,\n fallback = 'https://api.devnet.solana.com'\n): Promise<string> {\n try {\n const config = await fetchConfig(apiUrl);\n return config.x402.validator.rpcUrl || fallback;\n } catch {\n return fallback;\n }\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/catalog.ts","../src/payment.ts","../src/client.ts","../src/config.ts"],"sourcesContent":["export { MoneyMQ } from './client';\nexport type { MoneyMQConfig } from './client';\n\n// Config utilities\nexport { fetchConfig, getRpcUrl } from './config';\nexport type { ServerConfig } from './config';\n\n// Catalog types\nexport type {\n Product,\n ProductCreateParams,\n ProductListParams,\n Price,\n PriceCreateParams,\n} from './catalog';\n\n// Payment types\nexport type {\n CheckoutSession,\n CheckoutCreateParams,\n PaymentLink,\n PaymentLinkCreateParams,\n Payment,\n PaymentListParams,\n Customer,\n CustomerCreateParams,\n CustomerUpdateParams,\n Payout,\n PayoutCreateParams,\n PayoutListParams,\n PayoutSettings,\n PayoutSettingsUpdateParams,\n} from './payment';\n","import type { MoneyMQConfig } from './client';\n\n// Types\nexport interface Product {\n id: string;\n object: 'product';\n name: string;\n description?: string;\n active: boolean;\n metadata?: Record<string, string>;\n created: number;\n updated: number;\n}\n\nexport interface ProductCreateParams {\n name: string;\n description?: string;\n active?: boolean;\n metadata?: Record<string, string>;\n}\n\nexport interface ProductListParams {\n active?: boolean;\n limit?: number;\n startingAfter?: string;\n}\n\nexport interface Price {\n id: string;\n object: 'price';\n product: string;\n currency: string;\n amount: number;\n type: 'one_time' | 'recurring';\n recurring?: {\n interval: 'day' | 'week' | 'month' | 'year';\n intervalCount: number;\n };\n active: boolean;\n metadata?: Record<string, string>;\n created: number;\n}\n\nexport interface PriceCreateParams {\n product: string;\n currency: string;\n amount: number;\n type: 'one_time' | 'recurring';\n recurring?: {\n interval: 'day' | 'week' | 'month' | 'year';\n intervalCount?: number;\n };\n metadata?: Record<string, string>;\n}\n\n// API Classes\nclass ProductsAPI {\n constructor(private config: MoneyMQConfig) {}\n\n private async request<T>(method: string, path: string, body?: unknown): Promise<T> {\n const url = `${this.config.endpoint}${path}`;\n const headers: Record<string, string> = { 'Content-Type': 'application/json' };\n if (this.config.secret) headers['Authorization'] = `Bearer ${this.config.secret}`;\n\n const response = await fetch(url, {\n method,\n headers,\n body: body ? JSON.stringify(body) : undefined,\n });\n\n if (!response.ok) {\n const errorData = (await response.json().catch(() => ({}))) as { message?: string };\n throw new Error(errorData.message || `Request failed: ${response.status}`);\n }\n\n return response.json() as Promise<T>;\n }\n\n /**\n * Create a new product\n */\n async create(params: ProductCreateParams): Promise<Product> {\n return this.request('POST', '/catalog/v1/products', params);\n }\n\n /**\n * Retrieve a product by ID\n */\n async retrieve(id: string): Promise<Product> {\n return this.request('GET', `/catalog/v1/products/${id}`);\n }\n\n /**\n * List all products\n */\n async list(params?: ProductListParams): Promise<{ data: Product[]; hasMore: boolean }> {\n const query = new URLSearchParams();\n if (params?.active !== undefined) query.set('active', String(params.active));\n if (params?.limit) query.set('limit', String(params.limit));\n if (params?.startingAfter) query.set('starting_after', params.startingAfter);\n\n const queryString = query.toString();\n return this.request('GET', `/catalog/v1/products${queryString ? `?${queryString}` : ''}`);\n }\n\n /**\n * Update a product\n */\n async update(id: string, params: Partial<ProductCreateParams>): Promise<Product> {\n return this.request('PUT', `/catalog/v1/products/${id}`, params);\n }\n\n /**\n * Delete a product\n */\n async delete(id: string): Promise<{ deleted: boolean }> {\n return this.request('DELETE', `/catalog/v1/products/${id}`);\n }\n}\n\nclass PricesAPI {\n constructor(private config: MoneyMQConfig) {}\n\n private async request<T>(method: string, path: string, body?: unknown): Promise<T> {\n const url = `${this.config.endpoint}${path}`;\n const headers: Record<string, string> = { 'Content-Type': 'application/json' };\n if (this.config.secret) headers['Authorization'] = `Bearer ${this.config.secret}`;\n\n const response = await fetch(url, {\n method,\n headers,\n body: body ? JSON.stringify(body) : undefined,\n });\n\n if (!response.ok) {\n const errorData = (await response.json().catch(() => ({}))) as { message?: string };\n throw new Error(errorData.message || `Request failed: ${response.status}`);\n }\n\n return response.json() as Promise<T>;\n }\n\n /**\n * Create a new price\n */\n async create(params: PriceCreateParams): Promise<Price> {\n return this.request('POST', '/catalog/v1/prices', params);\n }\n\n /**\n * Retrieve a price by ID\n */\n async retrieve(id: string): Promise<Price> {\n return this.request('GET', `/catalog/v1/prices/${id}`);\n }\n\n /**\n * List all prices\n */\n async list(params?: {\n product?: string;\n active?: boolean;\n limit?: number;\n }): Promise<{ data: Price[]; hasMore: boolean }> {\n const query = new URLSearchParams();\n if (params?.product) query.set('product', params.product);\n if (params?.active !== undefined) query.set('active', String(params.active));\n if (params?.limit) query.set('limit', String(params.limit));\n\n const queryString = query.toString();\n return this.request('GET', `/catalog/v1/prices${queryString ? `?${queryString}` : ''}`);\n }\n}\n\n/**\n * Catalog API for managing products and prices\n */\nexport class CatalogAPI {\n /** Products API */\n public readonly products: ProductsAPI;\n\n /** Prices API */\n public readonly prices: PricesAPI;\n\n constructor(config: MoneyMQConfig) {\n this.products = new ProductsAPI(config);\n this.prices = new PricesAPI(config);\n }\n}\n","import type { MoneyMQConfig } from './client';\n\n// Types\nexport interface LineItem {\n price: string;\n quantity: number;\n}\n\nexport interface CheckoutSession {\n id: string;\n object: 'checkout.session';\n url: string;\n status: 'open' | 'complete' | 'expired';\n paymentStatus: 'unpaid' | 'paid';\n customer?: string;\n lineItems: LineItem[];\n successUrl: string;\n cancelUrl: string;\n expiresAt: number;\n created: number;\n}\n\nexport interface CheckoutCreateParams {\n lineItems: LineItem[];\n successUrl: string;\n cancelUrl: string;\n customerEmail?: string;\n customer?: string;\n metadata?: Record<string, string>;\n}\n\nexport interface PaymentLink {\n id: string;\n object: 'payment_link';\n url: string;\n active: boolean;\n lineItems: LineItem[];\n expiresAt?: number;\n created: number;\n}\n\nexport interface PaymentLinkCreateParams {\n lineItems: LineItem[];\n expiresAt?: Date | number;\n metadata?: Record<string, string>;\n}\n\nexport interface Payment {\n id: string;\n object: 'payment';\n amount: number;\n currency: string;\n status: 'completed' | 'pending' | 'failed';\n customer?: string;\n checkout?: string;\n signature?: string;\n metadata?: Record<string, string>;\n created: number;\n}\n\nexport interface PaymentListParams {\n customerId?: string;\n status?: 'completed' | 'pending' | 'failed';\n limit?: number;\n startingAfter?: string;\n}\n\nexport interface Customer {\n id: string;\n object: 'customer';\n email: string;\n name?: string;\n metadata?: Record<string, string>;\n subscriptions?: unknown[];\n payments?: Payment[];\n created: number;\n}\n\nexport interface CustomerCreateParams {\n email: string;\n name?: string;\n metadata?: Record<string, string>;\n}\n\nexport interface CustomerUpdateParams {\n email?: string;\n name?: string;\n metadata?: Record<string, string>;\n}\n\nexport interface Payout {\n id: string;\n object: 'payout';\n amount: number;\n currency: string;\n status: 'pending' | 'completed' | 'failed';\n destination: string;\n created: number;\n}\n\nexport interface PayoutCreateParams {\n amount: number;\n currency: string;\n destination: string;\n}\n\nexport interface PayoutListParams {\n status?: 'pending' | 'completed' | 'failed';\n limit?: number;\n startingAfter?: string;\n}\n\nexport interface PayoutSettings {\n destination: {\n type: 'wallet';\n address: string;\n currency: string;\n };\n schedule: 'instant' | 'daily' | 'weekly' | 'monthly';\n minimumAmount?: number;\n}\n\nexport interface PayoutSettingsUpdateParams {\n destination?: PayoutSettings['destination'];\n schedule?: PayoutSettings['schedule'];\n minimumAmount?: number;\n}\n\n// Helper for making requests\nfunction createRequester(config: MoneyMQConfig) {\n return async function request<T>(method: string, path: string, body?: unknown): Promise<T> {\n const url = `${config.endpoint}${path}`;\n const headers: Record<string, string> = { 'Content-Type': 'application/json' };\n if (config.secret) headers['Authorization'] = `Bearer ${config.secret}`;\n\n const response = await fetch(url, {\n method,\n headers,\n body: body ? JSON.stringify(body) : undefined,\n });\n\n if (!response.ok) {\n const errorData = (await response.json().catch(() => ({}))) as { message?: string };\n throw new Error(errorData.message || `Request failed: ${response.status}`);\n }\n\n return response.json() as Promise<T>;\n };\n}\n\n// API Classes\nclass CheckoutAPI {\n private request: ReturnType<typeof createRequester>;\n\n constructor(config: MoneyMQConfig) {\n this.request = createRequester(config);\n }\n\n /**\n * Create a checkout session\n */\n async create(params: CheckoutCreateParams): Promise<CheckoutSession> {\n return this.request('POST', '/payment/v1/checkout', params);\n }\n\n /**\n * Retrieve a checkout session\n */\n async retrieve(id: string): Promise<CheckoutSession> {\n return this.request('GET', `/payment/v1/checkout/${id}`);\n }\n}\n\nclass LinksAPI {\n private request: ReturnType<typeof createRequester>;\n\n constructor(config: MoneyMQConfig) {\n this.request = createRequester(config);\n }\n\n /**\n * Create a payment link\n */\n async create(params: PaymentLinkCreateParams): Promise<PaymentLink> {\n return this.request('POST', '/payment/v1/links', {\n ...params,\n expiresAt: params.expiresAt instanceof Date ? params.expiresAt.getTime() : params.expiresAt,\n });\n }\n\n /**\n * Retrieve a payment link\n */\n async retrieve(id: string): Promise<PaymentLink> {\n return this.request('GET', `/payment/v1/links/${id}`);\n }\n\n /**\n * Deactivate a payment link\n */\n async deactivate(id: string): Promise<PaymentLink> {\n return this.request('PUT', `/payment/v1/links/${id}`, { active: false });\n }\n}\n\nclass CustomersAPI {\n private request: ReturnType<typeof createRequester>;\n\n constructor(config: MoneyMQConfig) {\n this.request = createRequester(config);\n }\n\n /**\n * Create a customer\n */\n async create(params: CustomerCreateParams): Promise<Customer> {\n return this.request('POST', '/payment/v1/customers', params);\n }\n\n /**\n * Retrieve a customer\n */\n async retrieve(id: string, options?: { expand?: string[] }): Promise<Customer> {\n const query = options?.expand ? `?expand=${options.expand.join(',')}` : '';\n return this.request('GET', `/payment/v1/customers/${id}${query}`);\n }\n\n /**\n * Update a customer\n */\n async update(id: string, params: CustomerUpdateParams): Promise<Customer> {\n return this.request('PUT', `/payment/v1/customers/${id}`, params);\n }\n\n /**\n * List customers\n */\n async list(params?: {\n email?: string;\n limit?: number;\n }): Promise<{ data: Customer[]; hasMore: boolean }> {\n const query = new URLSearchParams();\n if (params?.email) query.set('email', params.email);\n if (params?.limit) query.set('limit', String(params.limit));\n\n const queryString = query.toString();\n return this.request('GET', `/payment/v1/customers${queryString ? `?${queryString}` : ''}`);\n }\n}\n\nclass PayoutsAPI {\n private request: ReturnType<typeof createRequester>;\n\n /** Payout settings */\n public readonly settings: PayoutSettingsAPI;\n\n constructor(config: MoneyMQConfig) {\n this.request = createRequester(config);\n this.settings = new PayoutSettingsAPI(config);\n }\n\n /**\n * Create a manual payout\n */\n async create(params: PayoutCreateParams): Promise<Payout> {\n return this.request('POST', '/payment/v1/payouts', params);\n }\n\n /**\n * Retrieve a payout\n */\n async retrieve(id: string): Promise<Payout> {\n return this.request('GET', `/payment/v1/payouts/${id}`);\n }\n\n /**\n * List payouts\n */\n async list(params?: PayoutListParams): Promise<{ data: Payout[]; hasMore: boolean }> {\n const query = new URLSearchParams();\n if (params?.status) query.set('status', params.status);\n if (params?.limit) query.set('limit', String(params.limit));\n if (params?.startingAfter) query.set('starting_after', params.startingAfter);\n\n const queryString = query.toString();\n return this.request('GET', `/payment/v1/payouts${queryString ? `?${queryString}` : ''}`);\n }\n}\n\nclass PayoutSettingsAPI {\n private request: ReturnType<typeof createRequester>;\n\n constructor(config: MoneyMQConfig) {\n this.request = createRequester(config);\n }\n\n /**\n * Get payout settings\n */\n async retrieve(): Promise<PayoutSettings> {\n return this.request('GET', '/payment/v1/payouts/settings');\n }\n\n /**\n * Update payout settings\n */\n async update(params: PayoutSettingsUpdateParams): Promise<PayoutSettings> {\n return this.request('PUT', '/payment/v1/payouts/settings', params);\n }\n}\n\nclass WebhooksAPI {\n private request: ReturnType<typeof createRequester>;\n\n constructor(config: MoneyMQConfig) {\n this.request = createRequester(config);\n }\n\n /**\n * Trigger a test webhook event (for testing)\n */\n async trigger(event: string, data: Record<string, unknown>): Promise<{ success: boolean }> {\n return this.request('POST', '/payment/v1/webhooks/test', { event, data });\n }\n}\n\n/**\n * Payment API for checkout, links, customers, and payouts\n */\nexport class PaymentAPI {\n private request: ReturnType<typeof createRequester>;\n\n /** Checkout sessions API */\n public readonly checkout: CheckoutAPI;\n\n /** Payment links API */\n public readonly links: LinksAPI;\n\n /** Customers API */\n public readonly customers: CustomersAPI;\n\n /** Payouts API */\n public readonly payouts: PayoutsAPI;\n\n /** Webhooks API */\n public readonly webhooks: WebhooksAPI;\n\n constructor(config: MoneyMQConfig) {\n this.request = createRequester(config);\n this.checkout = new CheckoutAPI(config);\n this.links = new LinksAPI(config);\n this.customers = new CustomersAPI(config);\n this.payouts = new PayoutsAPI(config);\n this.webhooks = new WebhooksAPI(config);\n }\n\n /**\n * Retrieve a payment by ID\n */\n async retrieve(id: string): Promise<Payment> {\n return this.request('GET', `/payment/v1/${id}`);\n }\n\n /**\n * List payments\n */\n async list(params?: PaymentListParams): Promise<{ data: Payment[]; hasMore: boolean }> {\n const query = new URLSearchParams();\n if (params?.customerId) query.set('customer', params.customerId);\n if (params?.status) query.set('status', params.status);\n if (params?.limit) query.set('limit', String(params.limit));\n if (params?.startingAfter) query.set('starting_after', params.startingAfter);\n\n const queryString = query.toString();\n return this.request('GET', `/payment/v1${queryString ? `?${queryString}` : ''}`);\n }\n}\n","import { CatalogAPI } from './catalog';\nimport { PaymentAPI } from './payment';\n\n/**\n * Configuration options for the MoneyMQ client\n *\n * @example\n * ```typescript\n * const config: MoneyMQConfig = {\n * endpoint: 'https://api.moneymq.com',\n * secret: 'your-api-secret', // Optional\n * timeout: 30000,\n * };\n * ```\n */\nexport interface MoneyMQConfig {\n /**\n * MoneyMQ API endpoint\n * @example 'http://localhost:8488' or 'https://api.moneymq.com'\n */\n endpoint: string;\n /**\n * Optional secret key for authenticated requests\n * Used for server-side operations that require authentication\n */\n secret?: string;\n /**\n * Request timeout in milliseconds\n * @default 30000\n */\n timeout?: number;\n}\n\n/**\n * MoneyMQ SDK client for accepting stablecoin payments\n *\n * @example\n * ```typescript\n * import { MoneyMQ } from '@moneymq/sdk';\n *\n * const moneymq = new MoneyMQ({\n * endpoint: process.env.MONEYMQ_ENDPOINT ?? 'http://localhost:8488',\n * });\n *\n * // Create a product\n * const product = await moneymq.catalog.products.create({\n * name: 'Pro Plan',\n * description: 'Full access to all features',\n * });\n *\n * // Create a checkout session\n * const session = await moneymq.payment.checkout.create({\n * lineItems: [{ price: 'price_xxx', quantity: 1 }],\n * successUrl: 'https://example.com/success',\n * cancelUrl: 'https://example.com/cancel',\n * });\n * ```\n */\nexport class MoneyMQ {\n public readonly config: MoneyMQConfig;\n\n /** Catalog API for products and prices */\n public readonly catalog: CatalogAPI;\n\n /** Payment API for checkout, links, customers, and payouts */\n public readonly payment: PaymentAPI;\n\n constructor(config: MoneyMQConfig) {\n this.config = {\n timeout: 30000,\n ...config,\n };\n\n this.catalog = new CatalogAPI(this.config);\n this.payment = new PaymentAPI(this.config);\n }\n\n /**\n * Make an authenticated request to the MoneyMQ API\n */\n async request<T>(\n method: 'GET' | 'POST' | 'PUT' | 'DELETE',\n path: string,\n body?: unknown,\n ): Promise<T> {\n const url = `${this.config.endpoint}${path}`;\n\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n };\n\n if (this.config.secret) {\n headers['Authorization'] = `Bearer ${this.config.secret}`;\n }\n\n const response = await fetch(url, {\n method,\n headers,\n body: body ? JSON.stringify(body) : undefined,\n signal: AbortSignal.timeout(this.config.timeout!),\n });\n\n if (!response.ok) {\n const errorData = (await response.json().catch(() => ({}))) as { message?: string };\n throw new MoneyMQError(\n errorData.message || `Request failed with status ${response.status}`,\n response.status,\n errorData,\n );\n }\n\n return response.json() as Promise<T>;\n }\n}\n\n/**\n * MoneyMQ API error\n */\nexport class MoneyMQError extends Error {\n constructor(\n message: string,\n public readonly statusCode: number,\n public readonly raw?: unknown,\n ) {\n super(message);\n this.name = 'MoneyMQError';\n }\n}\n","/**\n * MoneyMQ server configuration returned from /config endpoint\n */\nexport interface ServerConfig {\n account: {\n name: string;\n description: string;\n };\n x402: {\n payoutAccount: {\n currency: string;\n decimals: number;\n address: string;\n tokenAddress: string;\n };\n facilitator: {\n operatorAccount: {\n out: string;\n in: {\n currency: string;\n decimals: number;\n address: string;\n tokenAddress: string;\n };\n };\n url: string;\n };\n validator: {\n network: string;\n rpcUrl: string;\n bindHost: string;\n rpcPort: number;\n wsPort: number;\n };\n };\n}\n\n/**\n * Fetch server configuration from MoneyMQ API\n *\n * @param apiUrl - The MoneyMQ API URL\n * @returns Server configuration including RPC URL\n *\n * @example\n * ```typescript\n * const config = await fetchConfig('http://localhost:8488');\n * console.log(config.x402.validator.rpcUrl);\n * ```\n */\nexport async function fetchConfig(apiUrl: string): Promise<ServerConfig> {\n const response = await fetch(`${apiUrl}/config`);\n if (!response.ok) {\n throw new Error(`Failed to fetch config: ${response.status}`);\n }\n return response.json() as Promise<ServerConfig>;\n}\n\n/**\n * Get the Solana RPC URL from server config\n *\n * @param apiUrl - The MoneyMQ API URL\n * @param fallback - Fallback RPC URL if fetch fails\n * @returns RPC URL string\n */\nexport async function getRpcUrl(\n apiUrl: string,\n fallback = 'https://api.devnet.solana.com'\n): Promise<string> {\n try {\n const config = await fetchConfig(apiUrl);\n return config.x402.validator.rpcUrl || fallback;\n } catch {\n return fallback;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACwDA,IAAM,cAAN,MAAkB;AAAA,EAChB,YAAoB,QAAuB;AAAvB;AAAA,EAAwB;AAAA,EAE5C,MAAc,QAAW,QAAgB,MAAc,MAA4B;AACjF,UAAM,MAAM,GAAG,KAAK,OAAO,QAAQ,GAAG,IAAI;AAC1C,UAAM,UAAkC,EAAE,gBAAgB,mBAAmB;AAC7E,QAAI,KAAK,OAAO,OAAQ,SAAQ,eAAe,IAAI,UAAU,KAAK,OAAO,MAAM;AAE/E,UAAM,WAAW,MAAM,MAAM,KAAK;AAAA,MAChC;AAAA,MACA;AAAA,MACA,MAAM,OAAO,KAAK,UAAU,IAAI,IAAI;AAAA,IACtC,CAAC;AAED,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,YAAa,MAAM,SAAS,KAAK,EAAE,MAAM,OAAO,CAAC,EAAE;AACzD,YAAM,IAAI,MAAM,UAAU,WAAW,mBAAmB,SAAS,MAAM,EAAE;AAAA,IAC3E;AAEA,WAAO,SAAS,KAAK;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,OAAO,QAA+C;AAC1D,WAAO,KAAK,QAAQ,QAAQ,wBAAwB,MAAM;AAAA,EAC5D;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,SAAS,IAA8B;AAC3C,WAAO,KAAK,QAAQ,OAAO,wBAAwB,EAAE,EAAE;AAAA,EACzD;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,KAAK,QAA4E;AACrF,UAAM,QAAQ,IAAI,gBAAgB;AAClC,QAAI,QAAQ,WAAW,OAAW,OAAM,IAAI,UAAU,OAAO,OAAO,MAAM,CAAC;AAC3E,QAAI,QAAQ,MAAO,OAAM,IAAI,SAAS,OAAO,OAAO,KAAK,CAAC;AAC1D,QAAI,QAAQ,cAAe,OAAM,IAAI,kBAAkB,OAAO,aAAa;AAE3E,UAAM,cAAc,MAAM,SAAS;AACnC,WAAO,KAAK,QAAQ,OAAO,uBAAuB,cAAc,IAAI,WAAW,KAAK,EAAE,EAAE;AAAA,EAC1F;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,OAAO,IAAY,QAAwD;AAC/E,WAAO,KAAK,QAAQ,OAAO,wBAAwB,EAAE,IAAI,MAAM;AAAA,EACjE;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,OAAO,IAA2C;AACtD,WAAO,KAAK,QAAQ,UAAU,wBAAwB,EAAE,EAAE;AAAA,EAC5D;AACF;AAEA,IAAM,YAAN,MAAgB;AAAA,EACd,YAAoB,QAAuB;AAAvB;AAAA,EAAwB;AAAA,EAE5C,MAAc,QAAW,QAAgB,MAAc,MAA4B;AACjF,UAAM,MAAM,GAAG,KAAK,OAAO,QAAQ,GAAG,IAAI;AAC1C,UAAM,UAAkC,EAAE,gBAAgB,mBAAmB;AAC7E,QAAI,KAAK,OAAO,OAAQ,SAAQ,eAAe,IAAI,UAAU,KAAK,OAAO,MAAM;AAE/E,UAAM,WAAW,MAAM,MAAM,KAAK;AAAA,MAChC;AAAA,MACA;AAAA,MACA,MAAM,OAAO,KAAK,UAAU,IAAI,IAAI;AAAA,IACtC,CAAC;AAED,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,YAAa,MAAM,SAAS,KAAK,EAAE,MAAM,OAAO,CAAC,EAAE;AACzD,YAAM,IAAI,MAAM,UAAU,WAAW,mBAAmB,SAAS,MAAM,EAAE;AAAA,IAC3E;AAEA,WAAO,SAAS,KAAK;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,OAAO,QAA2C;AACtD,WAAO,KAAK,QAAQ,QAAQ,sBAAsB,MAAM;AAAA,EAC1D;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,SAAS,IAA4B;AACzC,WAAO,KAAK,QAAQ,OAAO,sBAAsB,EAAE,EAAE;AAAA,EACvD;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,KAAK,QAIsC;AAC/C,UAAM,QAAQ,IAAI,gBAAgB;AAClC,QAAI,QAAQ,QAAS,OAAM,IAAI,WAAW,OAAO,OAAO;AACxD,QAAI,QAAQ,WAAW,OAAW,OAAM,IAAI,UAAU,OAAO,OAAO,MAAM,CAAC;AAC3E,QAAI,QAAQ,MAAO,OAAM,IAAI,SAAS,OAAO,OAAO,KAAK,CAAC;AAE1D,UAAM,cAAc,MAAM,SAAS;AACnC,WAAO,KAAK,QAAQ,OAAO,qBAAqB,cAAc,IAAI,WAAW,KAAK,EAAE,EAAE;AAAA,EACxF;AACF;AAKO,IAAM,aAAN,MAAiB;AAAA,EAOtB,YAAY,QAAuB;AACjC,SAAK,WAAW,IAAI,YAAY,MAAM;AACtC,SAAK,SAAS,IAAI,UAAU,MAAM;AAAA,EACpC;AACF;;;AC3DA,SAAS,gBAAgB,QAAuB;AAC9C,SAAO,eAAe,QAAW,QAAgB,MAAc,MAA4B;AACzF,UAAM,MAAM,GAAG,OAAO,QAAQ,GAAG,IAAI;AACrC,UAAM,UAAkC,EAAE,gBAAgB,mBAAmB;AAC7E,QAAI,OAAO,OAAQ,SAAQ,eAAe,IAAI,UAAU,OAAO,MAAM;AAErE,UAAM,WAAW,MAAM,MAAM,KAAK;AAAA,MAChC;AAAA,MACA;AAAA,MACA,MAAM,OAAO,KAAK,UAAU,IAAI,IAAI;AAAA,IACtC,CAAC;AAED,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,YAAa,MAAM,SAAS,KAAK,EAAE,MAAM,OAAO,CAAC,EAAE;AACzD,YAAM,IAAI,MAAM,UAAU,WAAW,mBAAmB,SAAS,MAAM,EAAE;AAAA,IAC3E;AAEA,WAAO,SAAS,KAAK;AAAA,EACvB;AACF;AAGA,IAAM,cAAN,MAAkB;AAAA,EAGhB,YAAY,QAAuB;AACjC,SAAK,UAAU,gBAAgB,MAAM;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,OAAO,QAAwD;AACnE,WAAO,KAAK,QAAQ,QAAQ,wBAAwB,MAAM;AAAA,EAC5D;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,SAAS,IAAsC;AACnD,WAAO,KAAK,QAAQ,OAAO,wBAAwB,EAAE,EAAE;AAAA,EACzD;AACF;AAEA,IAAM,WAAN,MAAe;AAAA,EAGb,YAAY,QAAuB;AACjC,SAAK,UAAU,gBAAgB,MAAM;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,OAAO,QAAuD;AAClE,WAAO,KAAK,QAAQ,QAAQ,qBAAqB;AAAA,MAC/C,GAAG;AAAA,MACH,WAAW,OAAO,qBAAqB,OAAO,OAAO,UAAU,QAAQ,IAAI,OAAO;AAAA,IACpF,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,SAAS,IAAkC;AAC/C,WAAO,KAAK,QAAQ,OAAO,qBAAqB,EAAE,EAAE;AAAA,EACtD;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,WAAW,IAAkC;AACjD,WAAO,KAAK,QAAQ,OAAO,qBAAqB,EAAE,IAAI,EAAE,QAAQ,MAAM,CAAC;AAAA,EACzE;AACF;AAEA,IAAM,eAAN,MAAmB;AAAA,EAGjB,YAAY,QAAuB;AACjC,SAAK,UAAU,gBAAgB,MAAM;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,OAAO,QAAiD;AAC5D,WAAO,KAAK,QAAQ,QAAQ,yBAAyB,MAAM;AAAA,EAC7D;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,SAAS,IAAY,SAAoD;AAC7E,UAAM,QAAQ,SAAS,SAAS,WAAW,QAAQ,OAAO,KAAK,GAAG,CAAC,KAAK;AACxE,WAAO,KAAK,QAAQ,OAAO,yBAAyB,EAAE,GAAG,KAAK,EAAE;AAAA,EAClE;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,OAAO,IAAY,QAAiD;AACxE,WAAO,KAAK,QAAQ,OAAO,yBAAyB,EAAE,IAAI,MAAM;AAAA,EAClE;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,KAAK,QAGyC;AAClD,UAAM,QAAQ,IAAI,gBAAgB;AAClC,QAAI,QAAQ,MAAO,OAAM,IAAI,SAAS,OAAO,KAAK;AAClD,QAAI,QAAQ,MAAO,OAAM,IAAI,SAAS,OAAO,OAAO,KAAK,CAAC;AAE1D,UAAM,cAAc,MAAM,SAAS;AACnC,WAAO,KAAK,QAAQ,OAAO,wBAAwB,cAAc,IAAI,WAAW,KAAK,EAAE,EAAE;AAAA,EAC3F;AACF;AAEA,IAAM,aAAN,MAAiB;AAAA,EAMf,YAAY,QAAuB;AACjC,SAAK,UAAU,gBAAgB,MAAM;AACrC,SAAK,WAAW,IAAI,kBAAkB,MAAM;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,OAAO,QAA6C;AACxD,WAAO,KAAK,QAAQ,QAAQ,uBAAuB,MAAM;AAAA,EAC3D;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,SAAS,IAA6B;AAC1C,WAAO,KAAK,QAAQ,OAAO,uBAAuB,EAAE,EAAE;AAAA,EACxD;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,KAAK,QAA0E;AACnF,UAAM,QAAQ,IAAI,gBAAgB;AAClC,QAAI,QAAQ,OAAQ,OAAM,IAAI,UAAU,OAAO,MAAM;AACrD,QAAI,QAAQ,MAAO,OAAM,IAAI,SAAS,OAAO,OAAO,KAAK,CAAC;AAC1D,QAAI,QAAQ,cAAe,OAAM,IAAI,kBAAkB,OAAO,aAAa;AAE3E,UAAM,cAAc,MAAM,SAAS;AACnC,WAAO,KAAK,QAAQ,OAAO,sBAAsB,cAAc,IAAI,WAAW,KAAK,EAAE,EAAE;AAAA,EACzF;AACF;AAEA,IAAM,oBAAN,MAAwB;AAAA,EAGtB,YAAY,QAAuB;AACjC,SAAK,UAAU,gBAAgB,MAAM;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,WAAoC;AACxC,WAAO,KAAK,QAAQ,OAAO,8BAA8B;AAAA,EAC3D;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,OAAO,QAA6D;AACxE,WAAO,KAAK,QAAQ,OAAO,gCAAgC,MAAM;AAAA,EACnE;AACF;AAEA,IAAM,cAAN,MAAkB;AAAA,EAGhB,YAAY,QAAuB;AACjC,SAAK,UAAU,gBAAgB,MAAM;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,QAAQ,OAAe,MAA8D;AACzF,WAAO,KAAK,QAAQ,QAAQ,6BAA6B,EAAE,OAAO,KAAK,CAAC;AAAA,EAC1E;AACF;AAKO,IAAM,aAAN,MAAiB;AAAA,EAkBtB,YAAY,QAAuB;AACjC,SAAK,UAAU,gBAAgB,MAAM;AACrC,SAAK,WAAW,IAAI,YAAY,MAAM;AACtC,SAAK,QAAQ,IAAI,SAAS,MAAM;AAChC,SAAK,YAAY,IAAI,aAAa,MAAM;AACxC,SAAK,UAAU,IAAI,WAAW,MAAM;AACpC,SAAK,WAAW,IAAI,YAAY,MAAM;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,SAAS,IAA8B;AAC3C,WAAO,KAAK,QAAQ,OAAO,eAAe,EAAE,EAAE;AAAA,EAChD;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,KAAK,QAA4E;AACrF,UAAM,QAAQ,IAAI,gBAAgB;AAClC,QAAI,QAAQ,WAAY,OAAM,IAAI,YAAY,OAAO,UAAU;AAC/D,QAAI,QAAQ,OAAQ,OAAM,IAAI,UAAU,OAAO,MAAM;AACrD,QAAI,QAAQ,MAAO,OAAM,IAAI,SAAS,OAAO,OAAO,KAAK,CAAC;AAC1D,QAAI,QAAQ,cAAe,OAAM,IAAI,kBAAkB,OAAO,aAAa;AAE3E,UAAM,cAAc,MAAM,SAAS;AACnC,WAAO,KAAK,QAAQ,OAAO,cAAc,cAAc,IAAI,WAAW,KAAK,EAAE,EAAE;AAAA,EACjF;AACF;;;AC9TO,IAAM,UAAN,MAAc;AAAA,EASnB,YAAY,QAAuB;AACjC,SAAK,SAAS;AAAA,MACZ,SAAS;AAAA,MACT,GAAG;AAAA,IACL;AAEA,SAAK,UAAU,IAAI,WAAW,KAAK,MAAM;AACzC,SAAK,UAAU,IAAI,WAAW,KAAK,MAAM;AAAA,EAC3C;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,QACJ,QACA,MACA,MACY;AACZ,UAAM,MAAM,GAAG,KAAK,OAAO,QAAQ,GAAG,IAAI;AAE1C,UAAM,UAAkC;AAAA,MACtC,gBAAgB;AAAA,IAClB;AAEA,QAAI,KAAK,OAAO,QAAQ;AACtB,cAAQ,eAAe,IAAI,UAAU,KAAK,OAAO,MAAM;AAAA,IACzD;AAEA,UAAM,WAAW,MAAM,MAAM,KAAK;AAAA,MAChC;AAAA,MACA;AAAA,MACA,MAAM,OAAO,KAAK,UAAU,IAAI,IAAI;AAAA,MACpC,QAAQ,YAAY,QAAQ,KAAK,OAAO,OAAQ;AAAA,IAClD,CAAC;AAED,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,YAAa,MAAM,SAAS,KAAK,EAAE,MAAM,OAAO,CAAC,EAAE;AACzD,YAAM,IAAI;AAAA,QACR,UAAU,WAAW,8BAA8B,SAAS,MAAM;AAAA,QAClE,SAAS;AAAA,QACT;AAAA,MACF;AAAA,IACF;AAEA,WAAO,SAAS,KAAK;AAAA,EACvB;AACF;AAKO,IAAM,eAAN,cAA2B,MAAM;AAAA,EACtC,YACE,SACgB,YACA,KAChB;AACA,UAAM,OAAO;AAHG;AACA;AAGhB,SAAK,OAAO;AAAA,EACd;AACF;;;AC9EA,eAAsB,YAAY,QAAuC;AACvE,QAAM,WAAW,MAAM,MAAM,GAAG,MAAM,SAAS;AAC/C,MAAI,CAAC,SAAS,IAAI;AAChB,UAAM,IAAI,MAAM,2BAA2B,SAAS,MAAM,EAAE;AAAA,EAC9D;AACA,SAAO,SAAS,KAAK;AACvB;AASA,eAAsB,UACpB,QACA,WAAW,iCACM;AACjB,MAAI;AACF,UAAM,SAAS,MAAM,YAAY,MAAM;AACvC,WAAO,OAAO,KAAK,UAAU,UAAU;AAAA,EACzC,QAAQ;AACN,WAAO;AAAA,EACT;AACF;","names":[]}
|
package/dist/index.mjs
CHANGED
|
@@ -4,7 +4,7 @@ var ProductsAPI = class {
|
|
|
4
4
|
this.config = config;
|
|
5
5
|
}
|
|
6
6
|
async request(method, path, body) {
|
|
7
|
-
const url = `${this.config.
|
|
7
|
+
const url = `${this.config.endpoint}${path}`;
|
|
8
8
|
const headers = { "Content-Type": "application/json" };
|
|
9
9
|
if (this.config.secret) headers["Authorization"] = `Bearer ${this.config.secret}`;
|
|
10
10
|
const response = await fetch(url, {
|
|
@@ -22,13 +22,13 @@ var ProductsAPI = class {
|
|
|
22
22
|
* Create a new product
|
|
23
23
|
*/
|
|
24
24
|
async create(params) {
|
|
25
|
-
return this.request("POST", "/v1/products", params);
|
|
25
|
+
return this.request("POST", "/catalog/v1/products", params);
|
|
26
26
|
}
|
|
27
27
|
/**
|
|
28
28
|
* Retrieve a product by ID
|
|
29
29
|
*/
|
|
30
30
|
async retrieve(id) {
|
|
31
|
-
return this.request("GET", `/v1/products/${id}`);
|
|
31
|
+
return this.request("GET", `/catalog/v1/products/${id}`);
|
|
32
32
|
}
|
|
33
33
|
/**
|
|
34
34
|
* List all products
|
|
@@ -39,19 +39,19 @@ var ProductsAPI = class {
|
|
|
39
39
|
if (params?.limit) query.set("limit", String(params.limit));
|
|
40
40
|
if (params?.startingAfter) query.set("starting_after", params.startingAfter);
|
|
41
41
|
const queryString = query.toString();
|
|
42
|
-
return this.request("GET", `/v1/products${queryString ? `?${queryString}` : ""}`);
|
|
42
|
+
return this.request("GET", `/catalog/v1/products${queryString ? `?${queryString}` : ""}`);
|
|
43
43
|
}
|
|
44
44
|
/**
|
|
45
45
|
* Update a product
|
|
46
46
|
*/
|
|
47
47
|
async update(id, params) {
|
|
48
|
-
return this.request("PUT", `/v1/products/${id}`, params);
|
|
48
|
+
return this.request("PUT", `/catalog/v1/products/${id}`, params);
|
|
49
49
|
}
|
|
50
50
|
/**
|
|
51
51
|
* Delete a product
|
|
52
52
|
*/
|
|
53
53
|
async delete(id) {
|
|
54
|
-
return this.request("DELETE", `/v1/products/${id}`);
|
|
54
|
+
return this.request("DELETE", `/catalog/v1/products/${id}`);
|
|
55
55
|
}
|
|
56
56
|
};
|
|
57
57
|
var PricesAPI = class {
|
|
@@ -59,7 +59,7 @@ var PricesAPI = class {
|
|
|
59
59
|
this.config = config;
|
|
60
60
|
}
|
|
61
61
|
async request(method, path, body) {
|
|
62
|
-
const url = `${this.config.
|
|
62
|
+
const url = `${this.config.endpoint}${path}`;
|
|
63
63
|
const headers = { "Content-Type": "application/json" };
|
|
64
64
|
if (this.config.secret) headers["Authorization"] = `Bearer ${this.config.secret}`;
|
|
65
65
|
const response = await fetch(url, {
|
|
@@ -77,13 +77,13 @@ var PricesAPI = class {
|
|
|
77
77
|
* Create a new price
|
|
78
78
|
*/
|
|
79
79
|
async create(params) {
|
|
80
|
-
return this.request("POST", "/v1/prices", params);
|
|
80
|
+
return this.request("POST", "/catalog/v1/prices", params);
|
|
81
81
|
}
|
|
82
82
|
/**
|
|
83
83
|
* Retrieve a price by ID
|
|
84
84
|
*/
|
|
85
85
|
async retrieve(id) {
|
|
86
|
-
return this.request("GET", `/v1/prices/${id}`);
|
|
86
|
+
return this.request("GET", `/catalog/v1/prices/${id}`);
|
|
87
87
|
}
|
|
88
88
|
/**
|
|
89
89
|
* List all prices
|
|
@@ -94,7 +94,7 @@ var PricesAPI = class {
|
|
|
94
94
|
if (params?.active !== void 0) query.set("active", String(params.active));
|
|
95
95
|
if (params?.limit) query.set("limit", String(params.limit));
|
|
96
96
|
const queryString = query.toString();
|
|
97
|
-
return this.request("GET", `/v1/prices${queryString ? `?${queryString}` : ""}`);
|
|
97
|
+
return this.request("GET", `/catalog/v1/prices${queryString ? `?${queryString}` : ""}`);
|
|
98
98
|
}
|
|
99
99
|
};
|
|
100
100
|
var CatalogAPI = class {
|
|
@@ -107,7 +107,7 @@ var CatalogAPI = class {
|
|
|
107
107
|
// src/payment.ts
|
|
108
108
|
function createRequester(config) {
|
|
109
109
|
return async function request(method, path, body) {
|
|
110
|
-
const url = `${config.
|
|
110
|
+
const url = `${config.endpoint}${path}`;
|
|
111
111
|
const headers = { "Content-Type": "application/json" };
|
|
112
112
|
if (config.secret) headers["Authorization"] = `Bearer ${config.secret}`;
|
|
113
113
|
const response = await fetch(url, {
|
|
@@ -130,13 +130,13 @@ var CheckoutAPI = class {
|
|
|
130
130
|
* Create a checkout session
|
|
131
131
|
*/
|
|
132
132
|
async create(params) {
|
|
133
|
-
return this.request("POST", "/payment/checkout", params);
|
|
133
|
+
return this.request("POST", "/payment/v1/checkout", params);
|
|
134
134
|
}
|
|
135
135
|
/**
|
|
136
136
|
* Retrieve a checkout session
|
|
137
137
|
*/
|
|
138
138
|
async retrieve(id) {
|
|
139
|
-
return this.request("GET", `/payment/checkout/${id}`);
|
|
139
|
+
return this.request("GET", `/payment/v1/checkout/${id}`);
|
|
140
140
|
}
|
|
141
141
|
};
|
|
142
142
|
var LinksAPI = class {
|
|
@@ -147,7 +147,7 @@ var LinksAPI = class {
|
|
|
147
147
|
* Create a payment link
|
|
148
148
|
*/
|
|
149
149
|
async create(params) {
|
|
150
|
-
return this.request("POST", "/payment/links", {
|
|
150
|
+
return this.request("POST", "/payment/v1/links", {
|
|
151
151
|
...params,
|
|
152
152
|
expiresAt: params.expiresAt instanceof Date ? params.expiresAt.getTime() : params.expiresAt
|
|
153
153
|
});
|
|
@@ -156,13 +156,13 @@ var LinksAPI = class {
|
|
|
156
156
|
* Retrieve a payment link
|
|
157
157
|
*/
|
|
158
158
|
async retrieve(id) {
|
|
159
|
-
return this.request("GET", `/payment/links/${id}`);
|
|
159
|
+
return this.request("GET", `/payment/v1/links/${id}`);
|
|
160
160
|
}
|
|
161
161
|
/**
|
|
162
162
|
* Deactivate a payment link
|
|
163
163
|
*/
|
|
164
164
|
async deactivate(id) {
|
|
165
|
-
return this.request("PUT", `/payment/links/${id}`, { active: false });
|
|
165
|
+
return this.request("PUT", `/payment/v1/links/${id}`, { active: false });
|
|
166
166
|
}
|
|
167
167
|
};
|
|
168
168
|
var CustomersAPI = class {
|
|
@@ -173,20 +173,20 @@ var CustomersAPI = class {
|
|
|
173
173
|
* Create a customer
|
|
174
174
|
*/
|
|
175
175
|
async create(params) {
|
|
176
|
-
return this.request("POST", "/payment/customers", params);
|
|
176
|
+
return this.request("POST", "/payment/v1/customers", params);
|
|
177
177
|
}
|
|
178
178
|
/**
|
|
179
179
|
* Retrieve a customer
|
|
180
180
|
*/
|
|
181
181
|
async retrieve(id, options) {
|
|
182
182
|
const query = options?.expand ? `?expand=${options.expand.join(",")}` : "";
|
|
183
|
-
return this.request("GET", `/payment/customers/${id}${query}`);
|
|
183
|
+
return this.request("GET", `/payment/v1/customers/${id}${query}`);
|
|
184
184
|
}
|
|
185
185
|
/**
|
|
186
186
|
* Update a customer
|
|
187
187
|
*/
|
|
188
188
|
async update(id, params) {
|
|
189
|
-
return this.request("PUT", `/payment/customers/${id}`, params);
|
|
189
|
+
return this.request("PUT", `/payment/v1/customers/${id}`, params);
|
|
190
190
|
}
|
|
191
191
|
/**
|
|
192
192
|
* List customers
|
|
@@ -196,7 +196,7 @@ var CustomersAPI = class {
|
|
|
196
196
|
if (params?.email) query.set("email", params.email);
|
|
197
197
|
if (params?.limit) query.set("limit", String(params.limit));
|
|
198
198
|
const queryString = query.toString();
|
|
199
|
-
return this.request("GET", `/payment/customers${queryString ? `?${queryString}` : ""}`);
|
|
199
|
+
return this.request("GET", `/payment/v1/customers${queryString ? `?${queryString}` : ""}`);
|
|
200
200
|
}
|
|
201
201
|
};
|
|
202
202
|
var PayoutsAPI = class {
|
|
@@ -208,13 +208,13 @@ var PayoutsAPI = class {
|
|
|
208
208
|
* Create a manual payout
|
|
209
209
|
*/
|
|
210
210
|
async create(params) {
|
|
211
|
-
return this.request("POST", "/payment/payouts", params);
|
|
211
|
+
return this.request("POST", "/payment/v1/payouts", params);
|
|
212
212
|
}
|
|
213
213
|
/**
|
|
214
214
|
* Retrieve a payout
|
|
215
215
|
*/
|
|
216
216
|
async retrieve(id) {
|
|
217
|
-
return this.request("GET", `/payment/payouts/${id}`);
|
|
217
|
+
return this.request("GET", `/payment/v1/payouts/${id}`);
|
|
218
218
|
}
|
|
219
219
|
/**
|
|
220
220
|
* List payouts
|
|
@@ -225,7 +225,7 @@ var PayoutsAPI = class {
|
|
|
225
225
|
if (params?.limit) query.set("limit", String(params.limit));
|
|
226
226
|
if (params?.startingAfter) query.set("starting_after", params.startingAfter);
|
|
227
227
|
const queryString = query.toString();
|
|
228
|
-
return this.request("GET", `/payment/payouts${queryString ? `?${queryString}` : ""}`);
|
|
228
|
+
return this.request("GET", `/payment/v1/payouts${queryString ? `?${queryString}` : ""}`);
|
|
229
229
|
}
|
|
230
230
|
};
|
|
231
231
|
var PayoutSettingsAPI = class {
|
|
@@ -236,13 +236,13 @@ var PayoutSettingsAPI = class {
|
|
|
236
236
|
* Get payout settings
|
|
237
237
|
*/
|
|
238
238
|
async retrieve() {
|
|
239
|
-
return this.request("GET", "/payment/payouts/settings");
|
|
239
|
+
return this.request("GET", "/payment/v1/payouts/settings");
|
|
240
240
|
}
|
|
241
241
|
/**
|
|
242
242
|
* Update payout settings
|
|
243
243
|
*/
|
|
244
244
|
async update(params) {
|
|
245
|
-
return this.request("PUT", "/payment/payouts/settings", params);
|
|
245
|
+
return this.request("PUT", "/payment/v1/payouts/settings", params);
|
|
246
246
|
}
|
|
247
247
|
};
|
|
248
248
|
var WebhooksAPI = class {
|
|
@@ -253,7 +253,7 @@ var WebhooksAPI = class {
|
|
|
253
253
|
* Trigger a test webhook event (for testing)
|
|
254
254
|
*/
|
|
255
255
|
async trigger(event, data) {
|
|
256
|
-
return this.request("POST", "/payment/webhooks/test", { event, data });
|
|
256
|
+
return this.request("POST", "/payment/v1/webhooks/test", { event, data });
|
|
257
257
|
}
|
|
258
258
|
};
|
|
259
259
|
var PaymentAPI = class {
|
|
@@ -269,7 +269,7 @@ var PaymentAPI = class {
|
|
|
269
269
|
* Retrieve a payment by ID
|
|
270
270
|
*/
|
|
271
271
|
async retrieve(id) {
|
|
272
|
-
return this.request("GET", `/payment/${id}`);
|
|
272
|
+
return this.request("GET", `/payment/v1/${id}`);
|
|
273
273
|
}
|
|
274
274
|
/**
|
|
275
275
|
* List payments
|
|
@@ -281,7 +281,7 @@ var PaymentAPI = class {
|
|
|
281
281
|
if (params?.limit) query.set("limit", String(params.limit));
|
|
282
282
|
if (params?.startingAfter) query.set("starting_after", params.startingAfter);
|
|
283
283
|
const queryString = query.toString();
|
|
284
|
-
return this.request("GET", `/payment${queryString ? `?${queryString}` : ""}`);
|
|
284
|
+
return this.request("GET", `/payment/v1${queryString ? `?${queryString}` : ""}`);
|
|
285
285
|
}
|
|
286
286
|
};
|
|
287
287
|
|
|
@@ -299,7 +299,7 @@ var MoneyMQ = class {
|
|
|
299
299
|
* Make an authenticated request to the MoneyMQ API
|
|
300
300
|
*/
|
|
301
301
|
async request(method, path, body) {
|
|
302
|
-
const url = `${this.config.
|
|
302
|
+
const url = `${this.config.endpoint}${path}`;
|
|
303
303
|
const headers = {
|
|
304
304
|
"Content-Type": "application/json"
|
|
305
305
|
};
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/catalog.ts","../src/payment.ts","../src/client.ts","../src/config.ts"],"sourcesContent":["import type { MoneyMQConfig } from './client';\n\n// Types\nexport interface Product {\n id: string;\n object: 'product';\n name: string;\n description?: string;\n active: boolean;\n metadata?: Record<string, string>;\n created: number;\n updated: number;\n}\n\nexport interface ProductCreateParams {\n name: string;\n description?: string;\n active?: boolean;\n metadata?: Record<string, string>;\n}\n\nexport interface ProductListParams {\n active?: boolean;\n limit?: number;\n startingAfter?: string;\n}\n\nexport interface Price {\n id: string;\n object: 'price';\n product: string;\n currency: string;\n amount: number;\n type: 'one_time' | 'recurring';\n recurring?: {\n interval: 'day' | 'week' | 'month' | 'year';\n intervalCount: number;\n };\n active: boolean;\n metadata?: Record<string, string>;\n created: number;\n}\n\nexport interface PriceCreateParams {\n product: string;\n currency: string;\n amount: number;\n type: 'one_time' | 'recurring';\n recurring?: {\n interval: 'day' | 'week' | 'month' | 'year';\n intervalCount?: number;\n };\n metadata?: Record<string, string>;\n}\n\n// API Classes\nclass ProductsAPI {\n constructor(private config: MoneyMQConfig) {}\n\n private async request<T>(method: string, path: string, body?: unknown): Promise<T> {\n const url = `${this.config.url}${path}`;\n const headers: Record<string, string> = { 'Content-Type': 'application/json' };\n if (this.config.secret) headers['Authorization'] = `Bearer ${this.config.secret}`;\n\n const response = await fetch(url, {\n method,\n headers,\n body: body ? JSON.stringify(body) : undefined,\n });\n\n if (!response.ok) {\n const errorData = (await response.json().catch(() => ({}))) as { message?: string };\n throw new Error(errorData.message || `Request failed: ${response.status}`);\n }\n\n return response.json() as Promise<T>;\n }\n\n /**\n * Create a new product\n */\n async create(params: ProductCreateParams): Promise<Product> {\n return this.request('POST', '/v1/products', params);\n }\n\n /**\n * Retrieve a product by ID\n */\n async retrieve(id: string): Promise<Product> {\n return this.request('GET', `/v1/products/${id}`);\n }\n\n /**\n * List all products\n */\n async list(params?: ProductListParams): Promise<{ data: Product[]; hasMore: boolean }> {\n const query = new URLSearchParams();\n if (params?.active !== undefined) query.set('active', String(params.active));\n if (params?.limit) query.set('limit', String(params.limit));\n if (params?.startingAfter) query.set('starting_after', params.startingAfter);\n\n const queryString = query.toString();\n return this.request('GET', `/v1/products${queryString ? `?${queryString}` : ''}`);\n }\n\n /**\n * Update a product\n */\n async update(id: string, params: Partial<ProductCreateParams>): Promise<Product> {\n return this.request('PUT', `/v1/products/${id}`, params);\n }\n\n /**\n * Delete a product\n */\n async delete(id: string): Promise<{ deleted: boolean }> {\n return this.request('DELETE', `/v1/products/${id}`);\n }\n}\n\nclass PricesAPI {\n constructor(private config: MoneyMQConfig) {}\n\n private async request<T>(method: string, path: string, body?: unknown): Promise<T> {\n const url = `${this.config.url}${path}`;\n const headers: Record<string, string> = { 'Content-Type': 'application/json' };\n if (this.config.secret) headers['Authorization'] = `Bearer ${this.config.secret}`;\n\n const response = await fetch(url, {\n method,\n headers,\n body: body ? JSON.stringify(body) : undefined,\n });\n\n if (!response.ok) {\n const errorData = (await response.json().catch(() => ({}))) as { message?: string };\n throw new Error(errorData.message || `Request failed: ${response.status}`);\n }\n\n return response.json() as Promise<T>;\n }\n\n /**\n * Create a new price\n */\n async create(params: PriceCreateParams): Promise<Price> {\n return this.request('POST', '/v1/prices', params);\n }\n\n /**\n * Retrieve a price by ID\n */\n async retrieve(id: string): Promise<Price> {\n return this.request('GET', `/v1/prices/${id}`);\n }\n\n /**\n * List all prices\n */\n async list(params?: {\n product?: string;\n active?: boolean;\n limit?: number;\n }): Promise<{ data: Price[]; hasMore: boolean }> {\n const query = new URLSearchParams();\n if (params?.product) query.set('product', params.product);\n if (params?.active !== undefined) query.set('active', String(params.active));\n if (params?.limit) query.set('limit', String(params.limit));\n\n const queryString = query.toString();\n return this.request('GET', `/v1/prices${queryString ? `?${queryString}` : ''}`);\n }\n}\n\n/**\n * Catalog API for managing products and prices\n */\nexport class CatalogAPI {\n /** Products API */\n public readonly products: ProductsAPI;\n\n /** Prices API */\n public readonly prices: PricesAPI;\n\n constructor(config: MoneyMQConfig) {\n this.products = new ProductsAPI(config);\n this.prices = new PricesAPI(config);\n }\n}\n","import type { MoneyMQConfig } from './client';\n\n// Types\nexport interface LineItem {\n price: string;\n quantity: number;\n}\n\nexport interface CheckoutSession {\n id: string;\n object: 'checkout.session';\n url: string;\n status: 'open' | 'complete' | 'expired';\n paymentStatus: 'unpaid' | 'paid';\n customer?: string;\n lineItems: LineItem[];\n successUrl: string;\n cancelUrl: string;\n expiresAt: number;\n created: number;\n}\n\nexport interface CheckoutCreateParams {\n lineItems: LineItem[];\n successUrl: string;\n cancelUrl: string;\n customerEmail?: string;\n customer?: string;\n metadata?: Record<string, string>;\n}\n\nexport interface PaymentLink {\n id: string;\n object: 'payment_link';\n url: string;\n active: boolean;\n lineItems: LineItem[];\n expiresAt?: number;\n created: number;\n}\n\nexport interface PaymentLinkCreateParams {\n lineItems: LineItem[];\n expiresAt?: Date | number;\n metadata?: Record<string, string>;\n}\n\nexport interface Payment {\n id: string;\n object: 'payment';\n amount: number;\n currency: string;\n status: 'completed' | 'pending' | 'failed';\n customer?: string;\n checkout?: string;\n signature?: string;\n metadata?: Record<string, string>;\n created: number;\n}\n\nexport interface PaymentListParams {\n customerId?: string;\n status?: 'completed' | 'pending' | 'failed';\n limit?: number;\n startingAfter?: string;\n}\n\nexport interface Customer {\n id: string;\n object: 'customer';\n email: string;\n name?: string;\n metadata?: Record<string, string>;\n subscriptions?: unknown[];\n payments?: Payment[];\n created: number;\n}\n\nexport interface CustomerCreateParams {\n email: string;\n name?: string;\n metadata?: Record<string, string>;\n}\n\nexport interface CustomerUpdateParams {\n email?: string;\n name?: string;\n metadata?: Record<string, string>;\n}\n\nexport interface Payout {\n id: string;\n object: 'payout';\n amount: number;\n currency: string;\n status: 'pending' | 'completed' | 'failed';\n destination: string;\n created: number;\n}\n\nexport interface PayoutCreateParams {\n amount: number;\n currency: string;\n destination: string;\n}\n\nexport interface PayoutListParams {\n status?: 'pending' | 'completed' | 'failed';\n limit?: number;\n startingAfter?: string;\n}\n\nexport interface PayoutSettings {\n destination: {\n type: 'wallet';\n address: string;\n currency: string;\n };\n schedule: 'instant' | 'daily' | 'weekly' | 'monthly';\n minimumAmount?: number;\n}\n\nexport interface PayoutSettingsUpdateParams {\n destination?: PayoutSettings['destination'];\n schedule?: PayoutSettings['schedule'];\n minimumAmount?: number;\n}\n\n// Helper for making requests\nfunction createRequester(config: MoneyMQConfig) {\n return async function request<T>(method: string, path: string, body?: unknown): Promise<T> {\n const url = `${config.url}${path}`;\n const headers: Record<string, string> = { 'Content-Type': 'application/json' };\n if (config.secret) headers['Authorization'] = `Bearer ${config.secret}`;\n\n const response = await fetch(url, {\n method,\n headers,\n body: body ? JSON.stringify(body) : undefined,\n });\n\n if (!response.ok) {\n const errorData = (await response.json().catch(() => ({}))) as { message?: string };\n throw new Error(errorData.message || `Request failed: ${response.status}`);\n }\n\n return response.json() as Promise<T>;\n };\n}\n\n// API Classes\nclass CheckoutAPI {\n private request: ReturnType<typeof createRequester>;\n\n constructor(config: MoneyMQConfig) {\n this.request = createRequester(config);\n }\n\n /**\n * Create a checkout session\n */\n async create(params: CheckoutCreateParams): Promise<CheckoutSession> {\n return this.request('POST', '/payment/checkout', params);\n }\n\n /**\n * Retrieve a checkout session\n */\n async retrieve(id: string): Promise<CheckoutSession> {\n return this.request('GET', `/payment/checkout/${id}`);\n }\n}\n\nclass LinksAPI {\n private request: ReturnType<typeof createRequester>;\n\n constructor(config: MoneyMQConfig) {\n this.request = createRequester(config);\n }\n\n /**\n * Create a payment link\n */\n async create(params: PaymentLinkCreateParams): Promise<PaymentLink> {\n return this.request('POST', '/payment/links', {\n ...params,\n expiresAt: params.expiresAt instanceof Date ? params.expiresAt.getTime() : params.expiresAt,\n });\n }\n\n /**\n * Retrieve a payment link\n */\n async retrieve(id: string): Promise<PaymentLink> {\n return this.request('GET', `/payment/links/${id}`);\n }\n\n /**\n * Deactivate a payment link\n */\n async deactivate(id: string): Promise<PaymentLink> {\n return this.request('PUT', `/payment/links/${id}`, { active: false });\n }\n}\n\nclass CustomersAPI {\n private request: ReturnType<typeof createRequester>;\n\n constructor(config: MoneyMQConfig) {\n this.request = createRequester(config);\n }\n\n /**\n * Create a customer\n */\n async create(params: CustomerCreateParams): Promise<Customer> {\n return this.request('POST', '/payment/customers', params);\n }\n\n /**\n * Retrieve a customer\n */\n async retrieve(id: string, options?: { expand?: string[] }): Promise<Customer> {\n const query = options?.expand ? `?expand=${options.expand.join(',')}` : '';\n return this.request('GET', `/payment/customers/${id}${query}`);\n }\n\n /**\n * Update a customer\n */\n async update(id: string, params: CustomerUpdateParams): Promise<Customer> {\n return this.request('PUT', `/payment/customers/${id}`, params);\n }\n\n /**\n * List customers\n */\n async list(params?: {\n email?: string;\n limit?: number;\n }): Promise<{ data: Customer[]; hasMore: boolean }> {\n const query = new URLSearchParams();\n if (params?.email) query.set('email', params.email);\n if (params?.limit) query.set('limit', String(params.limit));\n\n const queryString = query.toString();\n return this.request('GET', `/payment/customers${queryString ? `?${queryString}` : ''}`);\n }\n}\n\nclass PayoutsAPI {\n private request: ReturnType<typeof createRequester>;\n\n /** Payout settings */\n public readonly settings: PayoutSettingsAPI;\n\n constructor(config: MoneyMQConfig) {\n this.request = createRequester(config);\n this.settings = new PayoutSettingsAPI(config);\n }\n\n /**\n * Create a manual payout\n */\n async create(params: PayoutCreateParams): Promise<Payout> {\n return this.request('POST', '/payment/payouts', params);\n }\n\n /**\n * Retrieve a payout\n */\n async retrieve(id: string): Promise<Payout> {\n return this.request('GET', `/payment/payouts/${id}`);\n }\n\n /**\n * List payouts\n */\n async list(params?: PayoutListParams): Promise<{ data: Payout[]; hasMore: boolean }> {\n const query = new URLSearchParams();\n if (params?.status) query.set('status', params.status);\n if (params?.limit) query.set('limit', String(params.limit));\n if (params?.startingAfter) query.set('starting_after', params.startingAfter);\n\n const queryString = query.toString();\n return this.request('GET', `/payment/payouts${queryString ? `?${queryString}` : ''}`);\n }\n}\n\nclass PayoutSettingsAPI {\n private request: ReturnType<typeof createRequester>;\n\n constructor(config: MoneyMQConfig) {\n this.request = createRequester(config);\n }\n\n /**\n * Get payout settings\n */\n async retrieve(): Promise<PayoutSettings> {\n return this.request('GET', '/payment/payouts/settings');\n }\n\n /**\n * Update payout settings\n */\n async update(params: PayoutSettingsUpdateParams): Promise<PayoutSettings> {\n return this.request('PUT', '/payment/payouts/settings', params);\n }\n}\n\nclass WebhooksAPI {\n private request: ReturnType<typeof createRequester>;\n\n constructor(config: MoneyMQConfig) {\n this.request = createRequester(config);\n }\n\n /**\n * Trigger a test webhook event (for testing)\n */\n async trigger(event: string, data: Record<string, unknown>): Promise<{ success: boolean }> {\n return this.request('POST', '/payment/webhooks/test', { event, data });\n }\n}\n\n/**\n * Payment API for checkout, links, customers, and payouts\n */\nexport class PaymentAPI {\n private request: ReturnType<typeof createRequester>;\n\n /** Checkout sessions API */\n public readonly checkout: CheckoutAPI;\n\n /** Payment links API */\n public readonly links: LinksAPI;\n\n /** Customers API */\n public readonly customers: CustomersAPI;\n\n /** Payouts API */\n public readonly payouts: PayoutsAPI;\n\n /** Webhooks API */\n public readonly webhooks: WebhooksAPI;\n\n constructor(config: MoneyMQConfig) {\n this.request = createRequester(config);\n this.checkout = new CheckoutAPI(config);\n this.links = new LinksAPI(config);\n this.customers = new CustomersAPI(config);\n this.payouts = new PayoutsAPI(config);\n this.webhooks = new WebhooksAPI(config);\n }\n\n /**\n * Retrieve a payment by ID\n */\n async retrieve(id: string): Promise<Payment> {\n return this.request('GET', `/payment/${id}`);\n }\n\n /**\n * List payments\n */\n async list(params?: PaymentListParams): Promise<{ data: Payment[]; hasMore: boolean }> {\n const query = new URLSearchParams();\n if (params?.customerId) query.set('customer', params.customerId);\n if (params?.status) query.set('status', params.status);\n if (params?.limit) query.set('limit', String(params.limit));\n if (params?.startingAfter) query.set('starting_after', params.startingAfter);\n\n const queryString = query.toString();\n return this.request('GET', `/payment${queryString ? `?${queryString}` : ''}`);\n }\n}\n","import { CatalogAPI } from './catalog';\nimport { PaymentAPI } from './payment';\n\n/**\n * Configuration options for the MoneyMQ client\n *\n * @example\n * ```typescript\n * const config: MoneyMQConfig = {\n * url: 'https://api.moneymq.com',\n * secret: 'your-api-secret', // Optional\n * timeout: 30000,\n * };\n * ```\n */\nexport interface MoneyMQConfig {\n /**\n * MoneyMQ API URL\n * @example 'http://localhost:8488' or 'https://api.moneymq.com'\n */\n url: string;\n /**\n * Optional secret key for authenticated requests\n * Used for server-side operations that require authentication\n */\n secret?: string;\n /**\n * Request timeout in milliseconds\n * @default 30000\n */\n timeout?: number;\n}\n\n/**\n * MoneyMQ SDK client for accepting stablecoin payments\n *\n * @example\n * ```typescript\n * import { MoneyMQ } from '@moneymq/sdk';\n *\n * const moneymq = new MoneyMQ({\n * url: process.env.MONEYMQ_URL ?? 'http://localhost:8488',\n * });\n *\n * // Create a product\n * const product = await moneymq.catalog.products.create({\n * name: 'Pro Plan',\n * description: 'Full access to all features',\n * });\n *\n * // Create a checkout session\n * const session = await moneymq.payment.checkout.create({\n * lineItems: [{ price: 'price_xxx', quantity: 1 }],\n * successUrl: 'https://example.com/success',\n * cancelUrl: 'https://example.com/cancel',\n * });\n * ```\n */\nexport class MoneyMQ {\n public readonly config: MoneyMQConfig;\n\n /** Catalog API for products and prices */\n public readonly catalog: CatalogAPI;\n\n /** Payment API for checkout, links, customers, and payouts */\n public readonly payment: PaymentAPI;\n\n constructor(config: MoneyMQConfig) {\n this.config = {\n timeout: 30000,\n ...config,\n };\n\n this.catalog = new CatalogAPI(this.config);\n this.payment = new PaymentAPI(this.config);\n }\n\n /**\n * Make an authenticated request to the MoneyMQ API\n */\n async request<T>(\n method: 'GET' | 'POST' | 'PUT' | 'DELETE',\n path: string,\n body?: unknown,\n ): Promise<T> {\n const url = `${this.config.url}${path}`;\n\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n };\n\n if (this.config.secret) {\n headers['Authorization'] = `Bearer ${this.config.secret}`;\n }\n\n const response = await fetch(url, {\n method,\n headers,\n body: body ? JSON.stringify(body) : undefined,\n signal: AbortSignal.timeout(this.config.timeout!),\n });\n\n if (!response.ok) {\n const errorData = (await response.json().catch(() => ({}))) as { message?: string };\n throw new MoneyMQError(\n errorData.message || `Request failed with status ${response.status}`,\n response.status,\n errorData,\n );\n }\n\n return response.json() as Promise<T>;\n }\n}\n\n/**\n * MoneyMQ API error\n */\nexport class MoneyMQError extends Error {\n constructor(\n message: string,\n public readonly statusCode: number,\n public readonly raw?: unknown,\n ) {\n super(message);\n this.name = 'MoneyMQError';\n }\n}\n","/**\n * MoneyMQ server configuration returned from /config endpoint\n */\nexport interface ServerConfig {\n account: {\n name: string;\n description: string;\n };\n x402: {\n payoutAccount: {\n currency: string;\n decimals: number;\n address: string;\n tokenAddress: string;\n };\n facilitator: {\n operatorAccount: {\n out: string;\n in: {\n currency: string;\n decimals: number;\n address: string;\n tokenAddress: string;\n };\n };\n url: string;\n };\n validator: {\n network: string;\n rpcUrl: string;\n bindHost: string;\n rpcPort: number;\n wsPort: number;\n };\n };\n}\n\n/**\n * Fetch server configuration from MoneyMQ API\n *\n * @param apiUrl - The MoneyMQ API URL\n * @returns Server configuration including RPC URL\n *\n * @example\n * ```typescript\n * const config = await fetchConfig('http://localhost:8488');\n * console.log(config.x402.validator.rpcUrl);\n * ```\n */\nexport async function fetchConfig(apiUrl: string): Promise<ServerConfig> {\n const response = await fetch(`${apiUrl}/config`);\n if (!response.ok) {\n throw new Error(`Failed to fetch config: ${response.status}`);\n }\n return response.json() as Promise<ServerConfig>;\n}\n\n/**\n * Get the Solana RPC URL from server config\n *\n * @param apiUrl - The MoneyMQ API URL\n * @param fallback - Fallback RPC URL if fetch fails\n * @returns RPC URL string\n */\nexport async function getRpcUrl(\n apiUrl: string,\n fallback = 'https://api.devnet.solana.com'\n): Promise<string> {\n try {\n const config = await fetchConfig(apiUrl);\n return config.x402.validator.rpcUrl || fallback;\n } catch {\n return fallback;\n }\n}\n"],"mappings":";AAwDA,IAAM,cAAN,MAAkB;AAAA,EAChB,YAAoB,QAAuB;AAAvB;AAAA,EAAwB;AAAA,EAE5C,MAAc,QAAW,QAAgB,MAAc,MAA4B;AACjF,UAAM,MAAM,GAAG,KAAK,OAAO,GAAG,GAAG,IAAI;AACrC,UAAM,UAAkC,EAAE,gBAAgB,mBAAmB;AAC7E,QAAI,KAAK,OAAO,OAAQ,SAAQ,eAAe,IAAI,UAAU,KAAK,OAAO,MAAM;AAE/E,UAAM,WAAW,MAAM,MAAM,KAAK;AAAA,MAChC;AAAA,MACA;AAAA,MACA,MAAM,OAAO,KAAK,UAAU,IAAI,IAAI;AAAA,IACtC,CAAC;AAED,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,YAAa,MAAM,SAAS,KAAK,EAAE,MAAM,OAAO,CAAC,EAAE;AACzD,YAAM,IAAI,MAAM,UAAU,WAAW,mBAAmB,SAAS,MAAM,EAAE;AAAA,IAC3E;AAEA,WAAO,SAAS,KAAK;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,OAAO,QAA+C;AAC1D,WAAO,KAAK,QAAQ,QAAQ,gBAAgB,MAAM;AAAA,EACpD;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,SAAS,IAA8B;AAC3C,WAAO,KAAK,QAAQ,OAAO,gBAAgB,EAAE,EAAE;AAAA,EACjD;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,KAAK,QAA4E;AACrF,UAAM,QAAQ,IAAI,gBAAgB;AAClC,QAAI,QAAQ,WAAW,OAAW,OAAM,IAAI,UAAU,OAAO,OAAO,MAAM,CAAC;AAC3E,QAAI,QAAQ,MAAO,OAAM,IAAI,SAAS,OAAO,OAAO,KAAK,CAAC;AAC1D,QAAI,QAAQ,cAAe,OAAM,IAAI,kBAAkB,OAAO,aAAa;AAE3E,UAAM,cAAc,MAAM,SAAS;AACnC,WAAO,KAAK,QAAQ,OAAO,eAAe,cAAc,IAAI,WAAW,KAAK,EAAE,EAAE;AAAA,EAClF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,OAAO,IAAY,QAAwD;AAC/E,WAAO,KAAK,QAAQ,OAAO,gBAAgB,EAAE,IAAI,MAAM;AAAA,EACzD;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,OAAO,IAA2C;AACtD,WAAO,KAAK,QAAQ,UAAU,gBAAgB,EAAE,EAAE;AAAA,EACpD;AACF;AAEA,IAAM,YAAN,MAAgB;AAAA,EACd,YAAoB,QAAuB;AAAvB;AAAA,EAAwB;AAAA,EAE5C,MAAc,QAAW,QAAgB,MAAc,MAA4B;AACjF,UAAM,MAAM,GAAG,KAAK,OAAO,GAAG,GAAG,IAAI;AACrC,UAAM,UAAkC,EAAE,gBAAgB,mBAAmB;AAC7E,QAAI,KAAK,OAAO,OAAQ,SAAQ,eAAe,IAAI,UAAU,KAAK,OAAO,MAAM;AAE/E,UAAM,WAAW,MAAM,MAAM,KAAK;AAAA,MAChC;AAAA,MACA;AAAA,MACA,MAAM,OAAO,KAAK,UAAU,IAAI,IAAI;AAAA,IACtC,CAAC;AAED,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,YAAa,MAAM,SAAS,KAAK,EAAE,MAAM,OAAO,CAAC,EAAE;AACzD,YAAM,IAAI,MAAM,UAAU,WAAW,mBAAmB,SAAS,MAAM,EAAE;AAAA,IAC3E;AAEA,WAAO,SAAS,KAAK;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,OAAO,QAA2C;AACtD,WAAO,KAAK,QAAQ,QAAQ,cAAc,MAAM;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,SAAS,IAA4B;AACzC,WAAO,KAAK,QAAQ,OAAO,cAAc,EAAE,EAAE;AAAA,EAC/C;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,KAAK,QAIsC;AAC/C,UAAM,QAAQ,IAAI,gBAAgB;AAClC,QAAI,QAAQ,QAAS,OAAM,IAAI,WAAW,OAAO,OAAO;AACxD,QAAI,QAAQ,WAAW,OAAW,OAAM,IAAI,UAAU,OAAO,OAAO,MAAM,CAAC;AAC3E,QAAI,QAAQ,MAAO,OAAM,IAAI,SAAS,OAAO,OAAO,KAAK,CAAC;AAE1D,UAAM,cAAc,MAAM,SAAS;AACnC,WAAO,KAAK,QAAQ,OAAO,aAAa,cAAc,IAAI,WAAW,KAAK,EAAE,EAAE;AAAA,EAChF;AACF;AAKO,IAAM,aAAN,MAAiB;AAAA,EAOtB,YAAY,QAAuB;AACjC,SAAK,WAAW,IAAI,YAAY,MAAM;AACtC,SAAK,SAAS,IAAI,UAAU,MAAM;AAAA,EACpC;AACF;;;AC3DA,SAAS,gBAAgB,QAAuB;AAC9C,SAAO,eAAe,QAAW,QAAgB,MAAc,MAA4B;AACzF,UAAM,MAAM,GAAG,OAAO,GAAG,GAAG,IAAI;AAChC,UAAM,UAAkC,EAAE,gBAAgB,mBAAmB;AAC7E,QAAI,OAAO,OAAQ,SAAQ,eAAe,IAAI,UAAU,OAAO,MAAM;AAErE,UAAM,WAAW,MAAM,MAAM,KAAK;AAAA,MAChC;AAAA,MACA;AAAA,MACA,MAAM,OAAO,KAAK,UAAU,IAAI,IAAI;AAAA,IACtC,CAAC;AAED,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,YAAa,MAAM,SAAS,KAAK,EAAE,MAAM,OAAO,CAAC,EAAE;AACzD,YAAM,IAAI,MAAM,UAAU,WAAW,mBAAmB,SAAS,MAAM,EAAE;AAAA,IAC3E;AAEA,WAAO,SAAS,KAAK;AAAA,EACvB;AACF;AAGA,IAAM,cAAN,MAAkB;AAAA,EAGhB,YAAY,QAAuB;AACjC,SAAK,UAAU,gBAAgB,MAAM;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,OAAO,QAAwD;AACnE,WAAO,KAAK,QAAQ,QAAQ,qBAAqB,MAAM;AAAA,EACzD;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,SAAS,IAAsC;AACnD,WAAO,KAAK,QAAQ,OAAO,qBAAqB,EAAE,EAAE;AAAA,EACtD;AACF;AAEA,IAAM,WAAN,MAAe;AAAA,EAGb,YAAY,QAAuB;AACjC,SAAK,UAAU,gBAAgB,MAAM;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,OAAO,QAAuD;AAClE,WAAO,KAAK,QAAQ,QAAQ,kBAAkB;AAAA,MAC5C,GAAG;AAAA,MACH,WAAW,OAAO,qBAAqB,OAAO,OAAO,UAAU,QAAQ,IAAI,OAAO;AAAA,IACpF,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,SAAS,IAAkC;AAC/C,WAAO,KAAK,QAAQ,OAAO,kBAAkB,EAAE,EAAE;AAAA,EACnD;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,WAAW,IAAkC;AACjD,WAAO,KAAK,QAAQ,OAAO,kBAAkB,EAAE,IAAI,EAAE,QAAQ,MAAM,CAAC;AAAA,EACtE;AACF;AAEA,IAAM,eAAN,MAAmB;AAAA,EAGjB,YAAY,QAAuB;AACjC,SAAK,UAAU,gBAAgB,MAAM;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,OAAO,QAAiD;AAC5D,WAAO,KAAK,QAAQ,QAAQ,sBAAsB,MAAM;AAAA,EAC1D;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,SAAS,IAAY,SAAoD;AAC7E,UAAM,QAAQ,SAAS,SAAS,WAAW,QAAQ,OAAO,KAAK,GAAG,CAAC,KAAK;AACxE,WAAO,KAAK,QAAQ,OAAO,sBAAsB,EAAE,GAAG,KAAK,EAAE;AAAA,EAC/D;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,OAAO,IAAY,QAAiD;AACxE,WAAO,KAAK,QAAQ,OAAO,sBAAsB,EAAE,IAAI,MAAM;AAAA,EAC/D;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,KAAK,QAGyC;AAClD,UAAM,QAAQ,IAAI,gBAAgB;AAClC,QAAI,QAAQ,MAAO,OAAM,IAAI,SAAS,OAAO,KAAK;AAClD,QAAI,QAAQ,MAAO,OAAM,IAAI,SAAS,OAAO,OAAO,KAAK,CAAC;AAE1D,UAAM,cAAc,MAAM,SAAS;AACnC,WAAO,KAAK,QAAQ,OAAO,qBAAqB,cAAc,IAAI,WAAW,KAAK,EAAE,EAAE;AAAA,EACxF;AACF;AAEA,IAAM,aAAN,MAAiB;AAAA,EAMf,YAAY,QAAuB;AACjC,SAAK,UAAU,gBAAgB,MAAM;AACrC,SAAK,WAAW,IAAI,kBAAkB,MAAM;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,OAAO,QAA6C;AACxD,WAAO,KAAK,QAAQ,QAAQ,oBAAoB,MAAM;AAAA,EACxD;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,SAAS,IAA6B;AAC1C,WAAO,KAAK,QAAQ,OAAO,oBAAoB,EAAE,EAAE;AAAA,EACrD;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,KAAK,QAA0E;AACnF,UAAM,QAAQ,IAAI,gBAAgB;AAClC,QAAI,QAAQ,OAAQ,OAAM,IAAI,UAAU,OAAO,MAAM;AACrD,QAAI,QAAQ,MAAO,OAAM,IAAI,SAAS,OAAO,OAAO,KAAK,CAAC;AAC1D,QAAI,QAAQ,cAAe,OAAM,IAAI,kBAAkB,OAAO,aAAa;AAE3E,UAAM,cAAc,MAAM,SAAS;AACnC,WAAO,KAAK,QAAQ,OAAO,mBAAmB,cAAc,IAAI,WAAW,KAAK,EAAE,EAAE;AAAA,EACtF;AACF;AAEA,IAAM,oBAAN,MAAwB;AAAA,EAGtB,YAAY,QAAuB;AACjC,SAAK,UAAU,gBAAgB,MAAM;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,WAAoC;AACxC,WAAO,KAAK,QAAQ,OAAO,2BAA2B;AAAA,EACxD;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,OAAO,QAA6D;AACxE,WAAO,KAAK,QAAQ,OAAO,6BAA6B,MAAM;AAAA,EAChE;AACF;AAEA,IAAM,cAAN,MAAkB;AAAA,EAGhB,YAAY,QAAuB;AACjC,SAAK,UAAU,gBAAgB,MAAM;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,QAAQ,OAAe,MAA8D;AACzF,WAAO,KAAK,QAAQ,QAAQ,0BAA0B,EAAE,OAAO,KAAK,CAAC;AAAA,EACvE;AACF;AAKO,IAAM,aAAN,MAAiB;AAAA,EAkBtB,YAAY,QAAuB;AACjC,SAAK,UAAU,gBAAgB,MAAM;AACrC,SAAK,WAAW,IAAI,YAAY,MAAM;AACtC,SAAK,QAAQ,IAAI,SAAS,MAAM;AAChC,SAAK,YAAY,IAAI,aAAa,MAAM;AACxC,SAAK,UAAU,IAAI,WAAW,MAAM;AACpC,SAAK,WAAW,IAAI,YAAY,MAAM;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,SAAS,IAA8B;AAC3C,WAAO,KAAK,QAAQ,OAAO,YAAY,EAAE,EAAE;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,KAAK,QAA4E;AACrF,UAAM,QAAQ,IAAI,gBAAgB;AAClC,QAAI,QAAQ,WAAY,OAAM,IAAI,YAAY,OAAO,UAAU;AAC/D,QAAI,QAAQ,OAAQ,OAAM,IAAI,UAAU,OAAO,MAAM;AACrD,QAAI,QAAQ,MAAO,OAAM,IAAI,SAAS,OAAO,OAAO,KAAK,CAAC;AAC1D,QAAI,QAAQ,cAAe,OAAM,IAAI,kBAAkB,OAAO,aAAa;AAE3E,UAAM,cAAc,MAAM,SAAS;AACnC,WAAO,KAAK,QAAQ,OAAO,WAAW,cAAc,IAAI,WAAW,KAAK,EAAE,EAAE;AAAA,EAC9E;AACF;;;AC9TO,IAAM,UAAN,MAAc;AAAA,EASnB,YAAY,QAAuB;AACjC,SAAK,SAAS;AAAA,MACZ,SAAS;AAAA,MACT,GAAG;AAAA,IACL;AAEA,SAAK,UAAU,IAAI,WAAW,KAAK,MAAM;AACzC,SAAK,UAAU,IAAI,WAAW,KAAK,MAAM;AAAA,EAC3C;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,QACJ,QACA,MACA,MACY;AACZ,UAAM,MAAM,GAAG,KAAK,OAAO,GAAG,GAAG,IAAI;AAErC,UAAM,UAAkC;AAAA,MACtC,gBAAgB;AAAA,IAClB;AAEA,QAAI,KAAK,OAAO,QAAQ;AACtB,cAAQ,eAAe,IAAI,UAAU,KAAK,OAAO,MAAM;AAAA,IACzD;AAEA,UAAM,WAAW,MAAM,MAAM,KAAK;AAAA,MAChC;AAAA,MACA;AAAA,MACA,MAAM,OAAO,KAAK,UAAU,IAAI,IAAI;AAAA,MACpC,QAAQ,YAAY,QAAQ,KAAK,OAAO,OAAQ;AAAA,IAClD,CAAC;AAED,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,YAAa,MAAM,SAAS,KAAK,EAAE,MAAM,OAAO,CAAC,EAAE;AACzD,YAAM,IAAI;AAAA,QACR,UAAU,WAAW,8BAA8B,SAAS,MAAM;AAAA,QAClE,SAAS;AAAA,QACT;AAAA,MACF;AAAA,IACF;AAEA,WAAO,SAAS,KAAK;AAAA,EACvB;AACF;AAKO,IAAM,eAAN,cAA2B,MAAM;AAAA,EACtC,YACE,SACgB,YACA,KAChB;AACA,UAAM,OAAO;AAHG;AACA;AAGhB,SAAK,OAAO;AAAA,EACd;AACF;;;AC9EA,eAAsB,YAAY,QAAuC;AACvE,QAAM,WAAW,MAAM,MAAM,GAAG,MAAM,SAAS;AAC/C,MAAI,CAAC,SAAS,IAAI;AAChB,UAAM,IAAI,MAAM,2BAA2B,SAAS,MAAM,EAAE;AAAA,EAC9D;AACA,SAAO,SAAS,KAAK;AACvB;AASA,eAAsB,UACpB,QACA,WAAW,iCACM;AACjB,MAAI;AACF,UAAM,SAAS,MAAM,YAAY,MAAM;AACvC,WAAO,OAAO,KAAK,UAAU,UAAU;AAAA,EACzC,QAAQ;AACN,WAAO;AAAA,EACT;AACF;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/catalog.ts","../src/payment.ts","../src/client.ts","../src/config.ts"],"sourcesContent":["import type { MoneyMQConfig } from './client';\n\n// Types\nexport interface Product {\n id: string;\n object: 'product';\n name: string;\n description?: string;\n active: boolean;\n metadata?: Record<string, string>;\n created: number;\n updated: number;\n}\n\nexport interface ProductCreateParams {\n name: string;\n description?: string;\n active?: boolean;\n metadata?: Record<string, string>;\n}\n\nexport interface ProductListParams {\n active?: boolean;\n limit?: number;\n startingAfter?: string;\n}\n\nexport interface Price {\n id: string;\n object: 'price';\n product: string;\n currency: string;\n amount: number;\n type: 'one_time' | 'recurring';\n recurring?: {\n interval: 'day' | 'week' | 'month' | 'year';\n intervalCount: number;\n };\n active: boolean;\n metadata?: Record<string, string>;\n created: number;\n}\n\nexport interface PriceCreateParams {\n product: string;\n currency: string;\n amount: number;\n type: 'one_time' | 'recurring';\n recurring?: {\n interval: 'day' | 'week' | 'month' | 'year';\n intervalCount?: number;\n };\n metadata?: Record<string, string>;\n}\n\n// API Classes\nclass ProductsAPI {\n constructor(private config: MoneyMQConfig) {}\n\n private async request<T>(method: string, path: string, body?: unknown): Promise<T> {\n const url = `${this.config.endpoint}${path}`;\n const headers: Record<string, string> = { 'Content-Type': 'application/json' };\n if (this.config.secret) headers['Authorization'] = `Bearer ${this.config.secret}`;\n\n const response = await fetch(url, {\n method,\n headers,\n body: body ? JSON.stringify(body) : undefined,\n });\n\n if (!response.ok) {\n const errorData = (await response.json().catch(() => ({}))) as { message?: string };\n throw new Error(errorData.message || `Request failed: ${response.status}`);\n }\n\n return response.json() as Promise<T>;\n }\n\n /**\n * Create a new product\n */\n async create(params: ProductCreateParams): Promise<Product> {\n return this.request('POST', '/catalog/v1/products', params);\n }\n\n /**\n * Retrieve a product by ID\n */\n async retrieve(id: string): Promise<Product> {\n return this.request('GET', `/catalog/v1/products/${id}`);\n }\n\n /**\n * List all products\n */\n async list(params?: ProductListParams): Promise<{ data: Product[]; hasMore: boolean }> {\n const query = new URLSearchParams();\n if (params?.active !== undefined) query.set('active', String(params.active));\n if (params?.limit) query.set('limit', String(params.limit));\n if (params?.startingAfter) query.set('starting_after', params.startingAfter);\n\n const queryString = query.toString();\n return this.request('GET', `/catalog/v1/products${queryString ? `?${queryString}` : ''}`);\n }\n\n /**\n * Update a product\n */\n async update(id: string, params: Partial<ProductCreateParams>): Promise<Product> {\n return this.request('PUT', `/catalog/v1/products/${id}`, params);\n }\n\n /**\n * Delete a product\n */\n async delete(id: string): Promise<{ deleted: boolean }> {\n return this.request('DELETE', `/catalog/v1/products/${id}`);\n }\n}\n\nclass PricesAPI {\n constructor(private config: MoneyMQConfig) {}\n\n private async request<T>(method: string, path: string, body?: unknown): Promise<T> {\n const url = `${this.config.endpoint}${path}`;\n const headers: Record<string, string> = { 'Content-Type': 'application/json' };\n if (this.config.secret) headers['Authorization'] = `Bearer ${this.config.secret}`;\n\n const response = await fetch(url, {\n method,\n headers,\n body: body ? JSON.stringify(body) : undefined,\n });\n\n if (!response.ok) {\n const errorData = (await response.json().catch(() => ({}))) as { message?: string };\n throw new Error(errorData.message || `Request failed: ${response.status}`);\n }\n\n return response.json() as Promise<T>;\n }\n\n /**\n * Create a new price\n */\n async create(params: PriceCreateParams): Promise<Price> {\n return this.request('POST', '/catalog/v1/prices', params);\n }\n\n /**\n * Retrieve a price by ID\n */\n async retrieve(id: string): Promise<Price> {\n return this.request('GET', `/catalog/v1/prices/${id}`);\n }\n\n /**\n * List all prices\n */\n async list(params?: {\n product?: string;\n active?: boolean;\n limit?: number;\n }): Promise<{ data: Price[]; hasMore: boolean }> {\n const query = new URLSearchParams();\n if (params?.product) query.set('product', params.product);\n if (params?.active !== undefined) query.set('active', String(params.active));\n if (params?.limit) query.set('limit', String(params.limit));\n\n const queryString = query.toString();\n return this.request('GET', `/catalog/v1/prices${queryString ? `?${queryString}` : ''}`);\n }\n}\n\n/**\n * Catalog API for managing products and prices\n */\nexport class CatalogAPI {\n /** Products API */\n public readonly products: ProductsAPI;\n\n /** Prices API */\n public readonly prices: PricesAPI;\n\n constructor(config: MoneyMQConfig) {\n this.products = new ProductsAPI(config);\n this.prices = new PricesAPI(config);\n }\n}\n","import type { MoneyMQConfig } from './client';\n\n// Types\nexport interface LineItem {\n price: string;\n quantity: number;\n}\n\nexport interface CheckoutSession {\n id: string;\n object: 'checkout.session';\n url: string;\n status: 'open' | 'complete' | 'expired';\n paymentStatus: 'unpaid' | 'paid';\n customer?: string;\n lineItems: LineItem[];\n successUrl: string;\n cancelUrl: string;\n expiresAt: number;\n created: number;\n}\n\nexport interface CheckoutCreateParams {\n lineItems: LineItem[];\n successUrl: string;\n cancelUrl: string;\n customerEmail?: string;\n customer?: string;\n metadata?: Record<string, string>;\n}\n\nexport interface PaymentLink {\n id: string;\n object: 'payment_link';\n url: string;\n active: boolean;\n lineItems: LineItem[];\n expiresAt?: number;\n created: number;\n}\n\nexport interface PaymentLinkCreateParams {\n lineItems: LineItem[];\n expiresAt?: Date | number;\n metadata?: Record<string, string>;\n}\n\nexport interface Payment {\n id: string;\n object: 'payment';\n amount: number;\n currency: string;\n status: 'completed' | 'pending' | 'failed';\n customer?: string;\n checkout?: string;\n signature?: string;\n metadata?: Record<string, string>;\n created: number;\n}\n\nexport interface PaymentListParams {\n customerId?: string;\n status?: 'completed' | 'pending' | 'failed';\n limit?: number;\n startingAfter?: string;\n}\n\nexport interface Customer {\n id: string;\n object: 'customer';\n email: string;\n name?: string;\n metadata?: Record<string, string>;\n subscriptions?: unknown[];\n payments?: Payment[];\n created: number;\n}\n\nexport interface CustomerCreateParams {\n email: string;\n name?: string;\n metadata?: Record<string, string>;\n}\n\nexport interface CustomerUpdateParams {\n email?: string;\n name?: string;\n metadata?: Record<string, string>;\n}\n\nexport interface Payout {\n id: string;\n object: 'payout';\n amount: number;\n currency: string;\n status: 'pending' | 'completed' | 'failed';\n destination: string;\n created: number;\n}\n\nexport interface PayoutCreateParams {\n amount: number;\n currency: string;\n destination: string;\n}\n\nexport interface PayoutListParams {\n status?: 'pending' | 'completed' | 'failed';\n limit?: number;\n startingAfter?: string;\n}\n\nexport interface PayoutSettings {\n destination: {\n type: 'wallet';\n address: string;\n currency: string;\n };\n schedule: 'instant' | 'daily' | 'weekly' | 'monthly';\n minimumAmount?: number;\n}\n\nexport interface PayoutSettingsUpdateParams {\n destination?: PayoutSettings['destination'];\n schedule?: PayoutSettings['schedule'];\n minimumAmount?: number;\n}\n\n// Helper for making requests\nfunction createRequester(config: MoneyMQConfig) {\n return async function request<T>(method: string, path: string, body?: unknown): Promise<T> {\n const url = `${config.endpoint}${path}`;\n const headers: Record<string, string> = { 'Content-Type': 'application/json' };\n if (config.secret) headers['Authorization'] = `Bearer ${config.secret}`;\n\n const response = await fetch(url, {\n method,\n headers,\n body: body ? JSON.stringify(body) : undefined,\n });\n\n if (!response.ok) {\n const errorData = (await response.json().catch(() => ({}))) as { message?: string };\n throw new Error(errorData.message || `Request failed: ${response.status}`);\n }\n\n return response.json() as Promise<T>;\n };\n}\n\n// API Classes\nclass CheckoutAPI {\n private request: ReturnType<typeof createRequester>;\n\n constructor(config: MoneyMQConfig) {\n this.request = createRequester(config);\n }\n\n /**\n * Create a checkout session\n */\n async create(params: CheckoutCreateParams): Promise<CheckoutSession> {\n return this.request('POST', '/payment/v1/checkout', params);\n }\n\n /**\n * Retrieve a checkout session\n */\n async retrieve(id: string): Promise<CheckoutSession> {\n return this.request('GET', `/payment/v1/checkout/${id}`);\n }\n}\n\nclass LinksAPI {\n private request: ReturnType<typeof createRequester>;\n\n constructor(config: MoneyMQConfig) {\n this.request = createRequester(config);\n }\n\n /**\n * Create a payment link\n */\n async create(params: PaymentLinkCreateParams): Promise<PaymentLink> {\n return this.request('POST', '/payment/v1/links', {\n ...params,\n expiresAt: params.expiresAt instanceof Date ? params.expiresAt.getTime() : params.expiresAt,\n });\n }\n\n /**\n * Retrieve a payment link\n */\n async retrieve(id: string): Promise<PaymentLink> {\n return this.request('GET', `/payment/v1/links/${id}`);\n }\n\n /**\n * Deactivate a payment link\n */\n async deactivate(id: string): Promise<PaymentLink> {\n return this.request('PUT', `/payment/v1/links/${id}`, { active: false });\n }\n}\n\nclass CustomersAPI {\n private request: ReturnType<typeof createRequester>;\n\n constructor(config: MoneyMQConfig) {\n this.request = createRequester(config);\n }\n\n /**\n * Create a customer\n */\n async create(params: CustomerCreateParams): Promise<Customer> {\n return this.request('POST', '/payment/v1/customers', params);\n }\n\n /**\n * Retrieve a customer\n */\n async retrieve(id: string, options?: { expand?: string[] }): Promise<Customer> {\n const query = options?.expand ? `?expand=${options.expand.join(',')}` : '';\n return this.request('GET', `/payment/v1/customers/${id}${query}`);\n }\n\n /**\n * Update a customer\n */\n async update(id: string, params: CustomerUpdateParams): Promise<Customer> {\n return this.request('PUT', `/payment/v1/customers/${id}`, params);\n }\n\n /**\n * List customers\n */\n async list(params?: {\n email?: string;\n limit?: number;\n }): Promise<{ data: Customer[]; hasMore: boolean }> {\n const query = new URLSearchParams();\n if (params?.email) query.set('email', params.email);\n if (params?.limit) query.set('limit', String(params.limit));\n\n const queryString = query.toString();\n return this.request('GET', `/payment/v1/customers${queryString ? `?${queryString}` : ''}`);\n }\n}\n\nclass PayoutsAPI {\n private request: ReturnType<typeof createRequester>;\n\n /** Payout settings */\n public readonly settings: PayoutSettingsAPI;\n\n constructor(config: MoneyMQConfig) {\n this.request = createRequester(config);\n this.settings = new PayoutSettingsAPI(config);\n }\n\n /**\n * Create a manual payout\n */\n async create(params: PayoutCreateParams): Promise<Payout> {\n return this.request('POST', '/payment/v1/payouts', params);\n }\n\n /**\n * Retrieve a payout\n */\n async retrieve(id: string): Promise<Payout> {\n return this.request('GET', `/payment/v1/payouts/${id}`);\n }\n\n /**\n * List payouts\n */\n async list(params?: PayoutListParams): Promise<{ data: Payout[]; hasMore: boolean }> {\n const query = new URLSearchParams();\n if (params?.status) query.set('status', params.status);\n if (params?.limit) query.set('limit', String(params.limit));\n if (params?.startingAfter) query.set('starting_after', params.startingAfter);\n\n const queryString = query.toString();\n return this.request('GET', `/payment/v1/payouts${queryString ? `?${queryString}` : ''}`);\n }\n}\n\nclass PayoutSettingsAPI {\n private request: ReturnType<typeof createRequester>;\n\n constructor(config: MoneyMQConfig) {\n this.request = createRequester(config);\n }\n\n /**\n * Get payout settings\n */\n async retrieve(): Promise<PayoutSettings> {\n return this.request('GET', '/payment/v1/payouts/settings');\n }\n\n /**\n * Update payout settings\n */\n async update(params: PayoutSettingsUpdateParams): Promise<PayoutSettings> {\n return this.request('PUT', '/payment/v1/payouts/settings', params);\n }\n}\n\nclass WebhooksAPI {\n private request: ReturnType<typeof createRequester>;\n\n constructor(config: MoneyMQConfig) {\n this.request = createRequester(config);\n }\n\n /**\n * Trigger a test webhook event (for testing)\n */\n async trigger(event: string, data: Record<string, unknown>): Promise<{ success: boolean }> {\n return this.request('POST', '/payment/v1/webhooks/test', { event, data });\n }\n}\n\n/**\n * Payment API for checkout, links, customers, and payouts\n */\nexport class PaymentAPI {\n private request: ReturnType<typeof createRequester>;\n\n /** Checkout sessions API */\n public readonly checkout: CheckoutAPI;\n\n /** Payment links API */\n public readonly links: LinksAPI;\n\n /** Customers API */\n public readonly customers: CustomersAPI;\n\n /** Payouts API */\n public readonly payouts: PayoutsAPI;\n\n /** Webhooks API */\n public readonly webhooks: WebhooksAPI;\n\n constructor(config: MoneyMQConfig) {\n this.request = createRequester(config);\n this.checkout = new CheckoutAPI(config);\n this.links = new LinksAPI(config);\n this.customers = new CustomersAPI(config);\n this.payouts = new PayoutsAPI(config);\n this.webhooks = new WebhooksAPI(config);\n }\n\n /**\n * Retrieve a payment by ID\n */\n async retrieve(id: string): Promise<Payment> {\n return this.request('GET', `/payment/v1/${id}`);\n }\n\n /**\n * List payments\n */\n async list(params?: PaymentListParams): Promise<{ data: Payment[]; hasMore: boolean }> {\n const query = new URLSearchParams();\n if (params?.customerId) query.set('customer', params.customerId);\n if (params?.status) query.set('status', params.status);\n if (params?.limit) query.set('limit', String(params.limit));\n if (params?.startingAfter) query.set('starting_after', params.startingAfter);\n\n const queryString = query.toString();\n return this.request('GET', `/payment/v1${queryString ? `?${queryString}` : ''}`);\n }\n}\n","import { CatalogAPI } from './catalog';\nimport { PaymentAPI } from './payment';\n\n/**\n * Configuration options for the MoneyMQ client\n *\n * @example\n * ```typescript\n * const config: MoneyMQConfig = {\n * endpoint: 'https://api.moneymq.com',\n * secret: 'your-api-secret', // Optional\n * timeout: 30000,\n * };\n * ```\n */\nexport interface MoneyMQConfig {\n /**\n * MoneyMQ API endpoint\n * @example 'http://localhost:8488' or 'https://api.moneymq.com'\n */\n endpoint: string;\n /**\n * Optional secret key for authenticated requests\n * Used for server-side operations that require authentication\n */\n secret?: string;\n /**\n * Request timeout in milliseconds\n * @default 30000\n */\n timeout?: number;\n}\n\n/**\n * MoneyMQ SDK client for accepting stablecoin payments\n *\n * @example\n * ```typescript\n * import { MoneyMQ } from '@moneymq/sdk';\n *\n * const moneymq = new MoneyMQ({\n * endpoint: process.env.MONEYMQ_ENDPOINT ?? 'http://localhost:8488',\n * });\n *\n * // Create a product\n * const product = await moneymq.catalog.products.create({\n * name: 'Pro Plan',\n * description: 'Full access to all features',\n * });\n *\n * // Create a checkout session\n * const session = await moneymq.payment.checkout.create({\n * lineItems: [{ price: 'price_xxx', quantity: 1 }],\n * successUrl: 'https://example.com/success',\n * cancelUrl: 'https://example.com/cancel',\n * });\n * ```\n */\nexport class MoneyMQ {\n public readonly config: MoneyMQConfig;\n\n /** Catalog API for products and prices */\n public readonly catalog: CatalogAPI;\n\n /** Payment API for checkout, links, customers, and payouts */\n public readonly payment: PaymentAPI;\n\n constructor(config: MoneyMQConfig) {\n this.config = {\n timeout: 30000,\n ...config,\n };\n\n this.catalog = new CatalogAPI(this.config);\n this.payment = new PaymentAPI(this.config);\n }\n\n /**\n * Make an authenticated request to the MoneyMQ API\n */\n async request<T>(\n method: 'GET' | 'POST' | 'PUT' | 'DELETE',\n path: string,\n body?: unknown,\n ): Promise<T> {\n const url = `${this.config.endpoint}${path}`;\n\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n };\n\n if (this.config.secret) {\n headers['Authorization'] = `Bearer ${this.config.secret}`;\n }\n\n const response = await fetch(url, {\n method,\n headers,\n body: body ? JSON.stringify(body) : undefined,\n signal: AbortSignal.timeout(this.config.timeout!),\n });\n\n if (!response.ok) {\n const errorData = (await response.json().catch(() => ({}))) as { message?: string };\n throw new MoneyMQError(\n errorData.message || `Request failed with status ${response.status}`,\n response.status,\n errorData,\n );\n }\n\n return response.json() as Promise<T>;\n }\n}\n\n/**\n * MoneyMQ API error\n */\nexport class MoneyMQError extends Error {\n constructor(\n message: string,\n public readonly statusCode: number,\n public readonly raw?: unknown,\n ) {\n super(message);\n this.name = 'MoneyMQError';\n }\n}\n","/**\n * MoneyMQ server configuration returned from /config endpoint\n */\nexport interface ServerConfig {\n account: {\n name: string;\n description: string;\n };\n x402: {\n payoutAccount: {\n currency: string;\n decimals: number;\n address: string;\n tokenAddress: string;\n };\n facilitator: {\n operatorAccount: {\n out: string;\n in: {\n currency: string;\n decimals: number;\n address: string;\n tokenAddress: string;\n };\n };\n url: string;\n };\n validator: {\n network: string;\n rpcUrl: string;\n bindHost: string;\n rpcPort: number;\n wsPort: number;\n };\n };\n}\n\n/**\n * Fetch server configuration from MoneyMQ API\n *\n * @param apiUrl - The MoneyMQ API URL\n * @returns Server configuration including RPC URL\n *\n * @example\n * ```typescript\n * const config = await fetchConfig('http://localhost:8488');\n * console.log(config.x402.validator.rpcUrl);\n * ```\n */\nexport async function fetchConfig(apiUrl: string): Promise<ServerConfig> {\n const response = await fetch(`${apiUrl}/config`);\n if (!response.ok) {\n throw new Error(`Failed to fetch config: ${response.status}`);\n }\n return response.json() as Promise<ServerConfig>;\n}\n\n/**\n * Get the Solana RPC URL from server config\n *\n * @param apiUrl - The MoneyMQ API URL\n * @param fallback - Fallback RPC URL if fetch fails\n * @returns RPC URL string\n */\nexport async function getRpcUrl(\n apiUrl: string,\n fallback = 'https://api.devnet.solana.com'\n): Promise<string> {\n try {\n const config = await fetchConfig(apiUrl);\n return config.x402.validator.rpcUrl || fallback;\n } catch {\n return fallback;\n }\n}\n"],"mappings":"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","names":[]}
|