@elevasis/core 0.1.0
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.
- package/dist/index.d.ts +435 -0
- package/dist/index.js +403 -0
- package/dist/organization-model/index.d.ts +435 -0
- package/dist/organization-model/index.js +403 -0
- package/package.json +62 -0
- package/src/README.md +34 -0
- package/src/__tests__/observability-exports.test.ts +36 -0
- package/src/__tests__/publish.test.ts +18 -0
- package/src/__tests__/template-foundations-compatibility.test.ts +34 -0
- package/src/auth/index.ts +8 -0
- package/src/auth/multi-tenancy/credentials/README.md +38 -0
- package/src/auth/multi-tenancy/credentials/__tests__/encryption.test.ts +216 -0
- package/src/auth/multi-tenancy/credentials/__tests__/service.test.ts +174 -0
- package/src/auth/multi-tenancy/credentials/index.ts +6 -0
- package/src/auth/multi-tenancy/credentials/server/encryption.ts +39 -0
- package/src/auth/multi-tenancy/credentials/server/service.ts +60 -0
- package/src/auth/multi-tenancy/index.ts +17 -0
- package/src/auth/multi-tenancy/invitations/__tests__/invitation.test.ts +237 -0
- package/src/auth/multi-tenancy/invitations/api-schemas.ts +107 -0
- package/src/auth/multi-tenancy/invitations/index.ts +38 -0
- package/src/auth/multi-tenancy/invitations/invitation.ts +86 -0
- package/src/auth/multi-tenancy/invitations/server/index.ts +25 -0
- package/src/auth/multi-tenancy/invitations/server/transforms.ts +24 -0
- package/src/auth/multi-tenancy/invitations/server/workos.ts +24 -0
- package/src/auth/multi-tenancy/invitations/supabase.ts +50 -0
- package/src/auth/multi-tenancy/memberships/__tests__/membership.test.ts +227 -0
- package/src/auth/multi-tenancy/memberships/__tests__/supabase-transforms.test.ts +88 -0
- package/src/auth/multi-tenancy/memberships/__tests__/workos-transforms.test.ts +139 -0
- package/src/auth/multi-tenancy/memberships/api-schemas.ts +126 -0
- package/src/auth/multi-tenancy/memberships/index.ts +22 -0
- package/src/auth/multi-tenancy/memberships/membership.ts +138 -0
- package/src/auth/multi-tenancy/memberships/server/index.ts +15 -0
- package/src/auth/multi-tenancy/memberships/server/transforms.ts +32 -0
- package/src/auth/multi-tenancy/memberships/server/workos.ts +21 -0
- package/src/auth/multi-tenancy/memberships/supabase.ts +46 -0
- package/src/auth/multi-tenancy/organizations/__tests__/organization.test.ts +249 -0
- package/src/auth/multi-tenancy/organizations/api-schemas.ts +128 -0
- package/src/auth/multi-tenancy/organizations/index.ts +23 -0
- package/src/auth/multi-tenancy/organizations/organization.ts +25 -0
- package/src/auth/multi-tenancy/organizations/server/index.ts +10 -0
- package/src/auth/multi-tenancy/organizations/server/transforms.ts +35 -0
- package/src/auth/multi-tenancy/organizations/server/workos.ts +20 -0
- package/src/auth/multi-tenancy/types.ts +89 -0
- package/src/auth/multi-tenancy/users/__tests__/user.test.ts +208 -0
- package/src/auth/multi-tenancy/users/api-schemas.ts +194 -0
- package/src/auth/multi-tenancy/users/index.ts +28 -0
- package/src/auth/multi-tenancy/users/server/index.ts +19 -0
- package/src/auth/multi-tenancy/users/server/transforms.ts +21 -0
- package/src/auth/multi-tenancy/users/server/workos.ts +16 -0
- package/src/auth/multi-tenancy/users/user.ts +65 -0
- package/src/business/acquisition/api-schemas.ts +759 -0
- package/src/business/acquisition/index.ts +109 -0
- package/src/business/acquisition/types.ts +400 -0
- package/src/business/crm/api-schemas.ts +75 -0
- package/src/business/delivery/index.ts +1 -0
- package/src/business/delivery/types.ts +89 -0
- package/src/business/index.ts +12 -0
- package/src/business/pdf/assets/ElevasisLogo.png +0 -0
- package/src/business/pdf/browser/image-utils.ts +74 -0
- package/src/business/pdf/browser/index.ts +16 -0
- package/src/business/pdf/browser/pdfmake-browser.ts +229 -0
- package/src/business/pdf/index.ts +10 -0
- package/src/business/pdf/sections/acceptance.ts +112 -0
- package/src/business/pdf/sections/automation.ts +56 -0
- package/src/business/pdf/sections/cover.ts +51 -0
- package/src/business/pdf/sections/index.ts +57 -0
- package/src/business/pdf/sections/investment.ts +69 -0
- package/src/business/pdf/sections/proposal-document.ts +200 -0
- package/src/business/pdf/sections/summary-investment.ts +124 -0
- package/src/business/pdf/sections/summary.ts +55 -0
- package/src/business/pdf/sections/table-summary.ts +59 -0
- package/src/business/pdf/sections/types.ts +124 -0
- package/src/business/pdf/server/__tests__/pdfmake-test.ts +219 -0
- package/src/business/pdf/server/index.ts +21 -0
- package/src/business/pdf/server/pdfmake-service.ts +237 -0
- package/src/business/pdf/server/themes/default.ts +8 -0
- package/src/business/pdf/server/themes/index.ts +9 -0
- package/src/business/pdf/server/themes/types.ts +8 -0
- package/src/business/pdf/shared/convert.ts +514 -0
- package/src/business/pdf/shared/index.ts +12 -0
- package/src/business/pdf/themes.ts +78 -0
- package/src/business/pdf/types.ts +272 -0
- package/src/business/seo/__tests__/linking.test.ts +549 -0
- package/src/business/seo/__tests__/types.test.ts +404 -0
- package/src/business/seo/index.ts +2 -0
- package/src/business/seo/linking.ts +281 -0
- package/src/business/seo/types.ts +199 -0
- package/src/commands/index.ts +8 -0
- package/src/commands/queue/index.ts +3 -0
- package/src/commands/queue/schemas.test.ts +593 -0
- package/src/commands/queue/schemas.ts +125 -0
- package/src/commands/queue/sse-events.ts +61 -0
- package/src/commands/queue/types/action.ts +52 -0
- package/src/commands/queue/types/checkpoint.ts +44 -0
- package/src/commands/queue/types/index.ts +7 -0
- package/src/commands/queue/types/task.ts +116 -0
- package/src/commands/queue/types.ts +14 -0
- package/src/content/distribution-metadata.ts +61 -0
- package/src/content/index.ts +10 -0
- package/src/deployments/index.ts +22 -0
- package/src/execution/calibration/__tests__/schemas.test.ts +320 -0
- package/src/execution/calibration/index.ts +3 -0
- package/src/execution/calibration/schemas.ts +121 -0
- package/src/execution/calibration/sse-events.ts +125 -0
- package/src/execution/calibration/types.ts +190 -0
- package/src/execution/core/__tests__/api-schemas.test.ts +667 -0
- package/src/execution/core/__tests__/archived-logs.test.ts +72 -0
- package/src/execution/core/api-schemas.ts +312 -0
- package/src/execution/core/index.ts +11 -0
- package/src/execution/core/resource-validator.test.ts +63 -0
- package/src/execution/core/runner-types.ts +80 -0
- package/src/execution/core/server/environment.ts +31 -0
- package/src/execution/core/sse-executions.ts +119 -0
- package/src/execution/core/types.ts +29 -0
- package/src/execution/engine/__tests__/fixtures/index.ts +2 -0
- package/src/execution/engine/__tests__/fixtures/mock-scenarios.ts +60 -0
- package/src/execution/engine/__tests__/fixtures/test-agents.ts +85 -0
- package/src/execution/engine/__tests__/integration/agent-framework.integration.test.ts +1031 -0
- package/src/execution/engine/__tests__/timeout.test.ts +565 -0
- package/src/execution/engine/agent/__tests__/errors.test.ts +508 -0
- package/src/execution/engine/agent/actions/__tests__/processor.test.ts +531 -0
- package/src/execution/engine/agent/actions/executor.ts +205 -0
- package/src/execution/engine/agent/actions/navigate-knowledge-executor.ts +230 -0
- package/src/execution/engine/agent/actions/processor.ts +116 -0
- package/src/execution/engine/agent/actions/types.ts +70 -0
- package/src/execution/engine/agent/core/__tests__/agent.test.ts +614 -0
- package/src/execution/engine/agent/core/__tests__/error-passthrough.test.ts +134 -0
- package/src/execution/engine/agent/core/agent.ts +810 -0
- package/src/execution/engine/agent/core/types.ts +155 -0
- package/src/execution/engine/agent/errors.ts +251 -0
- package/src/execution/engine/agent/index.ts +78 -0
- package/src/execution/engine/agent/knowledge-map/__tests__/navigate-knowledge-executor.test.ts +580 -0
- package/src/execution/engine/agent/knowledge-map/__tests__/utils.test.ts +622 -0
- package/src/execution/engine/agent/knowledge-map/types.ts +106 -0
- package/src/execution/engine/agent/knowledge-map/utils.ts +101 -0
- package/src/execution/engine/agent/memory/__tests__/domains.test.ts +72 -0
- package/src/execution/engine/agent/memory/__tests__/manager.test.ts +754 -0
- package/src/execution/engine/agent/memory/__tests__/utils.test.ts +285 -0
- package/src/execution/engine/agent/memory/domains.ts +99 -0
- package/src/execution/engine/agent/memory/manager.ts +365 -0
- package/src/execution/engine/agent/memory/processor.ts +66 -0
- package/src/execution/engine/agent/memory/types.ts +90 -0
- package/src/execution/engine/agent/memory/utils.ts +134 -0
- package/src/execution/engine/agent/observability/logging.ts +467 -0
- package/src/execution/engine/agent/observability/types.ts +64 -0
- package/src/execution/engine/agent/reasoning/__tests__/request-builder.test.ts +209 -0
- package/src/execution/engine/agent/reasoning/adapters/agent-adapter-helpers.ts +349 -0
- package/src/execution/engine/agent/reasoning/processor.ts +92 -0
- package/src/execution/engine/agent/reasoning/prompt-sections/base-actions.ts +134 -0
- package/src/execution/engine/agent/reasoning/prompt-sections/completion.ts +49 -0
- package/src/execution/engine/agent/reasoning/prompt-sections/knowledge-map.ts +93 -0
- package/src/execution/engine/agent/reasoning/prompt-sections/memory.ts +65 -0
- package/src/execution/engine/agent/reasoning/prompt-sections/security.ts +32 -0
- package/src/execution/engine/agent/reasoning/prompt-sections/tools.ts +44 -0
- package/src/execution/engine/agent/reasoning/request-builder.ts +169 -0
- package/src/execution/engine/agent/reasoning/types.ts +18 -0
- package/src/execution/engine/base/__tests__/errors.test.ts +246 -0
- package/src/execution/engine/base/__tests__/serialization.test.ts +670 -0
- package/src/execution/engine/base/__tests__/utils.test.ts +45 -0
- package/src/execution/engine/base/errors.ts +118 -0
- package/src/execution/engine/base/index.ts +2 -0
- package/src/execution/engine/base/logging.ts +31 -0
- package/src/execution/engine/base/serialization.ts +324 -0
- package/src/execution/engine/base/types.ts +126 -0
- package/src/execution/engine/base/utils.ts +41 -0
- package/src/execution/engine/index.ts +440 -0
- package/src/execution/engine/interface/index.ts +1 -0
- package/src/execution/engine/interface/types.ts +62 -0
- package/src/execution/engine/llm/__tests__/errors.test.ts +318 -0
- package/src/execution/engine/llm/__tests__/input-sanitizer.test.ts +286 -0
- package/src/execution/engine/llm/__tests__/model-info.test.ts +50 -0
- package/src/execution/engine/llm/__tests__/model-validation.test.ts +321 -0
- package/src/execution/engine/llm/__tests__/response-schema-validator.test.ts +115 -0
- package/src/execution/engine/llm/adapters/__tests__/adapter-factory.test.ts +375 -0
- package/src/execution/engine/llm/adapters/__tests__/anthropic-adapter.test.ts +463 -0
- package/src/execution/engine/llm/adapters/__tests__/anthropic.integration.test.ts +177 -0
- package/src/execution/engine/llm/adapters/__tests__/circuit-breaker-error.test.ts +94 -0
- package/src/execution/engine/llm/adapters/__tests__/google-adapter.test.ts +722 -0
- package/src/execution/engine/llm/adapters/__tests__/google.integration.test.ts +376 -0
- package/src/execution/engine/llm/adapters/__tests__/mock-adapter.test.ts +432 -0
- package/src/execution/engine/llm/adapters/__tests__/openai-adapter.test.ts +551 -0
- package/src/execution/engine/llm/adapters/__tests__/openrouter-adapter.test.ts +563 -0
- package/src/execution/engine/llm/adapters/__tests__/openrouter.integration.test.ts +105 -0
- package/src/execution/engine/llm/adapters/__tests__/universal-adapter.test.ts +537 -0
- package/src/execution/engine/llm/adapters/circuit-breaker.ts +147 -0
- package/src/execution/engine/llm/adapters/index.ts +17 -0
- package/src/execution/engine/llm/adapters/mock-adapter.ts +116 -0
- package/src/execution/engine/llm/adapters/server/adapter-factory.ts +130 -0
- package/src/execution/engine/llm/adapters/server/anthropic.ts +137 -0
- package/src/execution/engine/llm/adapters/server/compose-signal.ts +18 -0
- package/src/execution/engine/llm/adapters/server/google.ts +283 -0
- package/src/execution/engine/llm/adapters/server/index.ts +12 -0
- package/src/execution/engine/llm/adapters/server/openai.ts +206 -0
- package/src/execution/engine/llm/adapters/server/openrouter.ts +235 -0
- package/src/execution/engine/llm/adapters/universal-adapter.ts +230 -0
- package/src/execution/engine/llm/errors.ts +186 -0
- package/src/execution/engine/llm/input-sanitizer.ts +129 -0
- package/src/execution/engine/llm/model-info.ts +332 -0
- package/src/execution/engine/llm/response-schema-validator.ts +113 -0
- package/src/execution/engine/llm/types.ts +86 -0
- package/src/execution/engine/test-utils/index.ts +6 -0
- package/src/execution/engine/test-utils/mocks.ts +56 -0
- package/src/execution/engine/tools/__tests__/tooling-error.test.ts +265 -0
- package/src/execution/engine/tools/__tests__/types.test.ts +47 -0
- package/src/execution/engine/tools/integration/base-integration-adapter.ts +50 -0
- package/src/execution/engine/tools/integration/index.ts +53 -0
- package/src/execution/engine/tools/integration/server/adapters/anymailfinder/anymailfinder-adapter.ts +73 -0
- package/src/execution/engine/tools/integration/server/adapters/anymailfinder/anymailfinder-tools.ts +209 -0
- package/src/execution/engine/tools/integration/server/adapters/anymailfinder/fetch/find-company-email/index.ts +82 -0
- package/src/execution/engine/tools/integration/server/adapters/anymailfinder/fetch/find-decision-maker-email/index.ts +122 -0
- package/src/execution/engine/tools/integration/server/adapters/anymailfinder/fetch/find-person-email/index.ts +89 -0
- package/src/execution/engine/tools/integration/server/adapters/anymailfinder/fetch/verify-email/index.ts +84 -0
- package/src/execution/engine/tools/integration/server/adapters/anymailfinder/index.ts +16 -0
- package/src/execution/engine/tools/integration/server/adapters/apify/__tests__/apify-run-actor.integration.test.ts +293 -0
- package/src/execution/engine/tools/integration/server/adapters/apify/apify-adapter.ts +100 -0
- package/src/execution/engine/tools/integration/server/adapters/apify/apify-tools.ts +217 -0
- package/src/execution/engine/tools/integration/server/adapters/apify/fetch/get-dataset-items/index.ts +92 -0
- package/src/execution/engine/tools/integration/server/adapters/apify/fetch/run-actor/index.ts +218 -0
- package/src/execution/engine/tools/integration/server/adapters/apify/fetch/start-actor/index.ts +87 -0
- package/src/execution/engine/tools/integration/server/adapters/apify/index.ts +11 -0
- package/src/execution/engine/tools/integration/server/adapters/attio/__tests__/attio-crud.integration.test.ts +362 -0
- package/src/execution/engine/tools/integration/server/adapters/attio/attio-adapter.ts +162 -0
- package/src/execution/engine/tools/integration/server/adapters/attio/attio-tools.ts +594 -0
- package/src/execution/engine/tools/integration/server/adapters/attio/fetch/README.md +632 -0
- package/src/execution/engine/tools/integration/server/adapters/attio/fetch/create-attribute/index.ts +214 -0
- package/src/execution/engine/tools/integration/server/adapters/attio/fetch/create-note/index.ts +152 -0
- package/src/execution/engine/tools/integration/server/adapters/attio/fetch/create-record/index.ts +141 -0
- package/src/execution/engine/tools/integration/server/adapters/attio/fetch/delete-note/index.ts +86 -0
- package/src/execution/engine/tools/integration/server/adapters/attio/fetch/delete-record/index.ts +105 -0
- package/src/execution/engine/tools/integration/server/adapters/attio/fetch/get-record/index.test.ts +186 -0
- package/src/execution/engine/tools/integration/server/adapters/attio/fetch/get-record/index.ts +118 -0
- package/src/execution/engine/tools/integration/server/adapters/attio/fetch/list-attributes/index.ts +165 -0
- package/src/execution/engine/tools/integration/server/adapters/attio/fetch/list-notes/index.ts +96 -0
- package/src/execution/engine/tools/integration/server/adapters/attio/fetch/list-objects/index.ts +104 -0
- package/src/execution/engine/tools/integration/server/adapters/attio/fetch/list-records/index.test.ts +338 -0
- package/src/execution/engine/tools/integration/server/adapters/attio/fetch/list-records/index.ts +156 -0
- package/src/execution/engine/tools/integration/server/adapters/attio/fetch/update-attribute/index.ts +220 -0
- package/src/execution/engine/tools/integration/server/adapters/attio/fetch/update-record/index.ts +140 -0
- package/src/execution/engine/tools/integration/server/adapters/attio/fetch/utils/types.ts +147 -0
- package/src/execution/engine/tools/integration/server/adapters/attio/index.ts +31 -0
- package/src/execution/engine/tools/integration/server/adapters/dropbox/__tests__/dropbox-adapter.test.ts +409 -0
- package/src/execution/engine/tools/integration/server/adapters/dropbox/dropbox-adapter.ts +281 -0
- package/src/execution/engine/tools/integration/server/adapters/dropbox/dropbox-tools.ts +106 -0
- package/src/execution/engine/tools/integration/server/adapters/dropbox/fetch/create-folder/__tests__/index.test.ts +451 -0
- package/src/execution/engine/tools/integration/server/adapters/dropbox/fetch/create-folder/index.ts +114 -0
- package/src/execution/engine/tools/integration/server/adapters/dropbox/fetch/upload-file/__tests__/index.test.ts +415 -0
- package/src/execution/engine/tools/integration/server/adapters/dropbox/fetch/upload-file/index.ts +111 -0
- package/src/execution/engine/tools/integration/server/adapters/dropbox/index.ts +25 -0
- package/src/execution/engine/tools/integration/server/adapters/gmail/gmail-adapter.ts +210 -0
- package/src/execution/engine/tools/integration/server/adapters/gmail/gmail-tools.ts +104 -0
- package/src/execution/engine/tools/integration/server/adapters/google-sheets/__tests__/google-sheets.integration.test.ts +261 -0
- package/src/execution/engine/tools/integration/server/adapters/google-sheets/google-sheets-adapter.ts +1189 -0
- package/src/execution/engine/tools/integration/server/adapters/google-sheets/google-sheets-tools.ts +641 -0
- package/src/execution/engine/tools/integration/server/adapters/google-sheets/index.ts +18 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/activate-campaign/index.ts +86 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/add-to-campaign/__tests__/index.test.ts +289 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/add-to-campaign/index.ts +154 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/bulk-add-leads/__tests__/index.test.ts +325 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/bulk-add-leads/index.ts +153 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/bulk-delete-leads/index.ts +84 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/create-campaign/index.ts +125 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/create-inbox-test/index.ts +107 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/delete-campaign/index.ts +85 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/get-account-health/index.ts +91 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/get-campaign/index.ts +92 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/get-campaign-analytics/__tests__/index.test.ts +195 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/get-campaign-analytics/index.ts +113 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/get-daily-campaign-analytics/index.ts +104 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/get-emails/index.ts +155 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/get-step-analytics/__tests__/index.test.ts +196 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/get-step-analytics/index.ts +102 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/list-campaigns/__tests__/index.test.ts +189 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/list-campaigns/index.ts +87 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/list-leads/index.ts +112 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/patch-lead/index.ts +76 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/pause-campaign/index.ts +86 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/remove-from-subsequence/index.ts +98 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/send-reply/index.ts +126 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/update-campaign/__tests__/index.test.ts +193 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/update-campaign/index.ts +99 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/update-interest-status/__tests__/index.test.ts +621 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/update-interest-status/index.ts +125 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/index.ts +29 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/instantly-adapter.ts +178 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/instantly-tools.ts +1473 -0
- package/src/execution/engine/tools/integration/server/adapters/millionverifier/fetch/check-credits/index.ts +59 -0
- package/src/execution/engine/tools/integration/server/adapters/millionverifier/fetch/verify-email/index.ts +102 -0
- package/src/execution/engine/tools/integration/server/adapters/millionverifier/index.ts +17 -0
- package/src/execution/engine/tools/integration/server/adapters/millionverifier/millionverifier-adapter.ts +80 -0
- package/src/execution/engine/tools/integration/server/adapters/millionverifier/millionverifier-tools.ts +102 -0
- package/src/execution/engine/tools/integration/server/adapters/resend/fetch/get-email/index.ts +102 -0
- package/src/execution/engine/tools/integration/server/adapters/resend/fetch/send-email/index.ts +134 -0
- package/src/execution/engine/tools/integration/server/adapters/resend/fetch/utils/types.ts +75 -0
- package/src/execution/engine/tools/integration/server/adapters/resend/index.ts +27 -0
- package/src/execution/engine/tools/integration/server/adapters/resend/resend-adapter.ts +108 -0
- package/src/execution/engine/tools/integration/server/adapters/resend/resend-tools.ts +132 -0
- package/src/execution/engine/tools/integration/server/adapters/resend/types.ts +44 -0
- package/src/execution/engine/tools/integration/server/adapters/signature-api/fetch/create-envelope/index.ts +274 -0
- package/src/execution/engine/tools/integration/server/adapters/signature-api/fetch/download-document/index.ts +230 -0
- package/src/execution/engine/tools/integration/server/adapters/signature-api/fetch/get-envelope/index.ts +133 -0
- package/src/execution/engine/tools/integration/server/adapters/signature-api/fetch/utils/types.ts +246 -0
- package/src/execution/engine/tools/integration/server/adapters/signature-api/fetch/void-envelope/index.ts +90 -0
- package/src/execution/engine/tools/integration/server/adapters/signature-api/index.ts +38 -0
- package/src/execution/engine/tools/integration/server/adapters/signature-api/signature-api-adapter.ts +87 -0
- package/src/execution/engine/tools/integration/server/adapters/signature-api/signature-api-tools.ts +179 -0
- package/src/execution/engine/tools/integration/server/adapters/stripe/fetch/utils/types.ts +210 -0
- package/src/execution/engine/tools/integration/server/adapters/stripe/index.ts +44 -0
- package/src/execution/engine/tools/integration/server/adapters/stripe/stripe-adapter.ts +517 -0
- package/src/execution/engine/tools/integration/server/adapters/stripe/stripe-tools.ts +309 -0
- package/src/execution/engine/tools/integration/server/adapters/tomba/fetch/domain-search/index.ts +133 -0
- package/src/execution/engine/tools/integration/server/adapters/tomba/fetch/email-finder/index.ts +122 -0
- package/src/execution/engine/tools/integration/server/adapters/tomba/fetch/email-verifier/index.ts +111 -0
- package/src/execution/engine/tools/integration/server/adapters/tomba/index.ts +11 -0
- package/src/execution/engine/tools/integration/server/adapters/tomba/tomba-adapter.ts +78 -0
- package/src/execution/engine/tools/integration/server/adapters/tomba/tomba-tools.ts +222 -0
- package/src/execution/engine/tools/integration/server/index.ts +61 -0
- package/src/execution/engine/tools/integration/service.ts +161 -0
- package/src/execution/engine/tools/integration/tool.ts +253 -0
- package/src/execution/engine/tools/integration/types/anymailfinder.ts +74 -0
- package/src/execution/engine/tools/integration/types/apify.ts +92 -0
- package/src/execution/engine/tools/integration/types/attio.ts +354 -0
- package/src/execution/engine/tools/integration/types/dropbox.ts +64 -0
- package/src/execution/engine/tools/integration/types/gmail.ts +35 -0
- package/src/execution/engine/tools/integration/types/google-sheets.ts +303 -0
- package/src/execution/engine/tools/integration/types/index.ts +19 -0
- package/src/execution/engine/tools/integration/types/instantly.ts +557 -0
- package/src/execution/engine/tools/integration/types/millionverifier.ts +56 -0
- package/src/execution/engine/tools/integration/types/resend.ts +63 -0
- package/src/execution/engine/tools/integration/types/signature-api.ts +164 -0
- package/src/execution/engine/tools/integration/types/stripe.ts +162 -0
- package/src/execution/engine/tools/integration/types/tomba.ts +94 -0
- package/src/execution/engine/tools/lead-service-types.ts +884 -0
- package/src/execution/engine/tools/llm/index.ts +11 -0
- package/src/execution/engine/tools/llm/server/index.ts +8 -0
- package/src/execution/engine/tools/llm/server/llm-call-tool.ts +118 -0
- package/src/execution/engine/tools/platform/__tests__/approval.test.ts +242 -0
- package/src/execution/engine/tools/platform/__tests__/email.test.ts +482 -0
- package/src/execution/engine/tools/platform/__tests__/hitl-cancel.test.ts +97 -0
- package/src/execution/engine/tools/platform/__tests__/notification.test.ts +208 -0
- package/src/execution/engine/tools/platform/__tests__/pdf.test.ts +441 -0
- package/src/execution/engine/tools/platform/__tests__/scheduler.test.ts +189 -0
- package/src/execution/engine/tools/platform/__tests__/schedules.test.ts +336 -0
- package/src/execution/engine/tools/platform/acquisition/company-tools.ts +248 -0
- package/src/execution/engine/tools/platform/acquisition/contact-tools.ts +319 -0
- package/src/execution/engine/tools/platform/acquisition/index.ts +43 -0
- package/src/execution/engine/tools/platform/acquisition/list-tools.ts +148 -0
- package/src/execution/engine/tools/platform/acquisition/types.ts +260 -0
- package/src/execution/engine/tools/platform/approval/cancel-by-metadata.ts +65 -0
- package/src/execution/engine/tools/platform/approval/index.ts +4 -0
- package/src/execution/engine/tools/platform/approval/tool.ts +99 -0
- package/src/execution/engine/tools/platform/email/index.ts +122 -0
- package/src/execution/engine/tools/platform/email/types.ts +96 -0
- package/src/execution/engine/tools/platform/index.ts +181 -0
- package/src/execution/engine/tools/platform/notification.ts +81 -0
- package/src/execution/engine/tools/platform/pdf/index.ts +110 -0
- package/src/execution/engine/tools/platform/pdf/types.ts +77 -0
- package/src/execution/engine/tools/platform/resource-invocation/__tests__/edge-cases.test.ts +507 -0
- package/src/execution/engine/tools/platform/resource-invocation/__tests__/resource-invocation-service.test.ts +500 -0
- package/src/execution/engine/tools/platform/resource-invocation/__tests__/tool.test.ts +555 -0
- package/src/execution/engine/tools/platform/resource-invocation/dynamic-tool.ts +94 -0
- package/src/execution/engine/tools/platform/resource-invocation/index.ts +14 -0
- package/src/execution/engine/tools/platform/resource-invocation/resource-invocation-service.ts +147 -0
- package/src/execution/engine/tools/platform/resource-invocation/tool.ts +115 -0
- package/src/execution/engine/tools/platform/resource-invocation/types.ts +31 -0
- package/src/execution/engine/tools/platform/scheduler.ts +87 -0
- package/src/execution/engine/tools/platform/schedules/cancel-by-key-tool.ts +48 -0
- package/src/execution/engine/tools/platform/schedules/cancel-by-metadata-tool.ts +42 -0
- package/src/execution/engine/tools/platform/schedules/delete-by-key-tool.ts +43 -0
- package/src/execution/engine/tools/platform/schedules/index.ts +13 -0
- package/src/execution/engine/tools/platform/schedules/list-tool.ts +56 -0
- package/src/execution/engine/tools/platform/schedules/types.ts +88 -0
- package/src/execution/engine/tools/platform/storage/__tests__/storage.test.ts +998 -0
- package/src/execution/engine/tools/platform/storage/index.ts +370 -0
- package/src/execution/engine/tools/platform/storage/types.ts +128 -0
- package/src/execution/engine/tools/platform/types.ts +148 -0
- package/src/execution/engine/tools/registry.ts +590 -0
- package/src/execution/engine/tools/tool-maps.ts +694 -0
- package/src/execution/engine/tools/types.ts +233 -0
- package/src/execution/engine/workflow/__tests__/errors.test.ts +139 -0
- package/src/execution/engine/workflow/__tests__/utils.test.ts +645 -0
- package/src/execution/engine/workflow/__tests__/workflow.test.ts +818 -0
- package/src/execution/engine/workflow/errors.ts +63 -0
- package/src/execution/engine/workflow/helpers/index.ts +11 -0
- package/src/execution/engine/workflow/helpers/server/index.ts +8 -0
- package/src/execution/engine/workflow/helpers/server/llm-call.ts +93 -0
- package/src/execution/engine/workflow/index.ts +19 -0
- package/src/execution/engine/workflow/log-truncate.ts +26 -0
- package/src/execution/engine/workflow/logging.ts +191 -0
- package/src/execution/engine/workflow/types.ts +183 -0
- package/src/execution/engine/workflow/utils.ts +280 -0
- package/src/execution/engine/workflow/workflow.ts +168 -0
- package/src/execution/index.ts +20 -0
- package/src/execution/scheduler/__tests__/api-schemas.test.ts +733 -0
- package/src/execution/scheduler/__tests__/retry.test.ts +37 -0
- package/src/execution/scheduler/__tests__/utils.test.ts +1009 -0
- package/src/execution/scheduler/api-schemas.ts +296 -0
- package/src/execution/scheduler/index.ts +50 -0
- package/src/execution/scheduler/schemas.ts +264 -0
- package/src/execution/scheduler/types.ts +111 -0
- package/src/execution/scheduler/utils.ts +364 -0
- package/src/forms/index.ts +7 -0
- package/src/forms/schemas.test.ts +113 -0
- package/src/forms/schemas.ts +69 -0
- package/src/forms/types.ts +70 -0
- package/src/index.ts +54 -0
- package/src/integrations/credentials/__tests__/api-schemas.test.ts +496 -0
- package/src/integrations/credentials/__tests__/schemas.test.ts +82 -0
- package/src/integrations/credentials/__tests__/utils.test.ts +144 -0
- package/src/integrations/credentials/api-schemas.ts +143 -0
- package/src/integrations/credentials/index.ts +32 -0
- package/src/integrations/credentials/schemas.ts +164 -0
- package/src/integrations/credentials/utils.ts +59 -0
- package/src/integrations/oauth/__tests__/provider-registry.test.ts +59 -0
- package/src/integrations/oauth/api-schemas.ts +92 -0
- package/src/integrations/oauth/index.ts +19 -0
- package/src/integrations/oauth/provider-registry.ts +61 -0
- package/src/integrations/oauth/server/__tests__/refresh-concurrent.test.ts +183 -0
- package/src/integrations/oauth/server/__tests__/refresh.integration.test.ts +257 -0
- package/src/integrations/oauth/server/__tests__/refresh.test.ts +577 -0
- package/src/integrations/oauth/server/credentials.ts +39 -0
- package/src/integrations/oauth/server/refresh.ts +214 -0
- package/src/integrations/oauth/types.ts +34 -0
- package/src/integrations/webhook-endpoints/__tests__/api-schemas.test.ts +318 -0
- package/src/integrations/webhook-endpoints/api-schemas.ts +102 -0
- package/src/integrations/webhook-endpoints/index.ts +28 -0
- package/src/integrations/webhook-endpoints/types.ts +51 -0
- package/src/operations/activities/api-schemas.ts +79 -0
- package/src/operations/activities/index.ts +9 -0
- package/src/operations/activities/sse-events.ts +30 -0
- package/src/operations/activities/types.ts +63 -0
- package/src/operations/debug-logs/client.ts +60 -0
- package/src/operations/debug-logs/debug-logger.ts +83 -0
- package/src/operations/debug-logs/index.ts +8 -0
- package/src/operations/debug-logs/server.ts +19 -0
- package/src/operations/debug-logs/types.ts +33 -0
- package/src/operations/index.ts +50 -0
- package/src/operations/notifications/__tests__/api-schemas.test.ts +216 -0
- package/src/operations/notifications/api-schemas.ts +91 -0
- package/src/operations/notifications/index.ts +3 -0
- package/src/operations/notifications/sse-events.ts +21 -0
- package/src/operations/notifications/types.ts +47 -0
- package/src/operations/observability/__tests__/openrouter-cost-flow.test.ts +297 -0
- package/src/operations/observability/__tests__/schemas.test.ts +151 -0
- package/src/operations/observability/__tests__/types.test.ts +109 -0
- package/src/operations/observability/__tests__/utils.test.ts +54 -0
- package/src/operations/observability/ai-usage-collector.ts +64 -0
- package/src/operations/observability/index.ts +13 -0
- package/src/operations/observability/metrics-collector.ts +49 -0
- package/src/operations/observability/schemas.ts +39 -0
- package/src/operations/observability/types.ts +463 -0
- package/src/operations/observability/utils.ts +77 -0
- package/src/operations/sessions/__tests__/api-schemas.test.ts +361 -0
- package/src/operations/sessions/__tests__/manager.test.ts +821 -0
- package/src/operations/sessions/api-schemas.ts +166 -0
- package/src/operations/sessions/index.ts +26 -0
- package/src/operations/sessions/server/manager.ts +90 -0
- package/src/operations/sessions/server/session.ts +180 -0
- package/src/operations/sessions/types.ts +98 -0
- package/src/operations/triggers/index.ts +12 -0
- package/src/operations/triggers/webhook/definitions/__tests__/instantly-reply-received.test.ts +72 -0
- package/src/operations/triggers/webhook/definitions/instantly-account-error.ts +44 -0
- package/src/operations/triggers/webhook/definitions/instantly-auto-reply-received.ts +51 -0
- package/src/operations/triggers/webhook/definitions/instantly-campaign-completed.ts +45 -0
- package/src/operations/triggers/webhook/definitions/instantly-email-bounced.ts +49 -0
- package/src/operations/triggers/webhook/definitions/instantly-lead-unsubscribed.ts +45 -0
- package/src/operations/triggers/webhook/definitions/instantly-reply-received.ts +54 -0
- package/src/operations/triggers/webhook/index.ts +35 -0
- package/src/operations/triggers/webhook/types.ts +74 -0
- package/src/organization-model/README.md +79 -0
- package/src/organization-model/__tests__/graph.test.ts +250 -0
- package/src/organization-model/__tests__/resolve.test.ts +47 -0
- package/src/organization-model/defaults.ts +60 -0
- package/src/organization-model/domains/branding.ts +22 -0
- package/src/organization-model/domains/crm.ts +46 -0
- package/src/organization-model/domains/delivery.ts +48 -0
- package/src/organization-model/domains/features.ts +57 -0
- package/src/organization-model/domains/lead-gen.ts +33 -0
- package/src/organization-model/domains/navigation.ts +103 -0
- package/src/organization-model/domains/shared.ts +42 -0
- package/src/organization-model/graph/build.ts +432 -0
- package/src/organization-model/graph/index.ts +4 -0
- package/src/organization-model/graph/schema.ts +50 -0
- package/src/organization-model/graph/types.ts +52 -0
- package/src/organization-model/index.ts +11 -0
- package/src/organization-model/published.ts +18 -0
- package/src/organization-model/resolve.ts +42 -0
- package/src/organization-model/schema.ts +21 -0
- package/src/organization-model/types.ts +27 -0
- package/src/platform/api/index.ts +1 -0
- package/src/platform/api/types.ts +35 -0
- package/src/platform/constants/http.ts +37 -0
- package/src/platform/constants/index.ts +5 -0
- package/src/platform/constants/limits.ts +32 -0
- package/src/platform/constants/resilience.ts +51 -0
- package/src/platform/constants/timeouts.ts +20 -0
- package/src/platform/constants/versions.ts +3 -0
- package/src/platform/index.ts +27 -0
- package/src/platform/registry/__tests__/command-view.test.ts +410 -0
- package/src/platform/registry/__tests__/resource-registry-static.test.ts +347 -0
- package/src/platform/registry/__tests__/resource-registry.integration.test.ts +1004 -0
- package/src/platform/registry/__tests__/resource-registry.list-executable.test.ts +393 -0
- package/src/platform/registry/__tests__/resource-registry.test.ts +1942 -0
- package/src/platform/registry/__tests__/serialization.test.ts +1127 -0
- package/src/platform/registry/__tests__/validation.test.ts +1086 -0
- package/src/platform/registry/command-view.ts +180 -0
- package/src/platform/registry/domains.ts +165 -0
- package/src/platform/registry/index.ts +93 -0
- package/src/platform/registry/reserved.ts +24 -0
- package/src/platform/registry/resource-metadata.ts +59 -0
- package/src/platform/registry/resource-registry.command-queue-groups.test.ts +129 -0
- package/src/platform/registry/resource-registry.ts +788 -0
- package/src/platform/registry/serialization.ts +273 -0
- package/src/platform/registry/serialized-types.ts +231 -0
- package/src/platform/registry/stats-types.ts +66 -0
- package/src/platform/registry/types.ts +404 -0
- package/src/platform/registry/validation.ts +513 -0
- package/src/platform/resilience/__tests__/circuit-breaker.test.ts +291 -0
- package/src/platform/resilience/__tests__/http-error-mapper.test.ts +173 -0
- package/src/platform/resilience/__tests__/rate-limiter.test.ts +471 -0
- package/src/platform/resilience/__tests__/retry.test.ts +380 -0
- package/src/platform/resilience/__tests__/timeout.test.ts +219 -0
- package/src/platform/resilience/circuit-breaker.ts +164 -0
- package/src/platform/resilience/errors.ts +68 -0
- package/src/platform/resilience/http-error-mapper.ts +129 -0
- package/src/platform/resilience/index.ts +93 -0
- package/src/platform/resilience/rate-limiter-types.ts +46 -0
- package/src/platform/resilience/rate-limiter.ts +140 -0
- package/src/platform/resilience/retry.ts +89 -0
- package/src/platform/resilience/timeout.ts +63 -0
- package/src/platform/sse/events.ts +67 -0
- package/src/platform/sse/index.ts +7 -0
- package/src/platform/utils/__tests__/currency.test.ts +77 -0
- package/src/platform/utils/__tests__/validation.test.ts +1083 -0
- package/src/platform/utils/currency.ts +96 -0
- package/src/platform/utils/debounce.ts +52 -0
- package/src/platform/utils/error.ts +42 -0
- package/src/platform/utils/hmac.test.ts +97 -0
- package/src/platform/utils/index.ts +32 -0
- package/src/platform/utils/server/betterstack-logger.ts +210 -0
- package/src/platform/utils/server/hmac.ts +44 -0
- package/src/platform/utils/server/unsubscribe.ts +111 -0
- package/src/platform/utils/token-counter.ts +96 -0
- package/src/platform/utils/validation.ts +425 -0
- package/src/projects/api-schemas.ts +265 -0
- package/src/published.ts +1 -0
- package/src/server.ts +273 -0
- package/src/supabase/__tests__/helpers.test.ts +51 -0
- package/src/supabase/database.types.ts +2674 -0
- package/src/supabase/helpers.ts +20 -0
- package/src/supabase/index.ts +52 -0
- package/src/supabase/server/client.ts +58 -0
- package/src/test-utils/README.md +150 -0
- package/src/test-utils/browser-mocks.ts +54 -0
- package/src/test-utils/fixtures/api-keys.ts +52 -0
- package/src/test-utils/fixtures/index.ts +4 -0
- package/src/test-utils/fixtures/memberships.ts +80 -0
- package/src/test-utils/fixtures/organizations.ts +69 -0
- package/src/test-utils/fixtures/users.ts +79 -0
- package/src/test-utils/index.ts +11 -0
- package/src/test-utils/mocks/index.ts +2 -0
- package/src/test-utils/mocks/supabase.ts +142 -0
- package/src/test-utils/mocks/workos.ts +108 -0
- package/src/test-utils/rls/RLSTestContext.ts +586 -0
- package/src/test-utils/rls/index.ts +1 -0
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
import { z } from 'zod'
|
|
2
|
+
import type { Tool } from '../../../../types'
|
|
3
|
+
import { createIntegrationTool } from '../../../tool'
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Create a tool that generates Stripe payment links
|
|
7
|
+
*
|
|
8
|
+
* @param credentialName - Name of the Stripe credential to use
|
|
9
|
+
* @returns Tool instance
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```typescript
|
|
13
|
+
* const tool = createStripeCreatePaymentLinkTool('elevasis-stripe')
|
|
14
|
+
* const result = await tool.execute({
|
|
15
|
+
* priceId: 'price_xxx',
|
|
16
|
+
* metadata: { deal_id: 'deal-123' },
|
|
17
|
+
* redirectUrl: 'https://app.elevasis.io/payment-success'
|
|
18
|
+
* }, context)
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export function createStripeCreatePaymentLinkTool(credentialName: string): Tool {
|
|
22
|
+
return createIntegrationTool({
|
|
23
|
+
name: 'stripe_create_payment_link',
|
|
24
|
+
description: `Create a Stripe payment link for collecting payments.
|
|
25
|
+
|
|
26
|
+
Use this tool to generate a payment URL that can be sent to customers.
|
|
27
|
+
The link directs to Stripe's hosted checkout page.
|
|
28
|
+
|
|
29
|
+
Examples:
|
|
30
|
+
- Create link for proposal payment: priceId, metadata with deal_id, redirectUrl
|
|
31
|
+
- Create link with invoice: set invoiceCreation=true`,
|
|
32
|
+
inputSchema: z.object({
|
|
33
|
+
priceId: z.string().describe('Stripe price ID (price_xxx)'),
|
|
34
|
+
quantity: z.number().optional().default(1).describe('Quantity of items'),
|
|
35
|
+
metadata: z.record(z.string(), z.string()).optional().describe('Custom metadata'),
|
|
36
|
+
afterCompletionType: z
|
|
37
|
+
.enum(['redirect', 'hosted_confirmation'])
|
|
38
|
+
.optional()
|
|
39
|
+
.describe('What happens after payment'),
|
|
40
|
+
redirectUrl: z.string().url().optional().describe('URL to redirect after payment'),
|
|
41
|
+
allowPromotionCodes: z.boolean().optional().describe('Allow promo codes'),
|
|
42
|
+
automaticTax: z.boolean().optional().describe('Enable automatic tax'),
|
|
43
|
+
billingAddressCollection: z.enum(['auto', 'required']).optional().describe('Billing address mode'),
|
|
44
|
+
invoiceCreation: z.boolean().optional().describe('Generate invoice')
|
|
45
|
+
}),
|
|
46
|
+
outputSchema: z.object({
|
|
47
|
+
id: z.string().describe('Payment link ID (plink_xxx)'),
|
|
48
|
+
url: z.string().describe('Shareable payment URL'),
|
|
49
|
+
active: z.boolean().describe('Whether the link is active'),
|
|
50
|
+
livemode: z.boolean().describe('Whether in production mode')
|
|
51
|
+
}),
|
|
52
|
+
integration: 'stripe' as const,
|
|
53
|
+
method: 'createPaymentLink' as const,
|
|
54
|
+
credentialName
|
|
55
|
+
})
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Create a tool that retrieves a Stripe payment link
|
|
60
|
+
*
|
|
61
|
+
* @param credentialName - Name of the Stripe credential to use
|
|
62
|
+
* @returns Tool instance
|
|
63
|
+
*
|
|
64
|
+
* @example
|
|
65
|
+
* ```typescript
|
|
66
|
+
* const tool = createStripeGetPaymentLinkTool('elevasis-stripe')
|
|
67
|
+
* const result = await tool.execute({
|
|
68
|
+
* paymentLinkId: 'plink_xxx'
|
|
69
|
+
* }, context)
|
|
70
|
+
* ```
|
|
71
|
+
*/
|
|
72
|
+
export function createStripeGetPaymentLinkTool(credentialName: string): Tool {
|
|
73
|
+
return createIntegrationTool({
|
|
74
|
+
name: 'stripe_get_payment_link',
|
|
75
|
+
description: `Get details of a Stripe payment link.
|
|
76
|
+
|
|
77
|
+
Use this tool to retrieve information about an existing payment link,
|
|
78
|
+
including its URL, status, and metadata.
|
|
79
|
+
|
|
80
|
+
Useful for:
|
|
81
|
+
- Checking if a payment link is still active
|
|
82
|
+
- Retrieving the URL for a previously created link
|
|
83
|
+
- Accessing metadata associated with the link`,
|
|
84
|
+
inputSchema: z.object({
|
|
85
|
+
paymentLinkId: z.string().describe('Payment link ID (plink_xxx)')
|
|
86
|
+
}),
|
|
87
|
+
outputSchema: z.object({
|
|
88
|
+
id: z.string().describe('Payment link ID'),
|
|
89
|
+
url: z.string().describe('Shareable payment URL'),
|
|
90
|
+
active: z.boolean().describe('Whether the link is active'),
|
|
91
|
+
livemode: z.boolean().describe('Whether in production mode'),
|
|
92
|
+
metadata: z.record(z.string(), z.string()).describe('Custom metadata')
|
|
93
|
+
}),
|
|
94
|
+
integration: 'stripe' as const,
|
|
95
|
+
method: 'getPaymentLink' as const,
|
|
96
|
+
credentialName
|
|
97
|
+
})
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Create a tool that updates a Stripe payment link
|
|
102
|
+
*
|
|
103
|
+
* @param credentialName - Name of the Stripe credential to use
|
|
104
|
+
* @returns Tool instance
|
|
105
|
+
*
|
|
106
|
+
* @example
|
|
107
|
+
* ```typescript
|
|
108
|
+
* const tool = createStripeUpdatePaymentLinkTool('elevasis-stripe')
|
|
109
|
+
* const result = await tool.execute({
|
|
110
|
+
* paymentLinkId: 'plink_xxx',
|
|
111
|
+
* active: false // Deactivate the link
|
|
112
|
+
* }, context)
|
|
113
|
+
* ```
|
|
114
|
+
*/
|
|
115
|
+
export function createStripeUpdatePaymentLinkTool(credentialName: string): Tool {
|
|
116
|
+
return createIntegrationTool({
|
|
117
|
+
name: 'stripe_update_payment_link',
|
|
118
|
+
description: `Update a Stripe payment link.
|
|
119
|
+
|
|
120
|
+
Use this tool to modify an existing payment link.
|
|
121
|
+
Common operations:
|
|
122
|
+
- Deactivate a link (set active=false)
|
|
123
|
+
- Update metadata
|
|
124
|
+
|
|
125
|
+
Note: You cannot change the price after creation.`,
|
|
126
|
+
inputSchema: z.object({
|
|
127
|
+
paymentLinkId: z.string().describe('Payment link ID (plink_xxx)'),
|
|
128
|
+
active: z.boolean().optional().describe('Enable or disable the link'),
|
|
129
|
+
metadata: z.record(z.string(), z.string()).optional().describe('Update metadata')
|
|
130
|
+
}),
|
|
131
|
+
outputSchema: z.object({
|
|
132
|
+
id: z.string().describe('Payment link ID'),
|
|
133
|
+
active: z.boolean().describe('Whether the link is active'),
|
|
134
|
+
url: z.string().describe('Shareable payment URL')
|
|
135
|
+
}),
|
|
136
|
+
integration: 'stripe' as const,
|
|
137
|
+
method: 'updatePaymentLink' as const,
|
|
138
|
+
credentialName
|
|
139
|
+
})
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* Create a tool that lists Stripe payment links
|
|
144
|
+
*
|
|
145
|
+
* @param credentialName - Name of the Stripe credential to use
|
|
146
|
+
* @returns Tool instance
|
|
147
|
+
*
|
|
148
|
+
* @example
|
|
149
|
+
* ```typescript
|
|
150
|
+
* const tool = createStripeListPaymentLinksTool('elevasis-stripe')
|
|
151
|
+
* const result = await tool.execute({
|
|
152
|
+
* active: true,
|
|
153
|
+
* limit: 10
|
|
154
|
+
* }, context)
|
|
155
|
+
* ```
|
|
156
|
+
*/
|
|
157
|
+
export function createStripeListPaymentLinksTool(credentialName: string): Tool {
|
|
158
|
+
return createIntegrationTool({
|
|
159
|
+
name: 'stripe_list_payment_links',
|
|
160
|
+
description: `List Stripe payment links.
|
|
161
|
+
|
|
162
|
+
Use this tool to retrieve a list of payment links.
|
|
163
|
+
Supports filtering by active status and pagination.
|
|
164
|
+
|
|
165
|
+
Useful for:
|
|
166
|
+
- Finding active payment links
|
|
167
|
+
- Auditing created links
|
|
168
|
+
- Paginating through large numbers of links`,
|
|
169
|
+
inputSchema: z.object({
|
|
170
|
+
active: z.boolean().optional().describe('Filter by active status'),
|
|
171
|
+
limit: z.number().min(1).max(100).optional().describe('Number of links to return (1-100)'),
|
|
172
|
+
startingAfter: z.string().optional().describe('Cursor for pagination (payment link ID)'),
|
|
173
|
+
endingBefore: z.string().optional().describe('Cursor for pagination (payment link ID)')
|
|
174
|
+
}),
|
|
175
|
+
outputSchema: z.object({
|
|
176
|
+
data: z
|
|
177
|
+
.array(
|
|
178
|
+
z.object({
|
|
179
|
+
id: z.string().describe('Payment link ID'),
|
|
180
|
+
url: z.string().describe('Shareable payment URL'),
|
|
181
|
+
active: z.boolean().describe('Whether the link is active'),
|
|
182
|
+
metadata: z.record(z.string(), z.string()).describe('Custom metadata')
|
|
183
|
+
})
|
|
184
|
+
)
|
|
185
|
+
.describe('List of payment links'),
|
|
186
|
+
hasMore: z.boolean().describe('Whether more results are available')
|
|
187
|
+
}),
|
|
188
|
+
integration: 'stripe' as const,
|
|
189
|
+
method: 'listPaymentLinks' as const,
|
|
190
|
+
credentialName
|
|
191
|
+
})
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
/**
|
|
195
|
+
* Create a tool that generates Stripe checkout sessions for custom amounts
|
|
196
|
+
*
|
|
197
|
+
* Use this for variable/custom pricing where the amount comes from the proposal.
|
|
198
|
+
* Unlike payment links (which require pre-defined price IDs), checkout sessions
|
|
199
|
+
* support price_data with any unit_amount.
|
|
200
|
+
*
|
|
201
|
+
* @param credentialName - Name of the Stripe credential to use
|
|
202
|
+
* @returns Tool instance
|
|
203
|
+
*
|
|
204
|
+
* @example
|
|
205
|
+
* ```typescript
|
|
206
|
+
* const tool = createStripeCheckoutSessionTool('elevasis-stripe')
|
|
207
|
+
* const result = await tool.execute({
|
|
208
|
+
* amount: 2400000, // $24,000 in cents
|
|
209
|
+
* metadata: { deal_id: 'deal-123' },
|
|
210
|
+
* successUrl: 'https://app.elevasis.io/payment-success',
|
|
211
|
+
* cancelUrl: 'https://app.elevasis.io/payment-cancelled'
|
|
212
|
+
* }, context)
|
|
213
|
+
* ```
|
|
214
|
+
*/
|
|
215
|
+
export function createStripeCheckoutSessionTool(credentialName: string): Tool {
|
|
216
|
+
return createIntegrationTool({
|
|
217
|
+
name: 'stripe_create_checkout_session',
|
|
218
|
+
description: `Create a Stripe checkout session for custom-amount payments.
|
|
219
|
+
|
|
220
|
+
Use this tool for variable pricing where the amount comes from the proposal.
|
|
221
|
+
Creates a one-time payment URL that expires in 24 hours.
|
|
222
|
+
|
|
223
|
+
Key differences from payment links:
|
|
224
|
+
- Supports any amount (no pre-defined price IDs needed)
|
|
225
|
+
- URL expires in 24 hours (must recreate if needed)
|
|
226
|
+
- Created per-transaction (not reusable)
|
|
227
|
+
|
|
228
|
+
Examples:
|
|
229
|
+
- Collect payment for signed proposal: amount from proposal, metadata with deal_id
|
|
230
|
+
- Customer receives hosted Stripe checkout page`,
|
|
231
|
+
inputSchema: z.object({
|
|
232
|
+
amount: z.number().int().positive().describe('Amount in cents (e.g., 2400000 for $24,000)'),
|
|
233
|
+
currency: z.string().optional().default('usd').describe('Currency code (default: usd)'),
|
|
234
|
+
productName: z.string().optional().describe('Product name shown in checkout'),
|
|
235
|
+
productDescription: z.string().optional().describe('Product description'),
|
|
236
|
+
metadata: z.record(z.string(), z.string()).optional().describe('Metadata (deal_id, etc.)'),
|
|
237
|
+
successUrl: z.string().url().describe('URL after successful payment'),
|
|
238
|
+
cancelUrl: z.string().url().describe('URL if customer cancels'),
|
|
239
|
+
customerEmail: z.string().email().optional().describe('Pre-fill customer email')
|
|
240
|
+
}),
|
|
241
|
+
outputSchema: z.object({
|
|
242
|
+
id: z.string().describe('Session ID (cs_xxx)'),
|
|
243
|
+
url: z.string().describe('Payment URL (expires in 24h)'),
|
|
244
|
+
expiresAt: z.number().describe('Expiration timestamp (Unix seconds)')
|
|
245
|
+
}),
|
|
246
|
+
integration: 'stripe' as const,
|
|
247
|
+
method: 'createCheckoutSession' as const,
|
|
248
|
+
credentialName
|
|
249
|
+
})
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
/**
|
|
253
|
+
* Create a tool that generates Stripe payment links with dynamic pricing
|
|
254
|
+
*
|
|
255
|
+
* Unlike standard payment links (which require pre-created Price IDs),
|
|
256
|
+
* this tool uses inline price_data for dynamic pricing. Supports both
|
|
257
|
+
* one-time setup fees and recurring monthly subscriptions.
|
|
258
|
+
*
|
|
259
|
+
* @param credentialName - Name of the Stripe credential to use
|
|
260
|
+
* @returns Tool instance
|
|
261
|
+
*
|
|
262
|
+
* @example
|
|
263
|
+
* ```typescript
|
|
264
|
+
* const tool = createStripeAutoPaymentLinkTool('elevasis-stripe')
|
|
265
|
+
* const result = await tool.execute({
|
|
266
|
+
* dealId: 'deal-123',
|
|
267
|
+
* companyName: 'Acme Corp',
|
|
268
|
+
* contactEmail: 'john@acme.com',
|
|
269
|
+
* initialFee: 3000, // $3,000 one-time
|
|
270
|
+
* monthlyFee: 500 // $500/month recurring
|
|
271
|
+
* }, context)
|
|
272
|
+
* ```
|
|
273
|
+
*/
|
|
274
|
+
export function createStripeAutoPaymentLinkTool(credentialName: string): Tool {
|
|
275
|
+
return createIntegrationTool({
|
|
276
|
+
name: 'stripe_create_auto_payment_link',
|
|
277
|
+
description: `Create a Stripe payment link with dynamic pricing (inline price_data).
|
|
278
|
+
|
|
279
|
+
Use this tool for variable pricing with both one-time and recurring fees.
|
|
280
|
+
URLs NEVER EXPIRE - same link can be used in all reminder emails.
|
|
281
|
+
|
|
282
|
+
Key features:
|
|
283
|
+
- Supports dynamic amounts (no pre-defined Price IDs needed)
|
|
284
|
+
- Can include both one-time setup fee AND monthly recurring in one link
|
|
285
|
+
- URL never expires (unlike checkout sessions)
|
|
286
|
+
- Metadata propagates to all webhooks (checkout.session.completed, etc.)
|
|
287
|
+
|
|
288
|
+
Examples:
|
|
289
|
+
- Setup + monthly: initialFee=3000, monthlyFee=500 ($3,000 one-time + $500/month)
|
|
290
|
+
- Monthly only: initialFee=0, monthlyFee=500 ($500/month subscription)
|
|
291
|
+
- One-time only: initialFee=3000, monthlyFee=0 ($3,000 one-time payment)`,
|
|
292
|
+
inputSchema: z.object({
|
|
293
|
+
dealId: z.string().describe('Local deal ID for metadata'),
|
|
294
|
+
companyName: z.string().describe('Company name for product description'),
|
|
295
|
+
contactEmail: z.string().email().describe('Contact email for metadata'),
|
|
296
|
+
initialFee: z.number().min(0).describe('One-time setup fee in dollars (e.g., 3000 for $3,000)'),
|
|
297
|
+
monthlyFee: z.number().min(0).describe('Recurring monthly fee in dollars (e.g., 500 for $500/month)')
|
|
298
|
+
}),
|
|
299
|
+
outputSchema: z.object({
|
|
300
|
+
paymentLinkId: z.string().describe('Payment link ID (plink_xxx)'),
|
|
301
|
+
url: z.string().describe('Payment URL (NEVER EXPIRES)'),
|
|
302
|
+
hasInitialFee: z.boolean().describe('Whether link includes one-time fee'),
|
|
303
|
+
hasRecurring: z.boolean().describe('Whether link includes recurring subscription')
|
|
304
|
+
}),
|
|
305
|
+
integration: 'stripe' as const,
|
|
306
|
+
method: 'createAutoPaymentLink' as const,
|
|
307
|
+
credentialName
|
|
308
|
+
})
|
|
309
|
+
}
|
package/src/execution/engine/tools/integration/server/adapters/tomba/fetch/domain-search/index.ts
ADDED
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { withRetry, createHttpError, DEFAULT_RETRY_POLICY } from '../../../../../../../../../platform/resilience'
|
|
2
|
+
import type { ExecutionContext } from '../../../../../../../base/types'
|
|
3
|
+
|
|
4
|
+
interface TombaCredentials {
|
|
5
|
+
apiKey: string
|
|
6
|
+
apiSecret: string
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export interface DomainSearchParams {
|
|
10
|
+
domain: string
|
|
11
|
+
limit?: number
|
|
12
|
+
department?: string
|
|
13
|
+
type?: 'personal' | 'generic'
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export interface DomainSearchEmail {
|
|
17
|
+
email: string
|
|
18
|
+
firstName: string
|
|
19
|
+
lastName: string
|
|
20
|
+
fullName: string
|
|
21
|
+
position: string
|
|
22
|
+
department: string
|
|
23
|
+
verificationDate: string
|
|
24
|
+
verificationStatus: string
|
|
25
|
+
sources: Array<{
|
|
26
|
+
uri: string
|
|
27
|
+
extractedOn: string
|
|
28
|
+
lastSeenOn: string
|
|
29
|
+
stillOnPage: boolean
|
|
30
|
+
}>
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export interface DomainSearchResult {
|
|
34
|
+
organizationName: string
|
|
35
|
+
domain: string
|
|
36
|
+
emails: DomainSearchEmail[]
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
const TOMBA_API_BASE = 'https://api.tomba.io/v1'
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Find all email addresses at a company domain via Tomba
|
|
43
|
+
*
|
|
44
|
+
* Searches for all known email addresses at the given domain. Optionally filter
|
|
45
|
+
* by department. Returns enriched data per email including position and
|
|
46
|
+
* verification status.
|
|
47
|
+
*
|
|
48
|
+
* @param credentials - Tomba API key and secret
|
|
49
|
+
* @param params - Domain, optional limit, and optional department filter
|
|
50
|
+
* @param context - Execution context for logging
|
|
51
|
+
* @returns Organization name, domain, and list of found email records
|
|
52
|
+
*/
|
|
53
|
+
export async function domainSearch(
|
|
54
|
+
credentials: TombaCredentials,
|
|
55
|
+
params: DomainSearchParams,
|
|
56
|
+
context?: ExecutionContext
|
|
57
|
+
): Promise<DomainSearchResult> {
|
|
58
|
+
const { apiKey, apiSecret } = credentials
|
|
59
|
+
const { domain, limit, department, type } = params
|
|
60
|
+
|
|
61
|
+
if (!domain) {
|
|
62
|
+
throw new Error('domain is required for domainSearch')
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
if (context?.logger) {
|
|
66
|
+
context.logger.info(
|
|
67
|
+
`[TombaAdapter] domainSearch: domain=${domain} limit=${limit} department=${department} type=${type} organizationId=${context.organizationId} executionId=${context.executionId}`
|
|
68
|
+
)
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
const url = new URL(`${TOMBA_API_BASE}/domain-search`)
|
|
72
|
+
url.searchParams.set('domain', domain)
|
|
73
|
+
if (limit !== undefined) {
|
|
74
|
+
url.searchParams.set('limit', String(limit))
|
|
75
|
+
}
|
|
76
|
+
if (department) {
|
|
77
|
+
url.searchParams.set('department', department)
|
|
78
|
+
}
|
|
79
|
+
if (type) {
|
|
80
|
+
url.searchParams.set('type', type)
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
const response = await withRetry(async () => {
|
|
84
|
+
const res = await fetch(url.toString(), {
|
|
85
|
+
method: 'GET',
|
|
86
|
+
headers: {
|
|
87
|
+
'X-Tomba-Key': apiKey,
|
|
88
|
+
'X-Tomba-Secret': apiSecret
|
|
89
|
+
},
|
|
90
|
+
signal: AbortSignal.timeout(60_000)
|
|
91
|
+
})
|
|
92
|
+
|
|
93
|
+
if (!res.ok) {
|
|
94
|
+
throw await createHttpError(res, {
|
|
95
|
+
integration: 'tomba',
|
|
96
|
+
method: 'domainSearch',
|
|
97
|
+
organizationId: context?.organizationId
|
|
98
|
+
})
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
return res.json()
|
|
102
|
+
}, DEFAULT_RETRY_POLICY)
|
|
103
|
+
|
|
104
|
+
const data = response.data ?? {}
|
|
105
|
+
const rawEmails: Array<Record<string, unknown>> = data.emails ?? []
|
|
106
|
+
|
|
107
|
+
if (context?.logger) {
|
|
108
|
+
context.logger.info(
|
|
109
|
+
`[TombaAdapter] domainSearch complete: domain=${domain} emailCount=${rawEmails.length} organizationId=${context.organizationId}`
|
|
110
|
+
)
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
return {
|
|
114
|
+
organizationName: data.organization_name ?? '',
|
|
115
|
+
domain: data.domain ?? domain,
|
|
116
|
+
emails: rawEmails.map((e) => ({
|
|
117
|
+
email: (e.email as string) ?? '',
|
|
118
|
+
firstName: (e.first_name as string) ?? '',
|
|
119
|
+
lastName: (e.last_name as string) ?? '',
|
|
120
|
+
fullName: (e.full_name as string) ?? '',
|
|
121
|
+
position: (e.position as string) ?? '',
|
|
122
|
+
department: (e.department as string) ?? '',
|
|
123
|
+
verificationDate: ((e.verification as Record<string, unknown>)?.date as string) ?? '',
|
|
124
|
+
verificationStatus: ((e.verification as Record<string, unknown>)?.status as string) ?? '',
|
|
125
|
+
sources: ((e.sources as Array<Record<string, unknown>>) ?? []).map((s) => ({
|
|
126
|
+
uri: (s.uri as string) ?? '',
|
|
127
|
+
extractedOn: (s.extracted_on as string) ?? '',
|
|
128
|
+
lastSeenOn: (s.last_seen_on as string) ?? '',
|
|
129
|
+
stillOnPage: (s.still_on_page as boolean) ?? false
|
|
130
|
+
}))
|
|
131
|
+
}))
|
|
132
|
+
}
|
|
133
|
+
}
|
package/src/execution/engine/tools/integration/server/adapters/tomba/fetch/email-finder/index.ts
ADDED
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { withRetry, createHttpError, DEFAULT_RETRY_POLICY } from '../../../../../../../../../platform/resilience'
|
|
2
|
+
import type { ExecutionContext } from '../../../../../../../base/types'
|
|
3
|
+
|
|
4
|
+
interface TombaCredentials {
|
|
5
|
+
apiKey: string
|
|
6
|
+
apiSecret: string
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export interface EmailFinderParams {
|
|
10
|
+
domain: string
|
|
11
|
+
firstName: string
|
|
12
|
+
lastName: string
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export interface EmailFinderResult {
|
|
16
|
+
email: string
|
|
17
|
+
firstName: string
|
|
18
|
+
lastName: string
|
|
19
|
+
fullName: string
|
|
20
|
+
position: string
|
|
21
|
+
company: string
|
|
22
|
+
country: string
|
|
23
|
+
score: number
|
|
24
|
+
verificationDate: string
|
|
25
|
+
verificationStatus: string
|
|
26
|
+
sources: Array<{
|
|
27
|
+
uri: string
|
|
28
|
+
extractedOn: string
|
|
29
|
+
lastSeenOn: string
|
|
30
|
+
stillOnPage: boolean
|
|
31
|
+
}>
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
const TOMBA_API_BASE = 'https://api.tomba.io/v1'
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Find a person's email address via Tomba
|
|
38
|
+
*
|
|
39
|
+
* Searches for a specific person's email by combining their first/last name
|
|
40
|
+
* with a company domain. Returns enriched data including position, score, and
|
|
41
|
+
* verification status.
|
|
42
|
+
*
|
|
43
|
+
* @param credentials - Tomba API key and secret
|
|
44
|
+
* @param params - Domain, first name, and last name
|
|
45
|
+
* @param context - Execution context for logging
|
|
46
|
+
* @returns Email address with enrichment data and verification status
|
|
47
|
+
*/
|
|
48
|
+
export async function emailFinder(
|
|
49
|
+
credentials: TombaCredentials,
|
|
50
|
+
params: EmailFinderParams,
|
|
51
|
+
context?: ExecutionContext
|
|
52
|
+
): Promise<EmailFinderResult> {
|
|
53
|
+
const { apiKey, apiSecret } = credentials
|
|
54
|
+
const { domain, firstName, lastName } = params
|
|
55
|
+
|
|
56
|
+
if (!domain) {
|
|
57
|
+
throw new Error('domain is required for emailFinder')
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
if (!firstName || !lastName) {
|
|
61
|
+
throw new Error('firstName and lastName are required for emailFinder')
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
if (context?.logger) {
|
|
65
|
+
context.logger.info(
|
|
66
|
+
`[TombaAdapter] emailFinder: domain=${domain} firstName=${firstName} lastName=${lastName} organizationId=${context.organizationId} executionId=${context.executionId}`
|
|
67
|
+
)
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
const url = new URL(`${TOMBA_API_BASE}/email-finder`)
|
|
71
|
+
url.searchParams.set('domain', domain)
|
|
72
|
+
url.searchParams.set('first_name', firstName)
|
|
73
|
+
url.searchParams.set('last_name', lastName)
|
|
74
|
+
|
|
75
|
+
const response = await withRetry(async () => {
|
|
76
|
+
const res = await fetch(url.toString(), {
|
|
77
|
+
method: 'GET',
|
|
78
|
+
headers: {
|
|
79
|
+
'X-Tomba-Key': apiKey,
|
|
80
|
+
'X-Tomba-Secret': apiSecret
|
|
81
|
+
},
|
|
82
|
+
signal: AbortSignal.timeout(60_000)
|
|
83
|
+
})
|
|
84
|
+
|
|
85
|
+
if (!res.ok) {
|
|
86
|
+
throw await createHttpError(res, {
|
|
87
|
+
integration: 'tomba',
|
|
88
|
+
method: 'emailFinder',
|
|
89
|
+
organizationId: context?.organizationId
|
|
90
|
+
})
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
return res.json()
|
|
94
|
+
}, DEFAULT_RETRY_POLICY)
|
|
95
|
+
|
|
96
|
+
const data = response.data ?? {}
|
|
97
|
+
|
|
98
|
+
if (context?.logger) {
|
|
99
|
+
context.logger.info(
|
|
100
|
+
`[TombaAdapter] emailFinder complete: email=${data.email ? '[found]' : '[not found]'} score=${data.score ?? 0} organizationId=${context.organizationId}`
|
|
101
|
+
)
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
return {
|
|
105
|
+
email: data.email ?? '',
|
|
106
|
+
firstName: data.first_name ?? '',
|
|
107
|
+
lastName: data.last_name ?? '',
|
|
108
|
+
fullName: data.full_name ?? '',
|
|
109
|
+
position: data.position ?? '',
|
|
110
|
+
company: data.company ?? '',
|
|
111
|
+
country: data.country ?? '',
|
|
112
|
+
score: data.score ?? 0,
|
|
113
|
+
verificationDate: data.verification?.date ?? '',
|
|
114
|
+
verificationStatus: data.verification?.status ?? '',
|
|
115
|
+
sources: (data.sources ?? []).map((s: Record<string, unknown>) => ({
|
|
116
|
+
uri: s.uri ?? '',
|
|
117
|
+
extractedOn: s.extracted_on ?? '',
|
|
118
|
+
lastSeenOn: s.last_seen_on ?? '',
|
|
119
|
+
stillOnPage: s.still_on_page ?? false
|
|
120
|
+
}))
|
|
121
|
+
}
|
|
122
|
+
}
|
package/src/execution/engine/tools/integration/server/adapters/tomba/fetch/email-verifier/index.ts
ADDED
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { ToolingError } from '../../../../../../types'
|
|
2
|
+
import { withRetry, createHttpError, DEFAULT_RETRY_POLICY } from '../../../../../../../../../platform/resilience'
|
|
3
|
+
import type { ExecutionContext } from '../../../../../../../base/types'
|
|
4
|
+
|
|
5
|
+
interface TombaCredentials {
|
|
6
|
+
apiKey: string
|
|
7
|
+
apiSecret: string
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export interface EmailVerifierParams {
|
|
11
|
+
email: string
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export interface EmailVerifierResult {
|
|
15
|
+
email: string
|
|
16
|
+
result: string
|
|
17
|
+
status: string
|
|
18
|
+
score: number
|
|
19
|
+
mxRecords: boolean
|
|
20
|
+
smtpServer: boolean
|
|
21
|
+
smtpCheck: boolean
|
|
22
|
+
acceptAll: boolean
|
|
23
|
+
block: boolean
|
|
24
|
+
gibberish: boolean
|
|
25
|
+
disposable: boolean
|
|
26
|
+
webmail: boolean
|
|
27
|
+
regex: boolean
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
const TOMBA_API_BASE = 'https://api.tomba.io/v1'
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Verify an email address deliverability via Tomba
|
|
34
|
+
*
|
|
35
|
+
* Checks whether the given email address is valid and deliverable. Performs
|
|
36
|
+
* MX record lookup, SMTP server check, and other validation signals.
|
|
37
|
+
*
|
|
38
|
+
* @param credentials - Tomba API key and secret
|
|
39
|
+
* @param params - Email address to verify
|
|
40
|
+
* @param context - Execution context for logging
|
|
41
|
+
* @returns Detailed verification result including deliverability signals
|
|
42
|
+
*/
|
|
43
|
+
export async function emailVerifier(
|
|
44
|
+
credentials: TombaCredentials,
|
|
45
|
+
params: EmailVerifierParams,
|
|
46
|
+
context?: ExecutionContext
|
|
47
|
+
): Promise<EmailVerifierResult> {
|
|
48
|
+
const { apiKey, apiSecret } = credentials
|
|
49
|
+
const { email } = params
|
|
50
|
+
|
|
51
|
+
if (!email) {
|
|
52
|
+
throw new ToolingError('validation_error', 'Missing required parameter: email', {
|
|
53
|
+
integration: 'tomba',
|
|
54
|
+
method: 'emailVerifier'
|
|
55
|
+
})
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
if (context?.logger) {
|
|
59
|
+
context.logger.info(
|
|
60
|
+
`[TombaAdapter] emailVerifier: email=${email} organizationId=${context.organizationId} executionId=${context.executionId}`
|
|
61
|
+
)
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
const url = new URL(`${TOMBA_API_BASE}/email-verifier`)
|
|
65
|
+
url.searchParams.set('email', email)
|
|
66
|
+
|
|
67
|
+
const response = await withRetry(async () => {
|
|
68
|
+
const res = await fetch(url.toString(), {
|
|
69
|
+
method: 'GET',
|
|
70
|
+
headers: {
|
|
71
|
+
'X-Tomba-Key': apiKey,
|
|
72
|
+
'X-Tomba-Secret': apiSecret
|
|
73
|
+
},
|
|
74
|
+
signal: AbortSignal.timeout(60_000)
|
|
75
|
+
})
|
|
76
|
+
|
|
77
|
+
if (!res.ok) {
|
|
78
|
+
throw await createHttpError(res, {
|
|
79
|
+
integration: 'tomba',
|
|
80
|
+
method: 'emailVerifier',
|
|
81
|
+
organizationId: context?.organizationId
|
|
82
|
+
})
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
return res.json()
|
|
86
|
+
}, DEFAULT_RETRY_POLICY)
|
|
87
|
+
|
|
88
|
+
const data = (response.data?.email as Record<string, unknown>) ?? {}
|
|
89
|
+
|
|
90
|
+
if (context?.logger) {
|
|
91
|
+
context.logger.info(
|
|
92
|
+
`[TombaAdapter] emailVerifier complete: email=${email} result=${data.result ?? ''} status=${data.status ?? ''} organizationId=${context.organizationId}`
|
|
93
|
+
)
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
return {
|
|
97
|
+
email: (data.email as string) ?? email,
|
|
98
|
+
result: (data.result as string) ?? '',
|
|
99
|
+
status: (data.status as string) ?? '',
|
|
100
|
+
score: (data.score as number) ?? 0,
|
|
101
|
+
mxRecords: (data.mx_records as boolean) ?? false,
|
|
102
|
+
smtpServer: (data.smtp_server as boolean) ?? false,
|
|
103
|
+
smtpCheck: (data.smtp_check as boolean) ?? false,
|
|
104
|
+
acceptAll: (data.accept_all as boolean) ?? false,
|
|
105
|
+
block: (data.block as boolean) ?? false,
|
|
106
|
+
gibberish: (data.gibberish as boolean) ?? false,
|
|
107
|
+
disposable: (data.disposable as boolean) ?? false,
|
|
108
|
+
webmail: (data.webmail as boolean) ?? false,
|
|
109
|
+
regex: (data.regex as boolean) ?? false
|
|
110
|
+
}
|
|
111
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// ============================================================================
|
|
2
|
+
// TOMBA ADAPTER
|
|
3
|
+
// ============================================================================
|
|
4
|
+
|
|
5
|
+
export { TombaAdapter } from './tomba-adapter'
|
|
6
|
+
|
|
7
|
+
// ============================================================================
|
|
8
|
+
// TOMBA TOOLS
|
|
9
|
+
// ============================================================================
|
|
10
|
+
|
|
11
|
+
export { createTombaEmailFinderTool, createTombaDomainSearchTool, createTombaEmailVerifierTool } from './tomba-tools'
|