noodleseed-cli 0.1.4
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/LICENSE +176 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +625 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +52 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +77 -0
- package/dist/config.js.map +1 -0
- package/dist/control-plane.d.ts +33 -0
- package/dist/control-plane.d.ts.map +1 -0
- package/dist/control-plane.js +223 -0
- package/dist/control-plane.js.map +1 -0
- package/dist/deploy.d.ts +62 -0
- package/dist/deploy.d.ts.map +1 -0
- package/dist/deploy.js +182 -0
- package/dist/deploy.js.map +1 -0
- package/dist/dev.d.ts +50 -0
- package/dist/dev.d.ts.map +1 -0
- package/dist/dev.js +223 -0
- package/dist/dev.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/validate.d.ts +37 -0
- package/dist/validate.d.ts.map +1 -0
- package/dist/validate.js +46 -0
- package/dist/validate.js.map +1 -0
- package/node_modules/@noodle-borg/auth/dist/index.d.ts +14 -0
- package/node_modules/@noodle-borg/auth/dist/index.d.ts.map +1 -0
- package/node_modules/@noodle-borg/auth/dist/index.js +14 -0
- package/node_modules/@noodle-borg/auth/dist/index.js.map +1 -0
- package/node_modules/@noodle-borg/auth/dist/jwt-issuer.d.ts +21 -0
- package/node_modules/@noodle-borg/auth/dist/jwt-issuer.d.ts.map +1 -0
- package/node_modules/@noodle-borg/auth/dist/jwt-issuer.js +24 -0
- package/node_modules/@noodle-borg/auth/dist/jwt-issuer.js.map +1 -0
- package/node_modules/@noodle-borg/auth/dist/metadata.d.ts +27 -0
- package/node_modules/@noodle-borg/auth/dist/metadata.d.ts.map +1 -0
- package/node_modules/@noodle-borg/auth/dist/metadata.js +21 -0
- package/node_modules/@noodle-borg/auth/dist/metadata.js.map +1 -0
- package/node_modules/@noodle-borg/auth/dist/signer.d.ts +45 -0
- package/node_modules/@noodle-borg/auth/dist/signer.d.ts.map +1 -0
- package/node_modules/@noodle-borg/auth/dist/signer.js +47 -0
- package/node_modules/@noodle-borg/auth/dist/signer.js.map +1 -0
- package/node_modules/@noodle-borg/auth/dist/verify.d.ts +42 -0
- package/node_modules/@noodle-borg/auth/dist/verify.d.ts.map +1 -0
- package/node_modules/@noodle-borg/auth/dist/verify.js +48 -0
- package/node_modules/@noodle-borg/auth/dist/verify.js.map +1 -0
- package/node_modules/@noodle-borg/auth/package.json +27 -0
- package/node_modules/@noodle-borg/authoring/dist/index.d.ts +200 -0
- package/node_modules/@noodle-borg/authoring/dist/index.d.ts.map +1 -0
- package/node_modules/@noodle-borg/authoring/dist/index.js +504 -0
- package/node_modules/@noodle-borg/authoring/dist/index.js.map +1 -0
- package/node_modules/@noodle-borg/authoring/package.json +29 -0
- package/node_modules/@noodle-borg/compiler/dist/artifact/types.d.ts +203 -0
- package/node_modules/@noodle-borg/compiler/dist/artifact/types.d.ts.map +1 -0
- package/node_modules/@noodle-borg/compiler/dist/artifact/types.js +20 -0
- package/node_modules/@noodle-borg/compiler/dist/artifact/types.js.map +1 -0
- package/node_modules/@noodle-borg/compiler/dist/catalog/in-memory.d.ts +13 -0
- package/node_modules/@noodle-borg/compiler/dist/catalog/in-memory.d.ts.map +1 -0
- package/node_modules/@noodle-borg/compiler/dist/catalog/in-memory.js +19 -0
- package/node_modules/@noodle-borg/compiler/dist/catalog/in-memory.js.map +1 -0
- package/node_modules/@noodle-borg/compiler/dist/catalog/signature.d.ts +11 -0
- package/node_modules/@noodle-borg/compiler/dist/catalog/signature.d.ts.map +1 -0
- package/node_modules/@noodle-borg/compiler/dist/catalog/signature.js +31 -0
- package/node_modules/@noodle-borg/compiler/dist/catalog/signature.js.map +1 -0
- package/node_modules/@noodle-borg/compiler/dist/catalog/types.d.ts +43 -0
- package/node_modules/@noodle-borg/compiler/dist/catalog/types.d.ts.map +1 -0
- package/node_modules/@noodle-borg/compiler/dist/catalog/types.js +11 -0
- package/node_modules/@noodle-borg/compiler/dist/catalog/types.js.map +1 -0
- package/node_modules/@noodle-borg/compiler/dist/cli.d.ts +3 -0
- package/node_modules/@noodle-borg/compiler/dist/cli.d.ts.map +1 -0
- package/node_modules/@noodle-borg/compiler/dist/cli.js +19 -0
- package/node_modules/@noodle-borg/compiler/dist/cli.js.map +1 -0
- package/node_modules/@noodle-borg/compiler/dist/compile.d.ts +50 -0
- package/node_modules/@noodle-borg/compiler/dist/compile.d.ts.map +1 -0
- package/node_modules/@noodle-borg/compiler/dist/compile.js +719 -0
- package/node_modules/@noodle-borg/compiler/dist/compile.js.map +1 -0
- package/node_modules/@noodle-borg/compiler/dist/errors.d.ts +27 -0
- package/node_modules/@noodle-borg/compiler/dist/errors.d.ts.map +1 -0
- package/node_modules/@noodle-borg/compiler/dist/errors.js +2 -0
- package/node_modules/@noodle-borg/compiler/dist/errors.js.map +1 -0
- package/node_modules/@noodle-borg/compiler/dist/index.d.ts +13 -0
- package/node_modules/@noodle-borg/compiler/dist/index.d.ts.map +1 -0
- package/node_modules/@noodle-borg/compiler/dist/index.js +11 -0
- package/node_modules/@noodle-borg/compiler/dist/index.js.map +1 -0
- package/node_modules/@noodle-borg/compiler/dist/manifest/expression.d.ts +136 -0
- package/node_modules/@noodle-borg/compiler/dist/manifest/expression.d.ts.map +1 -0
- package/node_modules/@noodle-borg/compiler/dist/manifest/expression.js +552 -0
- package/node_modules/@noodle-borg/compiler/dist/manifest/expression.js.map +1 -0
- package/node_modules/@noodle-borg/compiler/dist/manifest/naming.d.ts +14 -0
- package/node_modules/@noodle-borg/compiler/dist/manifest/naming.d.ts.map +1 -0
- package/node_modules/@noodle-borg/compiler/dist/manifest/naming.js +18 -0
- package/node_modules/@noodle-borg/compiler/dist/manifest/naming.js.map +1 -0
- package/node_modules/@noodle-borg/compiler/dist/manifest/schema-refs.d.ts +24 -0
- package/node_modules/@noodle-borg/compiler/dist/manifest/schema-refs.d.ts.map +1 -0
- package/node_modules/@noodle-borg/compiler/dist/manifest/schema-refs.js +149 -0
- package/node_modules/@noodle-borg/compiler/dist/manifest/schema-refs.js.map +1 -0
- package/node_modules/@noodle-borg/compiler/dist/manifest/schema.d.ts +97 -0
- package/node_modules/@noodle-borg/compiler/dist/manifest/schema.d.ts.map +1 -0
- package/node_modules/@noodle-borg/compiler/dist/manifest/schema.js +157 -0
- package/node_modules/@noodle-borg/compiler/dist/manifest/schema.js.map +1 -0
- package/node_modules/@noodle-borg/compiler/dist/schema-export.d.ts +6 -0
- package/node_modules/@noodle-borg/compiler/dist/schema-export.d.ts.map +1 -0
- package/node_modules/@noodle-borg/compiler/dist/schema-export.js +28 -0
- package/node_modules/@noodle-borg/compiler/dist/schema-export.js.map +1 -0
- package/node_modules/@noodle-borg/compiler/dist/suggest.d.ts +41 -0
- package/node_modules/@noodle-borg/compiler/dist/suggest.d.ts.map +1 -0
- package/node_modules/@noodle-borg/compiler/dist/suggest.js +105 -0
- package/node_modules/@noodle-borg/compiler/dist/suggest.js.map +1 -0
- package/node_modules/@noodle-borg/compiler/dist/uri-template.d.ts +33 -0
- package/node_modules/@noodle-borg/compiler/dist/uri-template.d.ts.map +1 -0
- package/node_modules/@noodle-borg/compiler/dist/uri-template.js +83 -0
- package/node_modules/@noodle-borg/compiler/dist/uri-template.js.map +1 -0
- package/node_modules/@noodle-borg/compiler/package.json +32 -0
- package/node_modules/@noodle-borg/compute/dist/code-connector.d.ts +45 -0
- package/node_modules/@noodle-borg/compute/dist/code-connector.d.ts.map +1 -0
- package/node_modules/@noodle-borg/compute/dist/code-connector.js +53 -0
- package/node_modules/@noodle-borg/compute/dist/code-connector.js.map +1 -0
- package/node_modules/@noodle-borg/compute/dist/engine.d.ts +73 -0
- package/node_modules/@noodle-borg/compute/dist/engine.d.ts.map +1 -0
- package/node_modules/@noodle-borg/compute/dist/engine.js +31 -0
- package/node_modules/@noodle-borg/compute/dist/engine.js.map +1 -0
- package/node_modules/@noodle-borg/compute/dist/index.d.ts +4 -0
- package/node_modules/@noodle-borg/compute/dist/index.d.ts.map +1 -0
- package/node_modules/@noodle-borg/compute/dist/index.js +4 -0
- package/node_modules/@noodle-borg/compute/dist/index.js.map +1 -0
- package/node_modules/@noodle-borg/compute/dist/quickjs-engine.d.ts +31 -0
- package/node_modules/@noodle-borg/compute/dist/quickjs-engine.d.ts.map +1 -0
- package/node_modules/@noodle-borg/compute/dist/quickjs-engine.js +271 -0
- package/node_modules/@noodle-borg/compute/dist/quickjs-engine.js.map +1 -0
- package/node_modules/@noodle-borg/compute/package.json +29 -0
- package/node_modules/@noodle-borg/connector-defs/dist/compile.d.ts +46 -0
- package/node_modules/@noodle-borg/connector-defs/dist/compile.d.ts.map +1 -0
- package/node_modules/@noodle-borg/connector-defs/dist/compile.js +289 -0
- package/node_modules/@noodle-borg/connector-defs/dist/compile.js.map +1 -0
- package/node_modules/@noodle-borg/connector-defs/dist/index.d.ts +3 -0
- package/node_modules/@noodle-borg/connector-defs/dist/index.d.ts.map +1 -0
- package/node_modules/@noodle-borg/connector-defs/dist/index.js +3 -0
- package/node_modules/@noodle-borg/connector-defs/dist/index.js.map +1 -0
- package/node_modules/@noodle-borg/connector-defs/dist/schema.d.ts +332 -0
- package/node_modules/@noodle-borg/connector-defs/dist/schema.d.ts.map +1 -0
- package/node_modules/@noodle-borg/connector-defs/dist/schema.js +105 -0
- package/node_modules/@noodle-borg/connector-defs/dist/schema.js.map +1 -0
- package/node_modules/@noodle-borg/connector-defs/package.json +32 -0
- package/node_modules/@noodle-borg/connector-http/dist/http-connector.d.ts +86 -0
- package/node_modules/@noodle-borg/connector-http/dist/http-connector.d.ts.map +1 -0
- package/node_modules/@noodle-borg/connector-http/dist/http-connector.js +138 -0
- package/node_modules/@noodle-borg/connector-http/dist/http-connector.js.map +1 -0
- package/node_modules/@noodle-borg/connector-http/dist/index.d.ts +3 -0
- package/node_modules/@noodle-borg/connector-http/dist/index.d.ts.map +1 -0
- package/node_modules/@noodle-borg/connector-http/dist/index.js +3 -0
- package/node_modules/@noodle-borg/connector-http/dist/index.js.map +1 -0
- package/node_modules/@noodle-borg/connector-http/dist/ssrf.d.ts +45 -0
- package/node_modules/@noodle-borg/connector-http/dist/ssrf.d.ts.map +1 -0
- package/node_modules/@noodle-borg/connector-http/dist/ssrf.js +57 -0
- package/node_modules/@noodle-borg/connector-http/dist/ssrf.js.map +1 -0
- package/node_modules/@noodle-borg/connector-http/package.json +30 -0
- package/node_modules/@noodle-borg/protocol/dist/adapter.d.ts +73 -0
- package/node_modules/@noodle-borg/protocol/dist/adapter.d.ts.map +1 -0
- package/node_modules/@noodle-borg/protocol/dist/adapter.js +2 -0
- package/node_modules/@noodle-borg/protocol/dist/adapter.js.map +1 -0
- package/node_modules/@noodle-borg/protocol/dist/adapters/mcp-2025-11-25.d.ts +19 -0
- package/node_modules/@noodle-borg/protocol/dist/adapters/mcp-2025-11-25.d.ts.map +1 -0
- package/node_modules/@noodle-borg/protocol/dist/adapters/mcp-2025-11-25.js +34 -0
- package/node_modules/@noodle-borg/protocol/dist/adapters/mcp-2025-11-25.js.map +1 -0
- package/node_modules/@noodle-borg/protocol/dist/index.d.ts +5 -0
- package/node_modules/@noodle-borg/protocol/dist/index.d.ts.map +1 -0
- package/node_modules/@noodle-borg/protocol/dist/index.js +5 -0
- package/node_modules/@noodle-borg/protocol/dist/index.js.map +1 -0
- package/node_modules/@noodle-borg/protocol/dist/jsonrpc.d.ts +19 -0
- package/node_modules/@noodle-borg/protocol/dist/jsonrpc.d.ts.map +1 -0
- package/node_modules/@noodle-borg/protocol/dist/jsonrpc.js +14 -0
- package/node_modules/@noodle-borg/protocol/dist/jsonrpc.js.map +1 -0
- package/node_modules/@noodle-borg/protocol/dist/mapping.d.ts +133 -0
- package/node_modules/@noodle-borg/protocol/dist/mapping.d.ts.map +1 -0
- package/node_modules/@noodle-borg/protocol/dist/mapping.js +181 -0
- package/node_modules/@noodle-borg/protocol/dist/mapping.js.map +1 -0
- package/node_modules/@noodle-borg/protocol/dist/negotiate.d.ts +13 -0
- package/node_modules/@noodle-borg/protocol/dist/negotiate.d.ts.map +1 -0
- package/node_modules/@noodle-borg/protocol/dist/negotiate.js +18 -0
- package/node_modules/@noodle-borg/protocol/dist/negotiate.js.map +1 -0
- package/node_modules/@noodle-borg/protocol/dist/registry.d.ts +17 -0
- package/node_modules/@noodle-borg/protocol/dist/registry.d.ts.map +1 -0
- package/node_modules/@noodle-borg/protocol/dist/registry.js +33 -0
- package/node_modules/@noodle-borg/protocol/dist/registry.js.map +1 -0
- package/node_modules/@noodle-borg/protocol/dist/sdk-server.d.ts +22 -0
- package/node_modules/@noodle-borg/protocol/dist/sdk-server.d.ts.map +1 -0
- package/node_modules/@noodle-borg/protocol/dist/sdk-server.js +91 -0
- package/node_modules/@noodle-borg/protocol/dist/sdk-server.js.map +1 -0
- package/node_modules/@noodle-borg/protocol/dist/server.d.ts +38 -0
- package/node_modules/@noodle-borg/protocol/dist/server.d.ts.map +1 -0
- package/node_modules/@noodle-borg/protocol/dist/server.js +89 -0
- package/node_modules/@noodle-borg/protocol/dist/server.js.map +1 -0
- package/node_modules/@noodle-borg/protocol/dist/stateless.d.ts +14 -0
- package/node_modules/@noodle-borg/protocol/dist/stateless.d.ts.map +1 -0
- package/node_modules/@noodle-borg/protocol/dist/stateless.js +28 -0
- package/node_modules/@noodle-borg/protocol/dist/stateless.js.map +1 -0
- package/node_modules/@noodle-borg/protocol/dist/widget/bootstrap.d.ts +24 -0
- package/node_modules/@noodle-borg/protocol/dist/widget/bootstrap.d.ts.map +1 -0
- package/node_modules/@noodle-borg/protocol/dist/widget/bootstrap.js +165 -0
- package/node_modules/@noodle-borg/protocol/dist/widget/bootstrap.js.map +1 -0
- package/node_modules/@noodle-borg/protocol/dist/widget/ext-apps-bundle.d.ts +4 -0
- package/node_modules/@noodle-borg/protocol/dist/widget/ext-apps-bundle.d.ts.map +1 -0
- package/node_modules/@noodle-borg/protocol/dist/widget/ext-apps-bundle.js +10 -0
- package/node_modules/@noodle-borg/protocol/dist/widget/ext-apps-bundle.js.map +1 -0
- package/node_modules/@noodle-borg/protocol/dist/widget/inject.d.ts +8 -0
- package/node_modules/@noodle-borg/protocol/dist/widget/inject.d.ts.map +1 -0
- package/node_modules/@noodle-borg/protocol/dist/widget/inject.js +36 -0
- package/node_modules/@noodle-borg/protocol/dist/widget/inject.js.map +1 -0
- package/node_modules/@noodle-borg/protocol/package.json +29 -0
- package/node_modules/@noodle-borg/runtime/dist/broker/map.d.ts +29 -0
- package/node_modules/@noodle-borg/runtime/dist/broker/map.d.ts.map +1 -0
- package/node_modules/@noodle-borg/runtime/dist/broker/map.js +38 -0
- package/node_modules/@noodle-borg/runtime/dist/broker/map.js.map +1 -0
- package/node_modules/@noodle-borg/runtime/dist/broker/secret-box.d.ts +103 -0
- package/node_modules/@noodle-borg/runtime/dist/broker/secret-box.d.ts.map +1 -0
- package/node_modules/@noodle-borg/runtime/dist/broker/secret-box.js +118 -0
- package/node_modules/@noodle-borg/runtime/dist/broker/secret-box.js.map +1 -0
- package/node_modules/@noodle-borg/runtime/dist/broker/static.d.ts +12 -0
- package/node_modules/@noodle-borg/runtime/dist/broker/static.d.ts.map +1 -0
- package/node_modules/@noodle-borg/runtime/dist/broker/static.js +15 -0
- package/node_modules/@noodle-borg/runtime/dist/broker/static.js.map +1 -0
- package/node_modules/@noodle-borg/runtime/dist/broker/types.d.ts +28 -0
- package/node_modules/@noodle-borg/runtime/dist/broker/types.d.ts.map +1 -0
- package/node_modules/@noodle-borg/runtime/dist/broker/types.js +2 -0
- package/node_modules/@noodle-borg/runtime/dist/broker/types.js.map +1 -0
- package/node_modules/@noodle-borg/runtime/dist/connector/in-memory.d.ts +29 -0
- package/node_modules/@noodle-borg/runtime/dist/connector/in-memory.d.ts.map +1 -0
- package/node_modules/@noodle-borg/runtime/dist/connector/in-memory.js +37 -0
- package/node_modules/@noodle-borg/runtime/dist/connector/in-memory.js.map +1 -0
- package/node_modules/@noodle-borg/runtime/dist/connector/types.d.ts +41 -0
- package/node_modules/@noodle-borg/runtime/dist/connector/types.d.ts.map +1 -0
- package/node_modules/@noodle-borg/runtime/dist/connector/types.js +2 -0
- package/node_modules/@noodle-borg/runtime/dist/connector/types.js.map +1 -0
- package/node_modules/@noodle-borg/runtime/dist/eval/evaluate.d.ts +39 -0
- package/node_modules/@noodle-borg/runtime/dist/eval/evaluate.d.ts.map +1 -0
- package/node_modules/@noodle-borg/runtime/dist/eval/evaluate.js +117 -0
- package/node_modules/@noodle-borg/runtime/dist/eval/evaluate.js.map +1 -0
- package/node_modules/@noodle-borg/runtime/dist/execute.d.ts +47 -0
- package/node_modules/@noodle-borg/runtime/dist/execute.d.ts.map +1 -0
- package/node_modules/@noodle-borg/runtime/dist/execute.js +297 -0
- package/node_modules/@noodle-borg/runtime/dist/execute.js.map +1 -0
- package/node_modules/@noodle-borg/runtime/dist/index.d.ts +12 -0
- package/node_modules/@noodle-borg/runtime/dist/index.d.ts.map +1 -0
- package/node_modules/@noodle-borg/runtime/dist/index.js +8 -0
- package/node_modules/@noodle-borg/runtime/dist/index.js.map +1 -0
- package/node_modules/@noodle-borg/runtime/dist/policy/allow-all.d.ts +10 -0
- package/node_modules/@noodle-borg/runtime/dist/policy/allow-all.d.ts.map +1 -0
- package/node_modules/@noodle-borg/runtime/dist/policy/allow-all.js +13 -0
- package/node_modules/@noodle-borg/runtime/dist/policy/allow-all.js.map +1 -0
- package/node_modules/@noodle-borg/runtime/dist/policy/types.d.ts +25 -0
- package/node_modules/@noodle-borg/runtime/dist/policy/types.d.ts.map +1 -0
- package/node_modules/@noodle-borg/runtime/dist/policy/types.js +2 -0
- package/node_modules/@noodle-borg/runtime/dist/policy/types.js.map +1 -0
- package/node_modules/@noodle-borg/runtime/dist/result.d.ts +19 -0
- package/node_modules/@noodle-borg/runtime/dist/result.d.ts.map +1 -0
- package/node_modules/@noodle-borg/runtime/dist/result.js +2 -0
- package/node_modules/@noodle-borg/runtime/dist/result.js.map +1 -0
- package/node_modules/@noodle-borg/runtime/package.json +27 -0
- package/node_modules/@noodle-borg/service/dist/auth/deploy-gate.d.ts +48 -0
- package/node_modules/@noodle-borg/service/dist/auth/deploy-gate.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/auth/deploy-gate.js +79 -0
- package/node_modules/@noodle-borg/service/dist/auth/deploy-gate.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/index.d.ts +7 -0
- package/node_modules/@noodle-borg/service/dist/index.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/index.js +7 -0
- package/node_modules/@noodle-borg/service/dist/index.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/main.d.ts +3 -0
- package/node_modules/@noodle-borg/service/dist/main.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/main.js +171 -0
- package/node_modules/@noodle-borg/service/dist/main.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/oauth/app.d.ts +14 -0
- package/node_modules/@noodle-borg/service/dist/oauth/app.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/oauth/app.js +48 -0
- package/node_modules/@noodle-borg/service/dist/oauth/app.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/oauth/consent.d.ts +18 -0
- package/node_modules/@noodle-borg/service/dist/oauth/consent.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/oauth/consent.js +55 -0
- package/node_modules/@noodle-borg/service/dist/oauth/consent.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/oauth/google.d.ts +31 -0
- package/node_modules/@noodle-borg/service/dist/oauth/google.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/oauth/google.js +39 -0
- package/node_modules/@noodle-borg/service/dist/oauth/google.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/oauth/paths.d.ts +3 -0
- package/node_modules/@noodle-borg/service/dist/oauth/paths.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/oauth/paths.js +19 -0
- package/node_modules/@noodle-borg/service/dist/oauth/paths.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/oauth/provider.d.ts +61 -0
- package/node_modules/@noodle-borg/service/dist/oauth/provider.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/oauth/provider.js +313 -0
- package/node_modules/@noodle-borg/service/dist/oauth/provider.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/oauth/store-postgres.d.ts +29 -0
- package/node_modules/@noodle-borg/service/dist/oauth/store-postgres.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/oauth/store-postgres.js +176 -0
- package/node_modules/@noodle-borg/service/dist/oauth/store-postgres.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/oauth/store.d.ts +85 -0
- package/node_modules/@noodle-borg/service/dist/oauth/store.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/oauth/store.js +57 -0
- package/node_modules/@noodle-borg/service/dist/oauth/store.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/oauth/tokens.d.ts +8 -0
- package/node_modules/@noodle-borg/service/dist/oauth/tokens.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/oauth/tokens.js +13 -0
- package/node_modules/@noodle-borg/service/dist/oauth/tokens.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/secret/kms-master-key.d.ts +36 -0
- package/node_modules/@noodle-borg/service/dist/secret/kms-master-key.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/secret/kms-master-key.js +51 -0
- package/node_modules/@noodle-borg/service/dist/secret/kms-master-key.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/service.d.ts +221 -0
- package/node_modules/@noodle-borg/service/dist/service.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/service.js +1163 -0
- package/node_modules/@noodle-borg/service/dist/service.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/store/cloudsql-pool.d.ts +34 -0
- package/node_modules/@noodle-borg/service/dist/store/cloudsql-pool.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/store/cloudsql-pool.js +38 -0
- package/node_modules/@noodle-borg/service/dist/store/cloudsql-pool.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres.d.ts +56 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres.js +372 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/store.d.ts +192 -0
- package/node_modules/@noodle-borg/service/dist/store.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/store.js +230 -0
- package/node_modules/@noodle-borg/service/dist/store.js.map +1 -0
- package/node_modules/@noodle-borg/service/package.json +44 -0
- package/node_modules/@noodle-borg/transport-http/dist/caller-auth.d.ts +15 -0
- package/node_modules/@noodle-borg/transport-http/dist/caller-auth.d.ts.map +1 -0
- package/node_modules/@noodle-borg/transport-http/dist/caller-auth.js +38 -0
- package/node_modules/@noodle-borg/transport-http/dist/caller-auth.js.map +1 -0
- package/node_modules/@noodle-borg/transport-http/dist/examples/serve-demo.d.ts +2 -0
- package/node_modules/@noodle-borg/transport-http/dist/examples/serve-demo.d.ts.map +1 -0
- package/node_modules/@noodle-borg/transport-http/dist/examples/serve-demo.js +129 -0
- package/node_modules/@noodle-borg/transport-http/dist/examples/serve-demo.js.map +1 -0
- package/node_modules/@noodle-borg/transport-http/dist/front-door.d.ts +46 -0
- package/node_modules/@noodle-borg/transport-http/dist/front-door.d.ts.map +1 -0
- package/node_modules/@noodle-borg/transport-http/dist/front-door.js +75 -0
- package/node_modules/@noodle-borg/transport-http/dist/front-door.js.map +1 -0
- package/node_modules/@noodle-borg/transport-http/dist/handler.d.ts +142 -0
- package/node_modules/@noodle-borg/transport-http/dist/handler.d.ts.map +1 -0
- package/node_modules/@noodle-borg/transport-http/dist/handler.js +387 -0
- package/node_modules/@noodle-borg/transport-http/dist/handler.js.map +1 -0
- package/node_modules/@noodle-borg/transport-http/dist/index.d.ts +6 -0
- package/node_modules/@noodle-borg/transport-http/dist/index.d.ts.map +1 -0
- package/node_modules/@noodle-borg/transport-http/dist/index.js +6 -0
- package/node_modules/@noodle-borg/transport-http/dist/index.js.map +1 -0
- package/node_modules/@noodle-borg/transport-http/dist/logging.d.ts +41 -0
- package/node_modules/@noodle-borg/transport-http/dist/logging.d.ts.map +1 -0
- package/node_modules/@noodle-borg/transport-http/dist/logging.js +71 -0
- package/node_modules/@noodle-borg/transport-http/dist/logging.js.map +1 -0
- package/node_modules/@noodle-borg/transport-http/dist/serve.d.ts +22 -0
- package/node_modules/@noodle-borg/transport-http/dist/serve.d.ts.map +1 -0
- package/node_modules/@noodle-borg/transport-http/dist/serve.js +25 -0
- package/node_modules/@noodle-borg/transport-http/dist/serve.js.map +1 -0
- package/node_modules/@noodle-borg/transport-http/package.json +30 -0
- package/package.json +78 -0
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runnable end-to-end demo: compile a manifest, wire a **real, authenticated** HTTP connector across
|
|
3
|
+
* **two** hosts, and serve it as a remote MCP server over Streamable HTTP. Build the package, then run:
|
|
4
|
+
*
|
|
5
|
+
* node packages/transport-http/dist/examples/serve-demo.js
|
|
6
|
+
*
|
|
7
|
+
* Point an MCP client (e.g. the MCP Inspector) at the printed URL, or use the sample curl below. The
|
|
8
|
+
* `derive_and_enrich` tool runs a **synchronous flow** that chains two authenticated POSTs:
|
|
9
|
+
* 1. POST https://httpbin.org/anything with `Authorization: Bearer …` (host 1)
|
|
10
|
+
* 2. POST https://httpbingo.org/anything with `X-API-Key: …` (host 2), using step 1's result
|
|
11
|
+
* Both endpoints echo the request back, so the response visibly proves the auth headers and bodies were
|
|
12
|
+
* actually sent — a real authenticated, multi-host, multi-step tool call over MCP.
|
|
13
|
+
*/
|
|
14
|
+
import { compile, InMemoryCatalog, } from '@noodle-borg/compiler';
|
|
15
|
+
import { HttpConnector } from '@noodle-borg/connector-http';
|
|
16
|
+
import { InMemoryConnectorRegistry, } from '@noodle-borg/runtime';
|
|
17
|
+
import { serveHttp } from '../index.js';
|
|
18
|
+
const MANIFEST = `
|
|
19
|
+
manifestVersion: "0.2"
|
|
20
|
+
server:
|
|
21
|
+
name: demo_chain
|
|
22
|
+
version: 1.0.0
|
|
23
|
+
title: Demo Chain
|
|
24
|
+
connectors:
|
|
25
|
+
echo:
|
|
26
|
+
id: httpecho
|
|
27
|
+
version: 1.0.0
|
|
28
|
+
tools:
|
|
29
|
+
- name: derive_and_enrich
|
|
30
|
+
description: Create a derived token via an authenticated POST, then enrich it via a second authenticated POST on another host.
|
|
31
|
+
inputSchema:
|
|
32
|
+
type: object
|
|
33
|
+
properties:
|
|
34
|
+
label:
|
|
35
|
+
type: string
|
|
36
|
+
required:
|
|
37
|
+
- label
|
|
38
|
+
additionalProperties: false
|
|
39
|
+
fulfilment:
|
|
40
|
+
steps:
|
|
41
|
+
- id: create
|
|
42
|
+
use: echo.create
|
|
43
|
+
args:
|
|
44
|
+
label: \${input.label}
|
|
45
|
+
- id: enrich
|
|
46
|
+
use: echo.enrich
|
|
47
|
+
args:
|
|
48
|
+
derived: \${steps.create.token}
|
|
49
|
+
output:
|
|
50
|
+
created: \${steps.create.token}
|
|
51
|
+
enriched: \${steps.enrich.derived}
|
|
52
|
+
`;
|
|
53
|
+
const createSig = {
|
|
54
|
+
type: 'action',
|
|
55
|
+
input: { label: { type: 'string', required: true } },
|
|
56
|
+
output: { token: { type: 'string' } },
|
|
57
|
+
};
|
|
58
|
+
const enrichSig = {
|
|
59
|
+
type: 'action',
|
|
60
|
+
input: { derived: { type: 'string', required: true } },
|
|
61
|
+
output: { derived: { type: 'string' } },
|
|
62
|
+
};
|
|
63
|
+
const httpecho = {
|
|
64
|
+
id: 'httpecho',
|
|
65
|
+
version: '1.0.0',
|
|
66
|
+
kind: 'catalog',
|
|
67
|
+
operations: { create: createSig, enrich: enrichSig },
|
|
68
|
+
};
|
|
69
|
+
function deps() {
|
|
70
|
+
const connector = new HttpConnector({
|
|
71
|
+
id: 'httpecho',
|
|
72
|
+
version: '1.0.0',
|
|
73
|
+
baseUrl: 'https://httpbin.org',
|
|
74
|
+
// Egress allowlist: the connector may only reach these two declared hosts.
|
|
75
|
+
allowedOrigins: ['https://httpbin.org', 'https://httpbingo.org'],
|
|
76
|
+
operations: {
|
|
77
|
+
create: {
|
|
78
|
+
method: 'POST',
|
|
79
|
+
path: '/anything',
|
|
80
|
+
auth: { kind: 'bearer' },
|
|
81
|
+
body: (args) => ({ label: args.label }),
|
|
82
|
+
signature: createSig,
|
|
83
|
+
mapResponse: (json) => ({ token: json.json.label }),
|
|
84
|
+
},
|
|
85
|
+
enrich: {
|
|
86
|
+
method: 'POST',
|
|
87
|
+
path: '/anything',
|
|
88
|
+
baseUrl: 'https://httpbingo.org', // a second declared host
|
|
89
|
+
auth: { kind: 'apiKey', header: 'X-API-Key' },
|
|
90
|
+
body: (args) => ({ derived: args.derived }),
|
|
91
|
+
signature: enrichSig,
|
|
92
|
+
mapResponse: (json) => ({ derived: json.json.derived }),
|
|
93
|
+
},
|
|
94
|
+
},
|
|
95
|
+
});
|
|
96
|
+
// A broker that mints a different downstream credential per operation. This is the seam where a real
|
|
97
|
+
// broker would fetch a per-host API key from a secret store — secrets never live in the manifest.
|
|
98
|
+
const broker = {
|
|
99
|
+
getCredential(request) {
|
|
100
|
+
const token = request.operation === 'create' ? 'demo-bearer-key-host1' : 'demo-api-key-host2';
|
|
101
|
+
return Promise.resolve({ token });
|
|
102
|
+
},
|
|
103
|
+
};
|
|
104
|
+
return { connectors: new InMemoryConnectorRegistry([connector]), broker };
|
|
105
|
+
}
|
|
106
|
+
async function main() {
|
|
107
|
+
const result = compile(MANIFEST, { catalog: new InMemoryCatalog([httpecho]) });
|
|
108
|
+
if (!result.ok) {
|
|
109
|
+
console.error('manifest failed to compile:', result.errors);
|
|
110
|
+
process.exit(1);
|
|
111
|
+
}
|
|
112
|
+
const target = { artifact: result.artifact, deps: deps() };
|
|
113
|
+
const port = Number(process.env.PORT ?? 8765);
|
|
114
|
+
const running = await serveHttp({ target, port });
|
|
115
|
+
const accept = 'application/json, text/event-stream';
|
|
116
|
+
console.log(`Noodle Borg MCP server (remote, Streamable HTTP) listening at ${running.url}`);
|
|
117
|
+
console.log('Initialize:');
|
|
118
|
+
console.log(` curl -s ${running.url} -H 'content-type: application/json' -H 'accept: ${accept}' ` +
|
|
119
|
+
`-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-11-25"}}'`);
|
|
120
|
+
console.log('Call derive_and_enrich (runs an authenticated two-host flow over MCP):');
|
|
121
|
+
console.log(` curl -s ${running.url} -H 'content-type: application/json' -H 'accept: ${accept}' ` +
|
|
122
|
+
`-H 'mcp-protocol-version: 2025-11-25' ` +
|
|
123
|
+
`-d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"derive_and_enrich","arguments":{"label":"hello"}}}'`);
|
|
124
|
+
}
|
|
125
|
+
main().catch((error) => {
|
|
126
|
+
console.error(error);
|
|
127
|
+
process.exit(1);
|
|
128
|
+
});
|
|
129
|
+
//# sourceMappingURL=serve-demo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serve-demo.js","sourceRoot":"","sources":["../../src/examples/serve-demo.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { IncomingMessage, ServerResponse } from 'node:http';
|
|
2
|
+
/**
|
|
3
|
+
* In-app HTTPS posture for a TLS-**proxy-terminated** deployment (Slice 28, ADR 0033). The runtime itself
|
|
4
|
+
* always speaks plain HTTP behind a trusted reverse proxy (it never handles certs); this module enforces
|
|
5
|
+
* the *client*-facing HTTPS expectation and emits baseline security headers. The actual cert / DNS / load
|
|
6
|
+
* balancer is an out-of-repo hosting decision.
|
|
7
|
+
*/
|
|
8
|
+
export interface TlsPosture {
|
|
9
|
+
/**
|
|
10
|
+
* Trust `X-Forwarded-Proto` / RFC 7239 `Forwarded` from the fronting proxy. Default `false` (direct /
|
|
11
|
+
* localhost), in which case forwarded headers are **ignored** so a direct client cannot spoof `https`.
|
|
12
|
+
* Enable **only** behind a trusted proxy that strips client-supplied copies of these headers.
|
|
13
|
+
*/
|
|
14
|
+
readonly trustProxy?: boolean;
|
|
15
|
+
/** Reject a request the proxy marks as plaintext `http` with `426`. Default: on when `trustProxy`. */
|
|
16
|
+
readonly requireHttps?: boolean;
|
|
17
|
+
/**
|
|
18
|
+
* Emit `Strict-Transport-Security`. Default: on when `trustProxy`. `maxAge` default 2y,
|
|
19
|
+
* `includeSubDomains` default true, `preload` default **false** (preload is hard to reverse — opt in).
|
|
20
|
+
*/
|
|
21
|
+
readonly hsts?: boolean | {
|
|
22
|
+
maxAgeSeconds?: number;
|
|
23
|
+
includeSubDomains?: boolean;
|
|
24
|
+
preload?: boolean;
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* The effective client-facing scheme. With `trustProxy`, read `X-Forwarded-Proto` (first hop) or RFC 7239
|
|
29
|
+
* `Forwarded: proto=`; otherwise the forwarded headers are ignored and the scheme is `http` (the runtime's
|
|
30
|
+
* own socket). A trusted proxy that omits the header is treated as `http` (fail safe → enforcement fires).
|
|
31
|
+
*/
|
|
32
|
+
export declare function effectiveProto(req: IncomingMessage, trustProxy: boolean): 'http' | 'https';
|
|
33
|
+
/**
|
|
34
|
+
* Enforce the HTTPS posture. When `requireHttps` (default = `trustProxy`) and the effective scheme is
|
|
35
|
+
* plaintext `http`, write a `426 Upgrade Required` (with an `Upgrade` header + transport-level JSON-RPC
|
|
36
|
+
* error) and return `true` (request handled). Otherwise return `false`.
|
|
37
|
+
*/
|
|
38
|
+
export declare function enforceHttps(req: IncomingMessage, res: ServerResponse, posture: TlsPosture): boolean;
|
|
39
|
+
/**
|
|
40
|
+
* Host-agnostic baseline security headers for every response (set via `setHeader`, before the body is
|
|
41
|
+
* written, so they ride along with whatever status follows): `X-Content-Type-Options: nosniff`,
|
|
42
|
+
* `Referrer-Policy: no-referrer`, `Cache-Control: no-store` (responses carry tokens/JSON), and
|
|
43
|
+
* `Strict-Transport-Security` when the posture calls for it.
|
|
44
|
+
*/
|
|
45
|
+
export declare function applySecurityHeaders(res: ServerResponse, posture: TlsPosture): void;
|
|
46
|
+
//# sourceMappingURL=front-door.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"front-door.d.ts","sourceRoot":"","sources":["../src/front-door.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAGjE;;;;;GAKG;AACH,MAAM,WAAW,UAAU;IACzB;;;;OAIG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAC9B,sGAAsG;IACtG,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;IAChC;;;OAGG;IACH,QAAQ,CAAC,IAAI,CAAC,EACV,OAAO,GACP;QAAE,aAAa,CAAC,EAAE,MAAM,CAAC;QAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;CAChF;AASD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,eAAe,EAAE,UAAU,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,CAc1F;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,OAAO,EAAE,UAAU,GAClB,OAAO,CAiBT;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,cAAc,EAAE,OAAO,EAAE,UAAU,GAAG,IAAI,CAWnF"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { JSON_RPC } from '@noodle-borg/protocol';
|
|
2
|
+
const TWO_YEARS_SECONDS = 63_072_000;
|
|
3
|
+
function header(req, name) {
|
|
4
|
+
const value = req.headers[name];
|
|
5
|
+
return Array.isArray(value) ? value[0] : value;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* The effective client-facing scheme. With `trustProxy`, read `X-Forwarded-Proto` (first hop) or RFC 7239
|
|
9
|
+
* `Forwarded: proto=`; otherwise the forwarded headers are ignored and the scheme is `http` (the runtime's
|
|
10
|
+
* own socket). A trusted proxy that omits the header is treated as `http` (fail safe → enforcement fires).
|
|
11
|
+
*/
|
|
12
|
+
export function effectiveProto(req, trustProxy) {
|
|
13
|
+
if (!trustProxy)
|
|
14
|
+
return 'http';
|
|
15
|
+
const forwardedProto = header(req, 'x-forwarded-proto');
|
|
16
|
+
if (forwardedProto) {
|
|
17
|
+
const first = forwardedProto.split(',')[0]?.trim().toLowerCase();
|
|
18
|
+
if (first === 'https')
|
|
19
|
+
return 'https';
|
|
20
|
+
if (first === 'http')
|
|
21
|
+
return 'http';
|
|
22
|
+
}
|
|
23
|
+
const forwarded = header(req, 'forwarded');
|
|
24
|
+
if (forwarded) {
|
|
25
|
+
const match = /proto=("?)(https?)\1/i.exec(forwarded);
|
|
26
|
+
if (match)
|
|
27
|
+
return match[2]?.toLowerCase() === 'https' ? 'https' : 'http';
|
|
28
|
+
}
|
|
29
|
+
return 'http';
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Enforce the HTTPS posture. When `requireHttps` (default = `trustProxy`) and the effective scheme is
|
|
33
|
+
* plaintext `http`, write a `426 Upgrade Required` (with an `Upgrade` header + transport-level JSON-RPC
|
|
34
|
+
* error) and return `true` (request handled). Otherwise return `false`.
|
|
35
|
+
*/
|
|
36
|
+
export function enforceHttps(req, res, posture) {
|
|
37
|
+
const trustProxy = posture.trustProxy ?? false;
|
|
38
|
+
const requireHttps = posture.requireHttps ?? trustProxy;
|
|
39
|
+
if (!requireHttps)
|
|
40
|
+
return false;
|
|
41
|
+
if (effectiveProto(req, trustProxy) === 'https')
|
|
42
|
+
return false;
|
|
43
|
+
res.writeHead(426, {
|
|
44
|
+
'content-type': 'application/json; charset=utf-8',
|
|
45
|
+
upgrade: 'TLS/1.2, HTTP/1.1',
|
|
46
|
+
});
|
|
47
|
+
res.end(JSON.stringify({
|
|
48
|
+
jsonrpc: '2.0',
|
|
49
|
+
id: null,
|
|
50
|
+
error: { code: JSON_RPC.INVALID_REQUEST, message: 'HTTPS required' },
|
|
51
|
+
}));
|
|
52
|
+
return true;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Host-agnostic baseline security headers for every response (set via `setHeader`, before the body is
|
|
56
|
+
* written, so they ride along with whatever status follows): `X-Content-Type-Options: nosniff`,
|
|
57
|
+
* `Referrer-Policy: no-referrer`, `Cache-Control: no-store` (responses carry tokens/JSON), and
|
|
58
|
+
* `Strict-Transport-Security` when the posture calls for it.
|
|
59
|
+
*/
|
|
60
|
+
export function applySecurityHeaders(res, posture) {
|
|
61
|
+
res.setHeader('X-Content-Type-Options', 'nosniff');
|
|
62
|
+
res.setHeader('Referrer-Policy', 'no-referrer');
|
|
63
|
+
res.setHeader('Cache-Control', 'no-store');
|
|
64
|
+
const hsts = posture.hsts ?? posture.trustProxy ?? false;
|
|
65
|
+
if (!hsts)
|
|
66
|
+
return;
|
|
67
|
+
const opts = typeof hsts === 'object' ? hsts : {};
|
|
68
|
+
const parts = [`max-age=${opts.maxAgeSeconds ?? TWO_YEARS_SECONDS}`];
|
|
69
|
+
if (opts.includeSubDomains ?? true)
|
|
70
|
+
parts.push('includeSubDomains');
|
|
71
|
+
if (opts.preload ?? false)
|
|
72
|
+
parts.push('preload');
|
|
73
|
+
res.setHeader('Strict-Transport-Security', parts.join('; '));
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=front-door.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"front-door.js","sourceRoot":"","sources":["../src/front-door.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import type { IncomingMessage, ServerResponse } from 'node:http';
|
|
2
|
+
import { type ServedArtifact } from '@noodle-borg/protocol';
|
|
3
|
+
import { type TlsPosture } from './front-door.js';
|
|
4
|
+
import { type Logger } from './logging.js';
|
|
5
|
+
/** Origins allowed to call the endpoint: an explicit list, a predicate, or undefined (allow any). */
|
|
6
|
+
export type OriginPolicy = readonly string[] | ((origin: string) => boolean);
|
|
7
|
+
export interface HttpHandlerOptions {
|
|
8
|
+
/** The single MCP endpoint path. Default `/mcp`. */
|
|
9
|
+
readonly endpoint?: string;
|
|
10
|
+
/**
|
|
11
|
+
* Allowed `Origin` values (DNS-rebinding protection). When set, a request whose `Origin` header is
|
|
12
|
+
* present and not allowed gets `403`. When undefined, any origin is allowed (dev only — set this in
|
|
13
|
+
* production). A request with no `Origin` header (a non-browser client) is always allowed.
|
|
14
|
+
*/
|
|
15
|
+
readonly allowedOrigins?: OriginPolicy;
|
|
16
|
+
/** Maximum request body size in bytes. Default 1 MiB. */
|
|
17
|
+
readonly maxBodyBytes?: number;
|
|
18
|
+
/**
|
|
19
|
+
* SHA-256 hash of the per-server caller key. When set, every request must present
|
|
20
|
+
* `Authorization: Bearer <key>` whose hash matches, or it gets `401` (see {@link mintCallerKey}).
|
|
21
|
+
* Omit for an open endpoint (dev/single-server use).
|
|
22
|
+
*/
|
|
23
|
+
readonly callerKeyHash?: string;
|
|
24
|
+
/** Structured logger for request-lifecycle events (`mcp.request`). Default: a no-op logger. */
|
|
25
|
+
readonly logger?: Logger;
|
|
26
|
+
/**
|
|
27
|
+
* In-app HTTPS posture for a TLS-proxy-terminated deployment (Slice 28, ADR 0033). Default: baseline
|
|
28
|
+
* security headers only, no HTTPS enforcement and no HSTS (dev / direct bind).
|
|
29
|
+
*/
|
|
30
|
+
readonly tls?: TlsPosture;
|
|
31
|
+
/**
|
|
32
|
+
* Verify an access token for identity-based deployments (OA-1, end-user OAuth). Returns the verified
|
|
33
|
+
* identity, or `null` when the token is missing/invalid/expired. Injected by the service (backed by
|
|
34
|
+
* `@noodle-borg/auth` + `jose`), so the transport stays free of any token library. When a deployment uses
|
|
35
|
+
* an identity access mode and no verifier is configured, the endpoint fails closed (`401`).
|
|
36
|
+
*/
|
|
37
|
+
readonly verifyOwnerToken?: OwnerTokenVerifier;
|
|
38
|
+
/**
|
|
39
|
+
* Authorize a verified identity for a non-owner identity mode. The service injects this callback so
|
|
40
|
+
* transport stays isolated from the control-plane org/member store.
|
|
41
|
+
*/
|
|
42
|
+
readonly authorizeDataPlaneIdentity?: DataPlaneIdentityAuthorizer;
|
|
43
|
+
/**
|
|
44
|
+
* Verify caller-key access against the current tenant state. When set for tenant-routed requests, this
|
|
45
|
+
* overrides the static cached `callerKeyHash` so a multi-instance service can rotate or revoke keys
|
|
46
|
+
* without waiting for every instance-local compiled target cache to refresh.
|
|
47
|
+
*/
|
|
48
|
+
readonly verifyCallerKeyForTenant?: CallerKeyTenantVerifier;
|
|
49
|
+
/**
|
|
50
|
+
* Request admission hook for MCP JSON-RPC requests after authentication and JSON parsing, before SDK
|
|
51
|
+
* execution. The default is allow; injected policy can log, suspend, quota, or deny per request.
|
|
52
|
+
*/
|
|
53
|
+
readonly admissionGate?: AdmissionGate;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Resolve an owner access token to its verified subject (claims only — the raw token never crosses the
|
|
57
|
+
* front-door). `resource` is the canonical tenant MCP URL the token must be audience-bound to (RFC 8707).
|
|
58
|
+
*/
|
|
59
|
+
export type OwnerTokenVerifier = (token: string, resource: string) => Promise<{
|
|
60
|
+
readonly subject: string;
|
|
61
|
+
readonly email?: string;
|
|
62
|
+
} | null>;
|
|
63
|
+
export type DataPlaneIdentityAuthorizer = (input: {
|
|
64
|
+
readonly accessMode: AccessMode;
|
|
65
|
+
readonly org: string;
|
|
66
|
+
readonly subject: string;
|
|
67
|
+
readonly email?: string;
|
|
68
|
+
}) => Promise<boolean>;
|
|
69
|
+
export type CallerKeyTenantVerifier = (input: {
|
|
70
|
+
readonly tenant: TenantRouteRef;
|
|
71
|
+
readonly token: string | null;
|
|
72
|
+
readonly cachedCallerKeyHash: string | undefined;
|
|
73
|
+
}) => Promise<boolean>;
|
|
74
|
+
export type AdmissionCategory = 'protocol' | 'discovery' | 'read' | 'execute';
|
|
75
|
+
export interface AdmissionContext {
|
|
76
|
+
readonly routeId: string;
|
|
77
|
+
readonly method: string;
|
|
78
|
+
readonly category: AdmissionCategory;
|
|
79
|
+
readonly name?: string;
|
|
80
|
+
readonly org?: string;
|
|
81
|
+
readonly app?: string;
|
|
82
|
+
readonly env?: string;
|
|
83
|
+
readonly accessMode?: AccessMode;
|
|
84
|
+
readonly deploymentId?: string;
|
|
85
|
+
}
|
|
86
|
+
export type AdmissionDecision = {
|
|
87
|
+
readonly allow: true;
|
|
88
|
+
readonly reason?: string;
|
|
89
|
+
} | {
|
|
90
|
+
readonly allow: false;
|
|
91
|
+
readonly reason: string;
|
|
92
|
+
readonly status?: 403 | 429;
|
|
93
|
+
};
|
|
94
|
+
export type AdmissionGate = (context: AdmissionContext) => Promise<AdmissionDecision>;
|
|
95
|
+
/** How callers authenticate to a deployed endpoint. */
|
|
96
|
+
export type AccessMode = 'caller-key' | 'owner-only' | 'org-members';
|
|
97
|
+
export interface TenantRouteRef {
|
|
98
|
+
readonly org: string;
|
|
99
|
+
readonly app: string;
|
|
100
|
+
readonly env: string;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Build a `node:http` request listener that serves one {@link ServedArtifact} over the MCP **Streamable
|
|
104
|
+
* HTTP** transport (the remote transport). This is the security/HTTP front-door: it validates origin,
|
|
105
|
+
* method, content negotiation, and body size, then hands the parsed JSON-RPC body to the official
|
|
106
|
+
* `@modelcontextprotocol/sdk` stateless transport ([ADR 0021]), which owns framing and version
|
|
107
|
+
* negotiation. It is **stateless** — no `MCP-Session-Id` is issued. Server-initiated streaming (SSE)
|
|
108
|
+
* is not offered, so `GET` returns `405`.
|
|
109
|
+
*/
|
|
110
|
+
export declare function createMcpHttpHandler(target: ServedArtifact, options?: HttpHandlerOptions): (req: IncomingMessage, res: ServerResponse) => void;
|
|
111
|
+
/** A resolved tenant: its served artifact plus how callers authenticate to it. */
|
|
112
|
+
export interface ServedTarget {
|
|
113
|
+
readonly served: ServedArtifact;
|
|
114
|
+
/** Per-server caller-key hash (Slice 24, ADR 0030) — used when {@link accessMode} is `caller-key`. */
|
|
115
|
+
readonly callerKeyHash?: string;
|
|
116
|
+
/** How callers authenticate. Default `caller-key` (the shared per-server bearer). */
|
|
117
|
+
readonly accessMode?: AccessMode;
|
|
118
|
+
/**
|
|
119
|
+
* For `owner-only` (OA-1): the deployer's subject — the only identity permitted to call this endpoint.
|
|
120
|
+
* Resolved against a verified owner token by {@link HttpHandlerOptions.verifyOwnerToken}.
|
|
121
|
+
*/
|
|
122
|
+
readonly ownerSubject?: string;
|
|
123
|
+
/** Tenant org used by org-scoped identity access modes. */
|
|
124
|
+
readonly org?: string;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Resolve a {@link ServedTarget} for a given server id. **Async** (ADR 0036): on a cache miss the resolver
|
|
128
|
+
* may point-read a durable store and recompile, so any instance can serve any deploy. It resolves to
|
|
129
|
+
* `undefined` when there is no such server (→ `404`); a thrown error (store/compile failure) becomes a
|
|
130
|
+
* `500`. Used by {@link createMcpRouter} to serve many tenants from one process.
|
|
131
|
+
*/
|
|
132
|
+
export type ServerLookup = (deploymentId: string) => Promise<ServedTarget | undefined>;
|
|
133
|
+
export type TenantLookup = (ref: TenantRouteRef) => Promise<ServedTarget | undefined>;
|
|
134
|
+
/**
|
|
135
|
+
* Build a `node:http` request listener that serves **many** tenants over MCP Streamable HTTP, routing
|
|
136
|
+
* by tenant paths. Each request reuses the same stateless pipeline as
|
|
137
|
+
* {@link createMcpHttpHandler}; an unknown path or unknown server id returns `404`.
|
|
138
|
+
*/
|
|
139
|
+
export declare function createMcpRouter(lookup: ServerLookup, options?: HttpHandlerOptions & {
|
|
140
|
+
readonly tenantLookup?: TenantLookup;
|
|
141
|
+
}): (req: IncomingMessage, res: ServerResponse) => void;
|
|
142
|
+
//# sourceMappingURL=handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../src/handler.ts"],"names":[],"mappings":"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"}
|