@smthrs/control 0.0.0-stage → 1.0.0-rc.4
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 +1293 -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 +744 -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 +1522 -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 +1589 -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 +808 -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 +7 -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 +2127 -0
- package/src/ControlRpcs.ts +443 -0
- package/src/ControlRuntime.ts +1601 -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 +2478 -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,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The steer lifecycle as the control plane reads it back.
|
|
3
|
+
*
|
|
4
|
+
* A steer has two durable moments and two different writers. The control plane
|
|
5
|
+
* records the first — `control.steer.enqueued`, written beside the admission
|
|
6
|
+
* it caused. The second belongs to `@smthrs/notifications`: a turn boundary
|
|
7
|
+
* promotes the notification and the queue journals the promotion. This module
|
|
8
|
+
* projects that promotion into the control vocabulary, so a watcher folds one
|
|
9
|
+
* stream instead of two, and so nothing writes "delivered" twice.
|
|
10
|
+
*
|
|
11
|
+
* Deriving rather than re-recording is what keeps the two halves honest. A
|
|
12
|
+
* control plane that emitted its own delivery record would be asserting a fact
|
|
13
|
+
* it did not observe: the boundary that delivered the steer runs in the agent
|
|
14
|
+
* process, not this one.
|
|
15
|
+
*
|
|
16
|
+
* @since 0.1.0
|
|
17
|
+
*/
|
|
18
|
+
import type { ControlEvent } from "./ControlSchema.ts";
|
|
19
|
+
/**
|
|
20
|
+
* The journal event type the notification queue records a promotion under.
|
|
21
|
+
*
|
|
22
|
+
* Named as a string rather than imported so this projection reads a journal
|
|
23
|
+
* written by any queue implementation, exactly as `Lineage` reads engine
|
|
24
|
+
* decisions.
|
|
25
|
+
*
|
|
26
|
+
* @category constants
|
|
27
|
+
* @since 0.1.0
|
|
28
|
+
*/
|
|
29
|
+
export declare const promotedEventType = "flows/notifications/Promoted";
|
|
30
|
+
/**
|
|
31
|
+
* The kind `watch` reports one delivered steer under.
|
|
32
|
+
*
|
|
33
|
+
* @category constants
|
|
34
|
+
* @since 0.1.0
|
|
35
|
+
*/
|
|
36
|
+
export declare const deliveredEventType = "control.steer.delivered";
|
|
37
|
+
/**
|
|
38
|
+
* The kind `Control.steer` records an accepted steer under.
|
|
39
|
+
*
|
|
40
|
+
* @category constants
|
|
41
|
+
* @since 0.1.0
|
|
42
|
+
*/
|
|
43
|
+
export declare const enqueuedEventType = "control.steer.enqueued";
|
|
44
|
+
/**
|
|
45
|
+
* Derives one delivery delta per message a promotion entry named.
|
|
46
|
+
*
|
|
47
|
+
* A boundary promotes a batch, so one entry can disclose several deliveries.
|
|
48
|
+
* Each delta carries the source sequence and the boundary that took it.
|
|
49
|
+
* `ControlLive.watch` adds an expansion cursor so a consumer can resume
|
|
50
|
+
* between deliveries in the same batch.
|
|
51
|
+
*
|
|
52
|
+
* A promotion that named nothing derives nothing: an idle boundary drains an
|
|
53
|
+
* empty queue on every turn, and reporting that as a delivery would bury the
|
|
54
|
+
* real ones.
|
|
55
|
+
*
|
|
56
|
+
* @param event the projected journal entry
|
|
57
|
+
* @category projections
|
|
58
|
+
* @since 0.1.0
|
|
59
|
+
*/
|
|
60
|
+
export declare const derive: (event: ControlEvent) => ReadonlyArray<ControlEvent>;
|
|
61
|
+
/**
|
|
62
|
+
* Expands one projected entry into itself plus any deliveries it discloses.
|
|
63
|
+
*
|
|
64
|
+
* @param event the projected journal entry
|
|
65
|
+
* @category projections
|
|
66
|
+
* @since 0.1.0
|
|
67
|
+
*/
|
|
68
|
+
export declare const expand: (event: ControlEvent) => ReadonlyArray<ControlEvent>;
|
|
69
|
+
//# sourceMappingURL=Steering.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Steering.d.ts","sourceRoot":"","sources":["../../src/Steering.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAEtD;;;;;;;;;GASG;AACH,eAAO,MAAM,iBAAiB,iCAAiC,CAAA;AAE/D;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,4BAA4B,CAAA;AAE3D;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,2BAA2B,CAAA;AAUzD;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,MAAM,GAAI,OAAO,YAAY,KAAG,aAAa,CAAC,YAAY,CActE,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,MAAM,GAAI,OAAO,YAAY,KAAG,aAAa,CAAC,YAAY,CAA8B,CAAA"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The steer lifecycle as the control plane reads it back.
|
|
3
|
+
*
|
|
4
|
+
* A steer has two durable moments and two different writers. The control plane
|
|
5
|
+
* records the first — `control.steer.enqueued`, written beside the admission
|
|
6
|
+
* it caused. The second belongs to `@smthrs/notifications`: a turn boundary
|
|
7
|
+
* promotes the notification and the queue journals the promotion. This module
|
|
8
|
+
* projects that promotion into the control vocabulary, so a watcher folds one
|
|
9
|
+
* stream instead of two, and so nothing writes "delivered" twice.
|
|
10
|
+
*
|
|
11
|
+
* Deriving rather than re-recording is what keeps the two halves honest. A
|
|
12
|
+
* control plane that emitted its own delivery record would be asserting a fact
|
|
13
|
+
* it did not observe: the boundary that delivered the steer runs in the agent
|
|
14
|
+
* process, not this one.
|
|
15
|
+
*
|
|
16
|
+
* @since 0.1.0
|
|
17
|
+
*/
|
|
18
|
+
/**
|
|
19
|
+
* The journal event type the notification queue records a promotion under.
|
|
20
|
+
*
|
|
21
|
+
* Named as a string rather than imported so this projection reads a journal
|
|
22
|
+
* written by any queue implementation, exactly as `Lineage` reads engine
|
|
23
|
+
* decisions.
|
|
24
|
+
*
|
|
25
|
+
* @category constants
|
|
26
|
+
* @since 0.1.0
|
|
27
|
+
*/
|
|
28
|
+
export const promotedEventType = "flows/notifications/Promoted";
|
|
29
|
+
/**
|
|
30
|
+
* The kind `watch` reports one delivered steer under.
|
|
31
|
+
*
|
|
32
|
+
* @category constants
|
|
33
|
+
* @since 0.1.0
|
|
34
|
+
*/
|
|
35
|
+
export const deliveredEventType = "control.steer.delivered";
|
|
36
|
+
/**
|
|
37
|
+
* The kind `Control.steer` records an accepted steer under.
|
|
38
|
+
*
|
|
39
|
+
* @category constants
|
|
40
|
+
* @since 0.1.0
|
|
41
|
+
*/
|
|
42
|
+
export const enqueuedEventType = "control.steer.enqueued";
|
|
43
|
+
const record = (value) => typeof value === "object" && value !== null && !Array.isArray(value)
|
|
44
|
+
? value
|
|
45
|
+
: undefined;
|
|
46
|
+
const strings = (value) => Array.isArray(value) ? value.filter((entry) => typeof entry === "string") : [];
|
|
47
|
+
/**
|
|
48
|
+
* Derives one delivery delta per message a promotion entry named.
|
|
49
|
+
*
|
|
50
|
+
* A boundary promotes a batch, so one entry can disclose several deliveries.
|
|
51
|
+
* Each delta carries the source sequence and the boundary that took it.
|
|
52
|
+
* `ControlLive.watch` adds an expansion cursor so a consumer can resume
|
|
53
|
+
* between deliveries in the same batch.
|
|
54
|
+
*
|
|
55
|
+
* A promotion that named nothing derives nothing: an idle boundary drains an
|
|
56
|
+
* empty queue on every turn, and reporting that as a delivery would bury the
|
|
57
|
+
* real ones.
|
|
58
|
+
*
|
|
59
|
+
* @param event the projected journal entry
|
|
60
|
+
* @category projections
|
|
61
|
+
* @since 0.1.0
|
|
62
|
+
*/
|
|
63
|
+
export const derive = (event) => {
|
|
64
|
+
const runId = event.runId;
|
|
65
|
+
if (event.kind !== promotedEventType || runId === undefined)
|
|
66
|
+
return [];
|
|
67
|
+
const payload = record(event.payload);
|
|
68
|
+
if (payload === undefined)
|
|
69
|
+
return [];
|
|
70
|
+
const boundary = typeof payload["boundary"] === "string" ? payload["boundary"] : undefined;
|
|
71
|
+
if (boundary === undefined)
|
|
72
|
+
return [];
|
|
73
|
+
return strings(payload["ids"]).map((messageId) => ({
|
|
74
|
+
sequence: event.sequence,
|
|
75
|
+
kind: deliveredEventType,
|
|
76
|
+
runId,
|
|
77
|
+
occurredAt: event.occurredAt,
|
|
78
|
+
payload: { runId, messageId, boundary }
|
|
79
|
+
}));
|
|
80
|
+
};
|
|
81
|
+
/**
|
|
82
|
+
* Expands one projected entry into itself plus any deliveries it discloses.
|
|
83
|
+
*
|
|
84
|
+
* @param event the projected journal entry
|
|
85
|
+
* @category projections
|
|
86
|
+
* @since 0.1.0
|
|
87
|
+
*/
|
|
88
|
+
export const expand = (event) => [event, ...derive(event)];
|
|
89
|
+
//# sourceMappingURL=Steering.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Steering.js","sourceRoot":"","sources":["../../src/Steering.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAIH;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,8BAA8B,CAAA;AAE/D;;;;;GAKG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,yBAAyB,CAAA;AAE3D;;;;;GAKG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,wBAAwB,CAAA;AAEzD,MAAM,MAAM,GAAG,CAAC,KAAc,EAAiD,EAAE,CAC/E,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;IAClE,CAAC,CAAC,KAA0C;IAC5C,CAAC,CAAC,SAAS,CAAA;AAEf,MAAM,OAAO,GAAG,CAAC,KAAc,EAAyB,EAAE,CACxD,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;AAEjG;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,KAAmB,EAA+B,EAAE;IACzE,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAA;IACzB,IAAI,KAAK,CAAC,IAAI,KAAK,iBAAiB,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,EAAE,CAAA;IACtE,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IACrC,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,EAAE,CAAA;IACpC,MAAM,QAAQ,GAAG,OAAO,OAAO,CAAC,UAAU,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IAC1F,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,EAAE,CAAA;IACrC,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,EAAgB,EAAE,CAAC,CAAC;QAC/D,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,IAAI,EAAE,kBAAkB;QACxB,KAAK;QACL,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,OAAO,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE;KACxC,CAAC,CAAC,CAAA;AACL,CAAC,CAAA;AAED;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,KAAmB,EAA+B,EAAE,CAAC,CAAC,KAAK,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA","sourcesContent":["/**\n * The steer lifecycle as the control plane reads it back.\n *\n * A steer has two durable moments and two different writers. The control plane\n * records the first — `control.steer.enqueued`, written beside the admission\n * it caused. The second belongs to `@smthrs/notifications`: a turn boundary\n * promotes the notification and the queue journals the promotion. This module\n * projects that promotion into the control vocabulary, so a watcher folds one\n * stream instead of two, and so nothing writes \"delivered\" twice.\n *\n * Deriving rather than re-recording is what keeps the two halves honest. A\n * control plane that emitted its own delivery record would be asserting a fact\n * it did not observe: the boundary that delivered the steer runs in the agent\n * process, not this one.\n *\n * @since 0.1.0\n */\n\nimport type { ControlEvent } from \"./ControlSchema.ts\"\n\n/**\n * The journal event type the notification queue records a promotion under.\n *\n * Named as a string rather than imported so this projection reads a journal\n * written by any queue implementation, exactly as `Lineage` reads engine\n * decisions.\n *\n * @category constants\n * @since 0.1.0\n */\nexport const promotedEventType = \"flows/notifications/Promoted\"\n\n/**\n * The kind `watch` reports one delivered steer under.\n *\n * @category constants\n * @since 0.1.0\n */\nexport const deliveredEventType = \"control.steer.delivered\"\n\n/**\n * The kind `Control.steer` records an accepted steer under.\n *\n * @category constants\n * @since 0.1.0\n */\nexport const enqueuedEventType = \"control.steer.enqueued\"\n\nconst record = (value: unknown): Readonly<Record<string, unknown>> | undefined =>\n typeof value === \"object\" && value !== null && !Array.isArray(value)\n ? value as Readonly<Record<string, unknown>>\n : undefined\n\nconst strings = (value: unknown): ReadonlyArray<string> =>\n Array.isArray(value) ? value.filter((entry): entry is string => typeof entry === \"string\") : []\n\n/**\n * Derives one delivery delta per message a promotion entry named.\n *\n * A boundary promotes a batch, so one entry can disclose several deliveries.\n * Each delta carries the source sequence and the boundary that took it.\n * `ControlLive.watch` adds an expansion cursor so a consumer can resume\n * between deliveries in the same batch.\n *\n * A promotion that named nothing derives nothing: an idle boundary drains an\n * empty queue on every turn, and reporting that as a delivery would bury the\n * real ones.\n *\n * @param event the projected journal entry\n * @category projections\n * @since 0.1.0\n */\nexport const derive = (event: ControlEvent): ReadonlyArray<ControlEvent> => {\n const runId = event.runId\n if (event.kind !== promotedEventType || runId === undefined) return []\n const payload = record(event.payload)\n if (payload === undefined) return []\n const boundary = typeof payload[\"boundary\"] === \"string\" ? payload[\"boundary\"] : undefined\n if (boundary === undefined) return []\n return strings(payload[\"ids\"]).map((messageId): ControlEvent => ({\n sequence: event.sequence,\n kind: deliveredEventType,\n runId,\n occurredAt: event.occurredAt,\n payload: { runId, messageId, boundary }\n }))\n}\n\n/**\n * Expands one projected entry into itself plus any deliveries it discloses.\n *\n * @param event the projected journal entry\n * @category projections\n * @since 0.1.0\n */\nexport const expand = (event: ControlEvent): ReadonlyArray<ControlEvent> => [event, ...derive(event)]\n"]}
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reserved system-flow identifiers projected by the command-line interface.
|
|
3
|
+
*
|
|
4
|
+
* @since 0.1.0
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* The projection metadata for one reserved system flow.
|
|
8
|
+
*
|
|
9
|
+
* @since 0.1.0
|
|
10
|
+
* @category models
|
|
11
|
+
*/
|
|
12
|
+
export interface SystemFlowEntry {
|
|
13
|
+
readonly verb: string;
|
|
14
|
+
readonly flowId: `system/${string}`;
|
|
15
|
+
readonly projection: "procedure" | "systemFlow";
|
|
16
|
+
readonly deployClass: boolean;
|
|
17
|
+
readonly planBearing: boolean;
|
|
18
|
+
/**
|
|
19
|
+
* Whether a control plane may plan and run this reserved id.
|
|
20
|
+
*
|
|
21
|
+
* `false` means the row is command-line metadata and nothing else: the verb
|
|
22
|
+
* is named here so the binary can refuse it by name, and no runtime may
|
|
23
|
+
* offer it as a flow. `replay` was removed by the frozen rc.0 contract yet
|
|
24
|
+
* every runtime turned the whole catalog into plannable flows, so
|
|
25
|
+
* `plan({flowId: "system/replay"})` returned a real approval card and only a
|
|
26
|
+
* later `run` failed. A removed feature that half works is exactly what the
|
|
27
|
+
* contract forbids.
|
|
28
|
+
*/
|
|
29
|
+
readonly plannable: boolean;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* The authoritative command-line verb to reserved-flow map.
|
|
33
|
+
*
|
|
34
|
+
* `gc` is the retention verb: it resolves `@smthrs/engine-store`'s `retain`
|
|
35
|
+
* operation, which deletes aged terminal runs with their attempts, clock
|
|
36
|
+
* deadlines, deferred completions, journal entries, and time-travel archive
|
|
37
|
+
* rows. It is a procedure rather than a deploy-class system flow because it
|
|
38
|
+
* takes no plan and bears no approval envelope; the deletion is gated by the
|
|
39
|
+
* operator invoking it, and automatic retention stays opt-in.
|
|
40
|
+
*
|
|
41
|
+
* @since 0.1.0
|
|
42
|
+
* @category models
|
|
43
|
+
*/
|
|
44
|
+
export declare const catalog: readonly [{
|
|
45
|
+
readonly verb: "plan";
|
|
46
|
+
readonly flowId: "system/plan";
|
|
47
|
+
readonly projection: "procedure";
|
|
48
|
+
readonly deployClass: false;
|
|
49
|
+
readonly planBearing: false;
|
|
50
|
+
readonly plannable: true;
|
|
51
|
+
}, {
|
|
52
|
+
readonly verb: "run";
|
|
53
|
+
readonly flowId: "system/run";
|
|
54
|
+
readonly projection: "procedure";
|
|
55
|
+
readonly deployClass: false;
|
|
56
|
+
readonly planBearing: false;
|
|
57
|
+
readonly plannable: true;
|
|
58
|
+
}, {
|
|
59
|
+
readonly verb: "release";
|
|
60
|
+
readonly flowId: "system/release";
|
|
61
|
+
readonly projection: "systemFlow";
|
|
62
|
+
readonly deployClass: true;
|
|
63
|
+
readonly planBearing: true;
|
|
64
|
+
readonly plannable: true;
|
|
65
|
+
}, {
|
|
66
|
+
readonly verb: "serve";
|
|
67
|
+
readonly flowId: "system/serve";
|
|
68
|
+
readonly projection: "systemFlow";
|
|
69
|
+
readonly deployClass: true;
|
|
70
|
+
readonly planBearing: true;
|
|
71
|
+
readonly plannable: true;
|
|
72
|
+
}, {
|
|
73
|
+
readonly verb: "up";
|
|
74
|
+
readonly flowId: "system/up";
|
|
75
|
+
readonly projection: "systemFlow";
|
|
76
|
+
readonly deployClass: true;
|
|
77
|
+
readonly planBearing: true;
|
|
78
|
+
readonly plannable: true;
|
|
79
|
+
}, {
|
|
80
|
+
readonly verb: "ls";
|
|
81
|
+
readonly flowId: "system/ls";
|
|
82
|
+
readonly projection: "procedure";
|
|
83
|
+
readonly deployClass: false;
|
|
84
|
+
readonly planBearing: false;
|
|
85
|
+
readonly plannable: true;
|
|
86
|
+
}, {
|
|
87
|
+
readonly verb: "ps";
|
|
88
|
+
readonly flowId: "system/ps";
|
|
89
|
+
readonly projection: "procedure";
|
|
90
|
+
readonly deployClass: false;
|
|
91
|
+
readonly planBearing: false;
|
|
92
|
+
readonly plannable: true;
|
|
93
|
+
}, {
|
|
94
|
+
readonly verb: "logs";
|
|
95
|
+
readonly flowId: "system/logs";
|
|
96
|
+
readonly projection: "procedure";
|
|
97
|
+
readonly deployClass: false;
|
|
98
|
+
readonly planBearing: false;
|
|
99
|
+
readonly plannable: true;
|
|
100
|
+
}, {
|
|
101
|
+
readonly verb: "status";
|
|
102
|
+
readonly flowId: "system/status";
|
|
103
|
+
readonly projection: "procedure";
|
|
104
|
+
readonly deployClass: false;
|
|
105
|
+
readonly planBearing: false;
|
|
106
|
+
readonly plannable: true;
|
|
107
|
+
}, {
|
|
108
|
+
readonly verb: "cancel";
|
|
109
|
+
readonly flowId: "system/cancel";
|
|
110
|
+
readonly projection: "procedure";
|
|
111
|
+
readonly deployClass: false;
|
|
112
|
+
readonly planBearing: false;
|
|
113
|
+
readonly plannable: true;
|
|
114
|
+
}, {
|
|
115
|
+
readonly verb: "approve";
|
|
116
|
+
readonly flowId: "system/approve";
|
|
117
|
+
readonly projection: "procedure";
|
|
118
|
+
readonly deployClass: false;
|
|
119
|
+
readonly planBearing: false;
|
|
120
|
+
readonly plannable: true;
|
|
121
|
+
}, {
|
|
122
|
+
readonly verb: "deny";
|
|
123
|
+
readonly flowId: "system/deny";
|
|
124
|
+
readonly projection: "procedure";
|
|
125
|
+
readonly deployClass: false;
|
|
126
|
+
readonly planBearing: false;
|
|
127
|
+
readonly plannable: true;
|
|
128
|
+
}, {
|
|
129
|
+
readonly verb: "signal";
|
|
130
|
+
readonly flowId: "system/signal";
|
|
131
|
+
readonly projection: "procedure";
|
|
132
|
+
readonly deployClass: false;
|
|
133
|
+
readonly planBearing: false;
|
|
134
|
+
readonly plannable: true;
|
|
135
|
+
}, {
|
|
136
|
+
readonly verb: "gc";
|
|
137
|
+
readonly flowId: "system/gc";
|
|
138
|
+
readonly projection: "procedure";
|
|
139
|
+
readonly deployClass: false;
|
|
140
|
+
readonly planBearing: false;
|
|
141
|
+
readonly plannable: true;
|
|
142
|
+
}, {
|
|
143
|
+
readonly verb: "replay";
|
|
144
|
+
readonly flowId: "system/replay";
|
|
145
|
+
readonly projection: "systemFlow";
|
|
146
|
+
readonly deployClass: false;
|
|
147
|
+
readonly planBearing: false;
|
|
148
|
+
readonly plannable: false;
|
|
149
|
+
}, {
|
|
150
|
+
readonly verb: "add";
|
|
151
|
+
readonly flowId: "system/add";
|
|
152
|
+
readonly projection: "systemFlow";
|
|
153
|
+
readonly deployClass: false;
|
|
154
|
+
readonly planBearing: true;
|
|
155
|
+
readonly plannable: true;
|
|
156
|
+
}, {
|
|
157
|
+
readonly verb: "remove";
|
|
158
|
+
readonly flowId: "system/remove";
|
|
159
|
+
readonly projection: "systemFlow";
|
|
160
|
+
readonly deployClass: false;
|
|
161
|
+
readonly planBearing: true;
|
|
162
|
+
readonly plannable: true;
|
|
163
|
+
}, {
|
|
164
|
+
readonly verb: "eject";
|
|
165
|
+
readonly flowId: "system/eject";
|
|
166
|
+
readonly projection: "systemFlow";
|
|
167
|
+
readonly deployClass: false;
|
|
168
|
+
readonly planBearing: true;
|
|
169
|
+
readonly plannable: true;
|
|
170
|
+
}, {
|
|
171
|
+
readonly verb: "test";
|
|
172
|
+
readonly flowId: "system/test";
|
|
173
|
+
readonly projection: "systemFlow";
|
|
174
|
+
readonly deployClass: false;
|
|
175
|
+
readonly planBearing: false;
|
|
176
|
+
readonly plannable: true;
|
|
177
|
+
}, {
|
|
178
|
+
readonly verb: "init";
|
|
179
|
+
readonly flowId: "system/init";
|
|
180
|
+
readonly projection: "systemFlow";
|
|
181
|
+
readonly deployClass: false;
|
|
182
|
+
readonly planBearing: true;
|
|
183
|
+
readonly plannable: true;
|
|
184
|
+
}, {
|
|
185
|
+
readonly verb: "doctor";
|
|
186
|
+
readonly flowId: "system/doctor";
|
|
187
|
+
readonly projection: "systemFlow";
|
|
188
|
+
readonly deployClass: false;
|
|
189
|
+
readonly planBearing: false;
|
|
190
|
+
readonly plannable: true;
|
|
191
|
+
}, {
|
|
192
|
+
readonly verb: "migrate";
|
|
193
|
+
readonly flowId: "system/migrate";
|
|
194
|
+
readonly projection: "systemFlow";
|
|
195
|
+
readonly deployClass: false;
|
|
196
|
+
readonly planBearing: true;
|
|
197
|
+
readonly plannable: true;
|
|
198
|
+
}, {
|
|
199
|
+
readonly verb: "target";
|
|
200
|
+
readonly flowId: "system/target";
|
|
201
|
+
readonly projection: "systemFlow";
|
|
202
|
+
readonly deployClass: true;
|
|
203
|
+
readonly planBearing: true;
|
|
204
|
+
readonly plannable: true;
|
|
205
|
+
}, {
|
|
206
|
+
readonly verb: "docs";
|
|
207
|
+
readonly flowId: "system/docs";
|
|
208
|
+
readonly projection: "systemFlow";
|
|
209
|
+
readonly deployClass: false;
|
|
210
|
+
readonly planBearing: false;
|
|
211
|
+
readonly plannable: true;
|
|
212
|
+
}];
|
|
213
|
+
/**
|
|
214
|
+
* The catalog entries a control runtime may offer as flows.
|
|
215
|
+
*
|
|
216
|
+
* One list, so a composition that builds its own flow map (the CLI does) and
|
|
217
|
+
* the runtimes' own defaults cannot disagree about which reserved ids exist.
|
|
218
|
+
*
|
|
219
|
+
* @since 0.1.0
|
|
220
|
+
* @category models
|
|
221
|
+
*/
|
|
222
|
+
export declare const plannable: ReadonlyArray<SystemFlowEntry>;
|
|
223
|
+
//# sourceMappingURL=SystemFlows.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SystemFlows.d.ts","sourceRoot":"","sources":["../../src/SystemFlows.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,MAAM,EAAE,UAAU,MAAM,EAAE,CAAA;IACnC,QAAQ,CAAC,UAAU,EAAE,WAAW,GAAG,YAAY,CAAA;IAC/C,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAA;IAC7B,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAA;IAC7B;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAA;CAC5B;AAED;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwK+B,CAAA;AAEnD;;;;;;;;GAQG;AACH,eAAO,MAAM,SAAS,EAAE,aAAa,CAAC,eAAe,CAA8C,CAAA"}
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reserved system-flow identifiers projected by the command-line interface.
|
|
3
|
+
*
|
|
4
|
+
* @since 0.1.0
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* The authoritative command-line verb to reserved-flow map.
|
|
8
|
+
*
|
|
9
|
+
* `gc` is the retention verb: it resolves `@smthrs/engine-store`'s `retain`
|
|
10
|
+
* operation, which deletes aged terminal runs with their attempts, clock
|
|
11
|
+
* deadlines, deferred completions, journal entries, and time-travel archive
|
|
12
|
+
* rows. It is a procedure rather than a deploy-class system flow because it
|
|
13
|
+
* takes no plan and bears no approval envelope; the deletion is gated by the
|
|
14
|
+
* operator invoking it, and automatic retention stays opt-in.
|
|
15
|
+
*
|
|
16
|
+
* @since 0.1.0
|
|
17
|
+
* @category models
|
|
18
|
+
*/
|
|
19
|
+
export const catalog = [
|
|
20
|
+
{
|
|
21
|
+
verb: "plan",
|
|
22
|
+
flowId: "system/plan",
|
|
23
|
+
projection: "procedure",
|
|
24
|
+
deployClass: false,
|
|
25
|
+
planBearing: false,
|
|
26
|
+
plannable: true
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
verb: "run",
|
|
30
|
+
flowId: "system/run",
|
|
31
|
+
projection: "procedure",
|
|
32
|
+
deployClass: false,
|
|
33
|
+
planBearing: false,
|
|
34
|
+
plannable: true
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
verb: "release",
|
|
38
|
+
flowId: "system/release",
|
|
39
|
+
projection: "systemFlow",
|
|
40
|
+
deployClass: true,
|
|
41
|
+
planBearing: true,
|
|
42
|
+
plannable: true
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
verb: "serve",
|
|
46
|
+
flowId: "system/serve",
|
|
47
|
+
projection: "systemFlow",
|
|
48
|
+
deployClass: true,
|
|
49
|
+
planBearing: true,
|
|
50
|
+
plannable: true
|
|
51
|
+
},
|
|
52
|
+
{ verb: "up", flowId: "system/up", projection: "systemFlow", deployClass: true, planBearing: true, plannable: true },
|
|
53
|
+
{ verb: "ls", flowId: "system/ls", projection: "procedure", deployClass: false, planBearing: false, plannable: true },
|
|
54
|
+
{ verb: "ps", flowId: "system/ps", projection: "procedure", deployClass: false, planBearing: false, plannable: true },
|
|
55
|
+
{
|
|
56
|
+
verb: "logs",
|
|
57
|
+
flowId: "system/logs",
|
|
58
|
+
projection: "procedure",
|
|
59
|
+
deployClass: false,
|
|
60
|
+
planBearing: false,
|
|
61
|
+
plannable: true
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
verb: "status",
|
|
65
|
+
flowId: "system/status",
|
|
66
|
+
projection: "procedure",
|
|
67
|
+
deployClass: false,
|
|
68
|
+
planBearing: false,
|
|
69
|
+
plannable: true
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
verb: "cancel",
|
|
73
|
+
flowId: "system/cancel",
|
|
74
|
+
projection: "procedure",
|
|
75
|
+
deployClass: false,
|
|
76
|
+
planBearing: false,
|
|
77
|
+
plannable: true
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
verb: "approve",
|
|
81
|
+
flowId: "system/approve",
|
|
82
|
+
projection: "procedure",
|
|
83
|
+
deployClass: false,
|
|
84
|
+
planBearing: false,
|
|
85
|
+
plannable: true
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
verb: "deny",
|
|
89
|
+
flowId: "system/deny",
|
|
90
|
+
projection: "procedure",
|
|
91
|
+
deployClass: false,
|
|
92
|
+
planBearing: false,
|
|
93
|
+
plannable: true
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
verb: "signal",
|
|
97
|
+
flowId: "system/signal",
|
|
98
|
+
projection: "procedure",
|
|
99
|
+
deployClass: false,
|
|
100
|
+
planBearing: false,
|
|
101
|
+
plannable: true
|
|
102
|
+
},
|
|
103
|
+
{ verb: "gc", flowId: "system/gc", projection: "procedure", deployClass: false, planBearing: false, plannable: true },
|
|
104
|
+
{
|
|
105
|
+
verb: "replay",
|
|
106
|
+
flowId: "system/replay",
|
|
107
|
+
projection: "systemFlow",
|
|
108
|
+
deployClass: false,
|
|
109
|
+
planBearing: false,
|
|
110
|
+
plannable: false
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
verb: "add",
|
|
114
|
+
flowId: "system/add",
|
|
115
|
+
projection: "systemFlow",
|
|
116
|
+
deployClass: false,
|
|
117
|
+
planBearing: true,
|
|
118
|
+
plannable: true
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
verb: "remove",
|
|
122
|
+
flowId: "system/remove",
|
|
123
|
+
projection: "systemFlow",
|
|
124
|
+
deployClass: false,
|
|
125
|
+
planBearing: true,
|
|
126
|
+
plannable: true
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
verb: "eject",
|
|
130
|
+
flowId: "system/eject",
|
|
131
|
+
projection: "systemFlow",
|
|
132
|
+
deployClass: false,
|
|
133
|
+
planBearing: true,
|
|
134
|
+
plannable: true
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
verb: "test",
|
|
138
|
+
flowId: "system/test",
|
|
139
|
+
projection: "systemFlow",
|
|
140
|
+
deployClass: false,
|
|
141
|
+
planBearing: false,
|
|
142
|
+
plannable: true
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
verb: "init",
|
|
146
|
+
flowId: "system/init",
|
|
147
|
+
projection: "systemFlow",
|
|
148
|
+
deployClass: false,
|
|
149
|
+
planBearing: true,
|
|
150
|
+
plannable: true
|
|
151
|
+
},
|
|
152
|
+
{
|
|
153
|
+
verb: "doctor",
|
|
154
|
+
flowId: "system/doctor",
|
|
155
|
+
projection: "systemFlow",
|
|
156
|
+
deployClass: false,
|
|
157
|
+
planBearing: false,
|
|
158
|
+
plannable: true
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
verb: "migrate",
|
|
162
|
+
flowId: "system/migrate",
|
|
163
|
+
projection: "systemFlow",
|
|
164
|
+
deployClass: false,
|
|
165
|
+
planBearing: true,
|
|
166
|
+
plannable: true
|
|
167
|
+
},
|
|
168
|
+
{
|
|
169
|
+
// A build target declaring `approval: "required"`: its plan input is the
|
|
170
|
+
// target's label and revision digest, and the build planner runs it only
|
|
171
|
+
// once that plan is approved. The build executes it, never a control run.
|
|
172
|
+
verb: "target",
|
|
173
|
+
flowId: "system/target",
|
|
174
|
+
projection: "systemFlow",
|
|
175
|
+
deployClass: true,
|
|
176
|
+
planBearing: true,
|
|
177
|
+
plannable: true
|
|
178
|
+
},
|
|
179
|
+
{
|
|
180
|
+
verb: "docs",
|
|
181
|
+
flowId: "system/docs",
|
|
182
|
+
projection: "systemFlow",
|
|
183
|
+
deployClass: false,
|
|
184
|
+
planBearing: false,
|
|
185
|
+
plannable: true
|
|
186
|
+
}
|
|
187
|
+
];
|
|
188
|
+
/**
|
|
189
|
+
* The catalog entries a control runtime may offer as flows.
|
|
190
|
+
*
|
|
191
|
+
* One list, so a composition that builds its own flow map (the CLI does) and
|
|
192
|
+
* the runtimes' own defaults cannot disagree about which reserved ids exist.
|
|
193
|
+
*
|
|
194
|
+
* @since 0.1.0
|
|
195
|
+
* @category models
|
|
196
|
+
*/
|
|
197
|
+
export const plannable = catalog.filter((entry) => entry.plannable);
|
|
198
|
+
//# sourceMappingURL=SystemFlows.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SystemFlows.js","sourceRoot":"","sources":["../../src/SystemFlows.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Reserved system-flow identifiers projected by the command-line interface.\n *\n * @since 0.1.0\n */\n\n/**\n * The projection metadata for one reserved system flow.\n *\n * @since 0.1.0\n * @category models\n */\nexport interface SystemFlowEntry {\n readonly verb: string\n readonly flowId: `system/${string}`\n readonly projection: \"procedure\" | \"systemFlow\"\n readonly deployClass: boolean\n readonly planBearing: boolean\n /**\n * Whether a control plane may plan and run this reserved id.\n *\n * `false` means the row is command-line metadata and nothing else: the verb\n * is named here so the binary can refuse it by name, and no runtime may\n * offer it as a flow. `replay` was removed by the frozen rc.0 contract yet\n * every runtime turned the whole catalog into plannable flows, so\n * `plan({flowId: \"system/replay\"})` returned a real approval card and only a\n * later `run` failed. A removed feature that half works is exactly what the\n * contract forbids.\n */\n readonly plannable: boolean\n}\n\n/**\n * The authoritative command-line verb to reserved-flow map.\n *\n * `gc` is the retention verb: it resolves `@smthrs/engine-store`'s `retain`\n * operation, which deletes aged terminal runs with their attempts, clock\n * deadlines, deferred completions, journal entries, and time-travel archive\n * rows. It is a procedure rather than a deploy-class system flow because it\n * takes no plan and bears no approval envelope; the deletion is gated by the\n * operator invoking it, and automatic retention stays opt-in.\n *\n * @since 0.1.0\n * @category models\n */\nexport const catalog = [\n {\n verb: \"plan\",\n flowId: \"system/plan\",\n projection: \"procedure\",\n deployClass: false,\n planBearing: false,\n plannable: true\n },\n {\n verb: \"run\",\n flowId: \"system/run\",\n projection: \"procedure\",\n deployClass: false,\n planBearing: false,\n plannable: true\n },\n {\n verb: \"release\",\n flowId: \"system/release\",\n projection: \"systemFlow\",\n deployClass: true,\n planBearing: true,\n plannable: true\n },\n {\n verb: \"serve\",\n flowId: \"system/serve\",\n projection: \"systemFlow\",\n deployClass: true,\n planBearing: true,\n plannable: true\n },\n { verb: \"up\", flowId: \"system/up\", projection: \"systemFlow\", deployClass: true, planBearing: true, plannable: true },\n { verb: \"ls\", flowId: \"system/ls\", projection: \"procedure\", deployClass: false, planBearing: false, plannable: true },\n { verb: \"ps\", flowId: \"system/ps\", projection: \"procedure\", deployClass: false, planBearing: false, plannable: true },\n {\n verb: \"logs\",\n flowId: \"system/logs\",\n projection: \"procedure\",\n deployClass: false,\n planBearing: false,\n plannable: true\n },\n {\n verb: \"status\",\n flowId: \"system/status\",\n projection: \"procedure\",\n deployClass: false,\n planBearing: false,\n plannable: true\n },\n {\n verb: \"cancel\",\n flowId: \"system/cancel\",\n projection: \"procedure\",\n deployClass: false,\n planBearing: false,\n plannable: true\n },\n {\n verb: \"approve\",\n flowId: \"system/approve\",\n projection: \"procedure\",\n deployClass: false,\n planBearing: false,\n plannable: true\n },\n {\n verb: \"deny\",\n flowId: \"system/deny\",\n projection: \"procedure\",\n deployClass: false,\n planBearing: false,\n plannable: true\n },\n {\n verb: \"signal\",\n flowId: \"system/signal\",\n projection: \"procedure\",\n deployClass: false,\n planBearing: false,\n plannable: true\n },\n { verb: \"gc\", flowId: \"system/gc\", projection: \"procedure\", deployClass: false, planBearing: false, plannable: true },\n {\n verb: \"replay\",\n flowId: \"system/replay\",\n projection: \"systemFlow\",\n deployClass: false,\n planBearing: false,\n plannable: false\n },\n {\n verb: \"add\",\n flowId: \"system/add\",\n projection: \"systemFlow\",\n deployClass: false,\n planBearing: true,\n plannable: true\n },\n {\n verb: \"remove\",\n flowId: \"system/remove\",\n projection: \"systemFlow\",\n deployClass: false,\n planBearing: true,\n plannable: true\n },\n {\n verb: \"eject\",\n flowId: \"system/eject\",\n projection: \"systemFlow\",\n deployClass: false,\n planBearing: true,\n plannable: true\n },\n {\n verb: \"test\",\n flowId: \"system/test\",\n projection: \"systemFlow\",\n deployClass: false,\n planBearing: false,\n plannable: true\n },\n {\n verb: \"init\",\n flowId: \"system/init\",\n projection: \"systemFlow\",\n deployClass: false,\n planBearing: true,\n plannable: true\n },\n {\n verb: \"doctor\",\n flowId: \"system/doctor\",\n projection: \"systemFlow\",\n deployClass: false,\n planBearing: false,\n plannable: true\n },\n {\n verb: \"migrate\",\n flowId: \"system/migrate\",\n projection: \"systemFlow\",\n deployClass: false,\n planBearing: true,\n plannable: true\n },\n {\n // A build target declaring `approval: \"required\"`: its plan input is the\n // target's label and revision digest, and the build planner runs it only\n // once that plan is approved. The build executes it, never a control run.\n verb: \"target\",\n flowId: \"system/target\",\n projection: \"systemFlow\",\n deployClass: true,\n planBearing: true,\n plannable: true\n },\n {\n verb: \"docs\",\n flowId: \"system/docs\",\n projection: \"systemFlow\",\n deployClass: false,\n planBearing: false,\n plannable: true\n }\n] as const satisfies ReadonlyArray<SystemFlowEntry>\n\n/**\n * The catalog entries a control runtime may offer as flows.\n *\n * One list, so a composition that builds its own flow map (the CLI does) and\n * the runtimes' own defaults cannot disagree about which reserved ids exist.\n *\n * @since 0.1.0\n * @category models\n */\nexport const plannable: ReadonlyArray<SystemFlowEntry> = catalog.filter((entry) => entry.plannable)\n"]}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AES-256-GCM credential encryption over the Web Crypto API.
|
|
3
|
+
*
|
|
4
|
+
* One adapter serves both hosts the project supports: `globalThis.crypto.subtle`
|
|
5
|
+
* is the browser's own API and has been Node's since v19, so this module
|
|
6
|
+
* imports nothing from `node:*` and still runs unmodified on the server. A host
|
|
7
|
+
* without Web Crypto, such as an old runtime or a locked-down worker, fails
|
|
8
|
+
* with the typed `Unavailable`, never a defect. A key that is not 32
|
|
9
|
+
* base64-encoded bytes fails with `InvalidInput`. A record that does not open
|
|
10
|
+
* fails with `PersistenceError` on operation `credential.open`, which names
|
|
11
|
+
* whether the stored nonce was malformed or the ciphertext failed
|
|
12
|
+
* authentication (a different key, changed metadata, or tampered bytes).
|
|
13
|
+
*
|
|
14
|
+
* The key is host-managed and supplied at layer construction. It is held as a
|
|
15
|
+
* non-extractable `CryptoKey`, so it cannot be read back out of the cipher, and
|
|
16
|
+
* it never reaches `CredentialStore`.
|
|
17
|
+
*
|
|
18
|
+
* @since 0.1.0
|
|
19
|
+
*/
|
|
20
|
+
import { Effect, Layer, Redacted } from "effect";
|
|
21
|
+
import { InvalidInput, type Unavailable } from "./ControlError.ts";
|
|
22
|
+
import * as CredentialCipher from "./CredentialCipher.ts";
|
|
23
|
+
/**
|
|
24
|
+
* Host-managed key material for the cipher.
|
|
25
|
+
*
|
|
26
|
+
* `key` is 32 raw bytes, base64-encoded, held redacted so it cannot be printed
|
|
27
|
+
* or serialized by accident.
|
|
28
|
+
*
|
|
29
|
+
* @category models
|
|
30
|
+
* @since 0.1.0
|
|
31
|
+
*/
|
|
32
|
+
export interface Options {
|
|
33
|
+
readonly key: Redacted.Redacted<string>;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Imports the host key and constructs the cipher.
|
|
37
|
+
*
|
|
38
|
+
* @category constructors
|
|
39
|
+
* @since 0.1.0
|
|
40
|
+
*/
|
|
41
|
+
export declare const make: (options: Options) => Effect.Effect<CredentialCipher.Service, Unavailable | InvalidInput>;
|
|
42
|
+
/**
|
|
43
|
+
* Provides AES-256-GCM credential encryption under a host-managed key.
|
|
44
|
+
*
|
|
45
|
+
* @category layers
|
|
46
|
+
* @since 0.1.0
|
|
47
|
+
*/
|
|
48
|
+
export declare const layer: (options: Options) => Layer.Layer<CredentialCipher.CredentialCipher, Unavailable | InvalidInput>;
|
|
49
|
+
//# sourceMappingURL=WebCryptoCipher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WebCryptoCipher.d.ts","sourceRoot":"","sources":["../../src/WebCryptoCipher.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAGH,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAA;AAChD,OAAO,EAAE,YAAY,EAAoB,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAA;AACpF,OAAO,KAAK,gBAAgB,MAAM,uBAAuB,CAAA;AA+DzD;;;;;;;;GAQG;AACH,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;CACxC;AAED;;;;;GAKG;AACH,eAAO,MAAM,IAAI,GAAI,SAAS,OAAO,KAAG,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,WAAW,GAAG,YAAY,CAoDtG,CAAA;AAEJ;;;;;GAKG;AACH,eAAO,MAAM,KAAK,GAChB,SAAS,OAAO,KACf,KAAK,CAAC,KAAK,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,WAAW,GAAG,YAAY,CACZ,CAAA"}
|