ghostguild-org/scripts/setup-helcim-plans.js

121 lines
3.2 KiB
JavaScript

// Script to create missing Helcim payment plans
// Run with: node scripts/setup-helcim-plans.js
import { config } from "dotenv";
import { fileURLToPath } from "url";
import { dirname, resolve } from "path";
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
// Load .env file
config({ path: resolve(__dirname, "../.env") });
const HELCIM_API_BASE = "https://api.helcim.com/v2";
async function createPlan(name, amount) {
const helcimToken = process.env.NUXT_PUBLIC_HELCIM_TOKEN;
if (!helcimToken) {
throw new Error(
"NUXT_PUBLIC_HELCIM_TOKEN environment variable not set in .env file",
);
}
console.log(`Creating plan: ${name} ($${amount}/month)...`);
const response = await fetch(`${HELCIM_API_BASE}/payment-plans`, {
method: "POST",
headers: {
accept: "application/json",
"content-type": "application/json",
"api-token": helcimToken,
},
body: JSON.stringify({
name: name,
description: `Ghost Guild ${name}`,
type: "subscription",
status: "active",
currency: "CAD",
setupAmount: 0,
recurringAmount: parseFloat(amount),
billingPeriod: "monthly",
billingPeriodIncrements: 1,
dateBilling: "Sign-up",
termType: "forever",
freeTrialPeriod: 0,
taxType: "customer",
paymentMethod: "card",
}),
});
if (!response.ok) {
const errorText = await response.text();
throw new Error(`Failed to create plan: ${errorText}`);
}
const planData = await response.json();
console.log(`✓ Created plan ID: ${planData.id}`);
return planData;
}
async function main() {
console.log("Setting up Helcim payment plans...\n");
const plans = [
{ name: "Ghost Guild - Member ($15)", amount: 15, tier: "MEMBER" },
{ name: "Ghost Guild - Advocate ($30)", amount: 30, tier: "ADVOCATE" },
{ name: "Ghost Guild - Champion ($50)", amount: 50, tier: "CHAMPION" },
];
const results = [];
for (const plan of plans) {
try {
const result = await createPlan(plan.name, plan.amount);
results.push({
tier: plan.tier,
planId: result.id,
amount: plan.amount,
});
} catch (error) {
console.error(`✗ Failed to create ${plan.name}:`, error.message);
}
}
console.log("\n--- Plan IDs to update in contributions.js ---");
results.forEach(({ tier, planId, amount }) => {
console.log(`${tier}: helcimPlanId: ${planId}, // $${amount}/month`);
});
console.log("\n--- Copy this to update server/config/contributions.js ---");
console.log(`
MEMBER: {
value: '15',
amount: 15,
label: '$15 - I can sustain the community',
tier: 'member',
helcimPlanId: ${results.find((r) => r.tier === "MEMBER")?.planId || "null"},
...
},
ADVOCATE: {
value: '30',
amount: 30,
label: '$30 - I can support others too',
tier: 'advocate',
helcimPlanId: ${results.find((r) => r.tier === "ADVOCATE")?.planId || "null"},
...
},
CHAMPION: {
value: '50',
amount: 50,
label: '$50 - I want to sponsor multiple members',
tier: 'champion',
helcimPlanId: ${results.find((r) => r.tier === "CHAMPION")?.planId || "null"},
...
}
`);
}
main().catch(console.error);