summaryrefslogtreecommitdiffhomepage
path: root/packages/console/app/src/routes/stripe
diff options
context:
space:
mode:
authorFrank <[email protected]>2026-01-22 16:59:32 -0500
committerFrank <[email protected]>2026-01-22 17:02:46 -0500
commit5f3ab9395fc8f8543724dcda914d38fba0809049 (patch)
tree3be83aa5cc4e4556b62f9ff6b23933f8699eea63 /packages/console/app/src/routes/stripe
parentfdac21688c9acc4087b83e71cb7e0fd1d2d57f00 (diff)
downloadopencode-5f3ab9395fc8f8543724dcda914d38fba0809049.tar.gz
opencode-5f3ab9395fc8f8543724dcda914d38fba0809049.zip
wip: zen black
Diffstat (limited to 'packages/console/app/src/routes/stripe')
-rw-r--r--packages/console/app/src/routes/stripe/webhook.ts302
1 files changed, 152 insertions, 150 deletions
diff --git a/packages/console/app/src/routes/stripe/webhook.ts b/packages/console/app/src/routes/stripe/webhook.ts
index c7f752327..fc7b18fbc 100644
--- a/packages/console/app/src/routes/stripe/webhook.ts
+++ b/packages/console/app/src/routes/stripe/webhook.ts
@@ -216,141 +216,71 @@ export async function POST(input: APIEvent) {
})
}
if (body.type === "customer.subscription.created") {
- const data = {
- id: "evt_1Smq802SrMQ2Fneksse5FMNV",
- object: "event",
- api_version: "2025-07-30.basil",
- created: 1767766916,
- data: {
- object: {
- id: "sub_1Smq7x2SrMQ2Fnek8F1yf3ZD",
- object: "subscription",
- application: null,
- application_fee_percent: null,
- automatic_tax: {
- disabled_reason: null,
- enabled: false,
- liability: null,
- },
- billing_cycle_anchor: 1770445200,
- billing_cycle_anchor_config: null,
- billing_mode: {
- flexible: {
- proration_discounts: "included",
- },
- type: "flexible",
- updated_at: 1770445200,
- },
+ /*
+{
+ id: "evt_1Smq802SrMQ2Fneksse5FMNV",
+ object: "event",
+ api_version: "2025-07-30.basil",
+ created: 1767766916,
+ data: {
+ object: {
+ id: "sub_1Smq7x2SrMQ2Fnek8F1yf3ZD",
+ object: "subscription",
+ application: null,
+ application_fee_percent: null,
+ automatic_tax: {
+ disabled_reason: null,
+ enabled: false,
+ liability: null,
+ },
+ billing_cycle_anchor: 1770445200,
+ billing_cycle_anchor_config: null,
+ billing_mode: {
+ flexible: {
+ proration_discounts: "included",
+ },
+ type: "flexible",
+ updated_at: 1770445200,
+ },
+ billing_thresholds: null,
+ cancel_at: null,
+ cancel_at_period_end: false,
+ canceled_at: null,
+ cancellation_details: {
+ comment: null,
+ feedback: null,
+ reason: null,
+ },
+ collection_method: "charge_automatically",
+ created: 1770445200,
+ currency: "usd",
+ customer: "cus_TkKmZZvysJ2wej",
+ customer_account: null,
+ days_until_due: null,
+ default_payment_method: null,
+ default_source: "card_1Smq7u2SrMQ2FneknjyOa7sq",
+ default_tax_rates: [],
+ description: null,
+ discounts: [],
+ ended_at: null,
+ invoice_settings: {
+ account_tax_ids: null,
+ issuer: {
+ type: "self",
+ },
+ },
+ items: {
+ object: "list",
+ data: [
+ {
+ id: "si_TkKnBKXFX76t0O",
+ object: "subscription_item",
billing_thresholds: null,
- cancel_at: null,
- cancel_at_period_end: false,
- canceled_at: null,
- cancellation_details: {
- comment: null,
- feedback: null,
- reason: null,
- },
- collection_method: "charge_automatically",
created: 1770445200,
- currency: "usd",
- customer: "cus_TkKmZZvysJ2wej",
- customer_account: null,
- days_until_due: null,
- default_payment_method: null,
- default_source: "card_1Smq7u2SrMQ2FneknjyOa7sq",
- default_tax_rates: [],
- description: null,
+ current_period_end: 1772864400,
+ current_period_start: 1770445200,
discounts: [],
- ended_at: null,
- invoice_settings: {
- account_tax_ids: null,
- issuer: {
- type: "self",
- },
- },
- items: {
- object: "list",
- data: [
- {
- id: "si_TkKnBKXFX76t0O",
- object: "subscription_item",
- billing_thresholds: null,
- created: 1770445200,
- current_period_end: 1772864400,
- current_period_start: 1770445200,
- discounts: [],
- metadata: {},
- plan: {
- id: "price_1SmfFG2SrMQ2FnekJuzwHMea",
- object: "plan",
- active: true,
- amount: 20000,
- amount_decimal: "20000",
- billing_scheme: "per_unit",
- created: 1767725082,
- currency: "usd",
- interval: "month",
- interval_count: 1,
- livemode: false,
- metadata: {},
- meter: null,
- nickname: null,
- product: "prod_Tk9LjWT1n0DgYm",
- tiers_mode: null,
- transform_usage: null,
- trial_period_days: null,
- usage_type: "licensed",
- },
- price: {
- id: "price_1SmfFG2SrMQ2FnekJuzwHMea",
- object: "price",
- active: true,
- billing_scheme: "per_unit",
- created: 1767725082,
- currency: "usd",
- custom_unit_amount: null,
- livemode: false,
- lookup_key: null,
- metadata: {},
- nickname: null,
- product: "prod_Tk9LjWT1n0DgYm",
- recurring: {
- interval: "month",
- interval_count: 1,
- meter: null,
- trial_period_days: null,
- usage_type: "licensed",
- },
- tax_behavior: "unspecified",
- tiers_mode: null,
- transform_quantity: null,
- type: "recurring",
- unit_amount: 20000,
- unit_amount_decimal: "20000",
- },
- quantity: 1,
- subscription: "sub_1Smq7x2SrMQ2Fnek8F1yf3ZD",
- tax_rates: [],
- },
- ],
- has_more: false,
- total_count: 1,
- url: "/v1/subscription_items?subscription=sub_1Smq7x2SrMQ2Fnek8F1yf3ZD",
- },
- latest_invoice: "in_1Smq7x2SrMQ2FnekSJesfPwE",
- livemode: false,
metadata: {},
- next_pending_invoice_item_invoice: null,
- on_behalf_of: null,
- pause_collection: null,
- payment_settings: {
- payment_method_options: null,
- payment_method_types: null,
- save_default_payment_method: "off",
- },
- pending_invoice_item_interval: null,
- pending_setup_intent: null,
- pending_update: null,
plan: {
id: "price_1SmfFG2SrMQ2FnekJuzwHMea",
object: "plan",
@@ -372,29 +302,101 @@ export async function POST(input: APIEvent) {
trial_period_days: null,
usage_type: "licensed",
},
- quantity: 1,
- schedule: null,
- start_date: 1770445200,
- status: "active",
- test_clock: "clock_1Smq6n2SrMQ2FnekQw4yt2PZ",
- transfer_data: null,
- trial_end: null,
- trial_settings: {
- end_behavior: {
- missing_payment_method: "create_invoice",
+ price: {
+ id: "price_1SmfFG2SrMQ2FnekJuzwHMea",
+ object: "price",
+ active: true,
+ billing_scheme: "per_unit",
+ created: 1767725082,
+ currency: "usd",
+ custom_unit_amount: null,
+ livemode: false,
+ lookup_key: null,
+ metadata: {},
+ nickname: null,
+ product: "prod_Tk9LjWT1n0DgYm",
+ recurring: {
+ interval: "month",
+ interval_count: 1,
+ meter: null,
+ trial_period_days: null,
+ usage_type: "licensed",
},
+ tax_behavior: "unspecified",
+ tiers_mode: null,
+ transform_quantity: null,
+ type: "recurring",
+ unit_amount: 20000,
+ unit_amount_decimal: "20000",
},
- trial_start: null,
+ quantity: 1,
+ subscription: "sub_1Smq7x2SrMQ2Fnek8F1yf3ZD",
+ tax_rates: [],
},
- },
+ ],
+ has_more: false,
+ total_count: 1,
+ url: "/v1/subscription_items?subscription=sub_1Smq7x2SrMQ2Fnek8F1yf3ZD",
+ },
+ latest_invoice: "in_1Smq7x2SrMQ2FnekSJesfPwE",
+ livemode: false,
+ metadata: {},
+ next_pending_invoice_item_invoice: null,
+ on_behalf_of: null,
+ pause_collection: null,
+ payment_settings: {
+ payment_method_options: null,
+ payment_method_types: null,
+ save_default_payment_method: "off",
+ },
+ pending_invoice_item_interval: null,
+ pending_setup_intent: null,
+ pending_update: null,
+ plan: {
+ id: "price_1SmfFG2SrMQ2FnekJuzwHMea",
+ object: "plan",
+ active: true,
+ amount: 20000,
+ amount_decimal: "20000",
+ billing_scheme: "per_unit",
+ created: 1767725082,
+ currency: "usd",
+ interval: "month",
+ interval_count: 1,
livemode: false,
- pending_webhooks: 0,
- request: {
- id: "req_6YO9stvB155WJD",
- idempotency_key: "581ba059-6f86-49b2-9c49-0d8450255322",
+ metadata: {},
+ meter: null,
+ nickname: null,
+ product: "prod_Tk9LjWT1n0DgYm",
+ tiers_mode: null,
+ transform_usage: null,
+ trial_period_days: null,
+ usage_type: "licensed",
+ },
+ quantity: 1,
+ schedule: null,
+ start_date: 1770445200,
+ status: "active",
+ test_clock: "clock_1Smq6n2SrMQ2FnekQw4yt2PZ",
+ transfer_data: null,
+ trial_end: null,
+ trial_settings: {
+ end_behavior: {
+ missing_payment_method: "create_invoice",
},
- type: "customer.subscription.created",
- }
+ },
+ trial_start: null,
+ },
+ },
+ livemode: false,
+ pending_webhooks: 0,
+ request: {
+ id: "req_6YO9stvB155WJD",
+ idempotency_key: "581ba059-6f86-49b2-9c49-0d8450255322",
+ },
+ type: "customer.subscription.created",
+}
+ */
}
if (body.type === "customer.subscription.deleted") {
const subscriptionID = body.data.object.id
@@ -419,7 +421,7 @@ export async function POST(input: APIEvent) {
})
}
if (body.type === "invoice.payment_succeeded") {
- if (body.data.object.billing_reason === "subscription_cycle") {
+ if (body.data.object.billing_reason === "subscription_cycle" || body.data.object.billing_reason === "subscription_create") {
const invoiceID = body.data.object.id as string
const amountInCents = body.data.object.amount_paid
const customerID = body.data.object.customer as string