@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,230 @@
|
|
|
1
|
+
import { ToolingError } from '../../../../../../types'
|
|
2
|
+
import type { ExecutionContext } from '../../../../../../../base/types'
|
|
3
|
+
import type {
|
|
4
|
+
SignatureApiCredentials,
|
|
5
|
+
DownloadDocumentParams,
|
|
6
|
+
DownloadDocumentResult,
|
|
7
|
+
Deliverable,
|
|
8
|
+
ListDeliverablesResponse
|
|
9
|
+
} from '../utils/types'
|
|
10
|
+
|
|
11
|
+
const DEFAULT_API_URL = 'https://api.signatureapi.com/v1'
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Retry configuration for waiting on deliverable generation
|
|
15
|
+
*/
|
|
16
|
+
const DELIVERABLE_RETRY_CONFIG = {
|
|
17
|
+
maxAttempts: 8,
|
|
18
|
+
initialDelayMs: 500,
|
|
19
|
+
maxDelayMs: 8000,
|
|
20
|
+
backoffMultiplier: 2
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Sleep for specified milliseconds
|
|
25
|
+
*/
|
|
26
|
+
function sleep(ms: number): Promise<void> {
|
|
27
|
+
return new Promise((resolve) => setTimeout(resolve, ms))
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Download signed document from a completed envelope using the deliverable system
|
|
32
|
+
*
|
|
33
|
+
* SignatureAPI uses a deliverable system for signed documents:
|
|
34
|
+
* 1. List deliverables for the envelope
|
|
35
|
+
* 2. If none exist or none are generated, create one
|
|
36
|
+
* 3. Poll until status is 'generated'
|
|
37
|
+
* 4. Download via the pre-signed URL
|
|
38
|
+
*
|
|
39
|
+
* @param credentials - SignatureAPI credentials (apiKey, optional apiUrl)
|
|
40
|
+
* @param params - Download parameters (envelopeId, documentType)
|
|
41
|
+
* @param context - Execution context for logging
|
|
42
|
+
* @returns Buffer containing PDF content, content type, and filename
|
|
43
|
+
* @throws ToolingError if download fails
|
|
44
|
+
*/
|
|
45
|
+
export async function downloadDocument(
|
|
46
|
+
credentials: SignatureApiCredentials,
|
|
47
|
+
params: DownloadDocumentParams,
|
|
48
|
+
context?: ExecutionContext
|
|
49
|
+
): Promise<DownloadDocumentResult> {
|
|
50
|
+
const { apiKey, apiUrl = DEFAULT_API_URL } = credentials
|
|
51
|
+
const { envelopeId } = params
|
|
52
|
+
// Map documentType to deliverable type: 'combined'/'audit' -> 'standard', 'original' -> 'simple'
|
|
53
|
+
const deliverableType = params.documentType === 'original' ? 'simple' : 'standard'
|
|
54
|
+
|
|
55
|
+
// Validate credentials
|
|
56
|
+
if (!apiKey) {
|
|
57
|
+
throw new ToolingError('credentials_invalid', 'SignatureAPI credentials must include apiKey', {
|
|
58
|
+
integration: 'signature-api',
|
|
59
|
+
method: 'downloadDocument'
|
|
60
|
+
})
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
// Validate required parameters
|
|
64
|
+
if (!envelopeId) {
|
|
65
|
+
throw new ToolingError('validation_error', 'Envelope ID is required', {
|
|
66
|
+
integration: 'signature-api',
|
|
67
|
+
method: 'downloadDocument'
|
|
68
|
+
})
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
const log = (message: string, data?: Record<string, unknown>) => {
|
|
72
|
+
if (context?.logger) {
|
|
73
|
+
const dataStr = data
|
|
74
|
+
? ` ${Object.entries(data)
|
|
75
|
+
.map(([k, v]) => `${k}=${v}`)
|
|
76
|
+
.join(' ')}`
|
|
77
|
+
: ''
|
|
78
|
+
context.logger.info(
|
|
79
|
+
`[SignatureAPI:downloadDocument] ${message} organizationId=${context.organizationId} executionId=${context.executionId} envelopeId=${envelopeId}${dataStr}`
|
|
80
|
+
)
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
try {
|
|
85
|
+
// Step 1: List existing deliverables
|
|
86
|
+
log('Listing deliverables')
|
|
87
|
+
const listRes = await fetch(`${apiUrl}/envelopes/${envelopeId}/deliverables`, {
|
|
88
|
+
headers: { 'X-API-Key': apiKey }
|
|
89
|
+
})
|
|
90
|
+
|
|
91
|
+
if (!listRes.ok) {
|
|
92
|
+
const errorText = await listRes.text()
|
|
93
|
+
throw new ToolingError('api_error', `Failed to list deliverables: ${listRes.status} ${errorText}`, {
|
|
94
|
+
integration: 'signature-api',
|
|
95
|
+
method: 'downloadDocument',
|
|
96
|
+
envelopeId
|
|
97
|
+
})
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
const listData: ListDeliverablesResponse = await listRes.json()
|
|
101
|
+
log('Found deliverables', { count: listData.data.length })
|
|
102
|
+
|
|
103
|
+
// Step 2: Find existing generated deliverable or create one
|
|
104
|
+
let deliverable: Deliverable | undefined = listData.data.find(
|
|
105
|
+
(d) => d.type === deliverableType && d.status === 'generated'
|
|
106
|
+
)
|
|
107
|
+
|
|
108
|
+
if (!deliverable) {
|
|
109
|
+
// Check for pending/processing deliverable of matching type
|
|
110
|
+
deliverable = listData.data.find(
|
|
111
|
+
(d) => d.type === deliverableType && (d.status === 'pending' || d.status === 'processing')
|
|
112
|
+
)
|
|
113
|
+
|
|
114
|
+
if (!deliverable) {
|
|
115
|
+
// Create new deliverable
|
|
116
|
+
log('Creating new deliverable', { type: deliverableType })
|
|
117
|
+
const createRes = await fetch(`${apiUrl}/envelopes/${envelopeId}/deliverables`, {
|
|
118
|
+
method: 'POST',
|
|
119
|
+
headers: {
|
|
120
|
+
'X-API-Key': apiKey,
|
|
121
|
+
'Content-Type': 'application/json'
|
|
122
|
+
},
|
|
123
|
+
body: JSON.stringify({ type: deliverableType })
|
|
124
|
+
})
|
|
125
|
+
|
|
126
|
+
if (!createRes.ok) {
|
|
127
|
+
const errorText = await createRes.text()
|
|
128
|
+
throw new ToolingError('api_error', `Failed to create deliverable: ${createRes.status} ${errorText}`, {
|
|
129
|
+
integration: 'signature-api',
|
|
130
|
+
method: 'downloadDocument',
|
|
131
|
+
envelopeId
|
|
132
|
+
})
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
deliverable = await createRes.json()
|
|
136
|
+
log('Created deliverable', { id: deliverable!.id, status: deliverable!.status })
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
// Step 3: Poll until generated (exponential backoff)
|
|
141
|
+
let attempts = 0
|
|
142
|
+
let delay = DELIVERABLE_RETRY_CONFIG.initialDelayMs
|
|
143
|
+
|
|
144
|
+
while (deliverable!.status !== 'generated' && attempts < DELIVERABLE_RETRY_CONFIG.maxAttempts) {
|
|
145
|
+
if (deliverable!.status === 'failed') {
|
|
146
|
+
throw new ToolingError('api_error', 'Deliverable generation failed', {
|
|
147
|
+
integration: 'signature-api',
|
|
148
|
+
method: 'downloadDocument',
|
|
149
|
+
envelopeId,
|
|
150
|
+
deliverableId: deliverable!.id
|
|
151
|
+
})
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
log('Deliverable not ready, waiting', { status: deliverable!.status, attempt: attempts + 1, delayMs: delay })
|
|
155
|
+
await sleep(delay)
|
|
156
|
+
|
|
157
|
+
// Fetch updated status
|
|
158
|
+
const getRes = await fetch(`${apiUrl}/deliverables/${deliverable!.id}`, {
|
|
159
|
+
headers: { 'X-API-Key': apiKey }
|
|
160
|
+
})
|
|
161
|
+
|
|
162
|
+
if (!getRes.ok) {
|
|
163
|
+
const errorText = await getRes.text()
|
|
164
|
+
throw new ToolingError('api_error', `Failed to get deliverable: ${getRes.status} ${errorText}`, {
|
|
165
|
+
integration: 'signature-api',
|
|
166
|
+
method: 'downloadDocument',
|
|
167
|
+
deliverableId: deliverable!.id
|
|
168
|
+
})
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
deliverable = await getRes.json()
|
|
172
|
+
log('Deliverable status', { id: deliverable!.id, status: deliverable!.status })
|
|
173
|
+
|
|
174
|
+
attempts++
|
|
175
|
+
delay = Math.min(delay * DELIVERABLE_RETRY_CONFIG.backoffMultiplier, DELIVERABLE_RETRY_CONFIG.maxDelayMs)
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
if (deliverable!.status !== 'generated') {
|
|
179
|
+
throw new ToolingError(
|
|
180
|
+
'timeout_error',
|
|
181
|
+
`Deliverable not ready after ${DELIVERABLE_RETRY_CONFIG.maxAttempts} attempts (status: ${deliverable!.status})`,
|
|
182
|
+
{ integration: 'signature-api', method: 'downloadDocument', envelopeId, deliverableId: deliverable!.id }
|
|
183
|
+
)
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
// Step 4: Download PDF from pre-signed URL
|
|
187
|
+
if (!deliverable!.url) {
|
|
188
|
+
throw new ToolingError('api_error', 'Deliverable generated but URL is null', {
|
|
189
|
+
integration: 'signature-api',
|
|
190
|
+
method: 'downloadDocument',
|
|
191
|
+
deliverableId: deliverable!.id
|
|
192
|
+
})
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
log('Downloading PDF from pre-signed URL', { deliverableId: deliverable!.id })
|
|
196
|
+
const downloadRes = await fetch(deliverable!.url)
|
|
197
|
+
|
|
198
|
+
if (!downloadRes.ok) {
|
|
199
|
+
throw new ToolingError('api_error', `Failed to download PDF: ${downloadRes.status}`, {
|
|
200
|
+
integration: 'signature-api',
|
|
201
|
+
method: 'downloadDocument',
|
|
202
|
+
deliverableId: deliverable!.id
|
|
203
|
+
})
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
const buffer = Buffer.from(await downloadRes.arrayBuffer())
|
|
207
|
+
const filename = `${envelopeId}-signed.pdf`
|
|
208
|
+
|
|
209
|
+
log('Download complete', { size: buffer.length, filename })
|
|
210
|
+
|
|
211
|
+
return {
|
|
212
|
+
content: buffer,
|
|
213
|
+
contentType: 'application/pdf',
|
|
214
|
+
filename
|
|
215
|
+
}
|
|
216
|
+
} catch (error) {
|
|
217
|
+
// Re-throw ToolingError as-is
|
|
218
|
+
if (error instanceof ToolingError) {
|
|
219
|
+
throw error
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
// Wrap unknown errors
|
|
223
|
+
throw new ToolingError('api_error', `Failed to download document: ${(error as Error).message}`, {
|
|
224
|
+
integration: 'signature-api',
|
|
225
|
+
method: 'downloadDocument',
|
|
226
|
+
organizationId: context?.organizationId,
|
|
227
|
+
originalError: error
|
|
228
|
+
})
|
|
229
|
+
}
|
|
230
|
+
}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { ToolingError } from '../../../../../../types'
|
|
2
|
+
import type { ExecutionContext } from '../../../../../../../base/types'
|
|
3
|
+
import { withRetry, createHttpError, DEFAULT_RETRY_POLICY } from '../../../../../../../../../platform/resilience'
|
|
4
|
+
import type { SignatureApiCredentials, GetEnvelopeParams, GetEnvelopeResult } from '../utils/types'
|
|
5
|
+
|
|
6
|
+
const DEFAULT_API_URL = 'https://api.signatureapi.com/v1'
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* SignatureAPI raw response format (snake_case)
|
|
10
|
+
*/
|
|
11
|
+
interface SignatureApiGetEnvelopeResponse {
|
|
12
|
+
id: string
|
|
13
|
+
title: string
|
|
14
|
+
status: 'processing' | 'pending' | 'completed' | 'declined' | 'voided'
|
|
15
|
+
created_at: string
|
|
16
|
+
completed_at?: string
|
|
17
|
+
metadata: Record<string, string>
|
|
18
|
+
recipients: Array<{
|
|
19
|
+
key: string
|
|
20
|
+
name: string
|
|
21
|
+
email: string
|
|
22
|
+
status: 'pending' | 'signed' | 'declined'
|
|
23
|
+
signed_at?: string
|
|
24
|
+
}>
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Get envelope details from SignatureAPI
|
|
29
|
+
*
|
|
30
|
+
* @param credentials - SignatureAPI credentials (apiKey, optional apiUrl)
|
|
31
|
+
* @param params - Envelope ID to retrieve
|
|
32
|
+
* @param context - Execution context for logging
|
|
33
|
+
* @returns Envelope details including status and recipients
|
|
34
|
+
* @throws ToolingError if retrieval fails
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* const result = await getEnvelope(
|
|
38
|
+
* { apiKey: 'key_test_xxx' },
|
|
39
|
+
* { envelopeId: 'env_xxx' },
|
|
40
|
+
* context
|
|
41
|
+
* )
|
|
42
|
+
* // result.status: 'processing', 'pending', 'completed', 'declined', 'voided'
|
|
43
|
+
*/
|
|
44
|
+
export async function getEnvelope(
|
|
45
|
+
credentials: SignatureApiCredentials,
|
|
46
|
+
params: GetEnvelopeParams,
|
|
47
|
+
context?: ExecutionContext
|
|
48
|
+
): Promise<GetEnvelopeResult> {
|
|
49
|
+
const { apiKey, apiUrl = DEFAULT_API_URL } = credentials
|
|
50
|
+
const { envelopeId } = params
|
|
51
|
+
|
|
52
|
+
// Validate required parameters
|
|
53
|
+
if (!apiKey) {
|
|
54
|
+
throw new ToolingError('credentials_invalid', 'SignatureAPI credentials must include apiKey', {
|
|
55
|
+
integration: 'signature-api',
|
|
56
|
+
method: 'getEnvelope'
|
|
57
|
+
})
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
if (!envelopeId) {
|
|
61
|
+
throw new ToolingError('validation_error', 'Envelope ID is required', {
|
|
62
|
+
integration: 'signature-api',
|
|
63
|
+
method: 'getEnvelope'
|
|
64
|
+
})
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
// Build URL
|
|
68
|
+
const url = `${apiUrl}/envelopes/${encodeURIComponent(envelopeId)}`
|
|
69
|
+
|
|
70
|
+
try {
|
|
71
|
+
// Execute with retry logic
|
|
72
|
+
const response = await withRetry(async () => {
|
|
73
|
+
const res = await fetch(url, {
|
|
74
|
+
method: 'GET',
|
|
75
|
+
headers: {
|
|
76
|
+
'X-API-Key': apiKey
|
|
77
|
+
}
|
|
78
|
+
})
|
|
79
|
+
|
|
80
|
+
// Handle HTTP errors
|
|
81
|
+
if (!res.ok) {
|
|
82
|
+
throw await createHttpError(res, {
|
|
83
|
+
integration: 'signature-api',
|
|
84
|
+
method: 'getEnvelope',
|
|
85
|
+
organizationId: context?.organizationId
|
|
86
|
+
})
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
return res
|
|
90
|
+
}, DEFAULT_RETRY_POLICY)
|
|
91
|
+
|
|
92
|
+
// Parse response
|
|
93
|
+
const result = (await response.json()) as SignatureApiGetEnvelopeResponse
|
|
94
|
+
|
|
95
|
+
// Log success
|
|
96
|
+
if (context?.logger) {
|
|
97
|
+
context.logger.info(
|
|
98
|
+
`[SignatureApiAdapter] Envelope retrieved: organizationId=${context.organizationId} executionId=${context.executionId} envelopeId=${result.id} status=${result.status}`
|
|
99
|
+
)
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
// Return standardized result (snake_case -> camelCase)
|
|
103
|
+
return {
|
|
104
|
+
id: result.id,
|
|
105
|
+
title: result.title,
|
|
106
|
+
status: result.status,
|
|
107
|
+
createdAt: result.created_at,
|
|
108
|
+
completedAt: result.completed_at,
|
|
109
|
+
metadata: result.metadata || {},
|
|
110
|
+
recipients: result.recipients.map((recipient) => ({
|
|
111
|
+
key: recipient.key,
|
|
112
|
+
name: recipient.name,
|
|
113
|
+
email: recipient.email,
|
|
114
|
+
status: recipient.status,
|
|
115
|
+
signedAt: recipient.signed_at
|
|
116
|
+
}))
|
|
117
|
+
}
|
|
118
|
+
} catch (error) {
|
|
119
|
+
// Re-throw ToolingError as-is
|
|
120
|
+
if (error instanceof ToolingError) {
|
|
121
|
+
throw error
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
// Wrap unknown errors
|
|
125
|
+
throw new ToolingError('api_error', `Failed to get envelope from SignatureAPI: ${(error as Error).message}`, {
|
|
126
|
+
integration: 'signature-api',
|
|
127
|
+
method: 'getEnvelope',
|
|
128
|
+
organizationId: context?.organizationId,
|
|
129
|
+
envelopeId,
|
|
130
|
+
originalError: error
|
|
131
|
+
})
|
|
132
|
+
}
|
|
133
|
+
}
|
package/src/execution/engine/tools/integration/server/adapters/signature-api/fetch/utils/types.ts
ADDED
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SignatureAPI Types
|
|
3
|
+
*
|
|
4
|
+
* Type definitions for SignatureAPI eSignature operations.
|
|
5
|
+
* SignatureAPI uses raw fetch (no official SDK).
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* SignatureAPI credentials format
|
|
10
|
+
* Stored in credentials table, encrypted
|
|
11
|
+
*/
|
|
12
|
+
export interface SignatureApiCredentials {
|
|
13
|
+
apiKey: string // key_live_xxx or key_test_xxx
|
|
14
|
+
apiUrl?: string // Optional override, defaults to https://api.signatureapi.com/v1
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Signature field configuration
|
|
19
|
+
*
|
|
20
|
+
* Note: The 'date' type is supported here for convenience but gets mapped
|
|
21
|
+
* to 'recipient_completed_date' when sent to the SignatureAPI.
|
|
22
|
+
*/
|
|
23
|
+
export interface SignatureField {
|
|
24
|
+
type: 'signature' | 'date' | 'text' | 'initials' // 'date' maps to 'recipient_completed_date'
|
|
25
|
+
page: number // 1-indexed, or -1 for last page
|
|
26
|
+
x: number // X position in points
|
|
27
|
+
y: number // Y position in points
|
|
28
|
+
width?: number // Field width
|
|
29
|
+
height?: number // Field height
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Valid SignatureAPI field types
|
|
34
|
+
*
|
|
35
|
+
* Note: SignatureAPI does NOT support 'date' - use 'recipient_completed_date' instead.
|
|
36
|
+
* Our workflow utility maps 'date' -> 'recipient_completed_date' for convenience.
|
|
37
|
+
*/
|
|
38
|
+
export type SignatureApiFieldType =
|
|
39
|
+
| 'signature'
|
|
40
|
+
| 'initials'
|
|
41
|
+
| 'recipient_completed_date'
|
|
42
|
+
| 'envelope_completed_date'
|
|
43
|
+
| 'recipient_name'
|
|
44
|
+
| 'recipient_email'
|
|
45
|
+
| 'text'
|
|
46
|
+
| 'text_input'
|
|
47
|
+
| 'boxed_text_input'
|
|
48
|
+
| 'multi_line_text_input'
|
|
49
|
+
| 'checkbox'
|
|
50
|
+
| 'dropdown'
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Signing place configuration
|
|
54
|
+
*/
|
|
55
|
+
export interface SigningPlace {
|
|
56
|
+
recipientKey: string // Links to recipient
|
|
57
|
+
type: SignatureApiFieldType
|
|
58
|
+
page: number
|
|
59
|
+
x: number
|
|
60
|
+
y: number
|
|
61
|
+
width?: number
|
|
62
|
+
height?: number
|
|
63
|
+
fontColor?: string // Hex color (e.g., '#FFFFFF' for white)
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Document for signing
|
|
68
|
+
*
|
|
69
|
+
* Note: SignatureAPI requires documents to be provided via URL (not base64).
|
|
70
|
+
* Use a publicly accessible URL (e.g., Supabase signed URL).
|
|
71
|
+
*/
|
|
72
|
+
export interface EnvelopeDocument {
|
|
73
|
+
name: string // Display name (e.g., 'proposal.pdf')
|
|
74
|
+
url: string // Publicly accessible URL to PDF (NOT base64)
|
|
75
|
+
places?: SigningPlace[] // Where to place signature fields
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Recipient/signer configuration
|
|
80
|
+
*/
|
|
81
|
+
export interface Recipient {
|
|
82
|
+
key: string // Unique identifier (e.g., 'signer1')
|
|
83
|
+
type: 'signer' | 'viewer' | 'approver'
|
|
84
|
+
name: string
|
|
85
|
+
email: string
|
|
86
|
+
language?: string // 'en', 'es', 'fr', etc.
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Create envelope parameters
|
|
91
|
+
*/
|
|
92
|
+
export interface CreateEnvelopeParams {
|
|
93
|
+
title: string // Envelope name
|
|
94
|
+
message?: string // Custom message in emails
|
|
95
|
+
documents: EnvelopeDocument[] // Documents to sign
|
|
96
|
+
recipients: Recipient[] // Signers
|
|
97
|
+
metadata?: Record<string, string> // Custom metadata
|
|
98
|
+
webhookUrl?: string // Override default webhook
|
|
99
|
+
routing?: 'parallel' | 'sequential' // Default: parallel
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Create envelope result
|
|
104
|
+
*/
|
|
105
|
+
export interface CreateEnvelopeResult {
|
|
106
|
+
id: string // env_xxx
|
|
107
|
+
status: string // 'processing', 'pending', etc.
|
|
108
|
+
signingUrl?: string // URL for first signer
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Void envelope parameters
|
|
113
|
+
*/
|
|
114
|
+
export interface VoidEnvelopeParams {
|
|
115
|
+
envelopeId: string
|
|
116
|
+
reason?: string
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* Void envelope result
|
|
121
|
+
*/
|
|
122
|
+
export interface VoidEnvelopeResult {
|
|
123
|
+
id: string
|
|
124
|
+
status: 'voided'
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* Download document parameters
|
|
129
|
+
*/
|
|
130
|
+
export interface DownloadDocumentParams {
|
|
131
|
+
envelopeId: string
|
|
132
|
+
documentType?: 'combined' | 'original' | 'audit' // Default: combined
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* Download document result
|
|
137
|
+
*/
|
|
138
|
+
export interface DownloadDocumentResult {
|
|
139
|
+
content: Buffer // PDF content
|
|
140
|
+
contentType: string // 'application/pdf'
|
|
141
|
+
filename: string // Suggested filename
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* Get envelope parameters
|
|
146
|
+
*/
|
|
147
|
+
export interface GetEnvelopeParams {
|
|
148
|
+
envelopeId: string
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* Get envelope result
|
|
153
|
+
*/
|
|
154
|
+
export interface GetEnvelopeResult {
|
|
155
|
+
id: string
|
|
156
|
+
title: string
|
|
157
|
+
status: 'processing' | 'pending' | 'completed' | 'declined' | 'voided'
|
|
158
|
+
createdAt: string
|
|
159
|
+
completedAt?: string
|
|
160
|
+
metadata: Record<string, string>
|
|
161
|
+
recipients: Array<{
|
|
162
|
+
key: string
|
|
163
|
+
name: string
|
|
164
|
+
email: string
|
|
165
|
+
status: 'pending' | 'signed' | 'declined'
|
|
166
|
+
signedAt?: string
|
|
167
|
+
}>
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* SignatureAPI error response
|
|
172
|
+
*/
|
|
173
|
+
export interface SignatureApiErrorResponse {
|
|
174
|
+
error: {
|
|
175
|
+
code: string
|
|
176
|
+
message: string
|
|
177
|
+
details?: unknown
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
// ============================================================================
|
|
182
|
+
// Deliverable Types (for downloading signed documents)
|
|
183
|
+
// ============================================================================
|
|
184
|
+
|
|
185
|
+
/**
|
|
186
|
+
* Deliverable type - what's included in the PDF
|
|
187
|
+
*/
|
|
188
|
+
export type DeliverableType = 'standard' | 'simple'
|
|
189
|
+
|
|
190
|
+
/**
|
|
191
|
+
* Deliverable status - processing lifecycle
|
|
192
|
+
*/
|
|
193
|
+
export type DeliverableStatus = 'pending' | 'processing' | 'generated' | 'failed'
|
|
194
|
+
|
|
195
|
+
/**
|
|
196
|
+
* Deliverable object returned by SignatureAPI
|
|
197
|
+
*/
|
|
198
|
+
export interface Deliverable {
|
|
199
|
+
id: string // del_xxx
|
|
200
|
+
envelope_id: string
|
|
201
|
+
type: DeliverableType
|
|
202
|
+
status: DeliverableStatus
|
|
203
|
+
url: string | null // Pre-signed download URL (null until generated)
|
|
204
|
+
password?: string
|
|
205
|
+
created_at: string
|
|
206
|
+
generated_at: string | null
|
|
207
|
+
language?: string
|
|
208
|
+
timezone?: string
|
|
209
|
+
timestamp_format?: string
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
/**
|
|
213
|
+
* List deliverables response
|
|
214
|
+
*/
|
|
215
|
+
export interface ListDeliverablesResponse {
|
|
216
|
+
data: Deliverable[]
|
|
217
|
+
links: {
|
|
218
|
+
next?: string
|
|
219
|
+
previous?: string
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
/**
|
|
224
|
+
* Create deliverable parameters
|
|
225
|
+
*/
|
|
226
|
+
export interface CreateDeliverableParams {
|
|
227
|
+
envelopeId: string
|
|
228
|
+
type?: DeliverableType // Default: standard
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
/**
|
|
232
|
+
* Create deliverable result
|
|
233
|
+
*/
|
|
234
|
+
export type CreateDeliverableResult = Deliverable
|
|
235
|
+
|
|
236
|
+
/**
|
|
237
|
+
* Get deliverable parameters
|
|
238
|
+
*/
|
|
239
|
+
export interface GetDeliverableParams {
|
|
240
|
+
deliverableId: string
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
/**
|
|
244
|
+
* Get deliverable result
|
|
245
|
+
*/
|
|
246
|
+
export type GetDeliverableResult = Deliverable
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { ToolingError } from '../../../../../../types'
|
|
2
|
+
import type { ExecutionContext } from '../../../../../../../base/types'
|
|
3
|
+
import { withRetry, createHttpError, DEFAULT_RETRY_POLICY } from '../../../../../../../../../platform/resilience'
|
|
4
|
+
import type { SignatureApiCredentials, VoidEnvelopeParams, VoidEnvelopeResult } from '../utils/types'
|
|
5
|
+
|
|
6
|
+
const DEFAULT_API_URL = 'https://api.signatureapi.com/v1'
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Void/cancel a pending envelope
|
|
10
|
+
*
|
|
11
|
+
* @param credentials - SignatureAPI credentials (apiKey, optional apiUrl)
|
|
12
|
+
* @param params - Void parameters (envelopeId, optional reason)
|
|
13
|
+
* @param context - Execution context for logging
|
|
14
|
+
* @returns Envelope ID and voided status
|
|
15
|
+
* @throws ToolingError if voiding fails
|
|
16
|
+
*/
|
|
17
|
+
export async function voidEnvelope(
|
|
18
|
+
credentials: SignatureApiCredentials,
|
|
19
|
+
params: VoidEnvelopeParams,
|
|
20
|
+
context?: ExecutionContext
|
|
21
|
+
): Promise<VoidEnvelopeResult> {
|
|
22
|
+
const { apiKey, apiUrl = DEFAULT_API_URL } = credentials
|
|
23
|
+
const { envelopeId, reason } = params
|
|
24
|
+
|
|
25
|
+
// Validate credentials
|
|
26
|
+
if (!apiKey) {
|
|
27
|
+
throw new ToolingError('credentials_invalid', 'SignatureAPI credentials must include apiKey', {
|
|
28
|
+
integration: 'signature-api',
|
|
29
|
+
method: 'voidEnvelope'
|
|
30
|
+
})
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// Validate required params
|
|
34
|
+
if (!envelopeId) {
|
|
35
|
+
throw new ToolingError('validation_error', 'Envelope ID is required', {
|
|
36
|
+
integration: 'signature-api',
|
|
37
|
+
method: 'voidEnvelope'
|
|
38
|
+
})
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
try {
|
|
42
|
+
const response = await withRetry(async () => {
|
|
43
|
+
const res = await fetch(`${apiUrl}/envelopes/${envelopeId}/void`, {
|
|
44
|
+
method: 'POST',
|
|
45
|
+
headers: {
|
|
46
|
+
'Content-Type': 'application/json',
|
|
47
|
+
'X-API-Key': apiKey
|
|
48
|
+
},
|
|
49
|
+
body: JSON.stringify({ reason: reason || 'Voided by system' })
|
|
50
|
+
})
|
|
51
|
+
|
|
52
|
+
if (!res.ok) {
|
|
53
|
+
throw await createHttpError(res, {
|
|
54
|
+
integration: 'signature-api',
|
|
55
|
+
method: 'voidEnvelope',
|
|
56
|
+
organizationId: context?.organizationId
|
|
57
|
+
})
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
return res
|
|
61
|
+
}, DEFAULT_RETRY_POLICY)
|
|
62
|
+
|
|
63
|
+
const result = await response.json()
|
|
64
|
+
|
|
65
|
+
// Log success
|
|
66
|
+
if (context?.logger) {
|
|
67
|
+
context.logger.info(
|
|
68
|
+
`[SignatureApiAdapter] Envelope voided: organizationId=${context.organizationId} envelopeId=${envelopeId}`
|
|
69
|
+
)
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
return {
|
|
73
|
+
id: result.id,
|
|
74
|
+
status: 'voided'
|
|
75
|
+
}
|
|
76
|
+
} catch (error) {
|
|
77
|
+
// Re-throw ToolingError as-is
|
|
78
|
+
if (error instanceof ToolingError) {
|
|
79
|
+
throw error
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// Wrap unknown errors
|
|
83
|
+
throw new ToolingError('api_error', `Failed to void envelope: ${(error as Error).message}`, {
|
|
84
|
+
integration: 'signature-api',
|
|
85
|
+
method: 'voidEnvelope',
|
|
86
|
+
organizationId: context?.organizationId,
|
|
87
|
+
originalError: error
|
|
88
|
+
})
|
|
89
|
+
}
|
|
90
|
+
}
|