@smthrs/control 0.0.0-stage → 1.0.0-rc.3
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 +194 -0
- package/LICENSE +21 -0
- package/README.md +168 -2
- package/dist/cjs/ApprovalAuthority.d.ts +73 -0
- package/dist/cjs/ApprovalAuthority.d.ts.map +1 -0
- package/dist/cjs/ApprovalAuthority.js +62 -0
- package/dist/cjs/ApprovalAuthority.js.map +7 -0
- package/dist/cjs/Cancellation.d.ts +107 -0
- package/dist/cjs/Cancellation.d.ts.map +1 -0
- package/dist/cjs/Cancellation.js +72 -0
- package/dist/cjs/Cancellation.js.map +7 -0
- package/dist/cjs/Channels.d.ts +170 -0
- package/dist/cjs/Channels.d.ts.map +1 -0
- package/dist/cjs/Channels.js +278 -0
- package/dist/cjs/Channels.js.map +7 -0
- package/dist/cjs/Control.d.ts +202 -0
- package/dist/cjs/Control.d.ts.map +1 -0
- package/dist/cjs/Control.js +47 -0
- package/dist/cjs/Control.js.map +7 -0
- package/dist/cjs/ControlClient.d.ts +52 -0
- package/dist/cjs/ControlClient.d.ts.map +1 -0
- package/dist/cjs/ControlClient.js +191 -0
- package/dist/cjs/ControlClient.js.map +7 -0
- package/dist/cjs/ControlError.d.ts +318 -0
- package/dist/cjs/ControlError.d.ts.map +1 -0
- package/dist/cjs/ControlError.js +249 -0
- package/dist/cjs/ControlError.js.map +7 -0
- package/dist/cjs/ControlExecutor.d.ts +372 -0
- package/dist/cjs/ControlExecutor.d.ts.map +1 -0
- package/dist/cjs/ControlExecutor.js +123 -0
- package/dist/cjs/ControlExecutor.js.map +7 -0
- package/dist/cjs/ControlFacts.d.ts +454 -0
- package/dist/cjs/ControlFacts.d.ts.map +1 -0
- package/dist/cjs/ControlFacts.js +261 -0
- package/dist/cjs/ControlFacts.js.map +7 -0
- package/dist/cjs/ControlLive.d.ts +23 -0
- package/dist/cjs/ControlLive.d.ts.map +1 -0
- package/dist/cjs/ControlLive.js +1280 -0
- package/dist/cjs/ControlLive.js.map +7 -0
- package/dist/cjs/ControlRpcs.d.ts +1204 -0
- package/dist/cjs/ControlRpcs.d.ts.map +1 -0
- package/dist/cjs/ControlRpcs.js +247 -0
- package/dist/cjs/ControlRpcs.js.map +7 -0
- package/dist/cjs/ControlRuntime.d.ts +635 -0
- package/dist/cjs/ControlRuntime.d.ts.map +1 -0
- package/dist/cjs/ControlRuntime.js +740 -0
- package/dist/cjs/ControlRuntime.js.map +7 -0
- package/dist/cjs/ControlSchema.d.ts +2642 -0
- package/dist/cjs/ControlSchema.d.ts.map +1 -0
- package/dist/cjs/ControlSchema.js +634 -0
- package/dist/cjs/ControlSchema.js.map +7 -0
- package/dist/cjs/ControlServer.d.ts +51 -0
- package/dist/cjs/ControlServer.d.ts.map +1 -0
- package/dist/cjs/ControlServer.js +121 -0
- package/dist/cjs/ControlServer.js.map +7 -0
- package/dist/cjs/Credential.d.ts +136 -0
- package/dist/cjs/Credential.d.ts.map +1 -0
- package/dist/cjs/Credential.js +168 -0
- package/dist/cjs/Credential.js.map +7 -0
- package/dist/cjs/CredentialCipher.d.ts +90 -0
- package/dist/cjs/CredentialCipher.d.ts.map +1 -0
- package/dist/cjs/CredentialCipher.js +45 -0
- package/dist/cjs/CredentialCipher.js.map +7 -0
- package/dist/cjs/CredentialStore.d.ts +97 -0
- package/dist/cjs/CredentialStore.d.ts.map +1 -0
- package/dist/cjs/CredentialStore.js +81 -0
- package/dist/cjs/CredentialStore.js.map +7 -0
- package/dist/cjs/DispatchReader.d.ts +112 -0
- package/dist/cjs/DispatchReader.d.ts.map +1 -0
- package/dist/cjs/DispatchReader.js +45 -0
- package/dist/cjs/DispatchReader.js.map +7 -0
- package/dist/cjs/Health.d.ts +333 -0
- package/dist/cjs/Health.d.ts.map +1 -0
- package/dist/cjs/Health.js +311 -0
- package/dist/cjs/Health.js.map +7 -0
- package/dist/cjs/JevSessionChecker.d.ts +57 -0
- package/dist/cjs/JevSessionChecker.d.ts.map +1 -0
- package/dist/cjs/JevSessionChecker.js +113 -0
- package/dist/cjs/JevSessionChecker.js.map +7 -0
- package/dist/cjs/Lineage.d.ts +131 -0
- package/dist/cjs/Lineage.d.ts.map +1 -0
- package/dist/cjs/Lineage.js +81 -0
- package/dist/cjs/Lineage.js.map +7 -0
- package/dist/cjs/Migrations.d.ts +34 -0
- package/dist/cjs/Migrations.d.ts.map +1 -0
- package/dist/cjs/Migrations.js +60 -0
- package/dist/cjs/Migrations.js.map +7 -0
- package/dist/cjs/Monitor.d.ts +282 -0
- package/dist/cjs/Monitor.d.ts.map +1 -0
- package/dist/cjs/Monitor.js +283 -0
- package/dist/cjs/Monitor.js.map +7 -0
- package/dist/cjs/ScopedToken.d.ts +193 -0
- package/dist/cjs/ScopedToken.d.ts.map +1 -0
- package/dist/cjs/ScopedToken.js +135 -0
- package/dist/cjs/ScopedToken.js.map +7 -0
- package/dist/cjs/SqlControlRuntime.d.ts +161 -0
- package/dist/cjs/SqlControlRuntime.d.ts.map +1 -0
- package/dist/cjs/SqlControlRuntime.js +1521 -0
- package/dist/cjs/SqlControlRuntime.js.map +7 -0
- package/dist/cjs/SqlCredentialStore.d.ts +43 -0
- package/dist/cjs/SqlCredentialStore.d.ts.map +1 -0
- package/dist/cjs/SqlCredentialStore.js +113 -0
- package/dist/cjs/SqlCredentialStore.js.map +7 -0
- package/dist/cjs/Steering.d.ts +69 -0
- package/dist/cjs/Steering.d.ts.map +1 -0
- package/dist/cjs/Steering.js +49 -0
- package/dist/cjs/Steering.js.map +7 -0
- package/dist/cjs/SystemFlows.d.ts +223 -0
- package/dist/cjs/SystemFlows.d.ts.map +1 -0
- package/dist/cjs/SystemFlows.js +195 -0
- package/dist/cjs/SystemFlows.js.map +7 -0
- package/dist/cjs/WebCryptoCipher.d.ts +49 -0
- package/dist/cjs/WebCryptoCipher.d.ts.map +1 -0
- package/dist/cjs/WebCryptoCipher.js +129 -0
- package/dist/cjs/WebCryptoCipher.js.map +7 -0
- package/dist/cjs/WebhookChannel.d.ts +113 -0
- package/dist/cjs/WebhookChannel.d.ts.map +1 -0
- package/dist/cjs/WebhookChannel.js +98 -0
- package/dist/cjs/WebhookChannel.js.map +7 -0
- package/dist/cjs/index.d.ts +160 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +91 -0
- package/dist/cjs/index.js.map +7 -0
- package/dist/cjs/internal/MutationBoundary.d.ts +27 -0
- package/dist/cjs/internal/MutationBoundary.d.ts.map +1 -0
- package/dist/cjs/internal/MutationBoundary.js +50 -0
- package/dist/cjs/internal/MutationBoundary.js.map +7 -0
- package/dist/cjs/internal/activeFibers.d.ts +12 -0
- package/dist/cjs/internal/activeFibers.d.ts.map +1 -0
- package/dist/cjs/internal/activeFibers.js +30 -0
- package/dist/cjs/internal/activeFibers.js.map +7 -0
- package/dist/cjs/internal/issues.d.ts +28 -0
- package/dist/cjs/internal/issues.d.ts.map +1 -0
- package/dist/cjs/internal/issues.js +34 -0
- package/dist/cjs/internal/issues.js.map +7 -0
- package/dist/cjs/internal/planning.d.ts +347 -0
- package/dist/cjs/internal/planning.d.ts.map +1 -0
- package/dist/cjs/internal/planning.js +137 -0
- package/dist/cjs/internal/planning.js.map +7 -0
- package/dist/cjs/internal/sqlSchemaErrors.d.ts +18 -0
- package/dist/cjs/internal/sqlSchemaErrors.d.ts.map +1 -0
- package/dist/cjs/internal/sqlSchemaErrors.js +40 -0
- package/dist/cjs/internal/sqlSchemaErrors.js.map +7 -0
- package/dist/cjs/migrations/0001_control_tables.d.ts +18 -0
- package/dist/cjs/migrations/0001_control_tables.d.ts.map +1 -0
- package/dist/cjs/migrations/0001_control_tables.js +115 -0
- package/dist/cjs/migrations/0001_control_tables.js.map +7 -0
- package/dist/cjs/migrations/0002_run_keys.d.ts +15 -0
- package/dist/cjs/migrations/0002_run_keys.d.ts.map +1 -0
- package/dist/cjs/migrations/0002_run_keys.js +44 -0
- package/dist/cjs/migrations/0002_run_keys.js.map +7 -0
- package/dist/cjs/migrations/0003_signal_commands.d.ts +13 -0
- package/dist/cjs/migrations/0003_signal_commands.d.ts.map +1 -0
- package/dist/cjs/migrations/0003_signal_commands.js +50 -0
- package/dist/cjs/migrations/0003_signal_commands.js.map +7 -0
- package/dist/cjs/migrations/0004_approval_decisions.d.ts +13 -0
- package/dist/cjs/migrations/0004_approval_decisions.d.ts.map +1 -0
- package/dist/cjs/migrations/0004_approval_decisions.js +45 -0
- package/dist/cjs/migrations/0004_approval_decisions.js.map +7 -0
- package/dist/cjs/migrations/0005_signal_principals.d.ts +18 -0
- package/dist/cjs/migrations/0005_signal_principals.d.ts.map +1 -0
- package/dist/cjs/migrations/0005_signal_principals.js +45 -0
- package/dist/cjs/migrations/0005_signal_principals.js.map +7 -0
- package/dist/cjs/migrations/0006_run_principals.d.ts +18 -0
- package/dist/cjs/migrations/0006_run_principals.d.ts.map +1 -0
- package/dist/cjs/migrations/0006_run_principals.js +49 -0
- package/dist/cjs/migrations/0006_run_principals.js.map +7 -0
- package/dist/cjs/migrations/0007_resume_consent.d.ts +18 -0
- package/dist/cjs/migrations/0007_resume_consent.d.ts.map +1 -0
- package/dist/cjs/migrations/0007_resume_consent.js +46 -0
- package/dist/cjs/migrations/0007_resume_consent.js.map +7 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/test/TestControl.d.ts +19 -0
- package/dist/cjs/test/TestControl.d.ts.map +1 -0
- package/dist/cjs/test/TestControl.js +62 -0
- package/dist/cjs/test/TestControl.js.map +7 -0
- package/dist/esm/ApprovalAuthority.d.ts +73 -0
- package/dist/esm/ApprovalAuthority.d.ts.map +1 -0
- package/dist/esm/ApprovalAuthority.js +72 -0
- package/dist/esm/ApprovalAuthority.js.map +1 -0
- package/dist/esm/Cancellation.d.ts +107 -0
- package/dist/esm/Cancellation.d.ts.map +1 -0
- package/dist/esm/Cancellation.js +116 -0
- package/dist/esm/Cancellation.js.map +1 -0
- package/dist/esm/Channels.d.ts +170 -0
- package/dist/esm/Channels.d.ts.map +1 -0
- package/dist/esm/Channels.js +312 -0
- package/dist/esm/Channels.js.map +1 -0
- package/dist/esm/Control.d.ts +202 -0
- package/dist/esm/Control.d.ts.map +1 -0
- package/dist/esm/Control.js +42 -0
- package/dist/esm/Control.js.map +1 -0
- package/dist/esm/ControlClient.d.ts +52 -0
- package/dist/esm/ControlClient.d.ts.map +1 -0
- package/dist/esm/ControlClient.js +217 -0
- package/dist/esm/ControlClient.js.map +1 -0
- package/dist/esm/ControlError.d.ts +318 -0
- package/dist/esm/ControlError.d.ts.map +1 -0
- package/dist/esm/ControlError.js +359 -0
- package/dist/esm/ControlError.js.map +1 -0
- package/dist/esm/ControlExecutor.d.ts +372 -0
- package/dist/esm/ControlExecutor.d.ts.map +1 -0
- package/dist/esm/ControlExecutor.js +212 -0
- package/dist/esm/ControlExecutor.js.map +1 -0
- package/dist/esm/ControlFacts.d.ts +454 -0
- package/dist/esm/ControlFacts.d.ts.map +1 -0
- package/dist/esm/ControlFacts.js +324 -0
- package/dist/esm/ControlFacts.js.map +1 -0
- package/dist/esm/ControlLive.d.ts +23 -0
- package/dist/esm/ControlLive.d.ts.map +1 -0
- package/dist/esm/ControlLive.js +1585 -0
- package/dist/esm/ControlLive.js.map +1 -0
- package/dist/esm/ControlRpcs.d.ts +1204 -0
- package/dist/esm/ControlRpcs.d.ts.map +1 -0
- package/dist/esm/ControlRpcs.js +299 -0
- package/dist/esm/ControlRpcs.js.map +1 -0
- package/dist/esm/ControlRuntime.d.ts +635 -0
- package/dist/esm/ControlRuntime.d.ts.map +1 -0
- package/dist/esm/ControlRuntime.js +807 -0
- package/dist/esm/ControlRuntime.js.map +1 -0
- package/dist/esm/ControlSchema.d.ts +2642 -0
- package/dist/esm/ControlSchema.d.ts.map +1 -0
- package/dist/esm/ControlSchema.js +1030 -0
- package/dist/esm/ControlSchema.js.map +1 -0
- package/dist/esm/ControlServer.d.ts +51 -0
- package/dist/esm/ControlServer.d.ts.map +1 -0
- package/dist/esm/ControlServer.js +145 -0
- package/dist/esm/ControlServer.js.map +1 -0
- package/dist/esm/Credential.d.ts +136 -0
- package/dist/esm/Credential.d.ts.map +1 -0
- package/dist/esm/Credential.js +190 -0
- package/dist/esm/Credential.js.map +1 -0
- package/dist/esm/CredentialCipher.d.ts +90 -0
- package/dist/esm/CredentialCipher.d.ts.map +1 -0
- package/dist/esm/CredentialCipher.js +56 -0
- package/dist/esm/CredentialCipher.js.map +1 -0
- package/dist/esm/CredentialStore.d.ts +97 -0
- package/dist/esm/CredentialStore.d.ts.map +1 -0
- package/dist/esm/CredentialStore.js +101 -0
- package/dist/esm/CredentialStore.js.map +1 -0
- package/dist/esm/DispatchReader.d.ts +112 -0
- package/dist/esm/DispatchReader.d.ts.map +1 -0
- package/dist/esm/DispatchReader.js +76 -0
- package/dist/esm/DispatchReader.js.map +1 -0
- package/dist/esm/Health.d.ts +333 -0
- package/dist/esm/Health.d.ts.map +1 -0
- package/dist/esm/Health.js +400 -0
- package/dist/esm/Health.js.map +1 -0
- package/dist/esm/JevSessionChecker.d.ts +57 -0
- package/dist/esm/JevSessionChecker.d.ts.map +1 -0
- package/dist/esm/JevSessionChecker.js +108 -0
- package/dist/esm/JevSessionChecker.js.map +1 -0
- package/dist/esm/Lineage.d.ts +131 -0
- package/dist/esm/Lineage.d.ts.map +1 -0
- package/dist/esm/Lineage.js +174 -0
- package/dist/esm/Lineage.js.map +1 -0
- package/dist/esm/Migrations.d.ts +34 -0
- package/dist/esm/Migrations.d.ts.map +1 -0
- package/dist/esm/Migrations.js +53 -0
- package/dist/esm/Migrations.js.map +1 -0
- package/dist/esm/Monitor.d.ts +282 -0
- package/dist/esm/Monitor.d.ts.map +1 -0
- package/dist/esm/Monitor.js +415 -0
- package/dist/esm/Monitor.js.map +1 -0
- package/dist/esm/ScopedToken.d.ts +193 -0
- package/dist/esm/ScopedToken.d.ts.map +1 -0
- package/dist/esm/ScopedToken.js +224 -0
- package/dist/esm/ScopedToken.js.map +1 -0
- package/dist/esm/SqlControlRuntime.d.ts +161 -0
- package/dist/esm/SqlControlRuntime.d.ts.map +1 -0
- package/dist/esm/SqlControlRuntime.js +1756 -0
- package/dist/esm/SqlControlRuntime.js.map +1 -0
- package/dist/esm/SqlCredentialStore.d.ts +43 -0
- package/dist/esm/SqlCredentialStore.d.ts.map +1 -0
- package/dist/esm/SqlCredentialStore.js +97 -0
- package/dist/esm/SqlCredentialStore.js.map +1 -0
- package/dist/esm/Steering.d.ts +69 -0
- package/dist/esm/Steering.d.ts.map +1 -0
- package/dist/esm/Steering.js +89 -0
- package/dist/esm/Steering.js.map +1 -0
- package/dist/esm/SystemFlows.d.ts +223 -0
- package/dist/esm/SystemFlows.d.ts.map +1 -0
- package/dist/esm/SystemFlows.js +198 -0
- package/dist/esm/SystemFlows.js.map +1 -0
- package/dist/esm/WebCryptoCipher.d.ts +49 -0
- package/dist/esm/WebCryptoCipher.d.ts.map +1 -0
- package/dist/esm/WebCryptoCipher.js +123 -0
- package/dist/esm/WebCryptoCipher.js.map +1 -0
- package/dist/esm/WebhookChannel.d.ts +113 -0
- package/dist/esm/WebhookChannel.d.ts.map +1 -0
- package/dist/esm/WebhookChannel.js +109 -0
- package/dist/esm/WebhookChannel.js.map +1 -0
- package/dist/esm/index.d.ts +160 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +160 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/internal/MutationBoundary.d.ts +27 -0
- package/dist/esm/internal/MutationBoundary.d.ts.map +1 -0
- package/dist/esm/internal/MutationBoundary.js +40 -0
- package/dist/esm/internal/MutationBoundary.js.map +1 -0
- package/dist/esm/internal/activeFibers.d.ts +12 -0
- package/dist/esm/internal/activeFibers.d.ts.map +1 -0
- package/dist/esm/internal/activeFibers.js +17 -0
- package/dist/esm/internal/activeFibers.js.map +1 -0
- package/dist/esm/internal/issues.d.ts +28 -0
- package/dist/esm/internal/issues.d.ts.map +1 -0
- package/dist/esm/internal/issues.js +35 -0
- package/dist/esm/internal/issues.js.map +1 -0
- package/dist/esm/internal/planning.d.ts +347 -0
- package/dist/esm/internal/planning.d.ts.map +1 -0
- package/dist/esm/internal/planning.js +199 -0
- package/dist/esm/internal/planning.js.map +1 -0
- package/dist/esm/internal/sqlSchemaErrors.d.ts +18 -0
- package/dist/esm/internal/sqlSchemaErrors.d.ts.map +1 -0
- package/dist/esm/internal/sqlSchemaErrors.js +38 -0
- package/dist/esm/internal/sqlSchemaErrors.js.map +1 -0
- package/dist/esm/migrations/0001_control_tables.d.ts +18 -0
- package/dist/esm/migrations/0001_control_tables.d.ts.map +1 -0
- package/dist/esm/migrations/0001_control_tables.js +96 -0
- package/dist/esm/migrations/0001_control_tables.js.map +1 -0
- package/dist/esm/migrations/0002_run_keys.d.ts +15 -0
- package/dist/esm/migrations/0002_run_keys.d.ts.map +1 -0
- package/dist/esm/migrations/0002_run_keys.js +22 -0
- package/dist/esm/migrations/0002_run_keys.js.map +1 -0
- package/dist/esm/migrations/0003_signal_commands.d.ts +13 -0
- package/dist/esm/migrations/0003_signal_commands.d.ts.map +1 -0
- package/dist/esm/migrations/0003_signal_commands.js +26 -0
- package/dist/esm/migrations/0003_signal_commands.js.map +1 -0
- package/dist/esm/migrations/0004_approval_decisions.d.ts +13 -0
- package/dist/esm/migrations/0004_approval_decisions.d.ts.map +1 -0
- package/dist/esm/migrations/0004_approval_decisions.js +25 -0
- package/dist/esm/migrations/0004_approval_decisions.js.map +1 -0
- package/dist/esm/migrations/0005_signal_principals.d.ts +18 -0
- package/dist/esm/migrations/0005_signal_principals.d.ts.map +1 -0
- package/dist/esm/migrations/0005_signal_principals.js +27 -0
- package/dist/esm/migrations/0005_signal_principals.js.map +1 -0
- package/dist/esm/migrations/0006_run_principals.d.ts +18 -0
- package/dist/esm/migrations/0006_run_principals.d.ts.map +1 -0
- package/dist/esm/migrations/0006_run_principals.js +30 -0
- package/dist/esm/migrations/0006_run_principals.js.map +1 -0
- package/dist/esm/migrations/0007_resume_consent.d.ts +18 -0
- package/dist/esm/migrations/0007_resume_consent.d.ts.map +1 -0
- package/dist/esm/migrations/0007_resume_consent.js +27 -0
- package/dist/esm/migrations/0007_resume_consent.js.map +1 -0
- package/dist/esm/test/TestControl.d.ts +19 -0
- package/dist/esm/test/TestControl.d.ts.map +1 -0
- package/dist/esm/test/TestControl.js +30 -0
- package/dist/esm/test/TestControl.js.map +1 -0
- package/docs/README.md +189 -0
- package/docs/api.md +982 -0
- package/docs/concepts/authority.md +109 -0
- package/docs/concepts/cancellation.md +129 -0
- package/docs/concepts/lineage.md +132 -0
- package/docs/concepts/ownership.md +139 -0
- package/docs/concepts/projections.md +203 -0
- package/docs/concepts/receipts.md +128 -0
- package/docs/guides/approvals.md +284 -0
- package/docs/guides/cancel-and-resume.md +162 -0
- package/docs/guides/durable-storage.md +147 -0
- package/docs/guides/implement-an-executor.md +173 -0
- package/docs/guides/ingest-a-webhook.md +177 -0
- package/docs/guides/list-runs.md +160 -0
- package/docs/guides/monitor-runs.md +176 -0
- package/docs/guides/observe-health.md +147 -0
- package/docs/guides/postgres-tests.md +5 -0
- package/docs/guides/serve-over-rpc.md +220 -0
- package/docs/guides/signal-a-run.md +53 -0
- package/docs/guides/steer-a-run.md +138 -0
- package/docs/guides/store-credentials.md +164 -0
- package/docs/guides/testing.md +139 -0
- package/docs/guides/watch-a-run.md +154 -0
- package/docs/installation.md +106 -0
- package/docs/quickstart.md +163 -0
- package/docs/troubleshooting.md +208 -0
- package/package.json +405 -3
- package/src/ApprovalAuthority.ts +114 -0
- package/src/Cancellation.ts +172 -0
- package/src/Channels.ts +493 -0
- package/src/Control.ts +337 -0
- package/src/ControlClient.ts +319 -0
- package/src/ControlError.ts +378 -0
- package/src/ControlExecutor.ts +490 -0
- package/src/ControlFacts.ts +383 -0
- package/src/ControlLive.ts +2113 -0
- package/src/ControlRpcs.ts +443 -0
- package/src/ControlRuntime.ts +1597 -0
- package/src/ControlSchema.ts +1380 -0
- package/src/ControlServer.ts +182 -0
- package/src/Credential.ts +310 -0
- package/src/CredentialCipher.ts +110 -0
- package/src/CredentialStore.ts +152 -0
- package/src/DispatchReader.ts +122 -0
- package/src/Health.ts +591 -0
- package/src/JevSessionChecker.ts +127 -0
- package/src/Lineage.ts +203 -0
- package/src/Migrations.ts +56 -0
- package/src/Monitor.ts +600 -0
- package/src/ScopedToken.ts +306 -0
- package/src/SqlControlRuntime.ts +2476 -0
- package/src/SqlCredentialStore.ts +148 -0
- package/src/Steering.ts +96 -0
- package/src/SystemFlows.ts +225 -0
- package/src/WebCryptoCipher.ts +169 -0
- package/src/WebhookChannel.ts +166 -0
- package/src/index.ts +188 -0
- package/src/internal/MutationBoundary.ts +46 -0
- package/src/internal/activeFibers.ts +22 -0
- package/src/internal/issues.ts +40 -0
- package/src/internal/planning.ts +262 -0
- package/src/internal/sqlSchemaErrors.ts +37 -0
- package/src/migrations/0001_control_tables.ts +99 -0
- package/src/migrations/0002_run_keys.ts +23 -0
- package/src/migrations/0003_signal_commands.ts +27 -0
- package/src/migrations/0004_approval_decisions.ts +25 -0
- package/src/migrations/0005_signal_principals.ts +27 -0
- package/src/migrations/0006_run_principals.ts +31 -0
- package/src/migrations/0007_resume_consent.ts +28 -0
- package/src/test/TestControl.ts +47 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"0001_control_tables.d.ts","sourceRoot":"","sources":["../../../src/migrations/0001_control_tables.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,SAAS,MAAM,+BAA+B,CAAA;AA4E1D;;;;;;;;GAQG;AACH,eAAO,MAAM,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,CAAC,SAAS,CAKpE,CAAA"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Initial durable control-plane schema.
|
|
3
|
+
*
|
|
4
|
+
* @since 0.1.0
|
|
5
|
+
*/
|
|
6
|
+
import * as Dialect from "@smthrs/database/Dialect";
|
|
7
|
+
import * as Effect from "effect/Effect";
|
|
8
|
+
import * as SqlClient from "effect/unstable/sql/SqlClient";
|
|
9
|
+
const statements = (sql) => [
|
|
10
|
+
sql `CREATE TABLE IF NOT EXISTS control_plans (
|
|
11
|
+
${Dialect.rowId(sql)}
|
|
12
|
+
plan_id TEXT PRIMARY KEY,
|
|
13
|
+
card_json TEXT NOT NULL,
|
|
14
|
+
decoded_input_json TEXT NOT NULL,
|
|
15
|
+
decision TEXT NOT NULL
|
|
16
|
+
)`,
|
|
17
|
+
sql `CREATE TABLE IF NOT EXISTS control_plan_keys (
|
|
18
|
+
idempotency_key TEXT PRIMARY KEY,
|
|
19
|
+
fingerprint TEXT NOT NULL,
|
|
20
|
+
plan_id TEXT NOT NULL
|
|
21
|
+
)`,
|
|
22
|
+
sql `CREATE TABLE IF NOT EXISTS control_tokens (
|
|
23
|
+
target_tag TEXT NOT NULL,
|
|
24
|
+
run_id TEXT NOT NULL,
|
|
25
|
+
target_id TEXT NOT NULL,
|
|
26
|
+
token_id TEXT NOT NULL,
|
|
27
|
+
target_json TEXT NOT NULL,
|
|
28
|
+
resolved ${Dialect.integer(sql)} NOT NULL,
|
|
29
|
+
decision_principal_json TEXT,
|
|
30
|
+
PRIMARY KEY (target_tag, run_id, target_id),
|
|
31
|
+
CHECK (target_tag IN ('Plan', 'Node')),
|
|
32
|
+
CHECK ((target_tag = 'Plan' AND run_id = '') OR (target_tag = 'Node' AND length(run_id) > 0)),
|
|
33
|
+
CHECK (length(target_id) > 0 AND token_id = target_id)
|
|
34
|
+
)`,
|
|
35
|
+
sql `CREATE TABLE IF NOT EXISTS control_grants (
|
|
36
|
+
target_tag TEXT NOT NULL,
|
|
37
|
+
run_id TEXT NOT NULL,
|
|
38
|
+
target_id TEXT NOT NULL,
|
|
39
|
+
token_id TEXT NOT NULL,
|
|
40
|
+
envelope_json TEXT NOT NULL,
|
|
41
|
+
scope TEXT NOT NULL,
|
|
42
|
+
installed_at_ms ${Dialect.integer(sql)} NOT NULL,
|
|
43
|
+
PRIMARY KEY (target_tag, run_id, target_id),
|
|
44
|
+
CHECK (target_tag IN ('Plan', 'Node')),
|
|
45
|
+
CHECK ((target_tag = 'Plan' AND run_id = '') OR (target_tag = 'Node' AND length(run_id) > 0)),
|
|
46
|
+
CHECK (length(target_id) > 0 AND token_id = target_id)
|
|
47
|
+
)`,
|
|
48
|
+
sql `CREATE TABLE IF NOT EXISTS control_mutations (
|
|
49
|
+
mutation_key TEXT PRIMARY KEY,
|
|
50
|
+
fingerprint TEXT NOT NULL,
|
|
51
|
+
receipt_json TEXT NOT NULL
|
|
52
|
+
)`,
|
|
53
|
+
sql `CREATE TABLE IF NOT EXISTS control_runs (
|
|
54
|
+
run_id TEXT PRIMARY KEY,
|
|
55
|
+
created_seq ${Dialect.integer(sql)} NOT NULL
|
|
56
|
+
)`,
|
|
57
|
+
sql `CREATE TABLE IF NOT EXISTS control_run_resumes (
|
|
58
|
+
run_id TEXT PRIMARY KEY,
|
|
59
|
+
requested_seq ${Dialect.integer(sql)} NOT NULL,
|
|
60
|
+
requested_at_ms ${Dialect.integer(sql)} NOT NULL
|
|
61
|
+
)`,
|
|
62
|
+
sql `CREATE TABLE IF NOT EXISTS control_run_messages (
|
|
63
|
+
seq ${Dialect.identity(sql)},
|
|
64
|
+
run_id TEXT NOT NULL,
|
|
65
|
+
kind TEXT NOT NULL,
|
|
66
|
+
payload_json TEXT NOT NULL
|
|
67
|
+
)`,
|
|
68
|
+
sql `CREATE TABLE IF NOT EXISTS control_sequences (
|
|
69
|
+
name TEXT PRIMARY KEY,
|
|
70
|
+
value ${Dialect.integer(sql)} NOT NULL
|
|
71
|
+
)`,
|
|
72
|
+
sql `CREATE TABLE IF NOT EXISTS control_credentials (
|
|
73
|
+
id TEXT PRIMARY KEY,
|
|
74
|
+
name TEXT NOT NULL,
|
|
75
|
+
ciphertext TEXT NOT NULL,
|
|
76
|
+
nonce TEXT NOT NULL,
|
|
77
|
+
version ${Dialect.integer(sql)} NOT NULL,
|
|
78
|
+
updated_at_ms ${Dialect.integer(sql)} NOT NULL
|
|
79
|
+
)`
|
|
80
|
+
];
|
|
81
|
+
/**
|
|
82
|
+
* Creates every table owned by `@smthrs/control`.
|
|
83
|
+
*
|
|
84
|
+
* `IF NOT EXISTS` lets the recorded migration and each standalone adapter's
|
|
85
|
+
* bootstrap share this exact schema without competing over table creation.
|
|
86
|
+
*
|
|
87
|
+
* @category migrations
|
|
88
|
+
* @since 0.1.0
|
|
89
|
+
*/
|
|
90
|
+
export const initial = Effect.gen(function* () {
|
|
91
|
+
const sql = yield* SqlClient.SqlClient;
|
|
92
|
+
for (const statement of statements(sql)) {
|
|
93
|
+
yield* statement;
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
//# sourceMappingURL=0001_control_tables.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"0001_control_tables.js","sourceRoot":"","sources":["../../../src/migrations/0001_control_tables.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,OAAO,MAAM,0BAA0B,CAAA;AACnD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,SAAS,MAAM,+BAA+B,CAAA;AAE1D,MAAM,UAAU,GAAG,CAAC,GAAwB,EAAE,EAAE,CAC9C;IACE,GAAG,CAAA;MACD,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC;;;;;IAKpB;IACA,GAAG,CAAA;;;;IAIH;IACA,GAAG,CAAA;;;;;;eAMQ,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC;;;;;;IAM/B;IACA,GAAG,CAAA;;;;;;;sBAOe,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC;;;;;IAKtC;IACA,GAAG,CAAA;;;;IAIH;IACA,GAAG,CAAA;;kBAEW,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC;IAClC;IACA,GAAG,CAAA;;oBAEa,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC;sBAClB,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC;IACtC;IACA,GAAG,CAAA;UACG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;;;;IAI3B;IACA,GAAG,CAAA;;YAEK,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC;IAC5B;IACA,GAAG,CAAA;;;;;cAKO,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC;oBACd,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC;IACpC;CACQ,CAAA;AAEZ;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,OAAO,GAAsD,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAC5F,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,SAAS,CAAC,SAAS,CAAA;IACtC,KAAK,MAAM,SAAS,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACxC,KAAK,CAAC,CAAC,SAAS,CAAA;IAClB,CAAC;AACH,CAAC,CAAC,CAAA","sourcesContent":["/**\n * Initial durable control-plane schema.\n *\n * @since 0.1.0\n */\n\nimport * as Dialect from \"@smthrs/database/Dialect\"\nimport * as Effect from \"effect/Effect\"\nimport * as SqlClient from \"effect/unstable/sql/SqlClient\"\n\nconst statements = (sql: SqlClient.SqlClient) =>\n [\n sql`CREATE TABLE IF NOT EXISTS control_plans (\n ${Dialect.rowId(sql)}\n plan_id TEXT PRIMARY KEY,\n card_json TEXT NOT NULL,\n decoded_input_json TEXT NOT NULL,\n decision TEXT NOT NULL\n )`,\n sql`CREATE TABLE IF NOT EXISTS control_plan_keys (\n idempotency_key TEXT PRIMARY KEY,\n fingerprint TEXT NOT NULL,\n plan_id TEXT NOT NULL\n )`,\n sql`CREATE TABLE IF NOT EXISTS control_tokens (\n target_tag TEXT NOT NULL,\n run_id TEXT NOT NULL,\n target_id TEXT NOT NULL,\n token_id TEXT NOT NULL,\n target_json TEXT NOT NULL,\n resolved ${Dialect.integer(sql)} NOT NULL,\n decision_principal_json TEXT,\n PRIMARY KEY (target_tag, run_id, target_id),\n CHECK (target_tag IN ('Plan', 'Node')),\n CHECK ((target_tag = 'Plan' AND run_id = '') OR (target_tag = 'Node' AND length(run_id) > 0)),\n CHECK (length(target_id) > 0 AND token_id = target_id)\n )`,\n sql`CREATE TABLE IF NOT EXISTS control_grants (\n target_tag TEXT NOT NULL,\n run_id TEXT NOT NULL,\n target_id TEXT NOT NULL,\n token_id TEXT NOT NULL,\n envelope_json TEXT NOT NULL,\n scope TEXT NOT NULL,\n installed_at_ms ${Dialect.integer(sql)} NOT NULL,\n PRIMARY KEY (target_tag, run_id, target_id),\n CHECK (target_tag IN ('Plan', 'Node')),\n CHECK ((target_tag = 'Plan' AND run_id = '') OR (target_tag = 'Node' AND length(run_id) > 0)),\n CHECK (length(target_id) > 0 AND token_id = target_id)\n )`,\n sql`CREATE TABLE IF NOT EXISTS control_mutations (\n mutation_key TEXT PRIMARY KEY,\n fingerprint TEXT NOT NULL,\n receipt_json TEXT NOT NULL\n )`,\n sql`CREATE TABLE IF NOT EXISTS control_runs (\n run_id TEXT PRIMARY KEY,\n created_seq ${Dialect.integer(sql)} NOT NULL\n )`,\n sql`CREATE TABLE IF NOT EXISTS control_run_resumes (\n run_id TEXT PRIMARY KEY,\n requested_seq ${Dialect.integer(sql)} NOT NULL,\n requested_at_ms ${Dialect.integer(sql)} NOT NULL\n )`,\n sql`CREATE TABLE IF NOT EXISTS control_run_messages (\n seq ${Dialect.identity(sql)},\n run_id TEXT NOT NULL,\n kind TEXT NOT NULL,\n payload_json TEXT NOT NULL\n )`,\n sql`CREATE TABLE IF NOT EXISTS control_sequences (\n name TEXT PRIMARY KEY,\n value ${Dialect.integer(sql)} NOT NULL\n )`,\n sql`CREATE TABLE IF NOT EXISTS control_credentials (\n id TEXT PRIMARY KEY,\n name TEXT NOT NULL,\n ciphertext TEXT NOT NULL,\n nonce TEXT NOT NULL,\n version ${Dialect.integer(sql)} NOT NULL,\n updated_at_ms ${Dialect.integer(sql)} NOT NULL\n )`\n ] as const\n\n/**\n * Creates every table owned by `@smthrs/control`.\n *\n * `IF NOT EXISTS` lets the recorded migration and each standalone adapter's\n * bootstrap share this exact schema without competing over table creation.\n *\n * @category migrations\n * @since 0.1.0\n */\nexport const initial: Effect.Effect<void, unknown, SqlClient.SqlClient> = Effect.gen(function*() {\n const sql = yield* SqlClient.SqlClient\n for (const statement of statements(sql)) {\n yield* statement\n }\n})\n"]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Durable run idempotency claims, including upgrades of existing databases.
|
|
3
|
+
*
|
|
4
|
+
* @since 1.0.0
|
|
5
|
+
*/
|
|
6
|
+
import * as Effect from "effect/Effect";
|
|
7
|
+
import * as SqlClient from "effect/unstable/sql/SqlClient";
|
|
8
|
+
/**
|
|
9
|
+
* Adds the run-key claim table without changing existing control data.
|
|
10
|
+
*
|
|
11
|
+
* @category migrations
|
|
12
|
+
* @since 1.0.0
|
|
13
|
+
*/
|
|
14
|
+
export declare const runKeys: Effect.Effect<void, import("effect/unstable/sql/SqlError").SqlError, SqlClient.SqlClient>;
|
|
15
|
+
//# sourceMappingURL=0002_run_keys.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"0002_run_keys.d.ts","sourceRoot":"","sources":["../../../src/migrations/0002_run_keys.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,SAAS,MAAM,+BAA+B,CAAA;AAE1D;;;;;GAKG;AACH,eAAO,MAAM,OAAO,2FAOlB,CAAA"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Durable run idempotency claims, including upgrades of existing databases.
|
|
3
|
+
*
|
|
4
|
+
* @since 1.0.0
|
|
5
|
+
*/
|
|
6
|
+
import * as Effect from "effect/Effect";
|
|
7
|
+
import * as SqlClient from "effect/unstable/sql/SqlClient";
|
|
8
|
+
/**
|
|
9
|
+
* Adds the run-key claim table without changing existing control data.
|
|
10
|
+
*
|
|
11
|
+
* @category migrations
|
|
12
|
+
* @since 1.0.0
|
|
13
|
+
*/
|
|
14
|
+
export const runKeys = Effect.gen(function* () {
|
|
15
|
+
const sql = yield* SqlClient.SqlClient;
|
|
16
|
+
yield* sql `CREATE TABLE IF NOT EXISTS control_run_keys (
|
|
17
|
+
idempotency_key TEXT PRIMARY KEY,
|
|
18
|
+
fingerprint TEXT NOT NULL,
|
|
19
|
+
claimant TEXT NOT NULL
|
|
20
|
+
)`;
|
|
21
|
+
});
|
|
22
|
+
//# sourceMappingURL=0002_run_keys.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"0002_run_keys.js","sourceRoot":"","sources":["../../../src/migrations/0002_run_keys.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,SAAS,MAAM,+BAA+B,CAAA;AAE1D;;;;;GAKG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IACzC,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,SAAS,CAAC,SAAS,CAAA;IACtC,KAAK,CAAC,CAAC,GAAG,CAAA;;;;IAIR,CAAA;AACJ,CAAC,CAAC,CAAA","sourcesContent":["/**\n * Durable run idempotency claims, including upgrades of existing databases.\n *\n * @since 1.0.0\n */\n\nimport * as Effect from \"effect/Effect\"\nimport * as SqlClient from \"effect/unstable/sql/SqlClient\"\n\n/**\n * Adds the run-key claim table without changing existing control data.\n *\n * @category migrations\n * @since 1.0.0\n */\nexport const runKeys = Effect.gen(function*() {\n const sql = yield* SqlClient.SqlClient\n yield* sql`CREATE TABLE IF NOT EXISTS control_run_keys (\n idempotency_key TEXT PRIMARY KEY,\n fingerprint TEXT NOT NULL,\n claimant TEXT NOT NULL\n )`\n})\n"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Durable signal admission and immutable wait bindings.
|
|
3
|
+
* @since 1.0.0
|
|
4
|
+
*/
|
|
5
|
+
import * as Effect from "effect/Effect";
|
|
6
|
+
import * as SqlClient from "effect/unstable/sql/SqlClient";
|
|
7
|
+
/**
|
|
8
|
+
* Adds the signal inbox without replaying legacy messages that lack delivery identity.
|
|
9
|
+
* @category migrations
|
|
10
|
+
* @since 1.0.0
|
|
11
|
+
*/
|
|
12
|
+
export declare const signalCommands: Effect.Effect<void, import("effect/unstable/sql/SqlError").SqlError, SqlClient.SqlClient>;
|
|
13
|
+
//# sourceMappingURL=0003_signal_commands.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"0003_signal_commands.d.ts","sourceRoot":"","sources":["../../../src/migrations/0003_signal_commands.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,SAAS,MAAM,+BAA+B,CAAA;AAE1D;;;;GAIG;AACH,eAAO,MAAM,cAAc,2FAYzB,CAAA"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Durable signal admission and immutable wait bindings.
|
|
3
|
+
* @since 1.0.0
|
|
4
|
+
*/
|
|
5
|
+
import * as Dialect from "@smthrs/database/Dialect";
|
|
6
|
+
import * as Effect from "effect/Effect";
|
|
7
|
+
import * as SqlClient from "effect/unstable/sql/SqlClient";
|
|
8
|
+
/**
|
|
9
|
+
* Adds the signal inbox without replaying legacy messages that lack delivery identity.
|
|
10
|
+
* @category migrations
|
|
11
|
+
* @since 1.0.0
|
|
12
|
+
*/
|
|
13
|
+
export const signalCommands = Effect.gen(function* () {
|
|
14
|
+
const sql = yield* SqlClient.SqlClient;
|
|
15
|
+
yield* sql `CREATE TABLE IF NOT EXISTS control_signal_commands (
|
|
16
|
+
seq ${Dialect.identity(sql)},
|
|
17
|
+
command_id TEXT NOT NULL UNIQUE,
|
|
18
|
+
run_id TEXT NOT NULL,
|
|
19
|
+
payload_json TEXT NOT NULL,
|
|
20
|
+
wait_token TEXT,
|
|
21
|
+
state TEXT NOT NULL DEFAULT 'pending' CHECK (state IN ('pending', 'delivered', 'rejected', 'terminal'))
|
|
22
|
+
)`;
|
|
23
|
+
yield* sql `CREATE UNIQUE INDEX IF NOT EXISTS control_signal_commands_wait ON control_signal_commands(wait_token) WHERE wait_token IS NOT NULL`;
|
|
24
|
+
yield* sql `CREATE INDEX IF NOT EXISTS control_signal_commands_pending ON control_signal_commands(state, seq)`;
|
|
25
|
+
});
|
|
26
|
+
//# sourceMappingURL=0003_signal_commands.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"0003_signal_commands.js","sourceRoot":"","sources":["../../../src/migrations/0003_signal_commands.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,OAAO,MAAM,0BAA0B,CAAA;AACnD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,SAAS,MAAM,+BAA+B,CAAA;AAE1D;;;;GAIG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAChD,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,SAAS,CAAC,SAAS,CAAA;IACtC,KAAK,CAAC,CAAC,GAAG,CAAA;UACF,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;;;;;;IAM3B,CAAA;IACF,KAAK,CAAC,CAAC,GAAG,CAAA,oIAAoI,CAAA;IAC9I,KAAK,CAAC,CAAC,GAAG,CAAA,mGAAmG,CAAA;AAC/G,CAAC,CAAC,CAAA","sourcesContent":["/**\n * Durable signal admission and immutable wait bindings.\n * @since 1.0.0\n */\n\nimport * as Dialect from \"@smthrs/database/Dialect\"\nimport * as Effect from \"effect/Effect\"\nimport * as SqlClient from \"effect/unstable/sql/SqlClient\"\n\n/**\n * Adds the signal inbox without replaying legacy messages that lack delivery identity.\n * @category migrations\n * @since 1.0.0\n */\nexport const signalCommands = Effect.gen(function*() {\n const sql = yield* SqlClient.SqlClient\n yield* sql`CREATE TABLE IF NOT EXISTS control_signal_commands (\n seq ${Dialect.identity(sql)},\n command_id TEXT NOT NULL UNIQUE,\n run_id TEXT NOT NULL,\n payload_json TEXT NOT NULL,\n wait_token TEXT,\n state TEXT NOT NULL DEFAULT 'pending' CHECK (state IN ('pending', 'delivered', 'rejected', 'terminal'))\n )`\n yield* sql`CREATE UNIQUE INDEX IF NOT EXISTS control_signal_commands_wait ON control_signal_commands(wait_token) WHERE wait_token IS NOT NULL`\n yield* sql`CREATE INDEX IF NOT EXISTS control_signal_commands_pending ON control_signal_commands(state, seq)`\n})\n"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Preserve the actual decision without guessing erased legacy answers.
|
|
3
|
+
* @since 1.0.0
|
|
4
|
+
*/
|
|
5
|
+
import * as Effect from "effect/Effect";
|
|
6
|
+
import * as SqlClient from "effect/unstable/sql/SqlClient";
|
|
7
|
+
/**
|
|
8
|
+
* Idempotent for both recorded migrations and standalone runtime bootstrap.
|
|
9
|
+
* @category migrations
|
|
10
|
+
* @since 1.0.0
|
|
11
|
+
*/
|
|
12
|
+
export declare const approvalDecisions: Effect.Effect<void, import("effect/unstable/sql/SqlError").SqlError, SqlClient.SqlClient>;
|
|
13
|
+
//# sourceMappingURL=0004_approval_decisions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"0004_approval_decisions.d.ts","sourceRoot":"","sources":["../../../src/migrations/0004_approval_decisions.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,SAAS,MAAM,+BAA+B,CAAA;AAE1D;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,2FAU5B,CAAA"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Preserve the actual decision without guessing erased legacy answers.
|
|
3
|
+
* @since 1.0.0
|
|
4
|
+
*/
|
|
5
|
+
import * as Dialect from "@smthrs/database/Dialect";
|
|
6
|
+
import * as Effect from "effect/Effect";
|
|
7
|
+
import * as SqlClient from "effect/unstable/sql/SqlClient";
|
|
8
|
+
/**
|
|
9
|
+
* Idempotent for both recorded migrations and standalone runtime bootstrap.
|
|
10
|
+
* @category migrations
|
|
11
|
+
* @since 1.0.0
|
|
12
|
+
*/
|
|
13
|
+
export const approvalDecisions = Effect.gen(function* () {
|
|
14
|
+
const sql = yield* SqlClient.SqlClient;
|
|
15
|
+
yield* sql.withTransaction(Effect.gen(function* () {
|
|
16
|
+
const columns = yield* Dialect.columns(sql, "control_tokens");
|
|
17
|
+
if (columns.some((column) => column.name === "decision_json"))
|
|
18
|
+
return;
|
|
19
|
+
// NULL is intentional: old terminal tokens erased their answer. Their
|
|
20
|
+
// decoder refuses recovery instead of inferring approval from a grant.
|
|
21
|
+
// An undecided token still has its unambiguous resolved=0 representation.
|
|
22
|
+
yield* sql `ALTER TABLE control_tokens ADD COLUMN decision_json TEXT`;
|
|
23
|
+
}));
|
|
24
|
+
});
|
|
25
|
+
//# sourceMappingURL=0004_approval_decisions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"0004_approval_decisions.js","sourceRoot":"","sources":["../../../src/migrations/0004_approval_decisions.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,OAAO,MAAM,0BAA0B,CAAA;AACnD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,SAAS,MAAM,+BAA+B,CAAA;AAE1D;;;;GAIG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IACnD,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,SAAS,CAAC,SAAS,CAAA;IACtC,KAAK,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAC7C,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAA;QAC7D,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,eAAe,CAAC;YAAE,OAAM;QACrE,sEAAsE;QACtE,uEAAuE;QACvE,0EAA0E;QAC1E,KAAK,CAAC,CAAC,GAAG,CAAA,0DAA0D,CAAA;IACtE,CAAC,CAAC,CAAC,CAAA;AACL,CAAC,CAAC,CAAA","sourcesContent":["/**\n * Preserve the actual decision without guessing erased legacy answers.\n * @since 1.0.0\n */\n\nimport * as Dialect from \"@smthrs/database/Dialect\"\nimport * as Effect from \"effect/Effect\"\nimport * as SqlClient from \"effect/unstable/sql/SqlClient\"\n\n/**\n * Idempotent for both recorded migrations and standalone runtime bootstrap.\n * @category migrations\n * @since 1.0.0\n */\nexport const approvalDecisions = Effect.gen(function*() {\n const sql = yield* SqlClient.SqlClient\n yield* sql.withTransaction(Effect.gen(function*() {\n const columns = yield* Dialect.columns(sql, \"control_tokens\")\n if (columns.some((column) => column.name === \"decision_json\")) return\n // NULL is intentional: old terminal tokens erased their answer. Their\n // decoder refuses recovery instead of inferring approval from a grant.\n // An undecided token still has its unambiguous resolved=0 representation.\n yield* sql`ALTER TABLE control_tokens ADD COLUMN decision_json TEXT`\n }))\n})\n"]}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Record who admitted each signal command.
|
|
3
|
+
* @since 1.0.0
|
|
4
|
+
*/
|
|
5
|
+
import * as Effect from "effect/Effect";
|
|
6
|
+
import * as SqlClient from "effect/unstable/sql/SqlClient";
|
|
7
|
+
/**
|
|
8
|
+
* Adds the admitting principal to the signal inbox.
|
|
9
|
+
*
|
|
10
|
+
* NULL is intentional for existing rows: a command admitted before this column
|
|
11
|
+
* has no recorded identity, so it cannot answer a human wait, which requires
|
|
12
|
+
* `ApprovalAuthority` to authorize the admitting principal.
|
|
13
|
+
*
|
|
14
|
+
* @category migrations
|
|
15
|
+
* @since 1.0.0
|
|
16
|
+
*/
|
|
17
|
+
export declare const signalPrincipals: Effect.Effect<void, import("effect/unstable/sql/SqlError").SqlError, SqlClient.SqlClient>;
|
|
18
|
+
//# sourceMappingURL=0005_signal_principals.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"0005_signal_principals.d.ts","sourceRoot":"","sources":["../../../src/migrations/0005_signal_principals.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,SAAS,MAAM,+BAA+B,CAAA;AAE1D;;;;;;;;;GASG;AACH,eAAO,MAAM,gBAAgB,2FAO3B,CAAA"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Record who admitted each signal command.
|
|
3
|
+
* @since 1.0.0
|
|
4
|
+
*/
|
|
5
|
+
import * as Dialect from "@smthrs/database/Dialect";
|
|
6
|
+
import * as Effect from "effect/Effect";
|
|
7
|
+
import * as SqlClient from "effect/unstable/sql/SqlClient";
|
|
8
|
+
/**
|
|
9
|
+
* Adds the admitting principal to the signal inbox.
|
|
10
|
+
*
|
|
11
|
+
* NULL is intentional for existing rows: a command admitted before this column
|
|
12
|
+
* has no recorded identity, so it cannot answer a human wait, which requires
|
|
13
|
+
* `ApprovalAuthority` to authorize the admitting principal.
|
|
14
|
+
*
|
|
15
|
+
* @category migrations
|
|
16
|
+
* @since 1.0.0
|
|
17
|
+
*/
|
|
18
|
+
export const signalPrincipals = Effect.gen(function* () {
|
|
19
|
+
const sql = yield* SqlClient.SqlClient;
|
|
20
|
+
yield* sql.withTransaction(Effect.gen(function* () {
|
|
21
|
+
const columns = yield* Dialect.columns(sql, "control_signal_commands");
|
|
22
|
+
if (columns.some((column) => column.name === "principal_json"))
|
|
23
|
+
return;
|
|
24
|
+
yield* sql `ALTER TABLE control_signal_commands ADD COLUMN principal_json TEXT`;
|
|
25
|
+
}));
|
|
26
|
+
});
|
|
27
|
+
//# sourceMappingURL=0005_signal_principals.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"0005_signal_principals.js","sourceRoot":"","sources":["../../../src/migrations/0005_signal_principals.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,OAAO,MAAM,0BAA0B,CAAA;AACnD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,SAAS,MAAM,+BAA+B,CAAA;AAE1D;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClD,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,SAAS,CAAC,SAAS,CAAA;IACtC,KAAK,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAC7C,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,yBAAyB,CAAC,CAAA;QACtE,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,gBAAgB,CAAC;YAAE,OAAM;QACtE,KAAK,CAAC,CAAC,GAAG,CAAA,oEAAoE,CAAA;IAChF,CAAC,CAAC,CAAC,CAAA;AACL,CAAC,CAAC,CAAA","sourcesContent":["/**\n * Record who admitted each signal command.\n * @since 1.0.0\n */\n\nimport * as Dialect from \"@smthrs/database/Dialect\"\nimport * as Effect from \"effect/Effect\"\nimport * as SqlClient from \"effect/unstable/sql/SqlClient\"\n\n/**\n * Adds the admitting principal to the signal inbox.\n *\n * NULL is intentional for existing rows: a command admitted before this column\n * has no recorded identity, so it cannot answer a human wait, which requires\n * `ApprovalAuthority` to authorize the admitting principal.\n *\n * @category migrations\n * @since 1.0.0\n */\nexport const signalPrincipals = Effect.gen(function*() {\n const sql = yield* SqlClient.SqlClient\n yield* sql.withTransaction(Effect.gen(function*() {\n const columns = yield* Dialect.columns(sql, \"control_signal_commands\")\n if (columns.some((column) => column.name === \"principal_json\")) return\n yield* sql`ALTER TABLE control_signal_commands ADD COLUMN principal_json TEXT`\n }))\n})\n"]}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Record who launched each run.
|
|
3
|
+
* @since 1.0.0
|
|
4
|
+
*/
|
|
5
|
+
import * as Effect from "effect/Effect";
|
|
6
|
+
import * as SqlClient from "effect/unstable/sql/SqlClient";
|
|
7
|
+
/**
|
|
8
|
+
* Adds the launching principal to the launch index.
|
|
9
|
+
*
|
|
10
|
+
* NULL is intentional for existing rows: a run launched before these columns
|
|
11
|
+
* has no recorded launcher, so only a reader that sees every run lists or
|
|
12
|
+
* watches it.
|
|
13
|
+
*
|
|
14
|
+
* @category migrations
|
|
15
|
+
* @since 1.0.0
|
|
16
|
+
*/
|
|
17
|
+
export declare const runPrincipals: Effect.Effect<void, import("effect/unstable/sql/SqlError").SqlError, SqlClient.SqlClient>;
|
|
18
|
+
//# sourceMappingURL=0006_run_principals.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"0006_run_principals.d.ts","sourceRoot":"","sources":["../../../src/migrations/0006_run_principals.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,SAAS,MAAM,+BAA+B,CAAA;AAE1D;;;;;;;;;GASG;AACH,eAAO,MAAM,aAAa,2FAWxB,CAAA"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Record who launched each run.
|
|
3
|
+
* @since 1.0.0
|
|
4
|
+
*/
|
|
5
|
+
import * as Dialect from "@smthrs/database/Dialect";
|
|
6
|
+
import * as Effect from "effect/Effect";
|
|
7
|
+
import * as SqlClient from "effect/unstable/sql/SqlClient";
|
|
8
|
+
/**
|
|
9
|
+
* Adds the launching principal to the launch index.
|
|
10
|
+
*
|
|
11
|
+
* NULL is intentional for existing rows: a run launched before these columns
|
|
12
|
+
* has no recorded launcher, so only a reader that sees every run lists or
|
|
13
|
+
* watches it.
|
|
14
|
+
*
|
|
15
|
+
* @category migrations
|
|
16
|
+
* @since 1.0.0
|
|
17
|
+
*/
|
|
18
|
+
export const runPrincipals = Effect.gen(function* () {
|
|
19
|
+
const sql = yield* SqlClient.SqlClient;
|
|
20
|
+
yield* sql.withTransaction(Effect.gen(function* () {
|
|
21
|
+
const columns = yield* Dialect.columns(sql, "control_runs");
|
|
22
|
+
if (!columns.some((column) => column.name === "principal_id")) {
|
|
23
|
+
yield* sql `ALTER TABLE control_runs ADD COLUMN principal_id TEXT`;
|
|
24
|
+
}
|
|
25
|
+
if (!columns.some((column) => column.name === "principal_kind")) {
|
|
26
|
+
yield* sql `ALTER TABLE control_runs ADD COLUMN principal_kind TEXT`;
|
|
27
|
+
}
|
|
28
|
+
}));
|
|
29
|
+
});
|
|
30
|
+
//# sourceMappingURL=0006_run_principals.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"0006_run_principals.js","sourceRoot":"","sources":["../../../src/migrations/0006_run_principals.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,OAAO,MAAM,0BAA0B,CAAA;AACnD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,SAAS,MAAM,+BAA+B,CAAA;AAE1D;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAC/C,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,SAAS,CAAC,SAAS,CAAA;IACtC,KAAK,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAC7C,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,cAAc,CAAC,CAAA;QAC3D,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,cAAc,CAAC,EAAE,CAAC;YAC9D,KAAK,CAAC,CAAC,GAAG,CAAA,uDAAuD,CAAA;QACnE,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,gBAAgB,CAAC,EAAE,CAAC;YAChE,KAAK,CAAC,CAAC,GAAG,CAAA,yDAAyD,CAAA;QACrE,CAAC;IACH,CAAC,CAAC,CAAC,CAAA;AACL,CAAC,CAAC,CAAA","sourcesContent":["/**\n * Record who launched each run.\n * @since 1.0.0\n */\n\nimport * as Dialect from \"@smthrs/database/Dialect\"\nimport * as Effect from \"effect/Effect\"\nimport * as SqlClient from \"effect/unstable/sql/SqlClient\"\n\n/**\n * Adds the launching principal to the launch index.\n *\n * NULL is intentional for existing rows: a run launched before these columns\n * has no recorded launcher, so only a reader that sees every run lists or\n * watches it.\n *\n * @category migrations\n * @since 1.0.0\n */\nexport const runPrincipals = Effect.gen(function*() {\n const sql = yield* SqlClient.SqlClient\n yield* sql.withTransaction(Effect.gen(function*() {\n const columns = yield* Dialect.columns(sql, \"control_runs\")\n if (!columns.some((column) => column.name === \"principal_id\")) {\n yield* sql`ALTER TABLE control_runs ADD COLUMN principal_id TEXT`\n }\n if (!columns.some((column) => column.name === \"principal_kind\")) {\n yield* sql`ALTER TABLE control_runs ADD COLUMN principal_kind TEXT`\n }\n }))\n})\n"]}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Record the operator consent a resume delegation carries.
|
|
3
|
+
* @since 1.0.0
|
|
4
|
+
*/
|
|
5
|
+
import * as Effect from "effect/Effect";
|
|
6
|
+
import * as SqlClient from "effect/unstable/sql/SqlClient";
|
|
7
|
+
/**
|
|
8
|
+
* Adds the journal sequence of an operator's explicit resume to the pending
|
|
9
|
+
* resume delegations.
|
|
10
|
+
*
|
|
11
|
+
* NULL is intentional for existing rows: a delegation recorded before this
|
|
12
|
+
* column is an approval or a wake, which is background intent.
|
|
13
|
+
*
|
|
14
|
+
* @category migrations
|
|
15
|
+
* @since 1.0.0
|
|
16
|
+
*/
|
|
17
|
+
export declare const resumeConsent: Effect.Effect<void, import("effect/unstable/sql/SqlError").SqlError, SqlClient.SqlClient>;
|
|
18
|
+
//# sourceMappingURL=0007_resume_consent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"0007_resume_consent.d.ts","sourceRoot":"","sources":["../../../src/migrations/0007_resume_consent.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,SAAS,MAAM,+BAA+B,CAAA;AAE1D;;;;;;;;;GASG;AACH,eAAO,MAAM,aAAa,2FAQxB,CAAA"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Record the operator consent a resume delegation carries.
|
|
3
|
+
* @since 1.0.0
|
|
4
|
+
*/
|
|
5
|
+
import * as Dialect from "@smthrs/database/Dialect";
|
|
6
|
+
import * as Effect from "effect/Effect";
|
|
7
|
+
import * as SqlClient from "effect/unstable/sql/SqlClient";
|
|
8
|
+
/**
|
|
9
|
+
* Adds the journal sequence of an operator's explicit resume to the pending
|
|
10
|
+
* resume delegations.
|
|
11
|
+
*
|
|
12
|
+
* NULL is intentional for existing rows: a delegation recorded before this
|
|
13
|
+
* column is an approval or a wake, which is background intent.
|
|
14
|
+
*
|
|
15
|
+
* @category migrations
|
|
16
|
+
* @since 1.0.0
|
|
17
|
+
*/
|
|
18
|
+
export const resumeConsent = Effect.gen(function* () {
|
|
19
|
+
const sql = yield* SqlClient.SqlClient;
|
|
20
|
+
yield* sql.withTransaction(Effect.gen(function* () {
|
|
21
|
+
const columns = yield* Dialect.columns(sql, "control_run_resumes");
|
|
22
|
+
if (!columns.some((column) => column.name === "consent_seq")) {
|
|
23
|
+
yield* sql `ALTER TABLE control_run_resumes ADD COLUMN consent_seq ${Dialect.integer(sql)}`;
|
|
24
|
+
}
|
|
25
|
+
}));
|
|
26
|
+
});
|
|
27
|
+
//# sourceMappingURL=0007_resume_consent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"0007_resume_consent.js","sourceRoot":"","sources":["../../../src/migrations/0007_resume_consent.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,OAAO,MAAM,0BAA0B,CAAA;AACnD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,SAAS,MAAM,+BAA+B,CAAA;AAE1D;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAC/C,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,SAAS,CAAC,SAAS,CAAA;IACtC,KAAK,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAC7C,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,qBAAqB,CAAC,CAAA;QAClE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,aAAa,CAAC,EAAE,CAAC;YAC7D,KAAK,CAAC,CAAC,GAAG,CAAA,0DAA0D,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAA;QAC5F,CAAC;IACH,CAAC,CAAC,CAAC,CAAA;AACL,CAAC,CAAC,CAAA","sourcesContent":["/**\n * Record the operator consent a resume delegation carries.\n * @since 1.0.0\n */\n\nimport * as Dialect from \"@smthrs/database/Dialect\"\nimport * as Effect from \"effect/Effect\"\nimport * as SqlClient from \"effect/unstable/sql/SqlClient\"\n\n/**\n * Adds the journal sequence of an operator's explicit resume to the pending\n * resume delegations.\n *\n * NULL is intentional for existing rows: a delegation recorded before this\n * column is an approval or a wake, which is background intent.\n *\n * @category migrations\n * @since 1.0.0\n */\nexport const resumeConsent = Effect.gen(function*() {\n const sql = yield* SqlClient.SqlClient\n yield* sql.withTransaction(Effect.gen(function*() {\n const columns = yield* Dialect.columns(sql, \"control_run_resumes\")\n if (!columns.some((column) => column.name === \"consent_seq\")) {\n yield* sql`ALTER TABLE control_run_resumes ADD COLUMN consent_seq ${Dialect.integer(sql)}`\n }\n }))\n})\n"]}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deterministic in-memory Control stack for package and consumer tests.
|
|
3
|
+
*
|
|
4
|
+
* @since 0.1.0
|
|
5
|
+
*/
|
|
6
|
+
import { NotificationQueue } from "@smthrs/notifications";
|
|
7
|
+
import { Registry } from "@smthrs/registry";
|
|
8
|
+
import { Layer } from "effect";
|
|
9
|
+
import * as ControlExecutor from "../ControlExecutor.ts";
|
|
10
|
+
import * as ControlRuntime from "../ControlRuntime.ts";
|
|
11
|
+
/**
|
|
12
|
+
* Provides Control, ControlRuntime, the in-memory journal bundle, and an empty
|
|
13
|
+
* registry. Runtime flow metadata falls back to the reserved system catalog.
|
|
14
|
+
*
|
|
15
|
+
* @category layers
|
|
16
|
+
* @since 0.1.0
|
|
17
|
+
*/
|
|
18
|
+
export declare const layer: (options?: ControlRuntime.MemoryOptions, executor?: ControlExecutor.Service) => Layer.Layer<import("@smthrs/journal/Journal").Journal | NotificationQueue.NotificationQueue | import("../Control.ts").Control | ControlRuntime.ControlRuntime | ControlExecutor.ControlExecutor | Registry.Registry, import("effect/unstable/sql/SqlError").SqlError | import("@smthrs/journal/Journal").JournalError | import("effect/unstable/sql/Migrator").MigrationError, never>;
|
|
19
|
+
//# sourceMappingURL=TestControl.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TestControl.d.ts","sourceRoot":"","sources":["../../../src/test/TestControl.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAkB,KAAK,EAAE,MAAM,QAAQ,CAAA;AAC9C,OAAO,KAAK,eAAe,MAAM,uBAAuB,CAAA;AAExD,OAAO,KAAK,cAAc,MAAM,sBAAsB,CAAA;AActD;;;;;;GAMG;AACH,eAAO,MAAM,KAAK,GAChB,UAAU,cAAc,CAAC,aAAa,EACtC,WAAU,eAAe,CAAC,OAAoC,0XAW/D,CAAA"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deterministic in-memory Control stack for package and consumer tests.
|
|
3
|
+
*
|
|
4
|
+
* @since 0.1.0
|
|
5
|
+
*/
|
|
6
|
+
import * as TestJournal from "@smthrs/journal/test/TestJournal";
|
|
7
|
+
import { NotificationQueue } from "@smthrs/notifications";
|
|
8
|
+
import { Registry } from "@smthrs/registry";
|
|
9
|
+
import { Crypto, Effect, Layer } from "effect";
|
|
10
|
+
import * as ControlExecutor from "../ControlExecutor.js";
|
|
11
|
+
import * as ControlLive from "../ControlLive.js";
|
|
12
|
+
import * as ControlRuntime from "../ControlRuntime.js";
|
|
13
|
+
const browserCrypto = Layer.succeed(Crypto.Crypto, Crypto.make({
|
|
14
|
+
/* v8 ignore next -- `Crypto.make` requires a random-byte primitive, and the deterministic runtime this bundle composes derives every identifier from a counter, so only `digest` is ever called here */
|
|
15
|
+
randomBytes: (size) => globalThis.crypto.getRandomValues(new Uint8Array(size)),
|
|
16
|
+
digest: (algorithm, data) => Effect.promise(() => globalThis.crypto.subtle.digest(algorithm, data.slice().buffer)).pipe(Effect.map((buffer) => new Uint8Array(buffer)))
|
|
17
|
+
}));
|
|
18
|
+
/**
|
|
19
|
+
* Provides Control, ControlRuntime, the in-memory journal bundle, and an empty
|
|
20
|
+
* registry. Runtime flow metadata falls back to the reserved system catalog.
|
|
21
|
+
*
|
|
22
|
+
* @category layers
|
|
23
|
+
* @since 0.1.0
|
|
24
|
+
*/
|
|
25
|
+
export const layer = (options, executor = ControlExecutor.makeNoop()) => {
|
|
26
|
+
const journal = TestJournal.layer();
|
|
27
|
+
const dependencies = Layer.mergeAll(ControlRuntime.layerMemory(options).pipe(Layer.provide(browserCrypto)), journal, NotificationQueue.layer.pipe(Layer.provide(journal)), ControlExecutor.layer(executor), Registry.layerNoop());
|
|
28
|
+
return Layer.provideMerge(ControlLive.layer, dependencies);
|
|
29
|
+
};
|
|
30
|
+
//# sourceMappingURL=TestControl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TestControl.js","sourceRoot":"","sources":["../../../src/test/TestControl.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,WAAW,MAAM,kCAAkC,CAAA;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAC9C,OAAO,KAAK,eAAe,MAAM,uBAAuB,CAAA;AACxD,OAAO,KAAK,WAAW,MAAM,mBAAmB,CAAA;AAChD,OAAO,KAAK,cAAc,MAAM,sBAAsB,CAAA;AAEtD,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,CACjC,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,IAAI,CAAC;IACV,wMAAwM;IACxM,WAAW,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;IAC9E,MAAM,EAAE,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,CAC1B,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CACxF,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC,CAC/C;CACJ,CAAC,CACH,CAAA;AAED;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,CACnB,OAAsC,EACtC,WAAoC,eAAe,CAAC,QAAQ,EAAE,EAC9D,EAAE;IACF,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,EAAE,CAAA;IACnC,MAAM,YAAY,GAAG,KAAK,CAAC,QAAQ,CACjC,cAAc,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,EACtE,OAAO,EACP,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,EACpD,eAAe,CAAC,KAAK,CAAC,QAAQ,CAAC,EAC/B,QAAQ,CAAC,SAAS,EAAE,CACrB,CAAA;IACD,OAAO,KAAK,CAAC,YAAY,CAAC,WAAW,CAAC,KAAK,EAAE,YAAY,CAAC,CAAA;AAC5D,CAAC,CAAA","sourcesContent":["/**\n * Deterministic in-memory Control stack for package and consumer tests.\n *\n * @since 0.1.0\n */\n\nimport * as TestJournal from \"@smthrs/journal/test/TestJournal\"\nimport { NotificationQueue } from \"@smthrs/notifications\"\nimport { Registry } from \"@smthrs/registry\"\nimport { Crypto, Effect, Layer } from \"effect\"\nimport * as ControlExecutor from \"../ControlExecutor.ts\"\nimport * as ControlLive from \"../ControlLive.ts\"\nimport * as ControlRuntime from \"../ControlRuntime.ts\"\n\nconst browserCrypto = Layer.succeed(\n Crypto.Crypto,\n Crypto.make({\n /* v8 ignore next -- `Crypto.make` requires a random-byte primitive, and the deterministic runtime this bundle composes derives every identifier from a counter, so only `digest` is ever called here */\n randomBytes: (size) => globalThis.crypto.getRandomValues(new Uint8Array(size)),\n digest: (algorithm, data) =>\n Effect.promise(() => globalThis.crypto.subtle.digest(algorithm, data.slice().buffer)).pipe(\n Effect.map((buffer) => new Uint8Array(buffer))\n )\n })\n)\n\n/**\n * Provides Control, ControlRuntime, the in-memory journal bundle, and an empty\n * registry. Runtime flow metadata falls back to the reserved system catalog.\n *\n * @category layers\n * @since 0.1.0\n */\nexport const layer = (\n options?: ControlRuntime.MemoryOptions,\n executor: ControlExecutor.Service = ControlExecutor.makeNoop()\n) => {\n const journal = TestJournal.layer()\n const dependencies = Layer.mergeAll(\n ControlRuntime.layerMemory(options).pipe(Layer.provide(browserCrypto)),\n journal,\n NotificationQueue.layer.pipe(Layer.provide(journal)),\n ControlExecutor.layer(executor),\n Registry.layerNoop()\n )\n return Layer.provideMerge(ControlLive.layer, dependencies)\n}\n"]}
|