@elevasis/core 0.23.0 → 0.24.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (243) hide show
  1. package/dist/index.d.ts +4343 -2690
  2. package/dist/index.js +1101 -156
  3. package/dist/knowledge/index.d.ts +574 -210
  4. package/dist/knowledge/index.js +104 -1
  5. package/dist/organization-model/index.d.ts +4343 -2690
  6. package/dist/organization-model/index.js +1101 -156
  7. package/dist/test-utils/index.d.ts +483 -109
  8. package/dist/test-utils/index.js +904 -144
  9. package/package.json +3 -3
  10. package/src/README.md +14 -14
  11. package/src/__tests__/publish.test.ts +24 -24
  12. package/src/__tests__/template-core-compatibility.test.ts +9 -12
  13. package/src/_gen/__tests__/__snapshots__/contracts.md.snap +2137 -2093
  14. package/src/_gen/__tests__/scaffold-contracts.test.ts +30 -30
  15. package/src/auth/multi-tenancy/credentials/__tests__/encryption.test.ts +217 -217
  16. package/src/auth/multi-tenancy/credentials/server/encryption.ts +69 -69
  17. package/src/auth/multi-tenancy/credentials/server/kek-loader.ts +37 -37
  18. package/src/auth/multi-tenancy/index.ts +26 -26
  19. package/src/auth/multi-tenancy/invitations/api-schemas.ts +104 -104
  20. package/src/auth/multi-tenancy/memberships/api-schemas.ts +143 -143
  21. package/src/auth/multi-tenancy/memberships/index.ts +26 -26
  22. package/src/auth/multi-tenancy/memberships/membership.ts +130 -130
  23. package/src/auth/multi-tenancy/organizations/__tests__/api-schemas.test.ts +194 -194
  24. package/src/auth/multi-tenancy/organizations/api-schemas.ts +136 -136
  25. package/src/auth/multi-tenancy/permissions.test.ts +42 -42
  26. package/src/auth/multi-tenancy/permissions.ts +123 -123
  27. package/src/auth/multi-tenancy/role-management/api-schemas.ts +78 -78
  28. package/src/auth/multi-tenancy/role-management/index.ts +16 -16
  29. package/src/auth/multi-tenancy/theme-presets.ts +45 -45
  30. package/src/auth/multi-tenancy/types.ts +57 -57
  31. package/src/auth/multi-tenancy/users/api-schemas.ts +165 -165
  32. package/src/business/README.md +2 -2
  33. package/src/business/acquisition/activity-events.test.ts +250 -250
  34. package/src/business/acquisition/activity-events.ts +93 -93
  35. package/src/business/acquisition/api-schemas.test.ts +1883 -1843
  36. package/src/business/acquisition/api-schemas.ts +1492 -1497
  37. package/src/business/acquisition/build-templates.test.ts +240 -240
  38. package/src/business/acquisition/build-templates.ts +98 -98
  39. package/src/business/acquisition/crm-next-action.test.ts +262 -262
  40. package/src/business/acquisition/crm-next-action.ts +220 -220
  41. package/src/business/acquisition/crm-priority.test.ts +216 -216
  42. package/src/business/acquisition/crm-priority.ts +349 -349
  43. package/src/business/acquisition/crm-state-actions.test.ts +153 -153
  44. package/src/business/acquisition/deal-ownership.test.ts +351 -351
  45. package/src/business/acquisition/deal-ownership.ts +120 -120
  46. package/src/business/acquisition/derive-actions.test.ts +129 -104
  47. package/src/business/acquisition/derive-actions.ts +74 -84
  48. package/src/business/acquisition/index.ts +171 -170
  49. package/src/business/acquisition/ontology-validation.ts +309 -0
  50. package/src/business/acquisition/stateful.ts +30 -30
  51. package/src/business/acquisition/types.ts +396 -396
  52. package/src/business/clients/api-schemas.test.ts +115 -115
  53. package/src/business/clients/api-schemas.ts +158 -158
  54. package/src/business/clients/index.ts +1 -1
  55. package/src/business/crm/api-schemas.ts +40 -40
  56. package/src/business/crm/index.ts +1 -1
  57. package/src/business/deals/api-schemas.ts +87 -87
  58. package/src/business/deals/index.ts +1 -1
  59. package/src/business/index.ts +5 -5
  60. package/src/business/projects/types.ts +144 -144
  61. package/src/commands/queue/types/task.ts +15 -15
  62. package/src/execution/core/runner-types.ts +61 -61
  63. package/src/execution/core/sse-executions.ts +7 -7
  64. package/src/execution/engine/__tests__/fixtures/test-agents.ts +10 -10
  65. package/src/execution/engine/agent/core/__tests__/agent.test.ts +16 -16
  66. package/src/execution/engine/agent/core/__tests__/error-passthrough.test.ts +4 -4
  67. package/src/execution/engine/agent/core/types.ts +25 -25
  68. package/src/execution/engine/agent/index.ts +6 -6
  69. package/src/execution/engine/agent/reasoning/__tests__/request-builder.test.ts +24 -24
  70. package/src/execution/engine/index.ts +443 -443
  71. package/src/execution/engine/tools/integration/server/adapters/apify/__tests__/apify-run-actor.integration.test.ts +298 -298
  72. package/src/execution/engine/tools/integration/server/adapters/apify/apify-adapter.test.ts +55 -55
  73. package/src/execution/engine/tools/integration/server/adapters/apify/apify-adapter.ts +107 -107
  74. package/src/execution/engine/tools/integration/server/adapters/apollo/apollo-adapter.test.ts +48 -48
  75. package/src/execution/engine/tools/integration/server/adapters/apollo/apollo-adapter.ts +99 -99
  76. package/src/execution/engine/tools/integration/server/adapters/apollo/index.ts +1 -1
  77. package/src/execution/engine/tools/integration/server/adapters/attio/__tests__/attio-crud.integration.test.ts +363 -363
  78. package/src/execution/engine/tools/integration/server/adapters/attio/fetch/get-record/index.test.ts +162 -162
  79. package/src/execution/engine/tools/integration/server/adapters/attio/fetch/list-records/index.test.ts +316 -316
  80. package/src/execution/engine/tools/integration/server/adapters/clickup/clickup-adapter.test.ts +18 -18
  81. package/src/execution/engine/tools/integration/server/adapters/clickup/clickup-adapter.ts +194 -194
  82. package/src/execution/engine/tools/integration/server/adapters/clickup/index.ts +7 -7
  83. package/src/execution/engine/tools/integration/server/adapters/gmail/gmail-adapter.ts +204 -204
  84. package/src/execution/engine/tools/integration/server/adapters/gmail/gmail-tools.ts +105 -105
  85. package/src/execution/engine/tools/integration/server/adapters/google-calendar/google-calendar-adapter.ts +428 -428
  86. package/src/execution/engine/tools/integration/server/adapters/google-calendar/index.ts +2 -2
  87. package/src/execution/engine/tools/integration/server/adapters/google-sheets/__tests__/google-sheets.integration.test.ts +261 -261
  88. package/src/execution/engine/tools/integration/server/adapters/instantly/instantly-tools.ts +1474 -1474
  89. package/src/execution/engine/tools/integration/server/adapters/millionverifier/millionverifier-tools.ts +103 -103
  90. package/src/execution/engine/tools/integration/server/adapters/resend/fetch/send-email/index.test.ts +88 -88
  91. package/src/execution/engine/tools/integration/server/adapters/resend/fetch/send-email/index.ts +141 -141
  92. package/src/execution/engine/tools/integration/server/adapters/resend/fetch/utils/types.ts +76 -76
  93. package/src/execution/engine/tools/integration/server/adapters/signature-api/signature-api-tools.ts +182 -182
  94. package/src/execution/engine/tools/integration/server/adapters/stripe/stripe-tools.ts +310 -310
  95. package/src/execution/engine/tools/integration/service.test.ts +239 -239
  96. package/src/execution/engine/tools/integration/service.ts +172 -172
  97. package/src/execution/engine/tools/integration/tool.ts +255 -255
  98. package/src/execution/engine/tools/lead-service-types.ts +1005 -1005
  99. package/src/execution/engine/tools/messages.ts +43 -43
  100. package/src/execution/engine/tools/platform/acquisition/company-tools.ts +7 -7
  101. package/src/execution/engine/tools/platform/acquisition/contact-tools.ts +6 -6
  102. package/src/execution/engine/tools/platform/acquisition/list-tools.ts +6 -6
  103. package/src/execution/engine/tools/platform/acquisition/types.ts +280 -280
  104. package/src/execution/engine/tools/platform/email/types.ts +97 -97
  105. package/src/execution/engine/tools/registry.ts +704 -704
  106. package/src/execution/engine/tools/tool-maps.ts +831 -831
  107. package/src/execution/engine/tools/types.ts +234 -234
  108. package/src/execution/engine/workflow/types.ts +195 -197
  109. package/src/execution/external/__tests__/api-schemas.test.ts +127 -127
  110. package/src/execution/external/api-schemas.ts +40 -40
  111. package/src/execution/external/index.ts +1 -1
  112. package/src/index.ts +18 -18
  113. package/src/integrations/credentials/__tests__/api-schemas.test.ts +420 -420
  114. package/src/integrations/credentials/api-schemas.ts +146 -146
  115. package/src/integrations/credentials/schemas.ts +200 -200
  116. package/src/integrations/oauth/__tests__/provider-registry.test.ts +7 -7
  117. package/src/integrations/oauth/provider-registry.ts +74 -74
  118. package/src/integrations/oauth/server/credentials.ts +43 -43
  119. package/src/integrations/webhook-endpoints/__tests__/api-schemas.test.ts +327 -327
  120. package/src/integrations/webhook-endpoints/api-schemas.ts +103 -103
  121. package/src/integrations/webhook-endpoints/types.ts +58 -58
  122. package/src/knowledge/README.md +32 -32
  123. package/src/knowledge/__tests__/queries.test.ts +626 -535
  124. package/src/knowledge/format.ts +99 -99
  125. package/src/knowledge/index.ts +5 -5
  126. package/src/knowledge/published.ts +5 -5
  127. package/src/knowledge/queries.ts +269 -218
  128. package/src/operations/activities/api-schemas.ts +80 -80
  129. package/src/operations/activities/types.ts +64 -64
  130. package/src/organization-model/README.md +149 -149
  131. package/src/organization-model/__tests__/content-kinds-registry.test.ts +210 -210
  132. package/src/organization-model/__tests__/defaults.test.ts +168 -168
  133. package/src/organization-model/__tests__/domains/actions.test.ts +78 -56
  134. package/src/organization-model/__tests__/domains/customers.test.ts +299 -299
  135. package/src/organization-model/__tests__/domains/entities.test.ts +56 -56
  136. package/src/organization-model/__tests__/domains/goals.test.ts +493 -493
  137. package/src/organization-model/__tests__/domains/identity.test.ts +280 -280
  138. package/src/organization-model/__tests__/domains/navigation.test.ts +268 -268
  139. package/src/organization-model/__tests__/domains/offerings.test.ts +414 -414
  140. package/src/organization-model/__tests__/domains/policies.test.ts +323 -323
  141. package/src/organization-model/__tests__/domains/resource-mappings.test.ts +293 -293
  142. package/src/organization-model/__tests__/domains/resources.test.ts +387 -277
  143. package/src/organization-model/__tests__/domains/roles.test.ts +463 -463
  144. package/src/organization-model/__tests__/domains/statuses.test.ts +246 -246
  145. package/src/organization-model/__tests__/domains/systems.test.ts +209 -209
  146. package/src/organization-model/__tests__/domains/topology.test.ts +188 -0
  147. package/src/organization-model/__tests__/flatten-additive-merge.test.ts +362 -361
  148. package/src/organization-model/__tests__/foundation.test.ts +77 -77
  149. package/src/organization-model/__tests__/get-resources-for-system.test.ts +144 -144
  150. package/src/organization-model/__tests__/graph.test.ts +1312 -862
  151. package/src/organization-model/__tests__/icons.test.ts +10 -1
  152. package/src/organization-model/__tests__/knowledge.test.ts +251 -15
  153. package/src/organization-model/__tests__/lookup-helpers.test.ts +438 -438
  154. package/src/organization-model/__tests__/migration-helpers.test.ts +591 -591
  155. package/src/organization-model/__tests__/prospecting-ssot.test.ts +103 -103
  156. package/src/organization-model/__tests__/recursive-system-schema.test.ts +535 -506
  157. package/src/organization-model/__tests__/resolve.test.ts +274 -164
  158. package/src/organization-model/__tests__/schema.test.ts +844 -301
  159. package/src/organization-model/__tests__/surface-projection.test.ts +284 -284
  160. package/src/organization-model/catalogs/lead-gen.ts +144 -144
  161. package/src/organization-model/content-kinds/config.ts +36 -36
  162. package/src/organization-model/content-kinds/index.ts +76 -72
  163. package/src/organization-model/content-kinds/pipeline.ts +68 -68
  164. package/src/organization-model/content-kinds/registry.ts +44 -44
  165. package/src/organization-model/content-kinds/status.ts +71 -71
  166. package/src/organization-model/content-kinds/template.ts +83 -83
  167. package/src/organization-model/content-kinds/types.ts +117 -117
  168. package/src/organization-model/contracts.ts +27 -27
  169. package/src/organization-model/defaults.ts +42 -50
  170. package/src/organization-model/domains/actions.ts +333 -239
  171. package/src/organization-model/domains/customers.ts +78 -78
  172. package/src/organization-model/domains/entities.ts +144 -144
  173. package/src/organization-model/domains/goals.ts +83 -83
  174. package/src/organization-model/domains/knowledge.ts +117 -101
  175. package/src/organization-model/domains/navigation.ts +139 -139
  176. package/src/organization-model/domains/offerings.ts +71 -71
  177. package/src/organization-model/domains/policies.ts +102 -102
  178. package/src/organization-model/domains/projects.ts +14 -14
  179. package/src/organization-model/domains/prospecting.ts +395 -395
  180. package/src/organization-model/domains/resources.ts +202 -124
  181. package/src/organization-model/domains/roles.ts +96 -96
  182. package/src/organization-model/domains/sales.test.ts +218 -218
  183. package/src/organization-model/domains/sales.ts +380 -380
  184. package/src/organization-model/domains/shared.ts +63 -63
  185. package/src/organization-model/domains/statuses.ts +339 -339
  186. package/src/organization-model/domains/systems.ts +217 -172
  187. package/src/organization-model/domains/topology.ts +261 -0
  188. package/src/organization-model/foundation.ts +75 -75
  189. package/src/organization-model/graph/build.ts +1043 -867
  190. package/src/organization-model/graph/index.ts +4 -4
  191. package/src/organization-model/graph/link.ts +10 -10
  192. package/src/organization-model/graph/schema.ts +75 -68
  193. package/src/organization-model/graph/types.ts +71 -64
  194. package/src/organization-model/helpers.ts +289 -241
  195. package/src/organization-model/icons.ts +78 -66
  196. package/src/organization-model/index.ts +128 -125
  197. package/src/organization-model/migration-helpers.ts +247 -244
  198. package/src/organization-model/ontology.ts +658 -0
  199. package/src/organization-model/organization-graph.mdx +110 -90
  200. package/src/organization-model/organization-model.mdx +225 -213
  201. package/src/organization-model/published.ts +299 -222
  202. package/src/organization-model/resolve.ts +146 -91
  203. package/src/organization-model/schema.ts +818 -659
  204. package/src/organization-model/surface-projection.ts +212 -212
  205. package/src/organization-model/types.ts +179 -155
  206. package/src/platform/api/types.ts +38 -38
  207. package/src/platform/constants/versions.ts +3 -3
  208. package/src/platform/index.ts +23 -23
  209. package/src/platform/registry/__tests__/command-view.test.ts +10 -10
  210. package/src/platform/registry/__tests__/resource-link.test.ts +35 -35
  211. package/src/platform/registry/__tests__/resource-registry.integration.test.ts +20 -20
  212. package/src/platform/registry/__tests__/resource-registry.nested-systems.test.ts +245 -245
  213. package/src/platform/registry/__tests__/resource-registry.test.ts +2053 -2053
  214. package/src/platform/registry/__tests__/validation.test.ts +1444 -1259
  215. package/src/platform/registry/command-view.ts +10 -10
  216. package/src/platform/registry/index.ts +103 -103
  217. package/src/platform/registry/resource-link.ts +32 -32
  218. package/src/platform/registry/resource-registry.ts +886 -886
  219. package/src/platform/registry/serialization.ts +295 -295
  220. package/src/platform/registry/serialized-types.ts +166 -166
  221. package/src/platform/registry/stats-types.ts +68 -68
  222. package/src/platform/registry/types.ts +425 -425
  223. package/src/platform/registry/validation.ts +876 -684
  224. package/src/platform/utils/__tests__/validation.test.ts +1084 -1084
  225. package/src/platform/utils/validation.ts +425 -425
  226. package/src/projects/api-schemas.test.ts +39 -39
  227. package/src/projects/api-schemas.ts +291 -291
  228. package/src/reference/_generated/contracts.md +2136 -2093
  229. package/src/reference/glossary.md +76 -76
  230. package/src/scaffold-registry/__tests__/index.test.ts +206 -206
  231. package/src/scaffold-registry/__tests__/schema.test.ts +166 -166
  232. package/src/scaffold-registry/index.ts +392 -392
  233. package/src/scaffold-registry/schema.ts +243 -243
  234. package/src/server.ts +289 -289
  235. package/src/supabase/database.types.ts +3 -0
  236. package/src/test-utils/README.md +37 -37
  237. package/src/test-utils/entities.ts +108 -108
  238. package/src/test-utils/fixtures/memberships.ts +82 -82
  239. package/src/test-utils/index.ts +12 -12
  240. package/src/test-utils/organization-model.ts +65 -65
  241. package/src/test-utils/published.ts +6 -6
  242. package/src/test-utils/rls/RLSTestContext.ts +588 -588
  243. package/src/test-utils/test-utils.test.ts +44 -44
