@moneymq/sdk 0.1.0 → 0.1.2

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 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
- url: 'http://localhost:8488',
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 URL
51
- url: 'http://localhost:8488',
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
- * url: 'https://api.moneymq.com',
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 URL
365
+ * MoneyMQ API endpoint
366
366
  * @example 'http://localhost:8488' or 'https://api.moneymq.com'
367
367
  */
368
- url: string;
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
- * url: process.env.MONEYMQ_URL ?? 'http://localhost:8488',
388
+ * endpoint: process.env.MONEYMQ_ENDPOINT ?? 'http://localhost:8488',
389
389
  * });
390
390
  *
391
391
  * // Create a product
@@ -403,7 +403,7 @@ interface MoneyMQConfig {
403
403
  * ```
404
404
  */
405
405
  declare class MoneyMQ {
406
- private config;
406
+ readonly config: MoneyMQConfig;
407
407
  /** Catalog API for products and prices */
408
408
  readonly catalog: CatalogAPI;
409
409
  /** Payment API for checkout, links, customers, and payouts */
@@ -415,4 +415,62 @@ declare class MoneyMQ {
415
415
  request<T>(method: 'GET' | 'POST' | 'PUT' | 'DELETE', path: string, body?: unknown): Promise<T>;
416
416
  }
417
417
 
418
- export { type CheckoutCreateParams, type CheckoutSession, type Customer, type CustomerCreateParams, type CustomerUpdateParams, MoneyMQ, type MoneyMQConfig, type Payment, type PaymentLink, type PaymentLinkCreateParams, type PaymentListParams, type Payout, type PayoutCreateParams, type PayoutListParams, type PayoutSettings, type PayoutSettingsUpdateParams, type Price, type PriceCreateParams, type Product, type ProductCreateParams, type ProductListParams };
418
+ /**
419
+ * MoneyMQ server configuration returned from /config endpoint
420
+ */
421
+ interface ServerConfig {
422
+ account: {
423
+ name: string;
424
+ description: string;
425
+ };
426
+ x402: {
427
+ payoutAccount: {
428
+ currency: string;
429
+ decimals: number;
430
+ address: string;
431
+ tokenAddress: string;
432
+ };
433
+ facilitator: {
434
+ operatorAccount: {
435
+ out: string;
436
+ in: {
437
+ currency: string;
438
+ decimals: number;
439
+ address: string;
440
+ tokenAddress: string;
441
+ };
442
+ };
443
+ url: string;
444
+ };
445
+ validator: {
446
+ network: string;
447
+ rpcUrl: string;
448
+ bindHost: string;
449
+ rpcPort: number;
450
+ wsPort: number;
451
+ };
452
+ };
453
+ }
454
+ /**
455
+ * Fetch server configuration from MoneyMQ API
456
+ *
457
+ * @param apiUrl - The MoneyMQ API URL
458
+ * @returns Server configuration including RPC URL
459
+ *
460
+ * @example
461
+ * ```typescript
462
+ * const config = await fetchConfig('http://localhost:8488');
463
+ * console.log(config.x402.validator.rpcUrl);
464
+ * ```
465
+ */
466
+ declare function fetchConfig(apiUrl: string): Promise<ServerConfig>;
467
+ /**
468
+ * Get the Solana RPC URL from server config
469
+ *
470
+ * @param apiUrl - The MoneyMQ API URL
471
+ * @param fallback - Fallback RPC URL if fetch fails
472
+ * @returns RPC URL string
473
+ */
474
+ declare function getRpcUrl(apiUrl: string, fallback?: string): Promise<string>;
475
+
476
+ export { type CheckoutCreateParams, type CheckoutSession, type Customer, type CustomerCreateParams, type CustomerUpdateParams, MoneyMQ, type MoneyMQConfig, type Payment, type PaymentLink, type PaymentLinkCreateParams, type PaymentListParams, type Payout, type PayoutCreateParams, type PayoutListParams, type PayoutSettings, type PayoutSettingsUpdateParams, type Price, type PriceCreateParams, type Product, type ProductCreateParams, type ProductListParams, type ServerConfig, fetchConfig, getRpcUrl };
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
- * url: 'https://api.moneymq.com',
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 URL
365
+ * MoneyMQ API endpoint
366
366
  * @example 'http://localhost:8488' or 'https://api.moneymq.com'
367
367
  */
368
- url: string;
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
- * url: process.env.MONEYMQ_URL ?? 'http://localhost:8488',
388
+ * endpoint: process.env.MONEYMQ_ENDPOINT ?? 'http://localhost:8488',
389
389
  * });
390
390
  *
391
391
  * // Create a product
@@ -403,7 +403,7 @@ interface MoneyMQConfig {
403
403
  * ```
404
404
  */
405
405
  declare class MoneyMQ {
406
- private config;
406
+ readonly config: MoneyMQConfig;
407
407
  /** Catalog API for products and prices */
408
408
  readonly catalog: CatalogAPI;
409
409
  /** Payment API for checkout, links, customers, and payouts */
@@ -415,4 +415,62 @@ declare class MoneyMQ {
415
415
  request<T>(method: 'GET' | 'POST' | 'PUT' | 'DELETE', path: string, body?: unknown): Promise<T>;
416
416
  }
417
417
 
418
- export { type CheckoutCreateParams, type CheckoutSession, type Customer, type CustomerCreateParams, type CustomerUpdateParams, MoneyMQ, type MoneyMQConfig, type Payment, type PaymentLink, type PaymentLinkCreateParams, type PaymentListParams, type Payout, type PayoutCreateParams, type PayoutListParams, type PayoutSettings, type PayoutSettingsUpdateParams, type Price, type PriceCreateParams, type Product, type ProductCreateParams, type ProductListParams };
418
+ /**
419
+ * MoneyMQ server configuration returned from /config endpoint
420
+ */
421
+ interface ServerConfig {
422
+ account: {
423
+ name: string;
424
+ description: string;
425
+ };
426
+ x402: {
427
+ payoutAccount: {
428
+ currency: string;
429
+ decimals: number;
430
+ address: string;
431
+ tokenAddress: string;
432
+ };
433
+ facilitator: {
434
+ operatorAccount: {
435
+ out: string;
436
+ in: {
437
+ currency: string;
438
+ decimals: number;
439
+ address: string;
440
+ tokenAddress: string;
441
+ };
442
+ };
443
+ url: string;
444
+ };
445
+ validator: {
446
+ network: string;
447
+ rpcUrl: string;
448
+ bindHost: string;
449
+ rpcPort: number;
450
+ wsPort: number;
451
+ };
452
+ };
453
+ }
454
+ /**
455
+ * Fetch server configuration from MoneyMQ API
456
+ *
457
+ * @param apiUrl - The MoneyMQ API URL
458
+ * @returns Server configuration including RPC URL
459
+ *
460
+ * @example
461
+ * ```typescript
462
+ * const config = await fetchConfig('http://localhost:8488');
463
+ * console.log(config.x402.validator.rpcUrl);
464
+ * ```
465
+ */
466
+ declare function fetchConfig(apiUrl: string): Promise<ServerConfig>;
467
+ /**
468
+ * Get the Solana RPC URL from server config
469
+ *
470
+ * @param apiUrl - The MoneyMQ API URL
471
+ * @param fallback - Fallback RPC URL if fetch fails
472
+ * @returns RPC URL string
473
+ */
474
+ declare function getRpcUrl(apiUrl: string, fallback?: string): Promise<string>;
475
+
476
+ export { type CheckoutCreateParams, type CheckoutSession, type Customer, type CustomerCreateParams, type CustomerUpdateParams, MoneyMQ, type MoneyMQConfig, type Payment, type PaymentLink, type PaymentLinkCreateParams, type PaymentListParams, type Payout, type PayoutCreateParams, type PayoutListParams, type PayoutSettings, type PayoutSettingsUpdateParams, type Price, type PriceCreateParams, type Product, type ProductCreateParams, type ProductListParams, type ServerConfig, fetchConfig, getRpcUrl };
package/dist/index.js CHANGED
@@ -20,7 +20,9 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
20
20
  // src/index.ts
21
21
  var index_exports = {};
22
22
  __export(index_exports, {
23
- MoneyMQ: () => MoneyMQ
23
+ MoneyMQ: () => MoneyMQ,
24
+ fetchConfig: () => fetchConfig,
25
+ getRpcUrl: () => getRpcUrl
24
26
  });
25
27
  module.exports = __toCommonJS(index_exports);
26
28
 
@@ -30,7 +32,7 @@ var ProductsAPI = class {
30
32
  this.config = config;
31
33
  }
32
34
  async request(method, path, body) {
33
- const url = `${this.config.url}${path}`;
35
+ const url = `${this.config.endpoint}${path}`;
34
36
  const headers = { "Content-Type": "application/json" };
35
37
  if (this.config.secret) headers["Authorization"] = `Bearer ${this.config.secret}`;
36
38
  const response = await fetch(url, {
@@ -48,13 +50,13 @@ var ProductsAPI = class {
48
50
  * Create a new product
49
51
  */
50
52
  async create(params) {
51
- return this.request("POST", "/catalog/products", params);
53
+ return this.request("POST", "/catalog/v1/products", params);
52
54
  }
53
55
  /**
54
56
  * Retrieve a product by ID
55
57
  */
56
58
  async retrieve(id) {
57
- return this.request("GET", `/catalog/products/${id}`);
59
+ return this.request("GET", `/catalog/v1/products/${id}`);
58
60
  }
59
61
  /**
60
62
  * List all products
@@ -65,19 +67,19 @@ var ProductsAPI = class {
65
67
  if (params?.limit) query.set("limit", String(params.limit));
66
68
  if (params?.startingAfter) query.set("starting_after", params.startingAfter);
67
69
  const queryString = query.toString();
68
- return this.request("GET", `/catalog/products${queryString ? `?${queryString}` : ""}`);
70
+ return this.request("GET", `/catalog/v1/products${queryString ? `?${queryString}` : ""}`);
69
71
  }
70
72
  /**
71
73
  * Update a product
72
74
  */
73
75
  async update(id, params) {
74
- return this.request("PUT", `/catalog/products/${id}`, params);
76
+ return this.request("PUT", `/catalog/v1/products/${id}`, params);
75
77
  }
76
78
  /**
77
79
  * Delete a product
78
80
  */
79
81
  async delete(id) {
80
- return this.request("DELETE", `/catalog/products/${id}`);
82
+ return this.request("DELETE", `/catalog/v1/products/${id}`);
81
83
  }
82
84
  };
83
85
  var PricesAPI = class {
@@ -85,7 +87,7 @@ var PricesAPI = class {
85
87
  this.config = config;
86
88
  }
87
89
  async request(method, path, body) {
88
- const url = `${this.config.url}${path}`;
90
+ const url = `${this.config.endpoint}${path}`;
89
91
  const headers = { "Content-Type": "application/json" };
90
92
  if (this.config.secret) headers["Authorization"] = `Bearer ${this.config.secret}`;
91
93
  const response = await fetch(url, {
@@ -103,13 +105,13 @@ var PricesAPI = class {
103
105
  * Create a new price
104
106
  */
105
107
  async create(params) {
106
- return this.request("POST", "/catalog/prices", params);
108
+ return this.request("POST", "/catalog/v1/prices", params);
107
109
  }
108
110
  /**
109
111
  * Retrieve a price by ID
110
112
  */
111
113
  async retrieve(id) {
112
- return this.request("GET", `/catalog/prices/${id}`);
114
+ return this.request("GET", `/catalog/v1/prices/${id}`);
113
115
  }
114
116
  /**
115
117
  * List all prices
@@ -120,7 +122,7 @@ var PricesAPI = class {
120
122
  if (params?.active !== void 0) query.set("active", String(params.active));
121
123
  if (params?.limit) query.set("limit", String(params.limit));
122
124
  const queryString = query.toString();
123
- return this.request("GET", `/catalog/prices${queryString ? `?${queryString}` : ""}`);
125
+ return this.request("GET", `/catalog/v1/prices${queryString ? `?${queryString}` : ""}`);
124
126
  }
125
127
  };
126
128
  var CatalogAPI = class {
@@ -133,7 +135,7 @@ var CatalogAPI = class {
133
135
  // src/payment.ts
134
136
  function createRequester(config) {
135
137
  return async function request(method, path, body) {
136
- const url = `${config.url}${path}`;
138
+ const url = `${config.endpoint}${path}`;
137
139
  const headers = { "Content-Type": "application/json" };
138
140
  if (config.secret) headers["Authorization"] = `Bearer ${config.secret}`;
139
141
  const response = await fetch(url, {
@@ -156,13 +158,13 @@ var CheckoutAPI = class {
156
158
  * Create a checkout session
157
159
  */
158
160
  async create(params) {
159
- return this.request("POST", "/payment/checkout", params);
161
+ return this.request("POST", "/payment/v1/checkout", params);
160
162
  }
161
163
  /**
162
164
  * Retrieve a checkout session
163
165
  */
164
166
  async retrieve(id) {
165
- return this.request("GET", `/payment/checkout/${id}`);
167
+ return this.request("GET", `/payment/v1/checkout/${id}`);
166
168
  }
167
169
  };
168
170
  var LinksAPI = class {
@@ -173,7 +175,7 @@ var LinksAPI = class {
173
175
  * Create a payment link
174
176
  */
175
177
  async create(params) {
176
- return this.request("POST", "/payment/links", {
178
+ return this.request("POST", "/payment/v1/links", {
177
179
  ...params,
178
180
  expiresAt: params.expiresAt instanceof Date ? params.expiresAt.getTime() : params.expiresAt
179
181
  });
@@ -182,13 +184,13 @@ var LinksAPI = class {
182
184
  * Retrieve a payment link
183
185
  */
184
186
  async retrieve(id) {
185
- return this.request("GET", `/payment/links/${id}`);
187
+ return this.request("GET", `/payment/v1/links/${id}`);
186
188
  }
187
189
  /**
188
190
  * Deactivate a payment link
189
191
  */
190
192
  async deactivate(id) {
191
- return this.request("PUT", `/payment/links/${id}`, { active: false });
193
+ return this.request("PUT", `/payment/v1/links/${id}`, { active: false });
192
194
  }
193
195
  };
194
196
  var CustomersAPI = class {
@@ -199,20 +201,20 @@ var CustomersAPI = class {
199
201
  * Create a customer
200
202
  */
201
203
  async create(params) {
202
- return this.request("POST", "/payment/customers", params);
204
+ return this.request("POST", "/payment/v1/customers", params);
203
205
  }
204
206
  /**
205
207
  * Retrieve a customer
206
208
  */
207
209
  async retrieve(id, options) {
208
210
  const query = options?.expand ? `?expand=${options.expand.join(",")}` : "";
209
- return this.request("GET", `/payment/customers/${id}${query}`);
211
+ return this.request("GET", `/payment/v1/customers/${id}${query}`);
210
212
  }
211
213
  /**
212
214
  * Update a customer
213
215
  */
214
216
  async update(id, params) {
215
- return this.request("PUT", `/payment/customers/${id}`, params);
217
+ return this.request("PUT", `/payment/v1/customers/${id}`, params);
216
218
  }
217
219
  /**
218
220
  * List customers
@@ -222,7 +224,7 @@ var CustomersAPI = class {
222
224
  if (params?.email) query.set("email", params.email);
223
225
  if (params?.limit) query.set("limit", String(params.limit));
224
226
  const queryString = query.toString();
225
- return this.request("GET", `/payment/customers${queryString ? `?${queryString}` : ""}`);
227
+ return this.request("GET", `/payment/v1/customers${queryString ? `?${queryString}` : ""}`);
226
228
  }
227
229
  };
228
230
  var PayoutsAPI = class {
@@ -234,13 +236,13 @@ var PayoutsAPI = class {
234
236
  * Create a manual payout
235
237
  */
236
238
  async create(params) {
237
- return this.request("POST", "/payment/payouts", params);
239
+ return this.request("POST", "/payment/v1/payouts", params);
238
240
  }
239
241
  /**
240
242
  * Retrieve a payout
241
243
  */
242
244
  async retrieve(id) {
243
- return this.request("GET", `/payment/payouts/${id}`);
245
+ return this.request("GET", `/payment/v1/payouts/${id}`);
244
246
  }
245
247
  /**
246
248
  * List payouts
@@ -251,7 +253,7 @@ var PayoutsAPI = class {
251
253
  if (params?.limit) query.set("limit", String(params.limit));
252
254
  if (params?.startingAfter) query.set("starting_after", params.startingAfter);
253
255
  const queryString = query.toString();
254
- return this.request("GET", `/payment/payouts${queryString ? `?${queryString}` : ""}`);
256
+ return this.request("GET", `/payment/v1/payouts${queryString ? `?${queryString}` : ""}`);
255
257
  }
256
258
  };
257
259
  var PayoutSettingsAPI = class {
@@ -262,13 +264,13 @@ var PayoutSettingsAPI = class {
262
264
  * Get payout settings
263
265
  */
264
266
  async retrieve() {
265
- return this.request("GET", "/payment/payouts/settings");
267
+ return this.request("GET", "/payment/v1/payouts/settings");
266
268
  }
267
269
  /**
268
270
  * Update payout settings
269
271
  */
270
272
  async update(params) {
271
- return this.request("PUT", "/payment/payouts/settings", params);
273
+ return this.request("PUT", "/payment/v1/payouts/settings", params);
272
274
  }
273
275
  };
274
276
  var WebhooksAPI = class {
@@ -279,7 +281,7 @@ var WebhooksAPI = class {
279
281
  * Trigger a test webhook event (for testing)
280
282
  */
281
283
  async trigger(event, data) {
282
- return this.request("POST", "/payment/webhooks/test", { event, data });
284
+ return this.request("POST", "/payment/v1/webhooks/test", { event, data });
283
285
  }
284
286
  };
285
287
  var PaymentAPI = class {
@@ -295,7 +297,7 @@ var PaymentAPI = class {
295
297
  * Retrieve a payment by ID
296
298
  */
297
299
  async retrieve(id) {
298
- return this.request("GET", `/payment/${id}`);
300
+ return this.request("GET", `/payment/v1/${id}`);
299
301
  }
300
302
  /**
301
303
  * List payments
@@ -307,7 +309,7 @@ var PaymentAPI = class {
307
309
  if (params?.limit) query.set("limit", String(params.limit));
308
310
  if (params?.startingAfter) query.set("starting_after", params.startingAfter);
309
311
  const queryString = query.toString();
310
- return this.request("GET", `/payment${queryString ? `?${queryString}` : ""}`);
312
+ return this.request("GET", `/payment/v1${queryString ? `?${queryString}` : ""}`);
311
313
  }
312
314
  };
313
315
 
@@ -325,7 +327,7 @@ var MoneyMQ = class {
325
327
  * Make an authenticated request to the MoneyMQ API
326
328
  */
327
329
  async request(method, path, body) {
328
- const url = `${this.config.url}${path}`;
330
+ const url = `${this.config.endpoint}${path}`;
329
331
  const headers = {
330
332
  "Content-Type": "application/json"
331
333
  };
@@ -357,8 +359,27 @@ var MoneyMQError = class extends Error {
357
359
  this.name = "MoneyMQError";
358
360
  }
359
361
  };
362
+
363
+ // src/config.ts
364
+ async function fetchConfig(apiUrl) {
365
+ const response = await fetch(`${apiUrl}/config`);
366
+ if (!response.ok) {
367
+ throw new Error(`Failed to fetch config: ${response.status}`);
368
+ }
369
+ return response.json();
370
+ }
371
+ async function getRpcUrl(apiUrl, fallback = "https://api.devnet.solana.com") {
372
+ try {
373
+ const config = await fetchConfig(apiUrl);
374
+ return config.x402.validator.rpcUrl || fallback;
375
+ } catch {
376
+ return fallback;
377
+ }
378
+ }
360
379
  // Annotate the CommonJS export names for ESM import in node:
361
380
  0 && (module.exports = {
362
- MoneyMQ
381
+ MoneyMQ,
382
+ fetchConfig,
383
+ getRpcUrl
363
384
  });
364
385
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/catalog.ts","../src/payment.ts","../src/client.ts"],"sourcesContent":["export { MoneyMQ } from './client';\nexport type { MoneyMQConfig } from './client';\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', '/catalog/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/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/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/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/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', '/catalog/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/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/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 private 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"],"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":"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","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.url}${path}`;
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", "/catalog/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", `/catalog/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", `/catalog/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", `/catalog/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", `/catalog/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.url}${path}`;
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", "/catalog/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", `/catalog/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", `/catalog/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.url}${path}`;
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.url}${path}`;
302
+ const url = `${this.config.endpoint}${path}`;
303
303
  const headers = {
304
304
  "Content-Type": "application/json"
305
305
  };
@@ -331,7 +331,26 @@ var MoneyMQError = class extends Error {
331
331
  this.name = "MoneyMQError";
332
332
  }
333
333
  };
334
+
335
+ // src/config.ts
336
+ async function fetchConfig(apiUrl) {
337
+ const response = await fetch(`${apiUrl}/config`);
338
+ if (!response.ok) {
339
+ throw new Error(`Failed to fetch config: ${response.status}`);
340
+ }
341
+ return response.json();
342
+ }
343
+ async function getRpcUrl(apiUrl, fallback = "https://api.devnet.solana.com") {
344
+ try {
345
+ const config = await fetchConfig(apiUrl);
346
+ return config.x402.validator.rpcUrl || fallback;
347
+ } catch {
348
+ return fallback;
349
+ }
350
+ }
334
351
  export {
335
- MoneyMQ
352
+ MoneyMQ,
353
+ fetchConfig,
354
+ getRpcUrl
336
355
  };
337
356
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/catalog.ts","../src/payment.ts","../src/client.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', '/catalog/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/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/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/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/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', '/catalog/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/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/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 private 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"],"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,qBAAqB,MAAM;AAAA,EACzD;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,SAAS,IAA8B;AAC3C,WAAO,KAAK,QAAQ,OAAO,qBAAqB,EAAE,EAAE;AAAA,EACtD;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,oBAAoB,cAAc,IAAI,WAAW,KAAK,EAAE,EAAE;AAAA,EACvF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,OAAO,IAAY,QAAwD;AAC/E,WAAO,KAAK,QAAQ,OAAO,qBAAqB,EAAE,IAAI,MAAM;AAAA,EAC9D;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,OAAO,IAA2C;AACtD,WAAO,KAAK,QAAQ,UAAU,qBAAqB,EAAE,EAAE;AAAA,EACzD;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,mBAAmB,MAAM;AAAA,EACvD;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,SAAS,IAA4B;AACzC,WAAO,KAAK,QAAQ,OAAO,mBAAmB,EAAE,EAAE;AAAA,EACpD;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,kBAAkB,cAAc,IAAI,WAAW,KAAK,EAAE,EAAE;AAAA,EACrF;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;","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":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@moneymq/sdk",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "description": "MoneyMQ SDK for accepting stablecoin payments",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",
@@ -15,6 +15,12 @@
15
15
  "files": [
16
16
  "dist"
17
17
  ],
18
+ "scripts": {
19
+ "build": "tsup",
20
+ "dev": "tsup --watch",
21
+ "typecheck": "tsc --noEmit",
22
+ "clean": "rm -rf dist .turbo node_modules"
23
+ },
18
24
  "repository": {
19
25
  "type": "git",
20
26
  "url": "git+https://github.com/txtx/moneymq-js.git",
@@ -34,11 +40,5 @@
34
40
  "@types/node": "^20",
35
41
  "tsup": "^8.0.0",
36
42
  "typescript": "^5"
37
- },
38
- "scripts": {
39
- "build": "tsup",
40
- "dev": "tsup --watch",
41
- "typecheck": "tsc --noEmit",
42
- "clean": "rm -rf dist .turbo node_modules"
43
43
  }
44
- }
44
+ }
package/LICENSE DELETED
@@ -1,21 +0,0 @@
1
- MIT License
2
-
3
- Copyright (c) 2024 MoneyMQ
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.