@noodleseed/one 0.58.0 → 0.60.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/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +72 -7
- package/dist/cli.js.map +1 -1
- package/dist/commands/alerts-ops.d.ts +2 -1
- package/dist/commands/alerts-ops.d.ts.map +1 -1
- package/dist/commands/alerts-ops.js.map +1 -1
- package/dist/commands/analytics-ops.d.ts +4 -3
- package/dist/commands/analytics-ops.d.ts.map +1 -1
- package/dist/commands/analytics-ops.js.map +1 -1
- package/dist/commands/apps-ops.d.ts +5 -4
- package/dist/commands/apps-ops.d.ts.map +1 -1
- package/dist/commands/apps-ops.js.map +1 -1
- package/dist/commands/archive-ops.d.ts +3 -2
- package/dist/commands/archive-ops.d.ts.map +1 -1
- package/dist/commands/archive-ops.js.map +1 -1
- package/dist/commands/assistant-embed-ops.d.ts +9 -1
- package/dist/commands/assistant-embed-ops.d.ts.map +1 -1
- package/dist/commands/assistant-embed-ops.js.map +1 -1
- package/dist/commands/assistant-ops.d.ts +2 -1
- package/dist/commands/assistant-ops.d.ts.map +1 -1
- package/dist/commands/assistant-ops.js +3 -2
- package/dist/commands/assistant-ops.js.map +1 -1
- package/dist/commands/audit-ops.d.ts +2 -1
- package/dist/commands/audit-ops.d.ts.map +1 -1
- package/dist/commands/audit-ops.js.map +1 -1
- package/dist/commands/auth-ops.d.ts +2 -1
- package/dist/commands/auth-ops.d.ts.map +1 -1
- package/dist/commands/auth-ops.js.map +1 -1
- package/dist/commands/author-loop.d.ts +4 -3
- package/dist/commands/author-loop.d.ts.map +1 -1
- package/dist/commands/author-loop.js.map +1 -1
- package/dist/commands/billing-apply-ops.d.ts +2 -1
- package/dist/commands/billing-apply-ops.d.ts.map +1 -1
- package/dist/commands/billing-apply-ops.js.map +1 -1
- package/dist/commands/billing-enforcement-activation-ops.d.ts +2 -1
- package/dist/commands/billing-enforcement-activation-ops.d.ts.map +1 -1
- package/dist/commands/billing-enforcement-activation-ops.js.map +1 -1
- package/dist/commands/billing-enforcement-ops.d.ts +2 -1
- package/dist/commands/billing-enforcement-ops.d.ts.map +1 -1
- package/dist/commands/billing-enforcement-ops.js.map +1 -1
- package/dist/commands/billing-metering-ops.d.ts +2 -1
- package/dist/commands/billing-metering-ops.d.ts.map +1 -1
- package/dist/commands/billing-metering-ops.js.map +1 -1
- package/dist/commands/billing-metering-validation-ops.d.ts +2 -1
- package/dist/commands/billing-metering-validation-ops.d.ts.map +1 -1
- package/dist/commands/billing-metering-validation-ops.js.map +1 -1
- package/dist/commands/billing-ops.d.ts +2 -1
- package/dist/commands/billing-ops.d.ts.map +1 -1
- package/dist/commands/billing-ops.js.map +1 -1
- package/dist/commands/billing-read-ops.d.ts +3 -2
- package/dist/commands/billing-read-ops.d.ts.map +1 -1
- package/dist/commands/billing-read-ops.js.map +1 -1
- package/dist/commands/billing-stripe-ops.d.ts +2 -1
- package/dist/commands/billing-stripe-ops.d.ts.map +1 -1
- package/dist/commands/billing-stripe-ops.js +1 -0
- package/dist/commands/billing-stripe-ops.js.map +1 -1
- package/dist/commands/config-values.d.ts +2 -1
- package/dist/commands/config-values.d.ts.map +1 -1
- package/dist/commands/config-values.js.map +1 -1
- package/dist/commands/deploy-github-hint.d.ts +6 -0
- package/dist/commands/deploy-github-hint.d.ts.map +1 -0
- package/dist/commands/deploy-github-hint.js +53 -0
- package/dist/commands/deploy-github-hint.js.map +1 -0
- package/dist/commands/deploy-ops.d.ts +5 -7
- package/dist/commands/deploy-ops.d.ts.map +1 -1
- package/dist/commands/deploy-ops.js +14 -54
- package/dist/commands/deploy-ops.js.map +1 -1
- package/dist/commands/deploy-status-ops.d.ts +5 -3
- package/dist/commands/deploy-status-ops.d.ts.map +1 -1
- package/dist/commands/deploy-status-ops.js +9 -1
- package/dist/commands/deploy-status-ops.js.map +1 -1
- package/dist/commands/deploy-target.d.ts +2 -1
- package/dist/commands/deploy-target.d.ts.map +1 -1
- package/dist/commands/deploy-target.js.map +1 -1
- package/dist/commands/deployments-ops.d.ts +5 -4
- package/dist/commands/deployments-ops.d.ts.map +1 -1
- package/dist/commands/deployments-ops.js.map +1 -1
- package/dist/commands/devtools.d.ts +2 -1
- package/dist/commands/devtools.d.ts.map +1 -1
- package/dist/commands/devtools.js.map +1 -1
- package/dist/commands/diagnostics-ops.d.ts +3 -2
- package/dist/commands/diagnostics-ops.d.ts.map +1 -1
- package/dist/commands/diagnostics-ops.js.map +1 -1
- package/dist/commands/envs-ops.d.ts +4 -3
- package/dist/commands/envs-ops.d.ts.map +1 -1
- package/dist/commands/envs-ops.js.map +1 -1
- package/dist/commands/feedback-ops.d.ts +2 -1
- package/dist/commands/feedback-ops.d.ts.map +1 -1
- package/dist/commands/feedback-ops.js.map +1 -1
- package/dist/commands/github-ops.d.ts +5 -4
- package/dist/commands/github-ops.d.ts.map +1 -1
- package/dist/commands/github-ops.js.map +1 -1
- package/dist/commands/github-runs-ops.d.ts +2 -1
- package/dist/commands/github-runs-ops.d.ts.map +1 -1
- package/dist/commands/github-runs-ops.js.map +1 -1
- package/dist/commands/github-shared.d.ts +2 -1
- package/dist/commands/github-shared.d.ts.map +1 -1
- package/dist/commands/github-shared.js.map +1 -1
- package/dist/commands/logs-ops.d.ts +2 -1
- package/dist/commands/logs-ops.d.ts.map +1 -1
- package/dist/commands/logs-ops.js.map +1 -1
- package/dist/commands/org-admin.d.ts +3 -2
- package/dist/commands/org-admin.d.ts.map +1 -1
- package/dist/commands/org-admin.js.map +1 -1
- package/dist/commands/org-openai-challenge.d.ts +2 -1
- package/dist/commands/org-openai-challenge.d.ts.map +1 -1
- package/dist/commands/org-openai-challenge.js.map +1 -1
- package/dist/commands/policy-ops.d.ts +2 -1
- package/dist/commands/policy-ops.d.ts.map +1 -1
- package/dist/commands/policy-ops.js.map +1 -1
- package/dist/commands/resource-shared.d.ts +2 -1
- package/dist/commands/resource-shared.d.ts.map +1 -1
- package/dist/commands/resource-shared.js.map +1 -1
- package/dist/commands/service-ops.d.ts +2 -1
- package/dist/commands/service-ops.d.ts.map +1 -1
- package/dist/commands/service-ops.js.map +1 -1
- package/dist/commands/session.d.ts +12 -4
- package/dist/commands/session.d.ts.map +1 -1
- package/dist/commands/session.js +40 -9
- package/dist/commands/session.js.map +1 -1
- package/dist/commands/shared.d.ts +2 -1
- package/dist/commands/shared.d.ts.map +1 -1
- package/dist/commands/shared.js.map +1 -1
- package/dist/config.d.ts +17 -8
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +2 -2
- package/dist/config.js.map +1 -1
- package/dist/control-plane.d.ts +10 -3
- package/dist/control-plane.d.ts.map +1 -1
- package/dist/control-plane.js +38 -2
- package/dist/control-plane.js.map +1 -1
- package/dist/doctor.d.ts +2 -1
- package/dist/doctor.d.ts.map +1 -1
- package/dist/doctor.js.map +1 -1
- package/dist/first-run-entry.d.ts +2 -1
- package/dist/first-run-entry.d.ts.map +1 -1
- package/dist/first-run-entry.js.map +1 -1
- package/dist/first-run.d.ts +2 -1
- package/dist/first-run.d.ts.map +1 -1
- package/dist/first-run.js.map +1 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/local-target.d.ts +2 -1
- package/dist/local-target.d.ts.map +1 -1
- package/dist/local-target.js.map +1 -1
- package/dist/plugin-mode/build-readiness-contract.d.ts +36 -0
- package/dist/plugin-mode/build-readiness-contract.d.ts.map +1 -0
- package/dist/plugin-mode/build-readiness-contract.js +107 -0
- package/dist/plugin-mode/build-readiness-contract.js.map +1 -0
- package/dist/plugin-mode/build-readiness-fingerprint.d.ts +7 -0
- package/dist/plugin-mode/build-readiness-fingerprint.d.ts.map +1 -0
- package/dist/plugin-mode/build-readiness-fingerprint.js +83 -0
- package/dist/plugin-mode/build-readiness-fingerprint.js.map +1 -0
- package/dist/plugin-mode/build-readiness-recorder.d.ts +15 -0
- package/dist/plugin-mode/build-readiness-recorder.d.ts.map +1 -0
- package/dist/plugin-mode/build-readiness-recorder.js +150 -0
- package/dist/plugin-mode/build-readiness-recorder.js.map +1 -0
- package/dist/plugin-mode/build-readiness-server.d.ts +22 -0
- package/dist/plugin-mode/build-readiness-server.d.ts.map +1 -0
- package/dist/plugin-mode/build-readiness-server.js +322 -0
- package/dist/plugin-mode/build-readiness-server.js.map +1 -0
- package/dist/plugin-mode/build-readiness-store.d.ts +16 -0
- package/dist/plugin-mode/build-readiness-store.d.ts.map +1 -0
- package/dist/plugin-mode/build-readiness-store.js +198 -0
- package/dist/plugin-mode/build-readiness-store.js.map +1 -0
- package/dist/plugin-mode/build-readiness-tools.d.ts +47 -0
- package/dist/plugin-mode/build-readiness-tools.d.ts.map +1 -0
- package/dist/plugin-mode/build-readiness-tools.js +159 -0
- package/dist/plugin-mode/build-readiness-tools.js.map +1 -0
- package/dist/plugin-mode/build-readiness-widget.css.d.ts +2 -0
- package/dist/plugin-mode/build-readiness-widget.css.d.ts.map +1 -0
- package/dist/plugin-mode/build-readiness-widget.css.js +217 -0
- package/dist/plugin-mode/build-readiness-widget.css.js.map +1 -0
- package/dist/plugin-mode/build-readiness-widget.d.ts +28 -0
- package/dist/plugin-mode/build-readiness-widget.d.ts.map +1 -0
- package/dist/plugin-mode/build-readiness-widget.js +60 -0
- package/dist/plugin-mode/build-readiness-widget.js.map +1 -0
- package/dist/plugin-mode/compatibility.d.ts +22 -0
- package/dist/plugin-mode/compatibility.d.ts.map +1 -0
- package/dist/plugin-mode/compatibility.js +59 -0
- package/dist/plugin-mode/compatibility.js.map +1 -0
- package/dist/plugin-mode/plugin-mcp-bootstrap.d.ts +13 -0
- package/dist/plugin-mode/plugin-mcp-bootstrap.d.ts.map +1 -0
- package/dist/plugin-mode/plugin-mcp-bootstrap.js +90 -0
- package/dist/plugin-mode/plugin-mcp-bootstrap.js.map +1 -0
- package/dist/plugin-mode/profile.d.ts +16 -0
- package/dist/plugin-mode/profile.d.ts.map +1 -0
- package/dist/plugin-mode/profile.js +66 -0
- package/dist/plugin-mode/profile.js.map +1 -0
- package/dist/plugin-mode/service-compatibility.d.ts +15 -0
- package/dist/plugin-mode/service-compatibility.d.ts.map +1 -0
- package/dist/plugin-mode/service-compatibility.js +57 -0
- package/dist/plugin-mode/service-compatibility.js.map +1 -0
- package/dist/update-check.d.ts +2 -16
- package/dist/update-check.d.ts.map +1 -1
- package/dist/update-check.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/generated/example-files.js +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/generated/example-files.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/generated/surface.d.ts +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/generated/surface.d.ts.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/generated/surface.js +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/generated/surface.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/index.d.ts +3 -0
- package/node_modules/@noodle-borg/agent-kit/dist/index.d.ts.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/index.js +3 -0
- package/node_modules/@noodle-borg/agent-kit/dist/index.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/plugin-bundle.d.ts +5 -0
- package/node_modules/@noodle-borg/agent-kit/dist/plugin-bundle.d.ts.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/plugin-bundle.js +106 -28
- package/node_modules/@noodle-borg/agent-kit/dist/plugin-bundle.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/plugin-compatibility.d.ts +22 -0
- package/node_modules/@noodle-borg/agent-kit/dist/plugin-compatibility.d.ts.map +1 -0
- package/node_modules/@noodle-borg/agent-kit/dist/plugin-compatibility.js +100 -0
- package/node_modules/@noodle-borg/agent-kit/dist/plugin-compatibility.js.map +1 -0
- package/node_modules/@noodle-borg/agent-kit/dist/plugin-launcher.d.ts +8 -0
- package/node_modules/@noodle-borg/agent-kit/dist/plugin-launcher.d.ts.map +1 -0
- package/node_modules/@noodle-borg/agent-kit/dist/plugin-launcher.js +55 -0
- package/node_modules/@noodle-borg/agent-kit/dist/plugin-launcher.js.map +1 -0
- package/node_modules/@noodle-borg/agent-kit/dist/plugin-manifests.d.ts +27 -0
- package/node_modules/@noodle-borg/agent-kit/dist/plugin-manifests.d.ts.map +1 -0
- package/node_modules/@noodle-borg/agent-kit/dist/plugin-manifests.js +108 -0
- package/node_modules/@noodle-borg/agent-kit/dist/plugin-manifests.js.map +1 -0
- package/node_modules/@noodle-borg/agent-kit/dist/plugin-marketplace-docs.d.ts +9 -0
- package/node_modules/@noodle-borg/agent-kit/dist/plugin-marketplace-docs.d.ts.map +1 -0
- package/node_modules/@noodle-borg/agent-kit/dist/plugin-marketplace-docs.js +121 -0
- package/node_modules/@noodle-borg/agent-kit/dist/plugin-marketplace-docs.js.map +1 -0
- package/node_modules/@noodle-borg/agent-kit/dist/plugin-submission.d.ts +130 -0
- package/node_modules/@noodle-borg/agent-kit/dist/plugin-submission.d.ts.map +1 -0
- package/node_modules/@noodle-borg/agent-kit/dist/plugin-submission.js +220 -0
- package/node_modules/@noodle-borg/agent-kit/dist/plugin-submission.js.map +1 -0
- package/node_modules/@noodle-borg/agent-kit/dist/skill-content.d.ts.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/skill-content.js +2 -0
- package/node_modules/@noodle-borg/agent-kit/dist/skill-content.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/skill-operations-refs.d.ts.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/skill-operations-refs.js +5 -0
- package/node_modules/@noodle-borg/agent-kit/dist/skill-operations-refs.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/package.json +1 -1
- package/node_modules/@noodle-borg/auth/dist/jwt-issuer.d.ts +4 -0
- package/node_modules/@noodle-borg/auth/dist/jwt-issuer.d.ts.map +1 -1
- package/node_modules/@noodle-borg/auth/dist/jwt-issuer.js +2 -0
- package/node_modules/@noodle-borg/auth/dist/jwt-issuer.js.map +1 -1
- package/node_modules/@noodle-borg/auth/dist/verify.d.ts +4 -0
- package/node_modules/@noodle-borg/auth/dist/verify.d.ts.map +1 -1
- package/node_modules/@noodle-borg/auth/dist/verify.js +10 -0
- package/node_modules/@noodle-borg/auth/dist/verify.js.map +1 -1
- package/node_modules/@noodle-borg/developer-mcp/dist/capabilities.d.ts +9 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/capabilities.d.ts.map +1 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/capabilities.js +41 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/capabilities.js.map +1 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/contracts.d.ts +637 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/contracts.d.ts.map +1 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/contracts.js +364 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/contracts.js.map +1 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/diagnosis.d.ts +79 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/diagnosis.d.ts.map +1 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/diagnosis.js +138 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/diagnosis.js.map +1 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/index.d.ts +12 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/index.d.ts.map +1 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/index.js +12 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/index.js.map +1 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/port.d.ts +16 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/port.d.ts.map +1 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/port.js +9 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/port.js.map +1 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/prompts.d.ts +16 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/prompts.d.ts.map +1 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/prompts.js +51 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/prompts.js.map +1 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/resources.d.ts +13 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/resources.d.ts.map +1 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/resources.js +90 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/resources.js.map +1 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/results.d.ts +31 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/results.d.ts.map +1 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/results.js +80 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/results.js.map +1 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/server.d.ts +19 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/server.d.ts.map +1 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/server.js +79 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/server.js.map +1 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/tools/apps.d.ts +43 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/tools/apps.d.ts.map +1 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/tools/apps.js +77 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/tools/apps.js.map +1 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/tools/context.d.ts +4 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/tools/context.d.ts.map +1 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/tools/context.js +21 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/tools/context.js.map +1 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/tools/deployments.d.ts +61 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/tools/deployments.d.ts.map +1 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/tools/deployments.js +37 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/tools/deployments.js.map +1 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/tools/diagnose.d.ts +29 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/tools/diagnose.d.ts.map +1 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/tools/diagnose.js +83 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/tools/diagnose.js.map +1 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/tools/index.d.ts +7 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/tools/index.d.ts.map +1 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/tools/index.js +7 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/tools/index.js.map +1 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/tools/operations.d.ts +138 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/tools/operations.d.ts.map +1 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/tools/operations.js +99 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/tools/operations.js.map +1 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/tools/rollback.d.ts +24 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/tools/rollback.d.ts.map +1 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/tools/rollback.js +59 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/tools/rollback.js.map +1 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/widget-links.d.ts +16 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/widget-links.d.ts.map +1 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/widget-links.js +20 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/widget-links.js.map +1 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/widgets/analytics.d.ts +2 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/widgets/analytics.d.ts.map +1 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/widgets/analytics.js +6 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/widgets/analytics.js.map +1 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/widgets/app-overview.d.ts +2 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/widgets/app-overview.d.ts.map +1 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/widgets/app-overview.js +6 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/widgets/app-overview.js.map +1 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/widgets/deployment-detail.d.ts +2 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/widgets/deployment-detail.d.ts.map +1 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/widgets/deployment-detail.js +7 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/widgets/deployment-detail.js.map +1 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/widgets/operations.d.ts +2 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/widgets/operations.d.ts.map +1 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/widgets/operations.js +6 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/widgets/operations.js.map +1 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/widgets/resources.d.ts +37 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/widgets/resources.d.ts.map +1 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/widgets/resources.js +76 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/widgets/resources.js.map +1 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/widgets/shared.d.ts +30 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/widgets/shared.d.ts.map +1 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/widgets/shared.js +23 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/widgets/shared.js.map +1 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/widgets/styles.d.ts +2 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/widgets/styles.d.ts.map +1 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/widgets/styles.js +153 -0
- package/node_modules/@noodle-borg/developer-mcp/dist/widgets/styles.js.map +1 -0
- package/node_modules/@noodle-borg/developer-mcp/package.json +37 -0
- package/node_modules/@noodle-borg/module/dist/contract.d.ts +4 -0
- package/node_modules/@noodle-borg/module/dist/contract.d.ts.map +1 -1
- package/node_modules/@noodle-borg/module/dist/contract.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/auth/deploy-gate.d.ts +7 -1
- package/node_modules/@noodle-borg/service/dist/auth/deploy-gate.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/auth/deploy-gate.js +17 -5
- package/node_modules/@noodle-borg/service/dist/auth/deploy-gate.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/auth/developer-grant-guard.d.ts +16 -0
- package/node_modules/@noodle-borg/service/dist/auth/developer-grant-guard.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/auth/developer-grant-guard.js +40 -0
- package/node_modules/@noodle-borg/service/dist/auth/developer-grant-guard.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-stripe-checkouts.d.ts +7 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-stripe-checkouts.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-stripe-checkouts.js +247 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-stripe-checkouts.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-stripe-schema.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/billing/postgres-stripe-schema.js +14 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-stripe-schema.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/billing/postgres-stripe-store.d.ts +4 -4
- package/node_modules/@noodle-borg/service/dist/billing/postgres-stripe-store.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/billing/postgres-stripe-store.js +10 -99
- package/node_modules/@noodle-borg/service/dist/billing/postgres-stripe-store.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/billing/stripe-contract.d.ts +6 -0
- package/node_modules/@noodle-borg/service/dist/billing/stripe-contract.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/billing/stripe-contract.js +1 -0
- package/node_modules/@noodle-borg/service/dist/billing/stripe-contract.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/billing/stripe-provider.d.ts +3 -0
- package/node_modules/@noodle-borg/service/dist/billing/stripe-provider.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/billing/stripe-provider.js +27 -0
- package/node_modules/@noodle-borg/service/dist/billing/stripe-provider.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/billing/stripe-service.d.ts +5 -4
- package/node_modules/@noodle-borg/service/dist/billing/stripe-service.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/billing/stripe-service.js +112 -43
- package/node_modules/@noodle-borg/service/dist/billing/stripe-service.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/billing/stripe-store.d.ts +35 -5
- package/node_modules/@noodle-borg/service/dist/billing/stripe-store.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/billing/stripe-store.js +8 -1
- package/node_modules/@noodle-borg/service/dist/billing/stripe-store.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/build-info.d.ts +1 -0
- package/node_modules/@noodle-borg/service/dist/build-info.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/build-info.js +11 -0
- package/node_modules/@noodle-borg/service/dist/build-info.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/developer-mcp/control-plane-adapter.d.ts +30 -0
- package/node_modules/@noodle-borg/service/dist/developer-mcp/control-plane-adapter.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/developer-mcp/control-plane-adapter.js +311 -0
- package/node_modules/@noodle-borg/service/dist/developer-mcp/control-plane-adapter.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/developer-mcp/inspection.d.ts +69 -0
- package/node_modules/@noodle-borg/service/dist/developer-mcp/inspection.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/developer-mcp/inspection.js +118 -0
- package/node_modules/@noodle-borg/service/dist/developer-mcp/inspection.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/developer-mcp/mount.d.ts +29 -0
- package/node_modules/@noodle-borg/service/dist/developer-mcp/mount.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/developer-mcp/mount.js +223 -0
- package/node_modules/@noodle-borg/service/dist/developer-mcp/mount.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/developer-mcp/service-options.d.ts +18 -0
- package/node_modules/@noodle-borg/service/dist/developer-mcp/service-options.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/developer-mcp/service-options.js +26 -0
- package/node_modules/@noodle-borg/service/dist/developer-mcp/service-options.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/index.d.ts +5 -0
- package/node_modules/@noodle-borg/service/dist/index.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/index.js +5 -0
- package/node_modules/@noodle-borg/service/dist/index.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/main.js +1 -0
- package/node_modules/@noodle-borg/service/dist/main.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/app.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/app.js +5 -0
- package/node_modules/@noodle-borg/service/dist/oauth/app.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/consent-claims.d.ts +6 -0
- package/node_modules/@noodle-borg/service/dist/oauth/consent-claims.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/consent-claims.js +28 -0
- package/node_modules/@noodle-borg/service/dist/oauth/consent-claims.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-authorizer.d.ts +48 -0
- package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-authorizer.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-authorizer.js +90 -0
- package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-authorizer.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-bootstrap.d.ts +18 -0
- package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-bootstrap.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-bootstrap.js +29 -0
- package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-bootstrap.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-flow.d.ts +22 -0
- package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-flow.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-flow.js +144 -0
- package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-flow.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-page.d.ts +12 -0
- package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-page.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-page.js +61 -0
- package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-page.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-store-postgres.d.ts +11 -0
- package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-store-postgres.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-store-postgres.js +89 -0
- package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-store-postgres.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/oauth/developer-grant.d.ts +48 -0
- package/node_modules/@noodle-borg/service/dist/oauth/developer-grant.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/oauth/developer-grant.js +123 -0
- package/node_modules/@noodle-borg/service/dist/oauth/developer-grant.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/oauth/paths.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/paths.js +2 -0
- package/node_modules/@noodle-borg/service/dist/oauth/paths.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/provider.d.ts +6 -1
- package/node_modules/@noodle-borg/service/dist/oauth/provider.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/provider.js +53 -0
- package/node_modules/@noodle-borg/service/dist/oauth/provider.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/store-postgres.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/store-postgres.js +17 -6
- package/node_modules/@noodle-borg/service/dist/oauth/store-postgres.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/store.d.ts +3 -0
- package/node_modules/@noodle-borg/service/dist/oauth/store.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/store.js +2 -0
- package/node_modules/@noodle-borg/service/dist/oauth/store.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/token-issuer.d.ts +2 -0
- package/node_modules/@noodle-borg/service/dist/oauth/token-issuer.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/token-issuer.js +8 -0
- package/node_modules/@noodle-borg/service/dist/oauth/token-issuer.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/operations/rollback-deployment.d.ts +52 -0
- package/node_modules/@noodle-borg/service/dist/operations/rollback-deployment.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/operations/rollback-deployment.js +120 -0
- package/node_modules/@noodle-borg/service/dist/operations/rollback-deployment.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/options.d.ts +7 -1
- package/node_modules/@noodle-borg/service/dist/options.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/analytics-dispatch.d.ts +2 -0
- package/node_modules/@noodle-borg/service/dist/routes/analytics-dispatch.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/analytics-dispatch.js +4 -4
- package/node_modules/@noodle-borg/service/dist/routes/analytics-dispatch.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/analytics.d.ts +4 -3
- package/node_modules/@noodle-borg/service/dist/routes/analytics.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/analytics.js +7 -7
- package/node_modules/@noodle-borg/service/dist/routes/analytics.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/apps.d.ts +3 -2
- package/node_modules/@noodle-borg/service/dist/routes/apps.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/apps.js +28 -7
- package/node_modules/@noodle-borg/service/dist/routes/apps.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/billing-stripe.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/billing-stripe.js +4 -2
- package/node_modules/@noodle-borg/service/dist/routes/billing-stripe.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/control-plane.d.ts +12 -1
- package/node_modules/@noodle-borg/service/dist/routes/control-plane.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/control-plane.js +36 -4
- package/node_modules/@noodle-borg/service/dist/routes/control-plane.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/deployments.d.ts +4 -3
- package/node_modules/@noodle-borg/service/dist/routes/deployments.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/deployments.js +26 -18
- package/node_modules/@noodle-borg/service/dist/routes/deployments.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/diagnostics.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/diagnostics.js +8 -105
- package/node_modules/@noodle-borg/service/dist/routes/diagnostics.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/envs.d.ts +3 -2
- package/node_modules/@noodle-borg/service/dist/routes/envs.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/envs.js +9 -5
- package/node_modules/@noodle-borg/service/dist/routes/envs.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/logs.d.ts +2 -1
- package/node_modules/@noodle-borg/service/dist/routes/logs.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/logs.js +3 -3
- package/node_modules/@noodle-borg/service/dist/routes/logs.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/plans.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/plans.js +3 -14
- package/node_modules/@noodle-borg/service/dist/routes/plans.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/policies.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/policies.js +3 -14
- package/node_modules/@noodle-borg/service/dist/routes/policies.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/protected-resource-metadata.d.ts +8 -0
- package/node_modules/@noodle-borg/service/dist/routes/protected-resource-metadata.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/routes/protected-resource-metadata.js +51 -0
- package/node_modules/@noodle-borg/service/dist/routes/protected-resource-metadata.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/routes/resource-read-dispatch.d.ts +2 -0
- package/node_modules/@noodle-borg/service/dist/routes/resource-read-dispatch.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/resource-read-dispatch.js +6 -6
- package/node_modules/@noodle-borg/service/dist/routes/resource-read-dispatch.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/rollback.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/rollback.js +25 -86
- package/node_modules/@noodle-borg/service/dist/routes/rollback.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/serve-resource-auth.d.ts +11 -0
- package/node_modules/@noodle-borg/service/dist/serve-resource-auth.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/serve-resource-auth.js +62 -0
- package/node_modules/@noodle-borg/service/dist/serve-resource-auth.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/serve.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/serve.js +19 -62
- package/node_modules/@noodle-borg/service/dist/serve.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/service.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/service.js +25 -45
- package/node_modules/@noodle-borg/service/dist/service.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/postgres-schema.d.ts +2 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres-schema.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/postgres-schema.js +35 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres-schema.js.map +1 -1
- package/node_modules/@noodle-borg/service/package.json +1 -0
- package/package.json +2 -1
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { protectedResourceMetadata } from '@noodle-borg/auth';
|
|
2
|
+
import { parseLegacyTenantMcpPath } from '@noodle-borg/module';
|
|
3
|
+
import { applySecurityHeaders, enforceHttps } from '@noodle-borg/transport-http';
|
|
4
|
+
import { DEVELOPER_MCP_PATH, developerMcpScopes } from '../developer-mcp/mount.js';
|
|
5
|
+
import { baseFromRequest, sendJson } from '../http-util.js';
|
|
6
|
+
import { trustedMcpResourceFromRequest } from '../mcp-public-routing.js';
|
|
7
|
+
import { authServerIssuersForTenant } from '../registry-targets.js';
|
|
8
|
+
/** Well-known prefix for OAuth 2.0 Protected Resource Metadata (RFC 9728). */
|
|
9
|
+
export const PROTECTED_RESOURCE_METADATA_PREFIX = '/.well-known/oauth-protected-resource';
|
|
10
|
+
export function dispatchProtectedResourceMetadata(req, res, url, registry, options, tls) {
|
|
11
|
+
if (req.method !== 'GET' || !url.pathname.startsWith(PROTECTED_RESOURCE_METADATA_PREFIX)) {
|
|
12
|
+
return false;
|
|
13
|
+
}
|
|
14
|
+
applySecurityHeaders(res, tls);
|
|
15
|
+
if (enforceHttps(req, res, tls))
|
|
16
|
+
return true;
|
|
17
|
+
void Promise.resolve()
|
|
18
|
+
.then(async () => {
|
|
19
|
+
const trustedResource = trustedMcpResourceFromRequest(req, options);
|
|
20
|
+
if (trustedResource.status !== 'none' && !trustedResource.ok) {
|
|
21
|
+
return sendJson(res, trustedResource.status, {
|
|
22
|
+
error: trustedResource.status === 403 ? 'forbidden' : 'not found',
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
const base = options.publicBaseUrl ?? baseFromRequest(req, tls);
|
|
26
|
+
const resourcePath = url.pathname.slice(PROTECTED_RESOURCE_METADATA_PREFIX.length);
|
|
27
|
+
const tenant = trustedResource.status === 'ok'
|
|
28
|
+
? trustedResource.tenant
|
|
29
|
+
: parseLegacyTenantMcpPath(resourcePath);
|
|
30
|
+
const authServerIssuers = (tenant !== undefined ? await authServerIssuersForTenant(registry, tenant) : undefined) ??
|
|
31
|
+
(options.authServerIssuer ? [options.authServerIssuer] : undefined);
|
|
32
|
+
const doc = {
|
|
33
|
+
...protectedResourceMetadata({
|
|
34
|
+
resource: trustedResource.status === 'ok'
|
|
35
|
+
? trustedResource.resourceUrl
|
|
36
|
+
: `${base}${resourcePath}`,
|
|
37
|
+
...(authServerIssuers ? { authorizationServers: authServerIssuers } : {}),
|
|
38
|
+
}),
|
|
39
|
+
...(options.developerMcp === true && resourcePath === DEVELOPER_MCP_PATH
|
|
40
|
+
? { scopes_supported: developerMcpScopes() }
|
|
41
|
+
: {}),
|
|
42
|
+
};
|
|
43
|
+
return sendJson(res, 200, doc);
|
|
44
|
+
})
|
|
45
|
+
.catch(() => {
|
|
46
|
+
if (!res.headersSent)
|
|
47
|
+
sendJson(res, 500, { error: 'internal error' });
|
|
48
|
+
});
|
|
49
|
+
return true;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=protected-resource-metadata.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"protected-resource-metadata.js","sourceRoot":"","sources":["../../src/routes/protected-resource-metadata.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAmB,MAAM,6BAA6B,CAAC;AAClG,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACnF,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,6BAA6B,EAAE,MAAM,0BAA0B,CAAC;AAGzE,OAAO,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AAEpE,8EAA8E;AAC9E,MAAM,CAAC,MAAM,kCAAkC,GAAG,uCAAuC,CAAC;AAE1F,MAAM,UAAU,iCAAiC,CAC/C,GAAoB,EACpB,GAAmB,EACnB,GAAQ,EACR,QAAwB,EACxB,OAAuB,EACvB,GAAe;IAEf,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,kCAAkC,CAAC,EAAE,CAAC;QACzF,OAAO,KAAK,CAAC;IACf,CAAC;IACD,oBAAoB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC/B,IAAI,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7C,KAAK,OAAO,CAAC,OAAO,EAAE;SACnB,IAAI,CAAC,KAAK,IAAI,EAAE;QACf,MAAM,eAAe,GAAG,6BAA6B,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QACpE,IAAI,eAAe,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,eAAe,CAAC,EAAE,EAAE,CAAC;YAC7D,OAAO,QAAQ,CAAC,GAAG,EAAE,eAAe,CAAC,MAAM,EAAE;gBAC3C,KAAK,EAAE,eAAe,CAAC,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW;aAClE,CAAC,CAAC;QACL,CAAC;QACD,MAAM,IAAI,GAAG,OAAO,CAAC,aAAa,IAAI,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAChE,MAAM,YAAY,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,kCAAkC,CAAC,MAAM,CAAC,CAAC;QACnF,MAAM,MAAM,GACV,eAAe,CAAC,MAAM,KAAK,IAAI;YAC7B,CAAC,CAAC,eAAe,CAAC,MAAM;YACxB,CAAC,CAAC,wBAAwB,CAAC,YAAY,CAAC,CAAC;QAC7C,MAAM,iBAAiB,GACrB,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,0BAA0B,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACvF,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACtE,MAAM,GAAG,GAAG;YACV,GAAG,yBAAyB,CAAC;gBAC3B,QAAQ,EACN,eAAe,CAAC,MAAM,KAAK,IAAI;oBAC7B,CAAC,CAAC,eAAe,CAAC,WAAW;oBAC7B,CAAC,CAAC,GAAG,IAAI,GAAG,YAAY,EAAE;gBAC9B,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC1E,CAAC;YACF,GAAG,CAAC,OAAO,CAAC,YAAY,KAAK,IAAI,IAAI,YAAY,KAAK,kBAAkB;gBACtE,CAAC,CAAC,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,EAAE;gBAC5C,CAAC,CAAC,EAAE,CAAC;SACR,CAAC;QACF,OAAO,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IACjC,CAAC,CAAC;SACD,KAAK,CAAC,GAAG,EAAE;QACV,IAAI,CAAC,GAAG,CAAC,WAAW;YAAE,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;IACL,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
import type { IncomingMessage, ServerResponse } from 'node:http';
|
|
13
13
|
import type { TlsPosture } from '@noodle-borg/transport-http';
|
|
14
14
|
import type { DeployAuthGate } from '../auth/deploy-gate.js';
|
|
15
|
+
import type { DeveloperGrantStore } from '../oauth/developer-grant.js';
|
|
15
16
|
import type { ServerRegistry } from '../registry.js';
|
|
16
17
|
import type { ControlPlaneStore } from '../store.js';
|
|
17
18
|
import type { EndpointUrlOptions, ResolveEndpointBase } from './endpoint-enrichment.js';
|
|
@@ -25,6 +26,7 @@ export interface ResourceReadDeps {
|
|
|
25
26
|
readonly tls: TlsPosture;
|
|
26
27
|
readonly resolveEndpointBase: ResolveEndpointBase;
|
|
27
28
|
readonly endpointOptions?: EndpointUrlOptions;
|
|
29
|
+
readonly developerGrantStore: DeveloperGrantStore | undefined;
|
|
28
30
|
}
|
|
29
31
|
/**
|
|
30
32
|
* Try the resource read routes; returns true when the request was handled (or a guard ended it).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resource-read-dispatch.d.ts","sourceRoot":"","sources":["../../src/routes/resource-read-dispatch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAGrD,OAAO,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAUxF,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAC9B,QAAQ,CAAC,YAAY,EAAE,iBAAiB,CAAC;IACzC,QAAQ,CAAC,oBAAoB,EAAE,CAAC,GAAG,EAAE,cAAc,EAAE,GAAG,EAAE,UAAU,KAAK,IAAI,CAAC;IAC9E,QAAQ,CAAC,YAAY,EAAE,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,EAAE,GAAG,EAAE,UAAU,KAAK,OAAO,CAAC;IAC/F,QAAQ,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAChF,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC;IACzB,QAAQ,CAAC,mBAAmB,EAAE,mBAAmB,CAAC;IAClD,QAAQ,CAAC,eAAe,CAAC,EAAE,kBAAkB,CAAC;CAC/
|
|
1
|
+
{"version":3,"file":"resource-read-dispatch.d.ts","sourceRoot":"","sources":["../../src/routes/resource-read-dispatch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAGrD,OAAO,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAUxF,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAC9B,QAAQ,CAAC,YAAY,EAAE,iBAAiB,CAAC;IACzC,QAAQ,CAAC,oBAAoB,EAAE,CAAC,GAAG,EAAE,cAAc,EAAE,GAAG,EAAE,UAAU,KAAK,IAAI,CAAC;IAC9E,QAAQ,CAAC,YAAY,EAAE,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,EAAE,GAAG,EAAE,UAAU,KAAK,OAAO,CAAC;IAC/F,QAAQ,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAChF,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC;IACzB,QAAQ,CAAC,mBAAmB,EAAE,mBAAmB,CAAC;IAClD,QAAQ,CAAC,eAAe,CAAC,EAAE,kBAAkB,CAAC;IAC9C,QAAQ,CAAC,mBAAmB,EAAE,mBAAmB,GAAG,SAAS,CAAC;CAC/D;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,GAAG,EAAE,GAAG,EACR,IAAI,EAAE,gBAAgB,GACrB,OAAO,CAiHT"}
|
|
@@ -7,14 +7,14 @@ import { parseAppItemPath, parseAppsPath, parseDeploymentItemPath, parseEnvItemP
|
|
|
7
7
|
* `orgRef` GET (org inspect) stays in `service.ts` beside its PATCH sibling, which shares the parse.
|
|
8
8
|
*/
|
|
9
9
|
export function dispatchResourceReads(req, res, url, deps) {
|
|
10
|
-
const { registry, gate, controlPlane, applySecurityHeaders, enforceHttps, sendJson, tls, resolveEndpointBase, endpointOptions = {}, } = deps;
|
|
10
|
+
const { registry, gate, controlPlane, applySecurityHeaders, enforceHttps, sendJson, tls, resolveEndpointBase, endpointOptions = {}, developerGrantStore, } = deps;
|
|
11
11
|
const endpointBase = resolveEndpointBase(req);
|
|
12
12
|
const appsRef = parseAppsPath(url.pathname);
|
|
13
13
|
if (appsRef !== undefined && req.method === 'GET') {
|
|
14
14
|
applySecurityHeaders(res, tls);
|
|
15
15
|
if (enforceHttps(req, res, tls))
|
|
16
16
|
return true;
|
|
17
|
-
handleApps(req, res, registry, gate, controlPlane, appsRef, url, endpointBase, endpointOptions).catch(() => {
|
|
17
|
+
handleApps(req, res, registry, gate, controlPlane, appsRef, url, endpointBase, endpointOptions, developerGrantStore).catch(() => {
|
|
18
18
|
if (!res.headersSent)
|
|
19
19
|
sendJson(res, 500, { error: 'internal error' });
|
|
20
20
|
});
|
|
@@ -25,7 +25,7 @@ export function dispatchResourceReads(req, res, url, deps) {
|
|
|
25
25
|
applySecurityHeaders(res, tls);
|
|
26
26
|
if (enforceHttps(req, res, tls))
|
|
27
27
|
return true;
|
|
28
|
-
handleApp(req, res, registry, gate, controlPlane, appItemRef, endpointBase, endpointOptions).catch(() => {
|
|
28
|
+
handleApp(req, res, registry, gate, controlPlane, appItemRef, endpointBase, endpointOptions, developerGrantStore).catch(() => {
|
|
29
29
|
if (!res.headersSent)
|
|
30
30
|
sendJson(res, 500, { error: 'internal error' });
|
|
31
31
|
});
|
|
@@ -36,7 +36,7 @@ export function dispatchResourceReads(req, res, url, deps) {
|
|
|
36
36
|
applySecurityHeaders(res, tls);
|
|
37
37
|
if (enforceHttps(req, res, tls))
|
|
38
38
|
return true;
|
|
39
|
-
handleEnvs(req, res, registry, gate, controlPlane, envsRef, url, endpointBase, endpointOptions).catch(() => {
|
|
39
|
+
handleEnvs(req, res, registry, gate, controlPlane, envsRef, url, endpointBase, endpointOptions, developerGrantStore).catch(() => {
|
|
40
40
|
if (!res.headersSent)
|
|
41
41
|
sendJson(res, 500, { error: 'internal error' });
|
|
42
42
|
});
|
|
@@ -47,7 +47,7 @@ export function dispatchResourceReads(req, res, url, deps) {
|
|
|
47
47
|
applySecurityHeaders(res, tls);
|
|
48
48
|
if (enforceHttps(req, res, tls))
|
|
49
49
|
return true;
|
|
50
|
-
handleEnv(req, res, registry, gate, controlPlane, envItemRef, endpointBase, endpointOptions).catch(() => {
|
|
50
|
+
handleEnv(req, res, registry, gate, controlPlane, envItemRef, endpointBase, endpointOptions, developerGrantStore).catch(() => {
|
|
51
51
|
if (!res.headersSent)
|
|
52
52
|
sendJson(res, 500, { error: 'internal error' });
|
|
53
53
|
});
|
|
@@ -58,7 +58,7 @@ export function dispatchResourceReads(req, res, url, deps) {
|
|
|
58
58
|
applySecurityHeaders(res, tls);
|
|
59
59
|
if (enforceHttps(req, res, tls))
|
|
60
60
|
return true;
|
|
61
|
-
handleDeploymentItem(req, res, registry, gate, controlPlane, deploymentItemRef, endpointBase, endpointOptions).catch(() => {
|
|
61
|
+
handleDeploymentItem(req, res, registry, gate, controlPlane, deploymentItemRef, endpointBase, endpointOptions, developerGrantStore).catch(() => {
|
|
62
62
|
if (!res.headersSent)
|
|
63
63
|
sendJson(res, 500, { error: 'internal error' });
|
|
64
64
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resource-read-dispatch.js","sourceRoot":"","sources":["../../src/routes/resource-read-dispatch.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"resource-read-dispatch.js","sourceRoot":"","sources":["../../src/routes/resource-read-dispatch.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rollback.d.ts","sourceRoot":"","sources":["../../src/routes/rollback.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"rollback.d.ts","sourceRoot":"","sources":["../../src/routes/rollback.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAG7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGhE,wBAAsB,cAAc,CAClC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,QAAQ,EAAE,cAAc,EACxB,IAAI,EAAE,cAAc,EACpB,YAAY,EAAE,iBAAiB,EAC/B,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,IAAI,CAAC,CAgDf"}
|
|
@@ -1,32 +1,10 @@
|
|
|
1
1
|
import { baseFromRequest, readJsonBody, sendForbidden, sendJson } from '../http-util.js';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { authorizeControlPlane } from './control-plane.js';
|
|
5
|
-
import { canManageMembers } from './org-admin.js';
|
|
2
|
+
import { rollbackDeploymentOperation } from '../operations/rollback-deployment.js';
|
|
3
|
+
import { authorizeTenantControl, developerGrantRouteAccess } from './control-plane.js';
|
|
6
4
|
export async function handleRollback(req, res, registry, gate, controlPlane, audit, maxBody, tenant, options) {
|
|
7
|
-
const identity = await
|
|
5
|
+
const identity = await authorizeTenantControl(req, res, gate, controlPlane, tenant.org, developerGrantRouteAccess(options.developerGrantStore, 'deployments:rollback', tenant.env));
|
|
8
6
|
if (identity === false)
|
|
9
7
|
return;
|
|
10
|
-
if (!(await canManageMembers(controlPlane, tenant.org, identity))) {
|
|
11
|
-
return sendForbidden(res, 'forbidden');
|
|
12
|
-
}
|
|
13
|
-
// Archived apps are soft-deleted (ADR 0117): activation changes are refused until restored.
|
|
14
|
-
const archivedAt = await registry.getAppArchivedAt(tenant.org, tenant.app);
|
|
15
|
-
if (archivedAt !== undefined) {
|
|
16
|
-
await audit.emit({
|
|
17
|
-
eventType: 'rollback.rejected',
|
|
18
|
-
org: tenant.org,
|
|
19
|
-
app: tenant.app,
|
|
20
|
-
env: tenant.env,
|
|
21
|
-
decision: 'deny',
|
|
22
|
-
status: 409,
|
|
23
|
-
reasonCode: 'app_archived',
|
|
24
|
-
actorSubject: identity.subject,
|
|
25
|
-
...(identity.email !== undefined ? { actorEmail: identity.email } : {}),
|
|
26
|
-
details: { archivedAt },
|
|
27
|
-
});
|
|
28
|
-
return sendJson(res, 409, { error: 'app is archived; restore it before rolling back' });
|
|
29
|
-
}
|
|
30
8
|
const body = await readJsonBody(req, maxBody);
|
|
31
9
|
if (!body.ok)
|
|
32
10
|
return sendJson(res, body.status, { error: body.error });
|
|
@@ -37,71 +15,32 @@ export async function handleRollback(req, res, registry, gate, controlPlane, aud
|
|
|
37
15
|
if (parsed.reason !== undefined && typeof parsed.reason !== 'string') {
|
|
38
16
|
return sendJson(res, 400, { error: '"reason" must be a string' });
|
|
39
17
|
}
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
catch (error) {
|
|
45
|
-
const handled = await respondProductionAppAdmissionError(res, error, {
|
|
46
|
-
audit,
|
|
47
|
-
eventType: 'rollback.rejected',
|
|
48
|
-
org: tenant.org,
|
|
49
|
-
app: tenant.app,
|
|
50
|
-
env: tenant.env,
|
|
51
|
-
actorSubject: identity.subject,
|
|
52
|
-
...(identity.email !== undefined ? { actorEmail: identity.email } : {}),
|
|
18
|
+
const reason = typeof parsed.reason === 'string' ? parsed.reason.trim() : undefined;
|
|
19
|
+
if (reason !== undefined && (reason.length === 0 || reason.length > 500)) {
|
|
20
|
+
return sendJson(res, 400, {
|
|
21
|
+
error: '"reason" must be a non-empty string of at most 500 characters',
|
|
53
22
|
});
|
|
54
|
-
if (handled)
|
|
55
|
-
return;
|
|
56
|
-
throw error;
|
|
57
23
|
}
|
|
58
|
-
if (!result.ok)
|
|
59
|
-
return sendJson(res, result.status, { ok: false, error: result.error });
|
|
60
24
|
const base = options.publicBaseUrl ?? baseFromRequest(req, options.tls ?? {});
|
|
61
|
-
const
|
|
62
|
-
|
|
63
|
-
: {});
|
|
64
|
-
await audit.emit({
|
|
65
|
-
eventType: 'deploy.rollback',
|
|
66
|
-
org: tenant.org,
|
|
67
|
-
app: tenant.app,
|
|
68
|
-
env: tenant.env,
|
|
69
|
-
deploymentId: result.deploymentId,
|
|
70
|
-
decision: 'allow',
|
|
71
|
-
status: 200,
|
|
72
|
-
actorSubject: identity.subject,
|
|
73
|
-
...(identity.email !== undefined ? { actorEmail: identity.email } : {}),
|
|
74
|
-
details: {
|
|
75
|
-
...(result.serverVersion !== undefined ? { serverVersion: result.serverVersion } : {}),
|
|
76
|
-
...(result.previousDeploymentId !== undefined
|
|
77
|
-
? { previousDeploymentId: result.previousDeploymentId }
|
|
78
|
-
: {}),
|
|
79
|
-
alreadyActive: result.alreadyActive,
|
|
80
|
-
accessMode: result.accessMode,
|
|
81
|
-
...(result.previousAccessMode !== undefined
|
|
82
|
-
? { previousAccessMode: result.previousAccessMode }
|
|
83
|
-
: {}),
|
|
84
|
-
...(parsed.reason !== undefined ? { reason: parsed.reason } : {}),
|
|
85
|
-
},
|
|
86
|
-
});
|
|
87
|
-
return sendJson(res, 200, {
|
|
88
|
-
ok: true,
|
|
25
|
+
const result = await rollbackDeploymentOperation({ registry, controlPlane, audit }, {
|
|
26
|
+
actor: identity,
|
|
89
27
|
target: tenant,
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
alreadyActive: result.alreadyActive,
|
|
97
|
-
endpointUrl,
|
|
98
|
-
accessMode: result.accessMode,
|
|
99
|
-
...(result.previousAccessMode !== undefined
|
|
100
|
-
? { previousAccessMode: result.previousAccessMode }
|
|
101
|
-
: {}),
|
|
102
|
-
serverName: result.serverName,
|
|
103
|
-
createdAt: result.createdAt,
|
|
104
|
-
},
|
|
28
|
+
deploymentId: parsed.deploymentId,
|
|
29
|
+
...(reason !== undefined ? { reason } : {}),
|
|
30
|
+
publicBaseUrl: base,
|
|
31
|
+
...(options.mcpPublicRouting?.publicBaseDomain !== undefined
|
|
32
|
+
? { publicBaseDomain: options.mcpPublicRouting.publicBaseDomain }
|
|
33
|
+
: {}),
|
|
105
34
|
});
|
|
35
|
+
if (!result.ok) {
|
|
36
|
+
if (result.status === 403)
|
|
37
|
+
return sendForbidden(res, result.code);
|
|
38
|
+
return sendJson(res, result.status, {
|
|
39
|
+
ok: false,
|
|
40
|
+
code: result.code,
|
|
41
|
+
error: result.message,
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
return sendJson(res, 200, { ok: true, ...result.view });
|
|
106
45
|
}
|
|
107
46
|
//# sourceMappingURL=rollback.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rollback.js","sourceRoot":"","sources":["../../src/routes/rollback.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"rollback.js","sourceRoot":"","sources":["../../src/routes/rollback.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { SecretBox } from '@noodle-borg/runtime';
|
|
2
|
+
import type { ServiceOptions } from './options.js';
|
|
3
|
+
import type { ServerRegistry } from './registry.js';
|
|
4
|
+
import { type SecretEnvelope, type TenantBridgeAuthConfig } from './store.js';
|
|
5
|
+
export declare function isLoopbackHost(host: string): boolean;
|
|
6
|
+
export declare function sealCustomerCredential(secretBox: SecretBox | undefined, credential: string): Promise<SecretEnvelope>;
|
|
7
|
+
export declare function openCustomerCredential(secretBox: SecretBox | undefined, envelope: SecretEnvelope): Promise<string>;
|
|
8
|
+
export declare function bridgeAuthForResource(registry: ServerRegistry, resource: string, allowedBaseDomains: readonly string[]): Promise<TenantBridgeAuthConfig | undefined>;
|
|
9
|
+
export declare function managedSecretForResource(registry: ServerRegistry, resource: string, name: string, allowedBaseDomains: readonly string[]): Promise<string | undefined>;
|
|
10
|
+
export declare function allowedMcpBaseDomains(options: ServiceOptions): readonly string[];
|
|
11
|
+
//# sourceMappingURL=serve-resource-auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serve-resource-auth.d.ts","sourceRoot":"","sources":["../src/serve-resource-auth.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,sBAAsB,EAE5B,MAAM,YAAY,CAAC;AAMpB,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED,wBAAsB,sBAAsB,CAC1C,SAAS,EAAE,SAAS,GAAG,SAAS,EAChC,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,cAAc,CAAC,CAKzB;AAED,wBAAsB,sBAAsB,CAC1C,SAAS,EAAE,SAAS,GAAG,SAAS,EAChC,QAAQ,EAAE,cAAc,GACvB,OAAO,CAAC,MAAM,CAAC,CAQjB;AAED,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,cAAc,EACxB,QAAQ,EAAE,MAAM,EAChB,kBAAkB,EAAE,SAAS,MAAM,EAAE,GACpC,OAAO,CAAC,sBAAsB,GAAG,SAAS,CAAC,CAc7C;AAED,wBAAsB,wBAAwB,CAC5C,QAAQ,EAAE,cAAc,EACxB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,kBAAkB,EAAE,SAAS,MAAM,EAAE,GACpC,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAQ7B;AAmBD,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,cAAc,GAAG,SAAS,MAAM,EAAE,CAOhF"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { parseLegacyTenantMcpPath, parsePublicTenantMcpUrl } from '@noodle-borg/module';
|
|
2
|
+
import { resolveTenantBridgeAuthVariables } from './managed-config-expressions.js';
|
|
3
|
+
import { resolveConfigScope, } from './store.js';
|
|
4
|
+
export function isLoopbackHost(host) {
|
|
5
|
+
return host === '127.0.0.1' || host === '::1' || host === 'localhost';
|
|
6
|
+
}
|
|
7
|
+
export async function sealCustomerCredential(secretBox, credential) {
|
|
8
|
+
if (secretBox !== undefined) {
|
|
9
|
+
return { enc: 'aes-256-gcm', sealed: await secretBox.seal(credential) };
|
|
10
|
+
}
|
|
11
|
+
return { enc: 'none', values: { token: credential } };
|
|
12
|
+
}
|
|
13
|
+
export async function openCustomerCredential(secretBox, envelope) {
|
|
14
|
+
if (envelope.enc === 'none') {
|
|
15
|
+
const token = envelope.values.token;
|
|
16
|
+
if (token === undefined)
|
|
17
|
+
throw new Error('delegated credential envelope missing token');
|
|
18
|
+
return token;
|
|
19
|
+
}
|
|
20
|
+
if (secretBox === undefined)
|
|
21
|
+
throw new Error('secret box is required for delegated credential');
|
|
22
|
+
return secretBox.open(envelope.sealed);
|
|
23
|
+
}
|
|
24
|
+
export async function bridgeAuthForResource(registry, resource, allowedBaseDomains) {
|
|
25
|
+
const tenant = tenantRefFromResource(resource, allowedBaseDomains);
|
|
26
|
+
if (tenant === undefined)
|
|
27
|
+
return undefined;
|
|
28
|
+
const target = tenant.serverVersion === undefined
|
|
29
|
+
? await registry.getActiveByTenant(tenant)
|
|
30
|
+
: await registry.getActiveByTenantVersion(tenant, tenant.serverVersion);
|
|
31
|
+
const auth = target?.served.artifact.server.auth;
|
|
32
|
+
if (auth?.kind !== 'bridge')
|
|
33
|
+
return undefined;
|
|
34
|
+
const variables = await registry.configStore.resolveConfigValues('variable', resolveConfigScope(tenant));
|
|
35
|
+
return resolveTenantBridgeAuthVariables(auth, variables);
|
|
36
|
+
}
|
|
37
|
+
export async function managedSecretForResource(registry, resource, name, allowedBaseDomains) {
|
|
38
|
+
const tenant = tenantRefFromResource(resource, allowedBaseDomains);
|
|
39
|
+
if (tenant === undefined)
|
|
40
|
+
return undefined;
|
|
41
|
+
const secrets = await registry.configStore.resolveConfigValues('secret', resolveConfigScope(tenant));
|
|
42
|
+
return secrets[name];
|
|
43
|
+
}
|
|
44
|
+
function tenantRefFromResource(resource, allowedBaseDomains) {
|
|
45
|
+
let url;
|
|
46
|
+
try {
|
|
47
|
+
url = new URL(resource);
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
return undefined;
|
|
51
|
+
}
|
|
52
|
+
return ((allowedBaseDomains.length > 0
|
|
53
|
+
? parsePublicTenantMcpUrl(resource, allowedBaseDomains)
|
|
54
|
+
: undefined) ?? parseLegacyTenantMcpPath(url.pathname));
|
|
55
|
+
}
|
|
56
|
+
export function allowedMcpBaseDomains(options) {
|
|
57
|
+
return (options.mcpPublicRouting?.allowedBaseDomains ??
|
|
58
|
+
(options.mcpPublicRouting?.publicBaseDomain !== undefined
|
|
59
|
+
? [options.mcpPublicRouting.publicBaseDomain]
|
|
60
|
+
: []));
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=serve-resource-auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serve-resource-auth.js","sourceRoot":"","sources":["../src/serve-resource-auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../src/serve.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsC,KAAK,MAAM,EAAuB,MAAM,WAAW,CAAC;AAqDjG,OAAO,EAAE,KAAK,aAAa,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../src/serve.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsC,KAAK,MAAM,EAAuB,MAAM,WAAW,CAAC;AAqDjG,OAAO,EAAE,KAAK,aAAa,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AA2C9D,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC,4FAA4F;IAC5F,QAAQ,CAAC,SAAS,CAAC,EAAE,aAAa,CAAC;IACnC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,iGAAiG;AACjG,wBAAsB,YAAY,CAAC,OAAO,GAAE,mBAAwB,GAAG,OAAO,CAAC,cAAc,CAAC,CAgmB7F"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { createServer } from 'node:http';
|
|
2
2
|
import { createJwtVerifier } from '@noodle-borg/auth';
|
|
3
|
-
import { parseLegacyTenantMcpPath, parsePublicTenantMcpUrl, } from '@noodle-borg/module';
|
|
4
3
|
import { SecretBox, staticMasterKeyProvider } from '@noodle-borg/runtime';
|
|
5
4
|
import { noopLogger } from '@noodle-borg/transport-http';
|
|
6
5
|
import { ALERT_EVALUATION_INTERVAL_MS, AlertEvaluator } from './alert-evaluator.js';
|
|
@@ -16,12 +15,13 @@ import { createCustomerVerifierFactory, createHostedCustomerVerifierFactory, } f
|
|
|
16
15
|
import { geminiEnterpriseDefaultResourceForClient } from './gemini-enterprise-oauth.js';
|
|
17
16
|
import { GITHUB_RUN_RECONCILE_INTERVAL_MS, GithubDeployRunReconciler, } from './github/deploy-run-reconciler.js';
|
|
18
17
|
import { normalizeOAuthResource } from './http-util.js';
|
|
19
|
-
import { resolveTenantBridgeAuthVariables } from './managed-config-expressions.js';
|
|
20
18
|
import { ModuleHost } from './modules/host.js';
|
|
21
19
|
import { loadModules } from './modules/loader.js';
|
|
20
|
+
import { createDeveloperGrantAuthorizer, resolveDeveloperGrantStore, } from './oauth/developer-grant-bootstrap.js';
|
|
22
21
|
import { assertPostgresStoreOwnership } from './persistence-options.js';
|
|
23
22
|
import { InMemoryPolicyAssignmentStore } from './policy.js';
|
|
24
23
|
import { ServerRegistry } from './registry.js';
|
|
24
|
+
import { allowedMcpBaseDomains, bridgeAuthForResource, isLoopbackHost, managedSecretForResource, openCustomerCredential, sealCustomerCredential, } from './serve-resource-auth.js';
|
|
25
25
|
import { createServiceHandler } from './service.js';
|
|
26
26
|
import { resolveServiceConfigSource } from './service-config.js';
|
|
27
27
|
import { closeHttpServer, closeServiceResources, listenHttpServer, } from './service-resource-cleanup.js';
|
|
@@ -37,7 +37,7 @@ import { RequestEventBuffer } from './store/request-event-buffer.js';
|
|
|
37
37
|
import { InMemoryRequestEventStore } from './store/request-events.js';
|
|
38
38
|
import { PostgresRequestEventStore } from './store/request-events-postgres.js';
|
|
39
39
|
import { InMemoryUserAppLogStore } from './store/user-app-logs.js';
|
|
40
|
-
import { InMemoryConfigStore, JsonFileArtifactStore, JsonFileGithubConnectionStore, JsonFileGithubDeployRunStore,
|
|
40
|
+
import { InMemoryConfigStore, JsonFileArtifactStore, JsonFileGithubConnectionStore, JsonFileGithubDeployRunStore, } from './store.js';
|
|
41
41
|
import { startWelcomeEmailWorker } from './welcome-email.js';
|
|
42
42
|
/** Start the deploy service on its own `node:http` server (used by the `noodle-service` bin). */
|
|
43
43
|
export async function serveService(options = {}) {
|
|
@@ -296,6 +296,7 @@ export async function serveService(options = {}) {
|
|
|
296
296
|
let resolvedAuthServerIssuer = options.authServerIssuer;
|
|
297
297
|
let registry;
|
|
298
298
|
let oauthStore;
|
|
299
|
+
let developerGrantStore = options.developerGrantStore;
|
|
299
300
|
let delegatedExchange;
|
|
300
301
|
const allowedMcpDomains = allowedMcpBaseDomains(options);
|
|
301
302
|
const rawCustomerVerifierFactory = createCustomerVerifierFactory({
|
|
@@ -318,6 +319,10 @@ export async function serveService(options = {}) {
|
|
|
318
319
|
const { InMemoryOAuthStore } = await import('./oauth/store.js');
|
|
319
320
|
oauthStore = new InMemoryOAuthStore();
|
|
320
321
|
}
|
|
322
|
+
developerGrantStore = await resolveDeveloperGrantStore({
|
|
323
|
+
...(pgPool === undefined ? {} : { pool: pgPool.pool }),
|
|
324
|
+
...(developerGrantStore === undefined ? {} : { store: developerGrantStore }),
|
|
325
|
+
});
|
|
321
326
|
const [{ NoodleOAuthProvider }, { createOAuthApp }] = await Promise.all([
|
|
322
327
|
import('./oauth/provider.js'),
|
|
323
328
|
import('./oauth/app.js'),
|
|
@@ -345,6 +350,11 @@ export async function serveService(options = {}) {
|
|
|
345
350
|
},
|
|
346
351
|
sealCustomerCredential: (credential) => sealCustomerCredential(secretBox, credential),
|
|
347
352
|
signupAuthorizer: controlPlaneStore,
|
|
353
|
+
developerGrantAuthorizer: createDeveloperGrantAuthorizer({
|
|
354
|
+
controlPlane: controlPlaneStore,
|
|
355
|
+
grants: developerGrantStore,
|
|
356
|
+
registry: () => registry,
|
|
357
|
+
}),
|
|
348
358
|
logger: options.logger ?? noopLogger,
|
|
349
359
|
defaultResourceForClient: (client) => geminiEnterpriseDefaultResourceForClient(client, oauthIssuer),
|
|
350
360
|
...(options.oauth.allowedEmailDomain !== undefined
|
|
@@ -381,7 +391,11 @@ export async function serveService(options = {}) {
|
|
|
381
391
|
const allowedEmailDomain = options.controlPlaneAllowedEmailDomain ?? options.oauth?.allowedEmailDomain;
|
|
382
392
|
gates.push(new NoodleOAuthControlPlaneGate({
|
|
383
393
|
verifier: resolvedVerifyOwnerToken,
|
|
384
|
-
audience:
|
|
394
|
+
audience: [
|
|
395
|
+
normalizeOAuthResource(options.publicBaseUrl ?? resolvedAuthServerIssuer),
|
|
396
|
+
`${resolvedAuthServerIssuer}/developer/mcp`,
|
|
397
|
+
`${resolvedAuthServerIssuer}/developer/cli`,
|
|
398
|
+
],
|
|
385
399
|
admins: options.controlPlaneAdmins ?? [],
|
|
386
400
|
signupMode: options.controlPlaneSignupMode ?? 'restricted',
|
|
387
401
|
signupAuthorizer: controlPlaneStore,
|
|
@@ -500,6 +514,7 @@ export async function serveService(options = {}) {
|
|
|
500
514
|
...options,
|
|
501
515
|
readinessProbe,
|
|
502
516
|
controlPlaneStore,
|
|
517
|
+
...(developerGrantStore !== undefined ? { developerGrantStore } : {}),
|
|
503
518
|
...(billingMigrationStore !== undefined ? { billingMigrationStore } : {}),
|
|
504
519
|
...(billingEnforcementProfileStore !== undefined ? { billingEnforcementProfileStore } : {}),
|
|
505
520
|
...(billingEnforcementActivationStore !== undefined
|
|
@@ -567,62 +582,4 @@ export async function serveService(options = {}) {
|
|
|
567
582
|
},
|
|
568
583
|
};
|
|
569
584
|
}
|
|
570
|
-
function isLoopbackHost(host) {
|
|
571
|
-
return host === '127.0.0.1' || host === '::1' || host === 'localhost';
|
|
572
|
-
}
|
|
573
|
-
async function sealCustomerCredential(secretBox, credential) {
|
|
574
|
-
if (secretBox !== undefined) {
|
|
575
|
-
return { enc: 'aes-256-gcm', sealed: await secretBox.seal(credential) };
|
|
576
|
-
}
|
|
577
|
-
return { enc: 'none', values: { token: credential } };
|
|
578
|
-
}
|
|
579
|
-
async function openCustomerCredential(secretBox, envelope) {
|
|
580
|
-
if (envelope.enc === 'none') {
|
|
581
|
-
const token = envelope.values.token;
|
|
582
|
-
if (token === undefined)
|
|
583
|
-
throw new Error('delegated credential envelope missing token');
|
|
584
|
-
return token;
|
|
585
|
-
}
|
|
586
|
-
if (secretBox === undefined)
|
|
587
|
-
throw new Error('secret box is required for delegated credential');
|
|
588
|
-
return secretBox.open(envelope.sealed);
|
|
589
|
-
}
|
|
590
|
-
async function bridgeAuthForResource(registry, resource, allowedBaseDomains) {
|
|
591
|
-
const tenant = tenantRefFromResource(resource, allowedBaseDomains);
|
|
592
|
-
if (tenant === undefined)
|
|
593
|
-
return undefined;
|
|
594
|
-
const target = tenant.serverVersion === undefined
|
|
595
|
-
? await registry.getActiveByTenant(tenant)
|
|
596
|
-
: await registry.getActiveByTenantVersion(tenant, tenant.serverVersion);
|
|
597
|
-
const auth = target?.served.artifact.server.auth;
|
|
598
|
-
if (auth?.kind !== 'bridge')
|
|
599
|
-
return undefined;
|
|
600
|
-
const variables = await registry.configStore.resolveConfigValues('variable', resolveConfigScope(tenant));
|
|
601
|
-
return resolveTenantBridgeAuthVariables(auth, variables);
|
|
602
|
-
}
|
|
603
|
-
async function managedSecretForResource(registry, resource, name, allowedBaseDomains) {
|
|
604
|
-
const tenant = tenantRefFromResource(resource, allowedBaseDomains);
|
|
605
|
-
if (tenant === undefined)
|
|
606
|
-
return undefined;
|
|
607
|
-
const secrets = await registry.configStore.resolveConfigValues('secret', resolveConfigScope(tenant));
|
|
608
|
-
return secrets[name];
|
|
609
|
-
}
|
|
610
|
-
function tenantRefFromResource(resource, allowedBaseDomains) {
|
|
611
|
-
let url;
|
|
612
|
-
try {
|
|
613
|
-
url = new URL(resource);
|
|
614
|
-
}
|
|
615
|
-
catch {
|
|
616
|
-
return undefined;
|
|
617
|
-
}
|
|
618
|
-
return ((allowedBaseDomains.length > 0
|
|
619
|
-
? parsePublicTenantMcpUrl(resource, allowedBaseDomains)
|
|
620
|
-
: undefined) ?? parseLegacyTenantMcpPath(url.pathname));
|
|
621
|
-
}
|
|
622
|
-
function allowedMcpBaseDomains(options) {
|
|
623
|
-
return (options.mcpPublicRouting?.allowedBaseDomains ??
|
|
624
|
-
(options.mcpPublicRouting?.publicBaseDomain !== undefined
|
|
625
|
-
? [options.mcpPublicRouting.publicBaseDomain]
|
|
626
|
-
: []));
|
|
627
|
-
}
|
|
628
585
|
//# sourceMappingURL=serve.js.map
|