@@ -1,310 +1,310 @@
1
- import { z } from 'zod'
2
- import type { Tool } from '../../../../types'
3
- import { createIntegrationTool } from '../../../tool'
4
- import { EmailSchema } from '../../../../../../../platform/utils/validation'
5
-
6
- /**
7
- * Create a tool that generates Stripe payment links
8
- *
9
- * @param credentialName - Name of the Stripe credential to use
10
- * @returns Tool instance
11
- *
12
- * @example
13
- * ```typescript
14
- * const tool = createStripeCreatePaymentLinkTool('elevasis-stripe')
15
- * const result = await tool.execute({
16
- * priceId: 'price_xxx',
17
- * metadata: { deal_id: 'deal-123' },
18
- * redirectUrl: 'https://app.elevasis.io/payment-success'
19
- * }, context)
20
- * ```
21
- */
22
- export function createStripeCreatePaymentLinkTool(credentialName: string): Tool {
23
- return createIntegrationTool({
24
- name: 'stripe_create_payment_link',
25
- description: `Create a Stripe payment link for collecting payments.
26
-
27
- Use this tool to generate a payment URL that can be sent to customers.
28
- The link directs to Stripe's hosted checkout page.
29
-
30
- Examples:
31
- - Create link for proposal payment: priceId, metadata with deal_id, redirectUrl
32
- - Create link with invoice: set invoiceCreation=true`,
33
- inputSchema: z.object({
34
- priceId: z.string().describe('Stripe price ID (price_xxx)'),
35
- quantity: z.number().optional().default(1).describe('Quantity of items'),
36
- metadata: z.record(z.string(), z.string()).optional().describe('Custom metadata'),
37
- afterCompletionType: z
38
- .enum(['redirect', 'hosted_confirmation'])
39
- .optional()
40
- .describe('What happens after payment'),
41
- redirectUrl: z.string().url().optional().describe('URL to redirect after payment'),
42
- allowPromotionCodes: z.boolean().optional().describe('Allow promo codes'),
43
- automaticTax: z.boolean().optional().describe('Enable automatic tax'),
44
- billingAddressCollection: z.enum(['auto', 'required']).optional().describe('Billing address mode'),
45
- invoiceCreation: z.boolean().optional().describe('Generate invoice')
46
- }),
47
- outputSchema: z.object({
48
- id: z.string().describe('Payment link ID (plink_xxx)'),
49
- url: z.string().describe('Shareable payment URL'),
50
- active: z.boolean().describe('Whether the link is active'),
51
- livemode: z.boolean().describe('Whether in production mode')
52
- }),
53
- integration: 'stripe' as const,
54
- method: 'createPaymentLink' as const,
55
- credentialName
56
- })
57
- }
58
-
59
- /**
60
- * Create a tool that retrieves a Stripe payment link
61
- *
62
- * @param credentialName - Name of the Stripe credential to use
63
- * @returns Tool instance
64
- *
65
- * @example
66
- * ```typescript
67
- * const tool = createStripeGetPaymentLinkTool('elevasis-stripe')
68
- * const result = await tool.execute({
69
- * paymentLinkId: 'plink_xxx'
70
- * }, context)
71
- * ```
72
- */
73
- export function createStripeGetPaymentLinkTool(credentialName: string): Tool {
74
- return createIntegrationTool({
75
- name: 'stripe_get_payment_link',
76
- description: `Get details of a Stripe payment link.
77
-
78
- Use this tool to retrieve information about an existing payment link,
79
- including its URL, status, and metadata.
80
-
81
- Useful for:
82
- - Checking if a payment link is still active
83
- - Retrieving the URL for a previously created link
84
- - Accessing metadata associated with the link`,
85
- inputSchema: z.object({
86
- paymentLinkId: z.string().describe('Payment link ID (plink_xxx)')
87
- }),
88
- outputSchema: z.object({
89
- id: z.string().describe('Payment link ID'),
90
- url: z.string().describe('Shareable payment URL'),
91
- active: z.boolean().describe('Whether the link is active'),
92
- livemode: z.boolean().describe('Whether in production mode'),
93
- metadata: z.record(z.string(), z.string()).describe('Custom metadata')
94
- }),
95
- integration: 'stripe' as const,
96
- method: 'getPaymentLink' as const,
97
- credentialName
98
- })
99
- }
100
-
101
- /**
102
- * Create a tool that updates a Stripe payment link
103
- *
104
- * @param credentialName - Name of the Stripe credential to use
105
- * @returns Tool instance
106
- *
107
- * @example
108
- * ```typescript
109
- * const tool = createStripeUpdatePaymentLinkTool('elevasis-stripe')
110
- * const result = await tool.execute({
111
- * paymentLinkId: 'plink_xxx',
112
- * active: false // Deactivate the link
113
- * }, context)
114
- * ```
115
- */
116
- export function createStripeUpdatePaymentLinkTool(credentialName: string): Tool {
117
- return createIntegrationTool({
118
- name: 'stripe_update_payment_link',
119
- description: `Update a Stripe payment link.
120
-
121
- Use this tool to modify an existing payment link.
122
- Common operations:
123
- - Deactivate a link (set active=false)
124
- - Update metadata
125
-
126
- Note: You cannot change the price after creation.`,
127
- inputSchema: z.object({
128
- paymentLinkId: z.string().describe('Payment link ID (plink_xxx)'),
129
- active: z.boolean().optional().describe('Enable or disable the link'),
130
- metadata: z.record(z.string(), z.string()).optional().describe('Update metadata')
131
- }),
132
- outputSchema: z.object({
133
- id: z.string().describe('Payment link ID'),
134
- active: z.boolean().describe('Whether the link is active'),
135
- url: z.string().describe('Shareable payment URL')
136
- }),
137
- integration: 'stripe' as const,
138
- method: 'updatePaymentLink' as const,
139
- credentialName
140
- })
141
- }
142
-
143
- /**
144
- * Create a tool that lists Stripe payment links
145
- *
146
- * @param credentialName - Name of the Stripe credential to use
147
- * @returns Tool instance
148
- *
149
- * @example
150
- * ```typescript
151
- * const tool = createStripeListPaymentLinksTool('elevasis-stripe')
152
- * const result = await tool.execute({
153
- * active: true,
154
- * limit: 10
155
- * }, context)
156
- * ```
157
- */
158
- export function createStripeListPaymentLinksTool(credentialName: string): Tool {
159
- return createIntegrationTool({
160
- name: 'stripe_list_payment_links',
161
- description: `List Stripe payment links.
162
-
163
- Use this tool to retrieve a list of payment links.
164
- Supports filtering by active status and pagination.
165
-
166
- Useful for:
167
- - Finding active payment links
168
- - Auditing created links
169
- - Paginating through large numbers of links`,
170
- inputSchema: z.object({
171
- active: z.boolean().optional().describe('Filter by active status'),
172
- limit: z.number().min(1).max(100).optional().describe('Number of links to return (1-100)'),
173
- startingAfter: z.string().optional().describe('Cursor for pagination (payment link ID)'),
174
- endingBefore: z.string().optional().describe('Cursor for pagination (payment link ID)')
175
- }),
176
- outputSchema: z.object({
177
- data: z
178
- .array(
179
- z.object({
180
- id: z.string().describe('Payment link ID'),
181
- url: z.string().describe('Shareable payment URL'),
182
- active: z.boolean().describe('Whether the link is active'),
183
- metadata: z.record(z.string(), z.string()).describe('Custom metadata')
184
- })
185
- )
186
- .describe('List of payment links'),
187
- hasMore: z.boolean().describe('Whether more results are available')
188
- }),
189
- integration: 'stripe' as const,
190
- method: 'listPaymentLinks' as const,
191
- credentialName
192
- })
193
- }
194
-
195
- /**
196
- * Create a tool that generates Stripe checkout sessions for custom amounts
197
- *
198
- * Use this for variable/custom pricing where the amount comes from the proposal.
199
- * Unlike payment links (which require pre-defined price IDs), checkout sessions
200
- * support price_data with any unit_amount.
201
- *
202
- * @param credentialName - Name of the Stripe credential to use
203
- * @returns Tool instance
204
- *
205
- * @example
206
- * ```typescript
207
- * const tool = createStripeCheckoutSessionTool('elevasis-stripe')
208
- * const result = await tool.execute({
209
- * amount: 2400000, // $24,000 in cents
210
- * metadata: { deal_id: 'deal-123' },
211
- * successUrl: 'https://app.elevasis.io/payment-success',
212
- * cancelUrl: 'https://app.elevasis.io/payment-cancelled'
213
- * }, context)
214
- * ```
215
- */
216
- export function createStripeCheckoutSessionTool(credentialName: string): Tool {
217
- return createIntegrationTool({
218
- name: 'stripe_create_checkout_session',
219
- description: `Create a Stripe checkout session for custom-amount payments.
220
-
221
- Use this tool for variable pricing where the amount comes from the proposal.
222
- Creates a one-time payment URL that expires in 24 hours.
223
-
224
- Key differences from payment links:
225
- - Supports any amount (no pre-defined price IDs needed)
226
- - URL expires in 24 hours (must recreate if needed)
227
- - Created per-transaction (not reusable)
228
-
229
- Examples:
230
- - Collect payment for signed proposal: amount from proposal, metadata with deal_id
231
- - Customer receives hosted Stripe checkout page`,
232
- inputSchema: z.object({
233
- amount: z.number().int().positive().describe('Amount in cents (e.g., 2400000 for $24,000)'),
234
- currency: z.string().optional().default('usd').describe('Currency code (default: usd)'),
235
- productName: z.string().optional().describe('Product name shown in checkout'),
236
- productDescription: z.string().optional().describe('Product description'),
237
- metadata: z.record(z.string(), z.string()).optional().describe('Metadata (deal_id, etc.)'),
238
- successUrl: z.string().url().describe('URL after successful payment'),
239
- cancelUrl: z.string().url().describe('URL if customer cancels'),
240
- customerEmail: EmailSchema.optional().describe('Pre-fill customer email')
241
- }),
242
- outputSchema: z.object({
243
- id: z.string().describe('Session ID (cs_xxx)'),
244
- url: z.string().describe('Payment URL (expires in 24h)'),
245
- expiresAt: z.number().describe('Expiration timestamp (Unix seconds)')
246
- }),
247
- integration: 'stripe' as const,
248
- method: 'createCheckoutSession' as const,
249
- credentialName
250
- })
251
- }
252
-
253
- /**
254
- * Create a tool that generates Stripe payment links with dynamic pricing
255
- *
256
- * Unlike standard payment links (which require pre-created Price IDs),
257
- * this tool uses inline price_data for dynamic pricing. Supports both
258
- * one-time setup fees and recurring monthly subscriptions.
259
- *
260
- * @param credentialName - Name of the Stripe credential to use
261
- * @returns Tool instance
262
- *
263
- * @example
264
- * ```typescript
265
- * const tool = createStripeAutoPaymentLinkTool('elevasis-stripe')
266
- * const result = await tool.execute({
267
- * dealId: 'deal-123',
268
- * companyName: 'Acme Corp',
269
- * contactEmail: 'john@acme.com',
270
- * initialFee: 3000, // $3,000 one-time
271
- * monthlyFee: 500 // $500/month recurring
272
- * }, context)
273
- * ```
274
- */
275
- export function createStripeAutoPaymentLinkTool(credentialName: string): Tool {
276
- return createIntegrationTool({
277
- name: 'stripe_create_auto_payment_link',
278
- description: `Create a Stripe payment link with dynamic pricing (inline price_data).
279
-
280
- Use this tool for variable pricing with both one-time and recurring fees.
281
- URLs NEVER EXPIRE - same link can be used in all reminder emails.
282
-
283
- Key features:
284
- - Supports dynamic amounts (no pre-defined Price IDs needed)
285
- - Can include both one-time setup fee AND monthly recurring in one link
286
- - URL never expires (unlike checkout sessions)
287
- - Metadata propagates to all webhooks (checkout.session.completed, etc.)
288
-
289
- Examples:
290
- - Setup + monthly: initialFee=3000, monthlyFee=500 ($3,000 one-time + $500/month)
291
- - Monthly only: initialFee=0, monthlyFee=500 ($500/month subscription)
292
- - One-time only: initialFee=3000, monthlyFee=0 ($3,000 one-time payment)`,
293
- inputSchema: z.object({
294
- dealId: z.string().describe('Local deal ID for metadata'),
295
- companyName: z.string().describe('Company name for product description'),
296
- contactEmail: EmailSchema.describe('Contact email for metadata'),
297
- initialFee: z.number().min(0).describe('One-time setup fee in dollars (e.g., 3000 for $3,000)'),
298
- monthlyFee: z.number().min(0).describe('Recurring monthly fee in dollars (e.g., 500 for $500/month)')
299
- }),
300
- outputSchema: z.object({
301
- paymentLinkId: z.string().describe('Payment link ID (plink_xxx)'),
302
- url: z.string().describe('Payment URL (NEVER EXPIRES)'),
303
- hasInitialFee: z.boolean().describe('Whether link includes one-time fee'),
304
- hasRecurring: z.boolean().describe('Whether link includes recurring subscription')
305
- }),
306
- integration: 'stripe' as const,
307
- method: 'createAutoPaymentLink' as const,
308
- credentialName
309
- })
310
- }
1
+ import { z } from 'zod'
2
+ import type { Tool } from '../../../../types'
3
+ import { createIntegrationTool } from '../../../tool'
4
+ import { EmailSchema } from '../../../../../../../platform/utils/validation'
5
+
6
+ /**
7
+ * Create a tool that generates Stripe payment links
8
+ *
9
+ * @param credentialName - Name of the Stripe credential to use
10
+ * @returns Tool instance
11
+ *
12
+ * @example
13
+ * ```typescript
14
+ * const tool = createStripeCreatePaymentLinkTool('elevasis-stripe')
15
+ * const result = await tool.execute({
16
+ * priceId: 'price_xxx',
17
+ * metadata: { deal_id: 'deal-123' },
18
+ * redirectUrl: 'https://app.elevasis.io/payment-success'
19
+ * }, context)
20
+ * ```
21
+ */
22
+ export function createStripeCreatePaymentLinkTool(credentialName: string): Tool {
23
+ return createIntegrationTool({
24
+ name: 'stripe_create_payment_link',
25
+ description: `Create a Stripe payment link for collecting payments.
26
+
27
+ Use this tool to generate a payment URL that can be sent to customers.
28
+ The link directs to Stripe's hosted checkout page.
29
+
30
+ Examples:
31
+ - Create link for proposal payment: priceId, metadata with deal_id, redirectUrl
32
+ - Create link with invoice: set invoiceCreation=true`,
33
+ inputSchema: z.object({
34
+ priceId: z.string().describe('Stripe price ID (price_xxx)'),
35
+ quantity: z.number().optional().default(1).describe('Quantity of items'),
36
+ metadata: z.record(z.string(), z.string()).optional().describe('Custom metadata'),
37
+ afterCompletionType: z
38
+ .enum(['redirect', 'hosted_confirmation'])
39
+ .optional()
40
+ .describe('What happens after payment'),
41
+ redirectUrl: z.string().url().optional().describe('URL to redirect after payment'),
42
+ allowPromotionCodes: z.boolean().optional().describe('Allow promo codes'),
43
+ automaticTax: z.boolean().optional().describe('Enable automatic tax'),
44
+ billingAddressCollection: z.enum(['auto', 'required']).optional().describe('Billing address mode'),
45
+ invoiceCreation: z.boolean().optional().describe('Generate invoice')
46
+ }),
47
+ outputSchema: z.object({
48
+ id: z.string().describe('Payment link ID (plink_xxx)'),
49
+ url: z.string().describe('Shareable payment URL'),
50
+ active: z.boolean().describe('Whether the link is active'),
51
+ livemode: z.boolean().describe('Whether in production mode')
52
+ }),
53
+ integration: 'stripe' as const,
54
+ method: 'createPaymentLink' as const,
55
+ credentialName
56
+ })
57
+ }
58
+
59
+ /**
60
+ * Create a tool that retrieves a Stripe payment link
61
+ *
62
+ * @param credentialName - Name of the Stripe credential to use
63
+ * @returns Tool instance
64
+ *
65
+ * @example
66
+ * ```typescript
67
+ * const tool = createStripeGetPaymentLinkTool('elevasis-stripe')
68
+ * const result = await tool.execute({
69
+ * paymentLinkId: 'plink_xxx'
70
+ * }, context)
71
+ * ```
72
+ */
73
+ export function createStripeGetPaymentLinkTool(credentialName: string): Tool {
74
+ return createIntegrationTool({
75
+ name: 'stripe_get_payment_link',
76
+ description: `Get details of a Stripe payment link.
77
+
78
+ Use this tool to retrieve information about an existing payment link,
79
+ including its URL, status, and metadata.
80
+
81
+ Useful for:
82
+ - Checking if a payment link is still active
83
+ - Retrieving the URL for a previously created link
84
+ - Accessing metadata associated with the link`,
85
+ inputSchema: z.object({
86
+ paymentLinkId: z.string().describe('Payment link ID (plink_xxx)')
87
+ }),
88
+ outputSchema: z.object({
89
+ id: z.string().describe('Payment link ID'),
90
+ url: z.string().describe('Shareable payment URL'),
91
+ active: z.boolean().describe('Whether the link is active'),
92
+ livemode: z.boolean().describe('Whether in production mode'),
93
+ metadata: z.record(z.string(), z.string()).describe('Custom metadata')
94
+ }),
95
+ integration: 'stripe' as const,
96
+ method: 'getPaymentLink' as const,
97
+ credentialName
98
+ })
99
+ }
100
+
101
+ /**
102
+ * Create a tool that updates a Stripe payment link
103
+ *
104
+ * @param credentialName - Name of the Stripe credential to use
105
+ * @returns Tool instance
106
+ *
107
+ * @example
108
+ * ```typescript
109
+ * const tool = createStripeUpdatePaymentLinkTool('elevasis-stripe')
110
+ * const result = await tool.execute({
111
+ * paymentLinkId: 'plink_xxx',
112
+ * active: false // Deactivate the link
113
+ * }, context)
114
+ * ```
115
+ */
116
+ export function createStripeUpdatePaymentLinkTool(credentialName: string): Tool {
117
+ return createIntegrationTool({
118
+ name: 'stripe_update_payment_link',
119
+ description: `Update a Stripe payment link.
120
+
121
+ Use this tool to modify an existing payment link.
122
+ Common operations:
123
+ - Deactivate a link (set active=false)
124
+ - Update metadata
125
+
126
+ Note: You cannot change the price after creation.`,
127
+ inputSchema: z.object({
128
+ paymentLinkId: z.string().describe('Payment link ID (plink_xxx)'),
129
+ active: z.boolean().optional().describe('Enable or disable the link'),
130
+ metadata: z.record(z.string(), z.string()).optional().describe('Update metadata')
131
+ }),
132
+ outputSchema: z.object({
133
+ id: z.string().describe('Payment link ID'),
134
+ active: z.boolean().describe('Whether the link is active'),
135
+ url: z.string().describe('Shareable payment URL')
136
+ }),
137
+ integration: 'stripe' as const,
138
+ method: 'updatePaymentLink' as const,
139
+ credentialName
140
+ })
141
+ }
142
+
143
+ /**
144
+ * Create a tool that lists Stripe payment links
145
+ *
146
+ * @param credentialName - Name of the Stripe credential to use
147
+ * @returns Tool instance
148
+ *
149
+ * @example
150
+ * ```typescript
151
+ * const tool = createStripeListPaymentLinksTool('elevasis-stripe')
152
+ * const result = await tool.execute({
153
+ * active: true,
154
+ * limit: 10
155
+ * }, context)
156
+ * ```
157
+ */
158
+ export function createStripeListPaymentLinksTool(credentialName: string): Tool {
159
+ return createIntegrationTool({
160
+ name: 'stripe_list_payment_links',
161
+ description: `List Stripe payment links.
162
+
163
+ Use this tool to retrieve a list of payment links.
164
+ Supports filtering by active status and pagination.
165
+
166
+ Useful for:
167
+ - Finding active payment links
168
+ - Auditing created links
169
+ - Paginating through large numbers of links`,
170
+ inputSchema: z.object({
171
+ active: z.boolean().optional().describe('Filter by active status'),
172
+ limit: z.number().min(1).max(100).optional().describe('Number of links to return (1-100)'),
173
+ startingAfter: z.string().optional().describe('Cursor for pagination (payment link ID)'),
174
+ endingBefore: z.string().optional().describe('Cursor for pagination (payment link ID)')
175
+ }),
176
+ outputSchema: z.object({
177
+ data: z
178
+ .array(
179
+ z.object({
180
+ id: z.string().describe('Payment link ID'),
181
+ url: z.string().describe('Shareable payment URL'),
182
+ active: z.boolean().describe('Whether the link is active'),
183
+ metadata: z.record(z.string(), z.string()).describe('Custom metadata')
184
+ })
185
+ )
186
+ .describe('List of payment links'),
187
+ hasMore: z.boolean().describe('Whether more results are available')
188
+ }),
189
+ integration: 'stripe' as const,
190
+ method: 'listPaymentLinks' as const,
191
+ credentialName
192
+ })
193
+ }
194
+
195
+ /**
196
+ * Create a tool that generates Stripe checkout sessions for custom amounts
197
+ *
198
+ * Use this for variable/custom pricing where the amount comes from the proposal.
199
+ * Unlike payment links (which require pre-defined price IDs), checkout sessions
200
+ * support price_data with any unit_amount.
201
+ *
202
+ * @param credentialName - Name of the Stripe credential to use
203
+ * @returns Tool instance
204
+ *
205
+ * @example
206
+ * ```typescript
207
+ * const tool = createStripeCheckoutSessionTool('elevasis-stripe')
208
+ * const result = await tool.execute({
209
+ * amount: 2400000, // $24,000 in cents
210
+ * metadata: { deal_id: 'deal-123' },
211
+ * successUrl: 'https://app.elevasis.io/payment-success',
212
+ * cancelUrl: 'https://app.elevasis.io/payment-cancelled'
213
+ * }, context)
214
+ * ```
215
+ */
216
+ export function createStripeCheckoutSessionTool(credentialName: string): Tool {
217
+ return createIntegrationTool({
218
+ name: 'stripe_create_checkout_session',
219
+ description: `Create a Stripe checkout session for custom-amount payments.
220
+
221
+ Use this tool for variable pricing where the amount comes from the proposal.
222
+ Creates a one-time payment URL that expires in 24 hours.
223
+
224
+ Key differences from payment links:
225
+ - Supports any amount (no pre-defined price IDs needed)
226
+ - URL expires in 24 hours (must recreate if needed)
227
+ - Created per-transaction (not reusable)
228
+
229
+ Examples:
230
+ - Collect payment for signed proposal: amount from proposal, metadata with deal_id
231
+ - Customer receives hosted Stripe checkout page`,
232
+ inputSchema: z.object({
233
+ amount: z.number().int().positive().describe('Amount in cents (e.g., 2400000 for $24,000)'),
234
+ currency: z.string().optional().default('usd').describe('Currency code (default: usd)'),
235
+ productName: z.string().optional().describe('Product name shown in checkout'),
236
+ productDescription: z.string().optional().describe('Product description'),
237
+ metadata: z.record(z.string(), z.string()).optional().describe('Metadata (deal_id, etc.)'),
238
+ successUrl: z.string().url().describe('URL after successful payment'),
239
+ cancelUrl: z.string().url().describe('URL if customer cancels'),
240
+ customerEmail: EmailSchema.optional().describe('Pre-fill customer email')
241
+ }),
242
+ outputSchema: z.object({
243
+ id: z.string().describe('Session ID (cs_xxx)'),
244
+ url: z.string().describe('Payment URL (expires in 24h)'),
245
+ expiresAt: z.number().describe('Expiration timestamp (Unix seconds)')
246
+ }),
247
+ integration: 'stripe' as const,
248
+ method: 'createCheckoutSession' as const,
249
+ credentialName
250
+ })
251
+ }
252
+
253
+ /**
254
+ * Create a tool that generates Stripe payment links with dynamic pricing
255
+ *
256
+ * Unlike standard payment links (which require pre-created Price IDs),
257
+ * this tool uses inline price_data for dynamic pricing. Supports both
258
+ * one-time setup fees and recurring monthly subscriptions.
259
+ *
260
+ * @param credentialName - Name of the Stripe credential to use
261
+ * @returns Tool instance
262
+ *
263
+ * @example
264
+ * ```typescript
265
+ * const tool = createStripeAutoPaymentLinkTool('elevasis-stripe')
266
+ * const result = await tool.execute({
267
+ * dealId: 'deal-123',
268
+ * companyName: 'Acme Corp',
269
+ * contactEmail: 'john@acme.com',
270
+ * initialFee: 3000, // $3,000 one-time
271
+ * monthlyFee: 500 // $500/month recurring
272
+ * }, context)
273
+ * ```
274
+ */
275
+ export function createStripeAutoPaymentLinkTool(credentialName: string): Tool {
276
+ return createIntegrationTool({
277
+ name: 'stripe_create_auto_payment_link',
278
+ description: `Create a Stripe payment link with dynamic pricing (inline price_data).
279
+
280
+ Use this tool for variable pricing with both one-time and recurring fees.
281
+ URLs NEVER EXPIRE - same link can be used in all reminder emails.
282
+
283
+ Key features:
284
+ - Supports dynamic amounts (no pre-defined Price IDs needed)
285
+ - Can include both one-time setup fee AND monthly recurring in one link
286
+ - URL never expires (unlike checkout sessions)
287
+ - Metadata propagates to all webhooks (checkout.session.completed, etc.)
288
+
289
+ Examples:
290
+ - Setup + monthly: initialFee=3000, monthlyFee=500 ($3,000 one-time + $500/month)
291
+ - Monthly only: initialFee=0, monthlyFee=500 ($500/month subscription)
292
+ - One-time only: initialFee=3000, monthlyFee=0 ($3,000 one-time payment)`,
293
+ inputSchema: z.object({
294
+ dealId: z.string().describe('Local deal ID for metadata'),
295
+ companyName: z.string().describe('Company name for product description'),
296
+ contactEmail: EmailSchema.describe('Contact email for metadata'),
297
+ initialFee: z.number().min(0).describe('One-time setup fee in dollars (e.g., 3000 for $3,000)'),
298
+ monthlyFee: z.number().min(0).describe('Recurring monthly fee in dollars (e.g., 500 for $500/month)')
299
+ }),
300
+ outputSchema: z.object({
301
+ paymentLinkId: z.string().describe('Payment link ID (plink_xxx)'),
302
+ url: z.string().describe('Payment URL (NEVER EXPIRES)'),
303
+ hasInitialFee: z.boolean().describe('Whether link includes one-time fee'),
304
+ hasRecurring: z.boolean().describe('Whether link includes recurring subscription')
305
+ }),
306
+ integration: 'stripe' as const,
307
+ method: 'createAutoPaymentLink' as const,
308
+ credentialName
309
+ })
310
+ }