@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,296 @@
|
|
|
1
|
+
import { z } from 'zod'
|
|
2
|
+
import { ResourceTypeSchema, OriginResourceTypeSchema } from '../../platform/utils/validation'
|
|
3
|
+
import { TaskScheduleConfigSchema } from './schemas'
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* API validation schemas for task scheduler endpoints.
|
|
7
|
+
* Separate from domain schemas (schemas.ts) to enforce validation at API boundary.
|
|
8
|
+
*
|
|
9
|
+
* Note: Domain schemas in schemas.ts define business logic validation.
|
|
10
|
+
* API schemas add transport-layer concerns (query params, path params, response validation).
|
|
11
|
+
*
|
|
12
|
+
* Schedule config schemas (TaskScheduleConfigSchema, RecurringScheduleConfigSchema, etc.)
|
|
13
|
+
* are defined in schemas.ts and exported from there. This file only defines API-specific
|
|
14
|
+
* request/response schemas.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
// ============================================================================
|
|
18
|
+
// REQUEST SCHEMAS (NEW UNIFIED SYSTEM)
|
|
19
|
+
// ============================================================================
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* POST /api/task-scheduler/schedules - Create a new schedule
|
|
23
|
+
*
|
|
24
|
+
* Security:
|
|
25
|
+
* - organizationId extracted from JWT auth context (not in request body)
|
|
26
|
+
* - Strict mode prevents unknown fields (prevents mass assignment)
|
|
27
|
+
* - UUID validation on optional origin fields
|
|
28
|
+
* - Name/description length limited to prevent abuse
|
|
29
|
+
*/
|
|
30
|
+
export const CreateScheduleRequestSchema = z.object({
|
|
31
|
+
name: z.string().min(1, 'Name is required').max(255),
|
|
32
|
+
description: z.string().max(1000).optional(),
|
|
33
|
+
|
|
34
|
+
target: z.object({
|
|
35
|
+
resourceType: ResourceTypeSchema,
|
|
36
|
+
resourceId: z.string().min(1, 'Resource ID is required').max(255)
|
|
37
|
+
}),
|
|
38
|
+
|
|
39
|
+
scheduleConfig: TaskScheduleConfigSchema,
|
|
40
|
+
|
|
41
|
+
maxRetries: z.number().int().min(0).max(10).optional(),
|
|
42
|
+
idempotencyKey: z.string().max(255).optional(),
|
|
43
|
+
|
|
44
|
+
// Origin tracking (optional)
|
|
45
|
+
originExecutionId: z.string().uuid().optional(),
|
|
46
|
+
originResourceType: OriginResourceTypeSchema.optional(),
|
|
47
|
+
originResourceId: z.string().max(255).optional()
|
|
48
|
+
})
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* GET /api/task-scheduler/schedules - List schedules with filters
|
|
52
|
+
*
|
|
53
|
+
* Security:
|
|
54
|
+
* - Enum validation restricts to valid status/resource type values
|
|
55
|
+
* - z.coerce handles string query params from URL
|
|
56
|
+
* - Limit capped at 100 to prevent memory exhaustion
|
|
57
|
+
*/
|
|
58
|
+
export const ListSchedulesQuerySchema = z.object({
|
|
59
|
+
status: z.enum(['active', 'paused', 'completed', 'cancelled']).optional(),
|
|
60
|
+
targetResourceType: ResourceTypeSchema.optional(),
|
|
61
|
+
targetResourceId: z.string().optional(),
|
|
62
|
+
limit: z.coerce.number().int().min(1).max(100).optional().default(50),
|
|
63
|
+
offset: z.coerce.number().int().min(0).optional().default(0)
|
|
64
|
+
})
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* GET /api/task-scheduler/schedules/:id - Get single schedule
|
|
68
|
+
*
|
|
69
|
+
* Security:
|
|
70
|
+
* - UUID validation prevents SQL injection via path params
|
|
71
|
+
*/
|
|
72
|
+
export const GetScheduleParamsSchema = z.object({
|
|
73
|
+
id: z.string().uuid('Invalid schedule ID')
|
|
74
|
+
})
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* PATCH /api/task-scheduler/schedules/:id/anchor - Update anchor for relative schedules
|
|
78
|
+
*
|
|
79
|
+
* Security:
|
|
80
|
+
* - Datetime validation ensures valid ISO 8601 format
|
|
81
|
+
* - Only applicable to relative schedules (checked at service layer)
|
|
82
|
+
*/
|
|
83
|
+
export const UpdateAnchorRequestSchema = z.object({
|
|
84
|
+
anchorAt: z.string().datetime({ message: 'Invalid anchor datetime format' })
|
|
85
|
+
})
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* PATCH /api/task-scheduler/schedules/:id - Update schedule fields
|
|
89
|
+
*
|
|
90
|
+
* Security:
|
|
91
|
+
* - Strict mode prevents unknown fields (no mass assignment)
|
|
92
|
+
* - At least one field must be provided
|
|
93
|
+
* - Schedule config re-validated with discriminated union
|
|
94
|
+
* - Only active/paused schedules can be updated (checked at service layer)
|
|
95
|
+
*/
|
|
96
|
+
export const UpdateScheduleRequestSchema = z
|
|
97
|
+
.object({
|
|
98
|
+
name: z.string().min(1, 'Name cannot be empty').max(255).optional(),
|
|
99
|
+
description: z.string().max(1000).nullable().optional(),
|
|
100
|
+
scheduleConfig: TaskScheduleConfigSchema.optional(),
|
|
101
|
+
maxRetries: z.number().int().min(0).max(10).optional()
|
|
102
|
+
})
|
|
103
|
+
.strict()
|
|
104
|
+
.refine(
|
|
105
|
+
(data) =>
|
|
106
|
+
data.name !== undefined ||
|
|
107
|
+
data.description !== undefined ||
|
|
108
|
+
data.scheduleConfig !== undefined ||
|
|
109
|
+
data.maxRetries !== undefined,
|
|
110
|
+
{ message: 'At least one field (name, description, scheduleConfig, maxRetries) must be provided' }
|
|
111
|
+
)
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* POST /api/task-scheduler/process-batch - Internal webhook from pg_cron
|
|
115
|
+
* Note: This endpoint is called by the database, not by users
|
|
116
|
+
*
|
|
117
|
+
* Security:
|
|
118
|
+
* - No authentication (internal database trigger only, not exposed externally)
|
|
119
|
+
* - Validates database row structure (snake_case columns)
|
|
120
|
+
* - Batch size limited to 1-100 schedules
|
|
121
|
+
* - UUID validation on ID fields
|
|
122
|
+
*/
|
|
123
|
+
export const ProcessSchedulesBatchRequestSchema = z.object({
|
|
124
|
+
schedules: z
|
|
125
|
+
.array(
|
|
126
|
+
z.object({
|
|
127
|
+
// Required identifiers
|
|
128
|
+
id: z.string().uuid(),
|
|
129
|
+
organization_id: z.string().uuid(),
|
|
130
|
+
name: z.string(),
|
|
131
|
+
|
|
132
|
+
// Target
|
|
133
|
+
target_resource_type: z.string(),
|
|
134
|
+
target_resource_id: z.string(),
|
|
135
|
+
|
|
136
|
+
// Schedule definition
|
|
137
|
+
schedule_config: z.record(z.string(), z.unknown()), // JSONB from database
|
|
138
|
+
current_step: z.number().int(),
|
|
139
|
+
status: z.string(),
|
|
140
|
+
|
|
141
|
+
// Scheduling state
|
|
142
|
+
next_run_at: z.string().nullable(),
|
|
143
|
+
last_run_at: z.string().nullable(),
|
|
144
|
+
last_execution_id: z.string().uuid().nullable(),
|
|
145
|
+
|
|
146
|
+
// Config
|
|
147
|
+
max_retries: z.number().int(),
|
|
148
|
+
retry_count: z.number().int(),
|
|
149
|
+
idempotency_key: z.string().nullable(),
|
|
150
|
+
description: z.string().nullable(),
|
|
151
|
+
|
|
152
|
+
// Origin tracking
|
|
153
|
+
origin_execution_id: z.string().uuid().nullable(),
|
|
154
|
+
origin_resource_type: z.string().nullable(),
|
|
155
|
+
origin_resource_id: z.string().nullable(),
|
|
156
|
+
|
|
157
|
+
// Timestamps (PostgreSQL format with microseconds)
|
|
158
|
+
created_at: z.string(),
|
|
159
|
+
updated_at: z.string()
|
|
160
|
+
})
|
|
161
|
+
)
|
|
162
|
+
.min(1)
|
|
163
|
+
.max(100)
|
|
164
|
+
})
|
|
165
|
+
|
|
166
|
+
/**
|
|
167
|
+
* GET /api/task-scheduler/schedules/:id/executions - Get execution history
|
|
168
|
+
*
|
|
169
|
+
* Security:
|
|
170
|
+
* - UUID validation on schedule ID path param
|
|
171
|
+
*/
|
|
172
|
+
export const GetExecutionHistoryParamsSchema = z.object({
|
|
173
|
+
id: z.string().uuid('Invalid schedule ID')
|
|
174
|
+
})
|
|
175
|
+
|
|
176
|
+
/**
|
|
177
|
+
* Query parameters for execution history pagination
|
|
178
|
+
*/
|
|
179
|
+
export const GetExecutionHistoryQuerySchema = z.object({
|
|
180
|
+
limit: z.coerce.number().int().min(1).max(100).optional().default(20),
|
|
181
|
+
offset: z.coerce.number().int().min(0).optional().default(0)
|
|
182
|
+
})
|
|
183
|
+
|
|
184
|
+
// ============================================================================
|
|
185
|
+
// RESPONSE SCHEMAS (NEW UNIFIED SYSTEM)
|
|
186
|
+
// ============================================================================
|
|
187
|
+
|
|
188
|
+
/**
|
|
189
|
+
* Single schedule response.
|
|
190
|
+
* Returned by GET /schedules/:id and POST /schedules
|
|
191
|
+
*/
|
|
192
|
+
export const ScheduleResponseSchema = z.object({
|
|
193
|
+
id: z.string().uuid(),
|
|
194
|
+
organizationId: z.string().uuid(),
|
|
195
|
+
name: z.string(),
|
|
196
|
+
description: z.string().nullable(),
|
|
197
|
+
|
|
198
|
+
target: z.object({
|
|
199
|
+
resourceType: ResourceTypeSchema,
|
|
200
|
+
resourceId: z.string()
|
|
201
|
+
}),
|
|
202
|
+
|
|
203
|
+
scheduleConfig: TaskScheduleConfigSchema,
|
|
204
|
+
|
|
205
|
+
nextRunAt: z.string().datetime().nullable(),
|
|
206
|
+
currentStep: z.number().int(),
|
|
207
|
+
status: z.enum(['active', 'paused', 'completed', 'cancelled']),
|
|
208
|
+
|
|
209
|
+
lastRunAt: z.string().datetime().nullable(),
|
|
210
|
+
lastExecutionId: z.string().uuid().nullable(),
|
|
211
|
+
|
|
212
|
+
maxRetries: z.number().int(),
|
|
213
|
+
idempotencyKey: z.string().nullable(),
|
|
214
|
+
|
|
215
|
+
createdAt: z.string().datetime(),
|
|
216
|
+
updatedAt: z.string().datetime()
|
|
217
|
+
})
|
|
218
|
+
|
|
219
|
+
/**
|
|
220
|
+
* List schedules response.
|
|
221
|
+
* Returned by GET /schedules with pagination metadata.
|
|
222
|
+
*/
|
|
223
|
+
export const ListSchedulesResponseSchema = z.object({
|
|
224
|
+
schedules: z.array(ScheduleResponseSchema),
|
|
225
|
+
total: z.number().int(),
|
|
226
|
+
limit: z.number().int(),
|
|
227
|
+
offset: z.number().int()
|
|
228
|
+
})
|
|
229
|
+
|
|
230
|
+
/**
|
|
231
|
+
* Execution history item.
|
|
232
|
+
* Represents a single execution triggered by a schedule.
|
|
233
|
+
*/
|
|
234
|
+
export const ExecutionHistoryItemSchema = z.object({
|
|
235
|
+
id: z.string().uuid(),
|
|
236
|
+
createdAt: z.string().datetime(),
|
|
237
|
+
status: z.enum(['running', 'completed', 'failed', 'cancelled']),
|
|
238
|
+
step: z.number().int().nullable(),
|
|
239
|
+
itemLabel: z.string().nullable(),
|
|
240
|
+
duration: z.number().nullable(), // milliseconds
|
|
241
|
+
error: z.string().nullable()
|
|
242
|
+
})
|
|
243
|
+
|
|
244
|
+
/**
|
|
245
|
+
* Execution history response.
|
|
246
|
+
* Returned by GET /schedules/:id/executions with pagination.
|
|
247
|
+
*/
|
|
248
|
+
export const ExecutionHistoryResponseSchema = z.object({
|
|
249
|
+
executions: z.array(ExecutionHistoryItemSchema),
|
|
250
|
+
total: z.number().int(),
|
|
251
|
+
limit: z.number().int(),
|
|
252
|
+
offset: z.number().int()
|
|
253
|
+
})
|
|
254
|
+
|
|
255
|
+
/**
|
|
256
|
+
* Process batch response (internal).
|
|
257
|
+
* Returned by POST /process-batch for monitoring/debugging.
|
|
258
|
+
*/
|
|
259
|
+
export const ProcessBatchResponseSchema = z.object({
|
|
260
|
+
processed: z.number().int(),
|
|
261
|
+
succeeded: z.number().int(),
|
|
262
|
+
failed: z.number().int(),
|
|
263
|
+
errors: z
|
|
264
|
+
.array(
|
|
265
|
+
z.object({
|
|
266
|
+
scheduleId: z.string().uuid(),
|
|
267
|
+
error: z.string()
|
|
268
|
+
})
|
|
269
|
+
)
|
|
270
|
+
.optional()
|
|
271
|
+
})
|
|
272
|
+
|
|
273
|
+
// ============================================================================
|
|
274
|
+
// TYPE EXPORTS (NEW UNIFIED SYSTEM)
|
|
275
|
+
// ============================================================================
|
|
276
|
+
|
|
277
|
+
// Note: Schedule config types (RecurringScheduleConfig, RelativeScheduleConfig,
|
|
278
|
+
// AbsoluteScheduleConfig, TaskScheduleConfig, RelativeScheduleItem, AbsoluteScheduleItem)
|
|
279
|
+
// are defined in types.ts. Import them from there or from the package index.
|
|
280
|
+
|
|
281
|
+
// Request types
|
|
282
|
+
export type CreateScheduleRequest = z.infer<typeof CreateScheduleRequestSchema>
|
|
283
|
+
export type ListSchedulesQuery = z.infer<typeof ListSchedulesQuerySchema>
|
|
284
|
+
export type GetScheduleParams = z.infer<typeof GetScheduleParamsSchema>
|
|
285
|
+
export type UpdateAnchorRequest = z.infer<typeof UpdateAnchorRequestSchema>
|
|
286
|
+
export type UpdateScheduleRequest = z.infer<typeof UpdateScheduleRequestSchema>
|
|
287
|
+
export type ProcessSchedulesBatchRequest = z.infer<typeof ProcessSchedulesBatchRequestSchema>
|
|
288
|
+
export type GetExecutionHistoryParams = z.infer<typeof GetExecutionHistoryParamsSchema>
|
|
289
|
+
export type GetExecutionHistoryQuery = z.infer<typeof GetExecutionHistoryQuerySchema>
|
|
290
|
+
|
|
291
|
+
// Response types
|
|
292
|
+
export type ScheduleResponse = z.infer<typeof ScheduleResponseSchema>
|
|
293
|
+
export type ListSchedulesResponse = z.infer<typeof ListSchedulesResponseSchema>
|
|
294
|
+
export type ExecutionHistoryItem = z.infer<typeof ExecutionHistoryItemSchema>
|
|
295
|
+
export type ExecutionHistoryResponse = z.infer<typeof ExecutionHistoryResponseSchema>
|
|
296
|
+
export type ProcessBatchResponse = z.infer<typeof ProcessBatchResponseSchema>
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
// Export all types from types.ts (domain interfaces)
|
|
2
|
+
// These are the canonical TypeScript interfaces for schedule config types
|
|
3
|
+
export * from './types'
|
|
4
|
+
|
|
5
|
+
// Export schemas from schemas.ts (domain-level Zod schemas)
|
|
6
|
+
// Note: Type aliases from schemas.ts (e.g., RecurringScheduleConfigInput) are suffixed
|
|
7
|
+
// with "Input" to distinguish from the interface types in types.ts
|
|
8
|
+
export * from './schemas'
|
|
9
|
+
|
|
10
|
+
// Export API schemas from api-schemas.ts
|
|
11
|
+
// Only export schemas and types that are unique to api-schemas.ts
|
|
12
|
+
// Schedule config schemas are re-exported from schemas.ts, so we skip those
|
|
13
|
+
export {
|
|
14
|
+
// Request schemas
|
|
15
|
+
CreateScheduleRequestSchema,
|
|
16
|
+
ListSchedulesQuerySchema,
|
|
17
|
+
GetScheduleParamsSchema,
|
|
18
|
+
UpdateAnchorRequestSchema,
|
|
19
|
+
UpdateScheduleRequestSchema,
|
|
20
|
+
ProcessSchedulesBatchRequestSchema,
|
|
21
|
+
GetExecutionHistoryParamsSchema,
|
|
22
|
+
GetExecutionHistoryQuerySchema,
|
|
23
|
+
|
|
24
|
+
// Response schemas
|
|
25
|
+
ScheduleResponseSchema,
|
|
26
|
+
ListSchedulesResponseSchema,
|
|
27
|
+
ExecutionHistoryItemSchema,
|
|
28
|
+
ExecutionHistoryResponseSchema,
|
|
29
|
+
ProcessBatchResponseSchema,
|
|
30
|
+
|
|
31
|
+
// Request types
|
|
32
|
+
type CreateScheduleRequest,
|
|
33
|
+
type ListSchedulesQuery,
|
|
34
|
+
type GetScheduleParams,
|
|
35
|
+
type UpdateAnchorRequest,
|
|
36
|
+
type UpdateScheduleRequest,
|
|
37
|
+
type ProcessSchedulesBatchRequest,
|
|
38
|
+
type GetExecutionHistoryParams,
|
|
39
|
+
type GetExecutionHistoryQuery,
|
|
40
|
+
|
|
41
|
+
// Response types
|
|
42
|
+
type ScheduleResponse,
|
|
43
|
+
type ListSchedulesResponse,
|
|
44
|
+
type ExecutionHistoryItem,
|
|
45
|
+
type ExecutionHistoryResponse,
|
|
46
|
+
type ProcessBatchResponse
|
|
47
|
+
} from './api-schemas'
|
|
48
|
+
|
|
49
|
+
// Export utilities
|
|
50
|
+
export * from './utils'
|
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
import { z } from 'zod'
|
|
2
|
+
import { ExecutionTargetSchema, OriginTrackingSchema } from '../core/api-schemas'
|
|
3
|
+
import {
|
|
4
|
+
UuidSchema,
|
|
5
|
+
NonEmptyStringSchema,
|
|
6
|
+
ResourceTypeSchema,
|
|
7
|
+
OriginResourceTypeSchema
|
|
8
|
+
} from '../../platform/utils/validation'
|
|
9
|
+
|
|
10
|
+
// Note: ExecutionTargetSchema and OriginTrackingSchema are now imported from api-schemas.ts
|
|
11
|
+
// This ensures consistent validation across all execution endpoints
|
|
12
|
+
|
|
13
|
+
// Re-export for backward compatibility
|
|
14
|
+
export { ExecutionTargetSchema, OriginTrackingSchema }
|
|
15
|
+
|
|
16
|
+
// ============================================================================
|
|
17
|
+
// SCHEDULE ITEM SCHEMAS
|
|
18
|
+
// Note: These are canonical domain schemas. API-level schemas with additional
|
|
19
|
+
// validation constraints are in api-schemas.ts
|
|
20
|
+
// ============================================================================
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Relative schedule item validation
|
|
24
|
+
* Used for schedule items with offsets from an anchor date
|
|
25
|
+
*
|
|
26
|
+
* Offset format: [+/-][number][unit]
|
|
27
|
+
* - Units: d (days), h (hours), m (minutes)
|
|
28
|
+
* - Examples: '-7d', '+3d', '-2h', '+30m'
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* ```typescript
|
|
32
|
+
* {
|
|
33
|
+
* offset: '-7d', // 7 days before anchor
|
|
34
|
+
* payload: { reminder: 'one week before' },
|
|
35
|
+
* label: 'Week before reminder'
|
|
36
|
+
* }
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
export const RelativeScheduleItemSchema = z.object({
|
|
40
|
+
offset: z.string().regex(/^[+-]\d+[dhm]$/, 'Invalid offset format. Use +3d, -2h, +30m, etc.'),
|
|
41
|
+
payload: z.record(z.string(), z.unknown()),
|
|
42
|
+
label: z.string().optional()
|
|
43
|
+
})
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Absolute schedule item validation
|
|
47
|
+
* Used for schedule items with fixed datetime
|
|
48
|
+
*
|
|
49
|
+
* @example
|
|
50
|
+
* ```typescript
|
|
51
|
+
* {
|
|
52
|
+
* runAt: '2025-03-15T09:00:00Z',
|
|
53
|
+
* payload: { event: 'launch' },
|
|
54
|
+
* label: 'Product launch notification'
|
|
55
|
+
* }
|
|
56
|
+
* ```
|
|
57
|
+
*/
|
|
58
|
+
export const AbsoluteScheduleItemSchema = z.object({
|
|
59
|
+
runAt: z.string().datetime({ message: 'Invalid datetime format' }),
|
|
60
|
+
payload: z.record(z.string(), z.unknown()),
|
|
61
|
+
label: z.string().optional()
|
|
62
|
+
})
|
|
63
|
+
|
|
64
|
+
// ============================================================================
|
|
65
|
+
// SCHEDULE CONFIG SCHEMAS (DISCRIMINATED UNION)
|
|
66
|
+
// ============================================================================
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Recurring schedule configuration
|
|
70
|
+
* Supports cron expressions or predefined intervals with timezone
|
|
71
|
+
*
|
|
72
|
+
* Security:
|
|
73
|
+
* - timezone validated as string (IANA timezone validation at service layer)
|
|
74
|
+
* - endAt prevents infinite schedules
|
|
75
|
+
*
|
|
76
|
+
* @example
|
|
77
|
+
* ```typescript
|
|
78
|
+
* // Cron-based (every Monday at 9am)
|
|
79
|
+
* {
|
|
80
|
+
* type: 'recurring',
|
|
81
|
+
* cron: '0 9 * * 1',
|
|
82
|
+
* timezone: 'America/New_York',
|
|
83
|
+
* payload: { report: 'weekly' }
|
|
84
|
+
* }
|
|
85
|
+
*
|
|
86
|
+
* // Interval-based (daily at 10:30)
|
|
87
|
+
* {
|
|
88
|
+
* type: 'recurring',
|
|
89
|
+
* interval: 'daily',
|
|
90
|
+
* time: '10:30',
|
|
91
|
+
* timezone: 'Europe/London',
|
|
92
|
+
* payload: { check: 'daily' }
|
|
93
|
+
* }
|
|
94
|
+
* ```
|
|
95
|
+
*/
|
|
96
|
+
export const RecurringScheduleConfigSchema = z
|
|
97
|
+
.object({
|
|
98
|
+
type: z.literal('recurring'),
|
|
99
|
+
cron: z.string().optional(),
|
|
100
|
+
interval: z.enum(['daily', 'weekly', 'monthly']).optional(),
|
|
101
|
+
time: z
|
|
102
|
+
.string()
|
|
103
|
+
.regex(/^\d{2}:\d{2}$/, 'Time must be in HH:MM format')
|
|
104
|
+
.optional(),
|
|
105
|
+
timezone: z.string().min(1, 'Timezone is required'),
|
|
106
|
+
payload: z.record(z.string(), z.unknown()),
|
|
107
|
+
endAt: z.string().datetime().nullable().optional(),
|
|
108
|
+
overduePolicy: z.enum(['skip', 'execute']).optional()
|
|
109
|
+
})
|
|
110
|
+
.refine((data) => data.cron || data.interval, { message: 'Either cron or interval must be provided' })
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* Relative schedule configuration
|
|
114
|
+
* Schedule items relative to an anchor date (e.g., event countdown)
|
|
115
|
+
*
|
|
116
|
+
* @example
|
|
117
|
+
* ```typescript
|
|
118
|
+
* {
|
|
119
|
+
* type: 'relative',
|
|
120
|
+
* anchorAt: '2025-06-01T00:00:00Z',
|
|
121
|
+
* anchorLabel: 'Product Launch',
|
|
122
|
+
* items: [
|
|
123
|
+
* { offset: '-30d', payload: { reminder: '30 days out' } },
|
|
124
|
+
* { offset: '-7d', payload: { reminder: '1 week out' } },
|
|
125
|
+
* { offset: '-1d', payload: { reminder: 'tomorrow' } }
|
|
126
|
+
* ]
|
|
127
|
+
* }
|
|
128
|
+
* ```
|
|
129
|
+
*/
|
|
130
|
+
export const RelativeScheduleConfigSchema = z.object({
|
|
131
|
+
type: z.literal('relative'),
|
|
132
|
+
anchorAt: z.string().datetime({ message: 'Invalid anchor datetime' }),
|
|
133
|
+
anchorLabel: z.string().optional(),
|
|
134
|
+
items: z.array(RelativeScheduleItemSchema).min(1, 'At least one item required'),
|
|
135
|
+
overduePolicy: z.enum(['skip', 'execute']).optional()
|
|
136
|
+
})
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* Absolute schedule configuration
|
|
140
|
+
* Schedule items at specific fixed datetimes
|
|
141
|
+
*
|
|
142
|
+
* @example
|
|
143
|
+
* ```typescript
|
|
144
|
+
* {
|
|
145
|
+
* type: 'absolute',
|
|
146
|
+
* items: [
|
|
147
|
+
* { runAt: '2025-01-15T10:00:00Z', payload: { event: 'first' } },
|
|
148
|
+
* { runAt: '2025-02-15T10:00:00Z', payload: { event: 'second' } }
|
|
149
|
+
* ]
|
|
150
|
+
* }
|
|
151
|
+
* ```
|
|
152
|
+
*/
|
|
153
|
+
export const AbsoluteScheduleConfigSchema = z.object({
|
|
154
|
+
type: z.literal('absolute'),
|
|
155
|
+
items: z.array(AbsoluteScheduleItemSchema).min(1, 'At least one item required'),
|
|
156
|
+
overduePolicy: z.enum(['skip', 'execute']).optional()
|
|
157
|
+
})
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* Task schedule configuration discriminated union
|
|
161
|
+
* Efficiently validates one of three schedule types based on 'type' field
|
|
162
|
+
*
|
|
163
|
+
* Uses Zod's discriminatedUnion for optimal parsing performance
|
|
164
|
+
*/
|
|
165
|
+
export const TaskScheduleConfigSchema = z.discriminatedUnion('type', [
|
|
166
|
+
RecurringScheduleConfigSchema,
|
|
167
|
+
RelativeScheduleConfigSchema,
|
|
168
|
+
AbsoluteScheduleConfigSchema
|
|
169
|
+
])
|
|
170
|
+
|
|
171
|
+
// ============================================================================
|
|
172
|
+
// CREATE SCHEDULE INPUT SCHEMA
|
|
173
|
+
// ============================================================================
|
|
174
|
+
|
|
175
|
+
/**
|
|
176
|
+
* Target schema for schedule creation
|
|
177
|
+
* Simplified version without payload (payload is in schedule config)
|
|
178
|
+
*/
|
|
179
|
+
const ScheduleTargetSchema = z.object({
|
|
180
|
+
resourceType: ResourceTypeSchema,
|
|
181
|
+
resourceId: NonEmptyStringSchema.max(255)
|
|
182
|
+
})
|
|
183
|
+
|
|
184
|
+
/**
|
|
185
|
+
* Optional origin tracking for schedule creation
|
|
186
|
+
* All fields are optional for schedules created via API
|
|
187
|
+
*/
|
|
188
|
+
const OptionalOriginTrackingSchema = z.object({
|
|
189
|
+
originExecutionId: UuidSchema.optional(),
|
|
190
|
+
originResourceType: OriginResourceTypeSchema.optional(),
|
|
191
|
+
originResourceId: z.string().max(100).optional()
|
|
192
|
+
})
|
|
193
|
+
|
|
194
|
+
/**
|
|
195
|
+
* Create schedule input validation
|
|
196
|
+
* Complete input schema for creating a new task schedule
|
|
197
|
+
*
|
|
198
|
+
* Security Features:
|
|
199
|
+
* - organizationId validated as UUID (multi-tenancy)
|
|
200
|
+
* - name length limited (prevents DoS)
|
|
201
|
+
* - target validated with resource type enum
|
|
202
|
+
* - schedule config validated with discriminated union
|
|
203
|
+
* - maxRetries bounded (0-10)
|
|
204
|
+
*
|
|
205
|
+
* @example
|
|
206
|
+
* ```typescript
|
|
207
|
+
* {
|
|
208
|
+
* organizationId: '550e8400-e29b-41d4-a716-446655440000',
|
|
209
|
+
* name: 'Weekly Report Schedule',
|
|
210
|
+
* description: 'Sends weekly analytics report',
|
|
211
|
+
* target: {
|
|
212
|
+
* resourceType: 'workflow',
|
|
213
|
+
* resourceId: 'weekly-report-workflow'
|
|
214
|
+
* },
|
|
215
|
+
* scheduleConfig: {
|
|
216
|
+
* type: 'recurring',
|
|
217
|
+
* interval: 'weekly',
|
|
218
|
+
* time: '09:00',
|
|
219
|
+
* timezone: 'America/New_York',
|
|
220
|
+
* payload: { reportType: 'analytics' }
|
|
221
|
+
* },
|
|
222
|
+
* maxRetries: 3
|
|
223
|
+
* }
|
|
224
|
+
* ```
|
|
225
|
+
*/
|
|
226
|
+
export const CreateScheduleInputSchema = z
|
|
227
|
+
.object({
|
|
228
|
+
organizationId: UuidSchema,
|
|
229
|
+
name: NonEmptyStringSchema.max(255),
|
|
230
|
+
description: z.string().max(1000).optional(),
|
|
231
|
+
|
|
232
|
+
target: ScheduleTargetSchema,
|
|
233
|
+
scheduleConfig: TaskScheduleConfigSchema,
|
|
234
|
+
|
|
235
|
+
maxRetries: z.number().int().min(0).max(10).optional().default(3),
|
|
236
|
+
idempotencyKey: z.string().max(255).optional(),
|
|
237
|
+
metadata: z.record(z.string(), z.unknown()).optional()
|
|
238
|
+
})
|
|
239
|
+
.merge(OptionalOriginTrackingSchema)
|
|
240
|
+
|
|
241
|
+
// ============================================================================
|
|
242
|
+
// INFERRED TYPES
|
|
243
|
+
// ============================================================================
|
|
244
|
+
|
|
245
|
+
/** Validated relative schedule item input */
|
|
246
|
+
export type RelativeScheduleItemInput = z.infer<typeof RelativeScheduleItemSchema>
|
|
247
|
+
|
|
248
|
+
/** Validated absolute schedule item input */
|
|
249
|
+
export type AbsoluteScheduleItemInput = z.infer<typeof AbsoluteScheduleItemSchema>
|
|
250
|
+
|
|
251
|
+
/** Validated recurring schedule config input */
|
|
252
|
+
export type RecurringScheduleConfigInput = z.infer<typeof RecurringScheduleConfigSchema>
|
|
253
|
+
|
|
254
|
+
/** Validated relative schedule config input */
|
|
255
|
+
export type RelativeScheduleConfigInput = z.infer<typeof RelativeScheduleConfigSchema>
|
|
256
|
+
|
|
257
|
+
/** Validated absolute schedule config input */
|
|
258
|
+
export type AbsoluteScheduleConfigInput = z.infer<typeof AbsoluteScheduleConfigSchema>
|
|
259
|
+
|
|
260
|
+
/** Validated task schedule config (union of all config types) */
|
|
261
|
+
export type TaskScheduleConfigInput = z.infer<typeof TaskScheduleConfigSchema>
|
|
262
|
+
|
|
263
|
+
/** Validated create schedule input */
|
|
264
|
+
export type CreateScheduleInputValidated = z.infer<typeof CreateScheduleInputSchema>
|