chargefy-js 1.1.11 → 1.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 +56 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/models/checkout.d.ts +9 -1
- package/dist/models/checkout.d.ts.map +1 -1
- package/dist/models/components/checkoutpublic.d.ts +3 -0
- package/dist/models/components/checkoutpublic.d.ts.map +1 -1
- package/dist/models/cross-sell.d.ts +18 -0
- package/dist/models/cross-sell.d.ts.map +1 -0
- package/dist/models/cross-sell.js +10 -0
- package/dist/models/sub-organization.d.ts +1 -16
- package/dist/models/sub-organization.d.ts.map +1 -1
- package/dist/models/subscription.d.ts +14 -0
- package/dist/models/subscription.d.ts.map +1 -1
- package/dist/namespaces/checkouts.d.ts.map +1 -1
- package/dist/namespaces/checkouts.js +4 -1
- package/dist/namespaces/subscriptions.d.ts +6 -1
- package/dist/namespaces/subscriptions.d.ts.map +1 -1
- package/dist/namespaces/subscriptions.js +21 -0
- package/dist/utils/transformers.d.ts +10 -0
- package/dist/utils/transformers.d.ts.map +1 -1
- package/dist/utils/transformers.js +43 -0
- package/package.json +1 -1
- package/src/index.ts +2 -0
- package/src/models/checkout.ts +10 -1
- package/src/models/components/checkoutpublic.ts +5 -0
- package/src/models/cross-sell.ts +18 -0
- package/src/models/sub-organization.ts +1 -16
- package/src/models/subscription.ts +16 -0
- package/src/namespaces/checkouts.ts +4 -1
- package/src/namespaces/subscriptions.ts +28 -1
- package/src/utils/transformers.ts +54 -0
package/README.md
CHANGED
|
@@ -384,6 +384,29 @@ const result = await chargefy.checkouts.create({
|
|
|
384
384
|
// result.value → Checkout (has clientSecret)
|
|
385
385
|
```
|
|
386
386
|
|
|
387
|
+
### Create checkout with bundle (cross-sell)
|
|
388
|
+
|
|
389
|
+
When the main product is recurring, add-on products must use the **same billing period** (e.g. both monthly). `amount` is the **bundle total** in cents; each `crossSell` line uses `amountCents` as the line total (quantity already applied).
|
|
390
|
+
|
|
391
|
+
```ts
|
|
392
|
+
const result = await chargefy.checkouts.create({
|
|
393
|
+
organizationId: 'org_xxx',
|
|
394
|
+
productId: 'prod_main',
|
|
395
|
+
amount: 15000, // R$ 150,00 total (main share + add-ons)
|
|
396
|
+
crossSell: [
|
|
397
|
+
{
|
|
398
|
+
productId: 'prod_addon',
|
|
399
|
+
productPriceId: 'price_xxx', // optional
|
|
400
|
+
quantity: 1,
|
|
401
|
+
amountCents: 5000,
|
|
402
|
+
nameSnapshot: 'Extra seats',
|
|
403
|
+
},
|
|
404
|
+
],
|
|
405
|
+
customerEmail: 'customer@example.com',
|
|
406
|
+
successUrl: 'https://mysite.com/success',
|
|
407
|
+
})
|
|
408
|
+
```
|
|
409
|
+
|
|
387
410
|
### Get a checkout
|
|
388
411
|
|
|
389
412
|
```ts
|
|
@@ -449,6 +472,37 @@ if (result.ok) {
|
|
|
449
472
|
|
|
450
473
|
---
|
|
451
474
|
|
|
475
|
+
## Subscriptions
|
|
476
|
+
|
|
477
|
+
List and fetch subscriptions for your organization. Responses may include **`crossSell`**: bundle add-on lines; **`amount`** is the recurring bundle total in cents.
|
|
478
|
+
|
|
479
|
+
```ts
|
|
480
|
+
const list = await chargefy.subscriptions.list({ active: true, limit: 50 })
|
|
481
|
+
const one = await chargefy.subscriptions.get('sub_xxx')
|
|
482
|
+
if (one.ok && one.value.crossSell?.length) {
|
|
483
|
+
console.log('Bundle add-ons:', one.value.crossSell)
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
// Update next due date, total, and/or bundle lines (OAT / session with write scope)
|
|
487
|
+
await chargefy.subscriptions.updateBilling('sub_xxx', {
|
|
488
|
+
dueDate: '2025-06-15',
|
|
489
|
+
amount: 12000,
|
|
490
|
+
crossSell: [
|
|
491
|
+
{
|
|
492
|
+
productId: 'prod_addon',
|
|
493
|
+
productPriceId: null,
|
|
494
|
+
quantity: 1,
|
|
495
|
+
amountCents: 2000,
|
|
496
|
+
nameSnapshot: 'Add-on',
|
|
497
|
+
},
|
|
498
|
+
],
|
|
499
|
+
})
|
|
500
|
+
```
|
|
501
|
+
|
|
502
|
+
Pass **`crossSell: []`** to clear add-ons. Omit **`crossSell`** on `updateBilling` if you only change `dueDate` or `amount` and want to keep existing lines unchanged.
|
|
503
|
+
|
|
504
|
+
---
|
|
505
|
+
|
|
452
506
|
## Error Handling
|
|
453
507
|
|
|
454
508
|
```ts
|
|
@@ -501,6 +555,8 @@ import type {
|
|
|
501
555
|
CheckoutConfirmed,
|
|
502
556
|
ConfirmCheckoutRequest,
|
|
503
557
|
CardData,
|
|
558
|
+
CrossSellLine,
|
|
559
|
+
UpdateSubscriptionBillingRequest,
|
|
504
560
|
ListResponse,
|
|
505
561
|
Result,
|
|
506
562
|
// Sub-organizations & onboarding
|
package/dist/index.d.ts
CHANGED
|
@@ -9,10 +9,11 @@ export type { Organization } from './models/organization.js';
|
|
|
9
9
|
export type { Product, ProductPrice, CreateProductRequest, UpdateProductRequest, } from './models/product.js';
|
|
10
10
|
export type { CheckoutLink, CreateCheckoutLinkRequest, UpdateCheckoutLinkRequest, } from './models/checkoutLink.js';
|
|
11
11
|
export type { Buyer, BuyerListItem, BuyerListParams, CreateBuyerRequest, CreateBuyerResponse, BuyerLookupResult, } from './models/buyer.js';
|
|
12
|
+
export type { CrossSellLine } from './models/cross-sell.js';
|
|
12
13
|
export type { Checkout, CheckoutConfirmed, CheckoutProduct, InstallmentOption, CreateCheckoutRequest, UpdateCheckoutRequest, ConfirmCheckoutRequest, GeneratePixRequest, CardData, PixPaymentData, } from './models/checkout.js';
|
|
13
14
|
export type { ListResponse, ListParams } from './models/pagination.js';
|
|
14
15
|
export type { Sale, SaleListParams, SaleStatus, PaymentType, SaleCardData, SaleBoletoData, SalePixData, SaleCustomer, SaleProduct, } from './models/sale.js';
|
|
15
|
-
export type { Subscription, SubscriptionListParams, SubscriptionStatus, SubscriptionRecurringInterval, CustomerCancellationReason, SubscriptionProduct, SubscriptionCustomer, } from './models/subscription.js';
|
|
16
|
+
export type { Subscription, SubscriptionListParams, SubscriptionStatus, SubscriptionRecurringInterval, CustomerCancellationReason, SubscriptionProduct, SubscriptionCustomer, UpdateSubscriptionBillingRequest, } from './models/subscription.js';
|
|
16
17
|
export type { SubOrganizationListItem, SubOrgAddress, SubOrgIndividual, SubOrgBusiness, SubOrgBankAccount, CreateSubOrganizationRequest, CreateSubOrganizationResponse, EmbedSubmitRequest, CheckExistingResponse, LinkExistingResponse, CreateProductForChildRequest, OrgAccessToken, CreateOrgAccessTokenRequest, CreateOrgAccessTokenResponse, } from './models/sub-organization.js';
|
|
17
18
|
export type { WebhookEndpoint, WebhookEventType, WebhookFormat, CreateWebhookEndpointRequest, UpdateWebhookEndpointRequest, WebhookEndpointListParams, WebhookDeliveryListParams, } from './models/webhook.js';
|
|
18
19
|
export { SUBORGANIZATION_EVENTS } from './models/webhook.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,QAAQ,EAAE,KAAK,mBAAmB,EAAE,MAAM,eAAe,CAAA;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AACxC,YAAY,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAGzC,YAAY,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAG3C,YAAY,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAC5D,YAAY,EACV,OAAO,EACP,YAAY,EACZ,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,qBAAqB,CAAA;AAC5B,YAAY,EACV,YAAY,EACZ,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,0BAA0B,CAAA;AACjC,YAAY,EACV,KAAK,EACL,aAAa,EACb,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,mBAAmB,CAAA;AAC1B,YAAY,EACV,QAAQ,EACR,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,EACtB,kBAAkB,EAClB,QAAQ,EACR,cAAc,GACf,MAAM,sBAAsB,CAAA;AAC7B,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AACtE,YAAY,EACV,IAAI,EACJ,cAAc,EACd,UAAU,EACV,WAAW,EACX,YAAY,EACZ,cAAc,EACd,WAAW,EACX,YAAY,EACZ,WAAW,GACZ,MAAM,kBAAkB,CAAA;AACzB,YAAY,EACV,YAAY,EACZ,sBAAsB,EACtB,kBAAkB,EAClB,6BAA6B,EAC7B,0BAA0B,EAC1B,mBAAmB,EACnB,oBAAoB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { CrossSellLine } from './cross-sell.js';
|
|
1
2
|
export interface InstallmentOption {
|
|
2
3
|
installments: number;
|
|
3
4
|
/** Amount per installment in cents. */
|
|
@@ -39,6 +40,8 @@ export interface Checkout {
|
|
|
39
40
|
/** Installment fee options keyed by card brand ('Visa', 'MasterCard', 'Elo', 'American Express', 'default'). */
|
|
40
41
|
installmentOptions?: Record<string, InstallmentOption[]> | null;
|
|
41
42
|
product?: CheckoutProduct;
|
|
43
|
+
/** Bundle add-on lines; `amount` is the bundle total in cents. */
|
|
44
|
+
crossSell?: CrossSellLine[];
|
|
42
45
|
metadata?: Record<string, unknown>;
|
|
43
46
|
createdAt?: string;
|
|
44
47
|
}
|
|
@@ -72,8 +75,13 @@ export interface CreateCheckoutRequest {
|
|
|
72
75
|
customerEmail?: string;
|
|
73
76
|
customerName?: string;
|
|
74
77
|
customerTaxId?: string;
|
|
75
|
-
/**
|
|
78
|
+
/**
|
|
79
|
+
* Bundle total in cents when using cross-sell add-ons.
|
|
80
|
+
* Required (positive) when `crossSell` is non-empty.
|
|
81
|
+
*/
|
|
76
82
|
amount?: number;
|
|
83
|
+
/** Add-on bundle lines; omit or use empty array for main product only. */
|
|
84
|
+
crossSell?: CrossSellLine[];
|
|
77
85
|
successUrl?: string;
|
|
78
86
|
requireBillingAddress?: boolean;
|
|
79
87
|
metadata?: Record<string, unknown>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkout.d.ts","sourceRoot":"","sources":["../../src/models/checkout.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"checkout.d.ts","sourceRoot":"","sources":["../../src/models/checkout.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* CheckoutPublic - Public-facing checkout model
|
|
3
3
|
* Compatible with Polar's CheckoutPublic structure but with Celcoin payment processor
|
|
4
4
|
*/
|
|
5
|
+
import type { CrossSellLine } from '../cross-sell.js';
|
|
5
6
|
export interface Address {
|
|
6
7
|
line1?: string;
|
|
7
8
|
line2?: string | null;
|
|
@@ -106,6 +107,8 @@ export interface CheckoutPublic {
|
|
|
106
107
|
customFieldData?: Record<string, any>;
|
|
107
108
|
paymentProcessorMetadata: Record<string, any>;
|
|
108
109
|
subscriptionId?: string | null;
|
|
110
|
+
/** Bundle add-on lines; `amount` / `totalAmount` reflect bundle total. */
|
|
111
|
+
crossSell?: CrossSellLine[];
|
|
109
112
|
metadata?: Record<string, any>;
|
|
110
113
|
customerMetadata?: Record<string, string | number | boolean>;
|
|
111
114
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkoutpublic.d.ts","sourceRoot":"","sources":["../../../src/models/components/checkoutpublic.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"checkoutpublic.d.ts","sourceRoot":"","sources":["../../../src/models/components/checkoutpublic.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bundle add-on line (cross-sell) aligned with API JSON after camelCase transformation.
|
|
3
|
+
*
|
|
4
|
+
* Rules (server-side):
|
|
5
|
+
* - Checkout/subscription `amount` is the **bundle total** in cents.
|
|
6
|
+
* - Sum of `amountCents` per line must not exceed that total.
|
|
7
|
+
* - Add-on products must belong to the same organization and match the main product's
|
|
8
|
+
* recurring billing period when the main product is recurring.
|
|
9
|
+
*/
|
|
10
|
+
export interface CrossSellLine {
|
|
11
|
+
productId: string;
|
|
12
|
+
productPriceId?: string | null;
|
|
13
|
+
quantity: number;
|
|
14
|
+
/** Line total in cents (quantity already applied). */
|
|
15
|
+
amountCents: number;
|
|
16
|
+
nameSnapshot: string;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=cross-sell.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cross-sell.d.ts","sourceRoot":"","sources":["../../src/models/cross-sell.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAA;IACjB,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,QAAQ,EAAE,MAAM,CAAA;IAChB,sDAAsD;IACtD,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;CACrB"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bundle add-on line (cross-sell) aligned with API JSON after camelCase transformation.
|
|
3
|
+
*
|
|
4
|
+
* Rules (server-side):
|
|
5
|
+
* - Checkout/subscription `amount` is the **bundle total** in cents.
|
|
6
|
+
* - Sum of `amountCents` per line must not exceed that total.
|
|
7
|
+
* - Add-on products must belong to the same organization and match the main product's
|
|
8
|
+
* recurring billing period when the main product is recurring.
|
|
9
|
+
*/
|
|
10
|
+
export {};
|
|
@@ -112,27 +112,12 @@ export interface CreateProductForChildRequest {
|
|
|
112
112
|
referenceId?: string | null;
|
|
113
113
|
}
|
|
114
114
|
export interface CreateSubOrganizationResponse {
|
|
115
|
-
|
|
115
|
+
suborganization: {
|
|
116
116
|
id: string;
|
|
117
117
|
name: string;
|
|
118
118
|
slug: string;
|
|
119
119
|
status: string;
|
|
120
120
|
};
|
|
121
|
-
seller: {
|
|
122
|
-
id: string;
|
|
123
|
-
zoop_seller_id: string;
|
|
124
|
-
status: string;
|
|
125
|
-
seller_type: string;
|
|
126
|
-
reused_existing_seller: boolean;
|
|
127
|
-
};
|
|
128
|
-
bank_account: {
|
|
129
|
-
id: string;
|
|
130
|
-
zoop_bank_account_id: string;
|
|
131
|
-
bank_code: string;
|
|
132
|
-
account_number_last4: string;
|
|
133
|
-
account_type: string;
|
|
134
|
-
is_verified: boolean;
|
|
135
|
-
} | null;
|
|
136
121
|
/** The API key for the new organization. Shown once — store it securely. */
|
|
137
122
|
api_key: string;
|
|
138
123
|
status: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sub-organization.d.ts","sourceRoot":"","sources":["../../src/models/sub-organization.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"sub-organization.d.ts","sourceRoot":"","sources":["../../src/models/sub-organization.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { CrossSellLine } from './cross-sell.js';
|
|
1
2
|
export type SubscriptionStatus = 'incomplete' | 'incomplete_expired' | 'trialing' | 'active' | 'past_due' | 'canceled' | 'unpaid';
|
|
2
3
|
export type SubscriptionRecurringInterval = 'month' | 'year';
|
|
3
4
|
export type CustomerCancellationReason = 'customer_service' | 'low_quality' | 'missing_features' | 'switched_service' | 'too_complex' | 'too_expensive' | 'unused' | 'other';
|
|
@@ -46,10 +47,23 @@ export interface Subscription {
|
|
|
46
47
|
checkoutId?: string | null;
|
|
47
48
|
userMetadata?: Record<string, unknown>;
|
|
48
49
|
cardData?: SubscriptionCardData | null;
|
|
50
|
+
/** Bundle add-on snapshot; `amount` is the recurring bundle total in cents. */
|
|
51
|
+
crossSell?: CrossSellLine[];
|
|
49
52
|
customer?: SubscriptionCustomer;
|
|
50
53
|
product?: SubscriptionProduct;
|
|
51
54
|
discount?: SubscriptionDiscount;
|
|
52
55
|
}
|
|
56
|
+
export interface UpdateSubscriptionBillingRequest {
|
|
57
|
+
/** ISO date YYYY-MM-DD (next charge / period end alignment). */
|
|
58
|
+
dueDate?: string;
|
|
59
|
+
/** Bundle total in cents. Required when updating a non-empty `crossSell`. */
|
|
60
|
+
amount?: number;
|
|
61
|
+
/**
|
|
62
|
+
* When set (including `[]`), replaces stored bundle lines.
|
|
63
|
+
* Omit the property to leave `cross_sell` unchanged on the server.
|
|
64
|
+
*/
|
|
65
|
+
crossSell?: CrossSellLine[];
|
|
66
|
+
}
|
|
53
67
|
export interface SubscriptionListParams {
|
|
54
68
|
organizationId?: string | string[];
|
|
55
69
|
customerId?: string | string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subscription.d.ts","sourceRoot":"","sources":["../../src/models/subscription.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"subscription.d.ts","sourceRoot":"","sources":["../../src/models/subscription.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkouts.d.ts","sourceRoot":"","sources":["../../src/namespaces/checkouts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,KAAK,EACV,QAAQ,EACR,iBAAiB,EACjB,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,EACtB,kBAAkB,EACnB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,8CAA8C,CAAA;AAGxF,qBAAa,SAAS;IACR,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,YAAY;IAE/C,qCAAqC;IACrC,MAAM,CAAC,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"checkouts.d.ts","sourceRoot":"","sources":["../../src/namespaces/checkouts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,KAAK,EACV,QAAQ,EACR,iBAAiB,EACjB,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,EACtB,kBAAkB,EACnB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,8CAA8C,CAAA;AAGxF,qBAAa,SAAS;IACR,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,YAAY;IAE/C,qCAAqC;IACrC,MAAM,CAAC,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAuBxE,4BAA4B;IAC5B,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAOpD,2CAA2C;IAC3C,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAQ5E,mFAAmF;IACnF,oBAAoB,CAClB,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,oBAAoB,GACzB,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAUtC,gDAAgD;IAChD,MAAM,CAAC,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAcxE;;;OAGG;IACH,OAAO,CAAC,IAAI,EAAE,sBAAsB,GAAG,OAAO,CAAC,MAAM,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC;IAwBnF;;;;OAIG;IACH,WAAW,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC;CAepF"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { transformToSnakeCase } from '../utils/transformers.js';
|
|
1
|
+
import { crossSellLinesToSnakeCase, transformToSnakeCase } from '../utils/transformers.js';
|
|
2
2
|
export class Checkouts {
|
|
3
3
|
core;
|
|
4
4
|
constructor(core) {
|
|
@@ -20,6 +20,9 @@ export class Checkouts {
|
|
|
20
20
|
payload.customer_tax_id = body.customerTaxId;
|
|
21
21
|
if (body.amount !== undefined)
|
|
22
22
|
payload.amount = body.amount;
|
|
23
|
+
if (body.crossSell !== undefined && body.crossSell.length > 0) {
|
|
24
|
+
payload.cross_sell = crossSellLinesToSnakeCase(body.crossSell);
|
|
25
|
+
}
|
|
23
26
|
if (body.successUrl !== undefined)
|
|
24
27
|
payload.success_url = body.successUrl;
|
|
25
28
|
if (body.requireBillingAddress !== undefined)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { ChargefyCore, APIError } from '../core.js';
|
|
2
2
|
import type { Result } from '../types/fp.js';
|
|
3
|
-
import type { Subscription, SubscriptionListParams } from '../models/subscription.js';
|
|
3
|
+
import type { Subscription, SubscriptionListParams, UpdateSubscriptionBillingRequest } from '../models/subscription.js';
|
|
4
4
|
import type { ListResponse } from '../models/pagination.js';
|
|
5
5
|
export declare class Subscriptions {
|
|
6
6
|
private readonly core;
|
|
@@ -9,5 +9,10 @@ export declare class Subscriptions {
|
|
|
9
9
|
list(params?: SubscriptionListParams): Promise<Result<ListResponse<Subscription>, APIError>>;
|
|
10
10
|
/** Get a subscription by ID. */
|
|
11
11
|
get(id: string): Promise<Result<Subscription, APIError>>;
|
|
12
|
+
/**
|
|
13
|
+
* Update subscription billing: next due date, bundle total, and/or cross-sell lines.
|
|
14
|
+
* At least one of `dueDate`, `amount`, or `crossSell` must be provided.
|
|
15
|
+
*/
|
|
16
|
+
updateBilling(subscriptionId: string, body: UpdateSubscriptionBillingRequest): Promise<Result<Subscription, APIError>>;
|
|
12
17
|
}
|
|
13
18
|
//# sourceMappingURL=subscriptions.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subscriptions.d.ts","sourceRoot":"","sources":["../../src/namespaces/subscriptions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"subscriptions.d.ts","sourceRoot":"","sources":["../../src/namespaces/subscriptions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,KAAK,EACV,YAAY,EACZ,sBAAsB,EACtB,gCAAgC,EACjC,MAAM,2BAA2B,CAAA;AAElC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAE3D,qBAAa,aAAa;IACZ,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,YAAY;IAE/C,gDAAgD;IAChD,IAAI,CAAC,MAAM,GAAE,sBAA2B,GAAG,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE,QAAQ,CAAC,CAAC;IA2ChG,gCAAgC;IAChC,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;IAOxD;;;OAGG;IACH,aAAa,CACX,cAAc,EAAE,MAAM,EACtB,IAAI,EAAE,gCAAgC,GACrC,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;CAc3C"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { crossSellLinesToSnakeCase } from '../utils/transformers.js';
|
|
1
2
|
export class Subscriptions {
|
|
2
3
|
core;
|
|
3
4
|
constructor(core) {
|
|
@@ -51,4 +52,24 @@ export class Subscriptions {
|
|
|
51
52
|
path: `/v1/subscriptions/${encodeURIComponent(id)}`,
|
|
52
53
|
});
|
|
53
54
|
}
|
|
55
|
+
/**
|
|
56
|
+
* Update subscription billing: next due date, bundle total, and/or cross-sell lines.
|
|
57
|
+
* At least one of `dueDate`, `amount`, or `crossSell` must be provided.
|
|
58
|
+
*/
|
|
59
|
+
updateBilling(subscriptionId, body) {
|
|
60
|
+
const payload = {};
|
|
61
|
+
if (body.dueDate !== undefined)
|
|
62
|
+
payload.due_date = body.dueDate;
|
|
63
|
+
if (body.amount !== undefined)
|
|
64
|
+
payload.amount = body.amount;
|
|
65
|
+
if (body.crossSell !== undefined) {
|
|
66
|
+
payload.cross_sell =
|
|
67
|
+
body.crossSell.length > 0 ? crossSellLinesToSnakeCase(body.crossSell) : [];
|
|
68
|
+
}
|
|
69
|
+
return this.core.request({
|
|
70
|
+
method: 'PATCH',
|
|
71
|
+
path: `/v1/subscriptions/${encodeURIComponent(subscriptionId)}/billing`,
|
|
72
|
+
body: payload,
|
|
73
|
+
});
|
|
74
|
+
}
|
|
54
75
|
}
|
|
@@ -3,6 +3,16 @@
|
|
|
3
3
|
* Converts between API snake_case and SDK camelCase
|
|
4
4
|
*/
|
|
5
5
|
import type { CheckoutPublic } from '../models/components/checkoutpublic.js';
|
|
6
|
+
import type { CrossSellLine } from '../models/cross-sell.js';
|
|
7
|
+
/** API payload shape for `cross_sell` array items. */
|
|
8
|
+
export declare function crossSellLinesToSnakeCase(lines: CrossSellLine[]): Array<{
|
|
9
|
+
product_id: string;
|
|
10
|
+
product_price_id: string | null;
|
|
11
|
+
quantity: number;
|
|
12
|
+
amount_cents: number;
|
|
13
|
+
name_snapshot: string;
|
|
14
|
+
}>;
|
|
15
|
+
export declare function transformCrossSellToCamelCase(raw: unknown): CrossSellLine[] | undefined;
|
|
6
16
|
/**
|
|
7
17
|
* Transform API snake_case response to SDK camelCase
|
|
8
18
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transformers.d.ts","sourceRoot":"","sources":["../../src/utils/transformers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAA;
|
|
1
|
+
{"version":3,"file":"transformers.d.ts","sourceRoot":"","sources":["../../src/utils/transformers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAA;AAC5E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAE5D,sDAAsD;AACtD,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,aAAa,EAAE,GACrB,KAAK,CAAC;IACP,UAAU,EAAE,MAAM,CAAA;IAClB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAA;IAC/B,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,EAAE,MAAM,CAAA;CACtB,CAAC,CAQD;AAED,wBAAgB,6BAA6B,CAAC,GAAG,EAAE,OAAO,GAAG,aAAa,EAAE,GAAG,SAAS,CA8BvF;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,GAAG,GAAG,cAAc,CAiEtE;AAoED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,OAAO,GAAG,CAAC,CAahE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,GAAG,GAAG,GAAG,CAoBnD"}
|
|
@@ -2,6 +2,48 @@
|
|
|
2
2
|
* Data transformation utilities
|
|
3
3
|
* Converts between API snake_case and SDK camelCase
|
|
4
4
|
*/
|
|
5
|
+
/** API payload shape for `cross_sell` array items. */
|
|
6
|
+
export function crossSellLinesToSnakeCase(lines) {
|
|
7
|
+
return lines.map((l) => ({
|
|
8
|
+
product_id: l.productId,
|
|
9
|
+
product_price_id: l.productPriceId ?? null,
|
|
10
|
+
quantity: l.quantity,
|
|
11
|
+
amount_cents: l.amountCents,
|
|
12
|
+
name_snapshot: l.nameSnapshot,
|
|
13
|
+
}));
|
|
14
|
+
}
|
|
15
|
+
export function transformCrossSellToCamelCase(raw) {
|
|
16
|
+
if (!Array.isArray(raw) || raw.length === 0)
|
|
17
|
+
return undefined;
|
|
18
|
+
const out = [];
|
|
19
|
+
for (const row of raw) {
|
|
20
|
+
if (!row || typeof row !== 'object')
|
|
21
|
+
continue;
|
|
22
|
+
const r = row;
|
|
23
|
+
const productId = (r.product_id ?? r.productId);
|
|
24
|
+
if (typeof productId !== 'string')
|
|
25
|
+
continue;
|
|
26
|
+
const qty = typeof r.quantity === 'number' ? r.quantity : Number(r.quantity) || 1;
|
|
27
|
+
const amountCentsRaw = r.amount_cents ?? r.amountCents;
|
|
28
|
+
const amountCents = typeof amountCentsRaw === 'number' ? amountCentsRaw : Number(amountCentsRaw) || 0;
|
|
29
|
+
const nameSnapRaw = r.name_snapshot ?? r.nameSnapshot;
|
|
30
|
+
const nameSnapshot = typeof nameSnapRaw === 'string' ? nameSnapRaw : '';
|
|
31
|
+
const ppRaw = r.product_price_id ?? r.productPriceId;
|
|
32
|
+
const productPriceId = ppRaw === null || ppRaw === undefined
|
|
33
|
+
? null
|
|
34
|
+
: typeof ppRaw === 'string'
|
|
35
|
+
? ppRaw
|
|
36
|
+
: null;
|
|
37
|
+
out.push({
|
|
38
|
+
productId,
|
|
39
|
+
productPriceId,
|
|
40
|
+
quantity: qty,
|
|
41
|
+
amountCents,
|
|
42
|
+
nameSnapshot,
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
return out.length > 0 ? out : undefined;
|
|
46
|
+
}
|
|
5
47
|
/**
|
|
6
48
|
* Transform API snake_case response to SDK camelCase
|
|
7
49
|
*/
|
|
@@ -57,6 +99,7 @@ export function transformCheckoutToCamelCase(data) {
|
|
|
57
99
|
subscriptionId: data.subscription_id,
|
|
58
100
|
metadata: data.metadata,
|
|
59
101
|
customerMetadata: data.customer_metadata,
|
|
102
|
+
crossSell: transformCrossSellToCamelCase(data.cross_sell),
|
|
60
103
|
};
|
|
61
104
|
}
|
|
62
105
|
function transformAddressToCamelCase(address) {
|
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -31,6 +31,7 @@ export type {
|
|
|
31
31
|
CreateBuyerResponse,
|
|
32
32
|
BuyerLookupResult,
|
|
33
33
|
} from './models/buyer.js'
|
|
34
|
+
export type { CrossSellLine } from './models/cross-sell.js'
|
|
34
35
|
export type {
|
|
35
36
|
Checkout,
|
|
36
37
|
CheckoutConfirmed,
|
|
@@ -63,6 +64,7 @@ export type {
|
|
|
63
64
|
CustomerCancellationReason,
|
|
64
65
|
SubscriptionProduct,
|
|
65
66
|
SubscriptionCustomer,
|
|
67
|
+
UpdateSubscriptionBillingRequest,
|
|
66
68
|
} from './models/subscription.js'
|
|
67
69
|
export type {
|
|
68
70
|
SubOrganizationListItem,
|
package/src/models/checkout.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import type { CrossSellLine } from './cross-sell.js'
|
|
2
|
+
|
|
1
3
|
export interface InstallmentOption {
|
|
2
4
|
installments: number
|
|
3
5
|
/** Amount per installment in cents. */
|
|
@@ -41,6 +43,8 @@ export interface Checkout {
|
|
|
41
43
|
/** Installment fee options keyed by card brand ('Visa', 'MasterCard', 'Elo', 'American Express', 'default'). */
|
|
42
44
|
installmentOptions?: Record<string, InstallmentOption[]> | null
|
|
43
45
|
product?: CheckoutProduct
|
|
46
|
+
/** Bundle add-on lines; `amount` is the bundle total in cents. */
|
|
47
|
+
crossSell?: CrossSellLine[]
|
|
44
48
|
metadata?: Record<string, unknown>
|
|
45
49
|
createdAt?: string
|
|
46
50
|
}
|
|
@@ -77,8 +81,13 @@ export interface CreateCheckoutRequest {
|
|
|
77
81
|
customerEmail?: string
|
|
78
82
|
customerName?: string
|
|
79
83
|
customerTaxId?: string
|
|
80
|
-
/**
|
|
84
|
+
/**
|
|
85
|
+
* Bundle total in cents when using cross-sell add-ons.
|
|
86
|
+
* Required (positive) when `crossSell` is non-empty.
|
|
87
|
+
*/
|
|
81
88
|
amount?: number
|
|
89
|
+
/** Add-on bundle lines; omit or use empty array for main product only. */
|
|
90
|
+
crossSell?: CrossSellLine[]
|
|
82
91
|
successUrl?: string
|
|
83
92
|
requireBillingAddress?: boolean
|
|
84
93
|
metadata?: Record<string, unknown>
|
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
* Compatible with Polar's CheckoutPublic structure but with Celcoin payment processor
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
+
import type { CrossSellLine } from '../cross-sell.js'
|
|
7
|
+
|
|
6
8
|
export interface Address {
|
|
7
9
|
line1?: string
|
|
8
10
|
line2?: string | null
|
|
@@ -135,6 +137,9 @@ export interface CheckoutPublic {
|
|
|
135
137
|
// Subscription
|
|
136
138
|
subscriptionId?: string | null
|
|
137
139
|
|
|
140
|
+
/** Bundle add-on lines; `amount` / `totalAmount` reflect bundle total. */
|
|
141
|
+
crossSell?: CrossSellLine[]
|
|
142
|
+
|
|
138
143
|
// Metadata
|
|
139
144
|
metadata?: Record<string, any>
|
|
140
145
|
customerMetadata?: Record<string, string | number | boolean>
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bundle add-on line (cross-sell) aligned with API JSON after camelCase transformation.
|
|
3
|
+
*
|
|
4
|
+
* Rules (server-side):
|
|
5
|
+
* - Checkout/subscription `amount` is the **bundle total** in cents.
|
|
6
|
+
* - Sum of `amountCents` per line must not exceed that total.
|
|
7
|
+
* - Add-on products must belong to the same organization and match the main product's
|
|
8
|
+
* recurring billing period when the main product is recurring.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
export interface CrossSellLine {
|
|
12
|
+
productId: string
|
|
13
|
+
productPriceId?: string | null
|
|
14
|
+
quantity: number
|
|
15
|
+
/** Line total in cents (quantity already applied). */
|
|
16
|
+
amountCents: number
|
|
17
|
+
nameSnapshot: string
|
|
18
|
+
}
|
|
@@ -120,27 +120,12 @@ export interface CreateProductForChildRequest {
|
|
|
120
120
|
// ── Response ──────────────────────────────────────────────────────────────────
|
|
121
121
|
|
|
122
122
|
export interface CreateSubOrganizationResponse {
|
|
123
|
-
|
|
123
|
+
suborganization: {
|
|
124
124
|
id: string
|
|
125
125
|
name: string
|
|
126
126
|
slug: string
|
|
127
127
|
status: string
|
|
128
128
|
}
|
|
129
|
-
seller: {
|
|
130
|
-
id: string
|
|
131
|
-
zoop_seller_id: string
|
|
132
|
-
status: string
|
|
133
|
-
seller_type: string
|
|
134
|
-
reused_existing_seller: boolean
|
|
135
|
-
}
|
|
136
|
-
bank_account: {
|
|
137
|
-
id: string
|
|
138
|
-
zoop_bank_account_id: string
|
|
139
|
-
bank_code: string
|
|
140
|
-
account_number_last4: string
|
|
141
|
-
account_type: string
|
|
142
|
-
is_verified: boolean
|
|
143
|
-
} | null
|
|
144
129
|
/** The API key for the new organization. Shown once — store it securely. */
|
|
145
130
|
api_key: string
|
|
146
131
|
status: string
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import type { CrossSellLine } from './cross-sell.js'
|
|
2
|
+
|
|
1
3
|
export type SubscriptionStatus =
|
|
2
4
|
| 'incomplete'
|
|
3
5
|
| 'incomplete_expired'
|
|
@@ -68,11 +70,25 @@ export interface Subscription {
|
|
|
68
70
|
checkoutId?: string | null
|
|
69
71
|
userMetadata?: Record<string, unknown>
|
|
70
72
|
cardData?: SubscriptionCardData | null
|
|
73
|
+
/** Bundle add-on snapshot; `amount` is the recurring bundle total in cents. */
|
|
74
|
+
crossSell?: CrossSellLine[]
|
|
71
75
|
customer?: SubscriptionCustomer
|
|
72
76
|
product?: SubscriptionProduct
|
|
73
77
|
discount?: SubscriptionDiscount
|
|
74
78
|
}
|
|
75
79
|
|
|
80
|
+
export interface UpdateSubscriptionBillingRequest {
|
|
81
|
+
/** ISO date YYYY-MM-DD (next charge / period end alignment). */
|
|
82
|
+
dueDate?: string
|
|
83
|
+
/** Bundle total in cents. Required when updating a non-empty `crossSell`. */
|
|
84
|
+
amount?: number
|
|
85
|
+
/**
|
|
86
|
+
* When set (including `[]`), replaces stored bundle lines.
|
|
87
|
+
* Omit the property to leave `cross_sell` unchanged on the server.
|
|
88
|
+
*/
|
|
89
|
+
crossSell?: CrossSellLine[]
|
|
90
|
+
}
|
|
91
|
+
|
|
76
92
|
export interface SubscriptionListParams {
|
|
77
93
|
organizationId?: string | string[]
|
|
78
94
|
customerId?: string | string[]
|
|
@@ -9,7 +9,7 @@ import type {
|
|
|
9
9
|
GeneratePixRequest,
|
|
10
10
|
} from '../models/checkout.js'
|
|
11
11
|
import type { CheckoutUpdatePublic } from '../models/components/checkoutupdatepublic.js'
|
|
12
|
-
import { transformToSnakeCase } from '../utils/transformers.js'
|
|
12
|
+
import { crossSellLinesToSnakeCase, transformToSnakeCase } from '../utils/transformers.js'
|
|
13
13
|
|
|
14
14
|
export class Checkouts {
|
|
15
15
|
constructor(private readonly core: ChargefyCore) {}
|
|
@@ -25,6 +25,9 @@ export class Checkouts {
|
|
|
25
25
|
if (body.customerName !== undefined) payload.customer_name = body.customerName
|
|
26
26
|
if (body.customerTaxId !== undefined) payload.customer_tax_id = body.customerTaxId
|
|
27
27
|
if (body.amount !== undefined) payload.amount = body.amount
|
|
28
|
+
if (body.crossSell !== undefined && body.crossSell.length > 0) {
|
|
29
|
+
payload.cross_sell = crossSellLinesToSnakeCase(body.crossSell)
|
|
30
|
+
}
|
|
28
31
|
if (body.successUrl !== undefined) payload.success_url = body.successUrl
|
|
29
32
|
if (body.requireBillingAddress !== undefined) payload.require_billing_address = body.requireBillingAddress
|
|
30
33
|
if (body.metadata !== undefined) payload.metadata = body.metadata
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import type { ChargefyCore, APIError } from '../core.js'
|
|
2
2
|
import type { Result } from '../types/fp.js'
|
|
3
|
-
import type {
|
|
3
|
+
import type {
|
|
4
|
+
Subscription,
|
|
5
|
+
SubscriptionListParams,
|
|
6
|
+
UpdateSubscriptionBillingRequest,
|
|
7
|
+
} from '../models/subscription.js'
|
|
8
|
+
import { crossSellLinesToSnakeCase } from '../utils/transformers.js'
|
|
4
9
|
import type { ListResponse } from '../models/pagination.js'
|
|
5
10
|
|
|
6
11
|
export class Subscriptions {
|
|
@@ -57,4 +62,26 @@ export class Subscriptions {
|
|
|
57
62
|
path: `/v1/subscriptions/${encodeURIComponent(id)}`,
|
|
58
63
|
})
|
|
59
64
|
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Update subscription billing: next due date, bundle total, and/or cross-sell lines.
|
|
68
|
+
* At least one of `dueDate`, `amount`, or `crossSell` must be provided.
|
|
69
|
+
*/
|
|
70
|
+
updateBilling(
|
|
71
|
+
subscriptionId: string,
|
|
72
|
+
body: UpdateSubscriptionBillingRequest
|
|
73
|
+
): Promise<Result<Subscription, APIError>> {
|
|
74
|
+
const payload: Record<string, unknown> = {}
|
|
75
|
+
if (body.dueDate !== undefined) payload.due_date = body.dueDate
|
|
76
|
+
if (body.amount !== undefined) payload.amount = body.amount
|
|
77
|
+
if (body.crossSell !== undefined) {
|
|
78
|
+
payload.cross_sell =
|
|
79
|
+
body.crossSell.length > 0 ? crossSellLinesToSnakeCase(body.crossSell) : []
|
|
80
|
+
}
|
|
81
|
+
return this.core.request<Subscription>({
|
|
82
|
+
method: 'PATCH',
|
|
83
|
+
path: `/v1/subscriptions/${encodeURIComponent(subscriptionId)}/billing`,
|
|
84
|
+
body: payload,
|
|
85
|
+
})
|
|
86
|
+
}
|
|
60
87
|
}
|
|
@@ -4,6 +4,58 @@
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
import type { CheckoutPublic } from '../models/components/checkoutpublic.js'
|
|
7
|
+
import type { CrossSellLine } from '../models/cross-sell.js'
|
|
8
|
+
|
|
9
|
+
/** API payload shape for `cross_sell` array items. */
|
|
10
|
+
export function crossSellLinesToSnakeCase(
|
|
11
|
+
lines: CrossSellLine[]
|
|
12
|
+
): Array<{
|
|
13
|
+
product_id: string
|
|
14
|
+
product_price_id: string | null
|
|
15
|
+
quantity: number
|
|
16
|
+
amount_cents: number
|
|
17
|
+
name_snapshot: string
|
|
18
|
+
}> {
|
|
19
|
+
return lines.map((l) => ({
|
|
20
|
+
product_id: l.productId,
|
|
21
|
+
product_price_id: l.productPriceId ?? null,
|
|
22
|
+
quantity: l.quantity,
|
|
23
|
+
amount_cents: l.amountCents,
|
|
24
|
+
name_snapshot: l.nameSnapshot,
|
|
25
|
+
}))
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export function transformCrossSellToCamelCase(raw: unknown): CrossSellLine[] | undefined {
|
|
29
|
+
if (!Array.isArray(raw) || raw.length === 0) return undefined
|
|
30
|
+
const out: CrossSellLine[] = []
|
|
31
|
+
for (const row of raw) {
|
|
32
|
+
if (!row || typeof row !== 'object') continue
|
|
33
|
+
const r = row as Record<string, unknown>
|
|
34
|
+
const productId = (r.product_id ?? r.productId) as unknown
|
|
35
|
+
if (typeof productId !== 'string') continue
|
|
36
|
+
const qty = typeof r.quantity === 'number' ? r.quantity : Number(r.quantity) || 1
|
|
37
|
+
const amountCentsRaw = r.amount_cents ?? r.amountCents
|
|
38
|
+
const amountCents =
|
|
39
|
+
typeof amountCentsRaw === 'number' ? amountCentsRaw : Number(amountCentsRaw) || 0
|
|
40
|
+
const nameSnapRaw = r.name_snapshot ?? r.nameSnapshot
|
|
41
|
+
const nameSnapshot = typeof nameSnapRaw === 'string' ? nameSnapRaw : ''
|
|
42
|
+
const ppRaw = r.product_price_id ?? r.productPriceId
|
|
43
|
+
const productPriceId =
|
|
44
|
+
ppRaw === null || ppRaw === undefined
|
|
45
|
+
? null
|
|
46
|
+
: typeof ppRaw === 'string'
|
|
47
|
+
? ppRaw
|
|
48
|
+
: null
|
|
49
|
+
out.push({
|
|
50
|
+
productId,
|
|
51
|
+
productPriceId,
|
|
52
|
+
quantity: qty,
|
|
53
|
+
amountCents,
|
|
54
|
+
nameSnapshot,
|
|
55
|
+
})
|
|
56
|
+
}
|
|
57
|
+
return out.length > 0 ? out : undefined
|
|
58
|
+
}
|
|
7
59
|
|
|
8
60
|
/**
|
|
9
61
|
* Transform API snake_case response to SDK camelCase
|
|
@@ -70,6 +122,8 @@ export function transformCheckoutToCamelCase(data: any): CheckoutPublic {
|
|
|
70
122
|
subscriptionId: data.subscription_id,
|
|
71
123
|
metadata: data.metadata,
|
|
72
124
|
customerMetadata: data.customer_metadata,
|
|
125
|
+
|
|
126
|
+
crossSell: transformCrossSellToCamelCase(data.cross_sell),
|
|
73
127
|
}
|
|
74
128
|
}
|
|
75
129
|
|