@mesh-tech/mesh-cli 0.1.0 → 0.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/intent/agents-fence.md +10 -0
- package/assets/intent/intent-claude-gate.mjs +255 -0
- package/assets/log-shipper.mjs +94 -0
- package/bin/mesh.mjs +80 -0
- package/dist/bin/mesh.d.ts +7 -9
- package/dist/bin/mesh.d.ts.map +1 -1
- package/dist/bin/mesh.js +20826 -37
- package/dist/bin/mesh.js.map +7 -1
- package/dist/build-info.json +4 -0
- package/dist/src/commands/agent-api-client.d.ts +79 -0
- package/dist/src/commands/agent-api-client.d.ts.map +1 -0
- package/dist/src/commands/agent-api-client.js +170 -0
- package/dist/src/commands/agent-api-client.js.map +1 -0
- package/dist/src/commands/artifacts.d.ts +13 -0
- package/dist/src/commands/artifacts.d.ts.map +1 -0
- package/dist/src/commands/artifacts.js +140 -0
- package/dist/src/commands/artifacts.js.map +1 -0
- package/dist/src/commands/cluster.d.ts +45 -0
- package/dist/src/commands/cluster.d.ts.map +1 -0
- package/dist/src/commands/cluster.js +259 -0
- package/dist/src/commands/cluster.js.map +1 -0
- package/dist/src/commands/conversations.d.ts +61 -0
- package/dist/src/commands/conversations.d.ts.map +1 -0
- package/dist/src/commands/conversations.js +239 -0
- package/dist/src/commands/conversations.js.map +1 -0
- package/dist/src/commands/create-app.d.ts +26 -3
- package/dist/src/commands/create-app.d.ts.map +1 -1
- package/dist/src/commands/create-app.js +465 -107
- package/dist/src/commands/create-app.js.map +1 -1
- package/dist/src/commands/deploy.d.ts +19 -0
- package/dist/src/commands/deploy.d.ts.map +1 -1
- package/dist/src/commands/deploy.js +83 -142
- package/dist/src/commands/deploy.js.map +1 -1
- package/dist/src/commands/dev-doctor.d.ts +137 -0
- package/dist/src/commands/dev-doctor.d.ts.map +1 -0
- package/dist/src/commands/dev-doctor.js +671 -0
- package/dist/src/commands/dev-doctor.js.map +1 -0
- package/dist/src/commands/dev-launch.d.ts +59 -0
- package/dist/src/commands/dev-launch.d.ts.map +1 -0
- package/dist/src/commands/dev-launch.js +118 -0
- package/dist/src/commands/dev-launch.js.map +1 -0
- package/dist/src/commands/dev-token-server.d.ts +32 -0
- package/dist/src/commands/dev-token-server.d.ts.map +1 -0
- package/dist/src/commands/dev-token-server.js +68 -0
- package/dist/src/commands/dev-token-server.js.map +1 -0
- package/dist/src/commands/dev.d.ts +289 -2
- package/dist/src/commands/dev.d.ts.map +1 -1
- package/dist/src/commands/dev.js +2501 -574
- package/dist/src/commands/dev.js.map +1 -1
- package/dist/src/commands/docs.d.ts +3 -0
- package/dist/src/commands/docs.d.ts.map +1 -0
- package/dist/src/commands/docs.js +262 -0
- package/dist/src/commands/docs.js.map +1 -0
- package/dist/src/commands/hub/index.d.ts +99 -0
- package/dist/src/commands/hub/index.d.ts.map +1 -0
- package/dist/src/commands/hub/index.js +452 -0
- package/dist/src/commands/hub/index.js.map +1 -0
- package/dist/src/commands/init.d.ts +65 -0
- package/dist/src/commands/init.d.ts.map +1 -0
- package/dist/src/commands/init.js +370 -0
- package/dist/src/commands/init.js.map +1 -0
- package/dist/src/commands/install-shim.d.ts +21 -0
- package/dist/src/commands/install-shim.d.ts.map +1 -0
- package/dist/src/commands/install-shim.js +132 -0
- package/dist/src/commands/install-shim.js.map +1 -0
- package/dist/src/commands/local/auth-provision.d.ts +71 -0
- package/dist/src/commands/local/auth-provision.d.ts.map +1 -0
- package/dist/src/commands/local/auth-provision.js +286 -0
- package/dist/src/commands/local/auth-provision.js.map +1 -0
- package/dist/src/commands/local/dev-local.d.ts +97 -0
- package/dist/src/commands/local/dev-local.d.ts.map +1 -0
- package/dist/src/commands/local/dev-local.js +306 -0
- package/dist/src/commands/local/dev-local.js.map +1 -0
- package/dist/src/commands/local/docker-runner.d.ts +37 -0
- package/dist/src/commands/local/docker-runner.d.ts.map +1 -0
- package/dist/src/commands/local/docker-runner.js +104 -0
- package/dist/src/commands/local/docker-runner.js.map +1 -0
- package/dist/src/commands/local/helpers.d.ts +22 -0
- package/dist/src/commands/local/helpers.d.ts.map +1 -0
- package/dist/src/commands/local/helpers.js +46 -0
- package/dist/src/commands/local/helpers.js.map +1 -0
- package/dist/src/commands/local/hub-local.d.ts +51 -0
- package/dist/src/commands/local/hub-local.d.ts.map +1 -0
- package/dist/src/commands/local/hub-local.js +197 -0
- package/dist/src/commands/local/hub-local.js.map +1 -0
- package/dist/src/commands/local/index.d.ts +23 -0
- package/dist/src/commands/local/index.d.ts.map +1 -0
- package/dist/src/commands/local/index.js +386 -0
- package/dist/src/commands/local/index.js.map +1 -0
- package/dist/src/commands/local/mocks.d.ts +361 -0
- package/dist/src/commands/local/mocks.d.ts.map +1 -0
- package/dist/src/commands/local/mocks.js +756 -0
- package/dist/src/commands/local/mocks.js.map +1 -0
- package/dist/src/commands/local/seed-zitadel.d.ts +151 -0
- package/dist/src/commands/local/seed-zitadel.d.ts.map +1 -0
- package/dist/src/commands/local/seed-zitadel.js +408 -0
- package/dist/src/commands/local/seed-zitadel.js.map +1 -0
- package/dist/src/commands/local/seed.d.ts +106 -0
- package/dist/src/commands/local/seed.d.ts.map +1 -0
- package/dist/src/commands/local/seed.js +252 -0
- package/dist/src/commands/local/seed.js.map +1 -0
- package/dist/src/commands/local/stack.d.ts +173 -0
- package/dist/src/commands/local/stack.d.ts.map +1 -0
- package/dist/src/commands/local/stack.js +499 -0
- package/dist/src/commands/local/stack.js.map +1 -0
- package/dist/src/commands/login.d.ts +256 -12
- package/dist/src/commands/login.d.ts.map +1 -1
- package/dist/src/commands/login.js +978 -50
- package/dist/src/commands/login.js.map +1 -1
- package/dist/src/commands/peer-addressing.d.ts +51 -0
- package/dist/src/commands/peer-addressing.d.ts.map +1 -0
- package/dist/src/commands/peer-addressing.js +64 -0
- package/dist/src/commands/peer-addressing.js.map +1 -0
- package/dist/src/commands/port-ownership.d.ts +69 -0
- package/dist/src/commands/port-ownership.d.ts.map +1 -0
- package/dist/src/commands/port-ownership.js +161 -0
- package/dist/src/commands/port-ownership.js.map +1 -0
- package/dist/src/commands/registry-publish.d.ts +3 -0
- package/dist/src/commands/registry-publish.d.ts.map +1 -0
- package/dist/src/commands/registry-publish.js +161 -0
- package/dist/src/commands/registry-publish.js.map +1 -0
- package/dist/src/commands/registry.d.ts +146 -2
- package/dist/src/commands/registry.d.ts.map +1 -1
- package/dist/src/commands/registry.js +541 -85
- package/dist/src/commands/registry.js.map +1 -1
- package/dist/src/commands/secrets/index.d.ts.map +1 -1
- package/dist/src/commands/secrets/index.js +15 -1
- package/dist/src/commands/secrets/index.js.map +1 -1
- package/dist/src/commands/secrets/migrate-config.d.ts +24 -0
- package/dist/src/commands/secrets/migrate-config.d.ts.map +1 -0
- package/dist/src/commands/secrets/migrate-config.js +277 -0
- package/dist/src/commands/secrets/migrate-config.js.map +1 -0
- package/dist/src/commands/secrets/set.d.ts +4 -0
- package/dist/src/commands/secrets/set.d.ts.map +1 -1
- package/dist/src/commands/secrets/set.js +243 -64
- package/dist/src/commands/secrets/set.js.map +1 -1
- package/dist/src/commands/skills.d.ts +34 -0
- package/dist/src/commands/skills.d.ts.map +1 -0
- package/dist/src/commands/skills.js +207 -0
- package/dist/src/commands/skills.js.map +1 -0
- package/dist/src/commands/stack.d.ts.map +1 -1
- package/dist/src/commands/stack.js +361 -23
- package/dist/src/commands/stack.js.map +1 -1
- package/dist/src/commands/temporal.d.ts +15 -0
- package/dist/src/commands/temporal.d.ts.map +1 -0
- package/dist/src/commands/temporal.js +781 -0
- package/dist/src/commands/temporal.js.map +1 -0
- package/dist/src/commands/tenant.d.ts +56 -0
- package/dist/src/commands/tenant.d.ts.map +1 -0
- package/dist/src/commands/tenant.js +233 -0
- package/dist/src/commands/tenant.js.map +1 -0
- package/dist/src/commands/tunnel/index.d.ts +49 -3
- package/dist/src/commands/tunnel/index.d.ts.map +1 -1
- package/dist/src/commands/tunnel/index.js +331 -8
- package/dist/src/commands/tunnel/index.js.map +1 -1
- package/dist/src/commands/vcs/clone.d.ts +3 -0
- package/dist/src/commands/vcs/clone.d.ts.map +1 -0
- package/dist/src/commands/vcs/clone.js +20 -0
- package/dist/src/commands/vcs/clone.js.map +1 -0
- package/dist/src/commands/vcs/common.d.ts +21 -0
- package/dist/src/commands/vcs/common.d.ts.map +1 -0
- package/dist/src/commands/vcs/common.js +62 -0
- package/dist/src/commands/vcs/common.js.map +1 -0
- package/dist/src/commands/vcs/drafts.d.ts +13 -0
- package/dist/src/commands/vcs/drafts.d.ts.map +1 -0
- package/dist/src/commands/vcs/drafts.js +45 -0
- package/dist/src/commands/vcs/drafts.js.map +1 -0
- package/dist/src/commands/vcs/get.d.ts +8 -0
- package/dist/src/commands/vcs/get.d.ts.map +1 -0
- package/dist/src/commands/vcs/get.js +61 -0
- package/dist/src/commands/vcs/get.js.map +1 -0
- package/dist/src/commands/vcs/index.d.ts +3 -0
- package/dist/src/commands/vcs/index.d.ts.map +1 -0
- package/dist/src/commands/vcs/index.js +58 -0
- package/dist/src/commands/vcs/index.js.map +1 -0
- package/dist/src/commands/vcs/propose.d.ts +23 -0
- package/dist/src/commands/vcs/propose.d.ts.map +1 -0
- package/dist/src/commands/vcs/propose.js +94 -0
- package/dist/src/commands/vcs/propose.js.map +1 -0
- package/dist/src/commands/vcs/review.d.ts +15 -0
- package/dist/src/commands/vcs/review.d.ts.map +1 -0
- package/dist/src/commands/vcs/review.js +35 -0
- package/dist/src/commands/vcs/review.js.map +1 -0
- package/dist/src/commands/vcs-enrich.d.ts +15 -0
- package/dist/src/commands/vcs-enrich.d.ts.map +1 -0
- package/dist/src/commands/vcs-enrich.js +28 -0
- package/dist/src/commands/vcs-enrich.js.map +1 -0
- package/dist/src/commands/vpn/index.d.ts +24 -0
- package/dist/src/commands/vpn/index.d.ts.map +1 -0
- package/dist/src/commands/vpn/index.js +543 -0
- package/dist/src/commands/vpn/index.js.map +1 -0
- package/dist/src/commands/vpn/tunnel.d.ts +11 -0
- package/dist/src/commands/vpn/tunnel.d.ts.map +1 -0
- package/dist/src/commands/vpn/tunnel.js +188 -0
- package/dist/src/commands/vpn/tunnel.js.map +1 -0
- package/dist/src/commands/workflow.d.ts +24 -0
- package/dist/src/commands/workflow.d.ts.map +1 -0
- package/dist/src/commands/workflow.js +577 -0
- package/dist/src/commands/workflow.js.map +1 -0
- package/dist/src/docs/assemble.d.ts +217 -0
- package/dist/src/docs/assemble.d.ts.map +1 -0
- package/dist/src/docs/assemble.js +739 -0
- package/dist/src/docs/assemble.js.map +1 -0
- package/dist/src/docs/cli-reference.d.ts +93 -0
- package/dist/src/docs/cli-reference.d.ts.map +1 -0
- package/dist/src/docs/cli-reference.js +256 -0
- package/dist/src/docs/cli-reference.js.map +1 -0
- package/dist/src/docs/discover.d.ts +60 -0
- package/dist/src/docs/discover.d.ts.map +1 -0
- package/dist/src/docs/discover.js +233 -0
- package/dist/src/docs/discover.js.map +1 -0
- package/dist/src/docs/portal.d.ts +79 -0
- package/dist/src/docs/portal.d.ts.map +1 -0
- package/dist/src/docs/portal.js +242 -0
- package/dist/src/docs/portal.js.map +1 -0
- package/dist/src/docs/registry-docs.d.ts +43 -0
- package/dist/src/docs/registry-docs.d.ts.map +1 -0
- package/dist/src/docs/registry-docs.js +138 -0
- package/dist/src/docs/registry-docs.js.map +1 -0
- package/dist/src/docs/schema.d.ts +48 -0
- package/dist/src/docs/schema.d.ts.map +1 -0
- package/dist/src/docs/schema.js +96 -0
- package/dist/src/docs/schema.js.map +1 -0
- package/dist/src/docs/serve.d.ts +27 -0
- package/dist/src/docs/serve.d.ts.map +1 -0
- package/dist/src/docs/serve.js +102 -0
- package/dist/src/docs/serve.js.map +1 -0
- package/dist/src/docs/start.d.ts +80 -0
- package/dist/src/docs/start.d.ts.map +1 -0
- package/dist/src/docs/start.js +313 -0
- package/dist/src/docs/start.js.map +1 -0
- package/dist/src/eval/agent-eval.d.mts +14 -0
- package/dist/src/eval/agent-eval.d.mts.map +1 -0
- package/dist/src/eval/agent-eval.mjs +273 -0
- package/dist/src/eval/agent-eval.mjs.map +1 -0
- package/dist/src/index.js +624 -7
- package/dist/src/index.js.map +7 -1
- package/dist/src/program.d.ts +26 -0
- package/dist/src/program.d.ts.map +1 -0
- package/dist/src/program.js +76 -0
- package/dist/src/program.js.map +1 -0
- package/dist/src/utils/auth-preflight.d.ts +159 -0
- package/dist/src/utils/auth-preflight.d.ts.map +1 -0
- package/dist/src/utils/auth-preflight.js +298 -0
- package/dist/src/utils/auth-preflight.js.map +1 -0
- package/dist/src/utils/aws-auth.d.ts +181 -0
- package/dist/src/utils/aws-auth.d.ts.map +1 -0
- package/dist/src/utils/aws-auth.js +527 -0
- package/dist/src/utils/aws-auth.js.map +1 -0
- package/dist/src/utils/bastion.d.ts +1 -1
- package/dist/src/utils/bastion.d.ts.map +1 -1
- package/dist/src/utils/bastion.js +29 -8
- package/dist/src/utils/bastion.js.map +1 -1
- package/dist/src/utils/build-info.d.ts +33 -0
- package/dist/src/utils/build-info.d.ts.map +1 -0
- package/dist/src/utils/build-info.js +102 -0
- package/dist/src/utils/build-info.js.map +1 -0
- package/dist/src/utils/capture-history.d.ts +62 -0
- package/dist/src/utils/capture-history.d.ts.map +1 -0
- package/dist/src/utils/capture-history.js +94 -0
- package/dist/src/utils/capture-history.js.map +1 -0
- package/dist/src/utils/deploy-preflight.d.ts +52 -0
- package/dist/src/utils/deploy-preflight.d.ts.map +1 -0
- package/dist/src/utils/deploy-preflight.js +183 -0
- package/dist/src/utils/deploy-preflight.js.map +1 -0
- package/dist/src/utils/errors.d.ts +75 -0
- package/dist/src/utils/errors.d.ts.map +1 -0
- package/dist/src/utils/errors.js +106 -0
- package/dist/src/utils/errors.js.map +1 -0
- package/dist/src/utils/first-party-contexts.d.ts +40 -0
- package/dist/src/utils/first-party-contexts.d.ts.map +1 -0
- package/dist/src/utils/first-party-contexts.js +53 -0
- package/dist/src/utils/first-party-contexts.js.map +1 -0
- package/dist/src/utils/index.d.ts +2 -0
- package/dist/src/utils/index.d.ts.map +1 -1
- package/dist/src/utils/index.js +2 -0
- package/dist/src/utils/index.js.map +1 -1
- package/dist/src/utils/kubeconfig.d.ts +62 -0
- package/dist/src/utils/kubeconfig.d.ts.map +1 -0
- package/dist/src/utils/kubeconfig.js +118 -0
- package/dist/src/utils/kubeconfig.js.map +1 -0
- package/dist/src/utils/log.d.ts +27 -1
- package/dist/src/utils/log.d.ts.map +1 -1
- package/dist/src/utils/log.js +59 -5
- package/dist/src/utils/log.js.map +1 -1
- package/dist/src/utils/pid.d.ts +47 -0
- package/dist/src/utils/pid.d.ts.map +1 -0
- package/dist/src/utils/pid.js +83 -0
- package/dist/src/utils/pid.js.map +1 -0
- package/dist/src/utils/pulumi-run.d.ts +23 -0
- package/dist/src/utils/pulumi-run.d.ts.map +1 -0
- package/dist/src/utils/pulumi-run.js +112 -0
- package/dist/src/utils/pulumi-run.js.map +1 -0
- package/dist/src/utils/pulumi.d.ts +15 -0
- package/dist/src/utils/pulumi.d.ts.map +1 -1
- package/dist/src/utils/pulumi.js +35 -0
- package/dist/src/utils/pulumi.js.map +1 -1
- package/dist/src/utils/reachability.d.ts +29 -0
- package/dist/src/utils/reachability.d.ts.map +1 -0
- package/dist/src/utils/reachability.js +81 -0
- package/dist/src/utils/reachability.js.map +1 -0
- package/dist/src/utils/recover-conversation.d.ts +154 -0
- package/dist/src/utils/recover-conversation.d.ts.map +1 -0
- package/dist/src/utils/recover-conversation.js +314 -0
- package/dist/src/utils/recover-conversation.js.map +1 -0
- package/dist/src/utils/registry-broker.d.ts +148 -0
- package/dist/src/utils/registry-broker.d.ts.map +1 -0
- package/dist/src/utils/registry-broker.js +180 -0
- package/dist/src/utils/registry-broker.js.map +1 -0
- package/dist/src/utils/socks-forward.d.ts +40 -0
- package/dist/src/utils/socks-forward.d.ts.map +1 -0
- package/dist/src/utils/socks-forward.js +97 -0
- package/dist/src/utils/socks-forward.js.map +1 -0
- package/dist/src/utils/stack-flag.d.ts +23 -0
- package/dist/src/utils/stack-flag.d.ts.map +1 -0
- package/dist/src/utils/stack-flag.js +41 -0
- package/dist/src/utils/stack-flag.js.map +1 -0
- package/dist/src/utils/tailscale-targets.d.ts +52 -0
- package/dist/src/utils/tailscale-targets.d.ts.map +1 -0
- package/dist/src/utils/tailscale-targets.js +93 -0
- package/dist/src/utils/tailscale-targets.js.map +1 -0
- package/dist/src/utils/tailscale.d.ts +277 -0
- package/dist/src/utils/tailscale.d.ts.map +1 -0
- package/dist/src/utils/tailscale.js +1007 -0
- package/dist/src/utils/tailscale.js.map +1 -0
- package/dist/src/utils/temporal-auth.d.ts +43 -0
- package/dist/src/utils/temporal-auth.d.ts.map +1 -0
- package/dist/src/utils/temporal-auth.js +176 -0
- package/dist/src/utils/temporal-auth.js.map +1 -0
- package/dist/src/utils/temporal-codec.d.ts +101 -0
- package/dist/src/utils/temporal-codec.d.ts.map +1 -0
- package/dist/src/utils/temporal-codec.js +319 -0
- package/dist/src/utils/temporal-codec.js.map +1 -0
- package/dist/src/utils/tunnel-ownership.d.ts +130 -0
- package/dist/src/utils/tunnel-ownership.d.ts.map +1 -0
- package/dist/src/utils/tunnel-ownership.js +274 -0
- package/dist/src/utils/tunnel-ownership.js.map +1 -0
- package/dist/src/utils/vpn-join.d.ts +32 -0
- package/dist/src/utils/vpn-join.d.ts.map +1 -0
- package/dist/src/utils/vpn-join.js +62 -0
- package/dist/src/utils/vpn-join.js.map +1 -0
- package/dist/src/utils/vpn.d.ts +62 -0
- package/dist/src/utils/vpn.d.ts.map +1 -0
- package/dist/src/utils/vpn.js +183 -0
- package/dist/src/utils/vpn.js.map +1 -0
- package/dist/src/utils/workflow-fingerprint.d.ts +49 -0
- package/dist/src/utils/workflow-fingerprint.d.ts.map +1 -0
- package/dist/src/utils/workflow-fingerprint.js +135 -0
- package/dist/src/utils/workflow-fingerprint.js.map +1 -0
- package/dist/src/utils/worktree-identity.d.ts +86 -0
- package/dist/src/utils/worktree-identity.d.ts.map +1 -0
- package/dist/src/utils/worktree-identity.js +164 -0
- package/dist/src/utils/worktree-identity.js.map +1 -0
- package/fragments/agents/AGENTS.md.hbs +92 -0
- package/fragments/agents/CLAUDE.md.hbs +8 -0
- package/fragments/base/Pulumi.dev.yaml.hbs +10 -0
- package/fragments/base/Pulumi.yaml.hbs +9 -0
- package/fragments/base/index.ts.hbs +107 -0
- package/fragments/base/package.json.hbs +22 -0
- package/{templates/api-web-db/api → fragments/base}/tsconfig.json +3 -4
- package/fragments/bucket/api/src/storage.ts.hbs +81 -0
- package/fragments/database/api/src/db.ts.hbs +23 -0
- package/fragments/database/prisma/schema.prisma.hbs +18 -0
- package/{templates/api-web-db → fragments/service}/api/.dockerignore +2 -0
- package/fragments/service/api/package.json.hbs +40 -0
- package/fragments/service/api/src/index.ts.hbs +58 -0
- package/{templates/api-web-db → fragments/service/api}/tsconfig.json +5 -3
- package/fragments/temporal/worker/.dockerignore +4 -0
- package/fragments/temporal/worker/Dockerfile +15 -0
- package/{templates/temporal-api-worker → fragments/temporal}/worker/package.json.hbs +3 -2
- package/fragments/temporal/worker/src/activities.ts.hbs +14 -0
- package/fragments/temporal/worker/src/worker.ts.hbs +27 -0
- package/fragments/temporal/worker/src/workflows.ts.hbs +24 -0
- package/fragments/temporal/worker/tsconfig.json +13 -0
- package/package.json +35 -21
- package/skills/core/SKILL.md +365 -0
- package/skills/pull-remote-agent-context/SKILL.md +194 -0
- package/stack/docker-compose.hub.yml +134 -0
- package/stack/docker-compose.yml +447 -0
- package/stack/hub/Dockerfile.api +18 -0
- package/stack/hub/Dockerfile.auth +10 -0
- package/stack/hub/Dockerfile.ui +10 -0
- package/stack/init/01-databases.sql +12 -0
- package/stack/observability/blackbox.yml +20 -0
- package/stack/observability/otel-collector.yaml +73 -0
- package/stack/observability/prometheus.yml +36 -0
- package/stack/observability/tempo.yaml +25 -0
- package/stack/temporal/local.yaml +44 -0
- package/templates/api-auth/AGENTS.md.hbs +16 -0
- package/templates/api-auth/Pulumi.dev.yaml.hbs +8 -0
- package/templates/api-auth/Pulumi.yaml.hbs +8 -0
- package/templates/api-auth/README.md.hbs +67 -0
- package/templates/api-auth/api/package.json.hbs +28 -0
- package/templates/api-auth/api/src/index.ts.hbs +96 -0
- package/templates/api-auth/api/src/schema.ts.hbs +35 -0
- package/templates/api-auth/api/src/seed-authz.ts.hbs +48 -0
- package/templates/api-auth/api/src/spicedb-http-provider.ts.hbs +89 -0
- package/templates/api-auth/index.ts.hbs +65 -0
- package/templates/api-auth/package.json.hbs +20 -0
- package/templates/api-auth/skills/develop/SKILL.md.hbs +32 -0
- package/templates/api-role-gating/AGENTS.md.hbs +20 -0
- package/templates/api-role-gating/Pulumi.dev.yaml.hbs +8 -0
- package/templates/api-role-gating/Pulumi.yaml.hbs +8 -0
- package/templates/api-role-gating/README.md.hbs +64 -0
- package/templates/api-role-gating/api/Dockerfile +17 -0
- package/templates/api-role-gating/api/package.json.hbs +28 -0
- package/templates/api-role-gating/api/src/authn.ts.hbs +29 -0
- package/templates/api-role-gating/api/src/authz.ts.hbs +12 -0
- package/templates/api-role-gating/api/src/main.ts.hbs +58 -0
- package/templates/api-role-gating/api/src/schema.ts.hbs +22 -0
- package/templates/api-role-gating/api/tsconfig.json +13 -0
- package/templates/api-role-gating/index.ts.hbs +107 -0
- package/templates/api-role-gating/package.json.hbs +21 -0
- package/templates/api-role-gating/skills/develop/SKILL.md.hbs +60 -0
- package/templates/api-role-gating/tsconfig.json +10 -0
- package/templates/apps-repo/README.md.hbs +24 -0
- package/templates/apps-repo/gitignore +41 -0
- package/templates/apps-repo/npmrc.hbs +7 -0
- package/templates/apps-repo/package.json.hbs +15 -0
- package/templates/apps-repo/pnpm-workspace.yaml +3 -0
- package/templates/apps-repo/tsconfig.json +18 -0
- package/templates/external-service/AGENTS.md.hbs +20 -0
- package/templates/external-service/Pulumi.dev.yaml.hbs +8 -0
- package/templates/external-service/Pulumi.yaml.hbs +8 -0
- package/templates/external-service/README.md.hbs +56 -0
- package/templates/external-service/api/Dockerfile +15 -0
- package/templates/external-service/api/package.json.hbs +25 -0
- package/templates/external-service/api/src/index.ts.hbs +81 -0
- package/templates/external-service/index.ts.hbs +82 -0
- package/templates/external-service/mocks/vendorpay/package.json.hbs +9 -0
- package/templates/external-service/mocks/vendorpay/server.mjs.hbs +61 -0
- package/templates/external-service/package.json.hbs +34 -0
- package/templates/external-service/skills/develop/SKILL.md.hbs +55 -0
- package/templates/external-service/tsconfig.json +10 -0
- package/templates/platform-repo/AGENTS.md.hbs +18 -0
- package/templates/platform-repo/README.md.hbs +38 -0
- package/templates/platform-repo/core/Pulumi.yaml.hbs +12 -0
- package/templates/platform-repo/core/Pulumi.{{tenant}}-{{env}}.yaml.hbs +57 -0
- package/templates/platform-repo/core/index.ts +62 -0
- package/templates/platform-repo/core/package.json.hbs +22 -0
- package/templates/platform-repo/core/tsconfig.json +8 -0
- package/templates/platform-repo/package.json.hbs +15 -0
- package/templates/platform-repo/platform/Pulumi.yaml.hbs +12 -0
- package/templates/platform-repo/platform/Pulumi.{{tenant}}-{{env}}.yaml.hbs +59 -0
- package/templates/platform-repo/platform/index.ts +95 -0
- package/templates/platform-repo/platform/package.json.hbs +26 -0
- package/templates/platform-repo/platform/tsconfig.json +8 -0
- package/templates/platform-repo/pnpm-workspace.yaml +3 -0
- package/templates/workflow/AGENTS.md.hbs +15 -0
- package/templates/workflow/Pulumi.dev.yaml.hbs +8 -0
- package/templates/workflow/Pulumi.yaml.hbs +8 -0
- package/templates/workflow/README.md.hbs +45 -0
- package/templates/workflow/api/.dockerignore +4 -0
- package/templates/workflow/api/Dockerfile +15 -0
- package/templates/{temporal-api-worker → workflow}/api/package.json.hbs +8 -6
- package/templates/workflow/api/src/index.ts.hbs +130 -0
- package/templates/workflow/api/tsconfig.json +14 -0
- package/templates/workflow/index.ts.hbs +67 -0
- package/templates/workflow/package.json.hbs +20 -0
- package/templates/workflow/skills/develop/SKILL.md.hbs +32 -0
- package/templates/workflow/tsconfig.json +10 -0
- package/templates/workflow/worker/.dockerignore +4 -0
- package/templates/workflow/worker/Dockerfile +13 -0
- package/templates/workflow/worker/package.json.hbs +25 -0
- package/templates/workflow/worker/src/worker.ts.hbs +24 -0
- package/templates/workflow/worker/tsconfig.json +14 -0
- package/dist/src/commands/devbox.d.ts +0 -22
- package/dist/src/commands/devbox.d.ts.map +0 -1
- package/dist/src/commands/devbox.js +0 -463
- package/dist/src/commands/devbox.js.map +0 -1
- package/templates/api-web-db/api/Dockerfile +0 -16
- package/templates/api-web-db/api/package.json.hbs +0 -21
- package/templates/api-web-db/api/src/index.ts.hbs +0 -123
- package/templates/api-web-db/package.json.hbs +0 -27
- package/templates/api-web-db/sst.config.ts.hbs +0 -151
- package/templates/api-web-db/web/.dockerignore +0 -3
- package/templates/api-web-db/web/Dockerfile +0 -17
- package/templates/api-web-db/web/app/lib/db.server.ts +0 -36
- package/templates/api-web-db/web/app/root.tsx +0 -29
- package/templates/api-web-db/web/app/routes/home.tsx.hbs +0 -114
- package/templates/api-web-db/web/app/routes.ts +0 -3
- package/templates/api-web-db/web/package.json.hbs +0 -30
- package/templates/api-web-db/web/prisma/schema.prisma +0 -25
- package/templates/api-web-db/web/prisma.config.ts +0 -18
- package/templates/api-web-db/web/react-router.config.ts +0 -5
- package/templates/api-web-db/web/tsconfig.json +0 -19
- package/templates/api-web-db/web/vite.config.ts +0 -9
- package/templates/temporal-api-worker/README.md.hbs +0 -133
- package/templates/temporal-api-worker/api/src/index.ts.hbs +0 -145
- package/templates/temporal-api-worker/package.json.hbs +0 -29
- package/templates/temporal-api-worker/sst.config.ts.hbs +0 -161
- package/templates/temporal-api-worker/worker/Dockerfile +0 -11
- package/templates/temporal-api-worker/worker/src/bundle-workflows.ts +0 -38
- package/templates/temporal-api-worker/worker/src/worker.ts.hbs +0 -93
- /package/templates/{temporal-api-worker → api-auth}/api/.dockerignore +0 -0
- /package/templates/{temporal-api-worker → api-auth}/api/Dockerfile +0 -0
- /package/templates/{temporal-api-worker → api-auth}/api/tsconfig.json +0 -0
- /package/templates/{temporal-api-worker → api-auth}/tsconfig.json +0 -0
- /package/templates/{temporal-api-worker/worker → api-role-gating/api}/.dockerignore +0 -0
- /package/templates/{temporal-api-worker/worker → external-service/api}/tsconfig.json +0 -0
- /package/templates/{temporal-api-worker → workflow}/api/src/encryption-codec.ts +0 -0
- /package/templates/{temporal-api-worker → workflow}/worker/src/activities.ts.hbs +0 -0
- /package/templates/{temporal-api-worker → workflow}/worker/src/encryption-codec.ts +0 -0
- /package/templates/{temporal-api-worker → workflow}/worker/src/workflows.ts.hbs +0 -0
|
@@ -2,12 +2,194 @@
|
|
|
2
2
|
* mesh tunnel - SSM tunneling to platform services
|
|
3
3
|
*
|
|
4
4
|
* Commands:
|
|
5
|
-
* mesh tunnel dev
|
|
6
|
-
* mesh tunnel --services
|
|
7
|
-
* mesh tunnel --list
|
|
5
|
+
* mesh tunnel dev Start all dev tunnels (temporal + db)
|
|
6
|
+
* mesh tunnel --services Start specific services
|
|
7
|
+
* mesh tunnel --list List available services
|
|
8
|
+
* mesh tunnel external <name> Tunnel to a registered external service
|
|
8
9
|
*/
|
|
9
10
|
import { spawn } from "child_process";
|
|
10
|
-
import
|
|
11
|
+
import * as fs from "fs";
|
|
12
|
+
import * as os from "os";
|
|
13
|
+
import * as path from "path";
|
|
14
|
+
import { SecretsManagerClient, GetSecretValueCommand, } from "@aws-sdk/client-secrets-manager";
|
|
15
|
+
import { detectContext, getPlatformBastionInfo, logInfo, logError, } from "../../utils/index.js";
|
|
16
|
+
/**
|
|
17
|
+
* Resolve tenant/env without ceremony: explicit flags win, otherwise the
|
|
18
|
+
* same Pulumi/SST context detection `mesh dev` uses (mesh:tenant + stack
|
|
19
|
+
* file in the current app dir).
|
|
20
|
+
*
|
|
21
|
+
* Returns the detected app `stage` alongside the platform `env` because they
|
|
22
|
+
* are genuinely different values — detectContext() strips the tenant prefix
|
|
23
|
+
* and runs the result through the platform-env map, so a stack
|
|
24
|
+
* `Pulumi.scu-dev.yaml` yields stage `scu-dev` but platform env `dev`.
|
|
25
|
+
* Callers that key on the app axis (credential secrets) need the former.
|
|
26
|
+
*/
|
|
27
|
+
function resolveTenantEnv(options) {
|
|
28
|
+
if (options.tenant && options.env) {
|
|
29
|
+
// Fully explicit: nothing was detected, so there is no app stage to offer —
|
|
30
|
+
// the credential axis falls back to --env, exactly as `mesh db …` does.
|
|
31
|
+
return { tenant: options.tenant, env: options.env };
|
|
32
|
+
}
|
|
33
|
+
// `options.env` is a platform env, not a stage; passing it as detectContext's
|
|
34
|
+
// stage hint is deliberate (it's the best hint available) but does make that
|
|
35
|
+
// function's own "Stage: …" log line read as an env when only -e was given.
|
|
36
|
+
const ctx = detectContext(options.env);
|
|
37
|
+
return {
|
|
38
|
+
tenant: options.tenant ?? ctx.tenant,
|
|
39
|
+
env: options.env ?? ctx.platformEnv,
|
|
40
|
+
stage: ctx.stage,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* aws:region from the nearest Pulumi config in cwd. Prefers the stack actually
|
|
45
|
+
* being targeted; otherwise stack files before the project file, and among
|
|
46
|
+
* several stacks this is a best-effort pick (readdir order).
|
|
47
|
+
*/
|
|
48
|
+
function readPulumiAwsRegion(stage) {
|
|
49
|
+
const preferred = stage ? `Pulumi.${stage}.yaml` : undefined;
|
|
50
|
+
const rank = (f) => f === preferred ? 0 : f === "Pulumi.yaml" ? 2 : 1;
|
|
51
|
+
try {
|
|
52
|
+
const files = fs
|
|
53
|
+
.readdirSync(".")
|
|
54
|
+
.filter((f) => f.startsWith("Pulumi.") && f.endsWith(".yaml"))
|
|
55
|
+
.sort((a, b) => rank(a) - rank(b));
|
|
56
|
+
for (const f of files) {
|
|
57
|
+
const m = fs
|
|
58
|
+
.readFileSync(f, "utf-8")
|
|
59
|
+
.match(/^\s*aws:region:\s*["']?([^"'\n]+)["']?/m);
|
|
60
|
+
if (m?.[1])
|
|
61
|
+
return m[1].trim();
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
/* unreadable cwd — fall through */
|
|
66
|
+
}
|
|
67
|
+
return undefined;
|
|
68
|
+
}
|
|
69
|
+
/** `~/.aws` section headers a profile can appear under, in precedence order. */
|
|
70
|
+
function awsProfileSections(name) {
|
|
71
|
+
return [
|
|
72
|
+
[path.join(os.homedir(), ".aws", "config"), `[profile ${name}]`],
|
|
73
|
+
[path.join(os.homedir(), ".aws", "credentials"), `[${name}]`],
|
|
74
|
+
];
|
|
75
|
+
}
|
|
76
|
+
function awsProfileExists(name) {
|
|
77
|
+
for (const [file, header] of awsProfileSections(name)) {
|
|
78
|
+
try {
|
|
79
|
+
const lines = fs.readFileSync(file, "utf-8").split("\n");
|
|
80
|
+
if (lines.some((l) => l.trim() === header))
|
|
81
|
+
return true;
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
/* file absent */
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
return false;
|
|
88
|
+
}
|
|
89
|
+
/** `region = …` from a specific section of an ini-style `~/.aws` file. */
|
|
90
|
+
export function parseProfileRegion(text, header) {
|
|
91
|
+
let inSection = false;
|
|
92
|
+
for (const raw of text.split("\n")) {
|
|
93
|
+
const line = raw.trim();
|
|
94
|
+
if (line.startsWith("[")) {
|
|
95
|
+
inSection = line === header;
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
98
|
+
if (!inSection)
|
|
99
|
+
continue;
|
|
100
|
+
const m = line.match(/^region\s*=\s*(.+)$/);
|
|
101
|
+
// AWS's shared-config parser strips whitespace-prefixed inline comments
|
|
102
|
+
// (`region = us-east-1 # prod` means us-east-1); match it. The regex
|
|
103
|
+
// already ate leading whitespace, so the first split segment is the value.
|
|
104
|
+
const value = m?.[1]?.split(/\s+[#;]/)[0]?.trim();
|
|
105
|
+
if (value)
|
|
106
|
+
return value;
|
|
107
|
+
}
|
|
108
|
+
return undefined;
|
|
109
|
+
}
|
|
110
|
+
function awsProfileRegion(profile) {
|
|
111
|
+
if (!profile)
|
|
112
|
+
return undefined;
|
|
113
|
+
for (const [file, header] of awsProfileSections(profile)) {
|
|
114
|
+
try {
|
|
115
|
+
const region = parseProfileRegion(fs.readFileSync(file, "utf-8"), header);
|
|
116
|
+
if (region)
|
|
117
|
+
return region;
|
|
118
|
+
}
|
|
119
|
+
catch {
|
|
120
|
+
/* file absent */
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
return undefined;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Section headers for the SDK's implicit `[default]` profile. Spelled
|
|
127
|
+
* `[default]` in BOTH files — `~/.aws/config` has no `[profile default]`
|
|
128
|
+
* form — so it cannot be routed through awsProfileSections("default").
|
|
129
|
+
*/
|
|
130
|
+
export function awsDefaultProfileSections() {
|
|
131
|
+
return [
|
|
132
|
+
[path.join(os.homedir(), ".aws", "config"), "[default]"],
|
|
133
|
+
[path.join(os.homedir(), ".aws", "credentials"), "[default]"],
|
|
134
|
+
];
|
|
135
|
+
}
|
|
136
|
+
/** Region the SDK would take from `[default]` when no named profile is in play. */
|
|
137
|
+
function awsDefaultProfileRegion() {
|
|
138
|
+
for (const [file, header] of awsDefaultProfileSections()) {
|
|
139
|
+
try {
|
|
140
|
+
const region = parseProfileRegion(fs.readFileSync(file, "utf-8"), header);
|
|
141
|
+
if (region)
|
|
142
|
+
return region;
|
|
143
|
+
}
|
|
144
|
+
catch {
|
|
145
|
+
/* file absent */
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
return undefined;
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Fill AWS_PROFILE/AWS_REGION so tunnels run without env-var ceremony:
|
|
152
|
+
* profile by tenant convention ({tenant}-{env}, then {tenant}) when no
|
|
153
|
+
* credentials are already present, then region from the nearest Pulumi config,
|
|
154
|
+
* else that profile's own region. Applies to both the SDK lookups and the
|
|
155
|
+
* spawned `aws ssm start-session`.
|
|
156
|
+
*
|
|
157
|
+
* Order matters: AWS_REGION in the environment outranks a profile's own
|
|
158
|
+
* `region` in both the SDK v3 chain and the `aws` CLI, so the profile must be
|
|
159
|
+
* resolved FIRST and its region consulted BEFORE any platform default —
|
|
160
|
+
* otherwise a stack that isn't in us-east-2 (tests/tenants/bigbank,
|
|
161
|
+
* tests/tenants/mesh/apps/hello are us-east-1) gets silently redirected when
|
|
162
|
+
* run from a directory with no Pulumi.*.yaml. Same call `dev.ts:3157` and
|
|
163
|
+
* `utils/tailscale.ts:611` make.
|
|
164
|
+
*
|
|
165
|
+
* us-east-2 survives only as the last resort, because this module builds its
|
|
166
|
+
* SecretsManagerClient inline (`new SecretsManagerClient({})`) — aws-auth.ts's
|
|
167
|
+
* DEFAULT_REGION is module-private to that file and does NOT backstop it, so
|
|
168
|
+
* dropping the default outright turns a no-Pulumi/no-profile-region directory
|
|
169
|
+
* into `Region is missing` rather than a working tunnel.
|
|
170
|
+
*/
|
|
171
|
+
function applyAwsDefaults(tenant, env, stage) {
|
|
172
|
+
if (!process.env.AWS_PROFILE && !process.env.AWS_ACCESS_KEY_ID) {
|
|
173
|
+
const profile = [`${tenant}-${env}`, tenant].find(awsProfileExists);
|
|
174
|
+
if (profile) {
|
|
175
|
+
process.env.AWS_PROFILE = profile;
|
|
176
|
+
logInfo(`AWS profile: ${profile} (from ~/.aws, tenant convention)`);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
if (!process.env.AWS_REGION && !process.env.AWS_DEFAULT_REGION) {
|
|
180
|
+
// stack config > the effective profile's own region > platform default.
|
|
181
|
+
// When no named profile is in play the SDK's effective profile is
|
|
182
|
+
// `[default]`, so consult ITS region before inventing us-east-2 —
|
|
183
|
+
// otherwise a plain `[default]`-only setup gets silently redirected.
|
|
184
|
+
const region = readPulumiAwsRegion(stage) ??
|
|
185
|
+
(process.env.AWS_PROFILE
|
|
186
|
+
? awsProfileRegion(process.env.AWS_PROFILE)
|
|
187
|
+
: awsDefaultProfileRegion()) ??
|
|
188
|
+
"us-east-2";
|
|
189
|
+
process.env.AWS_REGION = region;
|
|
190
|
+
logInfo(`AWS region: ${region} (auto)`);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
11
193
|
/**
|
|
12
194
|
* Service definitions with their local ports and display names
|
|
13
195
|
*/
|
|
@@ -114,6 +296,7 @@ async function listServices(options) {
|
|
|
114
296
|
console.log(" mesh tunnel dev # All dev services");
|
|
115
297
|
console.log(" mesh tunnel --services temporal # Just temporal services");
|
|
116
298
|
console.log(" mesh tunnel --services db # Just database");
|
|
299
|
+
console.log(" mesh tunnel external <name> # Registered external service");
|
|
117
300
|
console.log("");
|
|
118
301
|
}
|
|
119
302
|
/**
|
|
@@ -175,22 +358,142 @@ async function tunnelServices(serviceNames, options) {
|
|
|
175
358
|
})));
|
|
176
359
|
cleanup();
|
|
177
360
|
}
|
|
361
|
+
/**
|
|
362
|
+
* The credential axis (app tenant/stage) the ExternalService secret is keyed
|
|
363
|
+
* on, which is NOT the platform axis that hosts the bastion.
|
|
364
|
+
*
|
|
365
|
+
* Precedence: explicit --app-tenant/--app-stage, then the stage detected from
|
|
366
|
+
* cwd (a tenant-prefixed stack like `scu-dev` maps to platform env `dev`, and
|
|
367
|
+
* the secret is keyed on the former), then the platform tenant/env.
|
|
368
|
+
*/
|
|
369
|
+
export function resolveCredentialAxis(options) {
|
|
370
|
+
return {
|
|
371
|
+
appTenant: options.appTenant ?? options.tenant,
|
|
372
|
+
appStage: options.appStage ?? options.stage ?? options.env,
|
|
373
|
+
};
|
|
374
|
+
}
|
|
375
|
+
function isValidPort(port) {
|
|
376
|
+
return Number.isInteger(port) && port >= 1 && port <= 65535;
|
|
377
|
+
}
|
|
378
|
+
/**
|
|
379
|
+
* Secrets Manager id for an ExternalService's credentials.
|
|
380
|
+
*
|
|
381
|
+
* Mirrors what the primitive builds (ExternalService.ts) and what apps resolve
|
|
382
|
+
* at runtime (libs/secrets): keyed on the APP tenant/stage, with multi-instance
|
|
383
|
+
* (credentials.keyedBy) services storing one secret per instance under the base.
|
|
384
|
+
*/
|
|
385
|
+
export function externalSecretId(appTenant, appStage, name, key) {
|
|
386
|
+
const base = `mesh/${appTenant}/${appStage}/external/${name}`;
|
|
387
|
+
return key ? `${base}/${key}` : base;
|
|
388
|
+
}
|
|
389
|
+
/**
|
|
390
|
+
* Pull the tunnel endpoint out of a credential secret. The local port defaults
|
|
391
|
+
* to the remote port so `localhost:<same-port>` behaves like the real service.
|
|
392
|
+
* Throws with a user-facing message when the secret isn't tunnelable or the
|
|
393
|
+
* `--port` override isn't a valid port number.
|
|
394
|
+
*/
|
|
395
|
+
export function resolveExternalPorts(creds, portOverride) {
|
|
396
|
+
const host = typeof creds.host === "string" ? creds.host.trim() : "";
|
|
397
|
+
const remotePort = Number(creds.port);
|
|
398
|
+
if (!host || !isValidPort(remotePort)) {
|
|
399
|
+
throw new Error("Secret has no usable host/port fields — only host:port externals are tunnelable.");
|
|
400
|
+
}
|
|
401
|
+
if (portOverride === undefined) {
|
|
402
|
+
return { host, remotePort, localPort: remotePort };
|
|
403
|
+
}
|
|
404
|
+
const localPort = Number(portOverride);
|
|
405
|
+
if (!isValidPort(localPort)) {
|
|
406
|
+
throw new Error(`--port must be an integer between 1 and 65535 (got "${portOverride}").`);
|
|
407
|
+
}
|
|
408
|
+
return { host, remotePort, localPort };
|
|
409
|
+
}
|
|
410
|
+
/**
|
|
411
|
+
* Tunnel to a registered external service (ExternalService primitive).
|
|
412
|
+
*
|
|
413
|
+
* The service's credential secret (mesh/{app-tenant}/{app-stage}/external/{name})
|
|
414
|
+
* is the source of truth for host/port — the same values deployed apps resolve
|
|
415
|
+
* at runtime via resolveCredentials() — so anything the platform bastion can
|
|
416
|
+
* reach is tunnelable without a per-service CLI entry.
|
|
417
|
+
*/
|
|
418
|
+
async function tunnelExternal(name, options) {
|
|
419
|
+
const { tenant, env, key } = options;
|
|
420
|
+
// The bastion lives in the platform tenant/env; the credential secret is
|
|
421
|
+
// keyed on the app tenant/stage. Those are different axes (a platform env
|
|
422
|
+
// like `dev-temporal` can host an app at stage `dev`), so they default to
|
|
423
|
+
// each other but stay separately overridable — same as `mesh db …`.
|
|
424
|
+
const { appTenant, appStage } = resolveCredentialAxis(options);
|
|
425
|
+
const secretId = externalSecretId(appTenant, appStage, name, key);
|
|
426
|
+
const setHint = `mesh secrets set external/${name}${key ? ` --key=${key}` : ""}`;
|
|
427
|
+
const sm = new SecretsManagerClient({});
|
|
428
|
+
let creds;
|
|
429
|
+
try {
|
|
430
|
+
const out = await sm.send(new GetSecretValueCommand({ SecretId: secretId }));
|
|
431
|
+
creds = JSON.parse(out.SecretString ?? "{}");
|
|
432
|
+
}
|
|
433
|
+
catch (err) {
|
|
434
|
+
logError(`Could not read ${secretId}: ${err instanceof Error ? err.message : String(err)}`);
|
|
435
|
+
logInfo(`Is the external service registered and seeded? (${setHint})`);
|
|
436
|
+
logInfo(`Credential axis used: app tenant '${appTenant}', app stage '${appStage}' (override with --app-tenant/--app-stage) — ` +
|
|
437
|
+
`zero-flag runs key on the stage detected from the app dir, while explicit -t/-e keys on the platform env.`);
|
|
438
|
+
if (!key) {
|
|
439
|
+
logInfo("Multi-instance externals (credentials.keyedBy) store one secret per instance — pass --key <key>.");
|
|
440
|
+
}
|
|
441
|
+
process.exit(1);
|
|
442
|
+
}
|
|
443
|
+
let host;
|
|
444
|
+
let remotePort;
|
|
445
|
+
let localPort;
|
|
446
|
+
try {
|
|
447
|
+
({ host, remotePort, localPort } = resolveExternalPorts(creds, options.port));
|
|
448
|
+
}
|
|
449
|
+
catch (err) {
|
|
450
|
+
logError(err instanceof Error ? err.message : String(err));
|
|
451
|
+
logInfo(`Secret: ${secretId}`);
|
|
452
|
+
process.exit(1);
|
|
453
|
+
}
|
|
454
|
+
const bastion = await getPlatformBastionInfo(tenant, env);
|
|
455
|
+
console.log("");
|
|
456
|
+
logInfo(`Tenant: ${tenant}, Platform Env: ${env}`);
|
|
457
|
+
if (appTenant !== tenant || appStage !== env) {
|
|
458
|
+
logInfo(`App credentials: tenant=${appTenant}, stage=${appStage}`);
|
|
459
|
+
}
|
|
460
|
+
console.log("");
|
|
461
|
+
console.log(` ${name.padEnd(25)} localhost:${localPort} → ${host}:${remotePort}`);
|
|
462
|
+
console.log("");
|
|
463
|
+
logInfo("Press Ctrl+C to stop the tunnel");
|
|
464
|
+
console.log("");
|
|
465
|
+
const proc = spawnSsmTunnel(bastion.instanceId, { host, port: remotePort }, localPort);
|
|
466
|
+
const cleanup = () => {
|
|
467
|
+
proc.kill();
|
|
468
|
+
process.exit(0);
|
|
469
|
+
};
|
|
470
|
+
process.on("SIGINT", cleanup);
|
|
471
|
+
process.on("SIGTERM", cleanup);
|
|
472
|
+
await new Promise((resolve) => {
|
|
473
|
+
proc.on("exit", () => resolve());
|
|
474
|
+
proc.on("error", () => resolve());
|
|
475
|
+
});
|
|
476
|
+
cleanup();
|
|
477
|
+
}
|
|
178
478
|
/**
|
|
179
479
|
* Register tunnel commands with the CLI
|
|
180
480
|
*/
|
|
181
481
|
export function registerTunnelCommands(program) {
|
|
182
|
-
program
|
|
482
|
+
const tunnel = program
|
|
183
483
|
.command("tunnel")
|
|
184
484
|
.description("Start SSM tunnel to platform services")
|
|
185
|
-
.
|
|
186
|
-
.
|
|
485
|
+
.option("-t, --tenant <tenant>", "Platform tenant (default: detected from Pulumi/SST config in cwd)")
|
|
486
|
+
.option("-e, --env <env>", "Platform environment (default: detected from cwd, else dev)")
|
|
187
487
|
.option("-l, --list", "List available services")
|
|
188
488
|
.option("-s, --services <services>", "Services to tunnel (comma-separated or group name)")
|
|
189
489
|
.option("--db-port <port>", "Custom local port for database (default: 5432)")
|
|
190
490
|
.option("--temporal-ui-port <port>", "Custom local port for Temporal UI (default: 8080)")
|
|
191
491
|
.option("--temporal-frontend-port <port>", "Custom local port for Temporal Frontend (default: 7233)")
|
|
192
492
|
.argument("[group]", "Service group to tunnel (e.g., dev, temporal)")
|
|
193
|
-
.action(async (group,
|
|
493
|
+
.action(async (group, rawOptions) => {
|
|
494
|
+
const { tenant, env, stage } = resolveTenantEnv(rawOptions);
|
|
495
|
+
applyAwsDefaults(tenant, env, stage);
|
|
496
|
+
const options = { ...rawOptions, tenant, env };
|
|
194
497
|
// Handle --list
|
|
195
498
|
if (options.list) {
|
|
196
499
|
await listServices(options);
|
|
@@ -213,5 +516,25 @@ export function registerTunnelCommands(program) {
|
|
|
213
516
|
}
|
|
214
517
|
await tunnelServices(services, options);
|
|
215
518
|
});
|
|
519
|
+
tunnel
|
|
520
|
+
.command("external")
|
|
521
|
+
.description("Tunnel to a registered external service via the platform bastion " +
|
|
522
|
+
"(host/port from mesh/{app-tenant}/{app-stage}/external/{name})")
|
|
523
|
+
.argument("<name>", "External service name (e.g., plaid-db)")
|
|
524
|
+
.option("-t, --tenant <tenant>", "Platform tenant (default: detected from Pulumi/SST config in cwd)")
|
|
525
|
+
.option("-e, --env <env>", "Platform environment (default: detected from cwd, else dev)")
|
|
526
|
+
.option("--app-tenant <tenant>", "Tenant for the external service's credentials (default: --tenant)")
|
|
527
|
+
.option("--app-stage <stage>", "Stage for the external service's credentials (default: --env)")
|
|
528
|
+
.option("-k, --key <key>", "Instance key for a multi-instance external (credentials.keyedBy)")
|
|
529
|
+
.option("-p, --port <port>", "Local port (default: the service's remote port)")
|
|
530
|
+
.action(async (name, _options, command) => {
|
|
531
|
+
// -t/-e are also declared on the parent `tunnel` command, which
|
|
532
|
+
// consumes them wherever they appear — merge both scopes, then fall
|
|
533
|
+
// back to Pulumi/SST context detection.
|
|
534
|
+
const merged = command.optsWithGlobals();
|
|
535
|
+
const { tenant, env, stage } = resolveTenantEnv(merged);
|
|
536
|
+
applyAwsDefaults(tenant, env, stage);
|
|
537
|
+
await tunnelExternal(name, { ...merged, tenant, env, stage });
|
|
538
|
+
});
|
|
216
539
|
}
|
|
217
540
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/commands/tunnel/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/commands/tunnel/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clone.d.ts","sourceRoot":"","sources":["../../../../src/commands/vcs/clone.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+B,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AAE3E,wBAAsB,YAAY,CAChC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,IAAI,EAAE,UAAU,GACf,OAAO,CAAC,IAAI,CAAC,CAsBf"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { execFileAsync, resolveToken } from "./common.js";
|
|
2
|
+
export async function cloneCommand(repo, dest, opts) {
|
|
3
|
+
const baseUrl = (opts.url ?? process.env.VCS_URL)?.replace(/\/$/, "");
|
|
4
|
+
if (!baseUrl)
|
|
5
|
+
throw new Error("clone requires --url or VCS_URL");
|
|
6
|
+
const token = await resolveToken(opts);
|
|
7
|
+
await execFileAsync("git", [
|
|
8
|
+
"clone",
|
|
9
|
+
"-c",
|
|
10
|
+
`http.extraHeader=Authorization: Bearer ${token}`,
|
|
11
|
+
`${baseUrl}/git/${repo}`,
|
|
12
|
+
dest ?? repo,
|
|
13
|
+
]);
|
|
14
|
+
// Persist the auth header for future fetches in THIS clone only.
|
|
15
|
+
// Dev-grade: tokens land in .git/config — revisit with a credential helper
|
|
16
|
+
// once non-dev tokens are routine.
|
|
17
|
+
await execFileAsync("git", ["config", "http.extraHeader", `Authorization: Bearer ${token}`], { cwd: dest ?? repo });
|
|
18
|
+
console.log(`cloned ${repo} → ${dest ?? repo} (read-only remote; use 'mesh vcs propose' to submit changes)`);
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=clone.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clone.js","sourceRoot":"","sources":["../../../../src/commands/vcs/clone.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,YAAY,EAAmB,MAAM,aAAa,CAAC;AAE3E,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,IAAY,EACZ,IAAwB,EACxB,IAAgB;IAEhB,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACtE,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACjE,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,CAAC;IACvC,MAAM,aAAa,CAAC,KAAK,EAAE;QACzB,OAAO;QACP,IAAI;QACJ,0CAA0C,KAAK,EAAE;QACjD,GAAG,OAAO,QAAQ,IAAI,EAAE;QACxB,IAAI,IAAI,IAAI;KACb,CAAC,CAAC;IACH,iEAAiE;IACjE,2EAA2E;IAC3E,mCAAmC;IACnC,MAAM,aAAa,CACjB,KAAK,EACL,CAAC,QAAQ,EAAE,kBAAkB,EAAE,yBAAyB,KAAK,EAAE,CAAC,EAChE,EAAE,GAAG,EAAE,IAAI,IAAI,IAAI,EAAE,CACtB,CAAC;IACF,OAAO,CAAC,GAAG,CACT,UAAU,IAAI,MAAM,IAAI,IAAI,IAAI,+DAA+D,CAChG,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { execFile } from "node:child_process";
|
|
2
|
+
export declare const execFileAsync: typeof execFile.__promisify__;
|
|
3
|
+
export interface VcsTarget {
|
|
4
|
+
baseUrl: string;
|
|
5
|
+
repo?: string;
|
|
6
|
+
}
|
|
7
|
+
export interface CommonOpts {
|
|
8
|
+
url?: string;
|
|
9
|
+
token?: string;
|
|
10
|
+
context?: string;
|
|
11
|
+
}
|
|
12
|
+
/** https://host/git/<repo> (origin remote) → { baseUrl: https://host, repo }. */
|
|
13
|
+
export declare function parseRemote(remoteUrl: string): VcsTarget | null;
|
|
14
|
+
export declare function resolveTarget(opts: CommonOpts & {
|
|
15
|
+
repo?: string;
|
|
16
|
+
cwd?: string;
|
|
17
|
+
}): Promise<VcsTarget>;
|
|
18
|
+
export declare function resolveToken(opts: CommonOpts): Promise<string>;
|
|
19
|
+
/** Minimal authenticated JSON call against the vcs API. */
|
|
20
|
+
export declare function vcsApi(baseUrl: string, token: string, path: string, method?: string, body?: unknown): Promise<unknown>;
|
|
21
|
+
//# sourceMappingURL=common.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../../../src/commands/vcs/common.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAG9C,eAAO,MAAM,aAAa,+BAAsB,CAAC;AAEjD,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,UAAU;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,iFAAiF;AACjF,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAG/D;AAED,wBAAsB,aAAa,CACjC,IAAI,EAAE,UAAU,GAAG;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GACjD,OAAO,CAAC,SAAS,CAAC,CA0BpB;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAWpE;AAED,2DAA2D;AAC3D,wBAAsB,MAAM,CAC1B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,MAAM,SAAQ,EACd,IAAI,CAAC,EAAE,OAAO,GACb,OAAO,CAAC,OAAO,CAAC,CAgBlB"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { execFile } from "node:child_process";
|
|
2
|
+
import { promisify } from "node:util";
|
|
3
|
+
export const execFileAsync = promisify(execFile);
|
|
4
|
+
/** https://host/git/<repo> (origin remote) → { baseUrl: https://host, repo }. */
|
|
5
|
+
export function parseRemote(remoteUrl) {
|
|
6
|
+
const m = remoteUrl.trim().match(/^(https?:\/\/[^/]+)\/git\/([^/]+?)(?:\.git)?$/);
|
|
7
|
+
return m ? { baseUrl: m[1], repo: m[2] } : null;
|
|
8
|
+
}
|
|
9
|
+
export async function resolveTarget(opts) {
|
|
10
|
+
// An explicit base URL (flag or env) overrides only the BASE URL — it must
|
|
11
|
+
// not suppress origin-derived repo resolution. Commands like `propose` carry
|
|
12
|
+
// no repo argument and rely on the clone's origin remote; returning early
|
|
13
|
+
// here with `repo: undefined` (the prior behaviour) broke them whenever
|
|
14
|
+
// VCS_URL/--url was set. So resolve the repo independently: explicit repo →
|
|
15
|
+
// origin-derived → undefined.
|
|
16
|
+
const explicitBase = opts.url ?? process.env.VCS_URL;
|
|
17
|
+
let originTarget = null;
|
|
18
|
+
try {
|
|
19
|
+
const { stdout } = await execFileAsync("git", ["remote", "get-url", "origin"], {
|
|
20
|
+
cwd: opts.cwd ?? process.cwd(),
|
|
21
|
+
});
|
|
22
|
+
originTarget = parseRemote(stdout);
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
// not in a clone
|
|
26
|
+
}
|
|
27
|
+
const baseUrl = (explicitBase ?? originTarget?.baseUrl)?.replace(/\/$/, "");
|
|
28
|
+
if (!baseUrl) {
|
|
29
|
+
throw new Error("vcs service URL not found: pass --url, set VCS_URL, or run inside a vcs clone");
|
|
30
|
+
}
|
|
31
|
+
return { baseUrl, repo: opts.repo ?? originTarget?.repo };
|
|
32
|
+
}
|
|
33
|
+
export async function resolveToken(opts) {
|
|
34
|
+
if (opts.token)
|
|
35
|
+
return opts.token;
|
|
36
|
+
if (process.env.VCS_TOKEN)
|
|
37
|
+
return process.env.VCS_TOKEN;
|
|
38
|
+
if (opts.context) {
|
|
39
|
+
const { getValidToken } = await import("../login.js");
|
|
40
|
+
const token = await getValidToken(opts.context);
|
|
41
|
+
if (token)
|
|
42
|
+
return token;
|
|
43
|
+
}
|
|
44
|
+
throw new Error("no token: pass --token, set VCS_TOKEN, or pass --context <platform-context> (after mesh login)");
|
|
45
|
+
}
|
|
46
|
+
/** Minimal authenticated JSON call against the vcs API. */
|
|
47
|
+
export async function vcsApi(baseUrl, token, path, method = "GET", body) {
|
|
48
|
+
const res = await fetch(`${baseUrl}${path}`, {
|
|
49
|
+
method,
|
|
50
|
+
headers: {
|
|
51
|
+
authorization: `Bearer ${token}`,
|
|
52
|
+
...(body !== undefined ? { "content-type": "application/json" } : {}),
|
|
53
|
+
},
|
|
54
|
+
...(body !== undefined ? { body: JSON.stringify(body) } : {}),
|
|
55
|
+
});
|
|
56
|
+
const data = (await res.json().catch(() => ({})));
|
|
57
|
+
if (!res.ok) {
|
|
58
|
+
throw new Error(`${method} ${path} failed (${res.status}): ${String(data.error ?? "unknown error")}`);
|
|
59
|
+
}
|
|
60
|
+
return data;
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=common.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../../../src/commands/vcs/common.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type CommonOpts } from "./common.js";
|
|
2
|
+
export declare function draftsListCommand(repo: string, opts: CommonOpts & {
|
|
3
|
+
all?: boolean;
|
|
4
|
+
}): Promise<void>;
|
|
5
|
+
export declare function draftsShowCommand(repo: string, draftId: string, opts: CommonOpts): Promise<void>;
|
|
6
|
+
export declare function draftsCreateCommand(repo: string, opts: CommonOpts & {
|
|
7
|
+
title?: string;
|
|
8
|
+
}): Promise<void>;
|
|
9
|
+
export declare function draftsSubmitCommand(repo: string, draftId: string, opts: CommonOpts & {
|
|
10
|
+
note?: string;
|
|
11
|
+
}): Promise<void>;
|
|
12
|
+
export declare function draftsDiscardCommand(repo: string, draftId: string, opts: CommonOpts): Promise<void>;
|
|
13
|
+
//# sourceMappingURL=drafts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drafts.d.ts","sourceRoot":"","sources":["../../../../src/commands/vcs/drafts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuC,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AAcnF,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,UAAU,GAAG;IAAE,GAAG,CAAC,EAAE,OAAO,CAAA;CAAE,GACnC,OAAO,CAAC,IAAI,CAAC,CAYf;AAED,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,UAAU,GACf,OAAO,CAAC,IAAI,CAAC,CAkBf;AAED,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,UAAU,GAAG;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GACpC,OAAO,CAAC,IAAI,CAAC,CAKf;AAED,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,UAAU,GAAG;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GACnC,OAAO,CAAC,IAAI,CAAC,CASf;AAED,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,UAAU,GACf,OAAO,CAAC,IAAI,CAAC,CAKf"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { resolveTarget, resolveToken, vcsApi } from "./common.js";
|
|
2
|
+
async function call(opts, repo, path, method = "GET", body) {
|
|
3
|
+
const target = await resolveTarget({ ...opts, repo });
|
|
4
|
+
const token = await resolveToken(opts);
|
|
5
|
+
return vcsApi(target.baseUrl, token, `/v1/repos/${repo}${path}`, method, body);
|
|
6
|
+
}
|
|
7
|
+
export async function draftsListCommand(repo, opts) {
|
|
8
|
+
const data = (await call(opts, repo, `/drafts${opts.all ? "?all=true" : ""}`));
|
|
9
|
+
const drafts = data.drafts;
|
|
10
|
+
if (drafts.length === 0) {
|
|
11
|
+
console.log("no drafts");
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
for (const d of drafts) {
|
|
15
|
+
console.log(`${d.draftId} [${d.state}] ${d.title} (updated ${d.updatedAt})`);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
export async function draftsShowCommand(repo, draftId, opts) {
|
|
19
|
+
const d = (await call(opts, repo, `/drafts/${draftId}`));
|
|
20
|
+
console.log(`${d.draftId} [${d.state}] ${d.title}`);
|
|
21
|
+
if (d.headSha !== undefined) {
|
|
22
|
+
console.log(`head: ${d.headSha}`);
|
|
23
|
+
}
|
|
24
|
+
if (d.mergeable === false) {
|
|
25
|
+
console.log("⚠ the page changed while this draft was being edited");
|
|
26
|
+
}
|
|
27
|
+
if (d.changedFiles) {
|
|
28
|
+
for (const f of d.changedFiles) {
|
|
29
|
+
console.log(` ${f.status} ${f.path}`);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
export async function draftsCreateCommand(repo, opts) {
|
|
34
|
+
const d = (await call(opts, repo, "/drafts", "POST", opts.title ? { title: opts.title } : {}));
|
|
35
|
+
console.log(`draft ${d.draftId} created — submit with: mesh vcs drafts submit ${repo} ${d.draftId}`);
|
|
36
|
+
}
|
|
37
|
+
export async function draftsSubmitCommand(repo, draftId, opts) {
|
|
38
|
+
const d = (await call(opts, repo, `/drafts/${draftId}/submit`, "POST", opts.note ? { note: opts.note } : {}));
|
|
39
|
+
console.log(`draft ${d.draftId} submitted for review [${d.state}]`);
|
|
40
|
+
}
|
|
41
|
+
export async function draftsDiscardCommand(repo, draftId, opts) {
|
|
42
|
+
const d = (await call(opts, repo, `/drafts/${draftId}/discard`, "POST", {}));
|
|
43
|
+
console.log(`draft ${d.draftId} discarded`);
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=drafts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drafts.js","sourceRoot":"","sources":["../../../../src/commands/vcs/drafts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type CommonOpts } from "./common.js";
|
|
2
|
+
interface GetOpts extends CommonOpts {
|
|
3
|
+
target?: string;
|
|
4
|
+
output?: string;
|
|
5
|
+
}
|
|
6
|
+
export declare function getCommand(repo: string, path: string, opts: GetOpts): Promise<void>;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=get.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../../../src/commands/vcs/get.ts"],"names":[],"mappings":"AAeA,OAAO,EAAgB,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AAG5D,UAAU,OAAQ,SAAQ,UAAU;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAuCzF"}
|