diff --git a/packages/components/credentials/StripeApi.credential.ts b/packages/components/credentials/StripeApi.credential.ts
new file mode 100644
index 000000000..9be183fe4
--- /dev/null
+++ b/packages/components/credentials/StripeApi.credential.ts
@@ -0,0 +1,27 @@
+import { INodeParams, INodeCredential } from '../src/Interface'
+
+class StripeApi implements INodeCredential {
+ label: string
+ name: string
+ version: number
+ description: string
+ inputs: INodeParams[]
+
+ constructor() {
+ this.label = 'Stripe API'
+ this.name = 'stripeApi'
+ this.version = 1.0
+ this.description =
+ 'Refer to official guide on how to get accessToken on Airtable'
+ this.inputs = [
+ {
+ label: 'Stripe API Token',
+ name: 'stripeApiToken',
+ type: 'password',
+ placeholder: ''
+ }
+ ]
+ }
+}
+
+module.exports = { credClass: StripeApi }
diff --git a/packages/components/nodes/tools/StripeTool/StripeTool.ts b/packages/components/nodes/tools/StripeTool/StripeTool.ts
new file mode 100644
index 000000000..df6c17a96
--- /dev/null
+++ b/packages/components/nodes/tools/StripeTool/StripeTool.ts
@@ -0,0 +1,271 @@
+import { StripeAgentToolkit } from '@stripe/agent-toolkit/langchain'
+import { ICommonObject, INode, INodeData, INodeParams } from '../../../src/Interface'
+import { convertMultiOptionsToStringArray, getCredentialData, getCredentialParam } from '../../../src/utils'
+
+class StripeTool_Tools implements INode {
+ label: string
+ name: string
+ version: number
+ description: string
+ type: string
+ icon: string
+ category: string
+ baseClasses: string[]
+ credential: INodeParams
+ inputs: INodeParams[]
+ badge?: string
+
+ constructor() {
+ this.label = 'StripeAgentTool'
+ this.name = 'stripeAgentTool'
+ this.version = 1.0
+ this.type = 'stripeAgentTool'
+ this.icon = 'stripe.png'
+ this.category = 'Tools'
+ this.description = 'Use Stripe Agent function calling for financial transactions'
+ this.badge = 'BETA'
+ this.inputs = [
+ {
+ label: 'Payment Links',
+ name: 'paymentLinks',
+ type: 'multiOptions',
+ options: [
+ {
+ label: 'Create',
+ name: 'create'
+ },
+ {
+ label: 'Update',
+ name: 'update'
+ },
+ {
+ label: 'Read',
+ name: 'read'
+ }
+ ],
+ optional: true,
+ additionalParams: true
+ },
+ {
+ label: 'Products',
+ name: 'products',
+ type: 'multiOptions',
+ options: [
+ {
+ label: 'Create',
+ name: 'create'
+ },
+ {
+ label: 'Update',
+ name: 'update'
+ },
+ {
+ label: 'Read',
+ name: 'read'
+ }
+ ],
+ optional: true,
+ additionalParams: true
+ },
+ {
+ label: 'Prices',
+ name: 'prices',
+ type: 'multiOptions',
+ options: [
+ {
+ label: 'Create',
+ name: 'create'
+ },
+ {
+ label: 'Update',
+ name: 'update'
+ },
+ {
+ label: 'Read',
+ name: 'read'
+ }
+ ],
+ optional: true,
+ additionalParams: true
+ },
+ {
+ label: 'Balance',
+ name: 'balance',
+ type: 'multiOptions',
+ options: [
+ {
+ label: 'Create',
+ name: 'create'
+ },
+ {
+ label: 'Update',
+ name: 'update'
+ },
+ {
+ label: 'Read',
+ name: 'read'
+ }
+ ],
+ optional: true,
+ additionalParams: true
+ },
+ {
+ label: 'Invoice Items',
+ name: 'invoiceItems',
+ type: 'multiOptions',
+ options: [
+ {
+ label: 'Create',
+ name: 'create'
+ },
+ {
+ label: 'Update',
+ name: 'update'
+ },
+ {
+ label: 'Read',
+ name: 'read'
+ }
+ ],
+ optional: true,
+ additionalParams: true
+ },
+ {
+ label: 'Invoices',
+ name: 'invoices',
+ type: 'multiOptions',
+ options: [
+ {
+ label: 'Create',
+ name: 'create'
+ },
+ {
+ label: 'Update',
+ name: 'update'
+ },
+ {
+ label: 'Read',
+ name: 'read'
+ }
+ ],
+ optional: true,
+ additionalParams: true
+ },
+ {
+ label: 'Customers',
+ name: 'customers',
+ type: 'multiOptions',
+ options: [
+ {
+ label: 'Create',
+ name: 'create'
+ },
+ {
+ label: 'Update',
+ name: 'update'
+ },
+ {
+ label: 'Read',
+ name: 'read'
+ }
+ ],
+ optional: true,
+ additionalParams: true
+ }
+ ]
+ this.credential = {
+ label: 'Connect Credential',
+ name: 'credential',
+ type: 'credential',
+ credentialNames: ['stripeApi']
+ }
+ this.baseClasses = [this.type, 'Tool']
+ }
+
+ async init(nodeData: INodeData, _: string, options: ICommonObject): Promise {
+ const credentialData = await getCredentialData(nodeData.credential ?? '', options)
+ const stripeApiToken = getCredentialParam('stripeApiToken', credentialData, nodeData)
+
+ const _paymentLinks = nodeData.inputs?.paymentLinks as string
+ let paymentLinks: string[] = convertMultiOptionsToStringArray(_paymentLinks)
+
+ const _products = nodeData.inputs?.products as string
+ let products: string[] = convertMultiOptionsToStringArray(_products)
+
+ const _prices = nodeData.inputs?.prices as string
+ let prices: string[] = convertMultiOptionsToStringArray(_prices)
+
+ const _balance = nodeData.inputs?.balance as string
+ let balance: string[] = convertMultiOptionsToStringArray(_balance)
+
+ const _invoiceItems = nodeData.inputs?.invoiceItems as string
+ let invoiceItems: string[] = convertMultiOptionsToStringArray(_invoiceItems)
+
+ const _invoices = nodeData.inputs?.invoices as string
+ let invoices: string[] = convertMultiOptionsToStringArray(_invoices)
+
+ const _customers = nodeData.inputs?.customers as string
+ let customers: string[] = convertMultiOptionsToStringArray(_customers)
+
+ const actionObj: any = {}
+ if (paymentLinks.length > 0) {
+ actionObj['paymentLinks'] = {}
+ if (paymentLinks.includes('create')) actionObj['paymentLinks'].create = true
+ if (paymentLinks.includes('read')) actionObj['paymentLinks'].read = true
+ if (paymentLinks.includes('update')) actionObj['paymentLinks'].update = true
+ }
+ if (products.length > 0) {
+ actionObj['products'] = {}
+ if (products.includes('create')) actionObj['products'].create = true
+ if (products.includes('read')) actionObj['products'].read = true
+ if (products.includes('update')) actionObj['products'].update = true
+ }
+ if (prices.length > 0) {
+ actionObj['prices'] = {}
+ if (prices.includes('create')) actionObj['prices'].create = true
+ if (prices.includes('read')) actionObj['prices'].read = true
+ if (prices.includes('update')) actionObj['prices'].update = true
+ }
+ if (balance.length > 0) {
+ actionObj['balance'] = {}
+ if (balance.includes('create')) actionObj['balance'].create = true
+ if (balance.includes('read')) actionObj['balance'].read = true
+ if (balance.includes('update')) actionObj['balance'].update = true
+ }
+ if (invoiceItems.length > 0) {
+ actionObj['invoiceItems'] = {}
+ if (invoiceItems.includes('create')) actionObj['invoiceItems'].create = true
+ if (invoiceItems.includes('read')) actionObj['invoiceItems'].read = true
+ if (invoiceItems.includes('update')) actionObj['invoiceItems'].update = true
+ }
+ if (invoices.length > 0) {
+ actionObj['invoices'] = {}
+ if (invoices.includes('create')) actionObj['invoices'].create = true
+ if (invoices.includes('read')) actionObj['invoices'].read = true
+ if (invoices.includes('update')) actionObj['invoices'].update = true
+ }
+ if (customers.length > 0) {
+ actionObj['customers'] = {}
+ if (customers.includes('create')) actionObj['customers'].create = true
+ if (customers.includes('read')) actionObj['customers'].read = true
+ if (customers.includes('update')) actionObj['customers'].update = true
+ }
+
+ const stripeAgentToolkit = new StripeAgentToolkit({
+ secretKey: stripeApiToken,
+ configuration: {
+ actions: actionObj
+ }
+ })
+
+ const stripeTool = stripeAgentToolkit.getTools()
+ for (const tool of stripeTool) {
+ // convert tool name into small letter, and space to underscore, ex: Create Payment Link => create_payment_link
+ tool.name = tool.name.split(' ').join('_').toLowerCase()
+ }
+
+ return stripeTool
+ }
+}
+
+module.exports = { nodeClass: StripeTool_Tools }
diff --git a/packages/components/nodes/tools/StripeTool/stripe.png b/packages/components/nodes/tools/StripeTool/stripe.png
new file mode 100644
index 000000000..b73ff0db3
Binary files /dev/null and b/packages/components/nodes/tools/StripeTool/stripe.png differ
diff --git a/packages/components/package.json b/packages/components/package.json
index a4f772de1..1e7a54cc3 100644
--- a/packages/components/package.json
+++ b/packages/components/package.json
@@ -59,6 +59,7 @@
"@opensearch-project/opensearch": "^1.2.0",
"@pinecone-database/pinecone": "2.2.2",
"@qdrant/js-client-rest": "^1.9.0",
+ "@stripe/agent-toolkit": "^0.1.20",
"@supabase/supabase-js": "^2.29.0",
"@types/js-yaml": "^4.0.5",
"@types/jsdom": "^21.1.1",
@@ -69,9 +70,9 @@
"assemblyai": "^4.2.2",
"axios": "1.6.2",
"cheerio": "^1.0.0-rc.12",
- "couchbase": "4.4.1",
"chromadb": "^1.5.11",
"cohere-ai": "^7.7.5",
+ "couchbase": "4.4.1",
"crypto-js": "^4.1.1",
"css-what": "^6.1.0",
"d3-dsv": "2",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 8756c0231..a187a8c49 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -220,6 +220,9 @@ importers:
'@qdrant/js-client-rest':
specifier: ^1.9.0
version: 1.9.0(typescript@5.5.2)
+ '@stripe/agent-toolkit':
+ specifier: ^0.1.20
+ version: 0.1.20(@langchain/core@0.2.18(langchain@0.2.11(@aws-sdk/client-s3@3.529.1)(@aws-sdk/credential-provider-node@3.529.1)(@gomomento/sdk-core@1.68.1)(@gomomento/sdk@1.68.1(encoding@0.1.13))(@langchain/anthropic@0.2.1)(@langchain/aws@0.0.9)(@langchain/cohere@0.0.7)(@langchain/community@0.2.17)(@langchain/google-genai@0.0.22)(@langchain/google-vertexai@0.0.19)(@langchain/groq@0.0.8)(@langchain/mistralai@0.0.26)(@langchain/ollama@0.0.2)(@mendable/firecrawl-js@0.0.28)(@notionhq/client@2.2.14(encoding@0.1.13))(@pinecone-database/pinecone@2.2.2)(@supabase/supabase-js@2.39.8(bufferutil@4.0.8)(utf-8-validate@6.0.4))(apify-client@2.9.3)(assemblyai@4.3.2(bufferutil@4.0.8)(utf-8-validate@6.0.4))(axios@1.6.2)(cheerio@1.0.0-rc.12)(chromadb@1.8.1(@google/generative-ai@0.15.0)(cohere-ai@7.10.0(encoding@0.1.13))(encoding@0.1.13)(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(couchbase@4.4.1)(d3-dsv@2.0.0)(encoding@0.1.13)(faiss-node@0.5.1)(fast-xml-parser@4.4.1)(html-to-text@9.0.5)(ignore@5.3.1)(ioredis@5.3.2)(jsdom@22.1.0(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(utf-8-validate@6.0.4))(mammoth@1.7.0)(mongodb@6.3.0(gcp-metadata@6.1.0(encoding@0.1.13))(socks@2.8.1))(notion-to-md@3.1.1(encoding@0.1.13))(openai@4.57.3(encoding@0.1.13)(zod@3.22.4))(pdf-parse@1.1.1)(playwright@1.42.1)(puppeteer@20.9.0(bufferutil@4.0.8)(encoding@0.1.13)(typescript@5.5.2)(utf-8-validate@6.0.4))(pyodide@0.25.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(redis@4.6.13)(srt-parser-2@1.2.3)(typeorm@0.3.20(ioredis@5.3.2)(mongodb@6.3.0(gcp-metadata@6.1.0(encoding@0.1.13))(socks@2.8.1))(mysql2@3.11.4)(pg@8.11.3)(redis@4.6.13)(sqlite3@5.1.7)(ts-node@10.9.2(@swc/core@1.4.6)(@types/node@20.12.12)(typescript@5.5.2)))(weaviate-ts-client@1.6.0(encoding@0.1.13)(graphql@16.8.1))(ws@8.16.0(bufferutil@4.0.8)(utf-8-validate@6.0.4)))(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(ai@3.2.22(openai@4.57.3(encoding@0.1.13)(zod@3.22.4))(react@18.2.0)(solid-js@1.7.1)(svelte@4.2.18)(vue@3.4.31(typescript@5.5.2))(zod@3.22.4))
'@supabase/supabase-js':
specifier: ^2.29.0
version: 2.39.8(bufferutil@4.0.8)(utf-8-validate@6.0.4)
@@ -5273,6 +5276,13 @@ packages:
'@sqltools/formatter@1.2.5':
resolution: { integrity: sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw== }
+ '@stripe/agent-toolkit@0.1.20':
+ resolution: { integrity: sha512-Qg7OVkkIQhsOwjQOQiwG6ldKBDNM42tjc6qyTBPCR+8aMrf33vTfhHjvLv8NjtOCt2eElBdVqH78JBS5DZi1Xg== }
+ engines: { node: '>=18' }
+ peerDependencies:
+ '@langchain/core': 0.2.18
+ ai: ^3.4.7
+
'@supabase/functions-js@2.1.5':
resolution: { integrity: sha512-BNzC5XhCzzCaggJ8s53DP+WeHHGT/NfTsx2wUSSGKR2/ikLFQTBCDzMvGz/PxYMqRko/LwncQtKXGOYp1PkPaw== }
@@ -14812,6 +14822,10 @@ packages:
resolution: { integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== }
engines: { node: '>=8' }
+ stripe@17.3.1:
+ resolution: { integrity: sha512-E9/u+GFBPkYnTmfFCoKX3+gP4R3SkZoGunHe4cw9J+sqkj5uxpLFf1LscuI9BuEyIQ0PFAgPTHavgQwRtOvnag== }
+ engines: { node: '>=12.*' }
+
strnum@1.0.5:
resolution: { integrity: sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA== }
@@ -22832,6 +22846,13 @@ snapshots:
'@sqltools/formatter@1.2.5': {}
+ '@stripe/agent-toolkit@0.1.20(@langchain/core@0.2.18(langchain@0.2.11(@aws-sdk/client-s3@3.529.1)(@aws-sdk/credential-provider-node@3.529.1)(@gomomento/sdk-core@1.68.1)(@gomomento/sdk@1.68.1(encoding@0.1.13))(@langchain/anthropic@0.2.1)(@langchain/aws@0.0.9)(@langchain/cohere@0.0.7)(@langchain/community@0.2.17)(@langchain/google-genai@0.0.22)(@langchain/google-vertexai@0.0.19)(@langchain/groq@0.0.8)(@langchain/mistralai@0.0.26)(@langchain/ollama@0.0.2)(@mendable/firecrawl-js@0.0.28)(@notionhq/client@2.2.14(encoding@0.1.13))(@pinecone-database/pinecone@2.2.2)(@supabase/supabase-js@2.39.8(bufferutil@4.0.8)(utf-8-validate@6.0.4))(apify-client@2.9.3)(assemblyai@4.3.2(bufferutil@4.0.8)(utf-8-validate@6.0.4))(axios@1.6.2)(cheerio@1.0.0-rc.12)(chromadb@1.8.1(@google/generative-ai@0.15.0)(cohere-ai@7.10.0(encoding@0.1.13))(encoding@0.1.13)(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(couchbase@4.4.1)(d3-dsv@2.0.0)(encoding@0.1.13)(faiss-node@0.5.1)(fast-xml-parser@4.4.1)(html-to-text@9.0.5)(ignore@5.3.1)(ioredis@5.3.2)(jsdom@22.1.0(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(utf-8-validate@6.0.4))(mammoth@1.7.0)(mongodb@6.3.0(gcp-metadata@6.1.0(encoding@0.1.13))(socks@2.8.1))(notion-to-md@3.1.1(encoding@0.1.13))(openai@4.57.3(encoding@0.1.13)(zod@3.22.4))(pdf-parse@1.1.1)(playwright@1.42.1)(puppeteer@20.9.0(bufferutil@4.0.8)(encoding@0.1.13)(typescript@5.5.2)(utf-8-validate@6.0.4))(pyodide@0.25.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(redis@4.6.13)(srt-parser-2@1.2.3)(typeorm@0.3.20(ioredis@5.3.2)(mongodb@6.3.0(gcp-metadata@6.1.0(encoding@0.1.13))(socks@2.8.1))(mysql2@3.11.4)(pg@8.11.3)(redis@4.6.13)(sqlite3@5.1.7)(ts-node@10.9.2(@swc/core@1.4.6)(@types/node@20.12.12)(typescript@5.5.2)))(weaviate-ts-client@1.6.0(encoding@0.1.13)(graphql@16.8.1))(ws@8.16.0(bufferutil@4.0.8)(utf-8-validate@6.0.4)))(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(ai@3.2.22(openai@4.57.3(encoding@0.1.13)(zod@3.22.4))(react@18.2.0)(solid-js@1.7.1)(svelte@4.2.18)(vue@3.4.31(typescript@5.5.2))(zod@3.22.4))':
+ dependencies:
+ '@langchain/core': 0.2.18(langchain@0.2.11(@aws-sdk/client-s3@3.529.1)(@aws-sdk/credential-provider-node@3.529.1)(@gomomento/sdk-core@1.68.1)(@gomomento/sdk@1.68.1(encoding@0.1.13))(@langchain/anthropic@0.2.1)(@langchain/aws@0.0.9)(@langchain/cohere@0.0.7)(@langchain/community@0.2.17)(@langchain/google-genai@0.0.22)(@langchain/google-vertexai@0.0.19)(@langchain/groq@0.0.8)(@langchain/mistralai@0.0.26)(@langchain/ollama@0.0.2)(@mendable/firecrawl-js@0.0.28)(@notionhq/client@2.2.14(encoding@0.1.13))(@pinecone-database/pinecone@2.2.2)(@supabase/supabase-js@2.39.8(bufferutil@4.0.8)(utf-8-validate@6.0.4))(apify-client@2.9.3)(assemblyai@4.3.2(bufferutil@4.0.8)(utf-8-validate@6.0.4))(axios@1.6.2)(cheerio@1.0.0-rc.12)(chromadb@1.8.1(@google/generative-ai@0.15.0)(cohere-ai@7.10.0(encoding@0.1.13))(encoding@0.1.13)(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(couchbase@4.4.1)(d3-dsv@2.0.0)(encoding@0.1.13)(faiss-node@0.5.1)(fast-xml-parser@4.4.1)(html-to-text@9.0.5)(ignore@5.3.1)(ioredis@5.3.2)(jsdom@22.1.0(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(utf-8-validate@6.0.4))(mammoth@1.7.0)(mongodb@6.3.0(gcp-metadata@6.1.0(encoding@0.1.13))(socks@2.8.1))(notion-to-md@3.1.1(encoding@0.1.13))(openai@4.57.3(encoding@0.1.13)(zod@3.22.4))(pdf-parse@1.1.1)(playwright@1.42.1)(puppeteer@20.9.0(bufferutil@4.0.8)(encoding@0.1.13)(typescript@5.5.2)(utf-8-validate@6.0.4))(pyodide@0.25.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(redis@4.6.13)(srt-parser-2@1.2.3)(typeorm@0.3.20(ioredis@5.3.2)(mongodb@6.3.0(gcp-metadata@6.1.0(encoding@0.1.13))(socks@2.8.1))(mysql2@3.11.4)(pg@8.11.3)(redis@4.6.13)(sqlite3@5.1.7)(ts-node@10.9.2(@swc/core@1.4.6)(@types/node@20.12.12)(typescript@5.5.2)))(weaviate-ts-client@1.6.0(encoding@0.1.13)(graphql@16.8.1))(ws@8.16.0(bufferutil@4.0.8)(utf-8-validate@6.0.4)))(openai@4.57.3(encoding@0.1.13)(zod@3.22.4))
+ ai: 3.2.22(openai@4.57.3(encoding@0.1.13)(zod@3.22.4))(react@18.2.0)(solid-js@1.7.1)(svelte@4.2.18)(vue@3.4.31(typescript@5.5.2))(zod@3.22.4)
+ stripe: 17.3.1
+ zod: 3.23.8
+
'@supabase/functions-js@2.1.5':
dependencies:
'@supabase/node-fetch': 2.6.15
@@ -34568,6 +34589,11 @@ snapshots:
strip-json-comments@3.1.1: {}
+ stripe@17.3.1:
+ dependencies:
+ '@types/node': 20.12.12
+ qs: 6.12.1
+
strnum@1.0.5: {}
stubs@3.0.0: {}