import {
BASE_CURRENCY_OPTIONS, PROMO_TYPE_OPTIONS,
} from "../../common/contants.mjs";
import { parseString } from "../../common/utils.mjs";
import whop from "../../whop.app.mjs";
export default {
key: "whop-create-promo-code",
name: "Create Promo Code",
description: "Creates a new promo code with the given parameters in Whop. [See the documentation](https://dev.whop.com/api-reference/v2/promo-codes/create-a-promo-code)",
version: "0.0.1",
type: "action",
props: {
whop,
amountOff: {
type: "integer",
label: "Amount Off",
description: "The amount off (percentage or flat amount) for the Promo Code.",
},
baseCurrency: {
type: "string",
label: "Base Currency",
description: "The monetary currency of the Promo Code.",
options: BASE_CURRENCY_OPTIONS,
},
code: {
type: "string",
label: "Code",
description: "The specific code used to apply the Promo Code at checkout.",
},
expirationDatetime: {
type: "integer",
label: "Expiration Datetime",
description: "The date/time of when the Promo Code expires.",
optional: true,
},
metadata: {
propDefinition: [
whop,
"metadata",
],
optional: true,
},
newUsersOnly: {
type: "boolean",
label: "New Users Only",
description: "Restricts Promo Code use to users who haven't purchased from the company before.",
optional: true,
},
numberOfIntervals: {
type: "integer",
label: "Number Of Intervals",
description: "The number of billing cycles the Promo Code is applied for. By default, it is applied forever (0).",
optional: true,
},
planId: {
propDefinition: [
whop,
"planId",
],
type: "string[]",
label: "Plan Ids",
description: "The IDs of plans associated with the Promo Code.",
optional: true,
},
promoType: {
type: "string",
label: "Promo Type",
description: "Whether the Promo Code is a percentage or flat amount off.",
options: PROMO_TYPE_OPTIONS,
},
stock: {
type: "integer",
label: "Stock",
description: "The number of total uses remaining for the Promo Code.",
},
unlimitedStock: {
type: "boolean",
label: "Unlimited Stock",
description: "Whether or not the Promo Code has unlimited uses.",
},
},
async run({ $ }) {
const response = await this.whop.createPromoCode({
data: {
amount_off: this.amountOff,
base_currency: this.baseCurrency,
code: this.code,
expiration_datetime: this.expirationDatetime,
metadata: this.metadata,
new_users_only: this.newUsersOnly,
number_of_intervals: this.numberOfIntervals,
plan_ids: parseString(this.planId),
promo_type: this.promoType,
stock: this.stock,
unlimited_stock: this.unlimitedStock,
},
});
$.export("$summary", `Successfully created promo code with ID: ${response.id}`);
return response;
},
};