@frontmcp/sdk 1.4.1 → 1.5.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.
Files changed (67) hide show
  1. package/auth/flows/oauth.authorize.flow.d.ts.map +1 -1
  2. package/auth/flows/oauth.token.flow.d.ts.map +1 -1
  3. package/auth/flows/session.verify.flow.d.ts.map +1 -1
  4. package/auth/instances/instance.local-primary-auth.d.ts.map +1 -1
  5. package/common/decorators/app.decorator.d.ts +13 -1
  6. package/common/decorators/app.decorator.d.ts.map +1 -1
  7. package/common/decorators/front-mcp.decorator.d.ts.map +1 -1
  8. package/common/metadata/front-mcp.metadata.d.ts +24 -0
  9. package/common/metadata/front-mcp.metadata.d.ts.map +1 -1
  10. package/common/schemas/http-output.schema.d.ts +17 -0
  11. package/common/schemas/http-output.schema.d.ts.map +1 -1
  12. package/common/tokens/server.tokens.d.ts +3 -0
  13. package/common/tokens/server.tokens.d.ts.map +1 -1
  14. package/common/types/options/skills-http/interfaces.d.ts +15 -1
  15. package/common/types/options/skills-http/interfaces.d.ts.map +1 -1
  16. package/common/types/options/skills-http/schema.d.ts +4 -0
  17. package/common/types/options/skills-http/schema.d.ts.map +1 -1
  18. package/common/utils/path.utils.d.ts +15 -0
  19. package/common/utils/path.utils.d.ts.map +1 -1
  20. package/esm/index.mjs +1187 -294
  21. package/esm-loader/esm-cache.d.ts +10 -0
  22. package/esm-loader/esm-cache.d.ts.map +1 -1
  23. package/esm-loader/esm-module-loader.d.ts.map +1 -1
  24. package/flows/flow.instance.d.ts +14 -0
  25. package/flows/flow.instance.d.ts.map +1 -1
  26. package/flows/flow.registry.d.ts +9 -1
  27. package/flows/flow.registry.d.ts.map +1 -1
  28. package/front-mcp/front-mcp.d.ts +14 -0
  29. package/front-mcp/front-mcp.d.ts.map +1 -1
  30. package/front-mcp/front-mcp.providers.d.ts +4 -0
  31. package/front-mcp/front-mcp.providers.d.ts.map +1 -1
  32. package/index.d.ts +9 -5
  33. package/index.d.ts.map +1 -1
  34. package/index.js +1421 -520
  35. package/logger/instances/instance.file-logger.d.ts.map +1 -1
  36. package/package.json +15 -13
  37. package/scope/flows/http.request.flow.d.ts +17 -1
  38. package/scope/flows/http.request.flow.d.ts.map +1 -1
  39. package/scope/optional-dependency.util.d.ts +25 -0
  40. package/scope/optional-dependency.util.d.ts.map +1 -1
  41. package/scope/scope.instance.d.ts +9 -1
  42. package/scope/scope.instance.d.ts.map +1 -1
  43. package/server/server.instance.d.ts.map +1 -1
  44. package/server/server.validation.d.ts.map +1 -1
  45. package/skill/index.d.ts +1 -0
  46. package/skill/index.d.ts.map +1 -1
  47. package/skill/providers/memory-skill.provider.d.ts +61 -1
  48. package/skill/providers/memory-skill.provider.d.ts.map +1 -1
  49. package/skill/skill-index-cache.interface.d.ts +33 -0
  50. package/skill/skill-index-cache.interface.d.ts.map +1 -0
  51. package/skill/skill-instructions.helper.d.ts +13 -0
  52. package/skill/skill-instructions.helper.d.ts.map +1 -1
  53. package/skill/skill-storage.interface.d.ts +13 -0
  54. package/skill/skill-storage.interface.d.ts.map +1 -1
  55. package/skill/skill.registry.d.ts +27 -0
  56. package/skill/skill.registry.d.ts.map +1 -1
  57. package/transport/build-scoped-server-options.d.ts +35 -0
  58. package/transport/build-scoped-server-options.d.ts.map +1 -0
  59. package/transport/in-memory-server.d.ts.map +1 -1
  60. package/transport/index.d.ts +17 -0
  61. package/transport/index.d.ts.map +1 -1
  62. package/transport/web-fetch-handler.d.ts +106 -0
  63. package/transport/web-fetch-handler.d.ts.map +1 -0
  64. package/transport/web-response.renderer.d.ts +13 -0
  65. package/transport/web-response.renderer.d.ts.map +1 -0
  66. package/transport/web-standard-mcp.d.ts +63 -0
  67. package/transport/web-standard-mcp.d.ts.map +1 -0
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/transport/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,EAAE,yCAAyC,EAAE,MAAM,sCAAsC,CAAC;AACjG,YAAY,EAAE,oCAAoC,EAAE,MAAM,sCAAsC,CAAC;AAEjG,OAAO,EAAE,8BAA8B,EAAE,MAAM,0BAA0B,CAAC;AAC1E,YAAY,EAAE,qCAAqC,EAAE,MAAM,0BAA0B,CAAC;AAGtF,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,YAAY,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAGhE,YAAY,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAE7E,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGrE,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACrF,YAAY,EACV,gBAAgB,EAChB,gBAAgB,EAChB,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,gBAAgB,CAAC;AAExB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE1D;;;GAGG;AACH,YAAY,EAAE,2BAA2B,EAAE,MAAM,oBAAoB,CAAC;AAEtE;;;;GAIG;AACH,YAAY,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/transport/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,EAAE,yCAAyC,EAAE,MAAM,sCAAsC,CAAC;AACjG,YAAY,EAAE,oCAAoC,EAAE,MAAM,sCAAsC,CAAC;AAEjG,OAAO,EAAE,8BAA8B,EAAE,MAAM,0BAA0B,CAAC;AAC1E,YAAY,EAAE,qCAAqC,EAAE,MAAM,0BAA0B,CAAC;AAGtF,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,YAAY,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAGhE,YAAY,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAE7E,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGrE,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACrF,YAAY,EACV,gBAAgB,EAChB,gBAAgB,EAChB,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,gBAAgB,CAAC;AAExB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE1D;;;GAGG;AACH,YAAY,EAAE,2BAA2B,EAAE,MAAM,oBAAoB,CAAC;AAEtE;;;;GAIG;AACH,YAAY,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE/D;;;;GAIG;AACH,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AACnF,YAAY,EACV,eAAe,EACf,4BAA4B,EAC5B,mBAAmB,EACnB,qBAAqB,EACrB,eAAe,GAChB,MAAM,qBAAqB,CAAC;AAE7B;;;;GAIG;AACH,OAAO,EAAE,iBAAiB,EAAE,6BAA6B,EAAE,MAAM,oBAAoB,CAAC;AACtF,YAAY,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAEvF,2EAA2E;AAC3E,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,YAAY,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC"}
@@ -0,0 +1,106 @@
1
+ import { type Scope } from '../scope/scope.instance';
2
+ import { type WebStandardMcpPair } from './web-standard-mcp';
3
+ /**
4
+ * The host execution context — its `waitUntil` keeps the worker alive past the
5
+ * `fetch` return so a streaming (SSE) response body can finish. Optional: in
6
+ * Node there's no isolate teardown, so it's only needed on V8 isolates.
7
+ */
8
+ export interface FetchHandlerCtx {
9
+ waitUntil?(promise: Promise<unknown>): void;
10
+ }
11
+ /** A Web-standard fetch handler: `(request, ctx?, env?) => Promise<Response>`. */
12
+ export type WebFetchHandler = (request: Request, ctx?: FetchHandlerCtx, env?: unknown) => Promise<Response>;
13
+ /**
14
+ * Routes an MCP request to a stateful session host (a Cloudflare Durable Object)
15
+ * instead of handling it statelessly. Receives the per-request `env` (for the DO
16
+ * binding). Returns a `Response` when it routed the request, or `undefined` to
17
+ * fall through to stateless handling (e.g. the binding isn't present).
18
+ */
19
+ export type WebFetchSessionRouter = (request: Request, env: unknown, ctx?: FetchHandlerCtx) => Promise<Response | undefined>;
20
+ /**
21
+ * CORS for the web-fetch adapter — the transport-level analog of the Express
22
+ * host's `cors` middleware (CORS is an adapter concern, not a flow stage), so a
23
+ * browser MCP client (e.g. the MCP Inspector in "Direct" mode) can connect.
24
+ */
25
+ export interface WebFetchCorsOptions {
26
+ /** Allowed origin: `true` reflects the request `Origin`, `'*'` allows any, or a specific origin / list. */
27
+ origin?: boolean | string | string[];
28
+ /** Allowed methods. Default `GET, POST, OPTIONS, DELETE`. */
29
+ methods?: string[];
30
+ /** Allowed request headers. Default: reflect `Access-Control-Request-Headers`, else a sensible MCP set. */
31
+ headers?: string[];
32
+ /** Response headers exposed to the browser. Default `Mcp-Session-Id, WWW-Authenticate`. */
33
+ exposeHeaders?: string[];
34
+ /** Send `Access-Control-Allow-Credentials: true`. Default `false`. */
35
+ credentials?: boolean;
36
+ /** `Access-Control-Max-Age` (seconds) on the preflight response. */
37
+ maxAge?: number;
38
+ }
39
+ export interface CreateWebFetchHandlerOptions {
40
+ /**
41
+ * Path the MCP endpoint (both Streamable HTTP `POST` and the SSE `GET`
42
+ * stream) is served at. **Config-driven**: when omitted, it falls back to the
43
+ * scope's `http.entryPath` (the same gateway prefix the Express host mounts
44
+ * under), and to the worker root `/` when that too is unset. So one config
45
+ * decides the path — set `http.entryPath: '/mcp'` for `<domain>/mcp`, or leave
46
+ * it for `mcp.<domain>` at root. The worker serves exactly that one path.
47
+ *
48
+ * An explicit value here overrides the config. A trailing slash is normalized
49
+ * (`/mcp/` matches `/mcp`). An array opts into a custom multi-path allow-list.
50
+ * Requests to any other path (besides {@link
51
+ * CreateWebFetchHandlerOptions.healthPaths}) get a 404.
52
+ */
53
+ entryPath?: string | string[];
54
+ /**
55
+ * Paths answered with a liveness/readiness 200 instead of being routed to
56
+ * the MCP transport. Defaults to `/healthz` and `/readyz`.
57
+ */
58
+ healthPaths?: string[];
59
+ /**
60
+ * CORS for browser MCP clients (Inspector "Direct" mode, web apps). A
61
+ * transport-adapter concern, not a flow stage. **Config-driven**: when
62
+ * omitted, it mirrors the scope's `http.cors` (the same config the Express
63
+ * host uses), so `@FrontMcp({ http: { cors } })` covers both. An explicit
64
+ * value here overrides that.
65
+ */
66
+ cors?: WebFetchCorsOptions;
67
+ /**
68
+ * Optional stateful-session router (Cloudflare Durable Object host). When set,
69
+ * MCP requests at the entry path are offered to it first; if it returns a
70
+ * `Response` the request was routed to a session DO, otherwise handling falls
71
+ * through to the stateless path. CORS / health / entry-path routing stay here
72
+ * in the adapter regardless.
73
+ */
74
+ sessionRouter?: WebFetchSessionRouter;
75
+ }
76
+ /**
77
+ * Build a Web-standard fetch handler for a Scope.
78
+ *
79
+ * @example
80
+ * ```ts
81
+ * const handler = createWebFetchHandler(scope);
82
+ * export default { fetch: (request) => handler(request) };
83
+ * ```
84
+ */
85
+ export declare function createWebFetchHandler(scope: Scope, options?: CreateWebFetchHandlerOptions): WebFetchHandler;
86
+ /**
87
+ * Run a Web `Request` through the `http:request` flow and render its normalized
88
+ * output to a Web `Response`. Shared by {@link createWebFetchHandler} (stateless)
89
+ * and the Durable Object session host (which passes its `persistent` transport
90
+ * so the GET notification stream + server push work). Returns `undefined` when
91
+ * the flow produced no response (`next`/`handled`) — the caller decides the
92
+ * fallback (typically 404).
93
+ */
94
+ export declare function runHttpRequestFlowWeb(scope: Scope, request: Request, opts?: {
95
+ ctx?: FetchHandlerCtx;
96
+ persistent?: WebStandardMcpPair;
97
+ }): Promise<Response | undefined>;
98
+ /**
99
+ * Dispatch a non-entry-path request through the FrontMCP flow that claims it
100
+ * (auth / well-known / oauth flows match by `middleware.path` + `canActivate`).
101
+ * Mirrors the Express host's route dispatch for runtimes with no middleware
102
+ * server (Cloudflare Worker / web-fetch). Returns the rendered Web `Response`,
103
+ * or `undefined` when no flow matches (caller 404s).
104
+ */
105
+ export declare function runMatchingHttpFlowWeb(scope: Scope, request: Request): Promise<Response | undefined>;
106
+ //# sourceMappingURL=web-fetch-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web-fetch-handler.d.ts","sourceRoot":"","sources":["../../src/transport/web-fetch-handler.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAErD,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAE7D;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,SAAS,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;CAC7C;AAED,kFAAkF;AAClF,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,eAAe,EAAE,GAAG,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;AAE5G;;;;;GAKG;AACH,MAAM,MAAM,qBAAqB,GAAG,CAClC,OAAO,EAAE,OAAO,EAChB,GAAG,EAAE,OAAO,EACZ,GAAG,CAAC,EAAE,eAAe,KAClB,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC,CAAC;AAEnC;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC,2GAA2G;IAC3G,MAAM,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,EAAE,CAAC;IACrC,6DAA6D;IAC7D,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,2GAA2G;IAC3G,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,2FAA2F;IAC3F,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,sEAAsE;IACtE,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,oEAAoE;IACpE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAqBD,MAAM,WAAW,4BAA4B;IAC3C;;;;;;;;;;;;OAYG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC9B;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,mBAAmB,CAAC;IAC3B;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,qBAAqB,CAAC;CACvC;AAED;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,GAAE,4BAAiC,GAAG,eAAe,CA6G/G;AAED;;;;;;;GAOG;AACH,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,OAAO,EAChB,IAAI,GAAE;IAAE,GAAG,CAAC,EAAE,eAAe,CAAC;IAAC,UAAU,CAAC,EAAE,kBAAkB,CAAA;CAAO,GACpE,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC,CAa/B;AAED;;;;;;GAMG;AACH,wBAAsB,sBAAsB,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC,CAe1G"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Render a normalized {@link HttpOutput} (the `http:request` flow's output) to a
3
+ * Web `Response`. This is the web-fetch (worker) analog of the Node
4
+ * `writeHttpResponse` renderer — it lets a V8-isolate adapter run the SAME flow
5
+ * every other transport runs and render its normalized result, instead of
6
+ * bypassing the pipeline.
7
+ *
8
+ * Returns `undefined` for outputs that mean "no response produced" (`next`,
9
+ * `consumed`) so the caller can fall through (e.g. to a 404).
10
+ */
11
+ import { type HttpOutput } from '../common/schemas/http-output.schema';
12
+ export declare function renderHttpOutputToWebResponse(output: HttpOutput): Response | undefined;
13
+ //# sourceMappingURL=web-response.renderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web-response.renderer.d.ts","sourceRoot":"","sources":["../../src/transport/web-response.renderer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,sCAAsC,CAAC;AAyDvE,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,UAAU,GAAG,QAAQ,GAAG,SAAS,CAmDtF"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * MCP-over-web-standard-transport adapter used by the `handleWebFetch` execute
3
+ * stage of the `http:request` flow (V8 isolates / Cloudflare Workers).
4
+ *
5
+ * Two modes, both speaking the SAME `WebStandardStreamableHTTPServerTransport`:
6
+ *
7
+ * - **Stateless** ({@link runWebStandardMcp} with no `persistent`): a fresh
8
+ * `McpServer` + transport per request (`sessionIdGenerator: undefined`). The
9
+ * default serverless model.
10
+ * - **Stateful** (a Durable Object passes `persistent`): one persistent
11
+ * `McpServer` + session-bound transport built once via {@link
12
+ * buildPersistentWebStandardMcp} and reused across the session's requests, so
13
+ * the standalone GET notification stream stays open and a `tools/call`'s
14
+ * notifications reach it. The DO owns the lifecycle — no per-request teardown.
15
+ *
16
+ * Auth / quota / router / audit / metrics + hooks have already run in the flow
17
+ * around this call; this only translates the MCP request↔response.
18
+ */
19
+ import { type AuthInfo } from '@frontmcp/protocol';
20
+ import { type Scope } from '../scope/scope.instance';
21
+ import { type ScopedServerOptions } from './build-scoped-server-options';
22
+ /** A persistent MCP server + transport bound to one session (Durable Object). */
23
+ export interface WebStandardMcpPair {
24
+ mcpServer: {
25
+ close(): Promise<void>;
26
+ };
27
+ transport: {
28
+ handleRequest(request: Request, options?: {
29
+ authInfo?: AuthInfo;
30
+ }): Promise<Response>;
31
+ onclose?: () => void;
32
+ };
33
+ }
34
+ export interface RunWebStandardMcpOptions {
35
+ /** Capability/server options for the `McpServer` (from `buildScopedServerOptions`). */
36
+ serverOptions: ScopedServerOptions;
37
+ /** Verified auth info to expose to handlers (derived from the flow's session:verify result). */
38
+ authInfo?: Partial<AuthInfo>;
39
+ /** Allow SSE streaming responses on POST when the client accepts `text/event-stream` (stateless mode). */
40
+ sse: boolean;
41
+ /** Worker `ExecutionContext` so an SSE body can keep the isolate alive past `fetch` (stateless mode). */
42
+ ctx?: {
43
+ waitUntil?(promise: Promise<unknown>): void;
44
+ };
45
+ /**
46
+ * A persistent, session-bound server+transport (Durable Object / stateful
47
+ * sessions). When provided, the request is handled on it and no fresh server
48
+ * is created or torn down — the DO owns its lifecycle.
49
+ */
50
+ persistent?: WebStandardMcpPair;
51
+ }
52
+ /**
53
+ * Build a persistent, session-bound MCP server + transport for a Durable Object.
54
+ * Stateful (`sessionIdGenerator: () => sessionId`) and streaming-capable
55
+ * (`enableJsonResponse: false`) so the standalone GET notification stream and
56
+ * server-initiated notifications work. Call once per session; the DO keeps it
57
+ * alive and passes it back via `RunWebStandardMcpOptions.persistent`.
58
+ */
59
+ export declare function buildPersistentWebStandardMcp(scope: Scope, options: {
60
+ sessionId: string;
61
+ }): Promise<WebStandardMcpPair>;
62
+ export declare function runWebStandardMcp(scope: Scope, request: Request, options: RunWebStandardMcpOptions): Promise<Response>;
63
+ //# sourceMappingURL=web-standard-mcp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web-standard-mcp.d.ts","sourceRoot":"","sources":["../../src/transport/web-standard-mcp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAGnD,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAA4B,KAAK,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAEnG,iFAAiF;AACjF,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE;QAAE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;KAAE,CAAC;IACtC,SAAS,EAAE;QACT,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE;YAAE,QAAQ,CAAC,EAAE,QAAQ,CAAA;SAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;QACtF,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;KACtB,CAAC;CACH;AAED,MAAM,WAAW,wBAAwB;IACvC,uFAAuF;IACvF,aAAa,EAAE,mBAAmB,CAAC;IACnC,gGAAgG;IAChG,QAAQ,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC7B,0GAA0G;IAC1G,GAAG,EAAE,OAAO,CAAC;IACb,yGAAyG;IACzG,GAAG,CAAC,EAAE;QAAE,SAAS,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,CAAA;KAAE,CAAC;IACtD;;;;OAIG;IACH,UAAU,CAAC,EAAE,kBAAkB,CAAC;CACjC;AA+BD;;;;;;GAMG;AACH,wBAAsB,6BAA6B,CACjD,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,GAC7B,OAAO,CAAC,kBAAkB,CAAC,CAG7B;AAED,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,wBAAwB,GAChC,OAAO,CAAC,QAAQ,CAAC,CA4CnB"}