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
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Local CLI configuration for the hosted workflow. Persisted at `~/.mrdn/config.json` with `0600` perms
|
|
3
|
+
* (the dir `0700`) because it can hold a control-plane auth token. The token is **never logged** — only
|
|
4
|
+
* {@link maskToken}'d. Resolution precedence everywhere is **flag > env > config > default**.
|
|
5
|
+
*/
|
|
6
|
+
export interface MrdnConfig {
|
|
7
|
+
/** Default deploy-service base URL (e.g. `https://borg.noodleseed.com`). */
|
|
8
|
+
readonly serviceUrl?: string;
|
|
9
|
+
/** Control-plane bearer token (Google ID token in hosted alpha). Sensitive — stored `0600`, never logged. */
|
|
10
|
+
readonly authToken?: string;
|
|
11
|
+
/** Google OAuth client id used for service-backed browser login. */
|
|
12
|
+
readonly googleClientId?: string;
|
|
13
|
+
/** Stored Google refresh token for service-backed control-plane login. Sensitive. */
|
|
14
|
+
readonly refreshToken?: string;
|
|
15
|
+
/** Cached Google ID token. Sensitive; refreshed before control-plane calls when expired. */
|
|
16
|
+
readonly idToken?: string;
|
|
17
|
+
readonly idTokenExpiresAt?: string;
|
|
18
|
+
readonly identity?: {
|
|
19
|
+
readonly subject: string;
|
|
20
|
+
readonly email: string;
|
|
21
|
+
};
|
|
22
|
+
/** Default environment name (reserved; the broker becomes tenant+environment-scoped later). */
|
|
23
|
+
readonly defaultEnv?: string;
|
|
24
|
+
}
|
|
25
|
+
/** A locally-cached record of a deployed server. Caller keys are **live bearer credentials** — do not commit. */
|
|
26
|
+
export interface SavedServer {
|
|
27
|
+
readonly deploymentId: string;
|
|
28
|
+
readonly url: string;
|
|
29
|
+
/** The once-shown caller key; absent for owner-only servers, which authenticate by identity instead. */
|
|
30
|
+
readonly callerKey?: string;
|
|
31
|
+
readonly createdAt: string;
|
|
32
|
+
}
|
|
33
|
+
export declare function configDir(home?: string): string;
|
|
34
|
+
export declare function configPath(home?: string): string;
|
|
35
|
+
export declare function serversPath(home?: string): string;
|
|
36
|
+
/** Read the config, or an empty config if absent/unreadable/corrupt (never throws). */
|
|
37
|
+
export declare function readConfig(home?: string): MrdnConfig;
|
|
38
|
+
/** Write the config with `0700` dir / `0600` file perms (chmod even if the file pre-existed looser). */
|
|
39
|
+
export declare function writeConfig(config: MrdnConfig, home?: string): void;
|
|
40
|
+
/** Clear the stored auth token (logout), keeping the service URL. Removes the file if nothing remains. */
|
|
41
|
+
export declare function clearConfig(home?: string): void;
|
|
42
|
+
/** Read the saved-servers cache (empty if absent/corrupt). */
|
|
43
|
+
export declare function readServers(home?: string): SavedServer[];
|
|
44
|
+
/** Append a deployed server to the local cache (`0600`). The caller key is a live credential. */
|
|
45
|
+
export declare function appendServer(server: SavedServer, home?: string): void;
|
|
46
|
+
/** Resolve the effective deploy-service URL: flag > `MRDN_SERVICE_URL` > config (undefined → caller default). */
|
|
47
|
+
export declare function resolveServiceUrl(flag: string | undefined, env: NodeJS.ProcessEnv, config: MrdnConfig): string | undefined;
|
|
48
|
+
/** Resolve the effective control-plane auth token: flag > `MRDN_AUTH_TOKEN` > config. */
|
|
49
|
+
export declare function resolveAuthToken(flag: string | undefined, env: NodeJS.ProcessEnv, config: MrdnConfig): string | undefined;
|
|
50
|
+
/** Mask a token for display: `abcd…yz`, never the full value. */
|
|
51
|
+
export declare function maskToken(token: string | undefined): string;
|
|
52
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAIA;;;;GAIG;AACH,MAAM,WAAW,UAAU;IACzB,4EAA4E;IAC5E,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,6GAA6G;IAC7G,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,oEAAoE;IACpE,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,qFAAqF;IACrF,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,4FAA4F;IAC5F,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,QAAQ,CAAC,EAAE;QAClB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,+FAA+F;IAC/F,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,iHAAiH;AACjH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,wGAAwG;IACxG,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,wBAAgB,SAAS,CAAC,IAAI,GAAE,MAAkB,GAAG,MAAM,CAE1D;AACD,wBAAgB,UAAU,CAAC,IAAI,GAAE,MAAkB,GAAG,MAAM,CAE3D;AACD,wBAAgB,WAAW,CAAC,IAAI,GAAE,MAAkB,GAAG,MAAM,CAE5D;AAED,uFAAuF;AACvF,wBAAgB,UAAU,CAAC,IAAI,GAAE,MAAkB,GAAG,UAAU,CAM/D;AAED,wGAAwG;AACxG,wBAAgB,WAAW,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,GAAE,MAAkB,GAAG,IAAI,CAE9E;AAED,0GAA0G;AAC1G,wBAAgB,WAAW,CAAC,IAAI,GAAE,MAAkB,GAAG,IAAI,CAiB1D;AAED,8DAA8D;AAC9D,wBAAgB,WAAW,CAAC,IAAI,GAAE,MAAkB,GAAG,WAAW,EAAE,CAOnE;AAED,iGAAiG;AACjG,wBAAgB,YAAY,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,GAAE,MAAkB,GAAG,IAAI,CAIhF;AAED,iHAAiH;AACjH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,GAAG,EAAE,MAAM,CAAC,UAAU,EACtB,MAAM,EAAE,UAAU,GACjB,MAAM,GAAG,SAAS,CAEpB;AAED,yFAAyF;AACzF,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,GAAG,EAAE,MAAM,CAAC,UAAU,EACtB,MAAM,EAAE,UAAU,GACjB,MAAM,GAAG,SAAS,CAEpB;AAED,iEAAiE;AACjE,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAG3D"}
|
package/dist/config.js
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { chmodSync, mkdirSync, readFileSync, rmSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import { homedir } from 'node:os';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
export function configDir(home = homedir()) {
|
|
5
|
+
return join(home, '.mrdn');
|
|
6
|
+
}
|
|
7
|
+
export function configPath(home = homedir()) {
|
|
8
|
+
return join(configDir(home), 'config.json');
|
|
9
|
+
}
|
|
10
|
+
export function serversPath(home = homedir()) {
|
|
11
|
+
return join(configDir(home), 'servers.json');
|
|
12
|
+
}
|
|
13
|
+
/** Read the config, or an empty config if absent/unreadable/corrupt (never throws). */
|
|
14
|
+
export function readConfig(home = homedir()) {
|
|
15
|
+
try {
|
|
16
|
+
return JSON.parse(readFileSync(configPath(home), 'utf8'));
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
return {};
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
/** Write the config with `0700` dir / `0600` file perms (chmod even if the file pre-existed looser). */
|
|
23
|
+
export function writeConfig(config, home = homedir()) {
|
|
24
|
+
writeSecure(configPath(home), `${JSON.stringify(config, null, 2)}\n`, home);
|
|
25
|
+
}
|
|
26
|
+
/** Clear the stored auth token (logout), keeping the service URL. Removes the file if nothing remains. */
|
|
27
|
+
export function clearConfig(home = homedir()) {
|
|
28
|
+
const { authToken: _authToken, refreshToken: _refreshToken, idToken: _idToken, idTokenExpiresAt: _idTokenExpiresAt, identity: _identity, googleClientId: _googleClientId, ...rest } = readConfig(home);
|
|
29
|
+
if (Object.keys(rest).length === 0) {
|
|
30
|
+
try {
|
|
31
|
+
rmSync(configPath(home), { force: true });
|
|
32
|
+
}
|
|
33
|
+
catch { }
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
writeConfig(rest, home);
|
|
37
|
+
}
|
|
38
|
+
/** Read the saved-servers cache (empty if absent/corrupt). */
|
|
39
|
+
export function readServers(home = homedir()) {
|
|
40
|
+
try {
|
|
41
|
+
const parsed = JSON.parse(readFileSync(serversPath(home), 'utf8'));
|
|
42
|
+
return Array.isArray(parsed) ? parsed : [];
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
return [];
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/** Append a deployed server to the local cache (`0600`). The caller key is a live credential. */
|
|
49
|
+
export function appendServer(server, home = homedir()) {
|
|
50
|
+
const list = readServers(home);
|
|
51
|
+
list.push(server);
|
|
52
|
+
writeSecure(serversPath(home), `${JSON.stringify(list, null, 2)}\n`, home);
|
|
53
|
+
}
|
|
54
|
+
/** Resolve the effective deploy-service URL: flag > `MRDN_SERVICE_URL` > config (undefined → caller default). */
|
|
55
|
+
export function resolveServiceUrl(flag, env, config) {
|
|
56
|
+
return flag ?? env.MRDN_SERVICE_URL ?? config.serviceUrl;
|
|
57
|
+
}
|
|
58
|
+
/** Resolve the effective control-plane auth token: flag > `MRDN_AUTH_TOKEN` > config. */
|
|
59
|
+
export function resolveAuthToken(flag, env, config) {
|
|
60
|
+
return flag ?? env.MRDN_AUTH_TOKEN ?? config.authToken;
|
|
61
|
+
}
|
|
62
|
+
/** Mask a token for display: `abcd…yz`, never the full value. */
|
|
63
|
+
export function maskToken(token) {
|
|
64
|
+
if (!token)
|
|
65
|
+
return '(none)';
|
|
66
|
+
return token.length <= 8 ? '********' : `${token.slice(0, 4)}…${token.slice(-2)}`;
|
|
67
|
+
}
|
|
68
|
+
/** Write a file under `~/.mrdn` with a `0700` dir and a `0600` file (idempotent chmod). */
|
|
69
|
+
function writeSecure(path, contents, home) {
|
|
70
|
+
const dir = configDir(home);
|
|
71
|
+
mkdirSync(dir, { recursive: true, mode: 0o700 });
|
|
72
|
+
chmodSync(dir, 0o700);
|
|
73
|
+
writeFileSync(path, contents, { mode: 0o600 });
|
|
74
|
+
chmodSync(path, 0o600);
|
|
75
|
+
return path;
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { MrdnConfig } from './config.js';
|
|
2
|
+
export interface ServiceAuthMetadata {
|
|
3
|
+
readonly ok: true;
|
|
4
|
+
readonly service: string;
|
|
5
|
+
readonly googleClientId: string | null;
|
|
6
|
+
readonly allowedEmailDomain: string;
|
|
7
|
+
readonly authType: string;
|
|
8
|
+
}
|
|
9
|
+
export interface LoginResult {
|
|
10
|
+
readonly serviceUrl: string;
|
|
11
|
+
readonly email?: string;
|
|
12
|
+
readonly subject?: string;
|
|
13
|
+
}
|
|
14
|
+
export declare function browserLogin(input: {
|
|
15
|
+
readonly serviceUrl: string;
|
|
16
|
+
readonly home: string;
|
|
17
|
+
readonly openBrowser?: (url: string) => void;
|
|
18
|
+
readonly fetchImpl?: typeof fetch;
|
|
19
|
+
}): Promise<LoginResult>;
|
|
20
|
+
export declare function getAuthMetadata(serviceUrl: string, fetchImpl?: typeof fetch): Promise<ServiceAuthMetadata>;
|
|
21
|
+
export declare function resolveControlPlaneToken(input: {
|
|
22
|
+
readonly serviceFlag?: string | undefined;
|
|
23
|
+
readonly authFlag?: string | undefined;
|
|
24
|
+
readonly env: NodeJS.ProcessEnv;
|
|
25
|
+
readonly home: string;
|
|
26
|
+
readonly fetchImpl?: typeof fetch | undefined;
|
|
27
|
+
}): Promise<{
|
|
28
|
+
readonly serviceUrl: string;
|
|
29
|
+
readonly token?: string;
|
|
30
|
+
readonly config: MrdnConfig;
|
|
31
|
+
}>;
|
|
32
|
+
export declare function serviceJson<T>(url: string, token: string | undefined, init?: RequestInit, fetchImpl?: typeof fetch): Promise<T>;
|
|
33
|
+
//# sourceMappingURL=control-plane.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"control-plane.d.ts","sourceRoot":"","sources":["../src/control-plane.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAO9C,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAClB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,wBAAsB,YAAY,CAAC,KAAK,EAAE;IACxC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CACnC,GAAG,OAAO,CAAC,WAAW,CAAC,CA4CvB;AAED,wBAAsB,eAAe,CACnC,UAAU,EAAE,MAAM,EAClB,SAAS,GAAE,OAAO,KAAa,GAC9B,OAAO,CAAC,mBAAmB,CAAC,CAM9B;AAED,wBAAsB,wBAAwB,CAAC,KAAK,EAAE;IACpD,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1C,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,KAAK,GAAG,SAAS,CAAC;CAC/C,GAAG,OAAO,CAAC;IAAE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAA;CAAE,CAAC,CA8BjG;AAED,wBAAsB,WAAW,CAAC,CAAC,EACjC,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,IAAI,GAAE,WAAgB,EACtB,SAAS,GAAE,OAAO,KAAa,GAC9B,OAAO,CAAC,CAAC,CAAC,CAeZ"}
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
import { spawn } from 'node:child_process';
|
|
2
|
+
import { createHash, randomBytes } from 'node:crypto';
|
|
3
|
+
import { createServer } from 'node:http';
|
|
4
|
+
import { readConfig, resolveServiceUrl, writeConfig } from './config.js';
|
|
5
|
+
import { DEFAULT_SERVICE_URL } from './deploy.js';
|
|
6
|
+
const GOOGLE_AUTH_URL = 'https://accounts.google.com/o/oauth2/v2/auth';
|
|
7
|
+
const GOOGLE_TOKEN_URL = 'https://oauth2.googleapis.com/token';
|
|
8
|
+
export async function browserLogin(input) {
|
|
9
|
+
const fetchImpl = input.fetchImpl ?? fetch;
|
|
10
|
+
const serviceUrl = normalizeServiceUrl(input.serviceUrl);
|
|
11
|
+
const metadata = await getAuthMetadata(serviceUrl, fetchImpl);
|
|
12
|
+
if (!metadata.googleClientId) {
|
|
13
|
+
writeConfig({ ...readConfig(input.home), serviceUrl }, input.home);
|
|
14
|
+
return { serviceUrl };
|
|
15
|
+
}
|
|
16
|
+
const verifier = base64Url(randomBytes(32));
|
|
17
|
+
const challenge = base64Url(createHash('sha256').update(verifier).digest());
|
|
18
|
+
const state = base64Url(randomBytes(24));
|
|
19
|
+
const callback = await waitForCallback(state);
|
|
20
|
+
const redirectUri = `http://127.0.0.1:${callback.port}/callback`;
|
|
21
|
+
const authUrl = new URL(GOOGLE_AUTH_URL);
|
|
22
|
+
authUrl.searchParams.set('client_id', metadata.googleClientId);
|
|
23
|
+
authUrl.searchParams.set('redirect_uri', redirectUri);
|
|
24
|
+
authUrl.searchParams.set('response_type', 'code');
|
|
25
|
+
authUrl.searchParams.set('scope', 'openid email profile');
|
|
26
|
+
authUrl.searchParams.set('code_challenge', challenge);
|
|
27
|
+
authUrl.searchParams.set('code_challenge_method', 'S256');
|
|
28
|
+
authUrl.searchParams.set('state', state);
|
|
29
|
+
authUrl.searchParams.set('access_type', 'offline');
|
|
30
|
+
authUrl.searchParams.set('prompt', 'consent');
|
|
31
|
+
(input.openBrowser ?? openBrowser)(authUrl.toString());
|
|
32
|
+
const code = await callback.code;
|
|
33
|
+
const token = await exchangeCode({
|
|
34
|
+
clientId: metadata.googleClientId,
|
|
35
|
+
code,
|
|
36
|
+
verifier,
|
|
37
|
+
redirectUri,
|
|
38
|
+
fetchImpl,
|
|
39
|
+
});
|
|
40
|
+
const identity = decodeIdentity(token.idToken);
|
|
41
|
+
const config = {
|
|
42
|
+
...readConfig(input.home),
|
|
43
|
+
serviceUrl,
|
|
44
|
+
googleClientId: metadata.googleClientId,
|
|
45
|
+
idToken: token.idToken,
|
|
46
|
+
idTokenExpiresAt: expiresAt(token.expiresIn),
|
|
47
|
+
...(token.refreshToken !== undefined ? { refreshToken: token.refreshToken } : {}),
|
|
48
|
+
...(identity !== undefined ? { identity } : {}),
|
|
49
|
+
};
|
|
50
|
+
writeConfig(config, input.home);
|
|
51
|
+
return { serviceUrl, ...(identity ?? {}) };
|
|
52
|
+
}
|
|
53
|
+
export async function getAuthMetadata(serviceUrl, fetchImpl = fetch) {
|
|
54
|
+
const res = await fetchImpl(`${normalizeServiceUrl(serviceUrl)}/v1/auth/google`, {
|
|
55
|
+
headers: { accept: 'application/json' },
|
|
56
|
+
});
|
|
57
|
+
if (!res.ok)
|
|
58
|
+
throw new Error(`service auth metadata failed (${res.status})`);
|
|
59
|
+
return (await res.json());
|
|
60
|
+
}
|
|
61
|
+
export async function resolveControlPlaneToken(input) {
|
|
62
|
+
const fetchImpl = input.fetchImpl ?? fetch;
|
|
63
|
+
let config = readConfig(input.home);
|
|
64
|
+
const serviceUrl = normalizeServiceUrl(resolveServiceUrl(input.serviceFlag, input.env, config) ?? DEFAULT_SERVICE_URL);
|
|
65
|
+
const override = input.authFlag ?? input.env.MRDN_AUTH_TOKEN;
|
|
66
|
+
if (override !== undefined)
|
|
67
|
+
return { serviceUrl, token: override, config };
|
|
68
|
+
if (config.authToken !== undefined)
|
|
69
|
+
return { serviceUrl, token: config.authToken, config };
|
|
70
|
+
if (config.idToken !== undefined && !isExpiring(config.idTokenExpiresAt)) {
|
|
71
|
+
return { serviceUrl, token: config.idToken, config };
|
|
72
|
+
}
|
|
73
|
+
if (config.refreshToken !== undefined && config.googleClientId !== undefined) {
|
|
74
|
+
const refreshed = await refreshIdToken({
|
|
75
|
+
clientId: config.googleClientId,
|
|
76
|
+
refreshToken: config.refreshToken,
|
|
77
|
+
fetchImpl,
|
|
78
|
+
});
|
|
79
|
+
const identity = decodeIdentity(refreshed.idToken);
|
|
80
|
+
config = {
|
|
81
|
+
...config,
|
|
82
|
+
serviceUrl,
|
|
83
|
+
idToken: refreshed.idToken,
|
|
84
|
+
idTokenExpiresAt: expiresAt(refreshed.expiresIn),
|
|
85
|
+
...(identity !== undefined ? { identity } : {}),
|
|
86
|
+
};
|
|
87
|
+
writeConfig(config, input.home);
|
|
88
|
+
return { serviceUrl, token: refreshed.idToken, config };
|
|
89
|
+
}
|
|
90
|
+
return { serviceUrl, config };
|
|
91
|
+
}
|
|
92
|
+
export async function serviceJson(url, token, init = {}, fetchImpl = fetch) {
|
|
93
|
+
const headers = new Headers(init.headers);
|
|
94
|
+
headers.set('accept', 'application/json');
|
|
95
|
+
if (token !== undefined)
|
|
96
|
+
headers.set('authorization', `Bearer ${token}`);
|
|
97
|
+
const res = await fetchImpl(url, { ...init, headers });
|
|
98
|
+
if (!res.ok) {
|
|
99
|
+
let message = `request failed (${res.status})`;
|
|
100
|
+
try {
|
|
101
|
+
const body = (await res.json());
|
|
102
|
+
if (typeof body.error === 'string')
|
|
103
|
+
message = body.error;
|
|
104
|
+
}
|
|
105
|
+
catch { }
|
|
106
|
+
throw new Error(message);
|
|
107
|
+
}
|
|
108
|
+
if (res.status === 204)
|
|
109
|
+
return undefined;
|
|
110
|
+
return (await res.json());
|
|
111
|
+
}
|
|
112
|
+
function normalizeServiceUrl(value) {
|
|
113
|
+
return value.replace(/\/+$/, '');
|
|
114
|
+
}
|
|
115
|
+
function isExpiring(iso) {
|
|
116
|
+
if (iso === undefined)
|
|
117
|
+
return true;
|
|
118
|
+
return Date.parse(iso) - Date.now() < 60_000;
|
|
119
|
+
}
|
|
120
|
+
function expiresAt(expiresIn) {
|
|
121
|
+
return new Date(Date.now() + Math.max(0, expiresIn - 60) * 1000).toISOString();
|
|
122
|
+
}
|
|
123
|
+
function decodeIdentity(idToken) {
|
|
124
|
+
const parts = idToken.split('.');
|
|
125
|
+
const payload = parts[1];
|
|
126
|
+
if (payload === undefined)
|
|
127
|
+
return undefined;
|
|
128
|
+
try {
|
|
129
|
+
const decoded = JSON.parse(Buffer.from(payload, 'base64url').toString('utf8'));
|
|
130
|
+
return typeof decoded.sub === 'string' && typeof decoded.email === 'string'
|
|
131
|
+
? { subject: decoded.sub, email: decoded.email.toLowerCase() }
|
|
132
|
+
: undefined;
|
|
133
|
+
}
|
|
134
|
+
catch {
|
|
135
|
+
return undefined;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
function base64Url(bytes) {
|
|
139
|
+
return bytes.toString('base64url');
|
|
140
|
+
}
|
|
141
|
+
async function exchangeCode(input) {
|
|
142
|
+
const params = new URLSearchParams({
|
|
143
|
+
client_id: input.clientId,
|
|
144
|
+
code: input.code,
|
|
145
|
+
code_verifier: input.verifier,
|
|
146
|
+
grant_type: 'authorization_code',
|
|
147
|
+
redirect_uri: input.redirectUri,
|
|
148
|
+
});
|
|
149
|
+
return parseGoogleTokenResponse(await input.fetchImpl(GOOGLE_TOKEN_URL, {
|
|
150
|
+
method: 'POST',
|
|
151
|
+
headers: { 'content-type': 'application/x-www-form-urlencoded' },
|
|
152
|
+
body: params,
|
|
153
|
+
}));
|
|
154
|
+
}
|
|
155
|
+
async function refreshIdToken(input) {
|
|
156
|
+
const params = new URLSearchParams({
|
|
157
|
+
client_id: input.clientId,
|
|
158
|
+
refresh_token: input.refreshToken,
|
|
159
|
+
grant_type: 'refresh_token',
|
|
160
|
+
});
|
|
161
|
+
return parseGoogleTokenResponse(await input.fetchImpl(GOOGLE_TOKEN_URL, {
|
|
162
|
+
method: 'POST',
|
|
163
|
+
headers: { 'content-type': 'application/x-www-form-urlencoded' },
|
|
164
|
+
body: params,
|
|
165
|
+
}));
|
|
166
|
+
}
|
|
167
|
+
async function parseGoogleTokenResponse(res) {
|
|
168
|
+
const body = (await res.json());
|
|
169
|
+
if (!res.ok || typeof body.id_token !== 'string') {
|
|
170
|
+
const message = typeof body.error_description === 'string'
|
|
171
|
+
? body.error_description
|
|
172
|
+
: typeof body.error === 'string'
|
|
173
|
+
? body.error
|
|
174
|
+
: `Google token exchange failed (${res.status})`;
|
|
175
|
+
throw new Error(message);
|
|
176
|
+
}
|
|
177
|
+
return {
|
|
178
|
+
idToken: body.id_token,
|
|
179
|
+
...(typeof body.refresh_token === 'string' ? { refreshToken: body.refresh_token } : {}),
|
|
180
|
+
expiresIn: typeof body.expires_in === 'number' ? body.expires_in : 3600,
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
async function waitForCallback(expectedState) {
|
|
184
|
+
let resolveCode;
|
|
185
|
+
let rejectCode;
|
|
186
|
+
const code = new Promise((resolve, reject) => {
|
|
187
|
+
resolveCode = resolve;
|
|
188
|
+
rejectCode = reject;
|
|
189
|
+
});
|
|
190
|
+
const server = createServer((req, res) => {
|
|
191
|
+
const url = new URL(req.url ?? '/', 'http://127.0.0.1');
|
|
192
|
+
const gotState = url.searchParams.get('state');
|
|
193
|
+
const gotCode = url.searchParams.get('code');
|
|
194
|
+
const error = url.searchParams.get('error');
|
|
195
|
+
if (error !== null) {
|
|
196
|
+
res.writeHead(400, { 'content-type': 'text/plain; charset=utf-8' });
|
|
197
|
+
res.end('Login failed. You can close this tab.');
|
|
198
|
+
rejectCode(new Error(error));
|
|
199
|
+
}
|
|
200
|
+
else if (gotState !== expectedState || gotCode === null) {
|
|
201
|
+
res.writeHead(400, { 'content-type': 'text/plain; charset=utf-8' });
|
|
202
|
+
res.end('Invalid login callback. You can close this tab.');
|
|
203
|
+
rejectCode(new Error('invalid login callback'));
|
|
204
|
+
}
|
|
205
|
+
else {
|
|
206
|
+
res.writeHead(200, { 'content-type': 'text/plain; charset=utf-8' });
|
|
207
|
+
res.end('Login complete. You can close this tab.');
|
|
208
|
+
resolveCode(gotCode);
|
|
209
|
+
}
|
|
210
|
+
server.close();
|
|
211
|
+
});
|
|
212
|
+
await new Promise((resolve) => server.listen(0, '127.0.0.1', resolve));
|
|
213
|
+
const { port } = server.address();
|
|
214
|
+
return { port, code };
|
|
215
|
+
}
|
|
216
|
+
function openBrowser(url) {
|
|
217
|
+
const platform = process.platform;
|
|
218
|
+
const command = platform === 'darwin' ? 'open' : platform === 'win32' ? 'cmd' : 'xdg-open';
|
|
219
|
+
const args = platform === 'win32' ? ['/c', 'start', '', url] : [url];
|
|
220
|
+
const child = spawn(command, args, { detached: true, stdio: 'ignore' });
|
|
221
|
+
child.unref();
|
|
222
|
+
}
|
|
223
|
+
//# sourceMappingURL=control-plane.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"control-plane.js","sourceRoot":"","sources":["../src/control-plane.ts"],"names":[],"mappings":"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"}
|
package/dist/deploy.d.ts
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
export declare const DEFAULT_SERVICE_URL = "http://127.0.0.1:8787";
|
|
2
|
+
export interface DeployOptions {
|
|
3
|
+
readonly manifestPath: string;
|
|
4
|
+
/** Optional declarative connector-catalog file, so deployed tools can call APIs. */
|
|
5
|
+
readonly connectorsPath?: string;
|
|
6
|
+
/** Optional local JSON file of `name -> value` secrets (keep it out of the repo). */
|
|
7
|
+
readonly secretsPath?: string;
|
|
8
|
+
readonly serviceUrl?: string;
|
|
9
|
+
/** Control-plane bearer token for hosted management endpoints (`Authorization: Bearer <token>`). */
|
|
10
|
+
readonly authToken?: string;
|
|
11
|
+
readonly org?: string;
|
|
12
|
+
readonly app?: string;
|
|
13
|
+
readonly env?: string;
|
|
14
|
+
/**
|
|
15
|
+
* Access mode for the deployed endpoint. Identity modes (`owner-only`, `org-members`) gate the MCP endpoint
|
|
16
|
+
* on verified identity and mint no caller key; default `caller-key` keeps the shared per-server bearer.
|
|
17
|
+
*/
|
|
18
|
+
readonly accessMode?: AccessMode;
|
|
19
|
+
/** Injectable for tests; defaults to the global `fetch`. */
|
|
20
|
+
readonly fetchImpl?: typeof fetch;
|
|
21
|
+
/** Injectable for tests; defaults to `process.env`. Source of `NOODLE_SECRET_<NAME>` values. */
|
|
22
|
+
readonly secretsEnv?: NodeJS.ProcessEnv;
|
|
23
|
+
}
|
|
24
|
+
export type DeployOutcome = {
|
|
25
|
+
readonly ok: true;
|
|
26
|
+
readonly deploymentId: string;
|
|
27
|
+
readonly url: string;
|
|
28
|
+
readonly accessMode: AccessMode;
|
|
29
|
+
/** Present only for `caller-key` deployments; identity modes mint no key. */
|
|
30
|
+
readonly callerKey?: string;
|
|
31
|
+
} | {
|
|
32
|
+
readonly ok: false;
|
|
33
|
+
readonly status: number;
|
|
34
|
+
readonly message: string;
|
|
35
|
+
readonly errors?: unknown;
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* Read a manifest file and POST it to a deploy service. Returns the deployed server's id + endpoint URL,
|
|
39
|
+
* or a structured failure (unreachable service, or a `4xx` with compile errors).
|
|
40
|
+
*/
|
|
41
|
+
export declare function deploy(options: DeployOptions): Promise<DeployOutcome>;
|
|
42
|
+
export type AccessMode = 'caller-key' | 'owner-only' | 'org-members';
|
|
43
|
+
/**
|
|
44
|
+
* Collect deploy-time secret *values* from a local `--secrets` JSON file and/or `NOODLE_SECRET_<NAME>`
|
|
45
|
+
* environment variables, with env overriding the file. Returns `undefined` when nothing is supplied, so
|
|
46
|
+
* the deploy body omits `secrets` entirely. Secret values never touch the catalog or manifest — they ride
|
|
47
|
+
* this side channel only. Throws on a malformed file (caught by `deploy` and surfaced without any value).
|
|
48
|
+
*/
|
|
49
|
+
export declare function loadSecrets(secretsPath: string | undefined, env: NodeJS.ProcessEnv): Record<string, string> | undefined;
|
|
50
|
+
/**
|
|
51
|
+
* Read a deploy input into `{ manifest, connectors? }`. A `.yaml`/`.json` manifest is taken verbatim; an
|
|
52
|
+
* authored `.ts`/`.js` server is loaded and emits both its manifest and (if it has `.compute()` operations)
|
|
53
|
+
* a connector catalog, so authoring a compute server in TypeScript deploys in one command.
|
|
54
|
+
*
|
|
55
|
+
* Exported so `validate` reuses the exact same input-loading path as `deploy` (including the `server.ts`
|
|
56
|
+
* authoring leg), keeping author-time validation faithful to what a deploy would compile.
|
|
57
|
+
*/
|
|
58
|
+
export declare function readDeployInput(path: string): Promise<{
|
|
59
|
+
manifest: string;
|
|
60
|
+
connectors?: string;
|
|
61
|
+
}>;
|
|
62
|
+
//# sourceMappingURL=deploy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../src/deploy.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,mBAAmB,0BAA0B,CAAC;AAE3D,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,oFAAoF;IACpF,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,qFAAqF;IACrF,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,oGAAoG;IACpG,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,UAAU,CAAC;IACjC,4DAA4D;IAC5D,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IAClC,gGAAgG;IAChG,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CACzC;AAID,MAAM,MAAM,aAAa,GACrB;IACE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAClB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,6EAA6E;IAC7E,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B,GACD;IACE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IACnB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;CAC3B,CAAC;AAEN;;;GAGG;AACH,wBAAsB,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,CA+E3E;AAED,MAAM,MAAM,UAAU,GAAG,YAAY,GAAG,YAAY,GAAG,aAAa,CAAC;AAerE;;;;;GAKG;AACH,wBAAgB,WAAW,CACzB,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,GAAG,EAAE,MAAM,CAAC,UAAU,GACrB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAsBpC;AAED;;;;;;;GAOG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,MAAM,GACX,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAUpD"}
|