@noodleseed/one 0.16.0 → 0.18.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 +52 -5
- package/dist/cli.js.map +1 -1
- package/dist/commands/alerts-ops.d.ts +2 -0
- package/dist/commands/alerts-ops.d.ts.map +1 -0
- package/dist/commands/alerts-ops.js +249 -0
- package/dist/commands/alerts-ops.js.map +1 -0
- package/dist/commands/analytics-ops.d.ts +13 -0
- package/dist/commands/analytics-ops.d.ts.map +1 -1
- package/dist/commands/analytics-ops.js +5 -2
- package/dist/commands/analytics-ops.js.map +1 -1
- package/dist/commands/apps-ops.d.ts +17 -0
- package/dist/commands/apps-ops.d.ts.map +1 -0
- package/dist/commands/apps-ops.js +285 -0
- package/dist/commands/apps-ops.js.map +1 -0
- package/dist/commands/archive-ops.js +2 -2
- package/dist/commands/archive-ops.js.map +1 -1
- package/dist/commands/catalog-data-config.d.ts +9 -0
- package/dist/commands/catalog-data-config.d.ts.map +1 -0
- package/dist/commands/catalog-data-config.js +67 -0
- package/dist/commands/catalog-data-config.js.map +1 -0
- package/dist/commands/catalog-data-core.d.ts +13 -0
- package/dist/commands/catalog-data-core.d.ts.map +1 -0
- package/dist/commands/catalog-data-core.js +354 -0
- package/dist/commands/catalog-data-core.js.map +1 -0
- package/dist/commands/catalog-data-resources.d.ts +8 -0
- package/dist/commands/catalog-data-resources.d.ts.map +1 -0
- package/dist/commands/catalog-data-resources.js +551 -0
- package/dist/commands/catalog-data-resources.js.map +1 -0
- package/dist/commands/catalog-dispatch.d.ts +15 -0
- package/dist/commands/catalog-dispatch.d.ts.map +1 -0
- package/dist/commands/catalog-dispatch.js +95 -0
- package/dist/commands/catalog-dispatch.js.map +1 -0
- package/dist/commands/catalog-render.d.ts +28 -0
- package/dist/commands/catalog-render.d.ts.map +1 -0
- package/dist/commands/catalog-render.js +142 -0
- package/dist/commands/catalog-render.js.map +1 -0
- package/dist/commands/catalog-types.d.ts +46 -0
- package/dist/commands/catalog-types.d.ts.map +1 -0
- package/dist/commands/catalog-types.js +7 -0
- package/dist/commands/catalog-types.js.map +1 -0
- package/dist/commands/catalog.d.ts +30 -0
- package/dist/commands/catalog.d.ts.map +1 -0
- package/dist/commands/catalog.js +108 -0
- package/dist/commands/catalog.js.map +1 -0
- package/dist/commands/commands-ops.d.ts +2 -0
- package/dist/commands/commands-ops.d.ts.map +1 -0
- package/dist/commands/commands-ops.js +19 -0
- package/dist/commands/commands-ops.js.map +1 -0
- package/dist/commands/deploy-ops.d.ts +45 -3
- package/dist/commands/deploy-ops.d.ts.map +1 -1
- package/dist/commands/deploy-ops.js +200 -227
- package/dist/commands/deploy-ops.js.map +1 -1
- package/dist/commands/deploy-status-ops.d.ts +13 -0
- package/dist/commands/deploy-status-ops.d.ts.map +1 -0
- package/dist/commands/deploy-status-ops.js +252 -0
- package/dist/commands/deploy-status-ops.js.map +1 -0
- package/dist/commands/deployments-ops.d.ts +30 -0
- package/dist/commands/deployments-ops.d.ts.map +1 -0
- package/dist/commands/deployments-ops.js +248 -0
- package/dist/commands/deployments-ops.js.map +1 -0
- package/dist/commands/envs-ops.d.ts +8 -0
- package/dist/commands/envs-ops.d.ts.map +1 -0
- package/dist/commands/envs-ops.js +240 -0
- package/dist/commands/envs-ops.js.map +1 -0
- package/dist/commands/github-ops.d.ts +15 -0
- package/dist/commands/github-ops.d.ts.map +1 -0
- package/dist/commands/github-ops.js +316 -0
- package/dist/commands/github-ops.js.map +1 -0
- package/dist/commands/github-runs-ops.d.ts +32 -0
- package/dist/commands/github-runs-ops.d.ts.map +1 -0
- package/dist/commands/github-runs-ops.js +132 -0
- package/dist/commands/github-runs-ops.js.map +1 -0
- package/dist/commands/github-shared.d.ts +60 -0
- package/dist/commands/github-shared.d.ts.map +1 -0
- package/dist/commands/github-shared.js +175 -0
- package/dist/commands/github-shared.js.map +1 -0
- package/dist/commands/org-admin.d.ts.map +1 -1
- package/dist/commands/org-admin.js +223 -43
- package/dist/commands/org-admin.js.map +1 -1
- package/dist/commands/output.d.ts +35 -0
- package/dist/commands/output.d.ts.map +1 -0
- package/dist/commands/output.js +34 -0
- package/dist/commands/output.js.map +1 -0
- package/dist/commands/resource-shared.d.ts +132 -0
- package/dist/commands/resource-shared.d.ts.map +1 -0
- package/dist/commands/resource-shared.js +159 -0
- package/dist/commands/resource-shared.js.map +1 -0
- package/dist/commands/session.d.ts +6 -9
- package/dist/commands/session.d.ts.map +1 -1
- package/dist/commands/session.js +42 -116
- package/dist/commands/session.js.map +1 -1
- package/dist/commands/shared.d.ts.map +1 -1
- package/dist/commands/shared.js +3 -91
- package/dist/commands/shared.js.map +1 -1
- package/dist/commands/target-picker.d.ts +44 -0
- package/dist/commands/target-picker.d.ts.map +1 -0
- package/dist/commands/target-picker.js +88 -0
- package/dist/commands/target-picker.js.map +1 -0
- package/dist/commands/update-ops.js +1 -1
- package/dist/diagnostics.d.ts +5 -0
- package/dist/diagnostics.d.ts.map +1 -1
- package/dist/diagnostics.js +1 -1
- package/dist/diagnostics.js.map +1 -1
- package/dist/doctor.d.ts.map +1 -1
- package/dist/doctor.js +33 -0
- package/dist/doctor.js.map +1 -1
- package/dist/fire.d.ts +94 -0
- package/dist/fire.d.ts.map +1 -0
- package/dist/fire.js +418 -0
- package/dist/fire.js.map +1 -0
- package/dist/flavor.d.ts +19 -0
- package/dist/flavor.d.ts.map +1 -0
- package/dist/flavor.js +95 -0
- package/dist/flavor.js.map +1 -0
- package/dist/project.js +2 -2
- package/dist/prompts.d.ts.map +1 -1
- package/dist/prompts.js +30 -17
- package/dist/prompts.js.map +1 -1
- package/dist/relative-time.d.ts +8 -0
- package/dist/relative-time.d.ts.map +1 -0
- package/dist/relative-time.js +29 -0
- package/dist/relative-time.js.map +1 -0
- package/dist/table.d.ts +47 -0
- package/dist/table.d.ts.map +1 -0
- package/dist/table.js +152 -0
- package/dist/table.js.map +1 -0
- package/dist/update-binary.js +1 -1
- package/dist/update-check.d.ts +1 -1
- package/dist/update-check.js +1 -1
- package/dist/update.js +1 -1
- package/dist/watch.d.ts +52 -0
- package/dist/watch.d.ts.map +1 -0
- package/dist/watch.js +177 -0
- package/dist/watch.js.map +1 -0
- package/node_modules/@noodle-borg/agent-kit/dist/curated/command-groups.d.ts.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/curated/command-groups.js +28 -1
- package/node_modules/@noodle-borg/agent-kit/dist/curated/command-groups.js.map +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 +6 -0
- package/node_modules/@noodle-borg/agent-kit/dist/generated/surface.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/package.json +1 -1
- package/node_modules/@noodle-borg/authoring/dist/connectors.js +14 -0
- package/node_modules/@noodle-borg/authoring/dist/connectors.js.map +1 -1
- package/node_modules/@noodle-borg/authoring/dist/recording.js +18 -23
- package/node_modules/@noodle-borg/authoring/dist/recording.js.map +1 -1
- package/node_modules/@noodle-borg/connector-defs/dist/compile.js +9 -0
- package/node_modules/@noodle-borg/connector-defs/dist/compile.js.map +1 -1
- package/node_modules/@noodle-borg/openapi-import/dist/index.d.ts.map +1 -1
- package/node_modules/@noodle-borg/openapi-import/dist/index.js +3 -1
- package/node_modules/@noodle-borg/openapi-import/dist/index.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/alert-evaluator.d.ts +57 -0
- package/node_modules/@noodle-borg/service/dist/alert-evaluator.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/alert-evaluator.js +158 -0
- package/node_modules/@noodle-borg/service/dist/alert-evaluator.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/alert-webhook.d.ts +72 -0
- package/node_modules/@noodle-borg/service/dist/alert-webhook.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/alert-webhook.js +138 -0
- package/node_modules/@noodle-borg/service/dist/alert-webhook.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/github/app-client.d.ts +49 -0
- package/node_modules/@noodle-borg/service/dist/github/app-client.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/github/app-client.js +23 -0
- package/node_modules/@noodle-borg/service/dist/github/app-client.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/github/install-nonce.d.ts +23 -0
- package/node_modules/@noodle-borg/service/dist/github/install-nonce.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/github/install-nonce.js +57 -0
- package/node_modules/@noodle-borg/service/dist/github/install-nonce.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/github/pending-installations.d.ts +38 -0
- package/node_modules/@noodle-borg/service/dist/github/pending-installations.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/github/pending-installations.js +41 -0
- package/node_modules/@noodle-borg/service/dist/github/pending-installations.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/index.d.ts +15 -1
- package/node_modules/@noodle-borg/service/dist/index.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/index.js +15 -1
- package/node_modules/@noodle-borg/service/dist/index.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/options.d.ts +47 -1
- package/node_modules/@noodle-borg/service/dist/options.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/registry-state.d.ts +28 -7
- package/node_modules/@noodle-borg/service/dist/registry-state.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/registry-state.js +116 -3
- package/node_modules/@noodle-borg/service/dist/registry-state.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/registry.d.ts +14 -1
- package/node_modules/@noodle-borg/service/dist/registry.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/registry.js +20 -45
- package/node_modules/@noodle-borg/service/dist/registry.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/alerts-dispatch.d.ts +28 -0
- package/node_modules/@noodle-borg/service/dist/routes/alerts-dispatch.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/routes/alerts-dispatch.js +50 -0
- package/node_modules/@noodle-borg/service/dist/routes/alerts-dispatch.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/routes/alerts.d.ts +39 -0
- package/node_modules/@noodle-borg/service/dist/routes/alerts.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/routes/alerts.js +204 -0
- package/node_modules/@noodle-borg/service/dist/routes/alerts.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/routes/analytics-dispatch.d.ts +23 -0
- package/node_modules/@noodle-borg/service/dist/routes/analytics-dispatch.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/routes/analytics-dispatch.js +53 -0
- package/node_modules/@noodle-borg/service/dist/routes/analytics-dispatch.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/routes/apps.d.ts +24 -0
- package/node_modules/@noodle-borg/service/dist/routes/apps.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/routes/apps.js +72 -0
- package/node_modules/@noodle-borg/service/dist/routes/apps.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/routes/contracts.d.ts +465 -0
- package/node_modules/@noodle-borg/service/dist/routes/contracts.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/routes/contracts.js +233 -0
- package/node_modules/@noodle-borg/service/dist/routes/contracts.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/routes/deployments.d.ts +12 -1
- package/node_modules/@noodle-borg/service/dist/routes/deployments.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/deployments.js +31 -2
- package/node_modules/@noodle-borg/service/dist/routes/deployments.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/endpoint-enrichment.d.ts +17 -0
- package/node_modules/@noodle-borg/service/dist/routes/endpoint-enrichment.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/routes/endpoint-enrichment.js +15 -0
- package/node_modules/@noodle-borg/service/dist/routes/endpoint-enrichment.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/routes/envs.d.ts +22 -0
- package/node_modules/@noodle-borg/service/dist/routes/envs.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/routes/envs.js +46 -0
- package/node_modules/@noodle-borg/service/dist/routes/envs.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/routes/github-connection.d.ts +29 -0
- package/node_modules/@noodle-borg/service/dist/routes/github-connection.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/routes/github-connection.js +202 -0
- package/node_modules/@noodle-borg/service/dist/routes/github-connection.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/routes/github-dispatch.d.ts +30 -0
- package/node_modules/@noodle-borg/service/dist/routes/github-dispatch.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/routes/github-dispatch.js +95 -0
- package/node_modules/@noodle-borg/service/dist/routes/github-dispatch.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/routes/github-runs.d.ts +8 -0
- package/node_modules/@noodle-borg/service/dist/routes/github-runs.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/routes/github-runs.js +33 -0
- package/node_modules/@noodle-borg/service/dist/routes/github-runs.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/routes/github-setup.d.ts +28 -0
- package/node_modules/@noodle-borg/service/dist/routes/github-setup.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/routes/github-setup.js +80 -0
- package/node_modules/@noodle-borg/service/dist/routes/github-setup.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/routes/github-webhook.d.ts +29 -0
- package/node_modules/@noodle-borg/service/dist/routes/github-webhook.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/routes/github-webhook.js +355 -0
- package/node_modules/@noodle-borg/service/dist/routes/github-webhook.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/routes/org-admin-dispatch.d.ts +27 -0
- package/node_modules/@noodle-borg/service/dist/routes/org-admin-dispatch.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/routes/org-admin-dispatch.js +61 -0
- package/node_modules/@noodle-borg/service/dist/routes/org-admin-dispatch.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/routes/org-admin.d.ts +5 -0
- package/node_modules/@noodle-borg/service/dist/routes/org-admin.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/org-admin.js +13 -1
- package/node_modules/@noodle-borg/service/dist/routes/org-admin.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/paths.d.ts +64 -1
- package/node_modules/@noodle-borg/service/dist/routes/paths.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/paths.js +170 -1
- package/node_modules/@noodle-borg/service/dist/routes/paths.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/resource-read-dispatch.d.ts +33 -0
- package/node_modules/@noodle-borg/service/dist/routes/resource-read-dispatch.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/routes/resource-read-dispatch.js +69 -0
- package/node_modules/@noodle-borg/service/dist/routes/resource-read-dispatch.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 +42 -1
- 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 +81 -82
- package/node_modules/@noodle-borg/service/dist/service.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/alert-rules-json-file.d.ts +21 -0
- package/node_modules/@noodle-borg/service/dist/store/alert-rules-json-file.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/store/alert-rules-json-file.js +115 -0
- package/node_modules/@noodle-borg/service/dist/store/alert-rules-json-file.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/store/alert-rules.d.ts +108 -0
- package/node_modules/@noodle-borg/service/dist/store/alert-rules.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/store/alert-rules.js +181 -0
- package/node_modules/@noodle-borg/service/dist/store/alert-rules.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/store/control-plane.d.ts +1 -0
- package/node_modules/@noodle-borg/service/dist/store/control-plane.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/control-plane.js +3 -0
- package/node_modules/@noodle-borg/service/dist/store/control-plane.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/github-connections-json-file.d.ts +24 -0
- package/node_modules/@noodle-borg/service/dist/store/github-connections-json-file.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/store/github-connections-json-file.js +141 -0
- package/node_modules/@noodle-borg/service/dist/store/github-connections-json-file.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/store/github-connections.d.ts +31 -0
- package/node_modules/@noodle-borg/service/dist/store/github-connections.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/store/github-connections.js +120 -0
- package/node_modules/@noodle-borg/service/dist/store/github-connections.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/store/github-runs-json-file.d.ts +22 -0
- package/node_modules/@noodle-borg/service/dist/store/github-runs-json-file.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/store/github-runs-json-file.js +116 -0
- package/node_modules/@noodle-borg/service/dist/store/github-runs-json-file.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/store/github-runs.d.ts +51 -0
- package/node_modules/@noodle-borg/service/dist/store/github-runs.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/store/github-runs.js +158 -0
- package/node_modules/@noodle-borg/service/dist/store/github-runs.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/store/in-memory.d.ts +32 -0
- package/node_modules/@noodle-borg/service/dist/store/in-memory.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/store/in-memory.js +169 -0
- package/node_modules/@noodle-borg/service/dist/store/in-memory.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/store/json-file.d.ts +14 -1
- package/node_modules/@noodle-borg/service/dist/store/json-file.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/json-file.js +54 -1
- package/node_modules/@noodle-borg/service/dist/store/json-file.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/pending-installations-postgres.d.ts +19 -0
- package/node_modules/@noodle-borg/service/dist/store/pending-installations-postgres.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/store/pending-installations-postgres.js +46 -0
- package/node_modules/@noodle-borg/service/dist/store/pending-installations-postgres.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres-alerts.d.ts +26 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres-alerts.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres-alerts.js +142 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres-alerts.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres-apps.d.ts +11 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres-apps.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres-apps.js +31 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres-apps.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres-config.d.ts +21 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres-config.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres-config.js +80 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres-config.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres-control-plane.d.ts +1 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres-control-plane.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/postgres-control-plane.js +6 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres-control-plane.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/postgres-envs.d.ts +7 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres-envs.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres-envs.js +34 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres-envs.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres-github-runs.d.ts +9 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres-github-runs.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres-github-runs.js +113 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres-github-runs.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres-github.d.ts +13 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres-github.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres-github.js +130 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres-github.js.map +1 -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 +85 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres-schema.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/postgres.d.ts +32 -2
- package/node_modules/@noodle-borg/service/dist/store/postgres.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/postgres.js +72 -75
- package/node_modules/@noodle-borg/service/dist/store/postgres.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/records.d.ts +56 -3
- package/node_modules/@noodle-borg/service/dist/store/records.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/records.js +158 -0
- package/node_modules/@noodle-borg/service/dist/store/records.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/validate.d.ts +2 -0
- package/node_modules/@noodle-borg/service/dist/store/validate.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/validate.js +7 -0
- package/node_modules/@noodle-borg/service/dist/store/validate.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store.d.ts +265 -17
- package/node_modules/@noodle-borg/service/dist/store.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store.js +10 -118
- package/node_modules/@noodle-borg/service/dist/store.js.map +1 -1
- package/node_modules/@noodle-borg/service/package.json +2 -1
- package/package.json +2 -2
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { handleGithubConnection, handleGithubInstallationClaim, handleGithubInstallUrl, } from './github-connection.js';
|
|
2
|
+
import { handleGithubRunsList } from './github-runs.js';
|
|
3
|
+
import { handleGithubInstallationPending, handleGithubSetup } from './github-setup.js';
|
|
4
|
+
import { handleGithubWebhook } from './github-webhook.js';
|
|
5
|
+
import { isGithubInstallationClaimPath, isGithubInstallationPendingPath, isGithubInstallUrlPath, isGithubSetupPath, isGithubWebhookPath, parseGithubConnectionPath, parseGithubRunsPath, } from './paths.js';
|
|
6
|
+
/** Try the GHD-1 GitHub routes; returns true when the request was handled (or a guard ended it). */
|
|
7
|
+
export function dispatchGithubRoutes(req, res, url, deps) {
|
|
8
|
+
const { applySecurityHeaders, enforceHttps, sendJson, tls } = deps;
|
|
9
|
+
const connectionRef = parseGithubConnectionPath(url.pathname);
|
|
10
|
+
if (connectionRef !== undefined &&
|
|
11
|
+
(req.method === 'GET' || req.method === 'POST' || req.method === 'DELETE')) {
|
|
12
|
+
applySecurityHeaders(res, tls);
|
|
13
|
+
if (enforceHttps(req, res, tls))
|
|
14
|
+
return true;
|
|
15
|
+
handleGithubConnection(req, res, deps.gate, deps.controlPlane, deps.githubConnectionStore, deps.githubAppClient, deps.githubApp, deps.maxBody, connectionRef, deps.audit).catch(() => {
|
|
16
|
+
if (!res.headersSent)
|
|
17
|
+
sendJson(res, 500, { error: 'internal error' });
|
|
18
|
+
});
|
|
19
|
+
return true;
|
|
20
|
+
}
|
|
21
|
+
if (isGithubInstallUrlPath(url.pathname) && req.method === 'GET') {
|
|
22
|
+
applySecurityHeaders(res, tls);
|
|
23
|
+
if (enforceHttps(req, res, tls))
|
|
24
|
+
return true;
|
|
25
|
+
handleGithubInstallUrl(req, res, deps.gate, deps.githubApp, url).catch(() => {
|
|
26
|
+
if (!res.headersSent)
|
|
27
|
+
sendJson(res, 500, { error: 'internal error' });
|
|
28
|
+
});
|
|
29
|
+
return true;
|
|
30
|
+
}
|
|
31
|
+
if (isGithubInstallationClaimPath(url.pathname) && req.method === 'POST') {
|
|
32
|
+
applySecurityHeaders(res, tls);
|
|
33
|
+
if (enforceHttps(req, res, tls))
|
|
34
|
+
return true;
|
|
35
|
+
handleGithubInstallationClaim(req, res, deps.gate, deps.controlPlane, deps.githubAppClient, deps.githubApp, deps.pendingGithubInstallationStore, deps.maxBody).catch(() => {
|
|
36
|
+
if (!res.headersSent)
|
|
37
|
+
sendJson(res, 500, { error: 'internal error' });
|
|
38
|
+
});
|
|
39
|
+
return true;
|
|
40
|
+
}
|
|
41
|
+
// GHD-2 deploy-runs read surface: org-member list behind `noodle github runs` + the console feed.
|
|
42
|
+
const runsRef = parseGithubRunsPath(url.pathname);
|
|
43
|
+
if (runsRef !== undefined && req.method === 'GET') {
|
|
44
|
+
applySecurityHeaders(res, tls);
|
|
45
|
+
if (enforceHttps(req, res, tls))
|
|
46
|
+
return true;
|
|
47
|
+
handleGithubRunsList(req, res, deps.gate, deps.controlPlane, deps.githubDeployRunStore, runsRef, url).catch(() => {
|
|
48
|
+
if (!res.headersSent)
|
|
49
|
+
sendJson(res, 500, { error: 'internal error' });
|
|
50
|
+
});
|
|
51
|
+
return true;
|
|
52
|
+
}
|
|
53
|
+
// GHD-2 webhook intake (ADR 0111 §6): signature-gated, unauthenticated by necessity. The handler
|
|
54
|
+
// owns the full defense stack — see `github-webhook.ts`.
|
|
55
|
+
if (isGithubWebhookPath(url.pathname) && req.method === 'POST') {
|
|
56
|
+
applySecurityHeaders(res, tls);
|
|
57
|
+
if (enforceHttps(req, res, tls))
|
|
58
|
+
return true;
|
|
59
|
+
handleGithubWebhook(req, res, {
|
|
60
|
+
connectionStore: deps.githubConnectionStore,
|
|
61
|
+
runStore: deps.githubDeployRunStore,
|
|
62
|
+
webhookSecret: deps.githubApp?.webhookSecret,
|
|
63
|
+
audit: deps.audit,
|
|
64
|
+
maxBody: deps.maxBody,
|
|
65
|
+
}).catch(() => {
|
|
66
|
+
if (!res.headersSent)
|
|
67
|
+
sendJson(res, 500, { error: 'internal error' });
|
|
68
|
+
});
|
|
69
|
+
return true;
|
|
70
|
+
}
|
|
71
|
+
// GHD-1.4 CLI hand-off: the GitHub App's Setup URL landing + the CLI's install poll. See
|
|
72
|
+
// `github-setup.ts` for why these two small routes exist.
|
|
73
|
+
if (isGithubSetupPath(url.pathname) && req.method === 'GET') {
|
|
74
|
+
applySecurityHeaders(res, tls);
|
|
75
|
+
if (enforceHttps(req, res, tls))
|
|
76
|
+
return true;
|
|
77
|
+
handleGithubSetup(req, res, deps.pendingGithubInstallationStore, deps.githubApp, url).catch(() => {
|
|
78
|
+
if (!res.headersSent)
|
|
79
|
+
sendJson(res, 500, { error: 'internal error' });
|
|
80
|
+
});
|
|
81
|
+
return true;
|
|
82
|
+
}
|
|
83
|
+
if (isGithubInstallationPendingPath(url.pathname) && req.method === 'GET') {
|
|
84
|
+
applySecurityHeaders(res, tls);
|
|
85
|
+
if (enforceHttps(req, res, tls))
|
|
86
|
+
return true;
|
|
87
|
+
handleGithubInstallationPending(req, res, deps.gate, deps.controlPlane, deps.pendingGithubInstallationStore, deps.githubApp, url).catch(() => {
|
|
88
|
+
if (!res.headersSent)
|
|
89
|
+
sendJson(res, 500, { error: 'internal error' });
|
|
90
|
+
});
|
|
91
|
+
return true;
|
|
92
|
+
}
|
|
93
|
+
return false;
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=github-dispatch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github-dispatch.js","sourceRoot":"","sources":["../../src/routes/github-dispatch.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { IncomingMessage, ServerResponse } from 'node:http';
|
|
2
|
+
import type { DeployAuthGate } from '../auth/deploy-gate.js';
|
|
3
|
+
import type { ControlPlaneStore, GithubDeployRunStore } from '../store.js';
|
|
4
|
+
export declare function handleGithubRunsList(req: IncomingMessage, res: ServerResponse, gate: DeployAuthGate, controlPlane: ControlPlaneStore, runStore: GithubDeployRunStore, ref: {
|
|
5
|
+
readonly org: string;
|
|
6
|
+
readonly app: string;
|
|
7
|
+
}, url: URL): Promise<void>;
|
|
8
|
+
//# sourceMappingURL=github-runs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github-runs.d.ts","sourceRoot":"","sources":["../../src/routes/github-runs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE7D,OAAO,KAAK,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAc3E,wBAAsB,oBAAoB,CACxC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,IAAI,EAAE,cAAc,EACpB,YAAY,EAAE,iBAAiB,EAC/B,QAAQ,EAAE,oBAAoB,EAC9B,GAAG,EAAE;IAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CAAE,EACnD,GAAG,EAAE,GAAG,GACP,OAAO,CAAC,IAAI,CAAC,CAyBf"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { sendJson } from '../http-util.js';
|
|
2
|
+
import { sendContract } from './apps.js';
|
|
3
|
+
import { GithubRunsListResponseSchema } from './contracts.js';
|
|
4
|
+
import { authorizeTenantControl } from './control-plane.js';
|
|
5
|
+
/**
|
|
6
|
+
* `GET /v1/orgs/{org}/apps/{app}/github/runs` (GHD-2): the deploy-runs read surface behind
|
|
7
|
+
* `noodle github runs` and the console feed. Org MEMBER read (mirrors the connection GET — runs are
|
|
8
|
+
* operational visibility, not an owner-only control). Newest-first with the store's explicit cap +
|
|
9
|
+
* `truncated` flag; `?limit=` tightens it (1..200).
|
|
10
|
+
*/
|
|
11
|
+
const MAX_LIST_LIMIT = 200;
|
|
12
|
+
export async function handleGithubRunsList(req, res, gate, controlPlane, runStore, ref, url) {
|
|
13
|
+
const identity = await authorizeTenantControl(req, res, gate, controlPlane, ref.org);
|
|
14
|
+
if (identity === false)
|
|
15
|
+
return;
|
|
16
|
+
const limitParam = url.searchParams.get('limit');
|
|
17
|
+
let limit;
|
|
18
|
+
if (limitParam !== null) {
|
|
19
|
+
const parsed = Number(limitParam);
|
|
20
|
+
if (!Number.isInteger(parsed) || parsed < 1 || parsed > MAX_LIST_LIMIT) {
|
|
21
|
+
return sendJson(res, 400, {
|
|
22
|
+
error: `"limit" must be an integer between 1 and ${MAX_LIST_LIMIT}`,
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
limit = parsed;
|
|
26
|
+
}
|
|
27
|
+
const result = await runStore.listDeployRuns(ref.org, ref.app, limit !== undefined ? { limit } : {});
|
|
28
|
+
return sendContract(res, () => GithubRunsListResponseSchema.parse({
|
|
29
|
+
ok: true,
|
|
30
|
+
data: { runs: result.runs, truncated: result.truncated },
|
|
31
|
+
}));
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=github-runs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github-runs.js","sourceRoot":"","sources":["../../src/routes/github-runs.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,4BAA4B,EAAE,MAAM,gBAAgB,CAAC;AAC9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAE5D;;;;;GAKG;AAEH,MAAM,cAAc,GAAG,GAAG,CAAC;AAE3B,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,GAAoB,EACpB,GAAmB,EACnB,IAAoB,EACpB,YAA+B,EAC/B,QAA8B,EAC9B,GAAmD,EACnD,GAAQ;IAER,MAAM,QAAQ,GAAG,MAAM,sBAAsB,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;IACrF,IAAI,QAAQ,KAAK,KAAK;QAAE,OAAO;IAC/B,MAAM,UAAU,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACjD,IAAI,KAAyB,CAAC;IAC9B,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;QACxB,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;QAClC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,IAAI,MAAM,GAAG,cAAc,EAAE,CAAC;YACvE,OAAO,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE;gBACxB,KAAK,EAAE,4CAA4C,cAAc,EAAE;aACpE,CAAC,CAAC;QACL,CAAC;QACD,KAAK,GAAG,MAAM,CAAC;IACjB,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,cAAc,CAC1C,GAAG,CAAC,GAAG,EACP,GAAG,CAAC,GAAG,EACP,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CACrC,CAAC;IACF,OAAO,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,CAC5B,4BAA4B,CAAC,KAAK,CAAC;QACjC,EAAE,EAAE,IAAI;QACR,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE;KACzD,CAAC,CACH,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GHD-1.4 CLI hand-off routes: `GET /v1/github/setup` lands GitHub's post-install browser redirect (the
|
|
3
|
+
* GitHub App's configured Setup URL — an operator-side, one-time App-settings field, not a code path) and
|
|
4
|
+
* `GET /v1/github/installations/pending` lets the polling CLI discover the installationId it stashed. See
|
|
5
|
+
* `../github/pending-installations.ts` for the storage rationale. Neither route touches the durable
|
|
6
|
+
* `GithubConnectionStore` — connecting still requires the owner-gated `POST .../github/connection`
|
|
7
|
+
* (`github-connection.ts`) once the CLI has picked a repository via `installations/claim`.
|
|
8
|
+
*/
|
|
9
|
+
import type { IncomingMessage, ServerResponse } from 'node:http';
|
|
10
|
+
import type { DeployAuthGate } from '../auth/deploy-gate.js';
|
|
11
|
+
import type { GithubAppConfig } from '../github/app-client.js';
|
|
12
|
+
import type { PendingGithubInstallationStore } from '../github/pending-installations.js';
|
|
13
|
+
import type { ControlPlaneStore } from '../store.js';
|
|
14
|
+
/**
|
|
15
|
+
* `GET /v1/github/setup?installation_id=...&state=...` — the GitHub App's Setup URL. Unauthenticated by
|
|
16
|
+
* necessity: GitHub's redirect is a bare browser GET with no bearer token, so the signed `state` nonce is
|
|
17
|
+
* the only protection. A tampered/expired/malformed state or a missing/non-numeric `installation_id` is
|
|
18
|
+
* rejected before anything is stored — no partial/garbage pending entry is ever written.
|
|
19
|
+
*/
|
|
20
|
+
export declare function handleGithubSetup(_req: IncomingMessage, res: ServerResponse, pendingStore: PendingGithubInstallationStore, githubApp: GithubAppConfig | undefined, url: URL): Promise<void>;
|
|
21
|
+
/**
|
|
22
|
+
* `GET /v1/github/installations/pending?state=...` — the CLI's poll target. Requires the same signed-in
|
|
23
|
+
* subject who requested `install-url` (nonce subject match, mirroring `installations/claim`) and org
|
|
24
|
+
* membership on the nonce's bound org; 404 until the setup redirect has landed, 200 with
|
|
25
|
+
* `{installationId}` after.
|
|
26
|
+
*/
|
|
27
|
+
export declare function handleGithubInstallationPending(req: IncomingMessage, res: ServerResponse, gate: DeployAuthGate, controlPlane: ControlPlaneStore, pendingStore: PendingGithubInstallationStore, githubApp: GithubAppConfig | undefined, url: URL): Promise<void>;
|
|
28
|
+
//# sourceMappingURL=github-setup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github-setup.d.ts","sourceRoot":"","sources":["../../src/routes/github-setup.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE/D,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,oCAAoC,CAAC;AAEzF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAuBrD;;;;;GAKG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,eAAe,EACrB,GAAG,EAAE,cAAc,EACnB,YAAY,EAAE,8BAA8B,EAC5C,SAAS,EAAE,eAAe,GAAG,SAAS,EACtC,GAAG,EAAE,GAAG,GACP,OAAO,CAAC,IAAI,CAAC,CAef;AAED;;;;;GAKG;AACH,wBAAsB,+BAA+B,CACnD,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,IAAI,EAAE,cAAc,EACpB,YAAY,EAAE,iBAAiB,EAC/B,YAAY,EAAE,8BAA8B,EAC5C,SAAS,EAAE,eAAe,GAAG,SAAS,EACtC,GAAG,EAAE,GAAG,GACP,OAAO,CAAC,IAAI,CAAC,CA8Bf"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { resolveGithubStateSecret, verifyInstallNonce } from '../github/install-nonce.js';
|
|
2
|
+
import { sendForbidden, sendJson } from '../http-util.js';
|
|
3
|
+
import { authorizeControlPlane } from './control-plane.js';
|
|
4
|
+
const SETUP_OK_HTML = '<!doctype html><html><head><meta charset="utf-8"><title>Noodle Seed</title></head>' +
|
|
5
|
+
'<body style="font-family:system-ui,sans-serif;padding:2rem"><p>GitHub installation received. ' +
|
|
6
|
+
'You can return to your terminal.</p></body></html>';
|
|
7
|
+
const SETUP_ERROR_HTML = '<!doctype html><html><head><meta charset="utf-8"><title>Noodle Seed</title></head>' +
|
|
8
|
+
'<body style="font-family:system-ui,sans-serif;padding:2rem"><p>This installation link is invalid or ' +
|
|
9
|
+
'has expired. Return to your terminal and run <code>noodle github connect</code> again.</p></body></html>';
|
|
10
|
+
function sendHtml(res, status, html) {
|
|
11
|
+
res.writeHead(status, { 'content-type': 'text/html; charset=utf-8' });
|
|
12
|
+
res.end(html);
|
|
13
|
+
}
|
|
14
|
+
function parsePositiveInt(value) {
|
|
15
|
+
if (value === null)
|
|
16
|
+
return undefined;
|
|
17
|
+
const n = Number(value);
|
|
18
|
+
return Number.isInteger(n) && n > 0 ? n : undefined;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* `GET /v1/github/setup?installation_id=...&state=...` — the GitHub App's Setup URL. Unauthenticated by
|
|
22
|
+
* necessity: GitHub's redirect is a bare browser GET with no bearer token, so the signed `state` nonce is
|
|
23
|
+
* the only protection. A tampered/expired/malformed state or a missing/non-numeric `installation_id` is
|
|
24
|
+
* rejected before anything is stored — no partial/garbage pending entry is ever written.
|
|
25
|
+
*/
|
|
26
|
+
export async function handleGithubSetup(_req, res, pendingStore, githubApp, url) {
|
|
27
|
+
const state = url.searchParams.get('state');
|
|
28
|
+
const installationId = parsePositiveInt(url.searchParams.get('installation_id'));
|
|
29
|
+
if (state === null || installationId === undefined) {
|
|
30
|
+
sendHtml(res, 400, SETUP_ERROR_HTML);
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
const secret = resolveGithubStateSecret(githubApp?.webhookSecret);
|
|
34
|
+
const verification = verifyInstallNonce(state, secret);
|
|
35
|
+
if (!verification.ok) {
|
|
36
|
+
sendHtml(res, 400, SETUP_ERROR_HTML);
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
await pendingStore.put(state, installationId);
|
|
40
|
+
sendHtml(res, 200, SETUP_OK_HTML);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* `GET /v1/github/installations/pending?state=...` — the CLI's poll target. Requires the same signed-in
|
|
44
|
+
* subject who requested `install-url` (nonce subject match, mirroring `installations/claim`) and org
|
|
45
|
+
* membership on the nonce's bound org; 404 until the setup redirect has landed, 200 with
|
|
46
|
+
* `{installationId}` after.
|
|
47
|
+
*/
|
|
48
|
+
export async function handleGithubInstallationPending(req, res, gate, controlPlane, pendingStore, githubApp, url) {
|
|
49
|
+
const identity = await authorizeControlPlane(req, res, gate, { requireIdentity: true });
|
|
50
|
+
if (identity === false)
|
|
51
|
+
return;
|
|
52
|
+
const state = url.searchParams.get('state');
|
|
53
|
+
if (state === null) {
|
|
54
|
+
sendJson(res, 400, { error: '"state" query parameter is required' });
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
const secret = resolveGithubStateSecret(githubApp?.webhookSecret);
|
|
58
|
+
const verification = verifyInstallNonce(state, secret);
|
|
59
|
+
if (!verification.ok || verification.payload.subject !== identity.subject) {
|
|
60
|
+
sendForbidden(res, 'invalid or expired state');
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
if (!identity.superAdmin) {
|
|
64
|
+
const member = await controlPlane.isOrgMember({
|
|
65
|
+
org: verification.payload.org,
|
|
66
|
+
subject: identity.subject,
|
|
67
|
+
});
|
|
68
|
+
if (!member) {
|
|
69
|
+
sendForbidden(res, 'forbidden');
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
const installationId = await pendingStore.get(state);
|
|
74
|
+
if (installationId === undefined) {
|
|
75
|
+
sendJson(res, 404, { error: 'installation not landed yet' });
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
sendJson(res, 200, { ok: true, data: { installationId } });
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=github-setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github-setup.js","sourceRoot":"","sources":["../../src/routes/github-setup.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { IncomingMessage, ServerResponse } from 'node:http';
|
|
2
|
+
import type { AuditSink } from '../store/audit.js';
|
|
3
|
+
import type { GithubConnectionStore, GithubDeployRunStore } from '../store.js';
|
|
4
|
+
/**
|
|
5
|
+
* `POST /v1/github/webhook` (GHD-2, ADR 0111 §6) — the GitHub App's webhook receiver. Unauthenticated
|
|
6
|
+
* by necessity (GitHub is the caller), so the defense layers run strictly in order: the HMAC-SHA256
|
|
7
|
+
* signature is verified over the RAW body bytes before any header semantics or JSON parsing; then
|
|
8
|
+
* headers, then payload shape, then the connection binding (repository AND installation must match),
|
|
9
|
+
* and only then the idempotent run mutation (the store's delivery-id/target dedupe is the replay
|
|
10
|
+
* defense — see `GithubDeployRunStore`). Every response to GitHub is intentionally terse: no payload
|
|
11
|
+
* echo, no secret material, no verification oracle beyond the HTTP status.
|
|
12
|
+
*
|
|
13
|
+
* PR-B scope: runs are RECORDED (queued / queued+blocked), superseded, and canceled — never built.
|
|
14
|
+
* The build worker that walks queued runs forward is GHD-3, and it must skip runs carrying a
|
|
15
|
+
* `blockedReason`.
|
|
16
|
+
*/
|
|
17
|
+
export interface GithubWebhookDeps {
|
|
18
|
+
readonly connectionStore: GithubConnectionStore;
|
|
19
|
+
readonly runStore: GithubDeployRunStore;
|
|
20
|
+
readonly webhookSecret: string | undefined;
|
|
21
|
+
readonly audit: AuditSink;
|
|
22
|
+
readonly maxBody: number;
|
|
23
|
+
/** Injectable run-id mint for deterministic tests. Default: `run-` + 12 hex chars. */
|
|
24
|
+
readonly newRunId?: () => string;
|
|
25
|
+
}
|
|
26
|
+
/** Timing-safe check of GitHub's `X-Hub-Signature-256: sha256=<hex>` over the raw body bytes. */
|
|
27
|
+
export declare function verifyWebhookSignature(rawBody: Buffer, signatureHeader: string | undefined, secret: string): boolean;
|
|
28
|
+
export declare function handleGithubWebhook(req: IncomingMessage, res: ServerResponse, deps: GithubWebhookDeps): Promise<void>;
|
|
29
|
+
//# sourceMappingURL=github-webhook.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github-webhook.d.ts","sourceRoot":"","sources":["../../src/routes/github-webhook.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAEjE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,EAEV,qBAAqB,EACrB,oBAAoB,EAErB,MAAM,aAAa,CAAC;AAErB;;;;;;;;;;;;GAYG;AAEH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,eAAe,EAAE,qBAAqB,CAAC;IAChD,QAAQ,CAAC,QAAQ,EAAE,oBAAoB,CAAC;IACxC,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3C,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,sFAAsF;IACtF,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,MAAM,CAAC;CAClC;AAID,iGAAiG;AACjG,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,MAAM,EACf,eAAe,EAAE,MAAM,GAAG,SAAS,EACnC,MAAM,EAAE,MAAM,GACb,OAAO,CAST;AAgVD,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,IAAI,EAAE,iBAAiB,GACtB,OAAO,CAAC,IAAI,CAAC,CAoDf"}
|