import chargebee from "../../chargebee.app.mjs";
import { clearObject } from "../../common/utils.mjs";
export default {
key: "chargebee-create-subscription",
name: "Create Subscription",
description: "Create a new subscription for an existing customer. [See the documentation](https://apidocs.chargebee.com/docs/api/subscriptions?lang=curl#create_subscription_for_items)",
version: "0.0.1",
type: "action",
props: {
chargebee,
customerId: {
propDefinition: [
chargebee,
"customerId",
],
},
itemPriceId: {
propDefinition: [
chargebee,
"itemPriceId",
],
},
unitPrice: {
type: "integer",
label: "Unit Price",
description: "The unit price of the plan item.",
},
quantity: {
type: "integer",
label: "Quantity",
description: "The quantity of the plan item.",
},
id: {
type: "string",
label: "ID",
description: "A unique and immutable identifier for the subscription. If not provided, it is autogenerated.",
optional: true,
},
netTermDays: {
type: "integer",
label: "Net Term Days",
description: "Defines [Net D](https://www.chargebee.com/docs/net_d.html?_gl=1*1w075xz*_gcl_au*MTU4NzU2NDYzOC4xNzMzODA0OTYw) for the subscription. Net D is the number of days within which any invoice raised for the subscription must be paid.",
optional: true,
},
startDate: {
type: "string",
label: "Start Date",
description: "The date/time at which the subscription is to start, e.g. `2024-08-15T09:30:00Z`. If not provided, the subscription starts immediately.",
optional: true,
},
additionalFields: {
type: "object",
label: "Additional Fields",
description: "Additional fields and values to set for the subscription. [See the documentation](https://apidocs.chargebee.com/docs/api/subscriptions?lang=curl#create_subscription_for_items) for all available fields.",
optional: true,
},
},
async run({ $ }) {
try {
const response = await this.chargebee.createSubscription(this.customerId, clearObject({
id: this.id,
net_term_days: this.netTermDays,
start_date: this.startDate && (Date.parse(this.startDate) / 1000),
subscription_items: [
{
item_price_id: this.itemPriceId,
item_type: "plan",
unit_price: this.unitPrice,
quantity: this.quantity,
},
],
...this.additionalFields,
}));
$.export("$summary", `Successfully created subscription (ID: ${response?.subscription?.id})`);
return response;
} catch (error) {
$.export("debug", error);
throw new Error(`Error creating subscription: ${error.message}`);
}
},
};