@software-dlc/cli 0.157.2
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 +11 -0
- package/LICENSE +105 -0
- package/README.md +31 -0
- package/dist/checkout.d.ts +43 -0
- package/dist/checkout.d.ts.map +1 -0
- package/dist/checkout.js +92 -0
- package/dist/checkout.js.map +1 -0
- package/dist/cli-arguments.d.ts +13 -0
- package/dist/cli-arguments.d.ts.map +1 -0
- package/dist/cli-arguments.js +67 -0
- package/dist/cli-arguments.js.map +1 -0
- package/dist/cli-branch-history.d.ts +48 -0
- package/dist/cli-branch-history.d.ts.map +1 -0
- package/dist/cli-branch-history.js +319 -0
- package/dist/cli-branch-history.js.map +1 -0
- package/dist/cli-branches.d.ts +22 -0
- package/dist/cli-branches.d.ts.map +1 -0
- package/dist/cli-branches.js +59 -0
- package/dist/cli-branches.js.map +1 -0
- package/dist/cli-deploy.d.ts +14 -0
- package/dist/cli-deploy.d.ts.map +1 -0
- package/dist/cli-deploy.js +164 -0
- package/dist/cli-deploy.js.map +1 -0
- package/dist/cli-health.d.ts +3 -0
- package/dist/cli-health.d.ts.map +1 -0
- package/dist/cli-health.js +73 -0
- package/dist/cli-health.js.map +1 -0
- package/dist/cli-help.d.ts +21 -0
- package/dist/cli-help.d.ts.map +1 -0
- package/dist/cli-help.js +176 -0
- package/dist/cli-help.js.map +1 -0
- package/dist/cli-login.d.ts +76 -0
- package/dist/cli-login.d.ts.map +1 -0
- package/dist/cli-login.js +634 -0
- package/dist/cli-login.js.map +1 -0
- package/dist/cli-operation.d.ts +2 -0
- package/dist/cli-operation.d.ts.map +1 -0
- package/dist/cli-operation.js +66 -0
- package/dist/cli-operation.js.map +1 -0
- package/dist/cli-org.d.ts +12 -0
- package/dist/cli-org.d.ts.map +1 -0
- package/dist/cli-org.js +218 -0
- package/dist/cli-org.js.map +1 -0
- package/dist/cli-rebuild.d.ts +20 -0
- package/dist/cli-rebuild.d.ts.map +1 -0
- package/dist/cli-rebuild.js +29 -0
- package/dist/cli-rebuild.js.map +1 -0
- package/dist/cli-reset.d.ts +27 -0
- package/dist/cli-reset.d.ts.map +1 -0
- package/dist/cli-reset.js +44 -0
- package/dist/cli-reset.js.map +1 -0
- package/dist/cli-snapshot.d.ts +398 -0
- package/dist/cli-snapshot.d.ts.map +1 -0
- package/dist/cli-snapshot.js +45 -0
- package/dist/cli-snapshot.js.map +1 -0
- package/dist/cli-task-context.d.ts +3 -0
- package/dist/cli-task-context.d.ts.map +1 -0
- package/dist/cli-task-context.js +112 -0
- package/dist/cli-task-context.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +1004 -0
- package/dist/cli.js.map +1 -0
- package/dist/graph-packages-lock.d.ts +169 -0
- package/dist/graph-packages-lock.d.ts.map +1 -0
- package/dist/graph-packages-lock.js +503 -0
- package/dist/graph-packages-lock.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/local/aggregate-preflight.d.ts +12 -0
- package/dist/local/aggregate-preflight.d.ts.map +1 -0
- package/dist/local/aggregate-preflight.js +22 -0
- package/dist/local/aggregate-preflight.js.map +1 -0
- package/dist/local/allow-mcp.d.ts +77 -0
- package/dist/local/allow-mcp.d.ts.map +1 -0
- package/dist/local/allow-mcp.js +394 -0
- package/dist/local/allow-mcp.js.map +1 -0
- package/dist/local/api-client.d.ts +15 -0
- package/dist/local/api-client.d.ts.map +1 -0
- package/dist/local/api-client.js +87 -0
- package/dist/local/api-client.js.map +1 -0
- package/dist/local/app-contract-readers.d.ts +229 -0
- package/dist/local/app-contract-readers.d.ts.map +1 -0
- package/dist/local/app-contract-readers.js +450 -0
- package/dist/local/app-contract-readers.js.map +1 -0
- package/dist/local/app-org-reader.d.ts +21 -0
- package/dist/local/app-org-reader.d.ts.map +1 -0
- package/dist/local/app-org-reader.js +66 -0
- package/dist/local/app-org-reader.js.map +1 -0
- package/dist/local/app-shell-readers.d.ts +96 -0
- package/dist/local/app-shell-readers.d.ts.map +1 -0
- package/dist/local/app-shell-readers.js +381 -0
- package/dist/local/app-shell-readers.js.map +1 -0
- package/dist/local/app-tasks-read.d.ts +202 -0
- package/dist/local/app-tasks-read.d.ts.map +1 -0
- package/dist/local/app-tasks-read.js +290 -0
- package/dist/local/app-tasks-read.js.map +1 -0
- package/dist/local/app-worktrees.d.ts +69 -0
- package/dist/local/app-worktrees.d.ts.map +1 -0
- package/dist/local/app-worktrees.js +554 -0
- package/dist/local/app-worktrees.js.map +1 -0
- package/dist/local/base-sync-manifest.d.ts +12 -0
- package/dist/local/base-sync-manifest.d.ts.map +1 -0
- package/dist/local/base-sync-manifest.js +57 -0
- package/dist/local/base-sync-manifest.js.map +1 -0
- package/dist/local/blast-radius.d.ts +191 -0
- package/dist/local/blast-radius.d.ts.map +1 -0
- package/dist/local/blast-radius.js +585 -0
- package/dist/local/blast-radius.js.map +1 -0
- package/dist/local/canonical.d.ts +2 -0
- package/dist/local/canonical.d.ts.map +1 -0
- package/dist/local/canonical.js +2 -0
- package/dist/local/canonical.js.map +1 -0
- package/dist/local/config.d.ts +22 -0
- package/dist/local/config.d.ts.map +1 -0
- package/dist/local/config.js +57 -0
- package/dist/local/config.js.map +1 -0
- package/dist/local/document-commands.d.ts +163 -0
- package/dist/local/document-commands.d.ts.map +1 -0
- package/dist/local/document-commands.js +620 -0
- package/dist/local/document-commands.js.map +1 -0
- package/dist/local/document-embeds.d.ts +21 -0
- package/dist/local/document-embeds.d.ts.map +1 -0
- package/dist/local/document-embeds.js +38 -0
- package/dist/local/document-embeds.js.map +1 -0
- package/dist/local/environment-context.d.ts +39 -0
- package/dist/local/environment-context.d.ts.map +1 -0
- package/dist/local/environment-context.js +193 -0
- package/dist/local/environment-context.js.map +1 -0
- package/dist/local/environment-exclude.d.ts +7 -0
- package/dist/local/environment-exclude.d.ts.map +1 -0
- package/dist/local/environment-exclude.js +82 -0
- package/dist/local/environment-exclude.js.map +1 -0
- package/dist/local/environment-sidecar.d.ts +126 -0
- package/dist/local/environment-sidecar.d.ts.map +1 -0
- package/dist/local/environment-sidecar.js +442 -0
- package/dist/local/environment-sidecar.js.map +1 -0
- package/dist/local/environment-switch.d.ts +22 -0
- package/dist/local/environment-switch.d.ts.map +1 -0
- package/dist/local/environment-switch.js +385 -0
- package/dist/local/environment-switch.js.map +1 -0
- package/dist/local/exact-remote-projection.d.ts +17 -0
- package/dist/local/exact-remote-projection.d.ts.map +1 -0
- package/dist/local/exact-remote-projection.js +53 -0
- package/dist/local/exact-remote-projection.js.map +1 -0
- package/dist/local/experimental/path-object-store.d.ts +66 -0
- package/dist/local/experimental/path-object-store.d.ts.map +1 -0
- package/dist/local/experimental/path-object-store.js +135 -0
- package/dist/local/experimental/path-object-store.js.map +1 -0
- package/dist/local/external-worktree-binding.d.ts +21 -0
- package/dist/local/external-worktree-binding.d.ts.map +1 -0
- package/dist/local/external-worktree-binding.js +56 -0
- package/dist/local/external-worktree-binding.js.map +1 -0
- package/dist/local/folder-members.d.ts +34 -0
- package/dist/local/folder-members.d.ts.map +1 -0
- package/dist/local/folder-members.js +168 -0
- package/dist/local/folder-members.js.map +1 -0
- package/dist/local/git-ref-authority.d.ts +11 -0
- package/dist/local/git-ref-authority.d.ts.map +1 -0
- package/dist/local/git-ref-authority.js +76 -0
- package/dist/local/git-ref-authority.js.map +1 -0
- package/dist/local/git.d.ts +88 -0
- package/dist/local/git.d.ts.map +1 -0
- package/dist/local/git.js +413 -0
- package/dist/local/git.js.map +1 -0
- package/dist/local/graph-read.d.ts +168 -0
- package/dist/local/graph-read.d.ts.map +1 -0
- package/dist/local/graph-read.js +360 -0
- package/dist/local/graph-read.js.map +1 -0
- package/dist/local/graph-sync.d.ts +39 -0
- package/dist/local/graph-sync.d.ts.map +1 -0
- package/dist/local/graph-sync.js +186 -0
- package/dist/local/graph-sync.js.map +1 -0
- package/dist/local/guide-commands.d.ts +79 -0
- package/dist/local/guide-commands.d.ts.map +1 -0
- package/dist/local/guide-commands.js +247 -0
- package/dist/local/guide-commands.js.map +1 -0
- package/dist/local/health-files.d.ts +24 -0
- package/dist/local/health-files.d.ts.map +1 -0
- package/dist/local/health-files.js +133 -0
- package/dist/local/health-files.js.map +1 -0
- package/dist/local/health-inspection.d.ts +12 -0
- package/dist/local/health-inspection.d.ts.map +1 -0
- package/dist/local/health-inspection.js +407 -0
- package/dist/local/health-inspection.js.map +1 -0
- package/dist/local/health-policy.d.ts +11 -0
- package/dist/local/health-policy.d.ts.map +1 -0
- package/dist/local/health-policy.js +257 -0
- package/dist/local/health-policy.js.map +1 -0
- package/dist/local/health-projection.d.ts +14 -0
- package/dist/local/health-projection.d.ts.map +1 -0
- package/dist/local/health-projection.js +102 -0
- package/dist/local/health-projection.js.map +1 -0
- package/dist/local/health-schema.d.ts +338 -0
- package/dist/local/health-schema.d.ts.map +1 -0
- package/dist/local/health-schema.js +213 -0
- package/dist/local/health-schema.js.map +1 -0
- package/dist/local/health-store.d.ts +61 -0
- package/dist/local/health-store.d.ts.map +1 -0
- package/dist/local/health-store.js +218 -0
- package/dist/local/health-store.js.map +1 -0
- package/dist/local/index.d.ts +66 -0
- package/dist/local/index.d.ts.map +1 -0
- package/dist/local/index.js +66 -0
- package/dist/local/index.js.map +1 -0
- package/dist/local/journey-commands.d.ts +65 -0
- package/dist/local/journey-commands.d.ts.map +1 -0
- package/dist/local/journey-commands.js +138 -0
- package/dist/local/journey-commands.js.map +1 -0
- package/dist/local/local-org-store.d.ts +46 -0
- package/dist/local/local-org-store.d.ts.map +1 -0
- package/dist/local/local-org-store.js +132 -0
- package/dist/local/local-org-store.js.map +1 -0
- package/dist/local/local-org.d.ts +389 -0
- package/dist/local/local-org.d.ts.map +1 -0
- package/dist/local/local-org.js +855 -0
- package/dist/local/local-org.js.map +1 -0
- package/dist/local/media-upload.d.ts +5 -0
- package/dist/local/media-upload.d.ts.map +1 -0
- package/dist/local/media-upload.js +41 -0
- package/dist/local/media-upload.js.map +1 -0
- package/dist/local/operation.d.ts +155 -0
- package/dist/local/operation.d.ts.map +1 -0
- package/dist/local/operation.js +340 -0
- package/dist/local/operation.js.map +1 -0
- package/dist/local/ownership-reader-schema.d.ts +117 -0
- package/dist/local/ownership-reader-schema.d.ts.map +1 -0
- package/dist/local/ownership-reader-schema.js +105 -0
- package/dist/local/ownership-reader-schema.js.map +1 -0
- package/dist/local/ownership-reader-worker.d.ts +2 -0
- package/dist/local/ownership-reader-worker.d.ts.map +1 -0
- package/dist/local/ownership-reader-worker.js +341 -0
- package/dist/local/ownership-reader-worker.js.map +1 -0
- package/dist/local/ownership-reader.d.ts +10 -0
- package/dist/local/ownership-reader.d.ts.map +1 -0
- package/dist/local/ownership-reader.js +93 -0
- package/dist/local/ownership-reader.js.map +1 -0
- package/dist/local/package-uses-check.d.ts +33 -0
- package/dist/local/package-uses-check.d.ts.map +1 -0
- package/dist/local/package-uses-check.js +62 -0
- package/dist/local/package-uses-check.js.map +1 -0
- package/dist/local/pending-recovery.d.ts +22 -0
- package/dist/local/pending-recovery.d.ts.map +1 -0
- package/dist/local/pending-recovery.js +171 -0
- package/dist/local/pending-recovery.js.map +1 -0
- package/dist/local/portable-commit-store.d.ts +28 -0
- package/dist/local/portable-commit-store.d.ts.map +1 -0
- package/dist/local/portable-commit-store.js +187 -0
- package/dist/local/portable-commit-store.js.map +1 -0
- package/dist/local/portable-commit.d.ts +109 -0
- package/dist/local/portable-commit.d.ts.map +1 -0
- package/dist/local/portable-commit.js +209 -0
- package/dist/local/portable-commit.js.map +1 -0
- package/dist/local/portable-remote.d.ts +432 -0
- package/dist/local/portable-remote.d.ts.map +1 -0
- package/dist/local/portable-remote.js +280 -0
- package/dist/local/portable-remote.js.map +1 -0
- package/dist/local/project-deleted.d.ts +4 -0
- package/dist/local/project-deleted.d.ts.map +1 -0
- package/dist/local/project-deleted.js +13 -0
- package/dist/local/project-deleted.js.map +1 -0
- package/dist/local/projection.d.ts +166 -0
- package/dist/local/projection.d.ts.map +1 -0
- package/dist/local/projection.js +709 -0
- package/dist/local/projection.js.map +1 -0
- package/dist/local/read-operation.d.ts +3 -0
- package/dist/local/read-operation.d.ts.map +1 -0
- package/dist/local/read-operation.js +19 -0
- package/dist/local/read-operation.js.map +1 -0
- package/dist/local/rebuild.d.ts +11 -0
- package/dist/local/rebuild.d.ts.map +1 -0
- package/dist/local/rebuild.js +42 -0
- package/dist/local/rebuild.js.map +1 -0
- package/dist/local/remote-base.d.ts +25 -0
- package/dist/local/remote-base.d.ts.map +1 -0
- package/dist/local/remote-base.js +68 -0
- package/dist/local/remote-base.js.map +1 -0
- package/dist/local/save-layout-worker.d.ts +19 -0
- package/dist/local/save-layout-worker.d.ts.map +1 -0
- package/dist/local/save-layout-worker.js +28 -0
- package/dist/local/save-layout-worker.js.map +1 -0
- package/dist/local/save-layout.d.ts +84 -0
- package/dist/local/save-layout.d.ts.map +1 -0
- package/dist/local/save-layout.js +221 -0
- package/dist/local/save-layout.js.map +1 -0
- package/dist/local/scope-impact.d.ts +31 -0
- package/dist/local/scope-impact.d.ts.map +1 -0
- package/dist/local/scope-impact.js +32 -0
- package/dist/local/scope-impact.js.map +1 -0
- package/dist/local/source-evidence/filesystem-worker.d.ts +2 -0
- package/dist/local/source-evidence/filesystem-worker.d.ts.map +1 -0
- package/dist/local/source-evidence/filesystem-worker.js +139 -0
- package/dist/local/source-evidence/filesystem-worker.js.map +1 -0
- package/dist/local/source-evidence/processes.d.ts +20 -0
- package/dist/local/source-evidence/processes.d.ts.map +1 -0
- package/dist/local/source-evidence/processes.js +133 -0
- package/dist/local/source-evidence/processes.js.map +1 -0
- package/dist/local/source-evidence/protocol.d.ts +52 -0
- package/dist/local/source-evidence/protocol.d.ts.map +1 -0
- package/dist/local/source-evidence/protocol.js +72 -0
- package/dist/local/source-evidence/protocol.js.map +1 -0
- package/dist/local/source-evidence/reader.d.ts +14 -0
- package/dist/local/source-evidence/reader.d.ts.map +1 -0
- package/dist/local/source-evidence/reader.js +308 -0
- package/dist/local/source-evidence/reader.js.map +1 -0
- package/dist/local/source-evidence/schema.d.ts +2504 -0
- package/dist/local/source-evidence/schema.d.ts.map +1 -0
- package/dist/local/source-evidence/schema.js +99 -0
- package/dist/local/source-evidence/schema.js.map +1 -0
- package/dist/local/source-policy/loader.d.ts +29 -0
- package/dist/local/source-policy/loader.d.ts.map +1 -0
- package/dist/local/source-policy/loader.js +209 -0
- package/dist/local/source-policy/loader.js.map +1 -0
- package/dist/local/source-policy/process.d.ts +7 -0
- package/dist/local/source-policy/process.d.ts.map +1 -0
- package/dist/local/source-policy/process.js +53 -0
- package/dist/local/source-policy/process.js.map +1 -0
- package/dist/local/source-policy/protocol.d.ts +27 -0
- package/dist/local/source-policy/protocol.d.ts.map +1 -0
- package/dist/local/source-policy/protocol.js +48 -0
- package/dist/local/source-policy/protocol.js.map +1 -0
- package/dist/local/source-policy/worker.d.ts +2 -0
- package/dist/local/source-policy/worker.d.ts.map +1 -0
- package/dist/local/source-policy/worker.js +100 -0
- package/dist/local/source-policy/worker.js.map +1 -0
- package/dist/local/state-directory.d.ts +17 -0
- package/dist/local/state-directory.d.ts.map +1 -0
- package/dist/local/state-directory.js +68 -0
- package/dist/local/state-directory.js.map +1 -0
- package/dist/local/store-database.d.ts +13 -0
- package/dist/local/store-database.d.ts.map +1 -0
- package/dist/local/store-database.js +187 -0
- package/dist/local/store-database.js.map +1 -0
- package/dist/local/store.d.ts +181 -0
- package/dist/local/store.d.ts.map +1 -0
- package/dist/local/store.js +585 -0
- package/dist/local/store.js.map +1 -0
- package/dist/local/sync.d.ts +47 -0
- package/dist/local/sync.d.ts.map +1 -0
- package/dist/local/sync.js +518 -0
- package/dist/local/sync.js.map +1 -0
- package/dist/local/task-context-inspection.d.ts +23 -0
- package/dist/local/task-context-inspection.d.ts.map +1 -0
- package/dist/local/task-context-inspection.js +165 -0
- package/dist/local/task-context-inspection.js.map +1 -0
- package/dist/local/task-context-observations.d.ts +9553 -0
- package/dist/local/task-context-observations.d.ts.map +1 -0
- package/dist/local/task-context-observations.js +232 -0
- package/dist/local/task-context-observations.js.map +1 -0
- package/dist/local/task-context-provider.d.ts +18 -0
- package/dist/local/task-context-provider.d.ts.map +1 -0
- package/dist/local/task-context-provider.js +231 -0
- package/dist/local/task-context-provider.js.map +1 -0
- package/dist/local/task-context-schema.d.ts +847 -0
- package/dist/local/task-context-schema.d.ts.map +1 -0
- package/dist/local/task-context-schema.js +305 -0
- package/dist/local/task-context-schema.js.map +1 -0
- package/dist/local/task-context-source.d.ts +16 -0
- package/dist/local/task-context-source.d.ts.map +1 -0
- package/dist/local/task-context-source.js +45 -0
- package/dist/local/task-context-source.js.map +1 -0
- package/dist/local/task-context.d.ts +14 -0
- package/dist/local/task-context.d.ts.map +1 -0
- package/dist/local/task-context.js +570 -0
- package/dist/local/task-context.js.map +1 -0
- package/dist/local/test-commands.d.ts +71 -0
- package/dist/local/test-commands.d.ts.map +1 -0
- package/dist/local/test-commands.js +292 -0
- package/dist/local/test-commands.js.map +1 -0
- package/dist/local/tree-save.d.ts +117 -0
- package/dist/local/tree-save.d.ts.map +1 -0
- package/dist/local/tree-save.js +615 -0
- package/dist/local/tree-save.js.map +1 -0
- package/dist/local/variants.d.ts +125 -0
- package/dist/local/variants.d.ts.map +1 -0
- package/dist/local/variants.js +267 -0
- package/dist/local/variants.js.map +1 -0
- package/dist/local/workspace-admission.d.ts +61 -0
- package/dist/local/workspace-admission.d.ts.map +1 -0
- package/dist/local/workspace-admission.js +112 -0
- package/dist/local/workspace-admission.js.map +1 -0
- package/dist/local/workspace-authority-guard.d.ts +18 -0
- package/dist/local/workspace-authority-guard.d.ts.map +1 -0
- package/dist/local/workspace-authority-guard.js +69 -0
- package/dist/local/workspace-authority-guard.js.map +1 -0
- package/dist/local/workspace-authority.d.ts +33 -0
- package/dist/local/workspace-authority.d.ts.map +1 -0
- package/dist/local/workspace-authority.js +33 -0
- package/dist/local/workspace-authority.js.map +1 -0
- package/dist/local/workspace-branch-runtime.d.ts +61 -0
- package/dist/local/workspace-branch-runtime.d.ts.map +1 -0
- package/dist/local/workspace-branch-runtime.js +216 -0
- package/dist/local/workspace-branch-runtime.js.map +1 -0
- package/dist/local/workspace-built-content.d.ts +137 -0
- package/dist/local/workspace-built-content.d.ts.map +1 -0
- package/dist/local/workspace-built-content.js +393 -0
- package/dist/local/workspace-built-content.js.map +1 -0
- package/dist/local/workspace-claim-status-read.d.ts +53 -0
- package/dist/local/workspace-claim-status-read.d.ts.map +1 -0
- package/dist/local/workspace-claim-status-read.js +118 -0
- package/dist/local/workspace-claim-status-read.js.map +1 -0
- package/dist/local/workspace-claim-status.d.ts +172 -0
- package/dist/local/workspace-claim-status.d.ts.map +1 -0
- package/dist/local/workspace-claim-status.js +721 -0
- package/dist/local/workspace-claim-status.js.map +1 -0
- package/dist/local/workspace-claim-views.d.ts +45 -0
- package/dist/local/workspace-claim-views.d.ts.map +1 -0
- package/dist/local/workspace-claim-views.js +45 -0
- package/dist/local/workspace-claim-views.js.map +1 -0
- package/dist/local/workspace-cli.d.ts +46 -0
- package/dist/local/workspace-cli.d.ts.map +1 -0
- package/dist/local/workspace-cli.js +1524 -0
- package/dist/local/workspace-cli.js.map +1 -0
- package/dist/local/workspace-commit-resolver.d.ts +19 -0
- package/dist/local/workspace-commit-resolver.d.ts.map +1 -0
- package/dist/local/workspace-commit-resolver.js +47 -0
- package/dist/local/workspace-commit-resolver.js.map +1 -0
- package/dist/local/workspace-decision-store.d.ts +184 -0
- package/dist/local/workspace-decision-store.d.ts.map +1 -0
- package/dist/local/workspace-decision-store.js +510 -0
- package/dist/local/workspace-decision-store.js.map +1 -0
- package/dist/local/workspace-environment-runtime.d.ts +107 -0
- package/dist/local/workspace-environment-runtime.d.ts.map +1 -0
- package/dist/local/workspace-environment-runtime.js +135 -0
- package/dist/local/workspace-environment-runtime.js.map +1 -0
- package/dist/local/workspace-evidence-drop.d.ts +21 -0
- package/dist/local/workspace-evidence-drop.d.ts.map +1 -0
- package/dist/local/workspace-evidence-drop.js +58 -0
- package/dist/local/workspace-evidence-drop.js.map +1 -0
- package/dist/local/workspace-evidence-sign-tool.d.ts +20 -0
- package/dist/local/workspace-evidence-sign-tool.d.ts.map +1 -0
- package/dist/local/workspace-evidence-sign-tool.js +85 -0
- package/dist/local/workspace-evidence-sign-tool.js.map +1 -0
- package/dist/local/workspace-evidence-status.d.ts +89 -0
- package/dist/local/workspace-evidence-status.d.ts.map +1 -0
- package/dist/local/workspace-evidence-status.js +141 -0
- package/dist/local/workspace-evidence-status.js.map +1 -0
- package/dist/local/workspace-evidence.d.ts +145 -0
- package/dist/local/workspace-evidence.d.ts.map +1 -0
- package/dist/local/workspace-evidence.js +347 -0
- package/dist/local/workspace-evidence.js.map +1 -0
- package/dist/local/workspace-graph-store.d.ts +32 -0
- package/dist/local/workspace-graph-store.d.ts.map +1 -0
- package/dist/local/workspace-graph-store.js +249 -0
- package/dist/local/workspace-graph-store.js.map +1 -0
- package/dist/local/workspace-handoff.d.ts +32 -0
- package/dist/local/workspace-handoff.d.ts.map +1 -0
- package/dist/local/workspace-handoff.js +144 -0
- package/dist/local/workspace-handoff.js.map +1 -0
- package/dist/local/workspace-history-journal.d.ts +70 -0
- package/dist/local/workspace-history-journal.d.ts.map +1 -0
- package/dist/local/workspace-history-journal.js +131 -0
- package/dist/local/workspace-history-journal.js.map +1 -0
- package/dist/local/workspace-history-store.d.ts +98 -0
- package/dist/local/workspace-history-store.d.ts.map +1 -0
- package/dist/local/workspace-history-store.js +632 -0
- package/dist/local/workspace-history-store.js.map +1 -0
- package/dist/local/workspace-history-types.d.ts +307 -0
- package/dist/local/workspace-history-types.d.ts.map +1 -0
- package/dist/local/workspace-history-types.js +2 -0
- package/dist/local/workspace-history-types.js.map +1 -0
- package/dist/local/workspace-integration-runtime.d.ts +48 -0
- package/dist/local/workspace-integration-runtime.d.ts.map +1 -0
- package/dist/local/workspace-integration-runtime.js +419 -0
- package/dist/local/workspace-integration-runtime.js.map +1 -0
- package/dist/local/workspace-lock.d.ts +7 -0
- package/dist/local/workspace-lock.d.ts.map +1 -0
- package/dist/local/workspace-lock.js +211 -0
- package/dist/local/workspace-lock.js.map +1 -0
- package/dist/local/workspace-merge.d.ts +77 -0
- package/dist/local/workspace-merge.d.ts.map +1 -0
- package/dist/local/workspace-merge.js +703 -0
- package/dist/local/workspace-merge.js.map +1 -0
- package/dist/local/workspace-mixed-history.d.ts +33 -0
- package/dist/local/workspace-mixed-history.d.ts.map +1 -0
- package/dist/local/workspace-mixed-history.js +107 -0
- package/dist/local/workspace-mixed-history.js.map +1 -0
- package/dist/local/workspace-overlap-allocation.d.ts +33 -0
- package/dist/local/workspace-overlap-allocation.d.ts.map +1 -0
- package/dist/local/workspace-overlap-allocation.js +69 -0
- package/dist/local/workspace-overlap-allocation.js.map +1 -0
- package/dist/local/workspace-overlap-impact.d.ts +46 -0
- package/dist/local/workspace-overlap-impact.d.ts.map +1 -0
- package/dist/local/workspace-overlap-impact.js +162 -0
- package/dist/local/workspace-overlap-impact.js.map +1 -0
- package/dist/local/workspace-overlap.d.ts +109 -0
- package/dist/local/workspace-overlap.d.ts.map +1 -0
- package/dist/local/workspace-overlap.js +327 -0
- package/dist/local/workspace-overlap.js.map +1 -0
- package/dist/local/workspace-paths.d.ts +4 -0
- package/dist/local/workspace-paths.d.ts.map +1 -0
- package/dist/local/workspace-paths.js +8 -0
- package/dist/local/workspace-paths.js.map +1 -0
- package/dist/local/workspace-pick-runtime.d.ts +70 -0
- package/dist/local/workspace-pick-runtime.d.ts.map +1 -0
- package/dist/local/workspace-pick-runtime.js +177 -0
- package/dist/local/workspace-pick-runtime.js.map +1 -0
- package/dist/local/workspace-pick-store.d.ts +33 -0
- package/dist/local/workspace-pick-store.d.ts.map +1 -0
- package/dist/local/workspace-pick-store.js +43 -0
- package/dist/local/workspace-pick-store.js.map +1 -0
- package/dist/local/workspace-pick.d.ts +73 -0
- package/dist/local/workspace-pick.d.ts.map +1 -0
- package/dist/local/workspace-pick.js +253 -0
- package/dist/local/workspace-pick.js.map +1 -0
- package/dist/local/workspace-portable-authoring.d.ts +43 -0
- package/dist/local/workspace-portable-authoring.d.ts.map +1 -0
- package/dist/local/workspace-portable-authoring.js +128 -0
- package/dist/local/workspace-portable-authoring.js.map +1 -0
- package/dist/local/workspace-prune.d.ts +63 -0
- package/dist/local/workspace-prune.d.ts.map +1 -0
- package/dist/local/workspace-prune.js +267 -0
- package/dist/local/workspace-prune.js.map +1 -0
- package/dist/local/workspace-remote-fetch.d.ts +82 -0
- package/dist/local/workspace-remote-fetch.d.ts.map +1 -0
- package/dist/local/workspace-remote-fetch.js +409 -0
- package/dist/local/workspace-remote-fetch.js.map +1 -0
- package/dist/local/workspace-remote-provider.d.ts +97 -0
- package/dist/local/workspace-remote-provider.d.ts.map +1 -0
- package/dist/local/workspace-remote-provider.js +400 -0
- package/dist/local/workspace-remote-provider.js.map +1 -0
- package/dist/local/workspace-remote-pull-request-journal.d.ts +49 -0
- package/dist/local/workspace-remote-pull-request-journal.d.ts.map +1 -0
- package/dist/local/workspace-remote-pull-request-journal.js +63 -0
- package/dist/local/workspace-remote-pull-request-journal.js.map +1 -0
- package/dist/local/workspace-remote-pull-request.d.ts +36 -0
- package/dist/local/workspace-remote-pull-request.d.ts.map +1 -0
- package/dist/local/workspace-remote-pull-request.js +158 -0
- package/dist/local/workspace-remote-pull-request.js.map +1 -0
- package/dist/local/workspace-remote-push.d.ts +88 -0
- package/dist/local/workspace-remote-push.d.ts.map +1 -0
- package/dist/local/workspace-remote-push.js +297 -0
- package/dist/local/workspace-remote-push.js.map +1 -0
- package/dist/local/workspace-remote-topic-journal.d.ts +56 -0
- package/dist/local/workspace-remote-topic-journal.d.ts.map +1 -0
- package/dist/local/workspace-remote-topic-journal.js +121 -0
- package/dist/local/workspace-remote-topic-journal.js.map +1 -0
- package/dist/local/workspace-remote-topic.d.ts +45 -0
- package/dist/local/workspace-remote-topic.d.ts.map +1 -0
- package/dist/local/workspace-remote-topic.js +204 -0
- package/dist/local/workspace-remote-topic.js.map +1 -0
- package/dist/local/workspace-remote-transfer.d.ts +76 -0
- package/dist/local/workspace-remote-transfer.d.ts.map +1 -0
- package/dist/local/workspace-remote-transfer.js +270 -0
- package/dist/local/workspace-remote-transfer.js.map +1 -0
- package/dist/local/workspace-resolution.d.ts +145 -0
- package/dist/local/workspace-resolution.d.ts.map +1 -0
- package/dist/local/workspace-resolution.js +479 -0
- package/dist/local/workspace-resolution.js.map +1 -0
- package/dist/local/workspace-resolver-provider.d.ts +72 -0
- package/dist/local/workspace-resolver-provider.d.ts.map +1 -0
- package/dist/local/workspace-resolver-provider.js +312 -0
- package/dist/local/workspace-resolver-provider.js.map +1 -0
- package/dist/local/workspace-runtime-handoff.d.ts +52 -0
- package/dist/local/workspace-runtime-handoff.d.ts.map +1 -0
- package/dist/local/workspace-runtime-handoff.js +237 -0
- package/dist/local/workspace-runtime-handoff.js.map +1 -0
- package/dist/local/workspace-runtime-lease.d.ts +26 -0
- package/dist/local/workspace-runtime-lease.d.ts.map +1 -0
- package/dist/local/workspace-runtime-lease.js +123 -0
- package/dist/local/workspace-runtime-lease.js.map +1 -0
- package/dist/local/workspace-runtime.d.ts +690 -0
- package/dist/local/workspace-runtime.d.ts.map +1 -0
- package/dist/local/workspace-runtime.js +2124 -0
- package/dist/local/workspace-runtime.js.map +1 -0
- package/dist/local/workspace-scope.d.ts +70 -0
- package/dist/local/workspace-scope.d.ts.map +1 -0
- package/dist/local/workspace-scope.js +206 -0
- package/dist/local/workspace-scope.js.map +1 -0
- package/dist/local/workspace-sources.d.ts +159 -0
- package/dist/local/workspace-sources.d.ts.map +1 -0
- package/dist/local/workspace-sources.js +570 -0
- package/dist/local/workspace-sources.js.map +1 -0
- package/dist/local/workspace-store-database.d.ts +5 -0
- package/dist/local/workspace-store-database.d.ts.map +1 -0
- package/dist/local/workspace-store-database.js +726 -0
- package/dist/local/workspace-store-database.js.map +1 -0
- package/dist/local/workspace-store.d.ts +261 -0
- package/dist/local/workspace-store.d.ts.map +1 -0
- package/dist/local/workspace-store.js +831 -0
- package/dist/local/workspace-store.js.map +1 -0
- package/dist/local/workspace-topology-runtime.d.ts +27 -0
- package/dist/local/workspace-topology-runtime.d.ts.map +1 -0
- package/dist/local/workspace-topology-runtime.js +396 -0
- package/dist/local/workspace-topology-runtime.js.map +1 -0
- package/dist/local/workspace-topology.d.ts +140 -0
- package/dist/local/workspace-topology.d.ts.map +1 -0
- package/dist/local/workspace-topology.js +359 -0
- package/dist/local/workspace-topology.js.map +1 -0
- package/dist/local/workspace-upstream-inspection.d.ts +60 -0
- package/dist/local/workspace-upstream-inspection.d.ts.map +1 -0
- package/dist/local/workspace-upstream-inspection.js +189 -0
- package/dist/local/workspace-upstream-inspection.js.map +1 -0
- package/dist/local/workspace-upstream-runtime.d.ts +91 -0
- package/dist/local/workspace-upstream-runtime.d.ts.map +1 -0
- package/dist/local/workspace-upstream-runtime.js +270 -0
- package/dist/local/workspace-upstream-runtime.js.map +1 -0
- package/dist/local/workspace-upstream-store.d.ts +51 -0
- package/dist/local/workspace-upstream-store.d.ts.map +1 -0
- package/dist/local/workspace-upstream-store.js +475 -0
- package/dist/local/workspace-upstream-store.js.map +1 -0
- package/dist/local/workspace-viewer-server.d.ts +136 -0
- package/dist/local/workspace-viewer-server.d.ts.map +1 -0
- package/dist/local/workspace-viewer-server.js +1097 -0
- package/dist/local/workspace-viewer-server.js.map +1 -0
- package/dist/local/workspace-viewer-snapshot.d.ts +49 -0
- package/dist/local/workspace-viewer-snapshot.d.ts.map +1 -0
- package/dist/local/workspace-viewer-snapshot.js +91 -0
- package/dist/local/workspace-viewer-snapshot.js.map +1 -0
- package/dist/local/worktree-projection.d.ts +76 -0
- package/dist/local/worktree-projection.d.ts.map +1 -0
- package/dist/local/worktree-projection.js +470 -0
- package/dist/local/worktree-projection.js.map +1 -0
- package/dist/mcp/client-identity.d.ts +8 -0
- package/dist/mcp/client-identity.d.ts.map +1 -0
- package/dist/mcp/client-identity.js +33 -0
- package/dist/mcp/client-identity.js.map +1 -0
- package/dist/mcp/graph-to-code.d.ts +53 -0
- package/dist/mcp/graph-to-code.d.ts.map +1 -0
- package/dist/mcp/graph-to-code.js +1624 -0
- package/dist/mcp/graph-to-code.js.map +1 -0
- package/dist/mcp/index.d.ts +3 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +3 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/stdio/graph-to-code.d.ts +3 -0
- package/dist/mcp/stdio/graph-to-code.d.ts.map +1 -0
- package/dist/mcp/stdio/graph-to-code.js +55 -0
- package/dist/mcp/stdio/graph-to-code.js.map +1 -0
- package/dist/mcp/stdio/worktree.d.ts +3 -0
- package/dist/mcp/stdio/worktree.d.ts.map +1 -0
- package/dist/mcp/stdio/worktree.js +67 -0
- package/dist/mcp/stdio/worktree.js.map +1 -0
- package/dist/mcp/worktree-claim-status.d.ts +162 -0
- package/dist/mcp/worktree-claim-status.d.ts.map +1 -0
- package/dist/mcp/worktree-claim-status.js +113 -0
- package/dist/mcp/worktree-claim-status.js.map +1 -0
- package/dist/mcp/worktree-dispatch.d.ts +13 -0
- package/dist/mcp/worktree-dispatch.d.ts.map +1 -0
- package/dist/mcp/worktree-dispatch.js +52 -0
- package/dist/mcp/worktree-dispatch.js.map +1 -0
- package/dist/mcp/worktree-errors.d.ts +15 -0
- package/dist/mcp/worktree-errors.d.ts.map +1 -0
- package/dist/mcp/worktree-errors.js +17 -0
- package/dist/mcp/worktree-errors.js.map +1 -0
- package/dist/mcp/worktree-health.d.ts +12 -0
- package/dist/mcp/worktree-health.d.ts.map +1 -0
- package/dist/mcp/worktree-health.js +32 -0
- package/dist/mcp/worktree-health.js.map +1 -0
- package/dist/mcp/worktree-results.d.ts +15 -0
- package/dist/mcp/worktree-results.d.ts.map +1 -0
- package/dist/mcp/worktree-results.js +12 -0
- package/dist/mcp/worktree-results.js.map +1 -0
- package/dist/mcp/worktree-task-context.d.ts +57 -0
- package/dist/mcp/worktree-task-context.d.ts.map +1 -0
- package/dist/mcp/worktree-task-context.js +45 -0
- package/dist/mcp/worktree-task-context.js.map +1 -0
- package/dist/mcp/worktree-tools.d.ts +2648 -0
- package/dist/mcp/worktree-tools.d.ts.map +1 -0
- package/dist/mcp/worktree-tools.js +192 -0
- package/dist/mcp/worktree-tools.js.map +1 -0
- package/dist/mcp/worktree.d.ts +33 -0
- package/dist/mcp/worktree.d.ts.map +1 -0
- package/dist/mcp/worktree.js +551 -0
- package/dist/mcp/worktree.js.map +1 -0
- package/dist/own-package.d.ts +13 -0
- package/dist/own-package.d.ts.map +1 -0
- package/dist/own-package.js +32 -0
- package/dist/own-package.js.map +1 -0
- package/dist/packages-browse.d.ts +107 -0
- package/dist/packages-browse.d.ts.map +1 -0
- package/dist/packages-browse.js +646 -0
- package/dist/packages-browse.js.map +1 -0
- package/dist/packages-cli.d.ts +8 -0
- package/dist/packages-cli.d.ts.map +1 -0
- package/dist/packages-cli.js +184 -0
- package/dist/packages-cli.js.map +1 -0
- package/dist/packages-uses.d.ts +46 -0
- package/dist/packages-uses.d.ts.map +1 -0
- package/dist/packages-uses.js +737 -0
- package/dist/packages-uses.js.map +1 -0
- package/dist/portable.d.ts +7 -0
- package/dist/portable.d.ts.map +1 -0
- package/dist/portable.js +14 -0
- package/dist/portable.js.map +1 -0
- package/dist/quiet-warnings.d.ts +3 -0
- package/dist/quiet-warnings.d.ts.map +1 -0
- package/dist/quiet-warnings.js +21 -0
- package/dist/quiet-warnings.js.map +1 -0
- package/dist/view-seam.d.ts +62 -0
- package/dist/view-seam.d.ts.map +1 -0
- package/dist/view-seam.js +70 -0
- package/dist/view-seam.js.map +1 -0
- package/generated/graph-packages/index.json +5 -0
- package/graph-packages.lock.json +4 -0
- package/package.json +81 -0
- package/viewer/assets/index-BZKGDARF.css +1 -0
- package/viewer/assets/index-DWu0CbZZ.js +272 -0
- package/viewer/index.html +13 -0
|
@@ -0,0 +1,634 @@
|
|
|
1
|
+
import { execFile, spawn } from 'node:child_process';
|
|
2
|
+
import { createHash, randomBytes } from 'node:crypto';
|
|
3
|
+
import { link, mkdir, readdir, readFile, stat, unlink, writeFile } from 'node:fs/promises';
|
|
4
|
+
import { createServer } from 'node:http';
|
|
5
|
+
import { homedir, hostname, uptime } from 'node:os';
|
|
6
|
+
import { join } from 'node:path';
|
|
7
|
+
import { z } from 'zod';
|
|
8
|
+
import { getTrustedConnection, normalizeServiceOrigin } from './local/environment-sidecar.js';
|
|
9
|
+
// sdlc login: the local tool signs in to a SoftwareDLC origin through the
|
|
10
|
+
// browser, as the CLI's first-party OAuth client, for the Task API (/api/v1).
|
|
11
|
+
// docs/specs/local-tool-product-boundaries.md (Sign-in: sdlc login).
|
|
12
|
+
export const SDLC_LOGIN_CLIENT_ID = 'b8a3f1c2-6d4e-4a7b-9c1d-2e5f8a0b3c64';
|
|
13
|
+
// The client's registered loopback callbacks; login listens on the first free.
|
|
14
|
+
export const SDLC_LOGIN_PORTS = [41521, 41522, 41523, 41524, 41525];
|
|
15
|
+
export const SDLC_LOGIN_DEFAULT_ORIGIN = 'https://www.softwaredlc.com';
|
|
16
|
+
export const SDLC_LOGIN_USAGE = 'Usage: sdlc login [--url <origin> | --connection <name>] [--no-browser] | logout [--url <origin> | --connection <name>] | auth token [--url <origin> | --connection <name>] | auth status [--url <origin> | --connection <name>]';
|
|
17
|
+
export const SDLC_LOGIN_HELP = `${SDLC_LOGIN_USAGE}\nlogin signs this machine in through the browser and keeps the sign-in in the macOS Keychain, one per origin (default ${SDLC_LOGIN_DEFAULT_ORIGIN}); a new login revokes the origin's previous sign-in. auth token prints a current access token for the Task API, refreshing it first when it expires within a minute; local tools read the token this way, never from the Keychain. auth status prints the origin, scope and expiry, never a token. logout revokes the sign-in and removes it. Trusted connections keep using their API key variable. macOS only in this release; elsewhere, and on CI, use an API key.`;
|
|
18
|
+
const KEYCHAIN_SERVICE = 'software-dlc-login';
|
|
19
|
+
// Refresh when the access token has less than this left.
|
|
20
|
+
const REFRESH_MARGIN_MS = 60_000;
|
|
21
|
+
const LOGIN_TIMEOUT_MS = 5 * 60_000;
|
|
22
|
+
// A token request is given long enough that a slow server's completed
|
|
23
|
+
// rotation is not abandoned (its new tokens would be lost and the old refresh
|
|
24
|
+
// token, now consumed, would end the grant on the next call); a revoke less.
|
|
25
|
+
const TOKEN_TIMEOUT_MS = 90_000;
|
|
26
|
+
const REVOKE_TIMEOUT_MS = 20_000;
|
|
27
|
+
// Longer than a holder's token request and revoke together.
|
|
28
|
+
const LOCK_WAIT_MS = 120_000;
|
|
29
|
+
const stored_sign_in_schema = z
|
|
30
|
+
.object({
|
|
31
|
+
version: z.literal(1),
|
|
32
|
+
origin: z.string(),
|
|
33
|
+
client_id: z.string(),
|
|
34
|
+
access_token: z.string().min(1),
|
|
35
|
+
refresh_token: z.string().min(1),
|
|
36
|
+
scope: z.string(),
|
|
37
|
+
// Epoch milliseconds.
|
|
38
|
+
access_expires_at: z.number().int(),
|
|
39
|
+
signed_in_at: z.number().int()
|
|
40
|
+
})
|
|
41
|
+
.strict();
|
|
42
|
+
const token_response_schema = z.object({
|
|
43
|
+
access_token: z.string().min(1),
|
|
44
|
+
refresh_token: z.string().min(1),
|
|
45
|
+
expires_in: z.number().positive(),
|
|
46
|
+
scope: z.string().optional()
|
|
47
|
+
});
|
|
48
|
+
class LoginError extends Error {
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Runs sdlc login, logout, auth token and auth status. Returns false for any
|
|
52
|
+
* other command. Results are JSON on standard output, except auth token,
|
|
53
|
+
* which prints the token alone.
|
|
54
|
+
*/
|
|
55
|
+
export async function runCliLogin(args, overrides = {}) {
|
|
56
|
+
const [command, subcommand] = args;
|
|
57
|
+
const auth = command === 'auth';
|
|
58
|
+
if (command !== 'login' && command !== 'logout' && !auth)
|
|
59
|
+
return false;
|
|
60
|
+
if (auth && subcommand !== 'token' && subcommand !== 'status') {
|
|
61
|
+
throw new LoginError(SDLC_LOGIN_USAGE);
|
|
62
|
+
}
|
|
63
|
+
const deps = { ...defaultDeps(), ...overrides };
|
|
64
|
+
if (deps.platform !== 'darwin') {
|
|
65
|
+
throw new LoginError('sdlc login keeps its sign-in in the macOS Keychain and runs on macOS only in this release. On other systems, use an API key: sdlc connection add <name> --url <origin> --credential-env <ENV_NAME>.');
|
|
66
|
+
}
|
|
67
|
+
const options = parseOptions(auth ? args.slice(2) : args.slice(1), {
|
|
68
|
+
no_browser: command === 'login'
|
|
69
|
+
});
|
|
70
|
+
const origin = options.connection
|
|
71
|
+
? normalizeServiceOrigin(await deps.connection_origin(options.connection))
|
|
72
|
+
: normalizeServiceOrigin(options.url ?? SDLC_LOGIN_DEFAULT_ORIGIN);
|
|
73
|
+
if (!storableOrigin(origin))
|
|
74
|
+
throw unstorableOrigin(origin);
|
|
75
|
+
if (command === 'login') {
|
|
76
|
+
await login(origin, options.no_browser, deps);
|
|
77
|
+
}
|
|
78
|
+
else if (command === 'logout') {
|
|
79
|
+
await logout(origin, deps);
|
|
80
|
+
}
|
|
81
|
+
else if (subcommand === 'token') {
|
|
82
|
+
deps.out(`${await currentAccessToken(origin, deps)}\n`);
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
deps.out(json(await signInStatus(origin, deps)));
|
|
86
|
+
}
|
|
87
|
+
return true;
|
|
88
|
+
}
|
|
89
|
+
function parseOptions(args, allowed) {
|
|
90
|
+
const options = {
|
|
91
|
+
no_browser: false
|
|
92
|
+
};
|
|
93
|
+
for (let index = 0; index < args.length; index++) {
|
|
94
|
+
const arg = args[index];
|
|
95
|
+
if (arg === '--no-browser' && allowed.no_browser && !options.no_browser) {
|
|
96
|
+
options.no_browser = true;
|
|
97
|
+
continue;
|
|
98
|
+
}
|
|
99
|
+
const match = /^--(url|connection)(?:=(.*))?$/.exec(arg);
|
|
100
|
+
const value = match ? (match[2] ?? args[++index]) : undefined;
|
|
101
|
+
if (!match ||
|
|
102
|
+
!value ||
|
|
103
|
+
value.startsWith('--') ||
|
|
104
|
+
options.url !== undefined ||
|
|
105
|
+
options.connection !== undefined) {
|
|
106
|
+
throw new LoginError(SDLC_LOGIN_USAGE);
|
|
107
|
+
}
|
|
108
|
+
options[match[1]] = value;
|
|
109
|
+
}
|
|
110
|
+
return options;
|
|
111
|
+
}
|
|
112
|
+
async function login(origin, no_browser, deps) {
|
|
113
|
+
const code_verifier = randomBytes(32).toString('base64url');
|
|
114
|
+
const state = randomBytes(16).toString('base64url');
|
|
115
|
+
const listener = await listenForCallback(deps.ports, state, deps.timeout_ms);
|
|
116
|
+
let tokens;
|
|
117
|
+
try {
|
|
118
|
+
const authorize = new URL('/oauth/authorize', origin);
|
|
119
|
+
authorize.search = new URLSearchParams({
|
|
120
|
+
response_type: 'code',
|
|
121
|
+
client_id: SDLC_LOGIN_CLIENT_ID,
|
|
122
|
+
redirect_uri: listener.redirect_uri,
|
|
123
|
+
code_challenge: createHash('sha256')
|
|
124
|
+
.update(code_verifier)
|
|
125
|
+
.digest('base64url'),
|
|
126
|
+
code_challenge_method: 'S256',
|
|
127
|
+
state,
|
|
128
|
+
resource: taskApiResource(origin),
|
|
129
|
+
device_label: await deps.device_label()
|
|
130
|
+
}).toString();
|
|
131
|
+
deps.note(`Sign in to SoftwareDLC in your browser:\n${authorize.toString()}\n`);
|
|
132
|
+
if (!no_browser) {
|
|
133
|
+
await deps.open_browser(authorize.toString()).catch(() => {
|
|
134
|
+
deps.note('Could not open a browser; open the address above.\n');
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
const code = await listener.code;
|
|
138
|
+
tokens = await tokenRequest(origin, deps, {
|
|
139
|
+
grant_type: 'authorization_code',
|
|
140
|
+
code,
|
|
141
|
+
redirect_uri: listener.redirect_uri,
|
|
142
|
+
code_verifier
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
finally {
|
|
146
|
+
listener.close();
|
|
147
|
+
}
|
|
148
|
+
const now = deps.now();
|
|
149
|
+
const sign_in = {
|
|
150
|
+
version: 1,
|
|
151
|
+
origin,
|
|
152
|
+
client_id: SDLC_LOGIN_CLIENT_ID,
|
|
153
|
+
access_token: tokens.access_token,
|
|
154
|
+
refresh_token: tokens.refresh_token,
|
|
155
|
+
scope: tokens.scope ?? '',
|
|
156
|
+
access_expires_at: now + tokens.expires_in * 1000,
|
|
157
|
+
signed_in_at: now
|
|
158
|
+
};
|
|
159
|
+
// The new sign-in replaces the old one, whose grant is then revoked, so an
|
|
160
|
+
// older grant (with other consent choices) never outlives a new login.
|
|
161
|
+
const previous = await withLoginLock(origin, deps, async () => {
|
|
162
|
+
const before = await readStored(origin, deps);
|
|
163
|
+
await deps.store.write(origin, encodeSignIn(sign_in));
|
|
164
|
+
return before === 'unreadable' ? null : before;
|
|
165
|
+
});
|
|
166
|
+
let previous_revoked = null;
|
|
167
|
+
if (previous && previous.refresh_token !== sign_in.refresh_token) {
|
|
168
|
+
previous_revoked = await revoke(origin, previous.refresh_token, deps);
|
|
169
|
+
if (!previous_revoked) {
|
|
170
|
+
deps.note('Could not revoke the previous sign-in; revoke it under Connected apps in your SoftwareDLC settings.\n');
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
deps.out(json({
|
|
174
|
+
signed_in: true,
|
|
175
|
+
...describe(sign_in),
|
|
176
|
+
previous_sign_in_revoked: previous_revoked
|
|
177
|
+
}));
|
|
178
|
+
}
|
|
179
|
+
async function logout(origin, deps) {
|
|
180
|
+
await withLoginLock(origin, deps, async () => {
|
|
181
|
+
const stored = await readStored(origin, deps);
|
|
182
|
+
if (stored &&
|
|
183
|
+
stored !== 'unreadable' &&
|
|
184
|
+
!(await revoke(origin, stored.refresh_token, deps))) {
|
|
185
|
+
throw new LoginError(`Could not reach ${origin} to revoke the sign-in, so it was kept. Run sdlc logout again, or revoke it under Connected apps in your SoftwareDLC settings.`);
|
|
186
|
+
}
|
|
187
|
+
await deps.store.remove(origin);
|
|
188
|
+
deps.out(json({ signed_out: true, origin, was_signed_in: !!stored }));
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* The current access token for the origin, refreshed first when it expires
|
|
193
|
+
* within a minute. The refresh runs under the origin's lock, so concurrent
|
|
194
|
+
* callers on this machine refresh once: the server revokes a grant whose
|
|
195
|
+
* rotated refresh token is used again.
|
|
196
|
+
*/
|
|
197
|
+
export async function currentAccessToken(origin, deps) {
|
|
198
|
+
return withLoginLock(origin, deps, async () => {
|
|
199
|
+
const sign_in = await readSignIn(origin, deps);
|
|
200
|
+
if (!sign_in) {
|
|
201
|
+
throw new LoginError(`Not signed in to ${origin}. Run sdlc login${origin === SDLC_LOGIN_DEFAULT_ORIGIN ? '' : ` --url ${origin}`}.`);
|
|
202
|
+
}
|
|
203
|
+
if (sign_in.access_expires_at - deps.now() > REFRESH_MARGIN_MS) {
|
|
204
|
+
return sign_in.access_token;
|
|
205
|
+
}
|
|
206
|
+
let tokens;
|
|
207
|
+
try {
|
|
208
|
+
tokens = await tokenRequest(origin, deps, {
|
|
209
|
+
grant_type: 'refresh_token',
|
|
210
|
+
refresh_token: sign_in.refresh_token
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
catch (error) {
|
|
214
|
+
if (error instanceof GrantEndedError) {
|
|
215
|
+
// The server also answers invalid_grant when it failed to rotate, so
|
|
216
|
+
// revoke before forgetting, or a live grant would outlive the entry.
|
|
217
|
+
await revoke(origin, sign_in.refresh_token, deps);
|
|
218
|
+
await deps.store.remove(origin);
|
|
219
|
+
throw new LoginError(`The sign-in to ${origin} has ended (${error.message}). Run sdlc login again.`);
|
|
220
|
+
}
|
|
221
|
+
throw error;
|
|
222
|
+
}
|
|
223
|
+
const refreshed = {
|
|
224
|
+
...sign_in,
|
|
225
|
+
access_token: tokens.access_token,
|
|
226
|
+
refresh_token: tokens.refresh_token,
|
|
227
|
+
scope: tokens.scope ?? sign_in.scope,
|
|
228
|
+
access_expires_at: deps.now() + tokens.expires_in * 1000
|
|
229
|
+
};
|
|
230
|
+
await deps.store.write(origin, encodeSignIn(refreshed));
|
|
231
|
+
return refreshed.access_token;
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
async function signInStatus(origin, deps) {
|
|
235
|
+
const sign_in = await readSignIn(origin, deps);
|
|
236
|
+
if (!sign_in)
|
|
237
|
+
return { signed_in: false, origin };
|
|
238
|
+
return {
|
|
239
|
+
signed_in: true,
|
|
240
|
+
...describe(sign_in),
|
|
241
|
+
access_expired: sign_in.access_expires_at <= deps.now()
|
|
242
|
+
};
|
|
243
|
+
}
|
|
244
|
+
function describe(sign_in) {
|
|
245
|
+
return {
|
|
246
|
+
origin: sign_in.origin,
|
|
247
|
+
scope: sign_in.scope,
|
|
248
|
+
signed_in_at: new Date(sign_in.signed_in_at).toISOString(),
|
|
249
|
+
access_expires_at: new Date(sign_in.access_expires_at).toISOString()
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
function taskApiResource(origin) {
|
|
253
|
+
return `${origin}/api/v1`;
|
|
254
|
+
}
|
|
255
|
+
// A refresh the server refused because the grant is gone (revoked, expired,
|
|
256
|
+
// or its refresh token already rotated), as opposed to a failure to reach it.
|
|
257
|
+
class GrantEndedError extends Error {
|
|
258
|
+
}
|
|
259
|
+
async function tokenRequest(origin, deps, form) {
|
|
260
|
+
const response = await deps
|
|
261
|
+
.fetch(new URL('/api/oauth/token', origin), {
|
|
262
|
+
method: 'POST',
|
|
263
|
+
headers: { 'content-type': 'application/x-www-form-urlencoded' },
|
|
264
|
+
body: new URLSearchParams({
|
|
265
|
+
...form,
|
|
266
|
+
client_id: SDLC_LOGIN_CLIENT_ID,
|
|
267
|
+
resource: taskApiResource(origin)
|
|
268
|
+
}).toString(),
|
|
269
|
+
signal: AbortSignal.timeout(TOKEN_TIMEOUT_MS)
|
|
270
|
+
})
|
|
271
|
+
.catch((error) => {
|
|
272
|
+
throw new LoginError(`Could not reach ${origin}: ${error instanceof Error ? error.message : String(error)}.`);
|
|
273
|
+
});
|
|
274
|
+
const body = await response.json().catch(() => null);
|
|
275
|
+
if (!response.ok) {
|
|
276
|
+
const error = z
|
|
277
|
+
.object({ error: z.string(), error_description: z.string().optional() })
|
|
278
|
+
.safeParse(body);
|
|
279
|
+
const reason = error.success
|
|
280
|
+
? (error.data.error_description ?? error.data.error)
|
|
281
|
+
: `HTTP ${response.status}`;
|
|
282
|
+
if (error.success && error.data.error === 'invalid_grant') {
|
|
283
|
+
throw new GrantEndedError(reason);
|
|
284
|
+
}
|
|
285
|
+
throw new LoginError(`${origin} refused the sign-in: ${reason}`);
|
|
286
|
+
}
|
|
287
|
+
const tokens = token_response_schema.safeParse(body);
|
|
288
|
+
if (!tokens.success) {
|
|
289
|
+
throw new LoginError(`${origin} sent a token response sdlc cannot read.`);
|
|
290
|
+
}
|
|
291
|
+
return tokens.data;
|
|
292
|
+
}
|
|
293
|
+
// RFC 7009: true once the server answered 200, whether or not it knew the
|
|
294
|
+
// token; false when it could not be reached or failed.
|
|
295
|
+
async function revoke(origin, token, deps) {
|
|
296
|
+
try {
|
|
297
|
+
const response = await deps.fetch(new URL('/api/oauth/revoke', origin), {
|
|
298
|
+
method: 'POST',
|
|
299
|
+
headers: { 'content-type': 'application/x-www-form-urlencoded' },
|
|
300
|
+
body: new URLSearchParams({
|
|
301
|
+
token,
|
|
302
|
+
client_id: SDLC_LOGIN_CLIENT_ID
|
|
303
|
+
}).toString(),
|
|
304
|
+
signal: AbortSignal.timeout(REVOKE_TIMEOUT_MS)
|
|
305
|
+
});
|
|
306
|
+
return response.ok;
|
|
307
|
+
}
|
|
308
|
+
catch {
|
|
309
|
+
return false;
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
async function readSignIn(origin, deps) {
|
|
313
|
+
const stored = await readStored(origin, deps);
|
|
314
|
+
if (stored === 'unreadable') {
|
|
315
|
+
throw new LoginError(`The stored sign-in for ${origin} cannot be read. Run sdlc login again.`);
|
|
316
|
+
}
|
|
317
|
+
return stored;
|
|
318
|
+
}
|
|
319
|
+
// The origin's entry, or 'unreadable' when it holds something else, which a
|
|
320
|
+
// new login replaces and logout removes.
|
|
321
|
+
async function readStored(origin, deps) {
|
|
322
|
+
const value = await deps.store.read(origin);
|
|
323
|
+
if (value === null)
|
|
324
|
+
return null;
|
|
325
|
+
let parsed = null;
|
|
326
|
+
try {
|
|
327
|
+
parsed = JSON.parse(Buffer.from(value, 'base64url').toString('utf8'));
|
|
328
|
+
}
|
|
329
|
+
catch {
|
|
330
|
+
return 'unreadable';
|
|
331
|
+
}
|
|
332
|
+
const sign_in = stored_sign_in_schema.safeParse(parsed);
|
|
333
|
+
return sign_in.success && sign_in.data.origin === origin
|
|
334
|
+
? sign_in.data
|
|
335
|
+
: 'unreadable';
|
|
336
|
+
}
|
|
337
|
+
// Base64url, so the Keychain command line never needs quoting.
|
|
338
|
+
function encodeSignIn(sign_in) {
|
|
339
|
+
return Buffer.from(JSON.stringify(sign_in), 'utf8').toString('base64url');
|
|
340
|
+
}
|
|
341
|
+
function json(value) {
|
|
342
|
+
return `${JSON.stringify(value, null, 2)}\n`;
|
|
343
|
+
}
|
|
344
|
+
/**
|
|
345
|
+
* A one-shot listener on the first free registered port of 127.0.0.1. Its
|
|
346
|
+
* code settles with the authorization code of the first callback carrying
|
|
347
|
+
* this login's state, and fails on an error callback or after the timeout.
|
|
348
|
+
*/
|
|
349
|
+
export async function listenForCallback(ports, state, timeout_ms) {
|
|
350
|
+
let settle;
|
|
351
|
+
const code = new Promise((resolve, reject) => {
|
|
352
|
+
settle = { resolve, reject };
|
|
353
|
+
});
|
|
354
|
+
// The caller awaits code only after opening the browser.
|
|
355
|
+
code.catch(() => undefined);
|
|
356
|
+
const server = createServer((request, response) => {
|
|
357
|
+
const url = new URL(request.url ?? '/', 'http://127.0.0.1');
|
|
358
|
+
if (request.method !== 'GET' || url.pathname !== '/callback') {
|
|
359
|
+
response.writeHead(404).end();
|
|
360
|
+
return;
|
|
361
|
+
}
|
|
362
|
+
const page = (status, text) => response
|
|
363
|
+
.writeHead(status, {
|
|
364
|
+
'content-type': 'text/plain; charset=utf-8',
|
|
365
|
+
'cache-control': 'no-store'
|
|
366
|
+
})
|
|
367
|
+
.end(`${text}\n`);
|
|
368
|
+
if (url.searchParams.get('state') !== state) {
|
|
369
|
+
page(400, 'This sign-in link does not belong to this sdlc login.');
|
|
370
|
+
return;
|
|
371
|
+
}
|
|
372
|
+
const error = url.searchParams.get('error');
|
|
373
|
+
const received = url.searchParams.get('code');
|
|
374
|
+
if (error || !received) {
|
|
375
|
+
page(400, 'Sign-in was not completed. You can close this tab.');
|
|
376
|
+
settle.reject(new LoginError(`Sign-in was not completed: ${url.searchParams.get('error_description') ?? error ?? 'no code was returned'}.`));
|
|
377
|
+
return;
|
|
378
|
+
}
|
|
379
|
+
page(200, 'Signed in to SoftwareDLC. You can close this tab.');
|
|
380
|
+
settle.resolve(received);
|
|
381
|
+
});
|
|
382
|
+
const port = await listenOnFirstFree(server, ports);
|
|
383
|
+
const timer = setTimeout(() => settle.reject(new LoginError('Sign-in timed out waiting for the browser. Run sdlc login again.')), timeout_ms);
|
|
384
|
+
return {
|
|
385
|
+
redirect_uri: `http://127.0.0.1:${port}/callback`,
|
|
386
|
+
code,
|
|
387
|
+
close: () => {
|
|
388
|
+
clearTimeout(timer);
|
|
389
|
+
server.closeAllConnections();
|
|
390
|
+
server.close();
|
|
391
|
+
}
|
|
392
|
+
};
|
|
393
|
+
}
|
|
394
|
+
async function listenOnFirstFree(server, ports) {
|
|
395
|
+
for (const port of ports) {
|
|
396
|
+
const bound = await new Promise((resolve, reject) => {
|
|
397
|
+
const failed = (error) => {
|
|
398
|
+
server.off('listening', listening);
|
|
399
|
+
if (error.code === 'EADDRINUSE')
|
|
400
|
+
resolve(false);
|
|
401
|
+
else
|
|
402
|
+
reject(error);
|
|
403
|
+
};
|
|
404
|
+
const listening = () => {
|
|
405
|
+
server.off('error', failed);
|
|
406
|
+
resolve(true);
|
|
407
|
+
};
|
|
408
|
+
server.once('error', failed);
|
|
409
|
+
server.once('listening', listening);
|
|
410
|
+
server.listen(port, '127.0.0.1');
|
|
411
|
+
});
|
|
412
|
+
const address = server.address();
|
|
413
|
+
if (bound && address && typeof address === 'object')
|
|
414
|
+
return address.port;
|
|
415
|
+
}
|
|
416
|
+
throw new LoginError(`Ports ${ports.join(', ')} on 127.0.0.1 are all in use; free one and run sdlc login again.`);
|
|
417
|
+
}
|
|
418
|
+
/**
|
|
419
|
+
* Runs fn holding the origin's lock file, which other sdlc processes on this
|
|
420
|
+
* machine wait for. The file names its holder's process and a token; it is
|
|
421
|
+
* abandoned only once that process has exited, so a slow or sleeping holder
|
|
422
|
+
* keeps it. Only the holder removes a live lock, and only while it is theirs.
|
|
423
|
+
*/
|
|
424
|
+
export async function withLoginLock(origin, deps, fn) {
|
|
425
|
+
await mkdir(deps.lock_dir, { recursive: true, mode: 0o700 });
|
|
426
|
+
const path = join(deps.lock_dir, `login-${createHash('sha256').update(origin).digest('hex').slice(0, 16)}.lock`);
|
|
427
|
+
await removeAbandonedDrafts(deps.lock_dir);
|
|
428
|
+
const owner = `${process.pid} ${randomBytes(16).toString('hex')}`;
|
|
429
|
+
// Written whole under a private name and linked into place, so the lock
|
|
430
|
+
// (and the breaker below) never exists half-written and creating it fails
|
|
431
|
+
// when it exists.
|
|
432
|
+
const draft = `${path}.${owner.replace(' ', '-')}`;
|
|
433
|
+
await writeFile(draft, owner, { mode: 0o600 });
|
|
434
|
+
const deadline = deps.now() + LOCK_WAIT_MS;
|
|
435
|
+
try {
|
|
436
|
+
for (;;) {
|
|
437
|
+
try {
|
|
438
|
+
await link(draft, path);
|
|
439
|
+
break;
|
|
440
|
+
}
|
|
441
|
+
catch (error) {
|
|
442
|
+
if (error.code !== 'EEXIST')
|
|
443
|
+
throw error;
|
|
444
|
+
}
|
|
445
|
+
const holder = await readFile(path, 'utf8').catch(() => null);
|
|
446
|
+
if (holder !== null &&
|
|
447
|
+
!(await holderRunning(path, holder)) &&
|
|
448
|
+
(await removeAbandonedLock(path, holder, draft, owner))) {
|
|
449
|
+
continue;
|
|
450
|
+
}
|
|
451
|
+
if (deps.now() > deadline) {
|
|
452
|
+
throw new LoginError(`Another sdlc process holds the sign-in lock ${path}. If no sdlc command is running, remove that file and try again.`);
|
|
453
|
+
}
|
|
454
|
+
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
finally {
|
|
458
|
+
await unlink(draft).catch(() => undefined);
|
|
459
|
+
}
|
|
460
|
+
try {
|
|
461
|
+
return await fn();
|
|
462
|
+
}
|
|
463
|
+
finally {
|
|
464
|
+
if ((await readFile(path, 'utf8').catch(() => null)) === owner) {
|
|
465
|
+
await unlink(path).catch(() => undefined);
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
// A lock names "<pid> <token>"; anything else is a lock no running sdlc holds,
|
|
470
|
+
// as is one written before this boot, whose pid may now be another process.
|
|
471
|
+
async function holderRunning(path, holder) {
|
|
472
|
+
const pid = Number(/^(\d+) [0-9a-f]+$/.exec(holder)?.[1]);
|
|
473
|
+
if (!pid)
|
|
474
|
+
return false;
|
|
475
|
+
const written = await stat(path).catch(() => null);
|
|
476
|
+
if (written && written.mtimeMs < Date.now() - uptime() * 1000)
|
|
477
|
+
return false;
|
|
478
|
+
return processRunning(pid);
|
|
479
|
+
}
|
|
480
|
+
// Removes the abandoned lock under a breaker file, and only while the lock
|
|
481
|
+
// still names the same stopped holder, so a waiter never removes a lock
|
|
482
|
+
// another waiter has since taken. The breaker names its holder like the lock
|
|
483
|
+
// and is broken by the same rule, never by age, so a stopped or sleeping
|
|
484
|
+
// waiter keeps it. False when the breaker is another's: the caller waits.
|
|
485
|
+
async function removeAbandonedLock(path, holder, draft, owner) {
|
|
486
|
+
const breaker = `${path}.break`;
|
|
487
|
+
try {
|
|
488
|
+
await link(draft, breaker);
|
|
489
|
+
}
|
|
490
|
+
catch (error) {
|
|
491
|
+
if (error.code !== 'EEXIST')
|
|
492
|
+
return false;
|
|
493
|
+
const breaking = await readFile(breaker, 'utf8').catch(() => null);
|
|
494
|
+
if (breaking !== null && !(await holderRunning(breaker, breaking))) {
|
|
495
|
+
if ((await readFile(breaker, 'utf8').catch(() => null)) === breaking) {
|
|
496
|
+
await unlink(breaker).catch(() => undefined);
|
|
497
|
+
}
|
|
498
|
+
}
|
|
499
|
+
return false;
|
|
500
|
+
}
|
|
501
|
+
try {
|
|
502
|
+
if ((await readFile(path, 'utf8').catch(() => null)) === holder) {
|
|
503
|
+
await unlink(path).catch(() => undefined);
|
|
504
|
+
}
|
|
505
|
+
}
|
|
506
|
+
finally {
|
|
507
|
+
if ((await readFile(breaker, 'utf8').catch(() => null)) === owner) {
|
|
508
|
+
await unlink(breaker).catch(() => undefined);
|
|
509
|
+
}
|
|
510
|
+
}
|
|
511
|
+
return true;
|
|
512
|
+
}
|
|
513
|
+
// Drafts are named "<lock>.<pid>-<token>"; one whose process has exited was
|
|
514
|
+
// left by an interrupted wait.
|
|
515
|
+
async function removeAbandonedDrafts(lock_dir) {
|
|
516
|
+
for (const name of await readdir(lock_dir).catch(() => [])) {
|
|
517
|
+
const pid = Number(/^login-[0-9a-f]{16}\.lock\.(\d+)-[0-9a-f]+$/.exec(name)?.[1]);
|
|
518
|
+
if (pid && !processRunning(pid)) {
|
|
519
|
+
await unlink(join(lock_dir, name)).catch(() => undefined);
|
|
520
|
+
}
|
|
521
|
+
}
|
|
522
|
+
}
|
|
523
|
+
function processRunning(pid) {
|
|
524
|
+
try {
|
|
525
|
+
process.kill(pid, 0);
|
|
526
|
+
return true;
|
|
527
|
+
}
|
|
528
|
+
catch (error) {
|
|
529
|
+
return error.code === 'EPERM';
|
|
530
|
+
}
|
|
531
|
+
}
|
|
532
|
+
// Both values sit inside double quotes on security's command line, so an
|
|
533
|
+
// origin is checked before the browser flow starts, and again at the write.
|
|
534
|
+
function storableOrigin(origin) {
|
|
535
|
+
return /^[A-Za-z0-9:/.[\]_-]+$/.test(origin);
|
|
536
|
+
}
|
|
537
|
+
/**
|
|
538
|
+
* The macOS login Keychain, through the security command. Writes go through
|
|
539
|
+
* security -i on standard input, so the secret never appears in a process
|
|
540
|
+
* argument list.
|
|
541
|
+
*/
|
|
542
|
+
export function keychainStore() {
|
|
543
|
+
return {
|
|
544
|
+
async read(origin) {
|
|
545
|
+
const result = await run('security', [
|
|
546
|
+
'find-generic-password',
|
|
547
|
+
'-s',
|
|
548
|
+
KEYCHAIN_SERVICE,
|
|
549
|
+
'-a',
|
|
550
|
+
origin,
|
|
551
|
+
'-w'
|
|
552
|
+
]);
|
|
553
|
+
// 44: errSecItemNotFound.
|
|
554
|
+
if (result.code === 44)
|
|
555
|
+
return null;
|
|
556
|
+
if (result.code !== 0)
|
|
557
|
+
throw keychainError('read', result.stderr);
|
|
558
|
+
return result.stdout.trim();
|
|
559
|
+
},
|
|
560
|
+
async write(origin, value) {
|
|
561
|
+
if (!storableOrigin(origin) || !/^[\w-]+$/.test(value)) {
|
|
562
|
+
throw unstorableOrigin(origin);
|
|
563
|
+
}
|
|
564
|
+
const result = await run('security', ['-i'], `add-generic-password -U -s ${KEYCHAIN_SERVICE} -a "${origin}" -w "${value}"\n`);
|
|
565
|
+
if (result.code !== 0 || result.stderr.trim()) {
|
|
566
|
+
throw keychainError('write', result.stderr);
|
|
567
|
+
}
|
|
568
|
+
},
|
|
569
|
+
async remove(origin) {
|
|
570
|
+
const result = await run('security', [
|
|
571
|
+
'delete-generic-password',
|
|
572
|
+
'-s',
|
|
573
|
+
KEYCHAIN_SERVICE,
|
|
574
|
+
'-a',
|
|
575
|
+
origin
|
|
576
|
+
]);
|
|
577
|
+
if (result.code !== 0 && result.code !== 44) {
|
|
578
|
+
throw keychainError('remove', result.stderr);
|
|
579
|
+
}
|
|
580
|
+
}
|
|
581
|
+
};
|
|
582
|
+
}
|
|
583
|
+
function unstorableOrigin(origin) {
|
|
584
|
+
return new LoginError(`${origin} cannot be stored in the macOS Keychain; sign in with an origin like https://host[:port].`);
|
|
585
|
+
}
|
|
586
|
+
function keychainError(action, stderr) {
|
|
587
|
+
return new LoginError(`Could not ${action} the sign-in in the macOS Keychain: ${stderr.trim() || 'security failed'}.`);
|
|
588
|
+
}
|
|
589
|
+
function run(command, args, input) {
|
|
590
|
+
return new Promise((resolve, reject) => {
|
|
591
|
+
const child = execFile(command, args, (error, stdout, stderr) => {
|
|
592
|
+
const code = error && typeof error.code === 'number' ? error.code : error ? 1 : 0;
|
|
593
|
+
if (error && typeof error.code === 'string')
|
|
594
|
+
reject(error);
|
|
595
|
+
else
|
|
596
|
+
resolve({ code, stdout, stderr });
|
|
597
|
+
});
|
|
598
|
+
child.stdin?.end(input ?? '');
|
|
599
|
+
});
|
|
600
|
+
}
|
|
601
|
+
// The computer's name as the user set it, for showing the sign-in as
|
|
602
|
+
// "via sdlc login on <computer>"; the host name when it is not set.
|
|
603
|
+
async function computerName() {
|
|
604
|
+
const result = await run('scutil', ['--get', 'ComputerName']).catch(() => null);
|
|
605
|
+
const name = result?.code === 0 ? result.stdout.trim() : '';
|
|
606
|
+
return (name || hostname()).slice(0, 100);
|
|
607
|
+
}
|
|
608
|
+
function defaultDeps() {
|
|
609
|
+
return {
|
|
610
|
+
platform: process.platform,
|
|
611
|
+
fetch: globalThis.fetch,
|
|
612
|
+
store: keychainStore(),
|
|
613
|
+
now: Date.now,
|
|
614
|
+
lock_dir: join(homedir(), '.config', 'software-dlc'),
|
|
615
|
+
open_browser: (url) => new Promise((resolve, reject) => {
|
|
616
|
+
const child = spawn('open', [url], {
|
|
617
|
+
stdio: 'ignore',
|
|
618
|
+
detached: true
|
|
619
|
+
});
|
|
620
|
+
child.once('error', reject);
|
|
621
|
+
child.once('spawn', () => {
|
|
622
|
+
child.unref();
|
|
623
|
+
resolve();
|
|
624
|
+
});
|
|
625
|
+
}),
|
|
626
|
+
device_label: computerName,
|
|
627
|
+
ports: SDLC_LOGIN_PORTS,
|
|
628
|
+
timeout_ms: LOGIN_TIMEOUT_MS,
|
|
629
|
+
connection_origin: async (name) => (await getTrustedConnection({ name_or_id: name })).base_url,
|
|
630
|
+
out: (text) => process.stdout.write(text),
|
|
631
|
+
note: (text) => process.stderr.write(text)
|
|
632
|
+
};
|
|
633
|
+
}
|
|
634
|
+
//# sourceMappingURL=cli-login.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-login.js","sourceRoot":"","sources":["../src/cli-login.ts"],"names":[],"mappings":"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"}
|