@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,166 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sessions Domain - Zod Validation Schemas
|
|
3
|
+
*
|
|
4
|
+
* Validation schemas for session management endpoints.
|
|
5
|
+
* Includes request bodies, query params, path params, and WebSocket messages.
|
|
6
|
+
*
|
|
7
|
+
* Security:
|
|
8
|
+
* - All schemas use .strict() to prevent mass assignment attacks
|
|
9
|
+
* - UUID validation prevents invalid references
|
|
10
|
+
* - String length limits prevent DoS (+ token counter at 10k tokens)
|
|
11
|
+
* - organizationId never accepted in request body (taken from JWT)
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
import { z } from 'zod'
|
|
15
|
+
import { UuidSchema } from '../../platform/utils/validation'
|
|
16
|
+
|
|
17
|
+
// Re-export UuidSchema for convenience
|
|
18
|
+
export { UuidSchema }
|
|
19
|
+
|
|
20
|
+
// ============================================================================
|
|
21
|
+
// Path Parameters
|
|
22
|
+
// ============================================================================
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Validate sessionId in URL path
|
|
26
|
+
* Used by: GET/DELETE /sessions/:sessionId, GET /sessions/:sessionId/messages
|
|
27
|
+
*/
|
|
28
|
+
export const SessionIdParamSchema = z
|
|
29
|
+
.object({
|
|
30
|
+
sessionId: UuidSchema
|
|
31
|
+
})
|
|
32
|
+
.strict()
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Validate sessionId + executionId in URL path
|
|
36
|
+
* Used by: GET /sessions/:sessionId/executions/:executionId
|
|
37
|
+
*/
|
|
38
|
+
export const ExecutionIdParamsSchema = z
|
|
39
|
+
.object({
|
|
40
|
+
sessionId: UuidSchema,
|
|
41
|
+
executionId: UuidSchema
|
|
42
|
+
})
|
|
43
|
+
.strict()
|
|
44
|
+
|
|
45
|
+
// ============================================================================
|
|
46
|
+
// Request Bodies
|
|
47
|
+
// ============================================================================
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Create new session
|
|
51
|
+
* POST /sessions
|
|
52
|
+
*
|
|
53
|
+
* Security:
|
|
54
|
+
* - resourceId is string identifier (e.g., 'basic-agent', 'linear-test-workflow')
|
|
55
|
+
* - userId optional (for user-specific sessions)
|
|
56
|
+
* - metadata optional (arbitrary JSON for agent use)
|
|
57
|
+
* - organizationId NOT accepted (taken from JWT)
|
|
58
|
+
*/
|
|
59
|
+
export const CreateSessionSchema = z
|
|
60
|
+
.object({
|
|
61
|
+
resourceId: z.string().min(1).max(100),
|
|
62
|
+
userId: UuidSchema.optional(),
|
|
63
|
+
metadata: z.any().optional()
|
|
64
|
+
})
|
|
65
|
+
.strict()
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Execute session turn
|
|
69
|
+
* POST /sessions/:sessionId/turns
|
|
70
|
+
*
|
|
71
|
+
* Supports string, object, and any JSON-serializable input formats
|
|
72
|
+
*
|
|
73
|
+
* Security:
|
|
74
|
+
* - Input length max 100k chars (supports long-form AI interactions)
|
|
75
|
+
* - Prompt injection blocked by input-sanitizer before execution
|
|
76
|
+
* - Strict mode prevents metadata injection
|
|
77
|
+
*/
|
|
78
|
+
export const ExecuteTurnSchema = z
|
|
79
|
+
.object({
|
|
80
|
+
input: z.unknown().refine(
|
|
81
|
+
(val) => {
|
|
82
|
+
let text: string
|
|
83
|
+
if (typeof val === 'string') {
|
|
84
|
+
text = val
|
|
85
|
+
} else if (val && typeof val === 'object' && 'message' in val) {
|
|
86
|
+
text = String((val as Record<string, unknown>).message)
|
|
87
|
+
} else {
|
|
88
|
+
text = JSON.stringify(val)
|
|
89
|
+
}
|
|
90
|
+
return text.length > 0 && text.length <= 100_000
|
|
91
|
+
},
|
|
92
|
+
{ message: 'Input must be between 1 and 100,000 characters' }
|
|
93
|
+
),
|
|
94
|
+
metadata: z.any().optional()
|
|
95
|
+
})
|
|
96
|
+
.strict()
|
|
97
|
+
|
|
98
|
+
// ============================================================================
|
|
99
|
+
// Query Parameters
|
|
100
|
+
// ============================================================================
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* List sessions with filters
|
|
104
|
+
* GET /sessions
|
|
105
|
+
*
|
|
106
|
+
* Filters:
|
|
107
|
+
* - userId: Filter by user (UUID)
|
|
108
|
+
* - resourceId: Filter by agent/resource (string identifier like 'executive-agent')
|
|
109
|
+
* - limit: Max results (1-100, default 20)
|
|
110
|
+
*
|
|
111
|
+
* Security:
|
|
112
|
+
* - userId validated as UUID (prevents SQL injection)
|
|
113
|
+
* - resourceId validated as string (resource identifiers)
|
|
114
|
+
* - Limit bounded (prevents DoS via large result sets)
|
|
115
|
+
*/
|
|
116
|
+
export const ListSessionsQuerySchema = z
|
|
117
|
+
.object({
|
|
118
|
+
userId: UuidSchema.optional(),
|
|
119
|
+
resourceId: z.string().optional(),
|
|
120
|
+
limit: z.coerce.number().int().min(1).max(100).default(20)
|
|
121
|
+
})
|
|
122
|
+
.strict()
|
|
123
|
+
|
|
124
|
+
// ============================================================================
|
|
125
|
+
// WebSocket Messages
|
|
126
|
+
// ============================================================================
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* WebSocket client message: Execute turn
|
|
130
|
+
*
|
|
131
|
+
* Client sends: { type: "session:turn", input: "..." }
|
|
132
|
+
*
|
|
133
|
+
* Security:
|
|
134
|
+
* - Same input validation as HTTP endpoint (100k char limit)
|
|
135
|
+
* - Token limit also validated separately (10k tokens for CHAT_MESSAGE)
|
|
136
|
+
* - Prompt injection blocked by input-sanitizer
|
|
137
|
+
*/
|
|
138
|
+
export const WebSocketSessionTurnSchema = z
|
|
139
|
+
.object({
|
|
140
|
+
type: z.literal('session:turn'),
|
|
141
|
+
input: z.unknown().refine(
|
|
142
|
+
(val) => {
|
|
143
|
+
let text: string
|
|
144
|
+
if (typeof val === 'string') {
|
|
145
|
+
text = val
|
|
146
|
+
} else if (val && typeof val === 'object' && 'message' in val) {
|
|
147
|
+
text = String((val as Record<string, unknown>).message)
|
|
148
|
+
} else {
|
|
149
|
+
text = JSON.stringify(val) || ''
|
|
150
|
+
}
|
|
151
|
+
return text && text.length > 0 && text.length <= 100_000
|
|
152
|
+
},
|
|
153
|
+
{ message: 'Input must be between 1 and 100,000 characters' }
|
|
154
|
+
)
|
|
155
|
+
})
|
|
156
|
+
.strict()
|
|
157
|
+
|
|
158
|
+
// ============================================================================
|
|
159
|
+
// TypeScript Type Exports
|
|
160
|
+
// ============================================================================
|
|
161
|
+
|
|
162
|
+
// Export inferred types for use in route handlers
|
|
163
|
+
export type CreateSessionInput = z.infer<typeof CreateSessionSchema>
|
|
164
|
+
export type ExecuteTurnInput = z.infer<typeof ExecuteTurnSchema>
|
|
165
|
+
export type ListSessionsQuery = z.infer<typeof ListSessionsQuerySchema>
|
|
166
|
+
export type WebSocketSessionTurnMessage = z.infer<typeof WebSocketSessionTurnSchema>
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
// Session classes are server-only - import from @repo/core/server
|
|
2
|
+
// Only types are exported here for browser-safe access
|
|
3
|
+
export type {
|
|
4
|
+
SessionTurnResult,
|
|
5
|
+
SessionTokenUsage,
|
|
6
|
+
CreateSessionParams,
|
|
7
|
+
ListSessionsFilters,
|
|
8
|
+
SessionRow,
|
|
9
|
+
SessionInsert,
|
|
10
|
+
ExecuteTurnRequest
|
|
11
|
+
} from './types'
|
|
12
|
+
|
|
13
|
+
// Export validation schemas
|
|
14
|
+
export {
|
|
15
|
+
CreateSessionSchema,
|
|
16
|
+
ExecuteTurnSchema,
|
|
17
|
+
ListSessionsQuerySchema,
|
|
18
|
+
SessionIdParamSchema,
|
|
19
|
+
ExecutionIdParamsSchema,
|
|
20
|
+
WebSocketSessionTurnSchema,
|
|
21
|
+
UuidSchema,
|
|
22
|
+
type CreateSessionInput,
|
|
23
|
+
type ExecuteTurnInput,
|
|
24
|
+
type ListSessionsQuery,
|
|
25
|
+
type WebSocketSessionTurnMessage
|
|
26
|
+
} from './api-schemas'
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import type { SupabaseClient } from '../../../supabase'
|
|
2
|
+
import { Session } from './session'
|
|
3
|
+
import type { CreateSessionParams, ListSessionsFilters } from '../types'
|
|
4
|
+
|
|
5
|
+
export class SessionManager {
|
|
6
|
+
constructor(private db: SupabaseClient) {}
|
|
7
|
+
|
|
8
|
+
async create(params: CreateSessionParams): Promise<Session> {
|
|
9
|
+
const { resourceId, organizationId, userId, metadata, contextWindowSize } = params
|
|
10
|
+
|
|
11
|
+
const { data, error } = await this.db
|
|
12
|
+
.from('sessions')
|
|
13
|
+
.insert({
|
|
14
|
+
resource_id: resourceId,
|
|
15
|
+
organization_id: organizationId,
|
|
16
|
+
user_id: userId ?? null,
|
|
17
|
+
memory_snapshot: { sessionMemory: {}, history: [] },
|
|
18
|
+
metadata: (metadata as Record<string, never> | null) ?? null,
|
|
19
|
+
session_total_turns: 0,
|
|
20
|
+
...(contextWindowSize !== undefined && { context_window_size: contextWindowSize })
|
|
21
|
+
})
|
|
22
|
+
.select()
|
|
23
|
+
.single()
|
|
24
|
+
|
|
25
|
+
if (error) {
|
|
26
|
+
throw new Error(`Failed to create session: ${error.message}`)
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
return new Session(this.db, data)
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
async get(sessionId: string, organizationId: string): Promise<Session | null> {
|
|
33
|
+
const { data, error } = await this.db
|
|
34
|
+
.from('sessions')
|
|
35
|
+
.select()
|
|
36
|
+
.eq('session_id', sessionId)
|
|
37
|
+
.eq('organization_id', organizationId)
|
|
38
|
+
.is('deleted_at', null)
|
|
39
|
+
.single()
|
|
40
|
+
|
|
41
|
+
if (error) {
|
|
42
|
+
if (error.code === 'PGRST116') {
|
|
43
|
+
return null // Not found
|
|
44
|
+
}
|
|
45
|
+
throw new Error(`Failed to get session: ${error.message}`)
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
return new Session(this.db, data)
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
async list(filters: ListSessionsFilters): Promise<Session[]> {
|
|
52
|
+
const { organizationId, userId, resourceId, limit = 50 } = filters
|
|
53
|
+
|
|
54
|
+
let query = this.db
|
|
55
|
+
.from('sessions')
|
|
56
|
+
.select()
|
|
57
|
+
.eq('organization_id', organizationId)
|
|
58
|
+
.is('deleted_at', null)
|
|
59
|
+
.order('created_at', { ascending: false })
|
|
60
|
+
.limit(limit)
|
|
61
|
+
|
|
62
|
+
if (userId) {
|
|
63
|
+
query = query.eq('user_id', userId)
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
if (resourceId) {
|
|
67
|
+
query = query.eq('resource_id', resourceId)
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
const { data, error } = await query
|
|
71
|
+
|
|
72
|
+
if (error) {
|
|
73
|
+
throw new Error(`Failed to list sessions: ${error.message}`)
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
return data.map((row) => new Session(this.db, row))
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
async delete(sessionId: string, organizationId: string): Promise<void> {
|
|
80
|
+
const { error } = await this.db
|
|
81
|
+
.from('sessions')
|
|
82
|
+
.update({ deleted_at: new Date().toISOString() })
|
|
83
|
+
.eq('session_id', sessionId)
|
|
84
|
+
.eq('organization_id', organizationId)
|
|
85
|
+
|
|
86
|
+
if (error) {
|
|
87
|
+
throw new Error(`Failed to delete session: ${error.message}`)
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
import type { SupabaseClient, Json } from '../../../supabase'
|
|
2
|
+
import type { ExecutionContext } from '../../../execution/engine/base/types'
|
|
3
|
+
import type { AgentDefinition } from '../../../execution/engine/agent/core/types'
|
|
4
|
+
import type { AgentMemory } from '../../../execution/engine/agent/memory/types'
|
|
5
|
+
import type { SessionRow, SessionTurnResult } from '../types'
|
|
6
|
+
import { createLLMAdapter } from '../../../execution/engine/llm/adapters/server/adapter-factory'
|
|
7
|
+
|
|
8
|
+
export class Session {
|
|
9
|
+
constructor(
|
|
10
|
+
private db: SupabaseClient,
|
|
11
|
+
private data: SessionRow
|
|
12
|
+
) {}
|
|
13
|
+
|
|
14
|
+
// Getters
|
|
15
|
+
get sessionId(): string {
|
|
16
|
+
return this.data.session_id
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
get organizationId(): string {
|
|
20
|
+
return this.data.organization_id
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
get userId(): string | null {
|
|
24
|
+
return this.data.user_id
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
get resourceId(): string {
|
|
28
|
+
return this.data.resource_id
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
get totalTurns(): number {
|
|
32
|
+
return this.data.session_total_turns ?? 0
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
get memorySnapshot(): AgentMemory {
|
|
36
|
+
return this.data.memory_snapshot as unknown as AgentMemory
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
get metadata(): Record<string, unknown> | null {
|
|
40
|
+
return this.data.metadata as Record<string, unknown> | null
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/** Title derived from the first user message, stored in metadata */
|
|
44
|
+
get title(): string | null {
|
|
45
|
+
const meta = this.data.metadata as Record<string, unknown> | null
|
|
46
|
+
return (meta?.title as string) ?? null
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
get createdAt(): Date {
|
|
50
|
+
return new Date(this.data.created_at!)
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
get updatedAt(): Date {
|
|
54
|
+
return new Date(this.data.updated_at!)
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
get isEnded(): boolean {
|
|
58
|
+
return !!this.data.ended_at
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
get contextWindowSize(): number {
|
|
62
|
+
return this.data.context_window_size
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Execute a turn in this session
|
|
67
|
+
*
|
|
68
|
+
* Uses database transaction with row-level lock to prevent concurrent turn execution.
|
|
69
|
+
* Pattern: Lock → Read → Validate → Execute → Save
|
|
70
|
+
*
|
|
71
|
+
* @param agentDefinition - Agent definition to execute
|
|
72
|
+
* @param input - Input for this turn
|
|
73
|
+
* @param context - Full execution context (including sessionTurnMessages if streaming)
|
|
74
|
+
* @returns Turn result with output and metadata
|
|
75
|
+
*/
|
|
76
|
+
async executeTurn<TInput, TOutput>(
|
|
77
|
+
agentDefinition: AgentDefinition,
|
|
78
|
+
input: TInput,
|
|
79
|
+
context: ExecutionContext
|
|
80
|
+
): Promise<SessionTurnResult<TOutput>> {
|
|
81
|
+
const turnStartTime = Date.now()
|
|
82
|
+
|
|
83
|
+
// NOTE: Using RPC to acquire row-level lock and get fresh state
|
|
84
|
+
// This ensures atomic lock acquisition for concurrent turn prevention
|
|
85
|
+
const { data, error } = await this.db.rpc('execute_session_turn', {
|
|
86
|
+
p_session_id: this.sessionId
|
|
87
|
+
})
|
|
88
|
+
|
|
89
|
+
if (error) {
|
|
90
|
+
throw new Error(`Failed to acquire session lock: ${error.message}`)
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
// Reload fresh state from lock result
|
|
94
|
+
const lockResult = (Array.isArray(data) ? data[0] : data) as unknown
|
|
95
|
+
if (!lockResult) {
|
|
96
|
+
throw new Error('Session not found')
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
this.data = lockResult as SessionRow
|
|
100
|
+
|
|
101
|
+
// Validate
|
|
102
|
+
if (this.isEnded) {
|
|
103
|
+
throw new Error('Cannot execute turn on ended session')
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
// Create agent instance (stateless, recreated per turn)
|
|
107
|
+
const { Agent } = await import('../../../execution/engine/agent/core/agent')
|
|
108
|
+
const agent = new Agent<TInput, TOutput>(agentDefinition, createLLMAdapter)
|
|
109
|
+
|
|
110
|
+
// Execute agent (preloadMemory callback will restore session memory)
|
|
111
|
+
const output = await agent.execute(input, context)
|
|
112
|
+
|
|
113
|
+
// Update state and persist
|
|
114
|
+
const snapshot = agent.getMemorySnapshot()
|
|
115
|
+
if (!snapshot) {
|
|
116
|
+
throw new Error('Agent did not produce memory snapshot')
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
// Complete turn (messages already persisted immediately via onMessageEvent)
|
|
120
|
+
await this.completeTurn(snapshot)
|
|
121
|
+
|
|
122
|
+
return {
|
|
123
|
+
sessionId: this.sessionId,
|
|
124
|
+
executionId: context.executionId,
|
|
125
|
+
turnNumber: this.data.session_total_turns ?? 0,
|
|
126
|
+
output,
|
|
127
|
+
duration: Date.now() - turnStartTime
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* End this session (marks as ended, prevents future turns)
|
|
133
|
+
*/
|
|
134
|
+
async end(): Promise<void> {
|
|
135
|
+
this.data.ended_at = new Date().toISOString()
|
|
136
|
+
this.data.updated_at = new Date().toISOString()
|
|
137
|
+
await this.save()
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* Convert to JSON representation
|
|
142
|
+
*/
|
|
143
|
+
toJSON(): SessionRow {
|
|
144
|
+
return { ...this.data }
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* Save current state to database
|
|
149
|
+
*/
|
|
150
|
+
private async save(): Promise<void> {
|
|
151
|
+
const { error } = await this.db
|
|
152
|
+
.from('sessions')
|
|
153
|
+
.update({
|
|
154
|
+
memory_snapshot: this.data.memory_snapshot,
|
|
155
|
+
session_total_turns: this.data.session_total_turns,
|
|
156
|
+
updated_at: this.data.updated_at,
|
|
157
|
+
ended_at: this.data.ended_at
|
|
158
|
+
})
|
|
159
|
+
.eq('session_id', this.sessionId)
|
|
160
|
+
|
|
161
|
+
if (error) {
|
|
162
|
+
throw new Error(`Failed to save session: ${error.message}`)
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
/**
|
|
167
|
+
* Complete turn by updating session state
|
|
168
|
+
* Messages already persisted immediately via onMessageEvent callback
|
|
169
|
+
* @param snapshot - Agent memory snapshot
|
|
170
|
+
*/
|
|
171
|
+
private async completeTurn(snapshot: AgentMemory): Promise<void> {
|
|
172
|
+
// Update session state
|
|
173
|
+
this.data.memory_snapshot = snapshot as unknown as Json
|
|
174
|
+
this.data.session_total_turns = (this.data.session_total_turns ?? 0) + 1
|
|
175
|
+
this.data.updated_at = new Date().toISOString()
|
|
176
|
+
|
|
177
|
+
// Persist session state (messages already in DB)
|
|
178
|
+
await this.save()
|
|
179
|
+
}
|
|
180
|
+
}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import type { Tables, TablesInsert } from '../../supabase/database.types'
|
|
2
|
+
import type { MessageEvent } from '../../execution/engine/base/types'
|
|
3
|
+
import type { AgentMemory } from '../../execution/engine/agent/memory/types'
|
|
4
|
+
|
|
5
|
+
// Database table types (use imported Supabase types)
|
|
6
|
+
export type SessionRow = Tables<'sessions'>
|
|
7
|
+
export type SessionInsert = TablesInsert<'sessions'>
|
|
8
|
+
export type SessionMessageRow = Tables<'session_messages'>
|
|
9
|
+
export type SessionMessageInsert = TablesInsert<'session_messages'>
|
|
10
|
+
|
|
11
|
+
// Extract all event types from MessageEvent discriminated union
|
|
12
|
+
export type MessageType = MessageEvent['type']
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Session Data Transfer Object (DTO)
|
|
16
|
+
* Transform type for API responses (snake_case DB → camelCase frontend)
|
|
17
|
+
* Used by frontend apps to display session data
|
|
18
|
+
*/
|
|
19
|
+
export interface SessionDTO {
|
|
20
|
+
sessionId: string
|
|
21
|
+
resourceId: string
|
|
22
|
+
organizationId: string
|
|
23
|
+
userId?: string | null
|
|
24
|
+
turnCount: number
|
|
25
|
+
isEnded: boolean
|
|
26
|
+
title?: string | null
|
|
27
|
+
memorySnapshot?: AgentMemory
|
|
28
|
+
metadata?: Record<string, unknown> | null
|
|
29
|
+
createdAt: Date
|
|
30
|
+
updatedAt: Date
|
|
31
|
+
endedAt?: Date | null
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// Transform type (snake_case DB → camelCase domain)
|
|
35
|
+
export interface ChatMessage {
|
|
36
|
+
id: string
|
|
37
|
+
role: 'user' | 'assistant'
|
|
38
|
+
messageType: MessageType
|
|
39
|
+
text: string
|
|
40
|
+
metadata?: MessageEvent
|
|
41
|
+
turnNumber: number
|
|
42
|
+
messageIndex?: number // Optional - auto-generated by DB trigger, may be undefined for temp messages
|
|
43
|
+
createdAt: Date
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export interface SessionTurnResult<TOutput> {
|
|
47
|
+
sessionId: string
|
|
48
|
+
executionId: string
|
|
49
|
+
turnNumber: number
|
|
50
|
+
output: TOutput | null // Null for side-effect agents with no output schema
|
|
51
|
+
duration: number
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export interface CreateSessionParams {
|
|
55
|
+
resourceId: string
|
|
56
|
+
organizationId: string
|
|
57
|
+
userId?: string
|
|
58
|
+
metadata?: Record<string, unknown>
|
|
59
|
+
/** Context window size from the agent's model config (tokens) */
|
|
60
|
+
contextWindowSize?: number
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
export interface ListSessionsFilters {
|
|
64
|
+
organizationId: string
|
|
65
|
+
userId?: string
|
|
66
|
+
resourceId?: string
|
|
67
|
+
limit?: number
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// API Request/Response Types
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Execute turn request body
|
|
74
|
+
* Supports both object format (with message key) and plain string
|
|
75
|
+
*/
|
|
76
|
+
export interface ExecuteTurnRequest {
|
|
77
|
+
input:
|
|
78
|
+
| {
|
|
79
|
+
message: string
|
|
80
|
+
}
|
|
81
|
+
| string
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/** Token usage data sent with turn:complete WebSocket events */
|
|
85
|
+
export interface SessionTokenUsage {
|
|
86
|
+
/** Tokens consumed by this turn's input */
|
|
87
|
+
turnInputTokens: number
|
|
88
|
+
/** Tokens generated by this turn's output */
|
|
89
|
+
turnOutputTokens: number
|
|
90
|
+
/** Total tokens for this turn (turnInputTokens + turnOutputTokens) */
|
|
91
|
+
turnTotalTokens: number
|
|
92
|
+
/** Cumulative input tokens across all turns in this session */
|
|
93
|
+
cumulativeInputTokens: number
|
|
94
|
+
/** Cumulative output tokens across all turns in this session */
|
|
95
|
+
cumulativeOutputTokens: number
|
|
96
|
+
/** The model's context window size for this session (e.g., 200K) */
|
|
97
|
+
contextWindowSize: number
|
|
98
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Triggers Module
|
|
3
|
+
*
|
|
4
|
+
* Triggers start workflow executions. Types of triggers:
|
|
5
|
+
* - Webhook: External services send HTTP requests (Cal.com, Fillout, Instantly, etc.)
|
|
6
|
+
* - Scheduled: Cron-based execution (future)
|
|
7
|
+
* - Manual: User-initiated execution (future)
|
|
8
|
+
* - Event: Internal event-based execution (future)
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
// Webhook triggers (providers + definitions)
|
|
12
|
+
export * from './webhook/index'
|
package/src/operations/triggers/webhook/definitions/__tests__/instantly-reply-received.test.ts
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test: Instantly Reply Received Trigger Definition
|
|
3
|
+
*
|
|
4
|
+
* Tests for the Instantly webhook trigger definition.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { describe, it, expect } from 'vitest'
|
|
8
|
+
import {
|
|
9
|
+
instantlyReplyReceivedTrigger,
|
|
10
|
+
type InstantlyReplyWebhookPayload
|
|
11
|
+
} from '../instantly-reply-received'
|
|
12
|
+
|
|
13
|
+
describe('instantlyReplyReceivedTrigger', () => {
|
|
14
|
+
describe('trigger definition structure', () => {
|
|
15
|
+
it('has correct triggerType', () => {
|
|
16
|
+
expect(instantlyReplyReceivedTrigger.triggerType).toBe('webhook')
|
|
17
|
+
})
|
|
18
|
+
|
|
19
|
+
it('has correct config provider', () => {
|
|
20
|
+
expect(instantlyReplyReceivedTrigger.config).toBeDefined()
|
|
21
|
+
expect((instantlyReplyReceivedTrigger.config as { provider: string }).provider).toBe('instantly')
|
|
22
|
+
})
|
|
23
|
+
|
|
24
|
+
it('has correct config event', () => {
|
|
25
|
+
expect(instantlyReplyReceivedTrigger.config).toBeDefined()
|
|
26
|
+
expect((instantlyReplyReceivedTrigger.config as { event: string }).event).toBe('reply_received')
|
|
27
|
+
})
|
|
28
|
+
|
|
29
|
+
it('has correct resourceId', () => {
|
|
30
|
+
expect(instantlyReplyReceivedTrigger.resourceId).toBe('trigger-instantly-reply-received')
|
|
31
|
+
})
|
|
32
|
+
|
|
33
|
+
it('has correct type', () => {
|
|
34
|
+
expect(instantlyReplyReceivedTrigger.type).toBe('trigger')
|
|
35
|
+
})
|
|
36
|
+
|
|
37
|
+
it('has required metadata fields', () => {
|
|
38
|
+
expect(instantlyReplyReceivedTrigger.name).toBe('Instantly Reply Received')
|
|
39
|
+
expect(instantlyReplyReceivedTrigger.description).toBeDefined()
|
|
40
|
+
expect(instantlyReplyReceivedTrigger.version).toBe('1.0.0')
|
|
41
|
+
expect(instantlyReplyReceivedTrigger.status).toBe('dev')
|
|
42
|
+
})
|
|
43
|
+
|
|
44
|
+
it('has webhookPath defined', () => {
|
|
45
|
+
expect(instantlyReplyReceivedTrigger.webhookPath).toBe('/webhooks/instantly/reply-received')
|
|
46
|
+
})
|
|
47
|
+
})
|
|
48
|
+
|
|
49
|
+
describe('type exports', () => {
|
|
50
|
+
it('exports InstantlyReplyWebhookPayload type', () => {
|
|
51
|
+
// Type assertion test - if this compiles, the type is exported
|
|
52
|
+
const payload: InstantlyReplyWebhookPayload = {
|
|
53
|
+
timestamp: '2025-01-15T10:30:00Z',
|
|
54
|
+
event_type: 'reply_received',
|
|
55
|
+
workspace: 'test',
|
|
56
|
+
campaign_id: 'camp-1',
|
|
57
|
+
lead_email: 'test@example.com',
|
|
58
|
+
email_account: 'sender@example.com',
|
|
59
|
+
unibox_url: 'https://instantly.ai/unibox/1',
|
|
60
|
+
reply_to_uuid: 'uuid-1',
|
|
61
|
+
reply_subject: 'Re: Test',
|
|
62
|
+
reply_text: 'Test reply',
|
|
63
|
+
reply_text_snippet: 'Test...',
|
|
64
|
+
reply_html: '<p>Test reply</p>',
|
|
65
|
+
step: 1,
|
|
66
|
+
variant: 0,
|
|
67
|
+
is_first: true
|
|
68
|
+
}
|
|
69
|
+
expect(payload.event_type).toBe('reply_received')
|
|
70
|
+
})
|
|
71
|
+
})
|
|
72
|
+
})
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Instantly Account Error Trigger Definition
|
|
3
|
+
*
|
|
4
|
+
* Webhook trigger for Instantly email account error events.
|
|
5
|
+
* Uses Instantly's native snake_case format - no transformation needed.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import type { TriggerDefinition, WebhookTriggerConfig } from '../../../../platform/registry/types'
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Instantly account error webhook payload structure
|
|
12
|
+
*
|
|
13
|
+
* Uses snake_case matching Instantly's API. Workflows receive this directly.
|
|
14
|
+
*/
|
|
15
|
+
export interface InstantlyAccountErrorPayload {
|
|
16
|
+
timestamp: string
|
|
17
|
+
event_type: 'account_error'
|
|
18
|
+
workspace: string
|
|
19
|
+
email_account: string
|
|
20
|
+
error_type?: string
|
|
21
|
+
error_message?: string
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Instantly Account Error Trigger Definition
|
|
26
|
+
*
|
|
27
|
+
* Trigger type: webhook
|
|
28
|
+
* Provider: instantly
|
|
29
|
+
* Event: account_error
|
|
30
|
+
*/
|
|
31
|
+
export const instantlyAccountErrorTrigger: TriggerDefinition = {
|
|
32
|
+
resourceId: 'trigger-instantly-account-error',
|
|
33
|
+
type: 'trigger',
|
|
34
|
+
triggerType: 'webhook',
|
|
35
|
+
name: 'Instantly Account Error',
|
|
36
|
+
description: 'Webhook fired when an Instantly sending account encounters an error',
|
|
37
|
+
version: '1.0.0',
|
|
38
|
+
status: 'dev',
|
|
39
|
+
webhookPath: '/webhooks/instantly/account-error',
|
|
40
|
+
config: {
|
|
41
|
+
provider: 'instantly',
|
|
42
|
+
event: 'account_error'
|
|
43
|
+
} as WebhookTriggerConfig
|
|
44
|
+
}
|