@plumbus/core 0.7.1 → 0.8.0-beta.1
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/CHANGELOG.md +49 -0
- package/README.md +2 -1
- package/dist/.tsbuildinfo +1 -1
- package/dist/admission/client.d.ts +9 -0
- package/dist/admission/client.d.ts.map +1 -0
- package/dist/admission/client.js +34 -0
- package/dist/admission/client.js.map +1 -0
- package/dist/admission/index.d.ts +5 -0
- package/dist/admission/index.d.ts.map +1 -0
- package/dist/admission/index.js +4 -0
- package/dist/admission/index.js.map +1 -0
- package/dist/admission/request-admission.d.ts +26 -0
- package/dist/admission/request-admission.d.ts.map +1 -0
- package/dist/admission/request-admission.js +85 -0
- package/dist/admission/request-admission.js.map +1 -0
- package/dist/admission/shared.d.ts +31 -0
- package/dist/admission/shared.d.ts.map +1 -0
- package/dist/admission/shared.js +30 -0
- package/dist/admission/shared.js.map +1 -0
- package/dist/ai/ai/provider.d.ts +5 -7
- package/dist/ai/ai-service.d.ts +8 -1
- package/dist/ai/ai-service.d.ts.map +1 -1
- package/dist/ai/ai-service.js +23 -13
- package/dist/ai/ai-service.js.map +1 -1
- package/dist/ai/errors/data-errors.d.ts +6 -0
- package/dist/ai/errors/index.d.ts +4 -1
- package/dist/ai/fill-prompt-template.d.ts +12 -0
- package/dist/ai/fill-prompt-template.d.ts.map +1 -0
- package/dist/ai/fill-prompt-template.js +19 -0
- package/dist/ai/fill-prompt-template.js.map +1 -0
- package/dist/ai/governed-artifacts.d.ts +49 -0
- package/dist/ai/governed-artifacts.d.ts.map +1 -0
- package/dist/ai/governed-artifacts.js +277 -0
- package/dist/ai/governed-artifacts.js.map +1 -0
- package/dist/ai/governed-budget.d.ts +17 -0
- package/dist/ai/governed-budget.d.ts.map +1 -0
- package/dist/ai/governed-budget.js +52 -0
- package/dist/ai/governed-budget.js.map +1 -0
- package/dist/ai/governed-host.d.ts +54 -0
- package/dist/ai/governed-host.d.ts.map +1 -0
- package/dist/ai/governed-host.js +8 -0
- package/dist/ai/governed-host.js.map +1 -0
- package/dist/ai/governed-invoke.d.ts +41 -0
- package/dist/ai/governed-invoke.d.ts.map +1 -0
- package/dist/ai/governed-invoke.js +102 -0
- package/dist/ai/governed-invoke.js.map +1 -0
- package/dist/ai/governed-runtime.d.ts +103 -0
- package/dist/ai/governed-runtime.d.ts.map +1 -0
- package/dist/ai/governed-runtime.js +151 -0
- package/dist/ai/governed-runtime.js.map +1 -0
- package/dist/ai/index.d.ts +12 -2
- package/dist/ai/index.d.ts.map +1 -1
- package/dist/ai/index.js +8 -2
- package/dist/ai/index.js.map +1 -1
- package/dist/ai/prompt-registry.d.ts +6 -0
- package/dist/ai/prompt-registry.d.ts.map +1 -1
- package/dist/ai/prompt-registry.js +12 -0
- package/dist/ai/prompt-registry.js.map +1 -1
- package/dist/ai/provider.d.ts +5 -7
- package/dist/ai/provider.d.ts.map +1 -1
- package/dist/ai/provider.js +29 -0
- package/dist/ai/provider.js.map +1 -1
- package/dist/ai/types/enums.d.ts +2 -0
- package/dist/ai/types/fields.d.ts +7 -0
- package/dist/ai/types/prompt.d.ts +8 -0
- package/dist/ai/validation.d.ts.map +1 -1
- package/dist/ai/validation.js +10 -1
- package/dist/ai/validation.js.map +1 -1
- package/dist/api/exposure.d.ts +14 -0
- package/dist/api/exposure.d.ts.map +1 -1
- package/dist/api/exposure.js +16 -0
- package/dist/api/exposure.js.map +1 -1
- package/dist/api/idempotency.d.ts +67 -0
- package/dist/api/idempotency.d.ts.map +1 -0
- package/dist/api/idempotency.js +176 -0
- package/dist/api/idempotency.js.map +1 -0
- package/dist/api/index.d.ts +3 -1
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +4 -2
- package/dist/api/index.js.map +1 -1
- package/dist/api/route-generator.d.ts +50 -6
- package/dist/api/route-generator.d.ts.map +1 -1
- package/dist/api/route-generator.js +254 -12
- package/dist/api/route-generator.js.map +1 -1
- package/dist/approvals/action-risk.d.ts +41 -0
- package/dist/approvals/action-risk.d.ts.map +1 -0
- package/dist/approvals/action-risk.js +56 -0
- package/dist/approvals/action-risk.js.map +1 -0
- package/dist/approvals/actors.d.ts +8 -0
- package/dist/approvals/actors.d.ts.map +1 -0
- package/dist/approvals/actors.js +26 -0
- package/dist/approvals/actors.js.map +1 -0
- package/dist/approvals/authorization.d.ts +5 -0
- package/dist/approvals/authorization.d.ts.map +1 -0
- package/dist/approvals/authorization.js +16 -0
- package/dist/approvals/authorization.js.map +1 -0
- package/dist/approvals/digest.d.ts +3 -0
- package/dist/approvals/digest.d.ts.map +1 -0
- package/dist/approvals/digest.js +21 -0
- package/dist/approvals/digest.js.map +1 -0
- package/dist/approvals/gate.d.ts +15 -0
- package/dist/approvals/gate.d.ts.map +1 -0
- package/dist/approvals/gate.js +102 -0
- package/dist/approvals/gate.js.map +1 -0
- package/dist/approvals/host-runtime.d.ts +16 -0
- package/dist/approvals/host-runtime.d.ts.map +1 -0
- package/dist/approvals/host-runtime.js +12 -0
- package/dist/approvals/host-runtime.js.map +1 -0
- package/dist/approvals/index.d.ts +19 -0
- package/dist/approvals/index.d.ts.map +1 -0
- package/dist/approvals/index.js +13 -0
- package/dist/approvals/index.js.map +1 -0
- package/dist/approvals/memory-store.d.ts +3 -0
- package/dist/approvals/memory-store.d.ts.map +1 -0
- package/dist/approvals/memory-store.js +33 -0
- package/dist/approvals/memory-store.js.map +1 -0
- package/dist/approvals/schema.d.ts +484 -0
- package/dist/approvals/schema.d.ts.map +1 -0
- package/dist/approvals/schema.js +55 -0
- package/dist/approvals/schema.js.map +1 -0
- package/dist/approvals/service.d.ts +17 -0
- package/dist/approvals/service.d.ts.map +1 -0
- package/dist/approvals/service.js +240 -0
- package/dist/approvals/service.js.map +1 -0
- package/dist/approvals/sql-store.d.ts +9 -0
- package/dist/approvals/sql-store.d.ts.map +1 -0
- package/dist/approvals/sql-store.js +179 -0
- package/dist/approvals/sql-store.js.map +1 -0
- package/dist/approvals/types.d.ts +156 -0
- package/dist/approvals/types.d.ts.map +1 -0
- package/dist/approvals/types.js +32 -0
- package/dist/approvals/types.js.map +1 -0
- package/dist/approvals/wait.d.ts +10 -0
- package/dist/approvals/wait.d.ts.map +1 -0
- package/dist/approvals/wait.js +11 -0
- package/dist/approvals/wait.js.map +1 -0
- package/dist/audit/service.d.ts.map +1 -1
- package/dist/audit/service.js +6 -1
- package/dist/audit/service.js.map +1 -1
- package/dist/cli/cli.d.ts.map +1 -1
- package/dist/cli/cli.js +2 -1
- package/dist/cli/cli.js.map +1 -1
- package/dist/cli/commands/api.d.ts +65 -0
- package/dist/cli/commands/api.d.ts.map +1 -1
- package/dist/cli/commands/api.js +79 -4
- package/dist/cli/commands/api.js.map +1 -1
- package/dist/cli/commands/compile-flows.d.ts +9 -0
- package/dist/cli/commands/compile-flows.d.ts.map +1 -0
- package/dist/cli/commands/compile-flows.js +55 -0
- package/dist/cli/commands/compile-flows.js.map +1 -0
- package/dist/cli/commands/dev.d.ts +6 -0
- package/dist/cli/commands/dev.d.ts.map +1 -1
- package/dist/cli/commands/dev.js +22 -5
- package/dist/cli/commands/dev.js.map +1 -1
- package/dist/cli/commands/e2e.d.ts +5 -0
- package/dist/cli/commands/e2e.d.ts.map +1 -1
- package/dist/cli/commands/e2e.js +42 -3
- package/dist/cli/commands/e2e.js.map +1 -1
- package/dist/cli/commands/flow.d.ts.map +1 -1
- package/dist/cli/commands/flow.js +12 -3
- package/dist/cli/commands/flow.js.map +1 -1
- package/dist/cli/commands/generate-openapi-from-zod.d.ts +26 -0
- package/dist/cli/commands/generate-openapi-from-zod.d.ts.map +1 -0
- package/dist/cli/commands/generate-openapi-from-zod.js +189 -0
- package/dist/cli/commands/generate-openapi-from-zod.js.map +1 -0
- package/dist/cli/commands/generate.d.ts +10 -4
- package/dist/cli/commands/generate.d.ts.map +1 -1
- package/dist/cli/commands/generate.js +27 -70
- package/dist/cli/commands/generate.js.map +1 -1
- package/dist/cli/commands/index.d.ts +1 -0
- package/dist/cli/commands/index.d.ts.map +1 -1
- package/dist/cli/commands/index.js +2 -0
- package/dist/cli/commands/index.js.map +1 -1
- package/dist/cli/commands/mcp.d.ts +5 -0
- package/dist/cli/commands/mcp.d.ts.map +1 -1
- package/dist/cli/commands/mcp.js +28 -2
- package/dist/cli/commands/mcp.js.map +1 -1
- package/dist/cli/commands/migrate.d.ts +1 -0
- package/dist/cli/commands/migrate.d.ts.map +1 -1
- package/dist/cli/commands/migrate.js +145 -34
- package/dist/cli/commands/migrate.js.map +1 -1
- package/dist/cli/commands/openapi-3-1.d.ts +34 -0
- package/dist/cli/commands/openapi-3-1.d.ts.map +1 -0
- package/dist/cli/commands/openapi-3-1.js +333 -0
- package/dist/cli/commands/openapi-3-1.js.map +1 -0
- package/dist/cli/commands/start.d.ts +5 -0
- package/dist/cli/commands/start.d.ts.map +1 -1
- package/dist/cli/commands/start.js +20 -2
- package/dist/cli/commands/start.js.map +1 -1
- package/dist/cli/commands/ui.d.ts +11 -0
- package/dist/cli/commands/ui.d.ts.map +1 -1
- package/dist/cli/commands/ui.js +105 -20
- package/dist/cli/commands/ui.js.map +1 -1
- package/dist/cli/commands/verify.d.ts.map +1 -1
- package/dist/cli/commands/verify.js +2 -0
- package/dist/cli/commands/verify.js.map +1 -1
- package/dist/cli/commands/worker.d.ts +5 -0
- package/dist/cli/commands/worker.d.ts.map +1 -1
- package/dist/cli/commands/worker.js +18 -2
- package/dist/cli/commands/worker.js.map +1 -1
- package/dist/cli/index.d.ts +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +1 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/credentials/catalog.d.ts +71 -0
- package/dist/credentials/catalog.d.ts.map +1 -0
- package/dist/credentials/catalog.js +293 -0
- package/dist/credentials/catalog.js.map +1 -0
- package/dist/credentials/index.d.ts +3 -0
- package/dist/credentials/index.d.ts.map +1 -0
- package/dist/credentials/index.js +2 -0
- package/dist/credentials/index.js.map +1 -0
- package/dist/data/drift-inspector.d.ts +1 -4
- package/dist/data/drift-inspector.d.ts.map +1 -1
- package/dist/data/drift-inspector.js +39 -5
- package/dist/data/drift-inspector.js.map +1 -1
- package/dist/data/field-encryption.d.ts +7 -0
- package/dist/data/field-encryption.d.ts.map +1 -1
- package/dist/data/field-encryption.js +35 -17
- package/dist/data/field-encryption.js.map +1 -1
- package/dist/data/framework-migration-rewriter.js +1 -1
- package/dist/data/framework-migration-rewriter.js.map +1 -1
- package/dist/data/index.d.ts +1 -1
- package/dist/data/index.d.ts.map +1 -1
- package/dist/data/index.js +1 -1
- package/dist/data/index.js.map +1 -1
- package/dist/data/mask-fields.d.ts +2 -0
- package/dist/data/mask-fields.d.ts.map +1 -1
- package/dist/data/mask-fields.js +6 -0
- package/dist/data/mask-fields.js.map +1 -1
- package/dist/data/migration.d.ts.map +1 -1
- package/dist/data/migration.js +25 -1
- package/dist/data/migration.js.map +1 -1
- package/dist/data/repository.d.ts.map +1 -1
- package/dist/data/repository.js +15 -3
- package/dist/data/repository.js.map +1 -1
- package/dist/data/schema-generator.d.ts +95 -3
- package/dist/data/schema-generator.d.ts.map +1 -1
- package/dist/data/schema-generator.js +122 -6
- package/dist/data/schema-generator.js.map +1 -1
- package/dist/define/defineCapability.d.ts +7 -0
- package/dist/define/defineCapability.d.ts.map +1 -1
- package/dist/define/defineCapability.js +15 -0
- package/dist/define/defineCapability.js.map +1 -1
- package/dist/define/defineFlow.d.ts +3 -1
- package/dist/define/defineFlow.d.ts.map +1 -1
- package/dist/define/defineFlow.js.map +1 -1
- package/dist/durable/apply-ddl.d.ts +13 -0
- package/dist/durable/apply-ddl.d.ts.map +1 -0
- package/dist/durable/apply-ddl.js +278 -0
- package/dist/durable/apply-ddl.js.map +1 -0
- package/dist/durable/harness.d.ts +31 -0
- package/dist/durable/harness.d.ts.map +1 -0
- package/dist/durable/harness.js +136 -0
- package/dist/durable/harness.js.map +1 -0
- package/dist/durable/index.d.ts +18 -0
- package/dist/durable/index.d.ts.map +1 -0
- package/dist/durable/index.js +16 -0
- package/dist/durable/index.js.map +1 -0
- package/dist/durable/memory-store.d.ts +48 -0
- package/dist/durable/memory-store.d.ts.map +1 -0
- package/dist/durable/memory-store.js +260 -0
- package/dist/durable/memory-store.js.map +1 -0
- package/dist/durable/migrations-path.d.ts +5 -0
- package/dist/durable/migrations-path.d.ts.map +1 -0
- package/dist/durable/migrations-path.js +8 -0
- package/dist/durable/migrations-path.js.map +1 -0
- package/dist/durable/opaque-dispatch.d.ts +7 -0
- package/dist/durable/opaque-dispatch.d.ts.map +1 -0
- package/dist/durable/opaque-dispatch.js +67 -0
- package/dist/durable/opaque-dispatch.js.map +1 -0
- package/dist/durable/persist-before-ack.d.ts +52 -0
- package/dist/durable/persist-before-ack.d.ts.map +1 -0
- package/dist/durable/persist-before-ack.js +153 -0
- package/dist/durable/persist-before-ack.js.map +1 -0
- package/dist/durable/pg-env.d.ts +9 -0
- package/dist/durable/pg-env.d.ts.map +1 -0
- package/dist/durable/pg-env.js +20 -0
- package/dist/durable/pg-env.js.map +1 -0
- package/dist/durable/postgres-persist.d.ts +33 -0
- package/dist/durable/postgres-persist.d.ts.map +1 -0
- package/dist/durable/postgres-persist.js +239 -0
- package/dist/durable/postgres-persist.js.map +1 -0
- package/dist/durable/reconciliation.d.ts +20 -0
- package/dist/durable/reconciliation.d.ts.map +1 -0
- package/dist/durable/reconciliation.js +91 -0
- package/dist/durable/reconciliation.js.map +1 -0
- package/dist/durable/schema.d.ts +1448 -0
- package/dist/durable/schema.d.ts.map +1 -0
- package/dist/durable/schema.js +138 -0
- package/dist/durable/schema.js.map +1 -0
- package/dist/durable/spine-claim.d.ts +16 -0
- package/dist/durable/spine-claim.d.ts.map +1 -0
- package/dist/durable/spine-claim.js +131 -0
- package/dist/durable/spine-claim.js.map +1 -0
- package/dist/durable/types.d.ts +153 -0
- package/dist/durable/types.d.ts.map +1 -0
- package/dist/durable/types.js +114 -0
- package/dist/durable/types.js.map +1 -0
- package/dist/errors/data-errors.d.ts +6 -0
- package/dist/errors/data-errors.d.ts.map +1 -1
- package/dist/errors/data-errors.js +9 -0
- package/dist/errors/data-errors.js.map +1 -1
- package/dist/errors/http.d.ts.map +1 -1
- package/dist/errors/http.js +9 -1
- package/dist/errors/http.js.map +1 -1
- package/dist/errors/index.d.ts +4 -1
- package/dist/errors/index.d.ts.map +1 -1
- package/dist/errors/index.js +11 -1
- package/dist/errors/index.js.map +1 -1
- package/dist/errors-entry.d.ts +1 -1
- package/dist/errors-entry.d.ts.map +1 -1
- package/dist/errors-entry.js +1 -1
- package/dist/errors-entry.js.map +1 -1
- package/dist/events/consumer-registry.d.ts +6 -0
- package/dist/events/consumer-registry.d.ts.map +1 -1
- package/dist/events/consumer-registry.js.map +1 -1
- package/dist/events/dispatcher.d.ts +19 -0
- package/dist/events/dispatcher.d.ts.map +1 -1
- package/dist/events/dispatcher.js +161 -114
- package/dist/events/dispatcher.js.map +1 -1
- package/dist/events/idempotency.d.ts +3 -2
- package/dist/events/idempotency.d.ts.map +1 -1
- package/dist/events/idempotency.js +3 -2
- package/dist/events/idempotency.js.map +1 -1
- package/dist/events/index.d.ts +2 -0
- package/dist/events/index.d.ts.map +1 -1
- package/dist/events/index.js +1 -0
- package/dist/events/index.js.map +1 -1
- package/dist/events/subscription.d.ts +29 -0
- package/dist/events/subscription.d.ts.map +1 -0
- package/dist/events/subscription.js +19 -0
- package/dist/events/subscription.js.map +1 -0
- package/dist/events/worker.d.ts +8 -1
- package/dist/events/worker.d.ts.map +1 -1
- package/dist/events/worker.js +32 -5
- package/dist/events/worker.js.map +1 -1
- package/dist/execution/capability-executor.d.ts +6 -3
- package/dist/execution/capability-executor.d.ts.map +1 -1
- package/dist/execution/capability-executor.js +34 -6
- package/dist/execution/capability-executor.js.map +1 -1
- package/dist/execution/context-deps.d.ts +2 -0
- package/dist/execution/context-deps.d.ts.map +1 -1
- package/dist/execution/context-deps.js +2 -1
- package/dist/execution/context-deps.js.map +1 -1
- package/dist/execution/context-factory.d.ts +38 -1
- package/dist/execution/context-factory.d.ts.map +1 -1
- package/dist/execution/context-factory.js +102 -4
- package/dist/execution/context-factory.js.map +1 -1
- package/dist/execution/index.d.ts +2 -2
- package/dist/execution/index.d.ts.map +1 -1
- package/dist/execution/index.js +1 -1
- package/dist/execution/index.js.map +1 -1
- package/dist/execution/transactional-outbox.d.ts +10 -0
- package/dist/execution/transactional-outbox.d.ts.map +1 -1
- package/dist/execution/transactional-outbox.js +41 -2
- package/dist/execution/transactional-outbox.js.map +1 -1
- package/dist/flows/budget.d.ts +44 -0
- package/dist/flows/budget.d.ts.map +1 -0
- package/dist/flows/budget.js +81 -0
- package/dist/flows/budget.js.map +1 -0
- package/dist/flows/compile-flow.d.ts +23 -0
- package/dist/flows/compile-flow.d.ts.map +1 -0
- package/dist/flows/compile-flow.js +176 -0
- package/dist/flows/compile-flow.js.map +1 -0
- package/dist/flows/compiled-registry.d.ts +43 -0
- package/dist/flows/compiled-registry.d.ts.map +1 -0
- package/dist/flows/compiled-registry.js +198 -0
- package/dist/flows/compiled-registry.js.map +1 -0
- package/dist/flows/dead-letter.d.ts +16 -0
- package/dist/flows/dead-letter.d.ts.map +1 -1
- package/dist/flows/dead-letter.js +67 -0
- package/dist/flows/dead-letter.js.map +1 -1
- package/dist/flows/definition-strategy.d.ts +13 -0
- package/dist/flows/definition-strategy.d.ts.map +1 -0
- package/dist/flows/definition-strategy.js +30 -0
- package/dist/flows/definition-strategy.js.map +1 -0
- package/dist/flows/engine.d.ts +38 -1
- package/dist/flows/engine.d.ts.map +1 -1
- package/dist/flows/engine.js +375 -32
- package/dist/flows/engine.js.map +1 -1
- package/dist/flows/index.d.ts +12 -4
- package/dist/flows/index.d.ts.map +1 -1
- package/dist/flows/index.js +7 -2
- package/dist/flows/index.js.map +1 -1
- package/dist/flows/scheduler.d.ts +26 -0
- package/dist/flows/scheduler.d.ts.map +1 -1
- package/dist/flows/scheduler.js +157 -37
- package/dist/flows/scheduler.js.map +1 -1
- package/dist/flows/schema.d.ts +34 -0
- package/dist/flows/schema.d.ts.map +1 -1
- package/dist/flows/schema.js +4 -0
- package/dist/flows/schema.js.map +1 -1
- package/dist/flows/step-executor.d.ts +3 -0
- package/dist/flows/step-executor.d.ts.map +1 -1
- package/dist/flows/step-executor.js +33 -0
- package/dist/flows/step-executor.js.map +1 -1
- package/dist/governance/capability-source-scan.d.ts.map +1 -1
- package/dist/governance/capability-source-scan.js +2 -29
- package/dist/governance/capability-source-scan.js.map +1 -1
- package/dist/governance/forbidden-path-scan.d.ts +7 -0
- package/dist/governance/forbidden-path-scan.d.ts.map +1 -0
- package/dist/governance/forbidden-path-scan.js +60 -0
- package/dist/governance/forbidden-path-scan.js.map +1 -0
- package/dist/governance/index.d.ts +2 -0
- package/dist/governance/index.d.ts.map +1 -1
- package/dist/governance/index.js +2 -0
- package/dist/governance/index.js.map +1 -1
- package/dist/governance/source-walk.d.ts +3 -0
- package/dist/governance/source-walk.d.ts.map +1 -0
- package/dist/governance/source-walk.js +33 -0
- package/dist/governance/source-walk.js.map +1 -0
- package/dist/index.d.ts +21 -12
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +22 -9
- package/dist/index.js.map +1 -1
- package/dist/runtime/bootstrap.d.ts +3 -1
- package/dist/runtime/bootstrap.d.ts.map +1 -1
- package/dist/runtime/load-extensions.d.ts.map +1 -1
- package/dist/runtime/load-extensions.js +11 -0
- package/dist/runtime/load-extensions.js.map +1 -1
- package/dist/runtime/register-consumers.d.ts +3 -0
- package/dist/runtime/register-consumers.d.ts.map +1 -1
- package/dist/runtime/register-consumers.js +4 -0
- package/dist/runtime/register-consumers.js.map +1 -1
- package/dist/runtime/start-worker-pool.d.ts.map +1 -1
- package/dist/runtime/start-worker-pool.js +1 -0
- package/dist/runtime/start-worker-pool.js.map +1 -1
- package/dist/runtime-entry.d.ts +4 -0
- package/dist/runtime-entry.d.ts.map +1 -0
- package/dist/runtime-entry.js +30 -0
- package/dist/runtime-entry.js.map +1 -0
- package/dist/server/bootstrap.d.ts +116 -8
- package/dist/server/bootstrap.d.ts.map +1 -1
- package/dist/server/bootstrap.js +139 -62
- package/dist/server/bootstrap.js.map +1 -1
- package/dist/tenancy/data-plane-connection.d.ts +108 -0
- package/dist/tenancy/data-plane-connection.d.ts.map +1 -0
- package/dist/tenancy/data-plane-connection.js +320 -0
- package/dist/tenancy/data-plane-connection.js.map +1 -0
- package/dist/tenancy/data-plane-migrate.d.ts +30 -0
- package/dist/tenancy/data-plane-migrate.d.ts.map +1 -0
- package/dist/tenancy/data-plane-migrate.js +44 -0
- package/dist/tenancy/data-plane-migrate.js.map +1 -0
- package/dist/tenancy/data-plane-provisioning.d.ts +135 -0
- package/dist/tenancy/data-plane-provisioning.d.ts.map +1 -0
- package/dist/tenancy/data-plane-provisioning.js +639 -0
- package/dist/tenancy/data-plane-provisioning.js.map +1 -0
- package/dist/tenancy/data-plane-resolver.d.ts +37 -0
- package/dist/tenancy/data-plane-resolver.d.ts.map +1 -0
- package/dist/tenancy/data-plane-resolver.js +302 -0
- package/dist/tenancy/data-plane-resolver.js.map +1 -0
- package/dist/tenancy/index.d.ts +9 -0
- package/dist/tenancy/index.d.ts.map +1 -0
- package/dist/tenancy/index.js +22 -0
- package/dist/tenancy/index.js.map +1 -0
- package/dist/tenancy/types.d.ts +117 -0
- package/dist/tenancy/types.d.ts.map +1 -0
- package/dist/tenancy/types.js +8 -0
- package/dist/tenancy/types.js.map +1 -0
- package/dist/testing/context.d.ts.map +1 -1
- package/dist/testing/context.js +6 -1
- package/dist/testing/context.js.map +1 -1
- package/dist/testing/crash-matrix-simulation.d.ts +51 -0
- package/dist/testing/crash-matrix-simulation.d.ts.map +1 -0
- package/dist/testing/crash-matrix-simulation.js +350 -0
- package/dist/testing/crash-matrix-simulation.js.map +1 -0
- package/dist/testing/scaffolding.d.ts.map +1 -1
- package/dist/testing/scaffolding.js +4 -1
- package/dist/testing/scaffolding.js.map +1 -1
- package/dist/types/capability.d.ts +16 -0
- package/dist/types/capability.d.ts.map +1 -1
- package/dist/types/capability.js.map +1 -1
- package/dist/types/context.d.ts +62 -0
- package/dist/types/context.d.ts.map +1 -1
- package/dist/types/enums.d.ts +2 -0
- package/dist/types/enums.d.ts.map +1 -1
- package/dist/types/enums.js +2 -0
- package/dist/types/enums.js.map +1 -1
- package/dist/types/fields.d.ts +7 -0
- package/dist/types/fields.d.ts.map +1 -1
- package/dist/types/flow.d.ts +96 -1
- package/dist/types/flow.d.ts.map +1 -1
- package/dist/types/flow.js +7 -1
- package/dist/types/flow.js.map +1 -1
- package/dist/types/index.d.ts +9 -6
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +5 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types/prompt.d.ts +8 -0
- package/dist/types/prompt.d.ts.map +1 -1
- package/dist/types/prompt.js +7 -0
- package/dist/types/prompt.js.map +1 -1
- package/dist/worker/bootstrap.d.ts +100 -1
- package/dist/worker/bootstrap.d.ts.map +1 -1
- package/dist/worker/bootstrap.js +155 -14
- package/dist/worker/bootstrap.js.map +1 -1
- package/instructions/api.md +21 -0
- package/instructions/cli.md +15 -9
- package/instructions/deployment.md +27 -25
- package/instructions/flows.md +8 -1
- package/instructions/framework.md +2 -1
- package/instructions/mcp.md +1 -1
- package/instructions/peer-dependencies.md +16 -14
- package/instructions/prompts.md +3 -0
- package/instructions/security.md +4 -0
- package/instructions/testing.md +2 -2
- package/migrations/durable-tenant/0000_durable_tenant.sql +92 -0
- package/migrations/durable-tenant/0001_human_task.sql +45 -0
- package/migrations/durable-tenant/meta/_journal.json +20 -0
- package/migrations/spine/0000_opaque_dispatch.sql +26 -0
- package/migrations/spine/meta/_journal.json +13 -0
- package/package.json +26 -8
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
// Immutable, versioned registry of compiled flow definitions.
|
|
2
|
+
// Keyed by (flowDefinitionId, definitionVersion). Publishing a version
|
|
3
|
+
// a second time is idempotent only when the digest matches.
|
|
4
|
+
// Disk artifacts from `plumbus compile-flows` reload through
|
|
5
|
+
// loadCompiledFlowRegistryFromDirectory so a new process sees the same pins.
|
|
6
|
+
import { existsSync, readdirSync, readFileSync, statSync } from 'node:fs';
|
|
7
|
+
import { join, resolve } from 'node:path';
|
|
8
|
+
import { COMPILED_FLOW_CONTRACT_VERSION, digestCanonicalJson } from './compile-flow.js';
|
|
9
|
+
/** Project-relative default used by `plumbus compile-flows` and boot load. */
|
|
10
|
+
export const DEFAULT_COMPILED_FLOWS_DIRECTORY = '.plumbus/compiled-flows';
|
|
11
|
+
export class CompiledFlowRegistry {
|
|
12
|
+
versions = new Map();
|
|
13
|
+
publishOrder = new Map();
|
|
14
|
+
/**
|
|
15
|
+
* Publish a compiled definition. Same version + same digest is a no-op.
|
|
16
|
+
* Same version + different digest is rejected (immutable retain-all).
|
|
17
|
+
*/
|
|
18
|
+
publish(compiled) {
|
|
19
|
+
const { flowDefinitionId, definitionVersion, definitionDigest } = compiled;
|
|
20
|
+
if (!flowDefinitionId || !definitionVersion || !definitionDigest) {
|
|
21
|
+
throw new Error('Compiled flow definition is missing identity fields');
|
|
22
|
+
}
|
|
23
|
+
let byVersion = this.versions.get(flowDefinitionId);
|
|
24
|
+
if (!byVersion) {
|
|
25
|
+
byVersion = new Map();
|
|
26
|
+
this.versions.set(flowDefinitionId, byVersion);
|
|
27
|
+
}
|
|
28
|
+
const existing = byVersion.get(definitionVersion);
|
|
29
|
+
if (existing) {
|
|
30
|
+
if (existing.definitionDigest !== definitionDigest) {
|
|
31
|
+
throw new Error(`Flow definition "${flowDefinitionId}@${definitionVersion}" is immutable (digest mismatch)`);
|
|
32
|
+
}
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
byVersion.set(definitionVersion, compiled);
|
|
36
|
+
const order = this.publishOrder.get(flowDefinitionId) ?? [];
|
|
37
|
+
order.push(definitionVersion);
|
|
38
|
+
this.publishOrder.set(flowDefinitionId, order);
|
|
39
|
+
}
|
|
40
|
+
get(flowDefinitionId, definitionVersion) {
|
|
41
|
+
return this.versions.get(flowDefinitionId)?.get(definitionVersion);
|
|
42
|
+
}
|
|
43
|
+
/** Most recently published version for this id (not semver-max). */
|
|
44
|
+
getLatest(flowDefinitionId) {
|
|
45
|
+
const latest = this.publishOrder.get(flowDefinitionId)?.at(-1);
|
|
46
|
+
return latest === undefined ? undefined : this.get(flowDefinitionId, latest);
|
|
47
|
+
}
|
|
48
|
+
listVersions(flowDefinitionId) {
|
|
49
|
+
return [...(this.publishOrder.get(flowDefinitionId) ?? [])];
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
function errorCode(err) {
|
|
53
|
+
if (err && typeof err === 'object' && 'code' in err && typeof err.code === 'string') {
|
|
54
|
+
return err.code;
|
|
55
|
+
}
|
|
56
|
+
return undefined;
|
|
57
|
+
}
|
|
58
|
+
function isRecord(value) {
|
|
59
|
+
return !!value && typeof value === 'object' && !Array.isArray(value);
|
|
60
|
+
}
|
|
61
|
+
function readJsonFile(filePath, fileName) {
|
|
62
|
+
try {
|
|
63
|
+
return JSON.parse(readFileSync(filePath, 'utf-8'));
|
|
64
|
+
}
|
|
65
|
+
catch (err) {
|
|
66
|
+
if (err instanceof SyntaxError) {
|
|
67
|
+
throw new Error(`Compiled flow artifact is not valid JSON: ${fileName}`);
|
|
68
|
+
}
|
|
69
|
+
throw err;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Parse one signed artifact. Recomputes `definitionDigest` and refuses a
|
|
74
|
+
* mismatch so a tampered file cannot enter the registry.
|
|
75
|
+
*/
|
|
76
|
+
export function parseCompiledFlowArtifact(value, fileName = 'compiled-flow.json') {
|
|
77
|
+
if (!isRecord(value)) {
|
|
78
|
+
throw new Error(`Compiled flow artifact is missing identity fields: ${fileName}`);
|
|
79
|
+
}
|
|
80
|
+
const { contractVersion, flowDefinitionId, definitionVersion, definitionDigest, domain, name, steps, bindings, } = value;
|
|
81
|
+
if (contractVersion !== COMPILED_FLOW_CONTRACT_VERSION) {
|
|
82
|
+
throw new Error(`Compiled flow artifact contract version is not supported: ${fileName}`);
|
|
83
|
+
}
|
|
84
|
+
if (typeof flowDefinitionId !== 'string' ||
|
|
85
|
+
!flowDefinitionId ||
|
|
86
|
+
typeof definitionVersion !== 'string' ||
|
|
87
|
+
!definitionVersion ||
|
|
88
|
+
typeof definitionDigest !== 'string' ||
|
|
89
|
+
!definitionDigest ||
|
|
90
|
+
typeof domain !== 'string' ||
|
|
91
|
+
!domain ||
|
|
92
|
+
typeof name !== 'string' ||
|
|
93
|
+
!name ||
|
|
94
|
+
!Array.isArray(steps) ||
|
|
95
|
+
!Array.isArray(bindings)) {
|
|
96
|
+
throw new Error(`Compiled flow artifact is missing identity fields: ${fileName}`);
|
|
97
|
+
}
|
|
98
|
+
const { definitionDigest: storedDigest, ...unsigned } = value;
|
|
99
|
+
const computed = digestCanonicalJson(unsigned);
|
|
100
|
+
if (typeof storedDigest !== 'string' || computed !== storedDigest) {
|
|
101
|
+
throw new Error(`Compiled flow artifact digest does not match: ${flowDefinitionId}@${definitionVersion}`);
|
|
102
|
+
}
|
|
103
|
+
return value;
|
|
104
|
+
}
|
|
105
|
+
function listCompiledFlowJsonFiles(directory) {
|
|
106
|
+
const root = resolve(directory);
|
|
107
|
+
let names;
|
|
108
|
+
try {
|
|
109
|
+
names = readdirSync(root);
|
|
110
|
+
}
|
|
111
|
+
catch (err) {
|
|
112
|
+
if (errorCode(err) === 'ENOENT') {
|
|
113
|
+
throw new Error(`Compiled flow directory does not exist: ${directory}`);
|
|
114
|
+
}
|
|
115
|
+
if (errorCode(err) === 'ENOTDIR') {
|
|
116
|
+
throw new Error(`Compiled flow path is not a directory: ${directory}`);
|
|
117
|
+
}
|
|
118
|
+
throw err;
|
|
119
|
+
}
|
|
120
|
+
return names
|
|
121
|
+
.filter((name) => name.endsWith('.json'))
|
|
122
|
+
.filter((name) => {
|
|
123
|
+
try {
|
|
124
|
+
return statSync(join(root, name)).isFile();
|
|
125
|
+
}
|
|
126
|
+
catch {
|
|
127
|
+
return false;
|
|
128
|
+
}
|
|
129
|
+
})
|
|
130
|
+
.sort();
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Load signed JSON from a host-owned directory (the `plumbus compile-flows`
|
|
134
|
+
* output). Each file is digest-checked; a mismatch refuses the whole load.
|
|
135
|
+
*/
|
|
136
|
+
export function loadCompiledFlowRegistryFromDirectory(directory) {
|
|
137
|
+
const trimmed = directory.trim();
|
|
138
|
+
if (!trimmed) {
|
|
139
|
+
throw new Error('Compiled flow directory is required');
|
|
140
|
+
}
|
|
141
|
+
const root = resolve(trimmed);
|
|
142
|
+
const fileNames = listCompiledFlowJsonFiles(root);
|
|
143
|
+
const registry = new CompiledFlowRegistry();
|
|
144
|
+
for (const fileName of fileNames) {
|
|
145
|
+
const parsed = readJsonFile(join(root, fileName), fileName);
|
|
146
|
+
registry.publish(parseCompiledFlowArtifact(parsed, fileName));
|
|
147
|
+
}
|
|
148
|
+
return registry;
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Same as `loadCompiledFlowRegistryFromDirectory`, but a missing or empty
|
|
152
|
+
* directory is "not configured" (`undefined`) so live TypeScript flows stay
|
|
153
|
+
* on. A directory that exists with invalid JSON still throws.
|
|
154
|
+
*/
|
|
155
|
+
export function tryLoadCompiledFlowRegistryFromDirectory(directory) {
|
|
156
|
+
const trimmed = directory.trim();
|
|
157
|
+
if (!trimmed)
|
|
158
|
+
return undefined;
|
|
159
|
+
const root = resolve(trimmed);
|
|
160
|
+
if (!existsSync(root))
|
|
161
|
+
return undefined;
|
|
162
|
+
try {
|
|
163
|
+
if (!statSync(root).isDirectory()) {
|
|
164
|
+
throw new Error(`Compiled flow path is not a directory: ${directory}`);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
catch (err) {
|
|
168
|
+
if (errorCode(err) === 'ENOENT')
|
|
169
|
+
return undefined;
|
|
170
|
+
throw err;
|
|
171
|
+
}
|
|
172
|
+
const fileNames = listCompiledFlowJsonFiles(root);
|
|
173
|
+
if (fileNames.length === 0)
|
|
174
|
+
return undefined;
|
|
175
|
+
return loadCompiledFlowRegistryFromDirectory(root);
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Prefer an explicit registry. Else load `compiledFlowsDirectory` (required
|
|
179
|
+
* when set). Else try `{cwd}/.plumbus/compiled-flows` when that tree has JSON.
|
|
180
|
+
*/
|
|
181
|
+
export function resolveCompiledFlowRegistry(options = {}) {
|
|
182
|
+
if (options.compiledRegistry)
|
|
183
|
+
return options.compiledRegistry;
|
|
184
|
+
if (options.compiledFlowsDirectory !== undefined) {
|
|
185
|
+
const directory = options.compiledFlowsDirectory.trim();
|
|
186
|
+
if (!directory) {
|
|
187
|
+
throw new Error('Compiled flow directory is required');
|
|
188
|
+
}
|
|
189
|
+
const fileNames = listCompiledFlowJsonFiles(resolve(directory));
|
|
190
|
+
if (fileNames.length === 0) {
|
|
191
|
+
throw new Error(`Compiled flow directory has no artifacts: ${directory}`);
|
|
192
|
+
}
|
|
193
|
+
return loadCompiledFlowRegistryFromDirectory(directory);
|
|
194
|
+
}
|
|
195
|
+
const cwd = options.cwd ?? process.cwd();
|
|
196
|
+
return tryLoadCompiledFlowRegistryFromDirectory(join(cwd, DEFAULT_COMPILED_FLOWS_DIRECTORY));
|
|
197
|
+
}
|
|
198
|
+
//# sourceMappingURL=compiled-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compiled-registry.js","sourceRoot":"","sources":["../../src/flows/compiled-registry.ts"],"names":[],"mappings":"AAAA,8DAA8D;AAC9D,uEAAuE;AACvE,4DAA4D;AAC5D,6DAA6D;AAC7D,6EAA6E;AAE7E,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC1E,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,8BAA8B,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAGxF,8EAA8E;AAC9E,MAAM,CAAC,MAAM,gCAAgC,GAAG,yBAAyB,CAAC;AAE1E,MAAM,OAAO,oBAAoB;IACd,QAAQ,GAAG,IAAI,GAAG,EAA+C,CAAC;IAClE,YAAY,GAAG,IAAI,GAAG,EAAoB,CAAC;IAE5D;;;OAGG;IACH,OAAO,CAAC,QAAgC;QACtC,MAAM,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,GAAG,QAAQ,CAAC;QAC3E,IAAI,CAAC,gBAAgB,IAAI,CAAC,iBAAiB,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACjE,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;QACzE,CAAC;QAED,IAAI,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QACpD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,SAAS,GAAG,IAAI,GAAG,EAAE,CAAC;YACtB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC;QACjD,CAAC;QAED,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;QAClD,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,QAAQ,CAAC,gBAAgB,KAAK,gBAAgB,EAAE,CAAC;gBACnD,MAAM,IAAI,KAAK,CACb,oBAAoB,gBAAgB,IAAI,iBAAiB,kCAAkC,CAC5F,CAAC;YACJ,CAAC;YACD,OAAO;QACT,CAAC;QAED,SAAS,CAAC,GAAG,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC;QAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC;QAC5D,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC9B,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;IACjD,CAAC;IAED,GAAG,CAAC,gBAAwB,EAAE,iBAAyB;QACrD,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,GAAG,CAAC,iBAAiB,CAAC,CAAC;IACrE,CAAC;IAED,oEAAoE;IACpE,SAAS,CAAC,gBAAwB;QAChC,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/D,OAAO,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;IAC/E,CAAC;IAED,YAAY,CAAC,gBAAwB;QACnC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAC9D,CAAC;CACF;AAED,SAAS,SAAS,CAAC,GAAY;IAC7B,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,MAAM,IAAI,GAAG,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACpF,OAAO,GAAG,CAAC,IAAI,CAAC;IAClB,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,CAAC,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACvE,CAAC;AAED,SAAS,YAAY,CAAC,QAAgB,EAAE,QAAgB;IACtD,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;IACrD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,WAAW,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,6CAA6C,QAAQ,EAAE,CAAC,CAAC;QAC3E,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,yBAAyB,CACvC,KAAc,EACd,QAAQ,GAAG,oBAAoB;IAE/B,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,sDAAsD,QAAQ,EAAE,CAAC,CAAC;IACpF,CAAC;IAED,MAAM,EACJ,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,MAAM,EACN,IAAI,EACJ,KAAK,EACL,QAAQ,GACT,GAAG,KAAK,CAAC;IAEV,IAAI,eAAe,KAAK,8BAA8B,EAAE,CAAC;QACvD,MAAM,IAAI,KAAK,CAAC,6DAA6D,QAAQ,EAAE,CAAC,CAAC;IAC3F,CAAC;IACD,IACE,OAAO,gBAAgB,KAAK,QAAQ;QACpC,CAAC,gBAAgB;QACjB,OAAO,iBAAiB,KAAK,QAAQ;QACrC,CAAC,iBAAiB;QAClB,OAAO,gBAAgB,KAAK,QAAQ;QACpC,CAAC,gBAAgB;QACjB,OAAO,MAAM,KAAK,QAAQ;QAC1B,CAAC,MAAM;QACP,OAAO,IAAI,KAAK,QAAQ;QACxB,CAAC,IAAI;QACL,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACrB,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EACxB,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,sDAAsD,QAAQ,EAAE,CAAC,CAAC;IACpF,CAAC;IAED,MAAM,EAAE,gBAAgB,EAAE,YAAY,EAAE,GAAG,QAAQ,EAAE,GAAG,KAAK,CAAC;IAC9D,MAAM,QAAQ,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IAC/C,IAAI,OAAO,YAAY,KAAK,QAAQ,IAAI,QAAQ,KAAK,YAAY,EAAE,CAAC;QAClE,MAAM,IAAI,KAAK,CACb,iDAAiD,gBAAgB,IAAI,iBAAiB,EAAE,CACzF,CAAC;IACJ,CAAC;IAED,OAAO,KAA0C,CAAC;AACpD,CAAC;AAED,SAAS,yBAAyB,CAAC,SAAiB;IAClD,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,IAAI,KAAe,CAAC;IACpB,IAAI,CAAC;QACH,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,SAAS,CAAC,GAAG,CAAC,KAAK,QAAQ,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,2CAA2C,SAAS,EAAE,CAAC,CAAC;QAC1E,CAAC;QACD,IAAI,SAAS,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,0CAA0C,SAAS,EAAE,CAAC,CAAC;QACzE,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;IAED,OAAO,KAAK;SACT,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;SACxC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;QACf,IAAI,CAAC;YACH,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAC7C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC,CAAC;SACD,IAAI,EAAE,CAAC;AACZ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qCAAqC,CAAC,SAAiB;IACrE,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC;IACjC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;IACzD,CAAC;IAED,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9B,MAAM,SAAS,GAAG,yBAAyB,CAAC,IAAI,CAAC,CAAC;IAClD,MAAM,QAAQ,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC5C,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAC;QAC5D,QAAQ,CAAC,OAAO,CAAC,yBAAyB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IAChE,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,wCAAwC,CACtD,SAAiB;IAEjB,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC;IACjC,IAAI,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC;IAE/B,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IACxC,IAAI,CAAC;QACH,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CAAC,0CAA0C,SAAS,EAAE,CAAC,CAAC;QACzE,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,SAAS,CAAC,GAAG,CAAC,KAAK,QAAQ;YAAE,OAAO,SAAS,CAAC;QAClD,MAAM,GAAG,CAAC;IACZ,CAAC;IAED,MAAM,SAAS,GAAG,yBAAyB,CAAC,IAAI,CAAC,CAAC;IAClD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC7C,OAAO,qCAAqC,CAAC,IAAI,CAAC,CAAC;AACrD,CAAC;AAQD;;;GAGG;AACH,MAAM,UAAU,2BAA2B,CACzC,UAA8C,EAAE;IAEhD,IAAI,OAAO,CAAC,gBAAgB;QAAE,OAAO,OAAO,CAAC,gBAAgB,CAAC;IAE9D,IAAI,OAAO,CAAC,sBAAsB,KAAK,SAAS,EAAE,CAAC;QACjD,MAAM,SAAS,GAAG,OAAO,CAAC,sBAAsB,CAAC,IAAI,EAAE,CAAC;QACxD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;QACzD,CAAC;QACD,MAAM,SAAS,GAAG,yBAAyB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;QAChE,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,6CAA6C,SAAS,EAAE,CAAC,CAAC;QAC5E,CAAC;QACD,OAAO,qCAAqC,CAAC,SAAS,CAAC,CAAC;IAC1D,CAAC;IAED,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACzC,OAAO,wCAAwC,CAAC,IAAI,CAAC,GAAG,EAAE,gCAAgC,CAAC,CAAC,CAAC;AAC/F,CAAC"}
|
|
@@ -1,4 +1,14 @@
|
|
|
1
1
|
import type { PostgresJsDatabase } from 'drizzle-orm/postgres-js';
|
|
2
|
+
export interface OperatorRetryOptions {
|
|
3
|
+
actor: string;
|
|
4
|
+
reason?: string;
|
|
5
|
+
}
|
|
6
|
+
export interface OperatorRetryResult {
|
|
7
|
+
executionId: string;
|
|
8
|
+
flowName: string;
|
|
9
|
+
retriedBy: string;
|
|
10
|
+
retriedAt: string;
|
|
11
|
+
}
|
|
2
12
|
/**
|
|
3
13
|
* Moves failed flow executions to the dead-letter table.
|
|
4
14
|
* Call this after a flow has exhausted retries and entered Failed status.
|
|
@@ -9,4 +19,10 @@ export declare function deadLetterFlow(db: PostgresJsDatabase, executionId: stri
|
|
|
9
19
|
* Returns the number of executions moved.
|
|
10
20
|
*/
|
|
11
21
|
export declare function sweepFailedFlows(db: PostgresJsDatabase, limit?: number): Promise<number>;
|
|
22
|
+
/**
|
|
23
|
+
* Operator recovery: reset a dead-lettered execution so it can run again.
|
|
24
|
+
* Attribution is recorded on the dead-letter row and execution state.
|
|
25
|
+
* Failed → Created is an operator exception (not a normal state-machine edge).
|
|
26
|
+
*/
|
|
27
|
+
export declare function retryDeadLetteredFlow(db: PostgresJsDatabase, executionId: string, opts: OperatorRetryOptions): Promise<OperatorRetryResult>;
|
|
12
28
|
//# sourceMappingURL=dead-letter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dead-letter.d.ts","sourceRoot":"","sources":["../../src/flows/dead-letter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAIlE;;;GAGG;AACH,wBAAsB,cAAc,CAAC,EAAE,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAoC/F;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,EAAE,EAAE,kBAAkB,EAAE,KAAK,SAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAkB3F"}
|
|
1
|
+
{"version":3,"file":"dead-letter.d.ts","sourceRoot":"","sources":["../../src/flows/dead-letter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAIlE,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAAC,EAAE,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAoC/F;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,EAAE,EAAE,kBAAkB,EAAE,KAAK,SAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAkB3F;AAED;;;;GAIG;AACH,wBAAsB,qBAAqB,CACzC,EAAE,EAAE,kBAAkB,EACtB,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,oBAAoB,GACzB,OAAO,CAAC,mBAAmB,CAAC,CAuE9B"}
|
|
@@ -60,4 +60,71 @@ export async function sweepFailedFlows(db, limit = 100) {
|
|
|
60
60
|
}
|
|
61
61
|
return moved;
|
|
62
62
|
}
|
|
63
|
+
/**
|
|
64
|
+
* Operator recovery: reset a dead-lettered execution so it can run again.
|
|
65
|
+
* Attribution is recorded on the dead-letter row and execution state.
|
|
66
|
+
* Failed → Created is an operator exception (not a normal state-machine edge).
|
|
67
|
+
*/
|
|
68
|
+
export async function retryDeadLetteredFlow(db, executionId, opts) {
|
|
69
|
+
if (!opts.actor?.trim()) {
|
|
70
|
+
throw new Error('Operator retry requires an actor');
|
|
71
|
+
}
|
|
72
|
+
const dlqRows = await db
|
|
73
|
+
.select()
|
|
74
|
+
.from(flowDeadLetterTable)
|
|
75
|
+
.where(eq(flowDeadLetterTable.executionId, executionId))
|
|
76
|
+
.limit(1);
|
|
77
|
+
const dlq = dlqRows[0];
|
|
78
|
+
if (!dlq) {
|
|
79
|
+
throw new Error(`Dead-letter row for execution "${executionId}" not found`);
|
|
80
|
+
}
|
|
81
|
+
const existingMeta = dlq.metadata && typeof dlq.metadata === 'object' && !Array.isArray(dlq.metadata)
|
|
82
|
+
? dlq.metadata
|
|
83
|
+
: {};
|
|
84
|
+
if (existingMeta.retriedAt) {
|
|
85
|
+
throw new Error(`Execution "${executionId}" was already retried by ${String(existingMeta.retriedBy)}`);
|
|
86
|
+
}
|
|
87
|
+
const execRows = await db
|
|
88
|
+
.select()
|
|
89
|
+
.from(flowExecutionsTable)
|
|
90
|
+
.where(eq(flowExecutionsTable.id, executionId))
|
|
91
|
+
.limit(1);
|
|
92
|
+
const row = execRows[0];
|
|
93
|
+
if (!row)
|
|
94
|
+
throw new Error(`Flow execution "${executionId}" not found`);
|
|
95
|
+
const retriedAt = new Date().toISOString();
|
|
96
|
+
const attribution = {
|
|
97
|
+
retriedBy: opts.actor,
|
|
98
|
+
retriedAt,
|
|
99
|
+
reason: opts.reason ?? 'operator-retry',
|
|
100
|
+
};
|
|
101
|
+
const priorState = row.state && typeof row.state === 'object' && !Array.isArray(row.state)
|
|
102
|
+
? row.state
|
|
103
|
+
: {};
|
|
104
|
+
await db
|
|
105
|
+
.update(flowExecutionsTable)
|
|
106
|
+
.set({
|
|
107
|
+
status: FlowStatus.Created,
|
|
108
|
+
retryCount: 0,
|
|
109
|
+
lastError: null,
|
|
110
|
+
completedAt: null,
|
|
111
|
+
leaseOwner: null,
|
|
112
|
+
leaseExpiresAt: null,
|
|
113
|
+
state: { ...priorState, __operatorRetry: attribution },
|
|
114
|
+
updatedAt: new Date(),
|
|
115
|
+
})
|
|
116
|
+
.where(eq(flowExecutionsTable.id, executionId));
|
|
117
|
+
await db
|
|
118
|
+
.update(flowDeadLetterTable)
|
|
119
|
+
.set({
|
|
120
|
+
metadata: { ...existingMeta, ...attribution },
|
|
121
|
+
})
|
|
122
|
+
.where(eq(flowDeadLetterTable.executionId, executionId));
|
|
123
|
+
return {
|
|
124
|
+
executionId,
|
|
125
|
+
flowName: row.flowName,
|
|
126
|
+
retriedBy: opts.actor,
|
|
127
|
+
retriedAt,
|
|
128
|
+
};
|
|
129
|
+
}
|
|
63
130
|
//# sourceMappingURL=dead-letter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dead-letter.js","sourceRoot":"","sources":["../../src/flows/dead-letter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAEjC,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"dead-letter.js","sourceRoot":"","sources":["../../src/flows/dead-letter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { PlumbusError } from '../errors/plumbus-error.js';
|
|
2
|
+
export declare const DEFINITION_STRATEGY_NOT_SUPPORTED: "definition-strategy-not-supported";
|
|
3
|
+
export declare const DefinitionInFlightStrategy: {
|
|
4
|
+
readonly CompleteOnOriginal: "complete-on-original";
|
|
5
|
+
readonly StopAndRecover: "stop-and-recover";
|
|
6
|
+
readonly Migrate: "migrate";
|
|
7
|
+
};
|
|
8
|
+
export type DefinitionInFlightStrategy = (typeof DefinitionInFlightStrategy)[keyof typeof DefinitionInFlightStrategy];
|
|
9
|
+
export declare class DefinitionStrategyNotSupportedError extends PlumbusError {
|
|
10
|
+
constructor(strategy: string);
|
|
11
|
+
}
|
|
12
|
+
export declare function assertSupportedDefinitionStrategy(strategy: string): asserts strategy is Exclude<DefinitionInFlightStrategy, typeof DefinitionInFlightStrategy.Migrate>;
|
|
13
|
+
//# sourceMappingURL=definition-strategy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"definition-strategy.d.ts","sourceRoot":"","sources":["../../src/flows/definition-strategy.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAG1D,eAAO,MAAM,iCAAiC,EAAG,mCAA4C,CAAC;AAE9F,eAAO,MAAM,0BAA0B;;;;CAI7B,CAAC;AAEX,MAAM,MAAM,0BAA0B,GACpC,CAAC,OAAO,0BAA0B,CAAC,CAAC,MAAM,OAAO,0BAA0B,CAAC,CAAC;AAE/E,qBAAa,mCAAoC,SAAQ,YAAY;gBACvD,QAAQ,EAAE,MAAM;CAO7B;AAED,wBAAgB,iCAAiC,CAC/C,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,QAAQ,IAAI,OAAO,CAC5B,0BAA0B,EAC1B,OAAO,0BAA0B,CAAC,OAAO,CAC1C,CAUA"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
// In-flight definition strategies.
|
|
2
|
+
// v1 implements complete-on-original and stop-and-recover.
|
|
3
|
+
// migrate is refused with a stable error — not a silent no-op.
|
|
4
|
+
import { PlumbusError } from '../errors/plumbus-error.js';
|
|
5
|
+
import { ErrorCode } from '../types/enums.js';
|
|
6
|
+
export const DEFINITION_STRATEGY_NOT_SUPPORTED = 'definition-strategy-not-supported';
|
|
7
|
+
export const DefinitionInFlightStrategy = {
|
|
8
|
+
CompleteOnOriginal: 'complete-on-original',
|
|
9
|
+
StopAndRecover: 'stop-and-recover',
|
|
10
|
+
Migrate: 'migrate',
|
|
11
|
+
};
|
|
12
|
+
export class DefinitionStrategyNotSupportedError extends PlumbusError {
|
|
13
|
+
constructor(strategy) {
|
|
14
|
+
super(ErrorCode.Validation, `Definition in-flight strategy "${strategy}" is not supported`, {
|
|
15
|
+
reason: DEFINITION_STRATEGY_NOT_SUPPORTED,
|
|
16
|
+
strategy,
|
|
17
|
+
});
|
|
18
|
+
this.name = 'DefinitionStrategyNotSupportedError';
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
export function assertSupportedDefinitionStrategy(strategy) {
|
|
22
|
+
if (strategy === DefinitionInFlightStrategy.Migrate || strategy === 'migrate') {
|
|
23
|
+
throw new DefinitionStrategyNotSupportedError(DefinitionInFlightStrategy.Migrate);
|
|
24
|
+
}
|
|
25
|
+
if (strategy !== DefinitionInFlightStrategy.CompleteOnOriginal &&
|
|
26
|
+
strategy !== DefinitionInFlightStrategy.StopAndRecover) {
|
|
27
|
+
throw new DefinitionStrategyNotSupportedError(strategy);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=definition-strategy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"definition-strategy.js","sourceRoot":"","sources":["../../src/flows/definition-strategy.ts"],"names":[],"mappings":"AAAA,mCAAmC;AACnC,2DAA2D;AAC3D,+DAA+D;AAE/D,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE9C,MAAM,CAAC,MAAM,iCAAiC,GAAG,mCAA4C,CAAC;AAE9F,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACxC,kBAAkB,EAAE,sBAAsB;IAC1C,cAAc,EAAE,kBAAkB;IAClC,OAAO,EAAE,SAAS;CACV,CAAC;AAKX,MAAM,OAAO,mCAAoC,SAAQ,YAAY;IACnE,YAAY,QAAgB;QAC1B,KAAK,CAAC,SAAS,CAAC,UAAU,EAAE,kCAAkC,QAAQ,oBAAoB,EAAE;YAC1F,MAAM,EAAE,iCAAiC;YACzC,QAAQ;SACT,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,GAAG,qCAAqC,CAAC;IACpD,CAAC;CACF;AAED,MAAM,UAAU,iCAAiC,CAC/C,QAAgB;IAKhB,IAAI,QAAQ,KAAK,0BAA0B,CAAC,OAAO,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC9E,MAAM,IAAI,mCAAmC,CAAC,0BAA0B,CAAC,OAAO,CAAC,CAAC;IACpF,CAAC;IACD,IACE,QAAQ,KAAK,0BAA0B,CAAC,kBAAkB;QAC1D,QAAQ,KAAK,0BAA0B,CAAC,cAAc,EACtD,CAAC;QACD,MAAM,IAAI,mCAAmC,CAAC,QAAQ,CAAC,CAAC;IAC1D,CAAC;AACH,CAAC"}
|
package/dist/flows/engine.d.ts
CHANGED
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
import type { PostgresJsDatabase } from 'drizzle-orm/postgres-js';
|
|
2
|
+
import type { ApprovalService } from '../approvals/types.js';
|
|
2
3
|
import type { EventQueue } from '../events/queue.js';
|
|
3
4
|
import type { AuditService } from '../types/audit.js';
|
|
4
5
|
import type { DataService, EventService, ExecutionContext, FlowExecution, LoggerService } from '../types/context.js';
|
|
5
6
|
import type { AuthContext } from '../types/security.js';
|
|
7
|
+
import type { DataPlaneResolver } from '../tenancy/types.js';
|
|
8
|
+
import type { CompiledFlowRegistry } from './compiled-registry.js';
|
|
9
|
+
import { type DefinitionInFlightStrategy as DefinitionInFlightStrategyName } from './definition-strategy.js';
|
|
6
10
|
import type { FlowRegistry } from './registry.js';
|
|
7
11
|
import { type StepExecutorDeps } from './step-executor.js';
|
|
8
12
|
export interface FlowEngineConfig {
|
|
@@ -44,6 +48,27 @@ export interface FlowEngineConfig {
|
|
|
44
48
|
* land in the same `[plumbus:worker]` stream as everything else.
|
|
45
49
|
*/
|
|
46
50
|
logger?: LoggerService;
|
|
51
|
+
/**
|
|
52
|
+
* Protocol A: claim wake-ups from a spine database, then load tenant-local
|
|
53
|
+
* flow_executions / execution_state via the resolver. Omitted, the engine
|
|
54
|
+
* keeps today's single-database claim loop on `flow_executions`.
|
|
55
|
+
*/
|
|
56
|
+
spineDispatch?: FlowSpineDispatchConfig;
|
|
57
|
+
/**
|
|
58
|
+
* Optional compiled-definition registry. When set,
|
|
59
|
+
* the engine consumes compiled JSON (not live TypeScript steps):
|
|
60
|
+
* `start` requires a published version and pins it on `flow_executions`.
|
|
61
|
+
* Omitted: existing live-TS `FlowRegistry` path is unchanged.
|
|
62
|
+
*/
|
|
63
|
+
compiledRegistry?: CompiledFlowRegistry;
|
|
64
|
+
/** Stage 4 approval service — required for `approval-outcome` steps. */
|
|
65
|
+
approvals?: ApprovalService;
|
|
66
|
+
}
|
|
67
|
+
export interface FlowSpineDispatchConfig {
|
|
68
|
+
db: PostgresJsDatabase;
|
|
69
|
+
resolver: DataPlaneResolver;
|
|
70
|
+
/** Schema holding tenant durable tables. Default `core_plumbus`. */
|
|
71
|
+
coreSchema?: string;
|
|
47
72
|
}
|
|
48
73
|
interface FlowExecutionRow {
|
|
49
74
|
id: string;
|
|
@@ -68,6 +93,8 @@ interface FlowExecutionRow {
|
|
|
68
93
|
completedAt: Date | null;
|
|
69
94
|
leaseOwner: string | null;
|
|
70
95
|
leaseExpiresAt: Date | null;
|
|
96
|
+
definitionVersion: string | null;
|
|
97
|
+
definitionDigest: string | null;
|
|
71
98
|
}
|
|
72
99
|
/**
|
|
73
100
|
* Generate a deterministic-ish worker id for the current process.
|
|
@@ -92,9 +119,19 @@ export declare function createFlowEngine(config: FlowEngineConfig): {
|
|
|
92
119
|
listRunnable: (limit?: number) => Promise<string[]>;
|
|
93
120
|
claimNext: (batchSize?: number) => Promise<FlowExecutionRow[]>;
|
|
94
121
|
claimExecution: (executionId: string) => Promise<FlowExecutionRow | undefined>;
|
|
95
|
-
cancel: (executionId: string
|
|
122
|
+
cancel: (executionId: string, opts?: {
|
|
123
|
+
actor?: string;
|
|
124
|
+
skipCompensation?: boolean;
|
|
125
|
+
}) => Promise<void>;
|
|
126
|
+
terminate: (executionId: string, opts?: {
|
|
127
|
+
actor?: string;
|
|
128
|
+
}) => Promise<void>;
|
|
96
129
|
status: (executionId: string) => Promise<FlowExecution>;
|
|
97
130
|
markFailedFromRunner: (executionId: string, error: unknown) => Promise<boolean>;
|
|
131
|
+
applyDefinitionStrategy: (executionId: string, strategy: string) => Promise<{
|
|
132
|
+
strategy: DefinitionInFlightStrategyName;
|
|
133
|
+
applied: true;
|
|
134
|
+
}>;
|
|
98
135
|
readonly workerId: string;
|
|
99
136
|
};
|
|
100
137
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/flows/engine.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/flows/engine.ts"],"names":[],"mappings":"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"}
|