Files
2026-07-13 13:34:48 +08:00

287 lines
8.8 KiB
TypeScript

import { IntegrationDefinition, z } from '@botpress/sdk'
import {
createCustomerInputSchema,
createCustomerOutputSchema,
createOrRetrieveCustomerInputSchema,
createOrRetrieveCustomerOutputSchema,
createPaymentLinkInputSchema,
createPaymentLinkOutputSchema,
createSubsLinkInputSchema,
createSubsLinkOutputSchema,
deactivatePaymentLinkInputSchema,
deactivatePaymentLinkOutputSchema,
findPaymentLinkInputSchema,
findPaymentLinkOutputSchema,
listCustomersInputSchema,
listCustomersOutputSchema,
listPaymentLinksInputSchema,
listPaymentLinksOutputSchema,
listProductPricesInputSchema,
listProductPricesOutputSchema,
retrieveCustomerByIdInputSchema,
retrieveCustomerByIdOutputSchema,
searchCustomersInputSchema,
searchCustomersOutputSchema,
chargeFailedSchema,
invoicePaymentFailedSchema,
paymentIntentFailedSchema,
subscriptionDeletedSchema,
subscriptionUpdatedSchema,
subscriptionCreatedSchema,
subscriptionScheduleCreatedSchema,
subscriptionScheduleUpdatedSchema,
} from './src/misc/custom-schemas'
export default new IntegrationDefinition({
name: 'stripe',
version: '0.6.1',
title: 'Stripe',
readme: 'hub.md',
icon: 'icon.svg',
description:
'Manage payments, subscriptions, and customers seamlessly. Execute workflows on charge failures and subscription updates.',
configuration: {
identifier: {
linkTemplateScript: 'linkTemplate.vrl',
},
schema: z.object({
apiVersion: z
.string()
.optional()
.default('2023-10-16')
.describe('API Version (optional) (default: 2023-10-16)')
.title('API Version'),
}),
},
events: {
chargeFailed: {
schema: chargeFailedSchema,
title: 'Charge Failed',
description: 'This event occurs when a charge fails in Stripe.',
},
subscriptionDeleted: {
schema: subscriptionDeletedSchema,
title: 'Subscription Deleted',
description: 'This event occurs when a subscription is canceled/deleted in Stripe.',
},
subscriptionUpdated: {
schema: subscriptionUpdatedSchema,
title: 'Subscription Updated',
description:
'This event occurs when a subscription is updated in Stripe. For example when the subscription is cancelled, but does not terminate immediately cancel_at_period_end goes to true.',
},
subscriptionCreated: {
schema: subscriptionCreatedSchema,
title: 'Subscription Created',
description:
'This event occurs when a subscription is created in Stripe. For example when the subscription is cancelled, but does not terminate immediately cancel_at_period_end goes to true.',
},
invoicePaymentFailed: {
schema: invoicePaymentFailedSchema,
title: 'Invoice Payment Failed',
description: 'This event occurs when an invoice payment fails in Stripe.',
},
paymentIntentFailed: {
schema: paymentIntentFailedSchema,
title: 'Payment Intent Failed',
description: 'This event occurs when a payment intent fails in Stripe.',
},
subscriptionScheduleCreated: {
schema: subscriptionScheduleCreatedSchema,
title: 'Subscription Schedule Created',
description: 'This event occurs when a subscription schedule is created in Stripe.',
},
subscriptionScheduleUpdated: {
schema: subscriptionScheduleUpdatedSchema,
title: 'Subscription Schedule Updated',
description: 'This event occurs when a subscription schedule is updated in Stripe.',
},
},
user: {
tags: {
id: {
title: 'Stripe customer ID',
description: 'The unique identifier for a Stripe customer.',
},
},
},
channels: {},
states: {
oAuthCredentials: {
type: 'integration',
schema: z.object({
accessToken: z.string().secret().title('Access Token').describe('The OAuth access token'),
refreshToken: z.string().secret().title('Refresh Token').describe('The rotating OAuth refresh token'),
expiresAt: z
.string()
.datetime()
.title('Access Token Expires At')
.describe('The timestamp of when the access token expires'),
refreshExpiresAt: z
.string()
.datetime()
.title('Refresh Token Expires At')
.describe('The timestamp of when the refresh token expires'),
scopes: z.array(z.string()).title('Scopes').describe('The scopes granted to the token'),
stripeUserId: z
.string()
.title('Stripe Account ID')
.describe('The Stripe account ID (acct_xxx) the token was issued for'),
livemode: z.boolean().title('Live Mode').describe('Whether the token operates against Stripe live mode'),
}),
},
manualCredentials: {
type: 'integration',
schema: z.object({
apiKey: z
.string()
.secret()
.title('Stripe API Key')
.describe('The secret key or a restricted key from your Stripe account'),
}),
},
stripeIntegrationInfo: {
type: 'integration',
schema: z.object({
stripeWebhookId: z
.string()
.title('Stripe Webhook ID')
.describe('The unique identifier for the Stripe webhook.'),
stripeWebhookSecret: z
.string()
.secret()
.optional()
.title('Stripe Webhook Signing Secret')
.describe('The signing secret returned by Stripe when the webhook endpoint was created.'),
}),
},
},
secrets: {
CLIENT_ID: {
description: 'The client ID of the Stripe OAuth app.',
},
CLIENT_SECRET: {
description: 'The Stripe secret API key (sk_live_/sk_test_) used to authenticate to the OAuth token endpoint.',
},
},
actions: {
createPaymentLink: {
title: 'Create Payment Link',
description: 'Creates a Stripe payment link for a product.',
input: {
schema: createPaymentLinkInputSchema,
},
output: {
schema: createPaymentLinkOutputSchema,
},
},
listProductPrices: {
title: 'List Product Prices',
description: 'Lists all Stripe product prices.',
input: {
schema: listProductPricesInputSchema,
},
output: {
schema: listProductPricesOutputSchema,
},
},
createSubsLink: {
title: 'Create Subscription Payment Link',
description: 'Creates a Stripe payment link for a subscription product.',
input: {
schema: createSubsLinkInputSchema,
},
output: {
schema: createSubsLinkOutputSchema,
},
},
listPaymentLinks: {
title: 'List Payment Links',
description: 'Lists all active Stripe payment links.',
input: {
schema: listPaymentLinksInputSchema,
},
output: {
schema: listPaymentLinksOutputSchema,
},
},
findPaymentLink: {
title: 'Find Payment Link',
description: 'Finds a Stripe payment link by URL.',
input: {
schema: findPaymentLinkInputSchema,
},
output: {
schema: findPaymentLinkOutputSchema,
},
},
deactivatePaymentLink: {
title: 'Deactivate Payment Link',
description: 'Deactivates a Stripe payment link by ID.',
input: {
schema: deactivatePaymentLinkInputSchema,
},
output: {
schema: deactivatePaymentLinkOutputSchema,
},
},
listCustomers: {
title: 'List Customers By Email',
description: 'Lists Stripe customers, optionally filtered by email.',
input: {
schema: listCustomersInputSchema,
},
output: {
schema: listCustomersOutputSchema,
},
},
searchCustomers: {
title: 'Search Customers By Fields',
description: 'Searches Stripe customers by email, name, or phone.',
input: {
schema: searchCustomersInputSchema,
},
output: {
schema: searchCustomersOutputSchema,
},
},
createCustomer: {
title: 'Create Customer',
description: 'Creates a new Stripe customer.',
input: {
schema: createCustomerInputSchema,
},
output: {
schema: createCustomerOutputSchema,
},
},
createOrRetrieveCustomer: {
title: 'Create Or Retrieve Customer',
description: 'Creates a new Stripe customer or retrieves an existing one by email.',
input: {
schema: createOrRetrieveCustomerInputSchema,
},
output: {
schema: createOrRetrieveCustomerOutputSchema,
},
},
retrieveCustomerById: {
title: 'Retrieve Customer By ID',
description: 'Retrieves a Stripe customer by their ID.',
input: {
schema: retrieveCustomerByIdInputSchema,
},
output: {
schema: retrieveCustomerByIdOutputSchema,
},
},
},
__advanced: {
useLegacyZuiTransformer: true,
},
attributes: {
category: 'E-commerce & Payments',
repo: 'botpress',
},
})