@frontmcp/sdk 1.3.0 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +65 -60
- package/agent/agent.scope.d.ts +164 -0
- package/agent/agent.scope.d.ts.map +1 -1
- package/app/instances/app.esm.instance.d.ts.map +1 -1
- package/app/instances/app.remote.instance.d.ts.map +1 -1
- package/auth/auth-ui/auth-ui.contract.d.ts +149 -0
- package/auth/auth-ui/auth-ui.contract.d.ts.map +1 -0
- package/auth/auth-ui/auth-ui.registry.d.ts +151 -0
- package/auth/auth-ui/auth-ui.registry.d.ts.map +1 -0
- package/auth/auth-ui/auth-ui.render.d.ts +49 -0
- package/auth/auth-ui/auth-ui.render.d.ts.map +1 -0
- package/auth/auth-ui/auth-ui.state.d.ts +62 -0
- package/auth/auth-ui/auth-ui.state.d.ts.map +1 -0
- package/auth/auth-ui/index.d.ts +24 -0
- package/auth/auth-ui/index.d.ts.map +1 -0
- package/auth/auth.registry.d.ts.map +1 -1
- package/auth/authorized-apps.utils.d.ts +51 -0
- package/auth/authorized-apps.utils.d.ts.map +1 -0
- package/auth/consent-tools.helper.d.ts +26 -0
- package/auth/consent-tools.helper.d.ts.map +1 -0
- package/auth/consent.utils.d.ts +62 -0
- package/auth/consent.utils.d.ts.map +1 -0
- package/auth/credentials/credentials.context-extension.d.ts +63 -0
- package/auth/credentials/credentials.context-extension.d.ts.map +1 -0
- package/auth/credentials/credentials.providers.d.ts +40 -0
- package/auth/credentials/credentials.providers.d.ts.map +1 -0
- package/auth/credentials/index.d.ts +3 -0
- package/auth/credentials/index.d.ts.map +1 -0
- package/auth/flows/auth.verify.flow.d.ts.map +1 -1
- package/auth/flows/oauth.auth-ui.flow.d.ts +53 -0
- package/auth/flows/oauth.auth-ui.flow.d.ts.map +1 -0
- package/auth/flows/oauth.authorize.flow.d.ts +51 -9
- package/auth/flows/oauth.authorize.flow.d.ts.map +1 -1
- package/auth/flows/oauth.callback.flow.d.ts +118 -5
- package/auth/flows/oauth.callback.flow.d.ts.map +1 -1
- package/auth/flows/oauth.connect.flow.d.ts +89 -0
- package/auth/flows/oauth.connect.flow.d.ts.map +1 -0
- package/auth/flows/oauth.provider-callback.flow.d.ts +34 -4
- package/auth/flows/oauth.provider-callback.flow.d.ts.map +1 -1
- package/auth/flows/oauth.register.flow.d.ts +16 -20
- package/auth/flows/oauth.register.flow.d.ts.map +1 -1
- package/auth/flows/oauth.token.flow.d.ts +2 -2
- package/auth/flows/oauth.token.flow.d.ts.map +1 -1
- package/auth/flows/oauth.userinfo.flow.d.ts +67 -0
- package/auth/flows/oauth.userinfo.flow.d.ts.map +1 -0
- package/auth/flows/session.verify.flow.d.ts +2 -2
- package/auth/flows/session.verify.flow.d.ts.map +1 -1
- package/auth/flows/well-known.jwks.flow.d.ts +3 -3
- package/auth/flows/well-known.oauth-authorization-server.flow.d.ts +3 -2
- package/auth/flows/well-known.oauth-authorization-server.flow.d.ts.map +1 -1
- package/auth/flows/well-known.prm.flow.d.ts +1 -1
- package/auth/flows/well-known.prm.flow.d.ts.map +1 -1
- package/auth/instances/instance.local-primary-auth.d.ts +226 -12
- package/auth/instances/instance.local-primary-auth.d.ts.map +1 -1
- package/auth/secure-store/index.d.ts +3 -0
- package/auth/secure-store/index.d.ts.map +1 -0
- package/auth/secure-store/secure-store.context-extension.d.ts +61 -0
- package/auth/secure-store/secure-store.context-extension.d.ts.map +1 -0
- package/auth/secure-store/secure-store.providers.d.ts +36 -0
- package/auth/secure-store/secure-store.providers.d.ts.map +1 -0
- package/common/decorators/agent.decorator.d.ts +32 -0
- package/common/decorators/agent.decorator.d.ts.map +1 -1
- package/common/decorators/app.decorator.d.ts.map +1 -1
- package/common/decorators/front-mcp.decorator.d.ts.map +1 -1
- package/common/decorators/skill.decorator.d.ts.map +1 -1
- package/common/decorators/tool.decorator.d.ts +44 -0
- package/common/decorators/tool.decorator.d.ts.map +1 -1
- package/common/entries/scope.entry.d.ts +7 -0
- package/common/entries/scope.entry.d.ts.map +1 -1
- package/common/entries/skill.entry.d.ts +22 -1
- package/common/entries/skill.entry.d.ts.map +1 -1
- package/common/entries/tool.entry.d.ts +17 -0
- package/common/entries/tool.entry.d.ts.map +1 -1
- package/common/interfaces/internal/primary-auth-provider.interface.d.ts +18 -0
- package/common/interfaces/internal/primary-auth-provider.interface.d.ts.map +1 -1
- package/common/interfaces/tool.interface.d.ts +26 -0
- package/common/interfaces/tool.interface.d.ts.map +1 -1
- package/common/metadata/app.metadata.d.ts +472 -0
- package/common/metadata/app.metadata.d.ts.map +1 -1
- package/common/metadata/front-mcp.metadata.d.ts +1773 -52
- package/common/metadata/front-mcp.metadata.d.ts.map +1 -1
- package/common/metadata/index.d.ts +1 -0
- package/common/metadata/index.d.ts.map +1 -1
- package/common/metadata/output-policy.d.ts +82 -0
- package/common/metadata/output-policy.d.ts.map +1 -0
- package/common/metadata/skill.metadata.d.ts +45 -1
- package/common/metadata/skill.metadata.d.ts.map +1 -1
- package/common/metadata/tool-ui.metadata.d.ts +1 -1
- package/common/metadata/tool-ui.metadata.d.ts.map +1 -1
- package/common/metadata/tool.metadata.d.ts +65 -0
- package/common/metadata/tool.metadata.d.ts.map +1 -1
- package/common/schemas/http-output.schema.d.ts +25 -25
- package/common/schemas/http-output.schema.d.ts.map +1 -1
- package/common/tokens/app.tokens.d.ts.map +1 -1
- package/common/tokens/front-mcp.tokens.d.ts.map +1 -1
- package/common/tokens/skill.tokens.d.ts +2 -0
- package/common/tokens/skill.tokens.d.ts.map +1 -1
- package/common/tokens/tool.tokens.d.ts +1 -0
- package/common/tokens/tool.tokens.d.ts.map +1 -1
- package/common/types/auth/session.types.d.ts +2 -2
- package/common/types/options/auth/index.d.ts +4 -4
- package/common/types/options/auth/index.d.ts.map +1 -1
- package/common/types/options/auth/interfaces.d.ts +1 -1
- package/common/types/options/auth/interfaces.d.ts.map +1 -1
- package/common/types/options/auth/orchestrated.schema.d.ts +1 -1
- package/common/types/options/auth/orchestrated.schema.d.ts.map +1 -1
- package/common/types/options/auth/shared.schemas.d.ts +2 -2
- package/common/types/options/auth/shared.schemas.d.ts.map +1 -1
- package/common/types/options/http/index.d.ts +1 -1
- package/common/types/options/http/index.d.ts.map +1 -1
- package/common/types/options/http/interfaces.d.ts +56 -1
- package/common/types/options/http/interfaces.d.ts.map +1 -1
- package/common/types/options/http/schema.d.ts +15 -0
- package/common/types/options/http/schema.d.ts.map +1 -1
- package/common/types/options/session/schema.d.ts +3 -3
- package/common/types/options/transport/schema.d.ts +1 -1
- package/common/utils/caller-dir.utils.d.ts +15 -0
- package/common/utils/caller-dir.utils.d.ts.map +1 -0
- package/common/utils/index.d.ts +1 -0
- package/common/utils/index.d.ts.map +1 -1
- package/errors/index.d.ts +3 -1
- package/errors/index.d.ts.map +1 -1
- package/errors/mcp.error.d.ts +36 -2
- package/errors/mcp.error.d.ts.map +1 -1
- package/errors/tool-credentials-required.error.d.ts +70 -0
- package/errors/tool-credentials-required.error.d.ts.map +1 -0
- package/esm/index.mjs +6551 -2688
- package/flows/flow.instance.d.ts.map +1 -1
- package/front-mcp/front-mcp.d.ts +52 -32
- package/front-mcp/front-mcp.d.ts.map +1 -1
- package/front-mcp/front-mcp.providers.d.ts +700 -8
- package/front-mcp/front-mcp.providers.d.ts.map +1 -1
- package/index.d.ts +29 -4
- package/index.d.ts.map +1 -1
- package/index.js +7138 -3307
- package/package.json +10 -11
- package/scope/flows/http.request.flow.d.ts +18 -1
- package/scope/flows/http.request.flow.d.ts.map +1 -1
- package/scope/optional-dependency.util.d.ts +39 -0
- package/scope/optional-dependency.util.d.ts.map +1 -0
- package/scope/scope.instance.d.ts +17 -0
- package/scope/scope.instance.d.ts.map +1 -1
- package/scope/scope.utils.d.ts.map +1 -1
- package/server/adapters/express.host.adapter.d.ts.map +1 -1
- package/server/custom-routes.helper.d.ts +81 -0
- package/server/custom-routes.helper.d.ts.map +1 -0
- package/skill/flows/http/llm-full-txt.flow.d.ts +1 -1
- package/skill/flows/http/llm-txt.flow.d.ts +1 -1
- package/skill/flows/http/skills-api.flow.d.ts +18 -1
- package/skill/flows/http/skills-api.flow.d.ts.map +1 -1
- package/skill/flows/load-skill.flow.d.ts +7 -0
- package/skill/flows/load-skill.flow.d.ts.map +1 -1
- package/skill/flows/search-skills.flow.d.ts +13 -0
- package/skill/flows/search-skills.flow.d.ts.map +1 -1
- package/skill/index.d.ts +1 -0
- package/skill/index.d.ts.map +1 -1
- package/skill/sep-2640/resources/skill-file.resource.d.ts.map +1 -1
- package/skill/sep-2640/resources/skill-index.resource.d.ts.map +1 -1
- package/skill/sep-2640/resources/skill-md.resource.d.ts.map +1 -1
- package/skill/sep-2640/sep-2640.per-skill.d.ts.map +1 -1
- package/skill/skill-authorities.helper.d.ts +100 -0
- package/skill/skill-authorities.helper.d.ts.map +1 -0
- package/skill/skill.instance.d.ts.map +1 -1
- package/skill/skill.registry.d.ts +34 -0
- package/skill/skill.registry.d.ts.map +1 -1
- package/task/helpers/cli-task-runner.d.ts.map +1 -1
- package/tool/flows/call-tool.flow.d.ts +26 -1
- package/tool/flows/call-tool.flow.d.ts.map +1 -1
- package/tool/flows/tool-credentials.gate.d.ts +31 -0
- package/tool/flows/tool-credentials.gate.d.ts.map +1 -0
- package/tool/flows/tools-list.flow.d.ts.map +1 -1
- package/tool/tool.instance.d.ts.map +1 -1
- package/tool/ui/index.d.ts +1 -1
- package/tool/ui/index.d.ts.map +1 -1
- package/tool/ui/ui-resource.handler.d.ts.map +1 -1
- package/tool/ui/ui-shared.d.ts +33 -1
- package/tool/ui/ui-shared.d.ts.map +1 -1
- package/transport/adapters/transport.local.adapter.d.ts.map +1 -1
- package/transport/flows/handle.sse.flow.d.ts +1 -1
- package/transport/flows/handle.streamable-http.flow.d.ts +58 -1
- package/transport/flows/handle.streamable-http.flow.d.ts.map +1 -1
- package/transport/mcp-handlers/call-tool-request.handler.d.ts.map +1 -1
- package/transport/mcp-handlers/read-resource-request.handler.d.ts.map +1 -1
- package/transport/mcp-handlers/skills-list-request.handler.d.ts.map +1 -1
- package/transport/mcp-handlers/skills-load-request.handler.d.ts.map +1 -1
- package/transport/mcp-handlers/skills-search-request.handler.d.ts.map +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@frontmcp/sdk",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.4.0",
|
|
4
4
|
"description": "FrontMCP SDK",
|
|
5
5
|
"author": "AgentFront <info@agentfront.dev>",
|
|
6
6
|
"homepage": "https://docs.agentfront.dev",
|
|
@@ -86,16 +86,15 @@
|
|
|
86
86
|
"node": ">=24.0.0"
|
|
87
87
|
},
|
|
88
88
|
"peerDependencies": {
|
|
89
|
-
"zod": "^4.0.0",
|
|
90
89
|
"express": "^4.18.0 || ^5.0.0",
|
|
91
90
|
"cors": "^2.8.5",
|
|
92
91
|
"raw-body": "^3.0.0",
|
|
93
92
|
"content-type": "^1.0.5",
|
|
94
93
|
"@vercel/kv": "^3.0.0",
|
|
95
|
-
"@frontmcp/storage-sqlite": "1.
|
|
94
|
+
"@frontmcp/storage-sqlite": "1.4.0",
|
|
96
95
|
"openai": "^4.0.0 || ^5.0.0 || ^6.0.0",
|
|
97
96
|
"@anthropic-ai/sdk": "^0.30.0 || ^0.78.0",
|
|
98
|
-
"@frontmcp/observability": "1.
|
|
97
|
+
"@frontmcp/observability": "1.4.0",
|
|
99
98
|
"@enclave-vm/core": "^2.13.0",
|
|
100
99
|
"vectoriadb": "^2.2.0",
|
|
101
100
|
"@opentelemetry/api": "^1.9.0",
|
|
@@ -132,13 +131,13 @@
|
|
|
132
131
|
},
|
|
133
132
|
"dependencies": {
|
|
134
133
|
"@types/cors": "^2.8.17",
|
|
135
|
-
"@frontmcp/utils": "1.
|
|
136
|
-
"@frontmcp/guard": "1.
|
|
137
|
-
"@frontmcp/di": "1.
|
|
138
|
-
"@frontmcp/lazy-zod": "1.
|
|
139
|
-
"@frontmcp/uipack": "1.
|
|
140
|
-
"@frontmcp/auth": "1.
|
|
141
|
-
"@frontmcp/protocol": "1.
|
|
134
|
+
"@frontmcp/utils": "1.4.0",
|
|
135
|
+
"@frontmcp/guard": "1.4.0",
|
|
136
|
+
"@frontmcp/di": "1.4.0",
|
|
137
|
+
"@frontmcp/lazy-zod": "1.4.0",
|
|
138
|
+
"@frontmcp/uipack": "1.4.0",
|
|
139
|
+
"@frontmcp/auth": "1.4.0",
|
|
140
|
+
"@frontmcp/protocol": "1.4.0",
|
|
142
141
|
"ioredis": "^5.8.0",
|
|
143
142
|
"js-yaml": "^4.1.1",
|
|
144
143
|
"jose": "^6.1.3",
|
|
@@ -44,11 +44,11 @@ export declare const httpRequestStateSchema: import("@frontmcp/lazy-zod").ZodObj
|
|
|
44
44
|
isPublic: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodBoolean>;
|
|
45
45
|
platformType: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodEnum<{
|
|
46
46
|
unknown: "unknown";
|
|
47
|
+
continue: "continue";
|
|
47
48
|
openai: "openai";
|
|
48
49
|
claude: "claude";
|
|
49
50
|
gemini: "gemini";
|
|
50
51
|
cursor: "cursor";
|
|
51
|
-
continue: "continue";
|
|
52
52
|
cody: "cody";
|
|
53
53
|
"generic-mcp": "generic-mcp";
|
|
54
54
|
"ext-apps": "ext-apps";
|
|
@@ -92,6 +92,23 @@ export default class HttpRequestFlow extends FlowBase<typeof name> {
|
|
|
92
92
|
traceRequest(): Promise<void>;
|
|
93
93
|
acquireQuota(): Promise<void>;
|
|
94
94
|
checkAuthorization(): Promise<void>;
|
|
95
|
+
/**
|
|
96
|
+
* Build a live {@link OrchestratedAuthAccessorAdapter} for the verified request
|
|
97
|
+
* and register it under {@link ORCHESTRATED_AUTH_ACCESSOR} so tools can read
|
|
98
|
+
* upstream provider tokens via `this.orchestration.getToken(id)`.
|
|
99
|
+
*
|
|
100
|
+
* `session:verify` returns a lightweight authorization (`{ token, user, … }`)
|
|
101
|
+
* rather than a full OrchestratedAuthorization, so we reconstruct one here from
|
|
102
|
+
* the verified JWT + the primary auth's encrypted token store (the same store
|
|
103
|
+
* the federated provider-callback flow wrote upstream tokens into, keyed by
|
|
104
|
+
* `deriveAuthorizationId(token)`). No-op unless the scope is in orchestrated
|
|
105
|
+
* mode with a token store and a non-empty bearer token — so public/transparent
|
|
106
|
+
* and anonymous requests are unaffected.
|
|
107
|
+
*
|
|
108
|
+
* Security: tokens stay server-side and AES-GCM-encrypted at rest; only the
|
|
109
|
+
* non-PII provider ids are read here to project the authorization.
|
|
110
|
+
*/
|
|
111
|
+
private bindOrchestrationAccessor;
|
|
95
112
|
router(): Promise<void>;
|
|
96
113
|
handleLegacySse(): Promise<void>;
|
|
97
114
|
handleSse(): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.request.flow.d.ts","sourceRoot":"","sources":["../../../src/scope/flows/http.request.flow.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"http.request.flow.d.ts","sourceRoot":"","sources":["../../../src/scope/flows/http.request.flow.ts"],"names":[],"mappings":"AAYA,OAAO,EAIL,QAAQ,EAGR,eAAe,EACf,gBAAgB,EAShB,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,aAAa,EACnB,MAAM,cAAc,CAAC;AAGtB,QAAA,MAAM,IAAI;;;;;CA8B2B,CAAC;AAEtC,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gCAIjC,CAAC;AAEH,QAAA,MAAM,IAAI,EAAG,cAAuB,CAAC;AAGrC,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,WAAW;QACnB,cAAc,EAAE,cAAc,CAC5B,eAAe,EACf,OAAO,IAAI,EACX,OAAO,eAAe,EACtB,OAAO,gBAAgB,EACvB,OAAO,sBAAsB,CAC9B,CAAC;KACH;CACF;AAYD,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,QAAQ,CAAC,OAAO,IAAI,CAAC;IAChE,MAAM,wCAA8C;IACpD,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,SAAS,CAAM;IAEvB,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU;IActD,YAAY;IAkDZ,YAAY;IA8BZ,kBAAkB;IAmDxB;;;;;;;;;;;;;;;OAeG;YACW,yBAAyB;IAwCjC,MAAM;IAsNN,eAAe;IAuBf,SAAS;IAuBT,oBAAoB;IAuBpB,kBAAkB;IAuBlB,mBAAmB;IAuBnB,mBAAmB;IAgDnB,QAAQ;IAcd;;;OAGG;IACH,OAAO,CAAC,QAAQ;CA8CjB"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Helpers for probing optional peer dependencies that are loaded lazily via
|
|
3
|
+
* `require()` (e.g. `@frontmcp/observability`).
|
|
4
|
+
*
|
|
5
|
+
* A bare `try { require(pkg) } catch { warn("not installed") }` is misleading:
|
|
6
|
+
* `require()` throws for many reasons OTHER than the package being absent — an
|
|
7
|
+
* export-condition or transpile mismatch (a dev runtime such as tsx resolving a
|
|
8
|
+
* package's TS source entry under yarn), a missing transitive peer, or a load-time
|
|
9
|
+
* error in the module itself. In all of those the package IS installed and
|
|
10
|
+
* resolvable, yet the user is told to reinstall it, which never helps (#453).
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Outcome of classifying a failed `require()` of an optional dependency.
|
|
14
|
+
*/
|
|
15
|
+
export interface OptionalDependencyProbe {
|
|
16
|
+
/**
|
|
17
|
+
* - `not-installed` — the module is genuinely unresolvable (reinstalling helps).
|
|
18
|
+
* - `load-failed` — the module resolves but `require()` threw (a load / export
|
|
19
|
+
* condition / transpile / peer mismatch; reinstalling will NOT help).
|
|
20
|
+
*/
|
|
21
|
+
status: 'not-installed' | 'load-failed';
|
|
22
|
+
/** Path returned by the runtime resolver, present only when `load-failed`. */
|
|
23
|
+
resolvedPath?: string;
|
|
24
|
+
/** Message from the original `require()` error. */
|
|
25
|
+
error: string;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Classify why `require(moduleName)` failed by re-probing with the SAME resolver
|
|
29
|
+
* the runtime uses, so the verdict matches reality instead of always blaming a
|
|
30
|
+
* missing install.
|
|
31
|
+
*
|
|
32
|
+
* @param moduleName - the specifier that failed to `require()`.
|
|
33
|
+
* @param loadError - the error thrown by the failed `require()`.
|
|
34
|
+
* @param resolve - resolver to probe existence with. Pass `require.resolve` from
|
|
35
|
+
* the caller; kept injectable so this stays unit-testable and ESM-safe (the
|
|
36
|
+
* helper module itself never references `require`).
|
|
37
|
+
*/
|
|
38
|
+
export declare function probeOptionalDependency(moduleName: string, loadError: unknown, resolve: (id: string) => string): OptionalDependencyProbe;
|
|
39
|
+
//# sourceMappingURL=optional-dependency.util.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"optional-dependency.util.d.ts","sourceRoot":"","sources":["../../src/scope/optional-dependency.util.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC;;;;OAIG;IACH,MAAM,EAAE,eAAe,GAAG,aAAa,CAAC;IACxC,8EAA8E;IAC9E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mDAAmD;IACnD,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,uBAAuB,CACrC,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,OAAO,EAClB,OAAO,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,GAC9B,uBAAuB,CAWzB"}
|
|
@@ -3,6 +3,7 @@ import { type GuardManager } from '@frontmcp/guard';
|
|
|
3
3
|
import { type EventStore } from '@frontmcp/protocol';
|
|
4
4
|
import AgentRegistry from '../agent/agent.registry';
|
|
5
5
|
import AppRegistry from '../app/app.registry';
|
|
6
|
+
import { AuthUiRegistry } from '../auth/auth-ui';
|
|
6
7
|
import { AuthRegistry } from '../auth/auth.registry';
|
|
7
8
|
import { type ChannelNotificationService } from '../channel/channel-notification.service';
|
|
8
9
|
import type ChannelRegistry from '../channel/channel.registry';
|
|
@@ -44,6 +45,7 @@ export declare class Scope extends ScopeEntry {
|
|
|
44
45
|
notificationService: NotificationService;
|
|
45
46
|
haManager?: HaManager;
|
|
46
47
|
private toolUIRegistry;
|
|
48
|
+
private authUiRegistry?;
|
|
47
49
|
readonly entryPath: string;
|
|
48
50
|
readonly routeBase: string;
|
|
49
51
|
readonly orchestrated: boolean;
|
|
@@ -99,6 +101,20 @@ export declare class Scope extends ScopeEntry {
|
|
|
99
101
|
* Extracted from initialize() for readability.
|
|
100
102
|
*/
|
|
101
103
|
private compileUIWidgets;
|
|
104
|
+
/**
|
|
105
|
+
* Build the custom auth-UI registry (#469) PER SCOPE from this scope's resolved
|
|
106
|
+
* auth options (`auth.ui` / `auth.extras`). The parent multi-app scope reads
|
|
107
|
+
* the top-level `@FrontMcp({ auth })`, and each `splitByApp` scope reads its own
|
|
108
|
+
* `@App({ auth })` (resolved into `this.metadata.auth` by `normalizeAppScope`),
|
|
109
|
+
* so a split app gets ITS OWN auth UI.
|
|
110
|
+
*
|
|
111
|
+
* No-op (leaves {@link authUiRegistry} undefined) when neither is declared, so
|
|
112
|
+
* the OAuth flows serve the built-in HTML pages exactly as before. When custom
|
|
113
|
+
* slots ARE declared, their SSR + hydration bundles are pre-built at startup
|
|
114
|
+
* (mirroring `compileUIWidgets`); build failures are logged + cached, never
|
|
115
|
+
* thrown, so a broken component degrades to the built-in page.
|
|
116
|
+
*/
|
|
117
|
+
private buildAuthUiRegistry;
|
|
102
118
|
private formatScopeSummary;
|
|
103
119
|
private get defaultScopeProviders();
|
|
104
120
|
get auth(): FrontMcpAuth;
|
|
@@ -108,6 +124,7 @@ export declare class Scope extends ScopeEntry {
|
|
|
108
124
|
get apps(): AppRegistry;
|
|
109
125
|
get tools(): ToolRegistry;
|
|
110
126
|
get toolUI(): ToolUIRegistry;
|
|
127
|
+
get authUi(): AuthUiRegistry | undefined;
|
|
111
128
|
get resources(): ResourceRegistry;
|
|
112
129
|
get prompts(): PromptRegistry;
|
|
113
130
|
get agents(): AgentRegistry;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scope.instance.d.ts","sourceRoot":"","sources":["../../src/scope/scope.instance.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAE1B,OAAO,EAAsB,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACxE,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGrD,OAAO,aAAa,MAAM,yBAAyB,CAAC;AAEpD,OAAO,WAAW,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,KAAK,0BAA0B,EAAE,MAAM,yCAAyC,CAAC;AAE1F,OAAO,KAAK,eAAe,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAI3E,OAAO,EACL,cAAc,EACd,cAAc,EAEd,UAAU,EAEV,KAAK,WAAW,EAChB,KAAK,QAAQ,EACb,KAAK,YAAY,EACjB,KAAK,QAAQ,EACb,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,KAAK,EACV,KAAK,IAAI,EACV,MAAM,WAAW,CAAC;AAQnB,OAAO,EAA0B,KAAK,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAK/E,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,YAAY,MAAM,wBAAwB,CAAC;AAIlD,OAAO,KAAK,WAAW,MAAM,qBAAqB,CAAC;AAInD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,cAAwC,MAAM,2BAA2B,CAAC;AACjF,OAAO,cAAc,MAAM,2BAA2B,CAAC;AACvD,OAAO,gBAAgB,MAAM,+BAA+B,CAAC;AAC7D,OAAO,gBAAgB,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"scope.instance.d.ts","sourceRoot":"","sources":["../../src/scope/scope.instance.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scope.utils.d.ts","sourceRoot":"","sources":["../../src/scope/scope.utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,KAAK,EAAE,MAAM,cAAc,CAAC;AAGvD,OAAO,EAGL,KAAK,OAAO,EACZ,KAAK,sBAAsB,EAC3B,KAAK,wBAAwB,EAE7B,KAAK,WAAW,EACjB,MAAM,WAAW,CAAC;AAInB;;;;;GAKG;AAEH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,sBAAsB,GAAG,wBAAwB,GAC1D,WAAW,
|
|
1
|
+
{"version":3,"file":"scope.utils.d.ts","sourceRoot":"","sources":["../../src/scope/scope.utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,KAAK,EAAE,MAAM,cAAc,CAAC;AAGvD,OAAO,EAGL,KAAK,OAAO,EACZ,KAAK,sBAAsB,EAC3B,KAAK,wBAAwB,EAE7B,KAAK,WAAW,EACjB,MAAM,WAAW,CAAC;AAInB;;;;;GAKG;AAEH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,sBAAsB,GAAG,wBAAwB,GAC1D,WAAW,CA2Bb;AAED,wBAAgB,sBAAsB,CAAC,YAAY,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,sBAAsB,GAAG,WAAW,CAU7G;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,WAAW,GAAG,KAAK,EAAE,CAO5D"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"express.host.adapter.d.ts","sourceRoot":"","sources":["../../../src/server/adapters/express.host.adapter.ts"],"names":[],"mappings":"AAIA,OAAO,OAAO,MAAM,SAAS,CAAC;AAI9B,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,UAAU,EAEf,KAAK,oBAAoB,EAE1B,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4CAA4C,CAAC;AAGlF,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD;;;;GAIG;AACH,eAAO,MAAM,0BAA0B,QAAQ,CAAC;AAEhD;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC;;;;OAIG;IACH,IAAI,CAAC,EAAE,WAAW,CAAC;IAEnB;;;OAGG;IACH,QAAQ,CAAC,EAAE,eAAe,CAAC;IAE3B;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAE5B;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACnC;AAED,qBAAa,kBAAmB,SAAQ,iBAAiB;IACvD,OAAO,CAAC,GAAG,CAAa;IACxB,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,QAAQ,CAAS;gBAEb,OAAO,CAAC,EAAE,yBAAyB;
|
|
1
|
+
{"version":3,"file":"express.host.adapter.d.ts","sourceRoot":"","sources":["../../../src/server/adapters/express.host.adapter.ts"],"names":[],"mappings":"AAIA,OAAO,OAAO,MAAM,SAAS,CAAC;AAI9B,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,UAAU,EAEf,KAAK,oBAAoB,EAE1B,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4CAA4C,CAAC;AAGlF,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD;;;;GAIG;AACH,eAAO,MAAM,0BAA0B,QAAQ,CAAC;AAEhD;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC;;;;OAIG;IACH,IAAI,CAAC,EAAE,WAAW,CAAC;IAEnB;;;OAGG;IACH,QAAQ,CAAC,EAAE,eAAe,CAAC;IAE3B;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAE5B;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACnC;AAED,qBAAa,kBAAmB,SAAQ,iBAAiB;IACvD,OAAO,CAAC,GAAG,CAAa;IACxB,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,QAAQ,CAAS;gBAEb,OAAO,CAAC,EAAE,yBAAyB;IAmG/C,aAAa,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,oBAAoB;IAI7E,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,oBAAoB;IAInE,eAAe,CAAC,OAAO,EAAE,oBAAoB,IACnC,KAAK,OAAO,CAAC,OAAO,EAAE,KAAK,OAAO,CAAC,QAAQ,EAAE,MAAM,OAAO,CAAC,YAAY;IAQjF;;;;OAIG;IACH,OAAO,IAAI,IAAI;IAMf;;;OAGG;IACH,UAAU,IAAI,OAAO,CAAC,WAAW;IAK3B,KAAK,CAAC,gBAAgB,EAAE,MAAM,GAAG,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM;YAqCrD,kBAAkB;CASjC"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { type FrontMcpLogger, type FrontMcpServer, type HttpRouteConfig, type ServerRequest, type ServerRequestHandler } from '../common';
|
|
2
|
+
/** Shape of the `session:verify` flow output we care about here. */
|
|
3
|
+
export type VerifyResult = {
|
|
4
|
+
kind: 'authorized';
|
|
5
|
+
authorization: unknown;
|
|
6
|
+
} | {
|
|
7
|
+
kind: 'unauthorized';
|
|
8
|
+
prmMetadataHeader: string;
|
|
9
|
+
} | {
|
|
10
|
+
kind: 'forbidden';
|
|
11
|
+
prmMetadataHeader: string;
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Dispatch the MCP `session:verify` flow for a request. The scope passes a thin
|
|
15
|
+
* closure over its generic `runFlow` so this helper stays decoupled from the
|
|
16
|
+
* scope's flow-name typing.
|
|
17
|
+
*/
|
|
18
|
+
export type VerifySessionFn = (request: ServerRequest) => Promise<VerifyResult | undefined>;
|
|
19
|
+
export interface RegisterCustomHttpRoutesArgs {
|
|
20
|
+
/** Custom routes from `http.routes`. */
|
|
21
|
+
routes: HttpRouteConfig[] | undefined;
|
|
22
|
+
/** Active host server to register routes on. */
|
|
23
|
+
server: FrontMcpServer;
|
|
24
|
+
/** Runs `session:verify` for `auth: true` routes. */
|
|
25
|
+
verifySession: VerifySessionFn;
|
|
26
|
+
/** Resolved gateway entry path (e.g. `''` or `'/mcp'`). */
|
|
27
|
+
entryPath: string;
|
|
28
|
+
/** Per-app / per-scope route base (e.g. `''` or `'/billing'`). */
|
|
29
|
+
routeBase: string;
|
|
30
|
+
logger: FrontMcpLogger;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Error thrown when a custom `http.routes` path collides with a FrontMCP
|
|
34
|
+
* reserved surface. Fail-fast at startup rather than silently shadowing (or
|
|
35
|
+
* being shadowed by) the MCP endpoint / discovery / health surfaces.
|
|
36
|
+
*/
|
|
37
|
+
export declare class ReservedRouteCollisionError extends Error {
|
|
38
|
+
readonly method: string;
|
|
39
|
+
readonly path: string;
|
|
40
|
+
readonly reserved: string;
|
|
41
|
+
constructor(method: string, path: string, reserved: string);
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Build the exact-match + prefix reserved-path set for the resolved MCP base.
|
|
45
|
+
*
|
|
46
|
+
* - Exact matches: the MCP base itself, `<base>/sse`, `<base>/message`,
|
|
47
|
+
* `/health`, `/metrics`.
|
|
48
|
+
* - Prefix matches: `/oauth`, `/.well-known` (any sub-path is reserved).
|
|
49
|
+
*/
|
|
50
|
+
export declare function computeReservedPaths(entryPath: string, routeBase: string): {
|
|
51
|
+
exact: Set<string>;
|
|
52
|
+
prefixes: string[];
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* Throw {@link ReservedRouteCollisionError} when `path` collides with a
|
|
56
|
+
* reserved FrontMCP surface. Express path params (`:id`) and wildcards in the
|
|
57
|
+
* *custom* path are compared literally — only the static prefix matters for the
|
|
58
|
+
* reserved-surface check, so a route like `/files/:id` never collides unless it
|
|
59
|
+
* is literally under `/oauth`, `/.well-known`, etc.
|
|
60
|
+
*/
|
|
61
|
+
export declare function assertNotReserved(method: string, path: string, reserved: {
|
|
62
|
+
exact: Set<string>;
|
|
63
|
+
prefixes: string[];
|
|
64
|
+
}): void;
|
|
65
|
+
/**
|
|
66
|
+
* Wrap a user route handler in the MCP `session:verify` auth flow. On
|
|
67
|
+
* unauthorized/forbidden the request is short-circuited with a 401/403 carrying
|
|
68
|
+
* the `WWW-Authenticate` header (mirroring `http.request.flow.ts`); on success
|
|
69
|
+
* the verified authorization is attached to `req.authSession` (and the internal
|
|
70
|
+
* auth token) before the user handler runs.
|
|
71
|
+
*/
|
|
72
|
+
export declare function wrapWithAuth(handler: ServerRequestHandler, verifySession: VerifySessionFn, logger: FrontMcpLogger): ServerRequestHandler;
|
|
73
|
+
/**
|
|
74
|
+
* Register all configured custom HTTP routes on the active server.
|
|
75
|
+
*
|
|
76
|
+
* No-op when `routes` is empty/undefined. Throws {@link ReservedRouteCollisionError}
|
|
77
|
+
* (fail-fast) on the first path that collides with a reserved surface — so a
|
|
78
|
+
* misconfiguration aborts boot instead of silently mis-mounting.
|
|
79
|
+
*/
|
|
80
|
+
export declare function registerCustomHttpRoutes(args: RegisterCustomHttpRoutesArgs): void;
|
|
81
|
+
//# sourceMappingURL=custom-routes.helper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"custom-routes.helper.d.ts","sourceRoot":"","sources":["../../src/server/custom-routes.helper.ts"],"names":[],"mappings":"AAgBA,OAAO,EAML,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,oBAAoB,EAE1B,MAAM,WAAW,CAAC;AAGnB,oEAAoE;AACpE,MAAM,MAAM,YAAY,GACpB;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,aAAa,EAAE,OAAO,CAAA;CAAE,GAC9C;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,iBAAiB,EAAE,MAAM,CAAA;CAAE,GACnD;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,iBAAiB,EAAE,MAAM,CAAA;CAAE,CAAC;AAErD;;;;GAIG;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,EAAE,aAAa,KAAK,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,CAAC;AAE5F,MAAM,WAAW,4BAA4B;IAC3C,wCAAwC;IACxC,MAAM,EAAE,eAAe,EAAE,GAAG,SAAS,CAAC;IACtC,gDAAgD;IAChD,MAAM,EAAE,cAAc,CAAC;IACvB,qDAAqD;IACrD,aAAa,EAAE,eAAe,CAAC;IAC/B,2DAA2D;IAC3D,SAAS,EAAE,MAAM,CAAC;IAClB,kEAAkE;IAClE,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,cAAc,CAAC;CACxB;AAED;;;;GAIG;AACH,qBAAa,2BAA4B,SAAQ,KAAK;aAElC,MAAM,EAAE,MAAM;aACd,IAAI,EAAE,MAAM;aACZ,QAAQ,EAAE,MAAM;gBAFhB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM;CASnC;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAcrH;AAQD;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE;IAAE,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,GACnD,IAAI,CAYN;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,oBAAoB,EAC7B,aAAa,EAAE,eAAe,EAC9B,MAAM,EAAE,cAAc,GACrB,oBAAoB,CAwCtB;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,4BAA4B,GAAG,IAAI,CAajF"}
|
|
@@ -22,8 +22,8 @@ declare const outputSchema: import("@frontmcp/lazy-zod").ZodObject<{
|
|
|
22
22
|
secure: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodBoolean>;
|
|
23
23
|
sameSite: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodEnum<{
|
|
24
24
|
strict: "strict";
|
|
25
|
-
lax: "lax";
|
|
26
25
|
none: "none";
|
|
26
|
+
lax: "lax";
|
|
27
27
|
}>>;
|
|
28
28
|
maxAge: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodNumber>;
|
|
29
29
|
expires: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodDate>;
|
|
@@ -22,8 +22,8 @@ declare const outputSchema: import("@frontmcp/lazy-zod").ZodObject<{
|
|
|
22
22
|
secure: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodBoolean>;
|
|
23
23
|
sameSite: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodEnum<{
|
|
24
24
|
strict: "strict";
|
|
25
|
-
lax: "lax";
|
|
26
25
|
none: "none";
|
|
26
|
+
lax: "lax";
|
|
27
27
|
}>>;
|
|
28
28
|
maxAge: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodNumber>;
|
|
29
29
|
expires: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodDate>;
|
|
@@ -35,8 +35,8 @@ declare const outputSchema: import("@frontmcp/lazy-zod").ZodObject<{
|
|
|
35
35
|
secure: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodBoolean>;
|
|
36
36
|
sameSite: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodEnum<{
|
|
37
37
|
strict: "strict";
|
|
38
|
-
lax: "lax";
|
|
39
38
|
none: "none";
|
|
39
|
+
lax: "lax";
|
|
40
40
|
}>>;
|
|
41
41
|
maxAge: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodNumber>;
|
|
42
42
|
expires: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodDate>;
|
|
@@ -79,6 +79,23 @@ export default class SkillsApiFlow extends FlowBase<typeof name> {
|
|
|
79
79
|
* provider via the scope DI container.
|
|
80
80
|
*/
|
|
81
81
|
private tryGetSemanticProvider;
|
|
82
|
+
/**
|
|
83
|
+
* Best-effort AuthInfo for HTTP authorities evaluation.
|
|
84
|
+
*
|
|
85
|
+
* The skills HTTP auth validator (api-key / bearer) is a binary gate and does
|
|
86
|
+
* not surface claims, so authority-gated skills are evaluated fail-closed on
|
|
87
|
+
* the HTTP surface. When the server runs in transparent/auth mode the request
|
|
88
|
+
* MAY carry a verified `authSession` with `user` claims; we forward those so a
|
|
89
|
+
* JWT bearer with roles/permissions still evaluates correctly. Otherwise an
|
|
90
|
+
* empty AuthInfo is returned, which denies any role/permission-gated skill.
|
|
91
|
+
*/
|
|
92
|
+
private httpAuthInfo;
|
|
93
|
+
/**
|
|
94
|
+
* Filter search results (whose projected metadata lacks `authorities`) down
|
|
95
|
+
* to skills the caller can discover, by resolving the live skill entry to
|
|
96
|
+
* read its declared authorities. No-op when no engine is configured.
|
|
97
|
+
*/
|
|
98
|
+
private filterHttpResultsByAuthorities;
|
|
82
99
|
private handleListSkills;
|
|
83
100
|
}
|
|
84
101
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skills-api.flow.d.ts","sourceRoot":"","sources":["../../../../src/skill/flows/http/skills-api.flow.ts"],"names":[],"mappings":"AASA,OAAO,EAEL,QAAQ,EAQR,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,aAAa,EACnB,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"skills-api.flow.d.ts","sourceRoot":"","sources":["../../../../src/skill/flows/http/skills-api.flow.ts"],"names":[],"mappings":"AASA,OAAO,EAEL,QAAQ,EAQR,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,aAAa,EACnB,MAAM,iBAAiB,CAAC;AAezB,QAAA,MAAM,WAAW;;;;gCAAkB,CAAC;AAEpC,QAAA,MAAM,WAAW;;;;;;;;;;;;;;;gCAWf,CAAC;AAEH,QAAA,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;gCAAiB,CAAC;AAEpC,QAAA,MAAM,IAAI;;;CAG2B,CAAC;AAEtC,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,WAAW;QACnB,iBAAiB,EAAE,cAAc,CAC/B,aAAa,EACb,OAAO,IAAI,EACX,OAAO,WAAW,EAClB,OAAO,YAAY,EACnB,OAAO,WAAW,CACnB,CAAC;KACH;CACF;AAED,QAAA,MAAM,IAAI,EAAG,iBAA0B,CAAC;AAGxC;;;;;;;;GAQG;AAWH,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,QAAQ,CAAC,OAAO,IAAI,CAAC;IAC9D,MAAM,2CAA2C;IAEjD;;;OAGG;IACH,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO;IAsBhE,YAAY;IAsCZ,YAAY;IA+FZ,aAAa;YA2CL,cAAc;YAuEd,kBAAkB;IA0HhC;;;;OAIG;IACH,OAAO,CAAC,sBAAsB;IAoC9B;;;;;;;;;OASG;IACH,OAAO,CAAC,YAAY;IAMpB;;;;OAIG;YACW,8BAA8B;YAO9B,gBAAgB;CA2D/B"}
|
|
@@ -158,6 +158,13 @@ export default class LoadSkillFlow extends FlowBase<typeof name> {
|
|
|
158
158
|
logger: import("../../common").FrontMcpLogger;
|
|
159
159
|
parseInput(): Promise<void>;
|
|
160
160
|
loadSkills(): Promise<void>;
|
|
161
|
+
/**
|
|
162
|
+
* Resolve the registered skill entry that backs a loaded skill, so its
|
|
163
|
+
* `authorities` metadata can be evaluated. Matches by the requested id, the
|
|
164
|
+
* resolved content id, and finally by display name — covering id/name/
|
|
165
|
+
* qualified-name lookups the registry's `loadSkill` accepts.
|
|
166
|
+
*/
|
|
167
|
+
private findSkillEntry;
|
|
161
168
|
/**
|
|
162
169
|
* Activate skill sessions for tool authorization enforcement.
|
|
163
170
|
* This stage only runs if activateSession is true in the input.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"load-skill.flow.d.ts","sourceRoot":"","sources":["../../../src/skill/flows/load-skill.flow.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,oBAAoB,CAAC;AAEvC,OAAO,EAAQ,QAAQ,EAA8B,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AAG/F,OAAO,KAAK,EAAE,qBAAqB,EAAmB,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"load-skill.flow.d.ts","sourceRoot":"","sources":["../../../src/skill/flows/load-skill.flow.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,oBAAoB,CAAC;AAEvC,OAAO,EAAQ,QAAQ,EAA8B,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AAG/F,OAAO,KAAK,EAAE,qBAAqB,EAAmB,MAAM,gCAAgC,CAAC;AAG7F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAIlE,QAAA,MAAM,WAAW;;;;;;;;;;;;;;;;;;gCAoBf,CAAC;AA4CH,QAAA,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gCAShB,CAAC;AAMH,UAAU,wBAAwB;IAChC,UAAU,EAAE,eAAe,CAAC;IAC5B,gBAAgB,CAAC,EAAE,qBAAqB,CAAC;CAC1C;AAED,QAAA,MAAM,WAAW;;;;;;;;;;;;iBAKwB,CAAC,CAAC,OAAO,CAAC,wBAAwB,EAAE,GAAG,SAAS,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gCAGxF,CAAC;AAEH,QAAA,MAAM,IAAI;;;;CAI2B,CAAC;AAEtC,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,WAAW;QACnB,aAAa,EAAE,cAAc,CAC3B,aAAa,EACb,OAAO,IAAI,EACX,OAAO,WAAW,EAClB,OAAO,YAAY,EACnB,OAAO,WAAW,CACnB,CAAC;KACH;CACF;AAED,QAAA,MAAM,IAAI,EAAG,aAAsB,CAAC;AAGpC;;;;;;;;;;;;;;;;GAgBG;AAQH,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,QAAQ,CAAC,OAAO,IAAI,CAAC;IAC9D,MAAM,wCAA2C;IAG3C,UAAU;IAkBV,UAAU;IAwChB;;;;;OAKG;IACH,OAAO,CAAC,cAAc;IAWtB;;;OAGG;IAEG,gBAAgB;IA+ChB,QAAQ;CAyJf"}
|
|
@@ -95,6 +95,19 @@ export default class SearchSkillsFlow extends FlowBase<typeof name> {
|
|
|
95
95
|
parseInput(): Promise<void>;
|
|
96
96
|
search(): Promise<void>;
|
|
97
97
|
finalize(): Promise<void>;
|
|
98
|
+
/**
|
|
99
|
+
* Remove search results the caller is not authorized to discover.
|
|
100
|
+
*
|
|
101
|
+
* Search-result metadata is projected from `SkillContent` and does NOT carry
|
|
102
|
+
* the `authorities` field, so we resolve the live skill entry (by id/name)
|
|
103
|
+
* to read its declared authorities, then evaluate via the scope's engine.
|
|
104
|
+
* No-op when no authorities engine is configured; results unchanged.
|
|
105
|
+
*
|
|
106
|
+
* Evaluated WITHOUT request input — `fromInput`/ReBAC-by-input policies can't
|
|
107
|
+
* be evaluated at search time and will be treated as a denial. Use
|
|
108
|
+
* role/permission/claims-based authorities for discoverable skills.
|
|
109
|
+
*/
|
|
110
|
+
private filterResultsByAuthorities;
|
|
98
111
|
}
|
|
99
112
|
export {};
|
|
100
113
|
//# sourceMappingURL=search-skills.flow.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search-skills.flow.d.ts","sourceRoot":"","sources":["../../../src/skill/flows/search-skills.flow.ts"],"names":[],"mappings":"AAIA,OAAO,EAAQ,QAAQ,EAAgD,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"search-skills.flow.d.ts","sourceRoot":"","sources":["../../../src/skill/flows/search-skills.flow.ts"],"names":[],"mappings":"AAIA,OAAO,EAAQ,QAAQ,EAAgD,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AAyCjH,QAAA,MAAM,WAAW;;;;;;;;;;;;gCAYf,CAAC;AAGH,QAAA,MAAM,YAAY;;;;;;;;;;;;;;;;;;gCAmBhB,CAAC;AAKH,QAAA,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;gCAUf,CAAC;AAEH,QAAA,MAAM,IAAI;;;;CAI2B,CAAC;AAEtC,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,WAAW;QACnB,eAAe,EAAE,cAAc,CAC7B,gBAAgB,EAChB,OAAO,IAAI,EACX,OAAO,WAAW,EAClB,OAAO,YAAY,EACnB,OAAO,WAAW,CACnB,CAAC;KACH;CACF;AAED,QAAA,MAAM,IAAI,EAAG,eAAwB,CAAC;AAGtC;;;;;;;;;;;;;;;;;;GAkBG;AAQH,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,QAAQ,CAAC,OAAO,IAAI,CAAC;IACjE,MAAM,wCAA8C;IAG9C,UAAU;IAyBV,MAAM;IAyCN,QAAQ;IAoEd;;;;;;;;;;;OAWG;YACW,0BAA0B;CAOzC"}
|
package/skill/index.d.ts
CHANGED
|
@@ -72,6 +72,7 @@ export { SearchSkillsFlow, LoadSkillFlow } from './flows';
|
|
|
72
72
|
export { SEP_2640_EXTENSION_ID, SEP_2640_META_NAMESPACE, SKILL_ARCHIVE_MIME_TYPES, SKILL_INDEX_MIME_TYPE, SKILL_INDEX_SCHEMA_URI, SKILL_INDEX_URI, SKILL_MD_MIME_TYPE, SKILL_MD_PRIORITY, SKILL_SUPPORT_PRIORITY, SKILL_URI_SCHEME, buildArchiveIndexEntry, buildResourceTemplateIndexEntry, buildSkillIndex, buildSkillMdIndexEntry, buildSkillUri, isSkillIndexUri, isSkillUri, parseSkillUri, parseSkillUriWithKnownSkill, serializeSkillMd, validateSkillPath, type ParsedSkillUri, type SkillIndexDocument, type SkillIndexEntry, type SkillIndexEntryType, } from './sep-2640';
|
|
73
73
|
export { getSep2640Resources, Sep2640SkillFileResource, Sep2640SkillIndexResource, Sep2640SkillMdResource, } from './sep-2640/resources';
|
|
74
74
|
export { findAndLoadSkillByPath, findSkillByPath, getSepVisibleSkills, readSkillFileByPath, } from './sep-2640/sep-2640.resource-helpers';
|
|
75
|
+
export { assertSkillAuthorized, filterSkillsByAuthorities, getSkillAuthorities } from './skill-authorities.helper';
|
|
75
76
|
export { findNestedSkillMd } from './skill-directory-loader';
|
|
76
77
|
export { SkillSessionManager } from './session/skill-session.manager';
|
|
77
78
|
export { MemorySkillSessionStore, createSkillSessionStore } from './session/skill-session-store.interface';
|
package/skill/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/skill/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/skill/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill-file.resource.d.ts","sourceRoot":"","sources":["../../../../src/skill/sep-2640/resources/skill-file.resource.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAG7D,OAAO,EAAE,eAAe,EAAE,KAAK,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"skill-file.resource.d.ts","sourceRoot":"","sources":["../../../../src/skill/sep-2640/resources/skill-file.resource.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAG7D,OAAO,EAAE,eAAe,EAAE,KAAK,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAW5F,KAAK,MAAM,GAAG;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtD;;;;;;;;;;;GAWG;AACH,qBAOa,wBAAyB,SAAQ,eAAe,CAAC,MAAM,CAAC;IAC7D,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAQtE,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAyBrE,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;CAkCxE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill-index.resource.d.ts","sourceRoot":"","sources":["../../../../src/skill/sep-2640/resources/skill-index.resource.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAG7D,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"skill-index.resource.d.ts","sourceRoot":"","sources":["../../../../src/skill/sep-2640/resources/skill-index.resource.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAG7D,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAM7D;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBASa,yBAA0B,SAAQ,eAAe;IACtD,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;CAuDxD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill-md.resource.d.ts","sourceRoot":"","sources":["../../../../src/skill/sep-2640/resources/skill-md.resource.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAG7D,OAAO,EAAE,eAAe,EAAE,KAAK,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"skill-md.resource.d.ts","sourceRoot":"","sources":["../../../../src/skill/sep-2640/resources/skill-md.resource.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAG7D,OAAO,EAAE,eAAe,EAAE,KAAK,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAM5F,KAAK,MAAM,GAAG;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC;AAEpC;;;;;;;;;;;GAWG;AACH,qBAQa,sBAAuB,SAAQ,eAAe,CAAC,MAAM,CAAC;IAC3D,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAQtE,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;CAkBxE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sep-2640.per-skill.d.ts","sourceRoot":"","sources":["../../../src/skill/sep-2640/sep-2640.per-skill.ts"],"names":[],"mappings":"AAmBA,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,sBAAsB,EAE3B,KAAK,UAAU,EACf,KAAK,UAAU,EAChB,MAAM,cAAc,CAAC;AAEtB,OAAO,KAAK,gBAAgB,MAAM,kCAAkC,CAAC;AAMrE;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,UAAU,EACjB,KAAK,EAAE,UAAU,EACjB,IAAI,GAAE;IAAE,YAAY,CAAC,EAAE,MAAM,CAAA;CAAO,GACnC,sBAAsB,
|
|
1
|
+
{"version":3,"file":"sep-2640.per-skill.d.ts","sourceRoot":"","sources":["../../../src/skill/sep-2640/sep-2640.per-skill.ts"],"names":[],"mappings":"AAmBA,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,sBAAsB,EAE3B,KAAK,UAAU,EACf,KAAK,UAAU,EAChB,MAAM,cAAc,CAAC;AAEtB,OAAO,KAAK,gBAAgB,MAAM,kCAAkC,CAAC;AAMrE;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,UAAU,EACjB,KAAK,EAAE,UAAU,EACjB,IAAI,GAAE;IAAE,YAAY,CAAC,EAAE,MAAM,CAAA;CAAO,GACnC,sBAAsB,CA4DxB;AAED;;;;;;;;GAQG;AACH,wBAAsB,yBAAyB,CAAC,OAAO,EAAE;IACvD,KAAK,EAAE,UAAU,CAAC;IAClB,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,MAAM,EAAE,cAAc,CAAC;IACvB,mBAAmB,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;CAC1E,GAAG,OAAO,CAAC,IAAI,CAAC,CAkChB"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Skill authorities enforcement helpers.
|
|
3
|
+
*
|
|
4
|
+
* Mirrors the tool/resource enforcement pattern (`checkEntryAuthorities` for
|
|
5
|
+
* single-entry deny and `filterByAuthorities` for discovery filtering) for the
|
|
6
|
+
* `@Skill({ authorities })` metadata field. Because skills are served across
|
|
7
|
+
* several surfaces (MCP `skills/load` + `skills/search` flows, SEP-2640
|
|
8
|
+
* `skill://` resources, and the HTTP `/skills` API), the deny/filter logic is
|
|
9
|
+
* centralised here so every surface enforces the same policy.
|
|
10
|
+
*
|
|
11
|
+
* Behaviour preserved from the rest of the framework:
|
|
12
|
+
* - When no authorities engine + context builder is configured on the scope,
|
|
13
|
+
* every check is a no-op (skills behave exactly as before).
|
|
14
|
+
* - Skills WITHOUT an `authorities` field are never gated.
|
|
15
|
+
*
|
|
16
|
+
* Discovery filtering ({@link filterSkillsByAuthorities}) evaluates policies
|
|
17
|
+
* WITHOUT request input — `fromInput`/ReBAC-by-input conditions cannot be
|
|
18
|
+
* evaluated at list time, mirroring the tool/resource list flows. Skill
|
|
19
|
+
* authorities meant for discovery filtering should be role/permission/claims
|
|
20
|
+
* based.
|
|
21
|
+
*/
|
|
22
|
+
import type { ScopeEntry, SkillEntry } from '../common';
|
|
23
|
+
import type { SkillRegistryInterface } from './skill.registry';
|
|
24
|
+
/** Minimal duck-typed surface of the scope we rely on for authorities. */
|
|
25
|
+
type AuthoritiesScopeView = Pick<ScopeEntry, 'authoritiesEngine' | 'authoritiesContextBuilder' | 'authoritiesScopeMapping'>;
|
|
26
|
+
/**
|
|
27
|
+
* Normalise the request AuthInfo so the authorities context builder can read
|
|
28
|
+
* claims from `authInfo.user`.
|
|
29
|
+
*
|
|
30
|
+
* Skills are enforced from surfaces that receive the **raw transport AuthInfo**
|
|
31
|
+
* (`{ token, clientId, scopes, extra: { user, sessionId } }`) — namely the
|
|
32
|
+
* SEP-2640 `skill://` resources and the `skills/*` MCP handlers. The shared
|
|
33
|
+
* `AuthoritiesContextBuilder.build()` reads `authInfo.user`, which the
|
|
34
|
+
* tool/resource FLOWS already receive lifted to the top level. To match that
|
|
35
|
+
* behaviour without changing the shared builder, lift `extra.user` to
|
|
36
|
+
* `authInfo.user` when the top-level `user` is absent. Already-normalised
|
|
37
|
+
* AuthInfo (with a top-level `user`) is returned unchanged.
|
|
38
|
+
*/
|
|
39
|
+
export declare function normalizeAuthInfoForAuthorities(authInfo: Record<string, unknown>): Record<string, unknown>;
|
|
40
|
+
/**
|
|
41
|
+
* Read the `authorities` metadata declared on a skill entry, if any.
|
|
42
|
+
* Returns undefined for skills that do not declare authorities.
|
|
43
|
+
*/
|
|
44
|
+
export declare function getSkillAuthorities(skill: SkillEntry): import('@frontmcp/auth').AuthoritiesMetadata | undefined;
|
|
45
|
+
/**
|
|
46
|
+
* Assert that the caller is authorized to load/read the given skill.
|
|
47
|
+
*
|
|
48
|
+
* Mirrors `checkEntryAuthorities` for tools/resources: throws
|
|
49
|
+
* `AuthorityDeniedError` (MCP code -32003) when the skill declares
|
|
50
|
+
* `authorities` and the caller's claims do not satisfy the policy.
|
|
51
|
+
*
|
|
52
|
+
* No-op (resolves) when:
|
|
53
|
+
* - no authorities engine/context builder is configured, or
|
|
54
|
+
* - the skill declares no `authorities`.
|
|
55
|
+
*
|
|
56
|
+
* @param scope The active scope (provides engine/context builder/scopeMapping).
|
|
57
|
+
* @param skill The skill entry being loaded/read.
|
|
58
|
+
* @param authInfo Request AuthInfo (claims, roles, permissions).
|
|
59
|
+
* @param input Optional request input for ABAC/ReBAC `fromInput` conditions.
|
|
60
|
+
*/
|
|
61
|
+
export declare function assertSkillAuthorized(scope: AuthoritiesScopeView, skill: SkillEntry, authInfo: Record<string, unknown>, input?: Record<string, unknown>): Promise<void>;
|
|
62
|
+
/**
|
|
63
|
+
* Filter a list of skill entries down to those the caller is authorized to
|
|
64
|
+
* discover. Mirrors `filterByAuthorities` for tools/resources.
|
|
65
|
+
*
|
|
66
|
+
* Skills without `authorities` always pass. When no engine/context builder is
|
|
67
|
+
* configured the list is returned unchanged.
|
|
68
|
+
*
|
|
69
|
+
* Evaluated WITHOUT request input: `fromInput`/ReBAC-by-input policies cannot
|
|
70
|
+
* be evaluated during discovery and will therefore be treated as a denial when
|
|
71
|
+
* they reference request input that is absent. Use role/permission/claims-based
|
|
72
|
+
* authorities for skills that must remain discoverable.
|
|
73
|
+
*
|
|
74
|
+
* @param scope The active scope (provides engine/context builder).
|
|
75
|
+
* @param skills The candidate skill entries.
|
|
76
|
+
* @param authInfo Request AuthInfo (claims, roles, permissions).
|
|
77
|
+
* @returns The subset of skills the caller is authorized to see.
|
|
78
|
+
*/
|
|
79
|
+
export declare function filterSkillsByAuthorities<T extends SkillEntry>(scope: AuthoritiesScopeView, skills: readonly T[], authInfo: Record<string, unknown>): Promise<T[]>;
|
|
80
|
+
/**
|
|
81
|
+
* Filter discovery results whose projected metadata only carries an id/name
|
|
82
|
+
* (e.g. `skills/search` / `skills/list` MCP responses, or HTTP search results)
|
|
83
|
+
* down to the skills the caller is authorized to see.
|
|
84
|
+
*
|
|
85
|
+
* Search/list metadata is projected from `SkillContent` and does NOT carry the
|
|
86
|
+
* `authorities` field, so we resolve the live skill entry by id/name to read
|
|
87
|
+
* its declared authorities, then evaluate via the scope's engine. No-op when no
|
|
88
|
+
* authorities engine is configured (results returned unchanged), and items
|
|
89
|
+
* whose backing entry can't be resolved are kept (treated as ungated).
|
|
90
|
+
*
|
|
91
|
+
* Evaluated WITHOUT request input — see {@link filterSkillsByAuthorities}.
|
|
92
|
+
*/
|
|
93
|
+
export declare function filterSkillMetadataByAuthorities<T extends {
|
|
94
|
+
metadata: {
|
|
95
|
+
id?: string;
|
|
96
|
+
name: string;
|
|
97
|
+
};
|
|
98
|
+
}>(scope: AuthoritiesScopeView, registry: SkillRegistryInterface, results: readonly T[], authInfo: Record<string, unknown>): Promise<T[]>;
|
|
99
|
+
export {};
|
|
100
|
+
//# sourceMappingURL=skill-authorities.helper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-authorities.helper.d.ts","sourceRoot":"","sources":["../../src/skill/skill-authorities.helper.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACxD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAE/D,0EAA0E;AAC1E,KAAK,oBAAoB,GAAG,IAAI,CAC9B,UAAU,EACV,mBAAmB,GAAG,2BAA2B,GAAG,yBAAyB,CAC9E,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,wBAAgB,+BAA+B,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAM1G;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,gBAAgB,EAAE,mBAAmB,GAAG,SAAS,CAI/G;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,oBAAoB,EAC3B,KAAK,EAAE,UAAU,EACjB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,KAAK,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAClC,OAAO,CAAC,IAAI,CAAC,CA4Bf;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,yBAAyB,CAAC,CAAC,SAAS,UAAU,EAClE,KAAK,EAAE,oBAAoB,EAC3B,MAAM,EAAE,SAAS,CAAC,EAAE,EACpB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,OAAO,CAAC,CAAC,EAAE,CAAC,CAoBd;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,gCAAgC,CAAC,CAAC,SAAS;IAAE,QAAQ,EAAE;QAAE,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,EAC1G,KAAK,EAAE,oBAAoB,EAC3B,QAAQ,EAAE,sBAAsB,EAChC,OAAO,EAAE,SAAS,CAAC,EAAE,EACrB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,OAAO,CAAC,CAAC,EAAE,CAAC,CAsBd"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill.instance.d.ts","sourceRoot":"","sources":["../../src/skill/skill.instance.ts"],"names":[],"mappings":"AAIA,OAAO,EAEL,UAAU,EAEV,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,YAAY,EAClB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEzD,OAAO,KAAK,gBAAgB,MAAM,+BAA+B,CAAC;AAgBlE;;;;;;;GAOG;AACH,qBAAa,aAAc,SAAQ,UAAU;IAC3C,mDAAmD;IACnD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAmB;IAEhD,uCAAuC;IACvC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAE3B,0CAA0C;IAC1C,OAAO,CAAC,kBAAkB,CAAC,CAAS;IAEpC,0CAA0C;IAC1C,OAAO,CAAC,aAAa,CAAC,CAAqB;IAE3C,+BAA+B;IAC/B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAW;IAEhC,kCAAkC;IAClC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAElC,6CAA6C;IAC7C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAU;IAEjC,0CAA0C;IAC1C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkB;gBAEtC,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,gBAAgB,EAAE,KAAK,EAAE,aAAa;cAsBlE,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAO3C;;OAEG;IACM,cAAc,IAAI,MAAM;IAIjC;;;OAGG;IACY,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;IA2ClD;;;OAGG;IACH;;OAEG;IACH,UAAU,IAAI,MAAM,GAAG,SAAS;IAUjB,IAAI,IAAI,OAAO,CAAC,YAAY,CAAC;IAsC5C;;OAEG;IACM,WAAW,IAAI,YAAY,EAAE;IAMtC;;OAEG;IACM,YAAY,IAAI,MAAM,EAAE;IAIjC;;OAEG;IACM,OAAO,IAAI,MAAM,EAAE;IAI5B;;OAEG;IACM,QAAQ,IAAI,OAAO;IAI5B;;OAEG;IACM,WAAW,IAAI,MAAM;IAI9B;;OAEG;IACH,IAAI,SAAS,IAAI,gBAAgB,CAEhC;IAED;;OAEG;IACH,UAAU,IAAI,IAAI;IAKlB;;;;;;OAMG;IACH,cAAc,IAAI,YAAY,GAAG,SAAS;CAa3C;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,WAAW,EACnB,SAAS,EAAE,gBAAgB,EAC3B,KAAK,EAAE,aAAa,GACnB,aAAa,CAEf;
|
|
1
|
+
{"version":3,"file":"skill.instance.d.ts","sourceRoot":"","sources":["../../src/skill/skill.instance.ts"],"names":[],"mappings":"AAIA,OAAO,EAEL,UAAU,EAEV,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,YAAY,EAClB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEzD,OAAO,KAAK,gBAAgB,MAAM,+BAA+B,CAAC;AAgBlE;;;;;;;GAOG;AACH,qBAAa,aAAc,SAAQ,UAAU;IAC3C,mDAAmD;IACnD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAmB;IAEhD,uCAAuC;IACvC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAE3B,0CAA0C;IAC1C,OAAO,CAAC,kBAAkB,CAAC,CAAS;IAEpC,0CAA0C;IAC1C,OAAO,CAAC,aAAa,CAAC,CAAqB;IAE3C,+BAA+B;IAC/B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAW;IAEhC,kCAAkC;IAClC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAElC,6CAA6C;IAC7C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAU;IAEjC,0CAA0C;IAC1C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkB;gBAEtC,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,gBAAgB,EAAE,KAAK,EAAE,aAAa;cAsBlE,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAO3C;;OAEG;IACM,cAAc,IAAI,MAAM;IAIjC;;;OAGG;IACY,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;IA2ClD;;;OAGG;IACH;;OAEG;IACH,UAAU,IAAI,MAAM,GAAG,SAAS;IAUjB,IAAI,IAAI,OAAO,CAAC,YAAY,CAAC;IAsC5C;;OAEG;IACM,WAAW,IAAI,YAAY,EAAE;IAMtC;;OAEG;IACM,YAAY,IAAI,MAAM,EAAE;IAIjC;;OAEG;IACM,OAAO,IAAI,MAAM,EAAE;IAI5B;;OAEG;IACM,QAAQ,IAAI,OAAO;IAI5B;;OAEG;IACM,WAAW,IAAI,MAAM;IAI9B;;OAEG;IACH,IAAI,SAAS,IAAI,gBAAgB,CAEhC;IAED;;OAEG;IACH,UAAU,IAAI,IAAI;IAKlB;;;;;;OAMG;IACH,cAAc,IAAI,YAAY,GAAG,SAAS;CAa3C;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,WAAW,EACnB,SAAS,EAAE,gBAAgB,EAC3B,KAAK,EAAE,aAAa,GACnB,aAAa,CAEf;AAkHD;;;GAGG;AACH,wBAAsB,2BAA2B,CAC/C,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,YAAY,GAAG,UAAU,GAAG,SAAS,GAAG,QAAQ,GAC7D,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAiB7B"}
|