@surgent-dev/surpay 0.1.6 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -86,7 +86,7 @@ Note: Projects are created via the Surgent dashboard. The SDK provides read-only
86
86
 
87
87
  ```typescript
88
88
  // List projects
89
- const { data: projects } = await surpay.projects.list()
89
+ const { data: projects, error } = await surpay.projects.list()
90
90
  ```
91
91
 
92
92
  ### Products
@@ -95,20 +95,19 @@ Manage products within a project.
95
95
 
96
96
  ```typescript
97
97
  // Create a product
98
- const { data } = await surpay.products.create({
99
- project_id: 'proj_123',
98
+ const { data: product, error } = await surpay.products.create({
100
99
  product_group_id: 'group_456',
101
100
  name: 'Pro Plan',
102
101
  slug: 'pro-plan',
103
102
  })
104
103
 
105
104
  // Update a product
106
- await surpay.products.update('prod_123', {
105
+ const { data: updated, error: updateError } = await surpay.products.update('prod_123', {
107
106
  name: 'Pro Plan v2',
108
107
  })
109
108
 
110
109
  // List products with their prices
111
- const { data: products } = await surpay.products.listWithPrices('proj_123')
110
+ const { data: products, error: listError } = await surpay.products.listWithPrices()
112
111
  ```
113
112
 
114
113
  ### Prices
@@ -117,8 +116,7 @@ Manage pricing for your products.
117
116
 
118
117
  ```typescript
119
118
  // Create a price
120
- const { data } = await surpay.prices.create({
121
- project_id: 'proj_123',
119
+ const { data: price, error } = await surpay.prices.create({
122
120
  product_group_id: 'group_456',
123
121
  name: 'Monthly',
124
122
  price: 999, // $9.99
@@ -133,15 +131,17 @@ Create hosted checkout sessions.
133
131
 
134
132
  ```typescript
135
133
  // Create a checkout session
