diff --git a/.changeset/fluffy-rocks-prove.md b/.changeset/fluffy-rocks-prove.md new file mode 100644 index 000000000..c0dabae38 --- /dev/null +++ b/.changeset/fluffy-rocks-prove.md @@ -0,0 +1,5 @@ +--- +"@trigger.dev/stripe": patch +--- + +Added invoice and invoice item webhook triggers diff --git a/docs/integrations/apis/stripe.mdx b/docs/integrations/apis/stripe.mdx index 87e2a10f5..81ad02fa7 100644 --- a/docs/integrations/apis/stripe.mdx +++ b/docs/integrations/apis/stripe.mdx @@ -140,6 +140,21 @@ Available triggers are listed below: | `onPayoutPaid` | [Payout](https://stripe.com/docs/api/events/types#payout_object) | `payout.paid` | `onPayout` | | `onPayoutFailed` | [Payout](https://stripe.com/docs/api/events/types#payout_object) | `payout.failed` | `onPayout` | | `onPayoutReconciliationCompleted` | [Payout](https://stripe.com/docs/api/events/types#payout_object) | `payout.reconciliation_completed` | `onPayout` | +| `onInvoice` | [Invoice](https://stripe.com/docs/api/invoices/object) | `payout.created`, `payout.updated`, `payout.canceled`, `payout.paid`, `payout.failed`, `payout.reconciliation_completed` | ✔️ | +| `onInvoiceCreated` | [Invoice](https://stripe.com/docs/api/invoices/object) | `payout.created` | `onInvoice` | +| `onInvoiceFinalized` | [Invoice](https://stripe.com/docs/api/invoices/object) | `payout.updated` | `onInvoice` | +| `onInvoiceFinalizationFailed` | [Invoice](https://stripe.com/docs/api/invoices/object) | `payout.canceled` | `onInvoice` | +| `onInvoiceDeleted` | [Invoice](https://stripe.com/docs/api/invoices/object) | `payout.paid` | `onInvoice` | +| `onInvoiceMarkedUncollectible` | [Invoice](https://stripe.com/docs/api/invoices/object) | `payout.failed` | `onInvoice` | +| `onInvoicePaid` | [Invoice](https://stripe.com/docs/api/invoices/object) | `payout.reconciliation_completed` | `onInvoice` | +| `onInvoicePaymentActionRequired` | [Invoice](https://stripe.com/docs/api/invoices/object) | `payout.reconciliation_completed` | `onInvoice` | +| `onInvoicePaymentFailed` | [Invoice](https://stripe.com/docs/api/invoices/object) | `payout.reconciliation_completed` | `onInvoice` | +| `onInvoicePaymentSucceeded` | [Invoice](https://stripe.com/docs/api/invoices/object) | `payout.reconciliation_completed` | `onInvoice` | +| `onInvoiceSent` | [Invoice](https://stripe.com/docs/api/invoices/object) | `payout.reconciliation_completed` | `onInvoice` | +| `onInvoiceUpcoming` | [Invoice](https://stripe.com/docs/api/invoices/object) | `payout.reconciliation_completed` | `onInvoice` | +| `onInvoiceVoided` | [Invoice](https://stripe.com/docs/api/invoices/object) | `payout.reconciliation_completed` | `onInvoice` | +| `onInvoiceItemCreated` | [InvoiceItem](https://stripe.com/docs/api/invoiceitems/object) | `payout.reconciliation_completed` | N/A | +| `onInvoiceItemDeleted` | [InvoiceItem](https://stripe.com/docs/api/invoiceitems/object) | `payout.reconciliation_completed` | N/A | If there are any triggers missing that you'd like to see added, please [open a new GitHub Issue](https://github.com/triggerdotdev/trigger.dev/issues/new) diff --git a/integrations/stripe/src/events.ts b/integrations/stripe/src/events.ts index dcc531a62..15d452c48 100644 --- a/integrations/stripe/src/events.ts +++ b/integrations/stripe/src/events.ts @@ -25,6 +25,8 @@ import { OnCustomerEvent, OnCustomerSubscription, OnExternalAccountEvent, + OnInvoiceEvent, + OnInvoiceItemEvent, OnPaymentIntentEvent, OnPayoutEvent, OnPersonEvent, @@ -932,3 +934,660 @@ export const onPayoutUpdated: EventSpecification = { { label: "Amount", text: `${payload.amount} ${payload.currency}` }, ], }; + +export const onInvoice: EventSpecification = { + name: [ + "invoice.created", + "invoice.finalized", + "invoice.finalization_failed", + "invoice.deleted", + "invoice.marked_uncollectible", + "invoice.paid", + "invoice.payment_action_required", + "invoice.payment_failed", + "invoice.payment_succeeded", + "invoice.sent", + "invoice.upcoming", + "invoice.voided", + ], + title: "On Invoice Event", + source: "stripe.com", + icon: "stripe", + examples: [], + parsePayload: (payload) => payload as OnInvoiceEvent, + runProperties: (payload) => [{ label: "Invoice ID", text: payload.id }], +}; + +export const onInvoiceCreated: EventSpecification = { + name: "invoice.created", + title: "On Invoice Created", + source: "stripe.com", + icon: "stripe", + examples: [ + { + id: "invoice.created", + name: "Invoice Created", + icon: "stripe", + payload: { + id: "in_1OIBngI0XSgju2urLPfyF8yN", + object: "invoice", + account_country: "GB", + account_name: "Trigger.dev", + account_tax_ids: null, + amount_due: 2000, + amount_paid: 0, + amount_remaining: 2000, + amount_shipping: 0, + application: null, + application_fee_amount: null, + attempt_count: 0, + attempted: false, + auto_advance: false, + automatic_tax: { + enabled: false, + status: null, + }, + billing_reason: "manual", + charge: null, + collection_method: "charge_automatically", + created: 1701356712, + currency: "usd", + custom_fields: null, + customer: "cus_P6Oaqh5b0bx59U", + customer_address: null, + customer_email: null, + customer_name: null, + customer_phone: null, + customer_shipping: null, + customer_tax_exempt: "none", + customer_tax_ids: [], + default_payment_method: null, + default_source: null, + default_tax_rates: [], + description: "(created by Stripe CLI)", + discount: null, + discounts: [], + due_date: null, + effective_at: null, + ending_balance: null, + footer: null, + from_invoice: null, + hosted_invoice_url: null, + invoice_pdf: null, + last_finalization_error: null, + latest_revision: null, + lines: { + object: "list", + data: [ + { + id: "il_1OIBngI0XSgju2urOIBrJ3GK", + object: "line_item", + amount: 2000, + amount_excluding_tax: 2000, + currency: "usd", + description: "(created by Stripe CLI)", + discount_amounts: [], + discountable: true, + discounts: [], + invoice_item: "ii_1OIBngI0XSgju2urw3wl9FUf", + livemode: false, + metadata: {}, + period: { + end: 1701356712, + start: 1701356712, + }, + plan: null, + price: { + id: "price_1OIBngI0XSgju2urxiG1M9fT", + object: "price", + active: false, + billing_scheme: "per_unit", + created: 1701356712, + currency: "usd", + custom_unit_amount: null, + livemode: false, + lookup_key: null, + metadata: {}, + nickname: null, + product: "prod_P6Oatqn6T5L2Ey", + recurring: null, + tax_behavior: "unspecified", + tiers_mode: null, + transform_quantity: null, + type: "one_time", + unit_amount: 2000, + unit_amount_decimal: "2000", + }, + proration: false, + proration_details: { + credited_items: null, + }, + quantity: 1, + subscription: null, + tax_amounts: [], + tax_rates: [], + type: "invoiceitem", + unit_amount_excluding_tax: "2000", + }, + ], + has_more: false, + total_count: 1, + url: "/v1/invoices/in_1OIBngI0XSgju2urLPfyF8yN/lines", + }, + livemode: false, + metadata: {}, + next_payment_attempt: null, + number: null, + on_behalf_of: null, + paid: false, + paid_out_of_band: false, + payment_intent: null, + payment_settings: { + default_mandate: null, + payment_method_options: null, + payment_method_types: null, + }, + period_end: 1701356712, + period_start: 1701356712, + post_payment_credit_notes_amount: 0, + pre_payment_credit_notes_amount: 0, + quote: null, + receipt_number: null, + rendering: { + amount_tax_display: null, + pdf: { + page_size: "auto", + }, + }, + rendering_options: null, + shipping_cost: null, + shipping_details: null, + starting_balance: 0, + statement_descriptor: null, + status: "draft", + status_transitions: { + finalized_at: null, + marked_uncollectible_at: null, + paid_at: null, + voided_at: null, + }, + subscription: null, + subscription_details: { + metadata: null, + }, + subtotal: 2000, + subtotal_excluding_tax: 2000, + tax: null, + test_clock: null, + total: 2000, + total_discount_amounts: [], + total_excluding_tax: 2000, + total_tax_amounts: [], + transfer_data: null, + webhooks_delivered_at: null, + }, + }, + ], + parsePayload: (payload) => payload as OnInvoiceEvent, + runProperties: (payload) => [{ label: "Invoice ID", text: payload.id }], +}; + +export const onInvoiceFinalized: EventSpecification = { + name: "invoice.finalized", + title: "On Invoice Finalized", + source: "stripe.com", + icon: "stripe", + examples: [ + { + id: "invoice.finalized", + name: "Invoice Finalized", + icon: "stripe", + payload: { + id: "in_1OIBqbI0XSgju2urMmXEFbj3", + object: "invoice", + account_country: "GB", + account_name: "Trigger.dev", + account_tax_ids: null, + amount_due: 2000, + amount_paid: 0, + amount_remaining: 2000, + amount_shipping: 0, + application: null, + application_fee_amount: null, + attempt_count: 0, + attempted: false, + auto_advance: false, + automatic_tax: { + enabled: false, + status: null, + }, + billing_reason: "manual", + charge: null, + collection_method: "charge_automatically", + created: 1701356892, + currency: "usd", + custom_fields: null, + customer: "cus_P6Od2vu85eNeMI", + customer_address: null, + customer_email: null, + customer_name: null, + customer_phone: null, + customer_shipping: null, + customer_tax_exempt: "none", + customer_tax_ids: [], + default_payment_method: null, + default_source: null, + default_tax_rates: [], + description: "(created by Stripe CLI)", + discount: null, + discounts: [], + due_date: null, + effective_at: 1701356893, + ending_balance: 0, + footer: null, + from_invoice: null, + hosted_invoice_url: + "https://invoice.stripe.com/i/acct_1MRmG4I0XSgju2ur/test_YWNjdF8xTVJtRzRJMFhTZ2p1MnVyLF9QNk9kYmlDaVZyek53UXRJbUhEdmNxa1pPSUtKbmdPLDkxODk3Njk00200Ibh1G5H7?s=ap", + invoice_pdf: + "https://pay.stripe.com/invoice/acct_1MRmG4I0XSgju2ur/test_YWNjdF8xTVJtRzRJMFhTZ2p1MnVyLF9QNk9kYmlDaVZyek53UXRJbUhEdmNxa1pPSUtKbmdPLDkxODk3Njk00200Ibh1G5H7/pdf?s=ap", + last_finalization_error: null, + latest_revision: null, + lines: { + object: "list", + data: [ + { + id: "il_1OIBqaI0XSgju2urWRv5yH9h", + object: "line_item", + amount: 2000, + amount_excluding_tax: 2000, + currency: "usd", + description: "(created by Stripe CLI)", + discount_amounts: [], + discountable: true, + discounts: [], + invoice_item: "ii_1OIBqaI0XSgju2urik7fdYlI", + livemode: false, + metadata: {}, + period: { + end: 1701356892, + start: 1701356892, + }, + plan: null, + price: { + id: "price_1OIBngI0XSgju2urxiG1M9fT", + object: "price", + active: false, + billing_scheme: "per_unit", + created: 1701356712, + currency: "usd", + custom_unit_amount: null, + livemode: false, + lookup_key: null, + metadata: {}, + nickname: null, + product: "prod_P6Oatqn6T5L2Ey", + recurring: null, + tax_behavior: "unspecified", + tiers_mode: null, + transform_quantity: null, + type: "one_time", + unit_amount: 2000, + unit_amount_decimal: "2000", + }, + proration: false, + proration_details: { + credited_items: null, + }, + quantity: 1, + subscription: null, + tax_amounts: [], + tax_rates: [], + type: "invoiceitem", + unit_amount_excluding_tax: "2000", + }, + ], + has_more: false, + total_count: 1, + url: "/v1/invoices/in_1OIBqbI0XSgju2urMmXEFbj3/lines", + }, + livemode: false, + metadata: {}, + next_payment_attempt: null, + number: "FD943C29-0111", + on_behalf_of: null, + paid: false, + paid_out_of_band: false, + payment_intent: "pi_3OIBqbI0XSgju2ur0BelVhdO", + payment_settings: { + default_mandate: null, + payment_method_options: null, + payment_method_types: null, + }, + period_end: 1701356892, + period_start: 1701356892, + post_payment_credit_notes_amount: 0, + pre_payment_credit_notes_amount: 0, + quote: null, + receipt_number: null, + rendering: { + amount_tax_display: null, + pdf: { + page_size: "letter", + }, + }, + rendering_options: null, + shipping_cost: null, + shipping_details: null, + starting_balance: 0, + statement_descriptor: null, + status: "open", + status_transitions: { + finalized_at: 1701356893, + marked_uncollectible_at: null, + paid_at: null, + voided_at: null, + }, + subscription: null, + subscription_details: { + metadata: null, + }, + subtotal: 2000, + subtotal_excluding_tax: 2000, + tax: null, + test_clock: null, + total: 2000, + total_discount_amounts: [], + total_excluding_tax: 2000, + total_tax_amounts: [], + transfer_data: null, + webhooks_delivered_at: 1701356893, + }, + }, + ], + parsePayload: (payload) => payload as OnInvoiceEvent, + runProperties: (payload) => [{ label: "Invoice ID", text: payload.id }], +}; + +export const onInvoiceFinalizationFailed: EventSpecification = { + name: "invoice.finalization_failed", + title: "On Invoice Finalization failed", + source: "stripe.com", + icon: "stripe", + parsePayload: (payload) => payload as OnInvoiceEvent, + runProperties: (payload) => [{ label: "Invoice ID", text: payload.id }], +}; + +export const onInvoiceDeleted: EventSpecification = { + name: "invoice.deleted", + title: "On Invoice Deleted", + source: "stripe.com", + icon: "stripe", + parsePayload: (payload) => payload as OnInvoiceEvent, + runProperties: (payload) => [{ label: "Invoice ID", text: payload.id }], +}; + +export const onInvoiceMarkedUncollectible: EventSpecification = { + name: "invoice.marked_uncollectible", + title: "On Invoice Deleted", + source: "stripe.com", + icon: "stripe", + parsePayload: (payload) => payload as OnInvoiceEvent, + runProperties: (payload) => [{ label: "Invoice ID", text: payload.id }], +}; + +export const onInvoicePaid: EventSpecification = { + name: "invoice.paid", + title: "On Invoice Paid", + source: "stripe.com", + icon: "stripe", + examples: [ + { + id: "invoice.paid", + name: "Invoice Paid", + icon: "stripe", + payload: { + id: "in_1OIBuTI0XSgju2urKkqZFraX", + object: "invoice", + account_country: "GB", + account_name: "Trigger.dev", + account_tax_ids: null, + amount_due: 2000, + amount_paid: 2000, + amount_remaining: 0, + amount_shipping: 0, + application: null, + application_fee_amount: null, + attempt_count: 1, + attempted: true, + auto_advance: false, + automatic_tax: { + enabled: false, + status: null, + }, + billing_reason: "manual", + charge: "ch_3OIBuUI0XSgju2ur1ibTvTmE", + collection_method: "charge_automatically", + created: 1701357133, + currency: "usd", + custom_fields: null, + customer: "cus_P6OhphiNsxG9aM", + customer_address: null, + customer_email: null, + customer_name: null, + customer_phone: null, + customer_shipping: null, + customer_tax_exempt: "none", + customer_tax_ids: [], + default_payment_method: null, + default_source: null, + default_tax_rates: [], + description: "(created by Stripe CLI)", + discount: null, + discounts: [], + due_date: null, + effective_at: 1701357134, + ending_balance: 0, + footer: null, + from_invoice: null, + hosted_invoice_url: + "https://invoice.stripe.com/i/acct_1MRmG4I0XSgju2ur/test_YWNjdF8xTVJtRzRJMFhTZ2p1MnVyLF9QNk9oeUJwdXpYVUtrb0hVQmJHYUFDclZhbmVha2w5LDkxODk3OTM20200JlMCKvkD?s=ap", + invoice_pdf: + "https://pay.stripe.com/invoice/acct_1MRmG4I0XSgju2ur/test_YWNjdF8xTVJtRzRJMFhTZ2p1MnVyLF9QNk9oeUJwdXpYVUtrb0hVQmJHYUFDclZhbmVha2w5LDkxODk3OTM20200JlMCKvkD/pdf?s=ap", + last_finalization_error: null, + latest_revision: null, + lines: { + object: "list", + data: [ + { + id: "il_1OIBuTI0XSgju2urpRdDk5DO", + object: "line_item", + amount: 2000, + amount_excluding_tax: 2000, + currency: "usd", + description: "(created by Stripe CLI)", + discount_amounts: [], + discountable: true, + discounts: [], + invoice_item: "ii_1OIBuTI0XSgju2urRDAJz6ec", + livemode: false, + metadata: {}, + period: { + end: 1701357133, + start: 1701357133, + }, + plan: null, + price: { + id: "price_1OIBngI0XSgju2urxiG1M9fT", + object: "price", + active: false, + billing_scheme: "per_unit", + created: 1701356712, + currency: "usd", + custom_unit_amount: null, + livemode: false, + lookup_key: null, + metadata: {}, + nickname: null, + product: "prod_P6Oatqn6T5L2Ey", + recurring: null, + tax_behavior: "unspecified", + tiers_mode: null, + transform_quantity: null, + type: "one_time", + unit_amount: 2000, + unit_amount_decimal: "2000", + }, + proration: false, + proration_details: { + credited_items: null, + }, + quantity: 1, + subscription: null, + tax_amounts: [], + tax_rates: [], + type: "invoiceitem", + unit_amount_excluding_tax: "2000", + }, + ], + has_more: false, + total_count: 1, + url: "/v1/invoices/in_1OIBuTI0XSgju2urKkqZFraX/lines", + }, + livemode: false, + metadata: {}, + next_payment_attempt: null, + number: "FD943C29-0112", + on_behalf_of: null, + paid: true, + paid_out_of_band: false, + payment_intent: "pi_3OIBuUI0XSgju2ur15gtauR9", + payment_settings: { + default_mandate: null, + payment_method_options: null, + payment_method_types: null, + }, + period_end: 1701357133, + period_start: 1701357133, + post_payment_credit_notes_amount: 0, + pre_payment_credit_notes_amount: 0, + quote: null, + receipt_number: null, + rendering: { + amount_tax_display: null, + pdf: { + page_size: "letter", + }, + }, + rendering_options: null, + shipping_cost: null, + shipping_details: null, + starting_balance: 0, + statement_descriptor: null, + status: "paid", + status_transitions: { + finalized_at: 1701357134, + marked_uncollectible_at: null, + paid_at: 1701357134, + voided_at: null, + }, + subscription: null, + subscription_details: { + metadata: null, + }, + subtotal: 2000, + subtotal_excluding_tax: 2000, + tax: null, + test_clock: null, + total: 2000, + total_discount_amounts: [], + total_excluding_tax: 2000, + total_tax_amounts: [], + transfer_data: null, + webhooks_delivered_at: 1701357134, + }, + }, + ], + parsePayload: (payload) => payload as OnInvoiceEvent, + runProperties: (payload) => [{ label: "Invoice ID", text: payload.id }], +}; + +export const onInvoicePaymentActionRequired: EventSpecification = { + name: "invoice.payment_action_required", + title: "On Invoice Payment Action Required", + source: "stripe.com", + icon: "stripe", + parsePayload: (payload) => payload as OnInvoiceEvent, + runProperties: (payload) => [{ label: "Invoice ID", text: payload.id }], +}; + +export const onInvoicePaymentFailed: EventSpecification = { + name: "invoice.payment_failed", + title: "On Invoice Payment Failed", + source: "stripe.com", + icon: "stripe", + parsePayload: (payload) => payload as OnInvoiceEvent, + runProperties: (payload) => [{ label: "Invoice ID", text: payload.id }], +}; + +export const onInvoicePaymentSucceeded: EventSpecification = { + name: "invoice.payment_succeeded", + title: "On Invoice Payment Succeeded", + source: "stripe.com", + icon: "stripe", + parsePayload: (payload) => payload as OnInvoiceEvent, + runProperties: (payload) => [{ label: "Invoice ID", text: payload.id }], +}; + +export const onInvoiceSent: EventSpecification = { + name: "invoice.sent", + title: "On Invoice Sent", + source: "stripe.com", + icon: "stripe", + parsePayload: (payload) => payload as OnInvoiceEvent, + runProperties: (payload) => [{ label: "Invoice ID", text: payload.id }], +}; + +export const onInvoiceUpcoming: EventSpecification = { + name: "invoice.upcoming", + title: "On Invoice Upcoming", + source: "stripe.com", + icon: "stripe", + parsePayload: (payload) => payload as OnInvoiceEvent, + runProperties: (payload) => [{ label: "Invoice ID", text: payload.id }], +}; + +export const onInvoiceUpdated: EventSpecification = { + name: "invoice.updated", + title: "On Invoice Updated", + source: "stripe.com", + icon: "stripe", + parsePayload: (payload) => payload as OnInvoiceEvent, + runProperties: (payload) => [{ label: "Invoice ID", text: payload.id }], +}; + +export const onInvoiceVoided: EventSpecification = { + name: "invoice.voided", + title: "On Invoice Voided", + source: "stripe.com", + icon: "stripe", + parsePayload: (payload) => payload as OnInvoiceEvent, + runProperties: (payload) => [{ label: "Invoice ID", text: payload.id }], +}; + +export const onInvoiceItemCreated: EventSpecification = { + name: "invoiceitem.created", + title: "On Invoice Item Created", + source: "stripe.com", + icon: "stripe", + parsePayload: (payload) => payload as OnInvoiceItemEvent, + runProperties: (payload) => [{ label: "Invoice Item ID", text: payload.id }], +}; + +export const onInvoiceItemDeleted: EventSpecification = { + name: "invoiceitem.deleted", + title: "On Invoice Item Deleted", + source: "stripe.com", + icon: "stripe", + parsePayload: (payload) => payload as OnInvoiceItemEvent, + runProperties: (payload) => [{ label: "Invoice Item ID", text: payload.id }], +}; diff --git a/integrations/stripe/src/index.ts b/integrations/stripe/src/index.ts index 496fe6d0a..327da7330 100644 --- a/integrations/stripe/src/index.ts +++ b/integrations/stripe/src/index.ts @@ -32,6 +32,8 @@ import { CustomerSubscriptionEventNamesSchema, ExternalAccountEventNames, ExternalAccountEventNamesSchema, + InvoiceEventNames, + InvoiceEventNamesSchema, PaymentIntentEventNames, PaymentIntentEventNamesSchema, PayoutEventNames, @@ -901,6 +903,123 @@ export class Stripe implements TriggerIntegration { params ?? { connect: false } ); } + + /** + * Occurs on any invoice.* event. Accepts an optional array of events to filter on. By default it will listen to all invoice.* events. + * + * @example + * ```ts + * stripe.onInvoice({ events: ["invoice.created", "invoice.paid"] }) + * ``` + * + * You can detect the event name in your job by using the `ctx.event.name` property: + * + * ```ts + * client.defineJob({ + * id: "stripe-example", + * name: "Stripe Example", + * version: "0.1.0", + * trigger: stripe.onInvoice({ events: ["invoice.created", "invoice.paid"] }), + * run: async (payload, io, ctx) => { + * console.log(ctx.event.name); // "invoice.created" or "invoice.paid" + * }, + * }); + * ``` + */ + onInvoice(params?: TriggerParams & { events?: InvoiceEventNames }) { + const parsedEvents = InvoiceEventNamesSchema.optional().parse(params?.events); + + const event = { + ...events.onInvoice, + name: parsedEvents ?? events.onPayout.name, + }; + + return createTrigger(this.source, event, params ?? { connect: false }); + } + + /** + * Occurs whenever an invoice is created. + */ + onInvoiceCreated(params?: TriggerParams) { + return createTrigger(this.source, events.onInvoiceCreated, params ?? { connect: false }); + } + + /** + * Occurs whenever an invoice is finalized. + */ + onInvoiceFinalized(params?: TriggerParams) { + return createTrigger(this.source, events.onInvoiceFinalized, params ?? { connect: false }); + } + + /** + * The invoice couldn’t be finalized. + */ + onInvoiceFinalizationFailed(params?: TriggerParams) { + return createTrigger( + this.source, + events.onInvoiceFinalizationFailed, + params ?? { connect: false } + ); + } + + /** + * Occurs whenever an invoice is marked uncollectible. + */ + onInvoiceMarkedUncollectible(params?: TriggerParams) { + return createTrigger( + this.source, + events.onInvoiceMarkedUncollectible, + params ?? { connect: false } + ); + } + + onInvoicePaid(params?: TriggerParams) { + return createTrigger(this.source, events.onInvoicePaid, params ?? { connect: false }); + } + + onInvoicePaymentActionRequired(params?: TriggerParams) { + return createTrigger( + this.source, + events.onInvoicePaymentActionRequired, + params ?? { connect: false } + ); + } + + onInvoicePaymentFailed(params?: TriggerParams) { + return createTrigger(this.source, events.onInvoicePaymentFailed, params ?? { connect: false }); + } + + onInvoicePaymentSucceeded(params?: TriggerParams) { + return createTrigger( + this.source, + events.onInvoicePaymentSucceeded, + params ?? { connect: false } + ); + } + + onInvoiceSent(params?: TriggerParams) { + return createTrigger(this.source, events.onInvoiceSent, params ?? { connect: false }); + } + + onInvoiceUpcoming(params?: TriggerParams) { + return createTrigger(this.source, events.onInvoiceUpcoming, params ?? { connect: false }); + } + + onInvoiceUpdated(params?: TriggerParams) { + return createTrigger(this.source, events.onInvoiceUpdated, params ?? { connect: false }); + } + + onInvoiceVoided(params?: TriggerParams) { + return createTrigger(this.source, events.onInvoiceVoided, params ?? { connect: false }); + } + + onInvoiceItemCreated(params?: TriggerParams) { + return createTrigger(this.source, events.onInvoiceItemCreated, params ?? { connect: false }); + } + + onInvoiceItemDeleted(params?: TriggerParams) { + return createTrigger(this.source, events.onInvoiceItemDeleted, params ?? { connect: false }); + } } export type TriggerParams = { diff --git a/integrations/stripe/src/schemas.ts b/integrations/stripe/src/schemas.ts index fefd101e9..77fdd8133 100644 --- a/integrations/stripe/src/schemas.ts +++ b/integrations/stripe/src/schemas.ts @@ -1,6 +1,8 @@ -import { z } from "zod" +import { z } from "zod"; -export const PriceEventNamesSchema = z.array(z.enum(["price.created", "price.updated", "price.deleted"])); +export const PriceEventNamesSchema = z.array( + z.enum(["price.created", "price.updated", "price.deleted"]) +); export type PriceEventNames = z.infer; export const ProductEventNamesSchema = z.array( @@ -87,4 +89,22 @@ export const PayoutEventNamesSchema = z.array( "payout.updated", ]) ); -export type PayoutEventNames = z.infer; \ No newline at end of file +export type PayoutEventNames = z.infer; + +export const InvoiceEventNamesSchema = z.array( + z.enum([ + "invoice.created", + "invoice.finalized", + "invoice.finalization_failed", + "invoice.deleted", + "invoice.marked_uncollectible", + "invoice.paid", + "invoice.payment_action_required", + "invoice.payment_failed", + "invoice.payment_succeeded", + "invoice.sent", + "invoice.upcoming", + "invoice.voided", + ]) +); +export type InvoiceEventNames = z.infer; diff --git a/integrations/stripe/src/types.ts b/integrations/stripe/src/types.ts index 28f6a45a8..2bc1cbe1a 100644 --- a/integrations/stripe/src/types.ts +++ b/integrations/stripe/src/types.ts @@ -86,3 +86,7 @@ export type OnPaymentIntentEvent = ExtractWebhookPayload; export type OnPayoutEvent = ExtractWebhookPayload; + +export type OnInvoiceEvent = ExtractWebhookPayload; + +export type OnInvoiceItemEvent = ExtractWebhookPayload;