@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
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* App-tenant auth auto-provisioning for the local platform — the local analog
|
|
3
|
+
* of what the Pulumi components do in the cloud, per the approved Zitadel
|
|
4
|
+
* tenant-auth pattern (Org / Project / Application / Service User):
|
|
5
|
+
*
|
|
6
|
+
* Org = app tenant (ZitadelTenantIdentity parity)
|
|
7
|
+
* Project = one per app, (ZitadelAppIdentity parity —
|
|
8
|
+
* name = authz schema namespace the app IS the authz boundary)
|
|
9
|
+
* Application = one per service inside it (API app, Basic creds)
|
|
10
|
+
* Secret = mesh/{tenant}/{env}/apps/{app}/zitadel/{service}
|
|
11
|
+
* (ministack Secrets Manager — same canonical path as cloud)
|
|
12
|
+
*
|
|
13
|
+
* `mesh dev --local` calls this on startup so scaffolding + running an app
|
|
14
|
+
* auto-creates its auth config — no Pulumi deploy, no manual Zitadel steps.
|
|
15
|
+
* Idempotent: search-before-create everywhere; the credential secret is only
|
|
16
|
+
* written when the application is first created (Zitadel returns the secret
|
|
17
|
+
* once).
|
|
18
|
+
*/
|
|
19
|
+
import { logInfo, logSuccess } from "../../utils/log.js";
|
|
20
|
+
import { LOCAL_ENV, LOCAL_AWS_CONFIG, registerTenantEnv } from "./seed.js";
|
|
21
|
+
import { api, readSeederPat, PLATFORM_ORG, ensureZitadelProject, searchZitadelApp } from "./seed-zitadel.js";
|
|
22
|
+
import { upsertLocalSecret } from "./helpers.js";
|
|
23
|
+
export function authSecretPath(tenant, app, service) {
|
|
24
|
+
return `mesh/${tenant}/${LOCAL_ENV}/apps/${app}/zitadel/${service}`;
|
|
25
|
+
}
|
|
26
|
+
async function ensureOrg(pat, name) {
|
|
27
|
+
const search = await api(pat, "POST", "/admin/v1/orgs/_search", {
|
|
28
|
+
queries: [{ nameQuery: { name, method: "TEXT_QUERY_METHOD_EQUALS" } }],
|
|
29
|
+
});
|
|
30
|
+
const existing = search?.result?.[0]?.id;
|
|
31
|
+
if (existing)
|
|
32
|
+
return existing;
|
|
33
|
+
const created = await api(pat, "POST", "/v2/organizations", { name });
|
|
34
|
+
logSuccess(`Created Zitadel org '${name}' (app tenant)`);
|
|
35
|
+
return created.organizationId;
|
|
36
|
+
}
|
|
37
|
+
const ensureProject = (pat, orgId, name) => ensureZitadelProject(pat, name, { orgId, describe: "app" });
|
|
38
|
+
/** Ensure the service's API application exists; returns fresh credentials
|
|
39
|
+
* when it was created this run. */
|
|
40
|
+
async function ensureServiceApp(pat, orgId, projectId, service) {
|
|
41
|
+
const existing = await searchZitadelApp(pat, projectId, service, orgId);
|
|
42
|
+
if (existing) {
|
|
43
|
+
return { created: false, appId: existing.id, clientId: existing?.apiConfig?.clientId };
|
|
44
|
+
}
|
|
45
|
+
const created = await api(pat, "POST", `/management/v1/projects/${projectId}/apps/api`, { name: service, authMethodType: "API_AUTH_METHOD_TYPE_BASIC" }, orgId);
|
|
46
|
+
logSuccess(`Created Zitadel application '${service}' (service)`);
|
|
47
|
+
return { created: true, clientId: created.clientId, clientSecret: created.clientSecret };
|
|
48
|
+
}
|
|
49
|
+
/** Ensure the app-declared project roles exist (idempotent). */
|
|
50
|
+
async function ensureProjectRoles(pat, orgId, projectId, roles) {
|
|
51
|
+
if (roles.length === 0)
|
|
52
|
+
return;
|
|
53
|
+
const existing = await api(pat, "POST", `/management/v1/projects/${projectId}/roles/_search`, {}, orgId);
|
|
54
|
+
const have = new Set((existing?.result ?? []).map((r) => r.key));
|
|
55
|
+
for (const key of roles) {
|
|
56
|
+
if (have.has(key))
|
|
57
|
+
continue;
|
|
58
|
+
await api(pat, "POST", `/management/v1/projects/${projectId}/roles`, { roleKey: key, displayName: key }, orgId);
|
|
59
|
+
logSuccess(`Created project role '${key}'`);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Ensure the app's LOCAL M2M caller: a machine user (`{app}-m2m`) with a
|
|
64
|
+
* client-credentials secret, granted the app project (+ declared roles).
|
|
65
|
+
* API applications are resource servers — they cannot obtain tokens — so
|
|
66
|
+
* without this there is no way to mint a caller token against the local
|
|
67
|
+
* Zitadel at all. Secret stored at mesh/{tenant}/dev/apps/{app}/zitadel/m2m.
|
|
68
|
+
*/
|
|
69
|
+
async function ensureM2mCaller(pat, tenant, app, orgId, projectId, roles) {
|
|
70
|
+
const userName = `${app}-m2m`;
|
|
71
|
+
const search = await api(pat, "POST", "/management/v1/users/_search", { queries: [{ userNameQuery: { userName, method: "TEXT_QUERY_METHOD_EQUALS" } }] }, orgId);
|
|
72
|
+
let userId = search?.result?.[0]?.id;
|
|
73
|
+
let createdUser = false;
|
|
74
|
+
if (!userId) {
|
|
75
|
+
const created = await api(pat, "POST", "/management/v1/users/machine", { userName, name: `${app} local M2M caller`, accessTokenType: "ACCESS_TOKEN_TYPE_BEARER" }, orgId);
|
|
76
|
+
userId = created.userId;
|
|
77
|
+
createdUser = true;
|
|
78
|
+
logSuccess(`Created machine user '${userName}' (local M2M caller)`);
|
|
79
|
+
}
|
|
80
|
+
// Grant the project (+ declared roles); on re-runs update the existing
|
|
81
|
+
// grant so newly-declared roles apply.
|
|
82
|
+
try {
|
|
83
|
+
await api(pat, "POST", `/management/v1/users/${userId}/grants`, { projectId, roleKeys: roles }, orgId);
|
|
84
|
+
}
|
|
85
|
+
catch (err) {
|
|
86
|
+
const e = err;
|
|
87
|
+
if (e.status !== 409 && !/already exists/i.test(String(e.message)))
|
|
88
|
+
throw err;
|
|
89
|
+
const grants = await api(pat, "POST", "/management/v1/users/grants/_search", { queries: [{ userIdQuery: { userId } }, { projectIdQuery: { projectId } }] }, orgId);
|
|
90
|
+
const grantId = grants?.result?.[0]?.id;
|
|
91
|
+
if (grantId && roles.length > 0) {
|
|
92
|
+
try {
|
|
93
|
+
await api(pat, "PUT", `/management/v1/users/${userId}/grants/${grantId}`, { roleKeys: roles }, orgId);
|
|
94
|
+
}
|
|
95
|
+
catch (updateErr) {
|
|
96
|
+
// Zitadel 400s a no-op update ("User grant has not been changed",
|
|
97
|
+
// COMMAND-Rs8fy) — the grant already carries the declared roles.
|
|
98
|
+
// Anything else is real. Must not throw here: aborting mid-provision
|
|
99
|
+
// skips the secret (re-)mint below and leaves callers without creds.
|
|
100
|
+
const ue = updateErr;
|
|
101
|
+
if (!/has not been changed/i.test(String(ue.message)))
|
|
102
|
+
throw updateErr;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
if (createdUser || !(await authSecretExists(tenant, app, "m2m"))) {
|
|
107
|
+
const secret = await api(pat, "PUT", `/management/v1/users/${userId}/secret`, {}, orgId);
|
|
108
|
+
await writeAuthSecret(tenant, app, "m2m", {
|
|
109
|
+
clientId: secret.clientId,
|
|
110
|
+
clientSecret: secret.clientSecret,
|
|
111
|
+
issuer: "http://localhost:8080",
|
|
112
|
+
orgId,
|
|
113
|
+
projectId,
|
|
114
|
+
});
|
|
115
|
+
return true;
|
|
116
|
+
}
|
|
117
|
+
return false;
|
|
118
|
+
}
|
|
119
|
+
async function authSecretExists(tenant, app, service) {
|
|
120
|
+
const { SecretsManagerClient, GetSecretValueCommand } = await import("@aws-sdk/client-secrets-manager");
|
|
121
|
+
const sm = new SecretsManagerClient(LOCAL_AWS_CONFIG);
|
|
122
|
+
return sm.send(new GetSecretValueCommand({ SecretId: authSecretPath(tenant, app, service) })).then(() => true, () => false);
|
|
123
|
+
}
|
|
124
|
+
async function writeAuthSecret(tenant, app, service, value) {
|
|
125
|
+
const name = authSecretPath(tenant, app, service);
|
|
126
|
+
await upsertLocalSecret(name, value);
|
|
127
|
+
logSuccess(`Stored service credentials → ${name}`);
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Register the running app in the local platform registry — the same
|
|
131
|
+
* self-registration path deployed apps use (/mesh-platform/{tenant}/{env}/
|
|
132
|
+
* apps/{app}/meta), so StackPort (and the local Hub once its images land)
|
|
133
|
+
* can visualize local apps.
|
|
134
|
+
*/
|
|
135
|
+
export async function registerLocalApp(args) {
|
|
136
|
+
const { SSMClient, PutParameterCommand } = await import("@aws-sdk/client-ssm");
|
|
137
|
+
const ssm = new SSMClient(LOCAL_AWS_CONFIG);
|
|
138
|
+
const put = (name, value, description) => ssm.send(new PutParameterCommand({ Name: name, Type: "String", Overwrite: true, Value: JSON.stringify(value), Description: description }));
|
|
139
|
+
// The app's tenant + env must be registered for the Hub to list the app.
|
|
140
|
+
await registerTenantEnv(args.tenant);
|
|
141
|
+
// Per-stack registration in the exact shape hub-api's SSM assembler reads
|
|
142
|
+
// (stack "local" = the mesh dev --local runtime).
|
|
143
|
+
const namespace = `${args.tenant}-${LOCAL_ENV}-${args.app}`;
|
|
144
|
+
const base = `/mesh-platform/${args.tenant}/${LOCAL_ENV}/apps/${args.app}/stacks/local`;
|
|
145
|
+
await put(base, {
|
|
146
|
+
name: args.app,
|
|
147
|
+
tenant: args.tenant,
|
|
148
|
+
stack: "local",
|
|
149
|
+
namespace,
|
|
150
|
+
platform: { name: "local", env: LOCAL_ENV },
|
|
151
|
+
}, `Local app registration for ${args.tenant}/${args.app} (mesh dev --local)`);
|
|
152
|
+
for (const service of args.services) {
|
|
153
|
+
const port = args.ports?.[service];
|
|
154
|
+
const isMock = service.startsWith("mock-");
|
|
155
|
+
await put(`${base}/services/${service}`, {
|
|
156
|
+
...(port ? { url: `http://localhost:${port}`, port } : {}),
|
|
157
|
+
replicas: 1,
|
|
158
|
+
tier: "core",
|
|
159
|
+
...(!isMock && args.links?.length ? { links: args.links } : {}),
|
|
160
|
+
}, `Local service registration (${service})`);
|
|
161
|
+
}
|
|
162
|
+
// Worker registration — the shape deployed TemporalWorker components
|
|
163
|
+
// write; hub-api discovers a tenant's Temporal namespaces from these, so
|
|
164
|
+
// the tenant-wide workflows view finds local runs without an explicit
|
|
165
|
+
// namespace filter. Template convention: worker services are named so.
|
|
166
|
+
for (const service of args.services) {
|
|
167
|
+
if (!/worker/i.test(service))
|
|
168
|
+
continue;
|
|
169
|
+
await put(`${base}/workers/${service}`, { temporalNamespace: namespace, taskQueue: args.app }, `Local worker registration (${service})`);
|
|
170
|
+
}
|
|
171
|
+
await put(`${base}/meta`, { runtime: "mesh-dev-local", services: args.services, ports: args.ports ?? {} }, "Local run metadata (mesh dev --local)");
|
|
172
|
+
logSuccess(`Registered app in the local registry → ${base}`);
|
|
173
|
+
return base;
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Reconcile the platform registry from Zitadel — every app-tenant org (and
|
|
177
|
+
* its projects = apps, applications = services) provisioned in Zitadel gets
|
|
178
|
+
* a Hub-readable registration, even if the app hasn't been run since it was
|
|
179
|
+
* provisioned. Zitadel is the auth source of truth; the registry mirrors it,
|
|
180
|
+
* exactly like the cloud where ZitadelTenantIdentity/ZitadelAppIdentity and
|
|
181
|
+
* the app's self-registration both flow from the same deploy. Idempotent:
|
|
182
|
+
* existing per-stack registrations (which carry live ports/URLs from
|
|
183
|
+
* `mesh dev --local`) are never overwritten.
|
|
184
|
+
*/
|
|
185
|
+
export async function reconcileRegistryFromZitadel() {
|
|
186
|
+
const pat = readSeederPat();
|
|
187
|
+
const { SSMClient, GetParameterCommand, PutParameterCommand } = await import("@aws-sdk/client-ssm");
|
|
188
|
+
const ssm = new SSMClient(LOCAL_AWS_CONFIG);
|
|
189
|
+
const orgs = await api(pat, "POST", "/admin/v1/orgs/_search", { query: { limit: 200 } });
|
|
190
|
+
const tenants = [];
|
|
191
|
+
let apps = 0;
|
|
192
|
+
for (const org of orgs?.result ?? []) {
|
|
193
|
+
const tenant = org?.name;
|
|
194
|
+
// The platform org holds platform-service auth config, not an app tenant.
|
|
195
|
+
if (!tenant || tenant === PLATFORM_ORG)
|
|
196
|
+
continue;
|
|
197
|
+
await registerTenantEnv(tenant);
|
|
198
|
+
tenants.push(tenant);
|
|
199
|
+
const projects = await api(pat, "POST", "/management/v1/projects/_search", { query: { limit: 200 } }, org.id);
|
|
200
|
+
for (const project of projects?.result ?? []) {
|
|
201
|
+
const app = project?.name;
|
|
202
|
+
if (!app)
|
|
203
|
+
continue;
|
|
204
|
+
apps++;
|
|
205
|
+
const base = `/mesh-platform/${tenant}/${LOCAL_ENV}/apps/${app}/stacks/local`;
|
|
206
|
+
const exists = await ssm.send(new GetParameterCommand({ Name: base })).then(() => true, () => false);
|
|
207
|
+
if (exists)
|
|
208
|
+
continue;
|
|
209
|
+
await ssm.send(new PutParameterCommand({
|
|
210
|
+
Name: base,
|
|
211
|
+
Type: "String",
|
|
212
|
+
Overwrite: true,
|
|
213
|
+
Value: JSON.stringify({
|
|
214
|
+
name: app,
|
|
215
|
+
tenant,
|
|
216
|
+
stack: "local",
|
|
217
|
+
namespace: `${tenant}-${LOCAL_ENV}-${app}`,
|
|
218
|
+
platform: { name: "local", env: LOCAL_ENV },
|
|
219
|
+
}),
|
|
220
|
+
Description: `App registration reconciled from Zitadel (${tenant}/${app})`,
|
|
221
|
+
}));
|
|
222
|
+
const applications = await api(pat, "POST", `/management/v1/projects/${project.id}/apps/_search`, { query: { limit: 100 } }, org.id);
|
|
223
|
+
for (const application of applications?.result ?? []) {
|
|
224
|
+
const service = application?.name;
|
|
225
|
+
if (!service)
|
|
226
|
+
continue;
|
|
227
|
+
await ssm.send(new PutParameterCommand({
|
|
228
|
+
Name: `${base}/services/${service}`,
|
|
229
|
+
Type: "String",
|
|
230
|
+
Overwrite: true,
|
|
231
|
+
Value: JSON.stringify({ replicas: 1, tier: "core" }),
|
|
232
|
+
Description: `Service registration reconciled from Zitadel (${service})`,
|
|
233
|
+
}));
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
return { tenants, apps };
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Ensure the app tenant's full auth config exists (org → project →
|
|
241
|
+
* application-per-service → credential secrets).
|
|
242
|
+
*/
|
|
243
|
+
export async function ensureAppTenantAuth(args) {
|
|
244
|
+
const pat = readSeederPat();
|
|
245
|
+
const orgId = await ensureOrg(pat, args.tenant);
|
|
246
|
+
const projectId = await ensureProject(pat, orgId, args.app);
|
|
247
|
+
const roles = args.roles ?? [];
|
|
248
|
+
await ensureProjectRoles(pat, orgId, projectId, roles);
|
|
249
|
+
const created = [];
|
|
250
|
+
for (const service of args.services) {
|
|
251
|
+
const result = await ensureServiceApp(pat, orgId, projectId, service);
|
|
252
|
+
if (result.created) {
|
|
253
|
+
await writeAuthSecret(args.tenant, args.app, service, {
|
|
254
|
+
clientId: result.clientId,
|
|
255
|
+
clientSecret: result.clientSecret,
|
|
256
|
+
issuer: "http://localhost:8080",
|
|
257
|
+
orgId,
|
|
258
|
+
projectId,
|
|
259
|
+
});
|
|
260
|
+
created.push(service);
|
|
261
|
+
}
|
|
262
|
+
else if (!(await authSecretExists(args.tenant, args.app, service))) {
|
|
263
|
+
// Zitadel persists across stack restarts but the local secret store is
|
|
264
|
+
// in-memory — heal the gap by regenerating the application's secret
|
|
265
|
+
// (Zitadel returns it only once, so a lost secret can't be re-read).
|
|
266
|
+
const regenerated = await api(pat, "POST", `/management/v1/projects/${projectId}/apps/${result.appId}/api_config/_generate_client_secret`, {}, orgId);
|
|
267
|
+
await writeAuthSecret(args.tenant, args.app, service, {
|
|
268
|
+
clientId: result.clientId ?? "",
|
|
269
|
+
clientSecret: regenerated.clientSecret,
|
|
270
|
+
issuer: "http://localhost:8080",
|
|
271
|
+
orgId,
|
|
272
|
+
projectId,
|
|
273
|
+
});
|
|
274
|
+
logSuccess(`Regenerated credentials for '${service}' (local secret store was reset)`);
|
|
275
|
+
created.push(service);
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
if (await ensureM2mCaller(pat, args.tenant, args.app, orgId, projectId, roles)) {
|
|
279
|
+
created.push("m2m");
|
|
280
|
+
}
|
|
281
|
+
if (created.length === 0) {
|
|
282
|
+
logInfo(`Auth config for ${args.tenant}/${args.app} already provisioned`);
|
|
283
|
+
}
|
|
284
|
+
return { orgId, projectId, created };
|
|
285
|
+
}
|
|
286
|
+
//# sourceMappingURL=auth-provision.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-provision.js","sourceRoot":"","sources":["../../../../src/commands/local/auth-provision.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Local DevOutput source for `mesh dev` (design §5.2, AC C1/C3).
|
|
3
|
+
*
|
|
4
|
+
* Instead of reading a deployed Pulumi stack, synthesize the same DevOutput
|
|
5
|
+
* shape from repo conventions and point every service at the running
|
|
6
|
+
* `mesh start` platform. Zero AWS credentials, zero VPN, zero Pulumi state —
|
|
7
|
+
* the app's code never knows it's local:
|
|
8
|
+
* - Temporal → localhost:7233, namespace local-dev (seeded)
|
|
9
|
+
* - Postgres → the local `app` database
|
|
10
|
+
* - Zitadel → http://localhost:8080 (seeded org/app/users)
|
|
11
|
+
* - SpiceDB → localhost:50051 (preshared key)
|
|
12
|
+
* - AWS SDK → ministack via AWS_ENDPOINT_URL (SSM/Secrets/S3 registry)
|
|
13
|
+
*
|
|
14
|
+
* Detection convention = what `mesh create-app` templates emit: immediate
|
|
15
|
+
* subdirectories of the app root whose package.json has a `dev` script
|
|
16
|
+
* (api/, worker/, web/, …); a single-package app root with its own `dev`
|
|
17
|
+
* script becomes one service.
|
|
18
|
+
*/
|
|
19
|
+
/** Matches dev.ts's DevEnvVar/DevService/DevOutput shapes (kept structural —
|
|
20
|
+
* dev.ts owns the canonical interfaces). */
|
|
21
|
+
interface LocalDevEnvVar {
|
|
22
|
+
value: string;
|
|
23
|
+
}
|
|
24
|
+
interface LocalDevService {
|
|
25
|
+
src: string;
|
|
26
|
+
port: number;
|
|
27
|
+
command: string[];
|
|
28
|
+
env?: Record<string, LocalDevEnvVar>;
|
|
29
|
+
}
|
|
30
|
+
export interface LocalDevOutput {
|
|
31
|
+
platform: {
|
|
32
|
+
tenant: string;
|
|
33
|
+
env: string;
|
|
34
|
+
};
|
|
35
|
+
app?: string;
|
|
36
|
+
stack: string;
|
|
37
|
+
services: Record<string, LocalDevService>;
|
|
38
|
+
tunnels: Record<string, never>;
|
|
39
|
+
}
|
|
40
|
+
export declare const LOCAL_STACK_NAME = "local";
|
|
41
|
+
/**
|
|
42
|
+
* The app's namespace, exactly the name the cloud gives it in K8s AND
|
|
43
|
+
* Temporal ({tenant}-{env}-{app}) — the Hub resolves both from this one
|
|
44
|
+
* convention, so local runs are addressable with zero translation.
|
|
45
|
+
*/
|
|
46
|
+
export declare function localAppNamespace(tenant: string, appName: string): string;
|
|
47
|
+
/** The OTLP log shipper (assets/log-shipper.mjs) each local service's
|
|
48
|
+
* launch pipeline pipes through — ships stdout to the stack's collector
|
|
49
|
+
* with the hosted k8s_* attribution. */
|
|
50
|
+
export declare function logShipperPath(): string;
|
|
51
|
+
/**
|
|
52
|
+
* OTel SDK bootstrap — the local analog of the OTel Operator's pod
|
|
53
|
+
* injection: when the service ships `@opentelemetry/auto-instrumentations-
|
|
54
|
+
* node` (the templates declare it), the platform injects the `--import`
|
|
55
|
+
* register hook + exporter env, and HTTP/fetch/gRPC spans flow to the
|
|
56
|
+
* stack's collector → Tempo → the Hub's Traces views. Apps without the
|
|
57
|
+
* package run untouched.
|
|
58
|
+
*/
|
|
59
|
+
export declare function autoInstrumentationEnv(appRoot: string, src: string): Record<string, LocalDevEnvVar>;
|
|
60
|
+
/** Hosted-parity resource attribution for a local service — what the
|
|
61
|
+
* in-cluster k8sattributes processor stamps. */
|
|
62
|
+
export declare function otelEnv(tenant: string, appName: string, serviceName: string): Record<string, LocalDevEnvVar>;
|
|
63
|
+
/** Endpoints of the running `mesh start` platform, as service env. */
|
|
64
|
+
export declare function localPlatformEnv(tenant: string, appName: string, serviceName: string): Record<string, LocalDevEnvVar>;
|
|
65
|
+
/**
|
|
66
|
+
* Detect runnable services by template convention: immediate subdirectories
|
|
67
|
+
* with a package.json `dev` script; falls back to the app root itself when
|
|
68
|
+
* it is a single-package app.
|
|
69
|
+
*/
|
|
70
|
+
export declare function detectLocalServices(appRoot: string): Record<string, {
|
|
71
|
+
src: string;
|
|
72
|
+
}>;
|
|
73
|
+
/** Synthesize the DevOutput `mesh dev` would otherwise read from Pulumi.
|
|
74
|
+
* `tenant` is the app tenant (detectLocalTenant) — it scopes the app's
|
|
75
|
+
* namespace ({tenant}-{env}-{app}) for Temporal, logs, and traces.
|
|
76
|
+
* `opts.mocks` (mesh dev --externals) appends declared mock services and injects
|
|
77
|
+
* their ExternalService credential prefixes into every app service. */
|
|
78
|
+
export declare function buildLocalDevOutput(appRoot: string, tenant: string, opts?: {
|
|
79
|
+
mocks?: Record<string, import("./mocks.js").LocalMockDecl>;
|
|
80
|
+
}): LocalDevOutput;
|
|
81
|
+
/**
|
|
82
|
+
* Whether the app is backed by a Pulumi program: its own (Pulumi.yaml or a
|
|
83
|
+
* Pulumi.<stack>.yaml stack config in the app dir), or a monorepo ROOT
|
|
84
|
+
* program above it (walk up to the repo boundary — .git/pnpm-workspace).
|
|
85
|
+
* Apps like apps/hub deploy via a root program and have no per-app
|
|
86
|
+
* Pulumi.yaml; they must NOT default into `mesh dev` local mode.
|
|
87
|
+
*/
|
|
88
|
+
export declare function hasStackBacking(appRoot: string): boolean;
|
|
89
|
+
/**
|
|
90
|
+
* The app's tenant, for auth provisioning: `mesh:tenant` from the app's
|
|
91
|
+
* Pulumi stack config when present (templates write it), else "local".
|
|
92
|
+
*/
|
|
93
|
+
export declare function detectLocalTenant(appRoot: string): string;
|
|
94
|
+
/** The local platform must be up before `mesh dev` can wire services to it. */
|
|
95
|
+
export declare function ensureLocalPlatformRunning(): Promise<void>;
|
|
96
|
+
export {};
|
|
97
|
+
//# sourceMappingURL=dev-local.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dev-local.d.ts","sourceRoot":"","sources":["../../../../src/commands/local/dev-local.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAcH;4CAC4C;AAC5C,UAAU,cAAc;IACtB,KAAK,EAAE,MAAM,CAAC;CACf;AACD,UAAU,eAAe;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;CACtC;AACD,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1C,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAC1C,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;CAChC;AAED,eAAO,MAAM,gBAAgB,UAAU,CAAC;AAGxC;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAEzE;AAED;;wCAEwC;AACxC,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAcnG;AAED;gDACgD;AAChD,wBAAgB,OAAO,CACrB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,GAClB,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAShC;AAED,sEAAsE;AACtE,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,GAClB,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAmChC;AAaD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,CAYpF;AAED;;;;uEAIuE;AACvE,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,IAAI,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,YAAY,EAAE,aAAa,CAAC,CAAA;CAAO,GACxE,cAAc,CA6GhB;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAexD;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CASzD;AAED,+EAA+E;AAC/E,wBAAsB,0BAA0B,IAAI,OAAO,CAAC,IAAI,CAAC,CAQhE"}
|