136
- const { data } = await surpay.checkout.create({
134
+ const { data: checkout, error } = await surpay.checkout.create({
137
135
  product_id: 'prod_123',
138
136
  price_id: 'price_456',
139
- customer_id: 'cust_123',
137
+ customer_id: 'cust_123', // Required
140
138
  success_url: 'https://example.com/success',
141
139
  cancel_url: 'https://example.com/cancel',
142
140
  })
143
141
 
144
- console.log(data.checkout_url)
142
+ if (checkout) {
143
+ console.log(checkout.checkout_url)
144
+ }
145
145
  ```
146
146
 
147
147
  ### Check
@@ -149,12 +149,12 @@ console.log(data.checkout_url)
149
149
  Verify if a customer has access to a specific product.
150
150
 
151
151
  ```typescript
152
- const { data } = await surpay.check({
152
+ const { data, error } = await surpay.check({
153
153
  customer_id: 'cust_123',
154
154
  product_id: 'prod_123',
155
155
  })
156
156
 
157
- if (data.allowed) {
157
+ if (data?.allowed) {
158
158
  console.log('Customer has access')
159
159
  }
160
160
  ```
@@ -165,10 +165,10 @@ Retrieve customer information.
165
165
 
166
166
  ```typescript
167
167
  // List customers
168
- const { data: customers } = await surpay.customers.list('proj_123')
168
+ const { data: customers, error } = await surpay.customers.list()
169
169
 
170
170
  // Get customer with details (subscriptions & transactions)
171
- const { data: customer } = await surpay.customers.get('proj_123', 'cust_123')
171
+ const { data: customer, error: getError } = await surpay.customers.get('cust_123')
172
172
  ```
173
173
 
174
174
  ### Subscriptions
@@ -177,7 +177,7 @@ Monitor active subscriptions.
177
177
 
178
178
  ```typescript
179
179
  // List subscriptions
180
- const { data: subscriptions } = await surpay.subscriptions.list('proj_123')
180
+ const { data: subscriptions, error } = await surpay.subscriptions.list()
181
181
  ```
182
182
 
183
183
  ### Transactions
@@ -186,7 +186,7 @@ Track payments and revenue.
186
186
 
187
187
  ```typescript
188
188
  // List transactions
189
- const { data: transactions } = await surpay.transactions.list('proj_123')
189
+ const { data: transactions, error } = await surpay.transactions.list()
190
190
  ```
191
191
 
192
192
  ### Accounts
@@ -195,16 +195,16 @@ Manage connected payment processor accounts.
195
195
 
196
196
  ```typescript
197
197
  // Connect a new account (Stripe)
198
- const { data } = await surpay.accounts.connect({
198
+ const { data: account, error } = await surpay.accounts.connect({
199
199
  processor: 'stripe',
200
200
  })
201
201
 
202
202
  // Get account details
203
- const { data: account } = await surpay.accounts.get('acc_123')
203
+ const { data: accountDetails, error: getError } = await surpay.accounts.get('acc_123')
204
204
 
205
205
  // List connected accounts
206
- const { data: accounts } = await surpay.accounts.list()
206
+ const { data: accounts, error: listError } = await surpay.accounts.list()
207
207
 
208
208
  // Delete/Disconnect an account
209
- await surpay.accounts.delete('acc_123')
209
+ const { error: deleteError } = await surpay.accounts.delete('acc_123')
210
210
  ```
package/dist/client.d.ts CHANGED
@@ -3,18 +3,27 @@
3
3
  *
4
4
  * Provides core HTTP methods with Result pattern error handling.
5
5
  */
6
+ import { type ToResultOptions } from './utils/result.js';
6
7
  import { SurpayError } from './errors.js';
7
- import type { Result } from './types.js';
8
+ import type { ResponseCase, Result } from './types.js';
9
+ export interface SurpayClientOptions {
10
+ apiKey: string;
11
+ baseUrl?: string;
12
+ responseCase?: ResponseCase;
13
+ /** Request timeout in milliseconds. Default: 30000 (30 seconds) */
14
+ timeoutMs?: number;
15
+ }
8
16
  export declare class SurpayClient {
9
17
  protected readonly baseUrl: string;
10
18
  protected readonly headers: Record<string, string>;
11
- constructor(options: {
12
- apiKey: string;
13
- baseUrl?: string;
14
- });
19
+ protected readonly resultOptions: ToResultOptions;
20
+ protected readonly timeoutMs: number;
21
+ constructor(options: SurpayClientOptions);
15
22
  protected get<T>(path: string): Promise<Result<T, SurpayError>>;
16
23
  protected post<T>(path: string, body?: unknown): Promise<Result<T, SurpayError>>;
17
24
  protected put<T>(path: string, body: unknown): Promise<Result<T, SurpayError>>;
18
25
  protected delete<T>(path: string): Promise<Result<T, SurpayError>>;
26
+ private request;
27
+ private handleFetchError;
19
28
  }
20
29
  //# sourceMappingURL=client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAIxC,qBAAa,YAAY;IACvB,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IAClC,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;gBAEtC,OAAO,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE;cAQzC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;cAQrD,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;cAStE,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;cASpE,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;CAOzE"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAY,KAAK,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAItD,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,YAAY,CAAC,EAAE,YAAY,CAAA;IAC3B,mEAAmE;IACnE,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAID,qBAAa,YAAY;IACvB,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IAClC,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAClD,SAAS,CAAC,QAAQ,CAAC,aAAa,EAAE,eAAe,CAAA;IACjD,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;gBAExB,OAAO,EAAE,mBAAmB;cAYxB,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;cAIrD,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;cAItE,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;cAIpE,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;YAI1D,OAAO;IAkBrB,OAAO,CAAC,gBAAgB;CA0BzB"}
package/dist/client.js CHANGED
@@ -4,46 +4,75 @@
4
4
  * Provides core HTTP methods with Result pattern error handling.
5
5
  */
6
6
  import { toResult } from './utils/result.js';
7
+ import { SurpayError } from './errors.js';
7
8
  const DEFAULT_BASE_URL = 'https://pay.surgent.dev';
9
+ const DEFAULT_TIMEOUT_MS = 30000;
8
10
  export class SurpayClient {
9
11
  baseUrl;
10
12
  headers;
13
+ resultOptions;
14
+ timeoutMs;
11
15
  constructor(options) {
12
16
  this.baseUrl = options.baseUrl || DEFAULT_BASE_URL;
17
+ this.timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;
13
18
  this.headers = {
14
19
  Authorization: `Bearer ${options.apiKey}`,
15
20
  'Content-Type': 'application/json',
16
21
  };
22
+ this.resultOptions = {
23
+ responseCase: options.responseCase ?? 'snake',
24
+ };
17
25
  }
18
26
  async get(path) {
19
- const response = await fetch(`${this.baseUrl}${path}`, {
20
- method: 'GET',
21
- headers: this.headers,
22
- });
23
- return toResult(response);
27
+ return this.request('GET', path);
24
28
  }
25
29
  async post(path, body) {
26
- const response = await fetch(`${this.baseUrl}${path}`, {
27
- method: 'POST',
28
- headers: this.headers,
29
- body: body !== undefined ? JSON.stringify(body) : undefined,
30
- });
31
- return toResult(response);
30
+ return this.request('POST', path, body);
32
31
  }
33
32
  async put(path, body) {
34
- const response = await fetch(`${this.baseUrl}${path}`, {
35
- method: 'PUT',
36
- headers: this.headers,
37
- body: JSON.stringify(body),
38
- });
39
- return toResult(response);
33
+ return this.request('PUT', path, body);
40
34
  }
41
35
  async delete(path) {
42
- const response = await fetch(`${this.baseUrl}${path}`, {
43
- method: 'DELETE',
44
- headers: this.headers,
45
- });
46
- return toResult(response);
36
+ return this.request('DELETE', path);
37
+ }
38
+ async request(method, path, body) {
39
+ try {
40
+ const response = await fetch(`${this.baseUrl}${path}`, {
41
+ method,
42
+ headers: this.headers,
43
+ body: body !== undefined ? JSON.stringify(body) : undefined,
44
+ signal: AbortSignal.timeout(this.timeoutMs),
45
+ });
46
+ return toResult(response, this.resultOptions);
47
+ }
48
+ catch (error) {
49
+ return this.handleFetchError(error);
50
+ }
51
+ }
52
+ handleFetchError(error) {
53
+ // Timeout errors from AbortSignal.timeout()
54
+ if (error instanceof DOMException && error.name === 'TimeoutError') {
55
+ return {
56
+ data: null,
57
+ error: new SurpayError({
58
+ message: `Request timed out after ${this.timeoutMs}ms`,
59
+ code: 'timeout_error',
60
+ statusCode: 0,
61
+ }),
62
+ statusCode: 0,
63
+ };
64
+ }
65
+ // Network errors (DNS failure, connection refused, etc.)
66
+ const message = error instanceof Error ? error.message : 'Network request failed';
67
+ return {
68
+ data: null,
69
+ error: new SurpayError({
70
+ message,
71
+ code: 'network_error',
72
+ statusCode: 0,
73
+ }),
74
+ statusCode: 0,
75
+ };
47
76
  }
48
77
  }
49
78
  //# sourceMappingURL=client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAI5C,MAAM,gBAAgB,GAAG,yBAAyB,CAAA;AAElD,MAAM,OAAO,YAAY;IACJ,OAAO,CAAQ;IACf,OAAO,CAAwB;IAElD,YAAY,OAA6C;QACvD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,gBAAgB,CAAA;QAClD,IAAI,CAAC,OAAO,GAAG;YACb,aAAa,EAAE,UAAU,OAAO,CAAC,MAAM,EAAE;YACzC,cAAc,EAAE,kBAAkB;SACnC,CAAA;IACH,CAAC;IAES,KAAK,CAAC,GAAG,CAAI,IAAY;QACjC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE,EAAE;YACrD,MAAM,EAAE,KAAK;YACb,OAAO,EAAE,IAAI,CAAC,OAAO;SACtB,CAAC,CAAA;QACF,OAAO,QAAQ,CAAI,QAAQ,CAAC,CAAA;IAC9B,CAAC;IAES,KAAK,CAAC,IAAI,CAAI,IAAY,EAAE,IAAc;QAClD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE,EAAE;YACrD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,IAAI,EAAE,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;SAC5D,CAAC,CAAA;QACF,OAAO,QAAQ,CAAI,QAAQ,CAAC,CAAA;IAC9B,CAAC;IAES,KAAK,CAAC,GAAG,CAAI,IAAY,EAAE,IAAa;QAChD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE,EAAE;YACrD,MAAM,EAAE,KAAK;YACb,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;SAC3B,CAAC,CAAA;QACF,OAAO,QAAQ,CAAI,QAAQ,CAAC,CAAA;IAC9B,CAAC;IAES,KAAK,CAAC,MAAM,CAAI,IAAY;QACpC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE,EAAE;YACrD,MAAM,EAAE,QAAQ;YAChB,OAAO,EAAE,IAAI,CAAC,OAAO;SACtB,CAAC,CAAA;QACF,OAAO,QAAQ,CAAI,QAAQ,CAAC,CAAA;IAC9B,CAAC;CACF"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -28,5 +28,6 @@
28
28
  */
29
29
  export { Surpay } from './surpay.js';
30
30
  export { SurpayError, isSurpayError } from './errors.js';
31
- export type { Result, Success, Failure, SurpayConfig, SubscriptionStatus, RecurringInterval, TransactionType, CheckoutStatus, CheckoutMode, PayoutStatus, Project, Customer, CustomerWithDetails, TransactionSummary, SubscriptionSummary, Product, CreateProductRequest, CreateProductResponse, UpdateProductRequest, UpdateProductResponse, ProductWithPrices, ProductPrice, CreatePriceRequest, CreatePriceResponse, CreateCheckoutRequest, CreateCheckoutResponse, CheckRequest, CheckResponse, Transaction, Subscription, ConnectAccountRequest, ConnectAccountResponse, ConnectedAccount, } from './types.js';
31
+ export { camelToSnake } from './utils/case.js';
32
+ export type { Result, Success, Failure, SurpayConfig, ResponseCase, SubscriptionStatus, RecurringInterval, TransactionType, CheckoutStatus, CheckoutMode, PayoutStatus, Project, Customer, CustomerWithDetails, TransactionSummary, SubscriptionSummary, Product, CreateProductRequest, CreateProductResponse, UpdateProductRequest, UpdateProductResponse, ProductWithPrices, ProductPrice, CreatePriceRequest, CreatePriceResponse, CreateCheckoutRequest, CreateCheckoutResponse, CheckRequest, CheckResponse, Transaction, Subscription, ConnectAccountRequest, ConnectAccountResponse, ConnectedAccount, } from './types.js';
32
33
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAGH,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAGpC,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAGxD,YAAY,EAEV,MAAM,EACN,OAAO,EACP,OAAO,EAGP,YAAY,EAGZ,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,EACf,cAAc,EACd,YAAY,EACZ,YAAY,EAGZ,OAAO,EAGP,QAAQ,EACR,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EAGnB,OAAO,EACP,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,EAGjB,YAAY,EACZ,kBAAkB,EAClB,mBAAmB,EAGnB,qBAAqB,EACrB,sBAAsB,EAGtB,YAAY,EACZ,aAAa,EAGb,WAAW,EAGX,YAAY,EAGZ,qBAAqB,EACrB,sBAAsB,EACtB,gBAAgB,GACjB,MAAM,YAAY,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAGH,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAGpC,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAGxD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAG9C,YAAY,EAEV,MAAM,EACN,OAAO,EACP,OAAO,EAGP,YAAY,EACZ,YAAY,EAGZ,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,EACf,cAAc,EACd,YAAY,EACZ,YAAY,EAGZ,OAAO,EAGP,QAAQ,EACR,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EAGnB,OAAO,EACP,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,EAGjB,YAAY,EACZ,kBAAkB,EAClB,mBAAmB,EAGnB,qBAAqB,EACrB,sBAAsB,EAGtB,YAAY,EACZ,aAAa,EAGb,WAAW,EAGX,YAAY,EAGZ,qBAAqB,EACrB,sBAAsB,EACtB,gBAAgB,GACjB,MAAM,YAAY,CAAA"}
package/dist/index.js CHANGED
@@ -30,4 +30,6 @@
30
30
  export { Surpay } from './surpay.js';
31
31
  // Error handling
32
32
  export { SurpayError, isSurpayError } from './errors.js';
33
+ // Utilities
34
+ export { camelToSnake } from './utils/case.js';
33
35
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,cAAc;AACd,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,iBAAiB;AACjB,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,cAAc;AACd,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,iBAAiB;AACjB,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAExD,YAAY;AACZ,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA"}
package/dist/surpay.d.ts CHANGED
@@ -9,13 +9,13 @@ import type { SurpayConfig, Customer, CustomerWithDetails, CreateProductRequest,
9
9
  export declare class Surpay extends SurpayClient {
10
10
  constructor(options?: SurpayConfig);
11
11
  customers: {
12
- list: (projectId: string) => Promise<import("./types.js").Result<Customer[], import("./errors.js").SurpayError>>;
13
- get: (projectId: string, customerId: string) => Promise<import("./types.js").Result<CustomerWithDetails, import("./errors.js").SurpayError>>;
12
+ list: () => Promise<import("./types.js").Result<Customer[], import("./errors.js").SurpayError>>;
13
+ get: (customerId: string) => Promise<import("./types.js").Result<CustomerWithDetails, import("./errors.js").SurpayError>>;
14
14
  };
15
15
  products: {
16
16
  create: (params: CreateProductRequest) => Promise<import("./types.js").Result<CreateProductResponse, import("./errors.js").SurpayError>>;
17
17
  update: (productId: string, params: UpdateProductRequest) => Promise<import("./types.js").Result<UpdateProductResponse, import("./errors.js").SurpayError>>;
18
- listWithPrices: (projectId: string) => Promise<import("./types.js").Result<ProductWithPrices[], import("./errors.js").SurpayError>>;
18
+ listWithPrices: () => Promise<import("./types.js").Result<ProductWithPrices[], import("./errors.js").SurpayError>>;
19
19
  };
20
20
  prices: {
21
21
  create: (params: CreatePriceRequest) => Promise<import("./types.js").Result<CreatePriceResponse, import("./errors.js").SurpayError>>;
@@ -25,10 +25,10 @@ export declare class Surpay extends SurpayClient {
25
25
  };
26
26
  check: (params: CheckRequest) => Promise<import("./types.js").Result<CheckResponse, import("./errors.js").SurpayError>>;
27
27
  subscriptions: {
28
- list: (projectId: string) => Promise<import("./types.js").Result<Subscription[], import("./errors.js").SurpayError>>;
28
+ list: () => Promise<import("./types.js").Result<Subscription[], import("./errors.js").SurpayError>>;
29
29
  };
30
30
  transactions: {
31
- list: (projectId: string) => Promise<import("./types.js").Result<Transaction[], import("./errors.js").SurpayError>>;
31
+ list: () => Promise<import("./types.js").Result<Transaction[], import("./errors.js").SurpayError>>;
32
32
  };
33
33
  projects: {
34
34
  list: () => Promise<import("./types.js").Failure<import("./errors.js").SurpayError> | {
@@ -1 +1 @@
1
- {"version":3,"file":"surpay.d.ts","sourceRoot":"","sources":["../src/surpay.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,KAAK,EACV,YAAY,EACZ,QAAQ,EACR,mBAAmB,EACnB,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,qBAAqB,EACrB,sBAAsB,EACtB,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,WAAW,EACX,OAAO,EACP,qBAAqB,EACrB,sBAAsB,EACtB,gBAAgB,EACjB,MAAM,YAAY,CAAA;AAEnB,qBAAa,MAAO,SAAQ,YAAY;gBAC1B,OAAO,CAAC,EAAE,YAAY;IAalC,SAAS;0BACW,MAAM;yBAEP,MAAM,cAAc,MAAM;MAE5C;IAED,QAAQ;yBACW,oBAAoB;4BAEjB,MAAM,UAAU,oBAAoB;oCAG5B,MAAM;MACnC;IAED,MAAM;yBACa,kBAAkB;MACpC;IAED,QAAQ;yBACW,qBAAqB;MACvC;IAED,KAAK,GAAI,QAAQ,YAAY,4FAA+C;IAE5E,aAAa;0BACO,MAAM;MACzB;IAED,YAAY;0BACQ,MAAM;MACzB;IAED,QAAQ;;;;;;MAUP;IAED,QAAQ;0BACY,qBAAqB;yBAEtB,MAAM;;4BAIH,MAAM;MAC3B;CACF"}
1
+ {"version":3,"file":"surpay.d.ts","sourceRoot":"","sources":["../src/surpay.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,KAAK,EACV,YAAY,EACZ,QAAQ,EACR,mBAAmB,EACnB,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,qBAAqB,EACrB,sBAAsB,EACtB,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,WAAW,EACX,OAAO,EACP,qBAAqB,EACrB,sBAAsB,EACtB,gBAAgB,EACjB,MAAM,YAAY,CAAA;AAEnB,qBAAa,MAAO,SAAQ,YAAY;gBAC1B,OAAO,CAAC,EAAE,YAAY;IAalC,SAAS;;0BAGW,MAAM;MACzB;IAED,QAAQ;yBACW,oBAAoB;4BAEjB,MAAM,UAAU,oBAAoB;;MAIzD;IAED,MAAM;yBACa,kBAAkB;MACpC;IAED,QAAQ;yBACW,qBAAqB;MACvC;IAED,KAAK,GAAI,QAAQ,YAAY,4FAA+C;IAE5E,aAAa;;MAEZ;IAED,YAAY;;MAEX;IAED,QAAQ;;;;;;MAUP;IAED,QAAQ;0BACY,qBAAqB;yBAEtB,MAAM;;4BAIH,MAAM;MAC3B;CACF"}
package/dist/surpay.js CHANGED
@@ -14,16 +14,16 @@ export class Surpay extends SurpayClient {
14
14
  if (!apiKey) {
15
15
  throw new Error('Surpay API key is required. Pass it via options or set SURPAY_API_KEY env var.');
16
16
  }
17
- super({ apiKey, baseUrl });
17
+ super({ apiKey, baseUrl, responseCase: options?.responseCase });
18
18
  }
19
19
  customers = {
20
- list: (projectId) => this.get(`/project/${projectId}/customers`),
21
- get: (projectId, customerId) => this.get(`/project/${projectId}/customer/${customerId}`),
20
+ list: () => this.get('/customers'),
21
+ get: (customerId) => this.get(`/customers/${customerId}`),
22
22
  };
23
23
  products = {
24
24
  create: (params) => this.post('/product', params),
25
25
  update: (productId, params) => this.put(`/product/${productId}`, params),
26
- listWithPrices: (projectId) => this.get(`/project/${projectId}/product/prices`),
26
+ listWithPrices: () => this.get('/products'),
27
27
  };
28
28
  prices = {
29
29
  create: (params) => this.post('/product/price', params),
@@ -33,10 +33,10 @@ export class Surpay extends SurpayClient {
33
33
  };
34
34
  check = (params) => this.post('/check', params);
35
35
  subscriptions = {
36
- list: (projectId) => this.get(`/project/${projectId}/subscriptions`),
36
+ list: () => this.get('/subscriptions'),
37
37
  };
38
38
  transactions = {
39
- list: (projectId) => this.get(`/project/${projectId}/transactions`),
39
+ list: () => this.get('/transactions'),
40
40
  };
41
41
  projects = {
42
42
  list: async () => {
@@ -1 +1 @@
1
- {"version":3,"file":"surpay.js","sourceRoot":"","sources":["../src/surpay.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAwB1C,MAAM,OAAO,MAAO,SAAQ,YAAY;IACtC,YAAY,OAAsB;QAChC,MAAM,SAAS,GAAG,OAAO,OAAO,KAAK,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAA;QACzF,MAAM,UAAU,GAAG,OAAO,OAAO,KAAK,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,CAAA;QAC3F,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,IAAI,SAAS,IAAI,EAAE,CAAA;QACjD,MAAM,OAAO,GAAG,OAAO,EAAE,OAAO,IAAI,UAAU,CAAA;QAE9C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,gFAAgF,CAAC,CAAA;QACnG,CAAC;QAED,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAA;IAC5B,CAAC;IAED,SAAS,GAAG;QACV,IAAI,EAAE,CAAC,SAAiB,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAa,YAAY,SAAS,YAAY,CAAC;QAEpF,GAAG,EAAE,CAAC,SAAiB,EAAE,UAAkB,EAAE,EAAE,CAC7C,IAAI,CAAC,GAAG,CAAsB,YAAY,SAAS,aAAa,UAAU,EAAE,CAAC;KAChF,CAAA;IAED,QAAQ,GAAG;QACT,MAAM,EAAE,CAAC,MAA4B,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAwB,UAAU,EAAE,MAAM,CAAC;QAE9F,MAAM,EAAE,CAAC,SAAiB,EAAE,MAA4B,EAAE,EAAE,CAC1D,IAAI,CAAC,GAAG,CAAwB,YAAY,SAAS,EAAE,EAAE,MAAM,CAAC;QAElE,cAAc,EAAE,CAAC,SAAiB,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAsB,YAAY,SAAS,iBAAiB,CAAC;KAC7G,CAAA;IAED,MAAM,GAAG;QACP,MAAM,EAAE,CAAC,MAA0B,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAsB,gBAAgB,EAAE,MAAM,CAAC;KACjG,CAAA;IAED,QAAQ,GAAG;QACT,MAAM,EAAE,CAAC,MAA6B,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAyB,WAAW,EAAE,MAAM,CAAC;KAClG,CAAA;IAED,KAAK,GAAG,CAAC,MAAoB,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAgB,QAAQ,EAAE,MAAM,CAAC,CAAA;IAE5E,aAAa,GAAG;QACd,IAAI,EAAE,CAAC,SAAiB,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAiB,YAAY,SAAS,gBAAgB,CAAC;KAC7F,CAAA;IAED,YAAY,GAAG;QACb,IAAI,EAAE,CAAC,SAAiB,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAgB,YAAY,SAAS,eAAe,CAAC;KAC3F,CAAA;IAED,QAAQ,GAAG;QACT,IAAI,EAAE,KAAK,IAAI,EAAE;YACf,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAsC,WAAW,CAAC,CAAA;YAC/E,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;gBACjB,OAAO,MAAM,CAAA;YACf,CAAC;YACD,2DAA2D;YAC3D,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAE,MAAM,CAAC,IAAgC,CAAC,QAAQ,IAAI,EAAE,CAAA;YAC/G,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,CAAA;QAC7D,CAAC;KACF,CAAA;IAED,QAAQ,GAAG;QACT,OAAO,EAAE,CAAC,MAA6B,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAyB,mBAAmB,EAAE,MAAM,CAAC;QAE1G,GAAG,EAAE,CAAC,SAAiB,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAmB,aAAa,SAAS,EAAE,CAAC;QAEhF,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAqB,WAAW,CAAC;QAErD,MAAM,EAAE,CAAC,SAAiB,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAO,aAAa,SAAS,EAAE,CAAC;KAC3E,CAAA;CACF"}
1
+ {"version":3,"file":"surpay.js","sourceRoot":"","sources":["../src/surpay.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -55,7 +55,6 @@ export interface CustomerWithDetails extends Customer {
55
55
  subscriptions: SubscriptionSummary[];
56
56
  }
57
57
  export interface CreateProductRequest {
58
- project_id: string;
59
58
  product_group_id: string;
60
59
  name: string;
61
60
  description?: string;
@@ -92,7 +91,6 @@ export interface Product {
92
91
  version?: number | null;
93
92
  }
94
93
  export interface CreatePriceRequest {
95
- project_id: string;
96
94
  product_group_id: string;
97
95
  name?: string;
98
96
  description?: string;
@@ -192,8 +190,6 @@ export interface Subscription {
192
190
  project_id?: string | null;
193
191
  }
194
192
  export interface ConnectAccountRequest {
195
- /** Required for session auth, optional for API key auth */
196
- project_id?: string;
197
193
  processor: string;
198
194
  account_type?: string;
199
195
  country?: string;
@@ -217,10 +213,22 @@ export interface ConnectedAccount {
217
213
  business_type?: string | null;
218
214
  processor_account_id?: string | null;
219
215
  }
216
+ /**
217
+ * Response case format for API responses.
218
+ * - 'snake': Transform camelCase keys to snake_case (default, matches TypeScript types)
219
+ * - 'camel': Keep original camelCase keys from API
220
+ */
221
+ export type ResponseCase = 'snake' | 'camel';
220
222
  export interface SurpayConfig {
221
223
  /** Your Surpay API key (64 alphabetic characters) */
222
224
  apiKey?: string;
223
225
  /** Override the base URL (default: https://pay.surgent.dev) */
224
226
  baseUrl?: string;
227
+ /**
228
+ * Response key case format.
229
+ * - 'snake' (default): Transform API responses from camelCase to snake_case to match TypeScript types
230
+ * - 'camel': Keep original camelCase keys from API responses
231
+ */
232
+ responseCase?: ResponseCase;
225
233
  }
226
234
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Case transformation utilities for API response normalization.
3
+ *
4
+ * The Surpay API returns camelCase keys (e.g., `productGroupId`), but the SDK's
5
+ * TypeScript types use snake_case (e.g., `product_group_id`) to match Rust conventions.
6
+ * These utilities transform response data to match the expected types.
7
+ */
8
+ /**
9
+ * Recursively transforms all object keys from camelCase to snake_case.
10
+ *
11
+ * Handles:
12
+ * - Nested objects (recursively transforms)
13
+ * - Arrays of objects (transforms each element)
14
+ * - Null/undefined values (passes through unchanged)
15
+ * - Primitive values (passes through unchanged)
16
+ *
17
+ * @example
18
+ * camelToSnake({ productGroupId: 'pg_123', isDefault: true })
19
+ * // { product_group_id: 'pg_123', is_default: true }
20
+ *
21
+ * camelToSnake([{ customerId: 'cus_1' }, { customerId: 'cus_2' }])
22
+ * // [{ customer_id: 'cus_1' }, { customer_id: 'cus_2' }]
23
+ *
24
+ * @param input - The value to transform (object, array, or primitive)
25
+ * @returns The transformed value with snake_case keys
26
+ */
27
+ export declare const camelToSnake: <T>(input: T) => T;
28
+ //# sourceMappingURL=case.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"case.d.ts","sourceRoot":"","sources":["../../src/utils/case.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAaH;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,YAAY,GAAI,CAAC,EAAE,OAAO,CAAC,KAAG,CAyB1C,CAAA"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Case transformation utilities for API response normalization.
3
+ *
4
+ * The Surpay API returns camelCase keys (e.g., `productGroupId`), but the SDK's
5
+ * TypeScript types use snake_case (e.g., `product_group_id`) to match Rust conventions.
6
+ * These utilities transform response data to match the expected types.
7
+ */
8
+ /**
9
+ * Converts a single camelCase string to snake_case.
10
+ *
11
+ * @example
12
+ * stringToSnakeCase('productGroupId') // 'product_group_id'
13
+ * stringToSnakeCase('isDefault') // 'is_default'
14
+ */
15
+ const stringToSnakeCase = (str) => {
16
+ return str.replace(/([a-z])([A-Z])/g, '$1_$2').toLowerCase();
17
+ };
18
+ /**
19
+ * Recursively transforms all object keys from camelCase to snake_case.
20
+ *
21
+ * Handles:
22
+ * - Nested objects (recursively transforms)
23
+ * - Arrays of objects (transforms each element)
24
+ * - Null/undefined values (passes through unchanged)
25
+ * - Primitive values (passes through unchanged)
26
+ *
27
+ * @example
28
+ * camelToSnake({ productGroupId: 'pg_123', isDefault: true })
29
+ * // { product_group_id: 'pg_123', is_default: true }
30
+ *
31
+ * camelToSnake([{ customerId: 'cus_1' }, { customerId: 'cus_2' }])
32
+ * // [{ customer_id: 'cus_1' }, { customer_id: 'cus_2' }]
33
+ *
34
+ * @param input - The value to transform (object, array, or primitive)
35
+ * @returns The transformed value with snake_case keys
36
+ */
37
+ export const camelToSnake = (input) => {
38
+ // Handle null/undefined
39
+ if (input === null || input === undefined) {
40
+ return input;
41
+ }
42
+ // Handle arrays - transform each element
43
+ if (Array.isArray(input)) {
44
+ return input.map((item) => camelToSnake(item));
45
+ }
46
+ // Handle objects - transform keys and recurse into values
47
+ if (typeof input === 'object') {
48
+ const result = {};
49
+ for (const key of Object.keys(input)) {
50
+ const snakeKey = stringToSnakeCase(key);
51
+ result[snakeKey] = camelToSnake(input[key]);
52
+ }
53
+ return result;
54
+ }
55
+ // Primitives pass through unchanged
56
+ return input;
57
+ };
58
+ //# sourceMappingURL=case.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"case.js","sourceRoot":"","sources":["../../src/utils/case.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;;;GAMG;AACH,MAAM,iBAAiB,GAAG,CAAC,GAAW,EAAU,EAAE;IAChD,OAAO,GAAG,CAAC,OAAO,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC,WAAW,EAAE,CAAA;AAC9D,CAAC,CAAA;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAI,KAAQ,EAAK,EAAE;IAC7C,wBAAwB;IACxB,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QAC1C,OAAO,KAAK,CAAA;IACd,CAAC;IAED,yCAAyC;IACzC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAM,CAAA;IACrD,CAAC;IAED,0DAA0D;IAC1D,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,MAAM,GAA4B,EAAE,CAAA;QAE1C,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACrC,MAAM,QAAQ,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAA;YACvC,MAAM,CAAC,QAAQ,CAAC,GAAG,YAAY,CAAE,KAAiC,CAAC,GAAG,CAAC,CAAC,CAAA;QAC1E,CAAC;QAED,OAAO,MAAW,CAAA;IACpB,CAAC;IAED,oCAAoC;IACpC,OAAO,KAAK,CAAA;AACd,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=case.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"case.test.d.ts","sourceRoot":"","sources":["../../src/utils/case.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,316 @@
1
+ import { describe, test, expect } from 'bun:test';
2
+ import { camelToSnake } from './case.js';
3
+ // ============================================================================
4
+ // camelToSnake utility tests
5
+ // ============================================================================
6
+ describe('camelToSnake', () => {
7
+ describe('primitive values', () => {
8
+ test('passes through string unchanged', () => {
9
+ expect(camelToSnake('hello')).toBe('hello');
10
+ });
11
+ test('passes through number unchanged', () => {
12
+ expect(camelToSnake(42)).toBe(42);
13
+ expect(camelToSnake(3.14)).toBe(3.14);
14
+ });
15
+ test('passes through boolean unchanged', () => {
16
+ expect(camelToSnake(true)).toBe(true);
17
+ expect(camelToSnake(false)).toBe(false);
18
+ });
19
+ test('passes through null unchanged', () => {
20
+ expect(camelToSnake(null)).toBe(null);
21
+ });
22
+ test('passes through undefined unchanged', () => {
23
+ expect(camelToSnake(undefined)).toBe(undefined);
24
+ });
25
+ });
26
+ describe('simple objects', () => {
27
+ test('transforms camelCase keys to snake_case', () => {
28
+ const input = { productGroupId: 'pg_123', isDefault: true };
29
+ const result = camelToSnake(input);
30
+ expect(result).toEqual({ product_group_id: 'pg_123', is_default: true });
31
+ });
32
+ test('handles single-word keys (no transformation needed)', () => {
33
+ const input = { name: 'Test', slug: 'test-slug' };
34
+ const result = camelToSnake(input);
35
+ expect(result).toEqual({ name: 'Test', slug: 'test-slug' });
36
+ });
37
+ test('keys already in snake_case remain unchanged', () => {
38
+ const input = { product_group_id: 'pg_123', is_default: true };
39
+ const result = camelToSnake(input);
40
+ expect(result).toEqual({ product_group_id: 'pg_123', is_default: true });
41
+ });
42
+ test('handles empty object', () => {
43
+ expect(camelToSnake({})).toEqual({});
44
+ });
45
+ test('transforms mixed case keys correctly', () => {
46
+ const input = {
47
+ productGroupId: 'pg_123',
48
+ processorProductId: 'prod_abc',
49
+ isArchived: false,
50
+ createdAt: '2024-01-01',
51
+ };
52
+ const result = camelToSnake(input);
53
+ expect(result).toEqual({
54
+ product_group_id: 'pg_123',
55
+ processor_product_id: 'prod_abc',
56
+ is_archived: false,
57
+ created_at: '2024-01-01',
58
+ });
59
+ });
60
+ });
61
+ describe('nested objects', () => {
62
+ test('transforms nested object keys recursively', () => {
63
+ const input = {
64
+ customerId: 'cus_123',
65
+ customerData: {
66
+ emailAddress: 'test@example.com',
67
+ fullName: 'John Doe',
68
+ },
69
+ };
70
+ const result = camelToSnake(input);
71
+ expect(result).toEqual({
72
+ customer_id: 'cus_123',
73
+ customer_data: {
74
+ email_address: 'test@example.com',
75
+ full_name: 'John Doe',
76
+ },
77
+ });
78
+ });
79
+ test('handles deeply nested objects', () => {
80
+ const input = {
81
+ levelOne: {
82
+ levelTwo: {
83
+ levelThree: {
84
+ deepValue: 'found',
85
+ },
86
+ },
87
+ },
88
+ };
89
+ const result = camelToSnake(input);
90
+ expect(result).toEqual({
91
+ level_one: {
92
+ level_two: {
93
+ level_three: {
94
+ deep_value: 'found',
95
+ },
96
+ },
97
+ },
98
+ });
99
+ });
100
+ test('handles null values in nested objects', () => {
101
+ const input = {
102
+ productId: 'prod_123',
103
+ description: null,
104
+ metadata: {
105
+ customField: null,
106
+ },
107
+ };
108
+ const result = camelToSnake(input);
109
+ expect(result).toEqual({
110
+ product_id: 'prod_123',
111
+ description: null,
112
+ metadata: {
113
+ custom_field: null,
114
+ },
115
+ });
116
+ });
117
+ });
118
+ describe('arrays', () => {
119
+ test('transforms array of objects', () => {
120
+ const input = [{ customerId: 'cus_1' }, { customerId: 'cus_2' }];
121
+ const result = camelToSnake(input);
122
+ expect(result).toEqual([{ customer_id: 'cus_1' }, { customer_id: 'cus_2' }]);
123
+ });
124
+ test('handles empty array', () => {
125
+ expect(camelToSnake([])).toEqual([]);
126
+ });
127
+ test('handles array of primitives (unchanged)', () => {
128
+ const input = ['a', 'b', 'c'];
129
+ expect(camelToSnake(input)).toEqual(['a', 'b', 'c']);
130
+ });
131
+ test('handles array of mixed types', () => {
132
+ const input = [{ productId: 'prod_1' }, null, 'string', 42];
133
+ const result = camelToSnake(input);
134
+ expect(result).toEqual([{ product_id: 'prod_1' }, null, 'string', 42]);
135
+ });
136
+ test('handles nested arrays', () => {
137
+ const input = {
138
+ items: [
139
+ { itemId: 'item_1', tags: ['tag1', 'tag2'] },
140
+ { itemId: 'item_2', tags: ['tag3'] },
141
+ ],
142
+ };
143
+ const result = camelToSnake(input);
144
+ expect(result).toEqual({
145
+ items: [
146
+ { item_id: 'item_1', tags: ['tag1', 'tag2'] },
147
+ { item_id: 'item_2', tags: ['tag3'] },
148
+ ],
149
+ });
150
+ });
151
+ });
152
+ });
153
+ // ============================================================================
154
+ // Response shape validation tests
155
+ // ============================================================================
156
+ describe('API response normalization', () => {
157
+ describe('Product response', () => {
158
+ test('transforms API response to match Product type', () => {
159
+ // Simulated API response (camelCase)
160
+ const apiResponse = {
161
+ id: 'prod_123',
162
+ productGroupId: 'pg_456',
163
+ name: 'Pro Plan',
164
+ slug: 'pro-plan',
165
+ description: 'Professional tier',
166
+ isArchived: false,
167
+ isDefault: true,
168
+ processorProductId: 'stripe_prod_abc',
169
+ projectId: 'proj_789',
170
+ version: 1,
171
+ };
172
+ const normalized = camelToSnake(apiResponse);
173
+ // Verify shape matches Product type
174
+ expect(normalized.id).toBe('prod_123');
175
+ expect(normalized.product_group_id).toBe('pg_456');
176
+ expect(normalized.name).toBe('Pro Plan');
177
+ expect(normalized.slug).toBe('pro-plan');
178
+ expect(normalized.description).toBe('Professional tier');
179
+ expect(normalized.is_archived).toBe(false);
180
+ expect(normalized.is_default).toBe(true);
181
+ expect(normalized.processor_product_id).toBe('stripe_prod_abc');
182
+ expect(normalized.project_id).toBe('proj_789');
183
+ expect(normalized.version).toBe(1);
184
+ });
185
+ test('handles Product with null optional fields', () => {
186
+ const apiResponse = {
187
+ id: 'prod_123',
188
+ productGroupId: 'pg_456',
189
+ name: 'Basic Plan',
190
+ slug: 'basic-plan',
191
+ description: null,
192
+ isArchived: null,
193
+ isDefault: null,
194
+ processorProductId: null,
195
+ projectId: null,
196
+ version: null,
197
+ };
198
+ const normalized = camelToSnake(apiResponse);
199
+ expect(normalized.id).toBe('prod_123');
200
+ expect(normalized.product_group_id).toBe('pg_456');
201
+ expect(normalized.description).toBeNull();
202
+ expect(normalized.is_archived).toBeNull();
203
+ expect(normalized.is_default).toBeNull();
204
+ expect(normalized.processor_product_id).toBeNull();
205
+ expect(normalized.project_id).toBeNull();
206
+ expect(normalized.version).toBeNull();
207
+ });
208
+ });
209
+ describe('ProductPrice response', () => {
210
+ test('transforms API response to match ProductPrice type', () => {
211
+ const apiResponse = {
212
+ id: 'price_123',
213
+ name: 'Monthly',
214
+ description: 'Monthly billing',
215
+ priceAmount: 1999,
216
+ priceCurrency: 'USD',
217
+ isDefault: true,
218
+ recurringInterval: 'month',
219
+ };
220
+ const normalized = camelToSnake(apiResponse);
221
+ expect(normalized.id).toBe('price_123');
222
+ expect(normalized.name).toBe('Monthly');
223
+ expect(normalized.description).toBe('Monthly billing');
224
+ expect(normalized.price_amount).toBe(1999);
225
+ expect(normalized.price_currency).toBe('USD');
226
+ expect(normalized.is_default).toBe(true);
227
+ expect(normalized.recurring_interval).toBe('month');
228
+ });
229
+ });
230
+ describe('ProductWithPrices response', () => {
231
+ test('transforms nested product with prices array', () => {
232
+ const apiResponse = {
233
+ product: {
234
+ id: 'prod_123',
235
+ productGroupId: 'pg_456',
236
+ name: 'Enterprise',
237
+ slug: 'enterprise',
238
+ description: 'Enterprise tier',
239
+ isArchived: false,
240
+ isDefault: false,
241
+ processorProductId: 'stripe_prod_xyz',
242
+ projectId: 'proj_789',
243
+ version: 2,
244
+ },
245
+ prices: [
246
+ {
247
+ id: 'price_monthly',
248
+ name: 'Monthly',
249
+ description: null,
250
+ priceAmount: 9900,
251
+ priceCurrency: 'USD',
252
+ isDefault: true,
253
+ recurringInterval: 'month',
254
+ },
255
+ {
256
+ id: 'price_yearly',
257
+ name: 'Yearly',
258
+ description: 'Save 20%',
259
+ priceAmount: 95000,
260
+ priceCurrency: 'USD',
261
+ isDefault: false,
262
+ recurringInterval: 'year',
263
+ },
264
+ ],
265
+ };
266
+ const normalized = camelToSnake(apiResponse);
267
+ // Verify product
268
+ expect(normalized.product.id).toBe('prod_123');
269
+ expect(normalized.product.product_group_id).toBe('pg_456');
270
+ expect(normalized.product.processor_product_id).toBe('stripe_prod_xyz');
271
+ // Verify prices array
272
+ expect(normalized.prices).toHaveLength(2);
273
+ const price0 = normalized.prices[0];
274
+ const price1 = normalized.prices[1];
275
+ expect(price0).toBeDefined();
276
+ expect(price0.id).toBe('price_monthly');
277
+ expect(price0.price_amount).toBe(9900);
278
+ expect(price0.recurring_interval).toBe('month');
279
+ expect(price1).toBeDefined();
280
+ expect(price1.id).toBe('price_yearly');
281
+ expect(price1.price_amount).toBe(95000);
282
+ expect(price1.recurring_interval).toBe('year');
283
+ });
284
+ });
285
+ describe('array of Products response', () => {
286
+ test('transforms array of products from list endpoint', () => {
287
+ const apiResponse = [
288
+ {
289
+ id: 'prod_1',
290
+ productGroupId: 'pg_1',
291
+ name: 'Basic',
292
+ slug: 'basic',
293
+ isDefault: true,
294
+ },
295
+ {
296
+ id: 'prod_2',
297
+ productGroupId: 'pg_1',
298
+ name: 'Pro',
299
+ slug: 'pro',
300
+ isDefault: false,
301
+ },
302
+ ];
303
+ const normalized = camelToSnake(apiResponse);
304
+ expect(normalized).toHaveLength(2);
305
+ const prod0 = normalized[0];
306
+ const prod1 = normalized[1];
307
+ expect(prod0).toBeDefined();
308
+ expect(prod0.product_group_id).toBe('pg_1');
309
+ expect(prod0.is_default).toBe(true);
310
+ expect(prod1).toBeDefined();
311
+ expect(prod1.product_group_id).toBe('pg_1');
312
+ expect(prod1.is_default).toBe(false);
313
+ });
314
+ });
315
+ });
316
+ //# sourceMappingURL=case.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"case.test.js","sourceRoot":"","sources":["../../src/utils/case.test.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,24 @@
1
1
  import { SurpayError } from '../errors.js';
2
- import type { Result } from '../types.js';
2
+ import type { ResponseCase, Result } from '../types.js';
3
+ /**
4
+ * Options for response processing.
5
+ */
6
+ export interface ToResultOptions {
7
+ /**
8
+ * Response key case format.
9
+ * - 'snake' (default): Transform camelCase keys to snake_case
10
+ * - 'camel': Keep original camelCase keys
11
+ */
12
+ responseCase?: ResponseCase;
13
+ }
3
14
  /**
4
15
  * Converts a fetch Response into a Result container.
5
16
  *
6
17
  * - Success (2xx): { data: T, error: null, statusCode }
7
18
  * - Failure (non-2xx): { data: null, error: SurpayError, statusCode }
19
+ *
20
+ * When responseCase is 'snake' (default), transforms camelCase API response keys
21
+ * to snake_case to match the SDK's TypeScript type definitions.
8
22
  */
9
- export declare const toResult: <T>(response: Response) => Promise<Result<T, SurpayError>>;
23
+ export declare const toResult: <T>(response: Response, options?: ToResultOptions) => Promise<Result<T, SurpayError>>;
10
24
  //# sourceMappingURL=result.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"result.d.ts","sourceRoot":"","sources":["../../src/utils/result.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC1C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEzC;;;;;GAKG;AACH,eAAO,MAAM,QAAQ,GAAU,CAAC,EAAE,UAAU,QAAQ,KAAG,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,WAAW,CAAC,CAmCpF,CAAA"}
1
+ {"version":3,"file":"result.d.ts","sourceRoot":"","sources":["../../src/utils/result.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC1C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAGvD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B;;;;OAIG;IACH,YAAY,CAAC,EAAE,YAAY,CAAA;CAC5B;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,QAAQ,GAAU,CAAC,EAC9B,UAAU,QAAQ,EAClB,UAAS,eAAoB,KAC5B,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,WAAW,CAAC,CAqDhC,CAAA"}
@@ -1,11 +1,16 @@
1
1
  import { SurpayError } from '../errors.js';
2
+ import { camelToSnake } from './case.js';
2
3
  /**
3
4
  * Converts a fetch Response into a Result container.
4
5
  *
5
6
  * - Success (2xx): { data: T, error: null, statusCode }
6
7
  * - Failure (non-2xx): { data: null, error: SurpayError, statusCode }
8
+ *
9
+ * When responseCase is 'snake' (default), transforms camelCase API response keys
10
+ * to snake_case to match the SDK's TypeScript type definitions.
7
11
  */
8
- export const toResult = async (response) => {
12
+ export const toResult = async (response, options = {}) => {
13
+ const { responseCase = 'snake' } = options;
9
14
  const statusCode = response.status;
10
15
  if (statusCode < 200 || statusCode >= 300) {
11
16
  let errorData = {};
@@ -34,7 +39,23 @@ export const toResult = async (response) => {
34
39
  if (!text) {
35
40
  return { data: {}, error: null, statusCode };
36
41
  }
37
- const data = JSON.parse(text);
42
+ let parsed;
43
+ try {
44
+ parsed = JSON.parse(text);
45
+ }
46
+ catch {
47
+ return {
48
+ data: null,
49
+ error: new SurpayError({
50
+ message: 'Server returned invalid JSON response',
51
+ code: 'invalid_json_response',
52
+ statusCode,
53
+ }),
54
+ statusCode,
55
+ };
56
+ }
57
+ // Normalize response keys to snake_case if configured (default behavior)
58
+ const data = responseCase === 'snake' ? camelToSnake(parsed) : parsed;
38
59
  return { data, error: null, statusCode };
39
60
  };
40
61
  const statusToCode = (status) => {
@@ -1 +1 @@
1
- {"version":3,"file":"result.js","sourceRoot":"","sources":["../../src/utils/result.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAG1C;;;;;GAKG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,EAAK,QAAkB,EAAmC,EAAE;IACvF,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAA;IAElC,IAAI,UAAU,GAAG,GAAG,IAAI,UAAU,IAAI,GAAG,EAAE,CAAC;QAC1C,IAAI,SAAS,GAAwC,EAAE,CAAA;QACvD,IAAI,CAAC;YACH,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;QACnC,CAAC;QAAC,MAAM,CAAC;YACP,6BAA6B;QAC/B,CAAC;QAED,OAAO;YACL,IAAI,EAAE,IAAI;YACV,KAAK,EAAE,IAAI,WAAW,CAAC;gBACrB,OAAO,EAAE,SAAS,EAAE,OAAO,IAAI,8BAA8B,UAAU,EAAE;gBACzE,IAAI,EAAE,SAAS,EAAE,IAAI,IAAI,YAAY,CAAC,UAAU,CAAC;gBACjD,UAAU;aACX,CAAC;YACF,UAAU;SACX,CAAA;IACH,CAAC;IAED,wBAAwB;IACxB,IAAI,UAAU,KAAK,GAAG,EAAE,CAAC;QACvB,OAAO,EAAE,IAAI,EAAE,EAAO,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,CAAA;IACnD,CAAC;IAED,4BAA4B;IAC5B,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;IAClC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,EAAE,IAAI,EAAE,EAAO,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,CAAA;IACnD,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAM,CAAA;IAClC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,CAAA;AAC1C,CAAC,CAAA;AAED,MAAM,YAAY,GAAG,CAAC,MAAc,EAAU,EAAE;IAC9C,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,GAAG;YACN,OAAO,aAAa,CAAA;QACtB,KAAK,GAAG;YACN,OAAO,cAAc,CAAA;QACvB,KAAK,GAAG;YACN,OAAO,WAAW,CAAA;QACpB,KAAK,GAAG;YACN,OAAO,WAAW,CAAA;QACpB,KAAK,GAAG;YACN,OAAO,UAAU,CAAA;QACnB,KAAK,GAAG;YACN,OAAO,kBAAkB,CAAA;QAC3B,KAAK,GAAG;YACN,OAAO,qBAAqB,CAAA;QAC9B,KAAK,GAAG;YACN,OAAO,gBAAgB,CAAA;QACzB;YACE,OAAO,eAAe,CAAA;IAC1B,CAAC;AACH,CAAC,CAAA"}
1
+ {"version":3,"file":"result.js","sourceRoot":"","sources":["../../src/utils/result.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAE1C,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAcxC;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,EAC3B,QAAkB,EAClB,UAA2B,EAAE,EACI,EAAE;IACnC,MAAM,EAAE,YAAY,GAAG,OAAO,EAAE,GAAG,OAAO,CAAA;IAC1C,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAA;IAElC,IAAI,UAAU,GAAG,GAAG,IAAI,UAAU,IAAI,GAAG,EAAE,CAAC;QAC1C,IAAI,SAAS,GAAwC,EAAE,CAAA;QACvD,IAAI,CAAC;YACH,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;QACnC,CAAC;QAAC,MAAM,CAAC;YACP,6BAA6B;QAC/B,CAAC;QAED,OAAO;YACL,IAAI,EAAE,IAAI;YACV,KAAK,EAAE,IAAI,WAAW,CAAC;gBACrB,OAAO,EAAE,SAAS,EAAE,OAAO,IAAI,8BAA8B,UAAU,EAAE;gBACzE,IAAI,EAAE,SAAS,EAAE,IAAI,IAAI,YAAY,CAAC,UAAU,CAAC;gBACjD,UAAU;aACX,CAAC;YACF,UAAU;SACX,CAAA;IACH,CAAC;IAED,wBAAwB;IACxB,IAAI,UAAU,KAAK,GAAG,EAAE,CAAC;QACvB,OAAO,EAAE,IAAI,EAAE,EAAO,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,CAAA;IACnD,CAAC;IAED,4BAA4B;IAC5B,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;IAClC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,EAAE,IAAI,EAAE,EAAO,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,CAAA;IACnD,CAAC;IAED,IAAI,MAAe,CAAA;IACnB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;YACL,IAAI,EAAE,IAAI;YACV,KAAK,EAAE,IAAI,WAAW,CAAC;gBACrB,OAAO,EAAE,uCAAuC;gBAChD,IAAI,EAAE,uBAAuB;gBAC7B,UAAU;aACX,CAAC;YACF,UAAU;SACX,CAAA;IACH,CAAC;IAED,yEAAyE;IACzE,MAAM,IAAI,GAAG,YAAY,KAAK,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,MAAW,CAAC,CAAC,CAAC,CAAE,MAAY,CAAA;IAEjF,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,CAAA;AAC1C,CAAC,CAAA;AAED,MAAM,YAAY,GAAG,CAAC,MAAc,EAAU,EAAE;IAC9C,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,GAAG;YACN,OAAO,aAAa,CAAA;QACtB,KAAK,GAAG;YACN,OAAO,cAAc,CAAA;QACvB,KAAK,GAAG;YACN,OAAO,WAAW,CAAA;QACpB,KAAK,GAAG;YACN,OAAO,WAAW,CAAA;QACpB,KAAK,GAAG;YACN,OAAO,UAAU,CAAA;QACnB,KAAK,GAAG;YACN,OAAO,kBAAkB,CAAA;QAC3B,KAAK,GAAG;YACN,OAAO,qBAAqB,CAAA;QAC9B,KAAK,GAAG;YACN,OAAO,gBAAgB,CAAA;QACzB;YACE,OAAO,eAAe,CAAA;IAC1B,CAAC;AACH,CAAC,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@surgent-dev/surpay",
3
- "version": "0.1.6",
3
+ "version": "0.2.0",
4
4
  "description": "Official Surpay SDK for TypeScript/JavaScript",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",