@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,72 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest'
|
|
2
|
+
import { isArchivedLogs } from '../sse-executions'
|
|
3
|
+
|
|
4
|
+
describe('isArchivedLogs', () => {
|
|
5
|
+
it('returns true for a valid archived pointer object', () => {
|
|
6
|
+
const pointer = {
|
|
7
|
+
__archived: true,
|
|
8
|
+
storage_path: 'org-123/executions/exec-456/logs.json',
|
|
9
|
+
archived_at: '2026-01-15T10:00:00Z',
|
|
10
|
+
original_count: 1500
|
|
11
|
+
}
|
|
12
|
+
expect(isArchivedLogs(pointer)).toBe(true)
|
|
13
|
+
})
|
|
14
|
+
|
|
15
|
+
it('returns false for null', () => {
|
|
16
|
+
expect(isArchivedLogs(null)).toBe(false)
|
|
17
|
+
})
|
|
18
|
+
|
|
19
|
+
it('returns false for undefined', () => {
|
|
20
|
+
expect(isArchivedLogs(undefined)).toBe(false)
|
|
21
|
+
})
|
|
22
|
+
|
|
23
|
+
it('returns false for an empty array (normal logs state)', () => {
|
|
24
|
+
expect(isArchivedLogs([])).toBe(false)
|
|
25
|
+
})
|
|
26
|
+
|
|
27
|
+
it('returns false for a non-empty array of log messages', () => {
|
|
28
|
+
const logs = [
|
|
29
|
+
{ level: 'info', message: 'Starting execution', timestamp: 1700000000000 },
|
|
30
|
+
{ level: 'info', message: 'Execution complete', timestamp: 1700000001000 }
|
|
31
|
+
]
|
|
32
|
+
expect(isArchivedLogs(logs)).toBe(false)
|
|
33
|
+
})
|
|
34
|
+
|
|
35
|
+
it('returns false for an empty object', () => {
|
|
36
|
+
expect(isArchivedLogs({})).toBe(false)
|
|
37
|
+
})
|
|
38
|
+
|
|
39
|
+
it('returns false for an object with __archived: false', () => {
|
|
40
|
+
const obj = {
|
|
41
|
+
__archived: false,
|
|
42
|
+
storage_path: 'org-123/executions/exec-456/logs.json',
|
|
43
|
+
archived_at: '2026-01-15T10:00:00Z',
|
|
44
|
+
original_count: 42
|
|
45
|
+
}
|
|
46
|
+
expect(isArchivedLogs(obj)).toBe(false)
|
|
47
|
+
})
|
|
48
|
+
|
|
49
|
+
it('returns false for a string', () => {
|
|
50
|
+
expect(isArchivedLogs('archived')).toBe(false)
|
|
51
|
+
})
|
|
52
|
+
|
|
53
|
+
it('returns false for a number', () => {
|
|
54
|
+
expect(isArchivedLogs(42)).toBe(false)
|
|
55
|
+
})
|
|
56
|
+
|
|
57
|
+
it('narrows the type so storage_path and original_count are accessible after the guard', () => {
|
|
58
|
+
const value: unknown = {
|
|
59
|
+
__archived: true,
|
|
60
|
+
storage_path: 'org-123/executions/exec-789/logs.json',
|
|
61
|
+
archived_at: '2026-03-01T08:30:00Z',
|
|
62
|
+
original_count: 300
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
if (isArchivedLogs(value)) {
|
|
66
|
+
expect(value.storage_path).toBe('org-123/executions/exec-789/logs.json')
|
|
67
|
+
expect(value.original_count).toBe(300)
|
|
68
|
+
} else {
|
|
69
|
+
throw new Error('Expected isArchivedLogs to return true')
|
|
70
|
+
}
|
|
71
|
+
})
|
|
72
|
+
})
|
|
@@ -0,0 +1,312 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Zod validation schemas for execution and workflow domain API endpoints
|
|
3
|
+
* @module execution/api-schemas
|
|
4
|
+
*
|
|
5
|
+
* These schemas provide runtime validation for the most critical API endpoints:
|
|
6
|
+
* - External API /execute (public-facing, API key auth)
|
|
7
|
+
* - Execution Engine /execute (internal, JWT auth)
|
|
8
|
+
* - Command Queue (human-in-the-loop approvals)
|
|
9
|
+
* - Sessions (conversational agents)
|
|
10
|
+
*
|
|
11
|
+
* Security Features:
|
|
12
|
+
* - UUID validation prevents injection attacks
|
|
13
|
+
* - Payload size limits prevent DoS attacks
|
|
14
|
+
* - Strict mode blocks field injection (e.g., organizationId)
|
|
15
|
+
* - Enum validation ensures type safety at runtime
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
import { z } from 'zod'
|
|
19
|
+
import {
|
|
20
|
+
UuidSchema,
|
|
21
|
+
NonEmptyStringSchema,
|
|
22
|
+
ResourceTypeSchema,
|
|
23
|
+
OriginResourceTypeSchema,
|
|
24
|
+
createPayloadSizeValidator
|
|
25
|
+
} from '../../platform/utils/validation'
|
|
26
|
+
|
|
27
|
+
// Payload size constraint (500KB limit for execution payloads)
|
|
28
|
+
const PayloadSchema = createPayloadSizeValidator(500_000) // Required by default
|
|
29
|
+
const OptionalPayloadSchema = createPayloadSizeValidator(500_000, { optional: true })
|
|
30
|
+
|
|
31
|
+
// ============================================================================
|
|
32
|
+
// EXECUTION TARGET SCHEMAS
|
|
33
|
+
// ============================================================================
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Execution target validation
|
|
37
|
+
* Used by: Task Scheduler, Command Queue, Direct Execution
|
|
38
|
+
*
|
|
39
|
+
* Security:
|
|
40
|
+
* - resourceId validated as non-empty string (allows workflow/agent names)
|
|
41
|
+
* - resourceType enum validated at runtime
|
|
42
|
+
* - payload size limited to 500KB (prevents DoS)
|
|
43
|
+
*/
|
|
44
|
+
export const ExecutionTargetSchema = z
|
|
45
|
+
.object({
|
|
46
|
+
resourceType: ResourceTypeSchema,
|
|
47
|
+
resourceId: NonEmptyStringSchema.max(255),
|
|
48
|
+
payload: OptionalPayloadSchema
|
|
49
|
+
})
|
|
50
|
+
.strict()
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Origin tracking validation
|
|
54
|
+
* Required for audit trails and execution lineage
|
|
55
|
+
*
|
|
56
|
+
* Security:
|
|
57
|
+
* - originExecutionId validated as UUID
|
|
58
|
+
* - originResourceType enum validated
|
|
59
|
+
* - originResourceId length limited
|
|
60
|
+
*/
|
|
61
|
+
export const OriginTrackingSchema = z
|
|
62
|
+
.object({
|
|
63
|
+
originExecutionId: UuidSchema,
|
|
64
|
+
originResourceType: OriginResourceTypeSchema,
|
|
65
|
+
originResourceId: NonEmptyStringSchema.max(100)
|
|
66
|
+
})
|
|
67
|
+
.strict()
|
|
68
|
+
|
|
69
|
+
// ============================================================================
|
|
70
|
+
// EXTERNAL API SCHEMAS (CRITICAL - PUBLIC FACING)
|
|
71
|
+
// ============================================================================
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* External API /execute endpoint validation
|
|
75
|
+
* CRITICAL: This is a public-facing endpoint using API key auth
|
|
76
|
+
*
|
|
77
|
+
* Only production workflows can be executed via external API (in production env).
|
|
78
|
+
* Production status check happens at service layer after resource lookup.
|
|
79
|
+
*
|
|
80
|
+
* Security Features:
|
|
81
|
+
* - resourceId validated as non-empty string (kebab-case resource names)
|
|
82
|
+
* - 500KB payload limit prevents memory exhaustion
|
|
83
|
+
* - Strict mode blocks organizationId injection
|
|
84
|
+
*
|
|
85
|
+
* @example
|
|
86
|
+
* ```typescript
|
|
87
|
+
* // Valid request
|
|
88
|
+
* {
|
|
89
|
+
* resourceId: "lead-qualification-agent",
|
|
90
|
+
* input: { message: "Hello" }
|
|
91
|
+
* }
|
|
92
|
+
*
|
|
93
|
+
* // Invalid - will be rejected
|
|
94
|
+
* {
|
|
95
|
+
* resourceId: "", // Empty string not allowed
|
|
96
|
+
* input: "x".repeat(600_000) // Exceeds 500KB
|
|
97
|
+
* }
|
|
98
|
+
* ```
|
|
99
|
+
*/
|
|
100
|
+
export const ExternalExecuteRequestSchema = z
|
|
101
|
+
.object({
|
|
102
|
+
resourceId: NonEmptyStringSchema.max(100),
|
|
103
|
+
input: OptionalPayloadSchema
|
|
104
|
+
})
|
|
105
|
+
.strict()
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* External API /execute response schema
|
|
109
|
+
* Validates success/error response structure
|
|
110
|
+
*/
|
|
111
|
+
export const ExternalExecuteResponseSchema = z.union([
|
|
112
|
+
z.object({
|
|
113
|
+
executionId: UuidSchema,
|
|
114
|
+
success: z.literal(true),
|
|
115
|
+
data: z.unknown()
|
|
116
|
+
}),
|
|
117
|
+
z.object({
|
|
118
|
+
success: z.literal(false),
|
|
119
|
+
error: z.string(),
|
|
120
|
+
message: z.string()
|
|
121
|
+
})
|
|
122
|
+
])
|
|
123
|
+
|
|
124
|
+
// ============================================================================
|
|
125
|
+
// AI ENGINE SCHEMAS (CRITICAL - INTERNAL EXECUTION)
|
|
126
|
+
// ============================================================================
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Execution Engine /execute endpoint validation
|
|
130
|
+
* CRITICAL: Controls agent/workflow execution in authenticated context
|
|
131
|
+
*
|
|
132
|
+
* Security Features:
|
|
133
|
+
* - resourceType enum validated at runtime (not just TypeScript)
|
|
134
|
+
* - resourceId validated as non-empty string (kebab-case pattern)
|
|
135
|
+
* - Optional input with size constraint (500KB)
|
|
136
|
+
* - Strict mode prevents field injection
|
|
137
|
+
*
|
|
138
|
+
* @example
|
|
139
|
+
* ```typescript
|
|
140
|
+
* // Valid workflow execution
|
|
141
|
+
* {
|
|
142
|
+
* resourceType: "workflow",
|
|
143
|
+
* resourceId: "linear-test-workflow",
|
|
144
|
+
* input: { data: "test" }
|
|
145
|
+
* }
|
|
146
|
+
*
|
|
147
|
+
* // Valid agent execution (no input)
|
|
148
|
+
* {
|
|
149
|
+
* resourceType: "agent",
|
|
150
|
+
* resourceId: "basic-agent"
|
|
151
|
+
* }
|
|
152
|
+
*
|
|
153
|
+
* // Invalid - will be rejected
|
|
154
|
+
* {
|
|
155
|
+
* resourceType: "malicious", // Invalid enum
|
|
156
|
+
* resourceId: "" // Empty string not allowed
|
|
157
|
+
* }
|
|
158
|
+
* ```
|
|
159
|
+
*/
|
|
160
|
+
export const ExecutionEngineExecuteRequestSchema = z
|
|
161
|
+
.object({
|
|
162
|
+
resourceType: ResourceTypeSchema,
|
|
163
|
+
resourceId: NonEmptyStringSchema.max(100),
|
|
164
|
+
input: OptionalPayloadSchema
|
|
165
|
+
})
|
|
166
|
+
.strict()
|
|
167
|
+
|
|
168
|
+
/**
|
|
169
|
+
* Execution Engine /execute response schema
|
|
170
|
+
* Validates success/error response structure with execution logs
|
|
171
|
+
*/
|
|
172
|
+
export const ExecutionEngineExecuteResponseSchema = z.union([
|
|
173
|
+
z.object({
|
|
174
|
+
success: z.literal(true),
|
|
175
|
+
executionId: UuidSchema,
|
|
176
|
+
logs: z.array(z.unknown()),
|
|
177
|
+
data: z.unknown().nullable()
|
|
178
|
+
}),
|
|
179
|
+
z.object({
|
|
180
|
+
success: z.literal(false),
|
|
181
|
+
executionId: UuidSchema,
|
|
182
|
+
logs: z.array(z.unknown()),
|
|
183
|
+
error: z.object({
|
|
184
|
+
message: z.string(),
|
|
185
|
+
code: z.string(),
|
|
186
|
+
details: z.string().optional(),
|
|
187
|
+
suggestions: z.array(z.string()).optional()
|
|
188
|
+
})
|
|
189
|
+
})
|
|
190
|
+
])
|
|
191
|
+
|
|
192
|
+
// ============================================================================
|
|
193
|
+
// COMMAND QUEUE SCHEMAS (HUMAN-IN-THE-LOOP)
|
|
194
|
+
// ============================================================================
|
|
195
|
+
|
|
196
|
+
/**
|
|
197
|
+
* Create command queue task (approval request)
|
|
198
|
+
*
|
|
199
|
+
* Security Features:
|
|
200
|
+
* - All UUIDs validated
|
|
201
|
+
* - Execution targets validated (nested validation)
|
|
202
|
+
* - Payload sizes limited (both initial and targets)
|
|
203
|
+
* - Description and notes length limited
|
|
204
|
+
*
|
|
205
|
+
* @example
|
|
206
|
+
* ```typescript
|
|
207
|
+
* {
|
|
208
|
+
* originExecutionId: "550e8400-e29b-41d4-a716-446655440000",
|
|
209
|
+
* originResourceType: "agent",
|
|
210
|
+
* originResourceId: "approval-agent",
|
|
211
|
+
* approveTarget: {
|
|
212
|
+
* resourceType: "workflow",
|
|
213
|
+
* resourceId: "550e8400-e29b-41d4-a716-446655440001",
|
|
214
|
+
* payload: { approved: true }
|
|
215
|
+
* },
|
|
216
|
+
* payloadInitial: { request: "approval needed" },
|
|
217
|
+
* description: "Approve workflow execution",
|
|
218
|
+
* priority: 5
|
|
219
|
+
* }
|
|
220
|
+
* ```
|
|
221
|
+
*/
|
|
222
|
+
export const CreateCommandQueueTaskSchema = z
|
|
223
|
+
.object({
|
|
224
|
+
// Origin tracking
|
|
225
|
+
originExecutionId: UuidSchema,
|
|
226
|
+
originResourceType: OriginResourceTypeSchema,
|
|
227
|
+
originResourceId: NonEmptyStringSchema.max(100),
|
|
228
|
+
|
|
229
|
+
// Approval targets
|
|
230
|
+
approveTarget: ExecutionTargetSchema,
|
|
231
|
+
rejectTarget: ExecutionTargetSchema.optional(),
|
|
232
|
+
|
|
233
|
+
// Task metadata
|
|
234
|
+
description: NonEmptyStringSchema.max(1000).optional(),
|
|
235
|
+
priority: z.number().int().min(1).max(10).default(5),
|
|
236
|
+
expiresAt: z.string().datetime().optional(),
|
|
237
|
+
|
|
238
|
+
// Initial payload
|
|
239
|
+
payloadInitial: PayloadSchema
|
|
240
|
+
})
|
|
241
|
+
.strict()
|
|
242
|
+
|
|
243
|
+
/**
|
|
244
|
+
* Submit decision on command queue task
|
|
245
|
+
*
|
|
246
|
+
* Security Features:
|
|
247
|
+
* - Decision enum validated (only 'approve' | 'reject')
|
|
248
|
+
* - Notes length limited to 5000 characters
|
|
249
|
+
* - Payload override size limited to 500KB
|
|
250
|
+
*
|
|
251
|
+
* @example
|
|
252
|
+
* ```typescript
|
|
253
|
+
* // Approval with notes
|
|
254
|
+
* {
|
|
255
|
+
* decision: "approve",
|
|
256
|
+
* notes: "Looks good to proceed"
|
|
257
|
+
* }
|
|
258
|
+
*
|
|
259
|
+
* // Rejection with payload override
|
|
260
|
+
* {
|
|
261
|
+
* decision: "reject",
|
|
262
|
+
* notes: "Missing required data",
|
|
263
|
+
* payloadOverride: { reason: "incomplete" }
|
|
264
|
+
* }
|
|
265
|
+
* ```
|
|
266
|
+
*/
|
|
267
|
+
export const SubmitDecisionSchema = z
|
|
268
|
+
.object({
|
|
269
|
+
decision: z.enum(['approve', 'reject']),
|
|
270
|
+
notes: NonEmptyStringSchema.max(5000).optional(),
|
|
271
|
+
payloadOverride: OptionalPayloadSchema
|
|
272
|
+
})
|
|
273
|
+
.strict()
|
|
274
|
+
|
|
275
|
+
/**
|
|
276
|
+
* List command queue tasks
|
|
277
|
+
* Query parameters for filtering tasks by status
|
|
278
|
+
*/
|
|
279
|
+
export const ListCommandQueueTasksSchema = z
|
|
280
|
+
.object({
|
|
281
|
+
status: z.enum(['pending', 'approved', 'rejected', 'expired']).optional(),
|
|
282
|
+
limit: z.coerce.number().int().min(1).max(100).default(20)
|
|
283
|
+
})
|
|
284
|
+
.strict()
|
|
285
|
+
|
|
286
|
+
// ============================================================================
|
|
287
|
+
// SESSION SCHEMAS (CONVERSATIONAL AGENTS)
|
|
288
|
+
// ============================================================================
|
|
289
|
+
|
|
290
|
+
// ============================================================================
|
|
291
|
+
// EXECUTION MANAGEMENT SCHEMAS
|
|
292
|
+
// ============================================================================
|
|
293
|
+
|
|
294
|
+
/**
|
|
295
|
+
* List executions query parameters
|
|
296
|
+
* Filter executions by resource status (dev/prod/all)
|
|
297
|
+
*/
|
|
298
|
+
export const ListExecutionsSchema = z
|
|
299
|
+
.object({
|
|
300
|
+
resourceStatus: z.enum(['dev', 'prod', 'all']).default('all')
|
|
301
|
+
})
|
|
302
|
+
.strict()
|
|
303
|
+
|
|
304
|
+
/**
|
|
305
|
+
* Delete execution(s) query parameters
|
|
306
|
+
* Optional filter by resource status when bulk deleting
|
|
307
|
+
*/
|
|
308
|
+
export const DeleteExecutionsSchema = z
|
|
309
|
+
.object({
|
|
310
|
+
resourceStatus: z.enum(['dev', 'prod']).optional()
|
|
311
|
+
})
|
|
312
|
+
.strict()
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Execution utilities and resource validation
|
|
3
|
+
*
|
|
4
|
+
* NOTE: canExecuteResource and detectEnvironment are server-only (use process.env)
|
|
5
|
+
* Import from @repo/core/server instead
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
export * from './types'
|
|
9
|
+
export * from './sse-executions'
|
|
10
|
+
export * from './api-schemas'
|
|
11
|
+
export * from './runner-types'
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resource validator usage examples
|
|
3
|
+
* Tests moved to server/environment to match new location
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { describe, it, expect } from 'vitest'
|
|
7
|
+
import { canExecuteResource, detectEnvironment } from './server/environment'
|
|
8
|
+
|
|
9
|
+
// Example usage with AIResource
|
|
10
|
+
const devResource = {
|
|
11
|
+
resourceId: 'basic-agent',
|
|
12
|
+
name: 'Basic Agent',
|
|
13
|
+
description: 'A basic agent',
|
|
14
|
+
version: '1.0.0',
|
|
15
|
+
type: 'agent' as const,
|
|
16
|
+
status: 'dev' as const
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
const prodResource = {
|
|
20
|
+
resourceId: 'prod-agent',
|
|
21
|
+
name: 'Production Agent',
|
|
22
|
+
description: 'A production agent',
|
|
23
|
+
version: '1.0.0',
|
|
24
|
+
type: 'agent' as const,
|
|
25
|
+
status: 'prod' as const
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
describe('resource-validator', () => {
|
|
29
|
+
describe('canExecuteResource', () => {
|
|
30
|
+
it('should block dev resources in production', () => {
|
|
31
|
+
expect(canExecuteResource(devResource, 'production')).toBe(false)
|
|
32
|
+
})
|
|
33
|
+
|
|
34
|
+
it('should allow prod resources in production', () => {
|
|
35
|
+
expect(canExecuteResource(prodResource, 'production')).toBe(true)
|
|
36
|
+
})
|
|
37
|
+
|
|
38
|
+
it('should allow dev resources in development', () => {
|
|
39
|
+
expect(canExecuteResource(devResource, 'development')).toBe(true)
|
|
40
|
+
})
|
|
41
|
+
|
|
42
|
+
it('should allow dev resources in staging', () => {
|
|
43
|
+
expect(canExecuteResource(devResource, 'staging')).toBe(true)
|
|
44
|
+
})
|
|
45
|
+
|
|
46
|
+
it('should allow prod resources in all environments', () => {
|
|
47
|
+
expect(canExecuteResource(prodResource, 'production')).toBe(true)
|
|
48
|
+
expect(canExecuteResource(prodResource, 'development')).toBe(true)
|
|
49
|
+
expect(canExecuteResource(prodResource, 'staging')).toBe(true)
|
|
50
|
+
})
|
|
51
|
+
})
|
|
52
|
+
|
|
53
|
+
describe('detectEnvironment', () => {
|
|
54
|
+
it('should detect environment from process.env.NODE_ENV', () => {
|
|
55
|
+
// Note: detectEnvironment now reads directly from process.env.NODE_ENV
|
|
56
|
+
// In test environment, this will be 'test' which defaults to 'development'
|
|
57
|
+
const result = detectEnvironment()
|
|
58
|
+
expect(['development', 'staging', 'production']).toContain(result)
|
|
59
|
+
// Test environment typically returns 'development'
|
|
60
|
+
expect(result).toBe('development')
|
|
61
|
+
})
|
|
62
|
+
})
|
|
63
|
+
})
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Execution Runner Types
|
|
3
|
+
*
|
|
4
|
+
* Shared types for the Execution Runner UI feature.
|
|
5
|
+
* Used by both API (apps/api) and frontend (apps/command-center).
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import type { SerializedExecutionInterface } from '../../platform/registry/serialized-types'
|
|
9
|
+
import type { ExecutionStatus } from './sse-executions'
|
|
10
|
+
|
|
11
|
+
// ============================================================================
|
|
12
|
+
// PAGINATION
|
|
13
|
+
// ============================================================================
|
|
14
|
+
|
|
15
|
+
export interface PaginationMetadata {
|
|
16
|
+
total: number
|
|
17
|
+
limit: number
|
|
18
|
+
offset: number
|
|
19
|
+
hasMore: boolean
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
// ============================================================================
|
|
23
|
+
// EXECUTION METRICS
|
|
24
|
+
// ============================================================================
|
|
25
|
+
|
|
26
|
+
export interface ExecutionMetrics {
|
|
27
|
+
tokenCount?: number
|
|
28
|
+
stepCount?: number
|
|
29
|
+
toolCallCount?: number
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
// ============================================================================
|
|
33
|
+
// CATALOG TYPES
|
|
34
|
+
// ============================================================================
|
|
35
|
+
|
|
36
|
+
export interface ExecutionRunnerCatalogItem {
|
|
37
|
+
resourceId: string
|
|
38
|
+
resourceName: string
|
|
39
|
+
resourceType: 'workflow' | 'agent'
|
|
40
|
+
description?: string
|
|
41
|
+
status: 'dev' | 'prod'
|
|
42
|
+
version: string
|
|
43
|
+
interface: SerializedExecutionInterface
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export interface ExecutionRunnerCatalogResponse {
|
|
47
|
+
resources: ExecutionRunnerCatalogItem[]
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// ============================================================================
|
|
51
|
+
// EXECUTION HISTORY TYPES
|
|
52
|
+
// ============================================================================
|
|
53
|
+
|
|
54
|
+
export interface ExecutionSummary {
|
|
55
|
+
id: string
|
|
56
|
+
resourceId: string
|
|
57
|
+
resourceName: string
|
|
58
|
+
status: ExecutionStatus
|
|
59
|
+
startedAt: string
|
|
60
|
+
completedAt?: string
|
|
61
|
+
durationMs?: number
|
|
62
|
+
metrics?: ExecutionMetrics
|
|
63
|
+
input?: unknown
|
|
64
|
+
output?: unknown
|
|
65
|
+
error?: { message: string }
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export interface ExecutionListResponse {
|
|
69
|
+
executions: ExecutionSummary[]
|
|
70
|
+
pagination: PaginationMetadata
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// ============================================================================
|
|
74
|
+
// RUN RESOURCE TYPES
|
|
75
|
+
// ============================================================================
|
|
76
|
+
|
|
77
|
+
export interface RunResourceResponse {
|
|
78
|
+
executionId: string
|
|
79
|
+
status: ExecutionStatus
|
|
80
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Server-only environment detection
|
|
3
|
+
* Uses process.env.NODE_ENV (Node.js API)
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import type { ResourceDefinition } from '../../../platform/registry/types'
|
|
7
|
+
|
|
8
|
+
export type Environment = 'development' | 'staging' | 'production'
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Detect current environment from Node.js process.env
|
|
12
|
+
* Server-only - do not import in browser code
|
|
13
|
+
*/
|
|
14
|
+
export function detectEnvironment(): Environment {
|
|
15
|
+
const env = process.env.NODE_ENV || 'development'
|
|
16
|
+
if (env === 'production') return 'production'
|
|
17
|
+
if ((env as string) === 'staging') return 'staging'
|
|
18
|
+
return 'development'
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Check if resource can execute in current environment
|
|
23
|
+
* Production: only 'prod' resources allowed
|
|
24
|
+
* Staging/Development: both 'dev' and 'prod' allowed
|
|
25
|
+
*
|
|
26
|
+
* Server-only - uses detectEnvironment() which accesses process.env
|
|
27
|
+
*/
|
|
28
|
+
export function canExecuteResource(resource: ResourceDefinition, environment?: Environment): boolean {
|
|
29
|
+
const env = environment || detectEnvironment()
|
|
30
|
+
return env === 'production' ? resource.status === 'prod' : true
|
|
31
|
+
}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import type { ExecutionLogMessage } from '../engine/base/logging'
|
|
2
|
+
import type { ResourceStatus } from '../../platform/registry/types'
|
|
3
|
+
|
|
4
|
+
// Execution status type shared between API and UI
|
|
5
|
+
export type ExecutionStatus = 'pending' | 'running' | 'completed' | 'failed' | 'warning'
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Event sent when new execution starts
|
|
9
|
+
*/
|
|
10
|
+
export interface ExecutionStartedEvent {
|
|
11
|
+
type: 'new-execution'
|
|
12
|
+
resourceId: string
|
|
13
|
+
executionId: string
|
|
14
|
+
timestamp: number
|
|
15
|
+
data?: undefined
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Event sent when execution log message is emitted
|
|
20
|
+
*/
|
|
21
|
+
export interface ExecutionLogEvent {
|
|
22
|
+
type: 'log'
|
|
23
|
+
resourceId: string
|
|
24
|
+
executionId: string
|
|
25
|
+
timestamp: number
|
|
26
|
+
data: {
|
|
27
|
+
log: ExecutionLogMessage
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Event sent when execution completes (success or failure)
|
|
33
|
+
*/
|
|
34
|
+
export interface ExecutionCompleteEvent {
|
|
35
|
+
type: 'execution-complete'
|
|
36
|
+
resourceId: string
|
|
37
|
+
executionId: string
|
|
38
|
+
timestamp: number
|
|
39
|
+
data: {
|
|
40
|
+
success: boolean
|
|
41
|
+
status?: ExecutionStatus
|
|
42
|
+
result?: unknown
|
|
43
|
+
error?: string
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Connection confirmation event
|
|
49
|
+
*/
|
|
50
|
+
export interface ExecutionConnectedEvent {
|
|
51
|
+
type: 'connected'
|
|
52
|
+
resourceId: string
|
|
53
|
+
executionId?: undefined
|
|
54
|
+
timestamp: number
|
|
55
|
+
data?: undefined
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Union of all execution SSE events
|
|
60
|
+
*/
|
|
61
|
+
export type ExecutionSSEEvent =
|
|
62
|
+
| ExecutionStartedEvent
|
|
63
|
+
| ExecutionLogEvent
|
|
64
|
+
| ExecutionCompleteEvent
|
|
65
|
+
| ExecutionConnectedEvent
|
|
66
|
+
|
|
67
|
+
// API execution types
|
|
68
|
+
export interface APIExecutionSummary {
|
|
69
|
+
id: string
|
|
70
|
+
status: ExecutionStatus
|
|
71
|
+
startTime: number
|
|
72
|
+
endTime?: number
|
|
73
|
+
resourceStatus?: ResourceStatus // 'dev' | 'prod' - optional for backward compatibility
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
export interface APIExecutionDetail extends APIExecutionSummary {
|
|
77
|
+
executionLogs: ExecutionLogMessage[]
|
|
78
|
+
input?: unknown
|
|
79
|
+
result?: unknown
|
|
80
|
+
error?: string
|
|
81
|
+
resourceStatus: ResourceStatus // Required in detail view
|
|
82
|
+
apiVersion?: string | null
|
|
83
|
+
resourceVersion?: string | null
|
|
84
|
+
sdkVersion?: string | null
|
|
85
|
+
isArchived?: boolean
|
|
86
|
+
archivedLogCount?: number
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
// Archived logs pointer stored in execution_logs.logs column after archival
|
|
90
|
+
export interface ArchivedLogsPointer {
|
|
91
|
+
__archived: true
|
|
92
|
+
storage_path: string
|
|
93
|
+
archived_at: string
|
|
94
|
+
original_count: number
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
export function isArchivedLogs(logs: unknown): logs is ArchivedLogsPointer {
|
|
98
|
+
return (
|
|
99
|
+
typeof logs === 'object' &&
|
|
100
|
+
logs !== null &&
|
|
101
|
+
!Array.isArray(logs) &&
|
|
102
|
+
(logs as Record<string, unknown>).__archived === true
|
|
103
|
+
)
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
// API request/response types
|
|
107
|
+
export interface APIExecutionListResponse {
|
|
108
|
+
executions: APIExecutionSummary[]
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
// Organization -> Resource -> Execution structure
|
|
112
|
+
export type ExecutionMap = Map<string, APIExecutionDetail>
|
|
113
|
+
export type ResourceExecutionMap = Map<string, ExecutionMap>
|
|
114
|
+
export type OrganizationExecutionStore = Map<string, ResourceExecutionMap>
|
|
115
|
+
|
|
116
|
+
// SSE client types - generic to avoid Fastify dependency in core
|
|
117
|
+
export type ClientSet<T = unknown> = Set<T>
|
|
118
|
+
export type ResourceClientMap<T = unknown> = Map<string, ClientSet<T>>
|
|
119
|
+
export type OrganizationClientStore<T = unknown> = Map<string, ResourceClientMap<T>>
|