@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,73 @@
|
|
|
1
|
+
import type { BaseIntegrationAdapter } from '../../../base-integration-adapter'
|
|
2
|
+
import { ToolingError } from '../../../../types'
|
|
3
|
+
import type { ExecutionContext } from '../../../../../base/types'
|
|
4
|
+
|
|
5
|
+
import { findCompanyEmail } from './fetch/find-company-email/index'
|
|
6
|
+
import type { FindCompanyEmailParams } from './fetch/find-company-email/index'
|
|
7
|
+
import { findPersonEmail } from './fetch/find-person-email/index'
|
|
8
|
+
import type { FindPersonEmailParams } from './fetch/find-person-email/index'
|
|
9
|
+
import { findDecisionMakerEmail } from './fetch/find-decision-maker-email/index'
|
|
10
|
+
import type { FindDecisionMakerEmailParams } from './fetch/find-decision-maker-email/index'
|
|
11
|
+
import { verifyEmail } from './fetch/verify-email/index'
|
|
12
|
+
import type { VerifyEmailParams } from './fetch/verify-email/index'
|
|
13
|
+
|
|
14
|
+
interface AnymailfinderCredentials {
|
|
15
|
+
apiKey: string
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Anymailfinder integration adapter
|
|
20
|
+
*
|
|
21
|
+
* Provides access to the Anymailfinder email discovery API for finding and
|
|
22
|
+
* verifying email addresses by company domain, person name, or decision maker role.
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* const adapter = new AnymailfinderAdapter()
|
|
26
|
+
* const result = await adapter.call(
|
|
27
|
+
* 'findCompanyEmail',
|
|
28
|
+
* { domain: 'example.com' },
|
|
29
|
+
* { apiKey: 'anymailfinder_api_...' },
|
|
30
|
+
* context
|
|
31
|
+
* )
|
|
32
|
+
*/
|
|
33
|
+
export class AnymailfinderAdapter implements BaseIntegrationAdapter {
|
|
34
|
+
readonly name = 'anymailfinder'
|
|
35
|
+
|
|
36
|
+
async call(
|
|
37
|
+
method: string,
|
|
38
|
+
params: unknown,
|
|
39
|
+
credentials: Record<string, unknown>,
|
|
40
|
+
context?: ExecutionContext
|
|
41
|
+
): Promise<unknown> {
|
|
42
|
+
if (!this.validateCredentials(credentials)) {
|
|
43
|
+
throw new ToolingError('credentials_invalid', 'Invalid Anymailfinder credentials', {
|
|
44
|
+
integration: this.name,
|
|
45
|
+
organizationId: context?.organizationId
|
|
46
|
+
})
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
const creds = credentials as unknown as AnymailfinderCredentials
|
|
50
|
+
|
|
51
|
+
switch (method) {
|
|
52
|
+
case 'findCompanyEmail':
|
|
53
|
+
return findCompanyEmail(creds, params as FindCompanyEmailParams, context)
|
|
54
|
+
case 'findPersonEmail':
|
|
55
|
+
return findPersonEmail(creds, params as FindPersonEmailParams, context)
|
|
56
|
+
case 'findDecisionMakerEmail':
|
|
57
|
+
return findDecisionMakerEmail(creds, params as FindDecisionMakerEmailParams, context)
|
|
58
|
+
case 'verifyEmail':
|
|
59
|
+
return verifyEmail(creds, params as VerifyEmailParams, context)
|
|
60
|
+
default:
|
|
61
|
+
throw new ToolingError('method_not_found', `Unknown Anymailfinder method: ${method}`, {
|
|
62
|
+
integration: this.name,
|
|
63
|
+
method,
|
|
64
|
+
organizationId: context?.organizationId
|
|
65
|
+
})
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
validateCredentials(credentials: Record<string, unknown>): boolean {
|
|
70
|
+
const creds = credentials as unknown as AnymailfinderCredentials
|
|
71
|
+
return !!creds.apiKey && typeof creds.apiKey === 'string' && creds.apiKey.length > 0
|
|
72
|
+
}
|
|
73
|
+
}
|
package/src/execution/engine/tools/integration/server/adapters/anymailfinder/anymailfinder-tools.ts
ADDED
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
import { z } from 'zod'
|
|
2
|
+
import { createIntegrationTool } from '../../../tool'
|
|
3
|
+
import type { Tool } from '../../../../types'
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Create Anymailfinder find company email tool
|
|
7
|
+
*
|
|
8
|
+
* Discovers all email addresses at a company domain.
|
|
9
|
+
*
|
|
10
|
+
* @param credentialName - Name of credential in credentials table
|
|
11
|
+
* @returns Tool that finds company emails via Anymailfinder
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* const findCompanyEmail = createAnymailfinderFindCompanyEmailTool('anymailfinder-elevasis')
|
|
15
|
+
*/
|
|
16
|
+
export function createAnymailfinderFindCompanyEmailTool(credentialName: string): Tool {
|
|
17
|
+
return createIntegrationTool({
|
|
18
|
+
name: 'anymailfinder_find_company_email',
|
|
19
|
+
description: `Find all email addresses at a company domain using Anymailfinder.
|
|
20
|
+
|
|
21
|
+
USE CASES:
|
|
22
|
+
- Discover all emails at a domain (up to 20)
|
|
23
|
+
- Filter by email type (personal, generic, or all)
|
|
24
|
+
|
|
25
|
+
REQUIRED PARAMETERS (at least one):
|
|
26
|
+
- domain: Company domain (e.g., "example.com")
|
|
27
|
+
- company_name: Company name (e.g., "Example Inc")
|
|
28
|
+
|
|
29
|
+
OPTIONAL PARAMETERS:
|
|
30
|
+
- email_type: "personal", "generic", or "all" (default: "all")
|
|
31
|
+
|
|
32
|
+
OUTPUT:
|
|
33
|
+
{
|
|
34
|
+
"email_status": "valid",
|
|
35
|
+
"emails": ["john@example.com", "info@example.com"],
|
|
36
|
+
"valid_emails": ["john@example.com"]
|
|
37
|
+
}`,
|
|
38
|
+
inputSchema: z.object({
|
|
39
|
+
domain: z.string().optional().describe('Company domain (e.g., "example.com")'),
|
|
40
|
+
company_name: z.string().optional().describe('Company name (e.g., "Example Inc")'),
|
|
41
|
+
email_type: z.enum(['personal', 'generic', 'all']).optional().describe('Filter by email type (default: "all")')
|
|
42
|
+
}),
|
|
43
|
+
outputSchema: z.object({
|
|
44
|
+
email_status: z.string().describe('Overall status of the email search'),
|
|
45
|
+
emails: z.array(z.string()).describe('All emails found at the domain'),
|
|
46
|
+
valid_emails: z.array(z.string()).describe('Subset of emails that passed validation')
|
|
47
|
+
}),
|
|
48
|
+
integration: 'anymailfinder' as const,
|
|
49
|
+
method: 'findCompanyEmail' as const,
|
|
50
|
+
credentialName
|
|
51
|
+
})
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Create Anymailfinder find person email tool
|
|
56
|
+
*
|
|
57
|
+
* Finds an individual's work email by name and company.
|
|
58
|
+
*
|
|
59
|
+
* @param credentialName - Name of credential in credentials table
|
|
60
|
+
* @returns Tool that finds a person's email via Anymailfinder
|
|
61
|
+
*
|
|
62
|
+
* @example
|
|
63
|
+
* const findPersonEmail = createAnymailfinderFindPersonEmailTool('anymailfinder-elevasis')
|
|
64
|
+
*/
|
|
65
|
+
export function createAnymailfinderFindPersonEmailTool(credentialName: string): Tool {
|
|
66
|
+
return createIntegrationTool({
|
|
67
|
+
name: 'anymailfinder_find_person_email',
|
|
68
|
+
description: `Find an individual's email address using their name and company domain.
|
|
69
|
+
|
|
70
|
+
USE CASES:
|
|
71
|
+
- Find email for a specific person when you have their name and company domain
|
|
72
|
+
- Verify a person's work email
|
|
73
|
+
|
|
74
|
+
REQUIRED PARAMETERS:
|
|
75
|
+
- domain or company_name (at least one)
|
|
76
|
+
- full_name or (first_name + last_name)
|
|
77
|
+
|
|
78
|
+
OPTIONAL PARAMETERS:
|
|
79
|
+
- domain: Company domain
|
|
80
|
+
- company_name: Company name
|
|
81
|
+
- full_name: Person's full name
|
|
82
|
+
- first_name: First name
|
|
83
|
+
- last_name: Last name
|
|
84
|
+
|
|
85
|
+
OUTPUT:
|
|
86
|
+
{
|
|
87
|
+
"email": "john@example.com",
|
|
88
|
+
"email_status": "valid",
|
|
89
|
+
"valid_email": "john@example.com"
|
|
90
|
+
}`,
|
|
91
|
+
inputSchema: z.object({
|
|
92
|
+
domain: z.string().optional().describe('Company domain'),
|
|
93
|
+
company_name: z.string().optional().describe('Company name'),
|
|
94
|
+
full_name: z.string().optional().describe("Person's full name"),
|
|
95
|
+
first_name: z.string().optional().describe('First name'),
|
|
96
|
+
last_name: z.string().optional().describe('Last name')
|
|
97
|
+
}),
|
|
98
|
+
outputSchema: z.object({
|
|
99
|
+
email: z.string().describe('Found email address (empty string if not found)'),
|
|
100
|
+
email_status: z.string().describe('Validation status of the email'),
|
|
101
|
+
valid_email: z.string().describe('Email if valid, empty string otherwise')
|
|
102
|
+
}),
|
|
103
|
+
integration: 'anymailfinder' as const,
|
|
104
|
+
method: 'findPersonEmail' as const,
|
|
105
|
+
credentialName
|
|
106
|
+
})
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Create Anymailfinder find decision maker email tool
|
|
111
|
+
*
|
|
112
|
+
* Finds a decision maker's email at a company by role category.
|
|
113
|
+
*
|
|
114
|
+
* @param credentialName - Name of credential in credentials table
|
|
115
|
+
* @returns Tool that finds decision maker emails via Anymailfinder
|
|
116
|
+
*
|
|
117
|
+
* @example
|
|
118
|
+
* const findDecisionMaker = createAnymailfinderFindDecisionMakerEmailTool('anymailfinder-elevasis')
|
|
119
|
+
*/
|
|
120
|
+
export function createAnymailfinderFindDecisionMakerEmailTool(credentialName: string): Tool {
|
|
121
|
+
return createIntegrationTool({
|
|
122
|
+
name: 'anymailfinder_find_decision_maker_email',
|
|
123
|
+
description: `Find a decision maker's email at a company by role category.
|
|
124
|
+
|
|
125
|
+
USE CASES:
|
|
126
|
+
- Find the owner/CEO email at a business
|
|
127
|
+
- Find operations manager email
|
|
128
|
+
- Find key decision makers when you don't have specific names
|
|
129
|
+
|
|
130
|
+
REQUIRED PARAMETERS:
|
|
131
|
+
- domain or company_name (at least one)
|
|
132
|
+
- decision_maker_category: Array of role categories
|
|
133
|
+
|
|
134
|
+
CATEGORIES: "ceo" (Owner/President/Founder), "operations", "marketing", "sales", "finance", "hr", "engineering", "it", "logistics", "buyer"
|
|
135
|
+
|
|
136
|
+
OUTPUT:
|
|
137
|
+
{
|
|
138
|
+
"email": "owner@example.com",
|
|
139
|
+
"email_status": "valid",
|
|
140
|
+
"valid_email": "owner@example.com",
|
|
141
|
+
"person_full_name": "Jane Smith",
|
|
142
|
+
"person_job_title": "Owner",
|
|
143
|
+
"person_linkedin_url": "https://linkedin.com/in/...",
|
|
144
|
+
"decision_maker_category": "ceo"
|
|
145
|
+
}`,
|
|
146
|
+
inputSchema: z.object({
|
|
147
|
+
domain: z.string().optional().describe('Company domain'),
|
|
148
|
+
company_name: z.string().optional().describe('Company name'),
|
|
149
|
+
decision_maker_category: z
|
|
150
|
+
.array(z.string())
|
|
151
|
+
.describe(
|
|
152
|
+
'Role categories to search: "ceo", "operations", "marketing", "sales", "finance", "hr", "engineering", "it", "logistics", "buyer"'
|
|
153
|
+
)
|
|
154
|
+
}),
|
|
155
|
+
outputSchema: z.object({
|
|
156
|
+
email: z.string().describe('Found email address (empty string if not found)'),
|
|
157
|
+
email_status: z.string().describe('Validation status of the email'),
|
|
158
|
+
valid_email: z.string().describe('Email if valid, empty string otherwise'),
|
|
159
|
+
person_full_name: z.string().describe("Decision maker's full name"),
|
|
160
|
+
person_job_title: z.string().describe("Decision maker's job title"),
|
|
161
|
+
person_linkedin_url: z.string().describe("Decision maker's LinkedIn URL"),
|
|
162
|
+
decision_maker_category: z.string().describe('Matched role category')
|
|
163
|
+
}),
|
|
164
|
+
integration: 'anymailfinder' as const,
|
|
165
|
+
method: 'findDecisionMakerEmail' as const,
|
|
166
|
+
credentialName
|
|
167
|
+
})
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* Create Anymailfinder verify email tool
|
|
172
|
+
*
|
|
173
|
+
* Verifies whether an email address is deliverable.
|
|
174
|
+
*
|
|
175
|
+
* @param credentialName - Name of credential in credentials table
|
|
176
|
+
* @returns Tool that verifies email addresses via Anymailfinder
|
|
177
|
+
*
|
|
178
|
+
* @example
|
|
179
|
+
* const verifyEmail = createAnymailfinderVerifyEmailTool('anymailfinder-elevasis')
|
|
180
|
+
*/
|
|
181
|
+
export function createAnymailfinderVerifyEmailTool(credentialName: string): Tool {
|
|
182
|
+
return createIntegrationTool({
|
|
183
|
+
name: 'anymailfinder_verify_email',
|
|
184
|
+
description: `Verify if an email address is valid using Anymailfinder.
|
|
185
|
+
|
|
186
|
+
USE CASES:
|
|
187
|
+
- Verify an email before sending outreach
|
|
188
|
+
- Check if a found email is deliverable
|
|
189
|
+
|
|
190
|
+
REQUIRED PARAMETERS:
|
|
191
|
+
- email: Email address to verify
|
|
192
|
+
|
|
193
|
+
OUTPUT:
|
|
194
|
+
{
|
|
195
|
+
"email_status": "valid"
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
Status values: "valid", "risky", "not_found", "blacklisted"`,
|
|
199
|
+
inputSchema: z.object({
|
|
200
|
+
email: z.string().describe('Email address to verify')
|
|
201
|
+
}),
|
|
202
|
+
outputSchema: z.object({
|
|
203
|
+
email_status: z.string().describe('Verification result: "valid", "risky", "not_found", or "blacklisted"')
|
|
204
|
+
}),
|
|
205
|
+
integration: 'anymailfinder' as const,
|
|
206
|
+
method: 'verifyEmail' as const,
|
|
207
|
+
credentialName
|
|
208
|
+
})
|
|
209
|
+
}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { withRetry, createHttpError, DEFAULT_RETRY_POLICY } from '../../../../../../../../../platform/resilience'
|
|
2
|
+
import type { ExecutionContext } from '../../../../../../../base/types'
|
|
3
|
+
|
|
4
|
+
interface AnymailfinderCredentials {
|
|
5
|
+
apiKey: string
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export interface FindCompanyEmailParams {
|
|
9
|
+
domain: string
|
|
10
|
+
company_name?: string
|
|
11
|
+
email_type?: 'personal' | 'generic' | 'all'
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export interface FindCompanyEmailResult {
|
|
15
|
+
email_status: 'valid' | 'risky' | 'not_found' | 'blacklisted'
|
|
16
|
+
emails: string[]
|
|
17
|
+
valid_emails: string[]
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
const ANYMAILFINDER_API_BASE = 'https://api.anymailfinder.com/v5.1'
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Find email addresses for a company via Anymailfinder
|
|
24
|
+
*
|
|
25
|
+
* Searches for company-level email addresses by domain or company name.
|
|
26
|
+
* Returns all found emails plus the subset that passed validation.
|
|
27
|
+
*
|
|
28
|
+
* @param credentials - Anymailfinder API key
|
|
29
|
+
* @param params - Domain or company name and optional email type filter
|
|
30
|
+
* @param context - Execution context for logging
|
|
31
|
+
* @returns Email status, all emails found, and valid emails only
|
|
32
|
+
*/
|
|
33
|
+
export async function findCompanyEmail(
|
|
34
|
+
credentials: AnymailfinderCredentials,
|
|
35
|
+
params: FindCompanyEmailParams,
|
|
36
|
+
context?: ExecutionContext
|
|
37
|
+
): Promise<FindCompanyEmailResult> {
|
|
38
|
+
const { apiKey } = credentials
|
|
39
|
+
|
|
40
|
+
if (!params.domain && !params.company_name) {
|
|
41
|
+
throw new Error('Either domain or company_name is required for findCompanyEmail')
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
if (context?.logger) {
|
|
45
|
+
context.logger.info(
|
|
46
|
+
`[AnymailfinderAdapter] findCompanyEmail: organizationId=${context.organizationId} executionId=${context.executionId} domain=${params.domain} company_name=${params.company_name}`
|
|
47
|
+
)
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
const response = await withRetry(async () => {
|
|
51
|
+
const res = await fetch(`${ANYMAILFINDER_API_BASE}/find-email/company`, {
|
|
52
|
+
method: 'POST',
|
|
53
|
+
headers: {
|
|
54
|
+
'Content-Type': 'application/json',
|
|
55
|
+
Authorization: apiKey
|
|
56
|
+
},
|
|
57
|
+
body: JSON.stringify(params)
|
|
58
|
+
})
|
|
59
|
+
|
|
60
|
+
if (!res.ok) {
|
|
61
|
+
throw await createHttpError(res, {
|
|
62
|
+
integration: 'anymailfinder',
|
|
63
|
+
method: 'findCompanyEmail',
|
|
64
|
+
organizationId: context?.organizationId
|
|
65
|
+
})
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
return res.json()
|
|
69
|
+
}, DEFAULT_RETRY_POLICY)
|
|
70
|
+
|
|
71
|
+
if (context?.logger) {
|
|
72
|
+
context.logger.info(
|
|
73
|
+
`[AnymailfinderAdapter] findCompanyEmail complete: organizationId=${context.organizationId} email_status=${response.email_status} emailCount=${response.emails?.length ?? 0} validCount=${response.valid_emails?.length ?? 0}`
|
|
74
|
+
)
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
return {
|
|
78
|
+
email_status: response.email_status ?? 'not_found',
|
|
79
|
+
emails: response.emails ?? [],
|
|
80
|
+
valid_emails: response.valid_emails ?? []
|
|
81
|
+
}
|
|
82
|
+
}
|
|
@@ -0,0 +1,122 @@
|
|
|
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 AnymailfinderCredentials {
|
|
6
|
+
apiKey: string
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export interface FindDecisionMakerEmailParams {
|
|
10
|
+
domain?: string
|
|
11
|
+
company_name?: string
|
|
12
|
+
decision_maker_category: string[]
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export interface FindDecisionMakerEmailResult {
|
|
16
|
+
email: string
|
|
17
|
+
email_status: 'valid' | 'risky' | 'not_found' | 'blacklisted'
|
|
18
|
+
valid_email: string
|
|
19
|
+
person_full_name: string
|
|
20
|
+
person_job_title: string
|
|
21
|
+
person_linkedin_url: string
|
|
22
|
+
decision_maker_category: string
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
const ANYMAILFINDER_API_BASE = 'https://api.anymailfinder.com/v5.1'
|
|
26
|
+
|
|
27
|
+
const _VALID_CATEGORIES = [
|
|
28
|
+
'ceo',
|
|
29
|
+
'operations',
|
|
30
|
+
'marketing',
|
|
31
|
+
'sales',
|
|
32
|
+
'finance',
|
|
33
|
+
'hr',
|
|
34
|
+
'engineering',
|
|
35
|
+
'it',
|
|
36
|
+
'logistics',
|
|
37
|
+
'buyer'
|
|
38
|
+
] as const
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Find a decision maker email via Anymailfinder
|
|
42
|
+
*
|
|
43
|
+
* Searches for the email address of a decision maker at a company, identified
|
|
44
|
+
* by domain or company name, filtered by one or more role categories.
|
|
45
|
+
*
|
|
46
|
+
* @param credentials - Anymailfinder API key
|
|
47
|
+
* @param params - Company identifier (domain or name) and decision maker categories
|
|
48
|
+
* @param context - Execution context for logging
|
|
49
|
+
* @returns Email address, status, and person details for the matched decision maker
|
|
50
|
+
*/
|
|
51
|
+
export async function findDecisionMakerEmail(
|
|
52
|
+
credentials: AnymailfinderCredentials,
|
|
53
|
+
params: FindDecisionMakerEmailParams,
|
|
54
|
+
context?: ExecutionContext
|
|
55
|
+
): Promise<FindDecisionMakerEmailResult> {
|
|
56
|
+
const { apiKey } = credentials
|
|
57
|
+
const { domain, company_name, decision_maker_category } = params
|
|
58
|
+
|
|
59
|
+
if (!domain && !company_name) {
|
|
60
|
+
throw new ToolingError('validation_error', 'Either domain or company_name is required', {
|
|
61
|
+
integration: 'anymailfinder',
|
|
62
|
+
method: 'findDecisionMakerEmail'
|
|
63
|
+
})
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
if (!decision_maker_category || decision_maker_category.length === 0) {
|
|
67
|
+
throw new ToolingError('validation_error', 'decision_maker_category is required and must be non-empty', {
|
|
68
|
+
integration: 'anymailfinder',
|
|
69
|
+
method: 'findDecisionMakerEmail'
|
|
70
|
+
})
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
const findUrl = `${ANYMAILFINDER_API_BASE}/find-email/decision-maker`
|
|
74
|
+
|
|
75
|
+
if (context?.logger) {
|
|
76
|
+
context.logger.info(
|
|
77
|
+
`[AnymailfinderAdapter] Finding decision maker email: organizationId=${context.organizationId} executionId=${context.executionId} domain=${domain || 'none'} company_name=${company_name || 'none'} categories=${decision_maker_category.join(',')}`
|
|
78
|
+
)
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
const response = await withRetry(async () => {
|
|
82
|
+
const res = await fetch(findUrl, {
|
|
83
|
+
method: 'POST',
|
|
84
|
+
headers: {
|
|
85
|
+
Authorization: apiKey,
|
|
86
|
+
'Content-Type': 'application/json'
|
|
87
|
+
},
|
|
88
|
+
body: JSON.stringify({
|
|
89
|
+
...(domain ? { domain } : {}),
|
|
90
|
+
...(company_name ? { company_name } : {}),
|
|
91
|
+
decision_maker_category
|
|
92
|
+
}),
|
|
93
|
+
signal: AbortSignal.timeout(180_000)
|
|
94
|
+
})
|
|
95
|
+
|
|
96
|
+
if (!res.ok) {
|
|
97
|
+
throw await createHttpError(res, {
|
|
98
|
+
integration: 'anymailfinder',
|
|
99
|
+
method: 'findDecisionMakerEmail',
|
|
100
|
+
organizationId: context?.organizationId
|
|
101
|
+
})
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
return res.json()
|
|
105
|
+
}, DEFAULT_RETRY_POLICY)
|
|
106
|
+
|
|
107
|
+
if (context?.logger) {
|
|
108
|
+
context.logger.info(
|
|
109
|
+
`[AnymailfinderAdapter] Decision maker email fetched: organizationId=${context.organizationId} executionId=${context.executionId} email_status=${response.email_status ?? 'not_found'} category=${response.decision_maker_category ?? ''}`
|
|
110
|
+
)
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
return {
|
|
114
|
+
email: response.email ?? '',
|
|
115
|
+
email_status: response.email_status ?? 'not_found',
|
|
116
|
+
valid_email: response.valid_email ?? '',
|
|
117
|
+
person_full_name: response.person_full_name ?? '',
|
|
118
|
+
person_job_title: response.person_job_title ?? '',
|
|
119
|
+
person_linkedin_url: response.person_linkedin_url ?? '',
|
|
120
|
+
decision_maker_category: response.decision_maker_category ?? ''
|
|
121
|
+
}
|
|
122
|
+
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { withRetry, createHttpError, DEFAULT_RETRY_POLICY } from '../../../../../../../../../platform/resilience'
|
|
2
|
+
import type { ExecutionContext } from '../../../../../../../base/types'
|
|
3
|
+
|
|
4
|
+
interface AnymailfinderCredentials {
|
|
5
|
+
apiKey: string
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export interface FindPersonEmailParams {
|
|
9
|
+
domain: string
|
|
10
|
+
company_name?: string
|
|
11
|
+
full_name?: string
|
|
12
|
+
first_name?: string
|
|
13
|
+
last_name?: string
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export interface FindPersonEmailResult {
|
|
17
|
+
email: string
|
|
18
|
+
email_status: 'valid' | 'risky' | 'not_found' | 'blacklisted'
|
|
19
|
+
valid_email: string
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
const ANYMAILFINDER_API_BASE = 'https://api.anymailfinder.com/v5.1'
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Find a person's email address via Anymailfinder
|
|
26
|
+
*
|
|
27
|
+
* Searches for a specific person's email by combining their name with a
|
|
28
|
+
* company domain or name. Requires either full_name or first_name+last_name,
|
|
29
|
+
* and either domain or company_name.
|
|
30
|
+
*
|
|
31
|
+
* @param credentials - Anymailfinder API key
|
|
32
|
+
* @param params - Person name and company domain or name
|
|
33
|
+
* @param context - Execution context for logging
|
|
34
|
+
* @returns Email address, status, and validated email if available
|
|
35
|
+
*/
|
|
36
|
+
export async function findPersonEmail(
|
|
37
|
+
credentials: AnymailfinderCredentials,
|
|
38
|
+
params: FindPersonEmailParams,
|
|
39
|
+
context?: ExecutionContext
|
|
40
|
+
): Promise<FindPersonEmailResult> {
|
|
41
|
+
const { apiKey } = credentials
|
|
42
|
+
|
|
43
|
+
if (!params.domain && !params.company_name) {
|
|
44
|
+
throw new Error('Either domain or company_name is required for findPersonEmail')
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
if (!params.full_name && !(params.first_name && params.last_name)) {
|
|
48
|
+
throw new Error('Either full_name or both first_name and last_name are required for findPersonEmail')
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
if (context?.logger) {
|
|
52
|
+
context.logger.info(
|
|
53
|
+
`[AnymailfinderAdapter] findPersonEmail: organizationId=${context.organizationId} executionId=${context.executionId} domain=${params.domain} company_name=${params.company_name} full_name=${params.full_name} first_name=${params.first_name} last_name=${params.last_name}`
|
|
54
|
+
)
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
const response = await withRetry(async () => {
|
|
58
|
+
const res = await fetch(`${ANYMAILFINDER_API_BASE}/find-email/person`, {
|
|
59
|
+
method: 'POST',
|
|
60
|
+
headers: {
|
|
61
|
+
'Content-Type': 'application/json',
|
|
62
|
+
Authorization: apiKey
|
|
63
|
+
},
|
|
64
|
+
body: JSON.stringify(params)
|
|
65
|
+
})
|
|
66
|
+
|
|
67
|
+
if (!res.ok) {
|
|
68
|
+
throw await createHttpError(res, {
|
|
69
|
+
integration: 'anymailfinder',
|
|
70
|
+
method: 'findPersonEmail',
|
|
71
|
+
organizationId: context?.organizationId
|
|
72
|
+
})
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
return res.json()
|
|
76
|
+
}, DEFAULT_RETRY_POLICY)
|
|
77
|
+
|
|
78
|
+
if (context?.logger) {
|
|
79
|
+
context.logger.info(
|
|
80
|
+
`[AnymailfinderAdapter] findPersonEmail complete: organizationId=${context.organizationId} email_status=${response.email_status} email=${response.email ? '[found]' : '[not found]'}`
|
|
81
|
+
)
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
return {
|
|
85
|
+
email: response.email ?? '',
|
|
86
|
+
email_status: response.email_status ?? 'not_found',
|
|
87
|
+
valid_email: response.valid_email ?? ''
|
|
88
|
+
}
|
|
89
|
+
}
|
|
@@ -0,0 +1,84 @@
|
|
|
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 AnymailfinderCredentials {
|
|
6
|
+
apiKey: string
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export interface VerifyEmailParams {
|
|
10
|
+
email: string
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export interface VerifyEmailResult {
|
|
14
|
+
email_status: 'valid' | 'risky' | 'not_found' | 'blacklisted'
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
const ANYMAILFINDER_API_BASE = 'https://api.anymailfinder.com/v5.1'
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Verify an email address via Anymailfinder
|
|
21
|
+
*
|
|
22
|
+
* Checks whether the given email address is valid, risky, not found, or
|
|
23
|
+
* blacklisted. Costs 0.2 credits per valid result.
|
|
24
|
+
*
|
|
25
|
+
* @param credentials - Anymailfinder API key
|
|
26
|
+
* @param params - Email address to verify
|
|
27
|
+
* @param context - Execution context for logging
|
|
28
|
+
* @returns Email status classification
|
|
29
|
+
*/
|
|
30
|
+
export async function verifyEmail(
|
|
31
|
+
credentials: AnymailfinderCredentials,
|
|
32
|
+
params: VerifyEmailParams,
|
|
33
|
+
context?: ExecutionContext
|
|
34
|
+
): Promise<VerifyEmailResult> {
|
|
35
|
+
const { apiKey } = credentials
|
|
36
|
+
const { email } = params
|
|
37
|
+
|
|
38
|
+
if (!email) {
|
|
39
|
+
throw new ToolingError('validation_error', 'Missing required parameter: email', {
|
|
40
|
+
integration: 'anymailfinder',
|
|
41
|
+
method: 'verifyEmail'
|
|
42
|
+
})
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
const verifyUrl = `${ANYMAILFINDER_API_BASE}/verify-email`
|
|
46
|
+
|
|
47
|
+
if (context?.logger) {
|
|
48
|
+
context.logger.info(
|
|
49
|
+
`[AnymailfinderAdapter] Verifying email: organizationId=${context.organizationId} executionId=${context.executionId} email=${email}`
|
|
50
|
+
)
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
const response = await withRetry(async () => {
|
|
54
|
+
const res = await fetch(verifyUrl, {
|
|
55
|
+
method: 'POST',
|
|
56
|
+
headers: {
|
|
57
|
+
Authorization: apiKey,
|
|
58
|
+
'Content-Type': 'application/json'
|
|
59
|
+
},
|
|
60
|
+
body: JSON.stringify({ email }),
|
|
61
|
+
signal: AbortSignal.timeout(180_000)
|
|
62
|
+
})
|
|
63
|
+
|
|
64
|
+
if (!res.ok) {
|
|
65
|
+
throw await createHttpError(res, {
|
|
66
|
+
integration: 'anymailfinder',
|
|
67
|
+
method: 'verifyEmail',
|
|
68
|
+
organizationId: context?.organizationId
|
|
69
|
+
})
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
return res.json()
|
|
73
|
+
}, DEFAULT_RETRY_POLICY)
|
|
74
|
+
|
|
75
|
+
if (context?.logger) {
|
|
76
|
+
context.logger.info(
|
|
77
|
+
`[AnymailfinderAdapter] Email verification complete: organizationId=${context.organizationId} executionId=${context.executionId} email=${email} email_status=${response.email_status ?? 'not_found'}`
|
|
78
|
+
)
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
return {
|
|
82
|
+
email_status: response.email_status ?? 'not_found'
|
|
83
|
+
}
|
|
84
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
// ============================================================================
|
|
2
|
+
// ANYMAILFINDER ADAPTER
|
|
3
|
+
// ============================================================================
|
|
4
|
+
|
|
5
|
+
export { AnymailfinderAdapter } from './anymailfinder-adapter'
|
|
6
|
+
|
|
7
|
+
// ============================================================================
|
|
8
|
+
// ANYMAILFINDER TOOLS
|
|
9
|
+
// ============================================================================
|
|
10
|
+
|
|
11
|
+
export {
|
|
12
|
+
createAnymailfinderFindCompanyEmailTool,
|
|
13
|
+
createAnymailfinderFindPersonEmailTool,
|
|
14
|
+
createAnymailfinderFindDecisionMakerEmailTool,
|
|
15
|
+
createAnymailfinderVerifyEmailTool
|
|
16
|
+
} from './anymailfinder-tools'
|