@qodalis/cli-server-node 1.0.0-beta.1 → 1.0.0-beta.10
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 +1 -1
- package/README.md +348 -74
- package/dist/package.json +77 -0
- package/dist/src/abstractions/cli-command-author.d.ts +2 -0
- package/dist/src/abstractions/cli-command-author.d.ts.map +1 -0
- package/dist/src/abstractions/cli-command-author.js +7 -0
- package/dist/src/abstractions/cli-command-author.js.map +1 -0
- package/dist/src/abstractions/cli-command-parameter-descriptor.d.ts +2 -0
- package/dist/src/abstractions/cli-command-parameter-descriptor.d.ts.map +1 -0
- package/dist/src/abstractions/cli-command-parameter-descriptor.js +6 -0
- package/dist/src/abstractions/cli-command-parameter-descriptor.js.map +1 -0
- package/dist/src/abstractions/cli-command-processor.d.ts +2 -0
- package/dist/src/abstractions/cli-command-processor.d.ts.map +1 -0
- package/dist/src/abstractions/cli-command-processor.js +6 -0
- package/dist/src/abstractions/cli-command-processor.js.map +1 -0
- package/dist/src/abstractions/cli-process-command.d.ts +2 -0
- package/dist/src/abstractions/cli-process-command.d.ts.map +1 -0
- package/dist/src/abstractions/cli-process-command.js.map +1 -0
- package/dist/src/abstractions/index.d.ts +2 -0
- package/dist/src/abstractions/index.d.ts.map +1 -0
- package/dist/src/abstractions/index.js +18 -0
- package/dist/src/abstractions/index.js.map +1 -0
- package/dist/src/auth/cli-server-auth-gate.d.ts +33 -0
- package/dist/src/auth/cli-server-auth-gate.d.ts.map +1 -0
- package/dist/src/auth/cli-server-auth-gate.js +121 -0
- package/dist/src/auth/cli-server-auth-gate.js.map +1 -0
- package/dist/src/auth/cli-server-auth.d.ts +149 -0
- package/dist/src/auth/cli-server-auth.d.ts.map +1 -0
- package/dist/src/auth/cli-server-auth.js +143 -0
- package/dist/src/auth/cli-server-auth.js.map +1 -0
- package/dist/src/auth/index.d.ts +4 -0
- package/dist/src/auth/index.d.ts.map +1 -0
- package/dist/src/auth/index.js +19 -0
- package/dist/src/auth/index.js.map +1 -0
- package/dist/src/auth/ws-upgrade-auth.d.ts +30 -0
- package/dist/src/auth/ws-upgrade-auth.d.ts.map +1 -0
- package/dist/src/auth/ws-upgrade-auth.js +49 -0
- package/dist/src/auth/ws-upgrade-auth.js.map +1 -0
- package/dist/src/controllers/cli-controller.d.ts +11 -0
- package/dist/src/controllers/cli-controller.d.ts.map +1 -0
- package/dist/src/controllers/cli-controller.js +169 -0
- package/dist/src/controllers/cli-controller.js.map +1 -0
- package/dist/src/controllers/cli-version-controller.d.ts +18 -0
- package/dist/src/controllers/cli-version-controller.d.ts.map +1 -0
- package/dist/src/controllers/cli-version-controller.js +81 -0
- package/dist/src/controllers/cli-version-controller.js.map +1 -0
- package/dist/src/controllers/filesystem-controller.d.ts +9 -0
- package/dist/src/controllers/filesystem-controller.d.ts.map +1 -0
- package/dist/src/controllers/filesystem-controller.js +243 -0
- package/dist/src/controllers/filesystem-controller.js.map +1 -0
- package/dist/src/create-cli-server.d.ts +123 -0
- package/dist/src/create-cli-server.d.ts.map +1 -0
- package/dist/src/create-cli-server.js +201 -0
- package/dist/src/create-cli-server.js.map +1 -0
- package/dist/src/extensions/cli-builder.d.ts +54 -0
- package/dist/src/extensions/cli-builder.d.ts.map +1 -0
- package/dist/src/extensions/cli-builder.js +97 -0
- package/dist/src/extensions/cli-builder.js.map +1 -0
- package/dist/src/extensions/index.d.ts.map +1 -0
- package/dist/src/extensions/index.js.map +1 -0
- package/dist/src/filesystem/filesystem-options.d.ts +16 -0
- package/dist/src/filesystem/filesystem-options.d.ts.map +1 -0
- package/dist/src/filesystem/filesystem-options.js +6 -0
- package/dist/src/filesystem/filesystem-options.js.map +1 -0
- package/dist/src/filesystem/filesystem-path-validator.d.ts +15 -0
- package/dist/src/filesystem/filesystem-path-validator.d.ts.map +1 -0
- package/dist/src/filesystem/filesystem-path-validator.js +72 -0
- package/dist/src/filesystem/filesystem-path-validator.js.map +1 -0
- package/dist/src/filesystem/index.d.ts +3 -0
- package/dist/src/filesystem/index.d.ts.map +1 -0
- package/dist/src/filesystem/index.js +8 -0
- package/dist/src/filesystem/index.js.map +1 -0
- package/dist/src/index.d.ts +24 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +121 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/mcp/index.d.ts +10 -0
- package/dist/src/mcp/index.d.ts.map +1 -0
- package/dist/src/mcp/index.js +34 -0
- package/dist/src/mcp/index.js.map +1 -0
- package/dist/src/mcp/mcp-controller.d.ts +54 -0
- package/dist/src/mcp/mcp-controller.d.ts.map +1 -0
- package/dist/src/mcp/mcp-controller.js +358 -0
- package/dist/src/mcp/mcp-controller.js.map +1 -0
- package/dist/src/mcp/mcp-render.d.ts +10 -0
- package/dist/src/mcp/mcp-render.d.ts.map +1 -0
- package/dist/src/mcp/mcp-render.js +66 -0
- package/dist/src/mcp/mcp-render.js.map +1 -0
- package/dist/src/mcp/mcp-schema.d.ts +8 -0
- package/dist/src/mcp/mcp-schema.d.ts.map +1 -0
- package/dist/src/mcp/mcp-schema.js +64 -0
- package/dist/src/mcp/mcp-schema.js.map +1 -0
- package/dist/src/mcp/mcp-types.d.ts +70 -0
- package/dist/src/mcp/mcp-types.d.ts.map +1 -0
- package/dist/src/mcp/mcp-types.js +21 -0
- package/dist/src/mcp/mcp-types.js.map +1 -0
- package/dist/src/mcp/providers/commands-provider.d.ts +30 -0
- package/dist/src/mcp/providers/commands-provider.d.ts.map +1 -0
- package/dist/src/mcp/providers/commands-provider.js +145 -0
- package/dist/src/mcp/providers/commands-provider.js.map +1 -0
- package/dist/src/mcp/providers/data-explorer-provider.d.ts +15 -0
- package/dist/src/mcp/providers/data-explorer-provider.d.ts.map +1 -0
- package/dist/src/mcp/providers/data-explorer-provider.js +83 -0
- package/dist/src/mcp/providers/data-explorer-provider.js.map +1 -0
- package/dist/src/mcp/providers/filesystem-provider.d.ts +15 -0
- package/dist/src/mcp/providers/filesystem-provider.d.ts.map +1 -0
- package/dist/src/mcp/providers/filesystem-provider.js +166 -0
- package/dist/src/mcp/providers/filesystem-provider.js.map +1 -0
- package/dist/src/mcp/providers/jobs-provider.d.ts +23 -0
- package/dist/src/mcp/providers/jobs-provider.d.ts.map +1 -0
- package/dist/src/mcp/providers/jobs-provider.js +121 -0
- package/dist/src/mcp/providers/jobs-provider.js.map +1 -0
- package/dist/src/mcp/providers/server-provider.d.ts +19 -0
- package/dist/src/mcp/providers/server-provider.d.ts.map +1 -0
- package/dist/src/mcp/providers/server-provider.js +73 -0
- package/dist/src/mcp/providers/server-provider.js.map +1 -0
- package/dist/{models → src/models}/cli-server-command-descriptor.d.ts +2 -0
- package/dist/src/models/cli-server-command-descriptor.d.ts.map +1 -0
- package/dist/src/models/cli-server-command-descriptor.js.map +1 -0
- package/dist/src/models/cli-server-output.d.ts +2 -0
- package/dist/src/models/cli-server-output.d.ts.map +1 -0
- package/dist/src/models/cli-server-output.js.map +1 -0
- package/dist/src/models/cli-server-response.d.ts +2 -0
- package/dist/src/models/cli-server-response.d.ts.map +1 -0
- package/dist/src/models/cli-server-response.js.map +1 -0
- package/dist/src/models/index.d.ts.map +1 -0
- package/dist/{models → src/models}/index.js.map +1 -1
- package/dist/{processors → src/processors}/cli-base64-command-processor.d.ts +1 -0
- package/dist/src/processors/cli-base64-command-processor.d.ts.map +1 -0
- package/dist/{processors → src/processors}/cli-base64-command-processor.js +8 -2
- package/dist/src/processors/cli-base64-command-processor.js.map +1 -0
- package/dist/{processors → src/processors}/cli-echo-command-processor.d.ts +2 -0
- package/dist/src/processors/cli-echo-command-processor.d.ts.map +1 -0
- package/dist/src/processors/cli-echo-command-processor.js +20 -0
- package/dist/src/processors/cli-echo-command-processor.js.map +1 -0
- package/dist/{processors → src/processors}/cli-hash-command-processor.d.ts +2 -0
- package/dist/src/processors/cli-hash-command-processor.d.ts.map +1 -0
- package/dist/{processors → src/processors}/cli-hash-command-processor.js +4 -1
- package/dist/src/processors/cli-hash-command-processor.js.map +1 -0
- package/dist/{processors → src/processors}/cli-http-command-processor.d.ts +1 -0
- package/dist/src/processors/cli-http-command-processor.d.ts.map +1 -0
- package/dist/src/processors/cli-http-command-processor.js +161 -0
- package/dist/src/processors/cli-http-command-processor.js.map +1 -0
- package/dist/{processors → src/processors}/cli-status-command-processor.d.ts +1 -0
- package/dist/src/processors/cli-status-command-processor.d.ts.map +1 -0
- package/dist/{processors → src/processors}/cli-status-command-processor.js +1 -0
- package/dist/src/processors/cli-status-command-processor.js.map +1 -0
- package/dist/{processors → src/processors}/cli-system-command-processor.d.ts +1 -0
- package/dist/src/processors/cli-system-command-processor.d.ts.map +1 -0
- package/dist/{processors → src/processors}/cli-system-command-processor.js +1 -0
- package/dist/src/processors/cli-system-command-processor.js.map +1 -0
- package/dist/{processors → src/processors}/index.d.ts +1 -2
- package/dist/src/processors/index.d.ts.map +1 -0
- package/dist/{processors → src/processors}/index.js +2 -3
- package/dist/src/processors/index.js.map +1 -0
- package/dist/{server.d.ts.map → src/server.d.ts.map} +1 -1
- package/dist/{server.js → src/server.js} +22 -7
- package/dist/src/server.js.map +1 -0
- package/dist/src/services/cli-command-executor-service.d.ts +33 -0
- package/dist/src/services/cli-command-executor-service.d.ts.map +1 -0
- package/dist/src/services/cli-command-executor-service.js +77 -0
- package/dist/src/services/cli-command-executor-service.js.map +1 -0
- package/dist/src/services/cli-command-registry.d.ts +25 -0
- package/dist/src/services/cli-command-registry.d.ts.map +1 -0
- package/dist/{services → src/services}/cli-command-registry.js +5 -0
- package/dist/src/services/cli-command-registry.js.map +1 -0
- package/dist/src/services/cli-event-socket-manager.d.ts +77 -0
- package/dist/src/services/cli-event-socket-manager.d.ts.map +1 -0
- package/dist/src/services/cli-event-socket-manager.js +246 -0
- package/dist/src/services/cli-event-socket-manager.js.map +1 -0
- package/dist/src/services/cli-log-socket-manager.d.ts +67 -0
- package/dist/src/services/cli-log-socket-manager.d.ts.map +1 -0
- package/dist/src/services/cli-log-socket-manager.js +225 -0
- package/dist/src/services/cli-log-socket-manager.js.map +1 -0
- package/dist/{services → src/services}/cli-response-builder.d.ts +9 -0
- package/dist/src/services/cli-response-builder.d.ts.map +1 -0
- package/dist/{services → src/services}/cli-response-builder.js +1 -0
- package/dist/src/services/cli-response-builder.js.map +1 -0
- package/dist/src/services/cli-shell-options.d.ts +107 -0
- package/dist/src/services/cli-shell-options.d.ts.map +1 -0
- package/dist/src/services/cli-shell-options.js +139 -0
- package/dist/src/services/cli-shell-options.js.map +1 -0
- package/dist/src/services/cli-shell-session-manager.d.ts +92 -0
- package/dist/src/services/cli-shell-session-manager.d.ts.map +1 -0
- package/dist/src/services/cli-shell-session-manager.js +588 -0
- package/dist/src/services/cli-shell-session-manager.js.map +1 -0
- package/dist/src/services/index.d.ts +8 -0
- package/dist/src/services/index.d.ts.map +1 -0
- package/dist/src/services/index.js +20 -0
- package/dist/src/services/index.js.map +1 -0
- package/dist/src/services/process-tree.d.ts +38 -0
- package/dist/src/services/process-tree.d.ts.map +1 -0
- package/dist/src/services/process-tree.js +249 -0
- package/dist/src/services/process-tree.js.map +1 -0
- package/dist/src/services/session-bound-sockets.d.ts +45 -0
- package/dist/src/services/session-bound-sockets.d.ts.map +1 -0
- package/dist/src/services/session-bound-sockets.js +129 -0
- package/dist/src/services/session-bound-sockets.js.map +1 -0
- package/dist/src/utils/logger.d.ts +11 -0
- package/dist/src/utils/logger.d.ts.map +1 -0
- package/dist/src/utils/logger.js +13 -0
- package/dist/src/utils/logger.js.map +1 -0
- package/package.json +37 -8
- package/dist/abstractions/cli-command-author.d.ts +0 -11
- package/dist/abstractions/cli-command-author.d.ts.map +0 -1
- package/dist/abstractions/cli-command-author.js +0 -14
- package/dist/abstractions/cli-command-author.js.map +0 -1
- package/dist/abstractions/cli-command-parameter-descriptor.d.ts +0 -18
- package/dist/abstractions/cli-command-parameter-descriptor.d.ts.map +0 -1
- package/dist/abstractions/cli-command-parameter-descriptor.js +0 -21
- package/dist/abstractions/cli-command-parameter-descriptor.js.map +0 -1
- package/dist/abstractions/cli-command-processor.d.ts +0 -26
- package/dist/abstractions/cli-command-processor.d.ts.map +0 -1
- package/dist/abstractions/cli-command-processor.js +0 -14
- package/dist/abstractions/cli-command-processor.js.map +0 -1
- package/dist/abstractions/cli-process-command.d.ts +0 -9
- package/dist/abstractions/cli-process-command.d.ts.map +0 -1
- package/dist/abstractions/cli-process-command.js.map +0 -1
- package/dist/abstractions/index.d.ts +0 -5
- package/dist/abstractions/index.d.ts.map +0 -1
- package/dist/abstractions/index.js +0 -11
- package/dist/abstractions/index.js.map +0 -1
- package/dist/controllers/cli-controller.d.ts +0 -4
- package/dist/controllers/cli-controller.d.ts.map +0 -1
- package/dist/controllers/cli-controller.js +0 -42
- package/dist/controllers/cli-controller.js.map +0 -1
- package/dist/create-cli-server.d.ts +0 -25
- package/dist/create-cli-server.d.ts.map +0 -1
- package/dist/create-cli-server.js +0 -35
- package/dist/create-cli-server.js.map +0 -1
- package/dist/extensions/cli-builder.d.ts +0 -9
- package/dist/extensions/cli-builder.d.ts.map +0 -1
- package/dist/extensions/cli-builder.js +0 -18
- package/dist/extensions/cli-builder.js.map +0 -1
- package/dist/extensions/index.d.ts.map +0 -1
- package/dist/extensions/index.js.map +0 -1
- package/dist/index.d.ts +0 -14
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -40
- package/dist/index.js.map +0 -1
- package/dist/models/cli-server-command-descriptor.d.ts.map +0 -1
- package/dist/models/cli-server-command-descriptor.js.map +0 -1
- package/dist/models/cli-server-output.d.ts +0 -23
- package/dist/models/cli-server-output.d.ts.map +0 -1
- package/dist/models/cli-server-output.js.map +0 -1
- package/dist/models/cli-server-response.d.ts +0 -6
- package/dist/models/cli-server-response.d.ts.map +0 -1
- package/dist/models/cli-server-response.js.map +0 -1
- package/dist/models/index.d.ts.map +0 -1
- package/dist/processors/cli-base64-command-processor.d.ts.map +0 -1
- package/dist/processors/cli-base64-command-processor.js.map +0 -1
- package/dist/processors/cli-echo-command-processor.d.ts.map +0 -1
- package/dist/processors/cli-echo-command-processor.js +0 -14
- package/dist/processors/cli-echo-command-processor.js.map +0 -1
- package/dist/processors/cli-hash-command-processor.d.ts.map +0 -1
- package/dist/processors/cli-hash-command-processor.js.map +0 -1
- package/dist/processors/cli-http-command-processor.d.ts.map +0 -1
- package/dist/processors/cli-http-command-processor.js +0 -79
- package/dist/processors/cli-http-command-processor.js.map +0 -1
- package/dist/processors/cli-status-command-processor.d.ts.map +0 -1
- package/dist/processors/cli-status-command-processor.js.map +0 -1
- package/dist/processors/cli-system-command-processor.d.ts.map +0 -1
- package/dist/processors/cli-system-command-processor.js.map +0 -1
- package/dist/processors/cli-uuid-command-processor.d.ts +0 -10
- package/dist/processors/cli-uuid-command-processor.d.ts.map +0 -1
- package/dist/processors/cli-uuid-command-processor.js +0 -27
- package/dist/processors/cli-uuid-command-processor.js.map +0 -1
- package/dist/processors/index.d.ts.map +0 -1
- package/dist/processors/index.js.map +0 -1
- package/dist/server.js.map +0 -1
- package/dist/services/cli-command-executor-service.d.ts +0 -12
- package/dist/services/cli-command-executor-service.d.ts.map +0 -1
- package/dist/services/cli-command-executor-service.js +0 -45
- package/dist/services/cli-command-executor-service.js.map +0 -1
- package/dist/services/cli-command-registry.d.ts +0 -14
- package/dist/services/cli-command-registry.d.ts.map +0 -1
- package/dist/services/cli-command-registry.js.map +0 -1
- package/dist/services/cli-event-socket-manager.d.ts +0 -15
- package/dist/services/cli-event-socket-manager.d.ts.map +0 -1
- package/dist/services/cli-event-socket-manager.js +0 -60
- package/dist/services/cli-event-socket-manager.js.map +0 -1
- package/dist/services/cli-response-builder.d.ts.map +0 -1
- package/dist/services/cli-response-builder.js.map +0 -1
- package/dist/services/index.d.ts +0 -5
- package/dist/services/index.d.ts.map +0 -1
- package/dist/services/index.js +0 -12
- package/dist/services/index.js.map +0 -1
- /package/dist/{abstractions → src/abstractions}/cli-process-command.js +0 -0
- /package/dist/{extensions → src/extensions}/index.d.ts +0 -0
- /package/dist/{extensions → src/extensions}/index.js +0 -0
- /package/dist/{models → src/models}/cli-server-command-descriptor.js +0 -0
- /package/dist/{models → src/models}/cli-server-output.js +0 -0
- /package/dist/{models → src/models}/cli-server-response.js +0 -0
- /package/dist/{models → src/models}/index.d.ts +0 -0
- /package/dist/{models → src/models}/index.js +0 -0
- /package/dist/{server.d.ts → src/server.d.ts} +0 -0
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import type { IncomingMessage } from 'http';
|
|
2
|
+
/** How the remote shell decides who may open a session (`shellAuth` in `/capabilities`). */
|
|
3
|
+
export type CliShellAuthMode = 'users' | 'token' | 'custom' | 'anonymous' | 'locked';
|
|
4
|
+
/** Extra information handed to a custom {@link CliShellOptions.authorize} check. */
|
|
5
|
+
export interface CliShellAuthorizeContext {
|
|
6
|
+
/** Parsed upgrade URL (path + query). */
|
|
7
|
+
url: URL;
|
|
8
|
+
/** Remote address of the socket. */
|
|
9
|
+
remoteAddress: string;
|
|
10
|
+
/** `interactive` shell or one-shot `command` (`?cmd=`). */
|
|
11
|
+
mode: 'interactive' | 'command';
|
|
12
|
+
}
|
|
13
|
+
/** Environment of the shell child process. */
|
|
14
|
+
export interface CliShellEnvOptions {
|
|
15
|
+
/** Extra server environment variable names copied into the shell (e.g. `['NODE_ENV']`). */
|
|
16
|
+
allow?: string[];
|
|
17
|
+
/** Fixed values set in the shell environment (applied last). */
|
|
18
|
+
set?: Record<string, string>;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Remote shell security options (`createCliServer({ enableShell: true, shell: {...} })`).
|
|
22
|
+
*
|
|
23
|
+
* The shell is only reachable when `enableShell` is true; access is then decided by
|
|
24
|
+
* exactly one mode: `users` (users plugin mounted: ticket + `shell:execute`),
|
|
25
|
+
* `token`, `custom` (`authorize`), or `anonymous` (`allowAnonymous`). With none of
|
|
26
|
+
* them the shell is **locked** (every connection closed with 4401).
|
|
27
|
+
*/
|
|
28
|
+
export interface CliShellOptions {
|
|
29
|
+
/**
|
|
30
|
+
* Shared secret. Clients send `Authorization: Bearer <token>` (header, or the
|
|
31
|
+
* `_header_Authorization` query parameter used by browser clients). Compared in
|
|
32
|
+
* constant time, never logged. Always required when set (also with the users
|
|
33
|
+
* plugin and together with `authorize`).
|
|
34
|
+
*/
|
|
35
|
+
token?: string;
|
|
36
|
+
/**
|
|
37
|
+
* Host-defined check (headers, query, remote address). Thrown errors and
|
|
38
|
+
* rejections deny. Always required when set (also with the users plugin and
|
|
39
|
+
* together with `token`).
|
|
40
|
+
*/
|
|
41
|
+
authorize?: (request: IncomingMessage, context: CliShellAuthorizeContext) => boolean | Promise<boolean>;
|
|
42
|
+
/**
|
|
43
|
+
* Open the shell to anyone who can reach the server (logs a startup WARNING).
|
|
44
|
+
* Ignored once `token` or `authorize` is set.
|
|
45
|
+
*/
|
|
46
|
+
allowAnonymous?: boolean;
|
|
47
|
+
/** Concurrent shells per user (users mode) or per remote address (other modes). Default 3. */
|
|
48
|
+
maxSessionsPerUser?: number;
|
|
49
|
+
/** Concurrent shells in total. Default 20. */
|
|
50
|
+
maxSessions?: number;
|
|
51
|
+
/** Close a shell after this long without stdin (ms). Default 15 minutes; 0 disables. */
|
|
52
|
+
idleTimeoutMs?: number;
|
|
53
|
+
/** Close a shell after this long regardless of activity (ms). Default: no limit. */
|
|
54
|
+
maxDurationMs?: number;
|
|
55
|
+
/**
|
|
56
|
+
* How often open users-mode shells re-check their session and `shell:execute` (ms).
|
|
57
|
+
* Default 30 000, maximum 60 000. Session/user/group changes trigger an immediate re-check.
|
|
58
|
+
*/
|
|
59
|
+
sessionCheckIntervalMs?: number;
|
|
60
|
+
/** Working directory of the shell. Default: the server user's home directory. */
|
|
61
|
+
cwd?: string;
|
|
62
|
+
/** Shell binary. Default: detected (`$SHELL`, bash, sh; powershell on Windows). */
|
|
63
|
+
shell?: string;
|
|
64
|
+
/** Shell environment: a minimal base plus `allow` / `set`. */
|
|
65
|
+
env?: CliShellEnvOptions;
|
|
66
|
+
}
|
|
67
|
+
export declare const SHELL_DEFAULTS: {
|
|
68
|
+
readonly maxSessionsPerUser: 3;
|
|
69
|
+
readonly maxSessions: 20;
|
|
70
|
+
readonly idleTimeoutMs: number;
|
|
71
|
+
readonly sessionCheckIntervalMs: number;
|
|
72
|
+
readonly maxSessionCheckIntervalMs: number;
|
|
73
|
+
/** stdin touches the users session at most this often. */
|
|
74
|
+
readonly touchIntervalMs: number;
|
|
75
|
+
};
|
|
76
|
+
/** WebSocket close codes used by the shell socket (accept, then close). */
|
|
77
|
+
export declare const ShellCloseCodes: {
|
|
78
|
+
readonly LoginRequired: 4401;
|
|
79
|
+
readonly Forbidden: 4403;
|
|
80
|
+
readonly Disabled: 4404;
|
|
81
|
+
readonly TimedOut: 4408;
|
|
82
|
+
readonly TooMany: 4429;
|
|
83
|
+
};
|
|
84
|
+
/**
|
|
85
|
+
* Resolves the access mode (`shellAuth`). Users plugin mounted ⇒ `users`; otherwise
|
|
86
|
+
* `token` before `custom`, then `anonymous`; otherwise `locked`. Every configured
|
|
87
|
+
* check among token/authorize must pass whatever the reported mode.
|
|
88
|
+
*/
|
|
89
|
+
export declare function resolveShellAuthMode(options: CliShellOptions | undefined, usersMounted: boolean): CliShellAuthMode;
|
|
90
|
+
/** Constant-time comparison of a presented token with the configured secret. */
|
|
91
|
+
export declare function tokensEqual(presented: string, expected: string): boolean;
|
|
92
|
+
/**
|
|
93
|
+
* Bearer token from the `Authorization` header or, for browser clients that
|
|
94
|
+
* cannot set WebSocket headers, the `_header_Authorization` query parameter.
|
|
95
|
+
*/
|
|
96
|
+
export declare function readBearerToken(request: IncomingMessage, url: URL): string | undefined;
|
|
97
|
+
/**
|
|
98
|
+
* Builds the minimal shell environment: `PATH`, `HOME`, `USER`, `LANG`, `TERM`,
|
|
99
|
+
* `COLUMNS`, `LINES`, `SHELL` (plus the Windows essentials on win32), then the
|
|
100
|
+
* `allow`-listed server variables, then the fixed `set` values.
|
|
101
|
+
*/
|
|
102
|
+
export declare function buildShellEnv(options: CliShellEnvOptions | undefined, info: {
|
|
103
|
+
shell: string;
|
|
104
|
+
cols: number;
|
|
105
|
+
rows: number;
|
|
106
|
+
}, source?: NodeJS.ProcessEnv): Record<string, string>;
|
|
107
|
+
//# sourceMappingURL=cli-shell-options.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-shell-options.d.ts","sourceRoot":"","sources":["../../../src/services/cli-shell-options.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,MAAM,CAAC;AAI5C,4FAA4F;AAC5F,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,WAAW,GAAG,QAAQ,CAAC;AAErF,oFAAoF;AACpF,MAAM,WAAW,wBAAwB;IACrC,yCAAyC;IACzC,GAAG,EAAE,GAAG,CAAC;IACT,oCAAoC;IACpC,aAAa,EAAE,MAAM,CAAC;IACtB,2DAA2D;IAC3D,IAAI,EAAE,aAAa,GAAG,SAAS,CAAC;CACnC;AAED,8CAA8C;AAC9C,MAAM,WAAW,kBAAkB;IAC/B,2FAA2F;IAC3F,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,gEAAgE;IAChE,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAChC;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,eAAe;IAC5B;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,wBAAwB,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACxG;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,8FAA8F;IAC9F,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,8CAA8C;IAC9C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wFAAwF;IACxF,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,oFAAoF;IACpF,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;OAGG;IACH,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,iFAAiF;IACjF,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,mFAAmF;IACnF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8DAA8D;IAC9D,GAAG,CAAC,EAAE,kBAAkB,CAAC;CAC5B;AAED,eAAO,MAAM,cAAc;;;;;;IAMvB,0DAA0D;;CAEpD,CAAC;AAEX,2EAA2E;AAC3E,eAAO,MAAM,eAAe;;;;;;CAMlB,CAAC;AAEX;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,eAAe,GAAG,SAAS,EAAE,YAAY,EAAE,OAAO,GAAG,gBAAgB,CAMlH;AAED,gFAAgF;AAChF,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAIxE;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,eAAe,EAAE,GAAG,EAAE,GAAG,GAAG,MAAM,GAAG,SAAS,CAatF;AAMD;;;;GAIG;AACH,wBAAgB,aAAa,CACzB,OAAO,EAAE,kBAAkB,GAAG,SAAS,EACvC,IAAI,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EACnD,MAAM,GAAE,MAAM,CAAC,UAAwB,GACxC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CA0BxB"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.ShellCloseCodes = exports.SHELL_DEFAULTS = void 0;
|
|
37
|
+
exports.resolveShellAuthMode = resolveShellAuthMode;
|
|
38
|
+
exports.tokensEqual = tokensEqual;
|
|
39
|
+
exports.readBearerToken = readBearerToken;
|
|
40
|
+
exports.buildShellEnv = buildShellEnv;
|
|
41
|
+
const os = __importStar(require("os"));
|
|
42
|
+
const crypto_1 = require("crypto");
|
|
43
|
+
exports.SHELL_DEFAULTS = {
|
|
44
|
+
maxSessionsPerUser: 3,
|
|
45
|
+
maxSessions: 20,
|
|
46
|
+
idleTimeoutMs: 15 * 60 * 1000,
|
|
47
|
+
sessionCheckIntervalMs: 30 * 1000,
|
|
48
|
+
maxSessionCheckIntervalMs: 60 * 1000,
|
|
49
|
+
/** stdin touches the users session at most this often. */
|
|
50
|
+
touchIntervalMs: 30 * 1000,
|
|
51
|
+
};
|
|
52
|
+
/** WebSocket close codes used by the shell socket (accept, then close). */
|
|
53
|
+
exports.ShellCloseCodes = {
|
|
54
|
+
LoginRequired: 4401,
|
|
55
|
+
Forbidden: 4403,
|
|
56
|
+
Disabled: 4404,
|
|
57
|
+
TimedOut: 4408,
|
|
58
|
+
TooMany: 4429,
|
|
59
|
+
};
|
|
60
|
+
/**
|
|
61
|
+
* Resolves the access mode (`shellAuth`). Users plugin mounted ⇒ `users`; otherwise
|
|
62
|
+
* `token` before `custom`, then `anonymous`; otherwise `locked`. Every configured
|
|
63
|
+
* check among token/authorize must pass whatever the reported mode.
|
|
64
|
+
*/
|
|
65
|
+
function resolveShellAuthMode(options, usersMounted) {
|
|
66
|
+
if (usersMounted)
|
|
67
|
+
return 'users';
|
|
68
|
+
if (options?.token)
|
|
69
|
+
return 'token';
|
|
70
|
+
if (options?.authorize)
|
|
71
|
+
return 'custom';
|
|
72
|
+
if (options?.allowAnonymous)
|
|
73
|
+
return 'anonymous';
|
|
74
|
+
return 'locked';
|
|
75
|
+
}
|
|
76
|
+
/** Constant-time comparison of a presented token with the configured secret. */
|
|
77
|
+
function tokensEqual(presented, expected) {
|
|
78
|
+
const a = (0, crypto_1.createHash)('sha256').update(presented, 'utf8').digest();
|
|
79
|
+
const b = (0, crypto_1.createHash)('sha256').update(expected, 'utf8').digest();
|
|
80
|
+
return (0, crypto_1.timingSafeEqual)(a, b);
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Bearer token from the `Authorization` header or, for browser clients that
|
|
84
|
+
* cannot set WebSocket headers, the `_header_Authorization` query parameter.
|
|
85
|
+
*/
|
|
86
|
+
function readBearerToken(request, url) {
|
|
87
|
+
let value = request.headers.authorization;
|
|
88
|
+
if (!value) {
|
|
89
|
+
for (const [key, v] of url.searchParams) {
|
|
90
|
+
if (key.toLowerCase() === '_header_authorization') {
|
|
91
|
+
value = v;
|
|
92
|
+
break;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
if (!value)
|
|
97
|
+
return undefined;
|
|
98
|
+
const match = /^Bearer\s+(.+)$/i.exec(value.trim());
|
|
99
|
+
return match ? match[1].trim() : undefined;
|
|
100
|
+
}
|
|
101
|
+
const BASE_ENV = ['PATH', 'HOME', 'USER', 'LANG', 'TERM', 'COLUMNS', 'LINES', 'SHELL'];
|
|
102
|
+
/** Variables Windows needs to start PowerShell at all. */
|
|
103
|
+
const WINDOWS_BASE_ENV = ['SystemRoot', 'SystemDrive', 'WINDIR', 'ComSpec', 'PATHEXT', 'USERPROFILE', 'USERNAME', 'TEMP', 'TMP'];
|
|
104
|
+
/**
|
|
105
|
+
* Builds the minimal shell environment: `PATH`, `HOME`, `USER`, `LANG`, `TERM`,
|
|
106
|
+
* `COLUMNS`, `LINES`, `SHELL` (plus the Windows essentials on win32), then the
|
|
107
|
+
* `allow`-listed server variables, then the fixed `set` values.
|
|
108
|
+
*/
|
|
109
|
+
function buildShellEnv(options, info, source = process.env) {
|
|
110
|
+
const env = {};
|
|
111
|
+
const names = os.platform() === 'win32' ? [...BASE_ENV, ...WINDOWS_BASE_ENV] : BASE_ENV;
|
|
112
|
+
for (const name of [...names, ...(options?.allow ?? [])]) {
|
|
113
|
+
const value = source[name];
|
|
114
|
+
if (value !== undefined)
|
|
115
|
+
env[name] = value;
|
|
116
|
+
}
|
|
117
|
+
env.TERM = 'xterm-256color';
|
|
118
|
+
env.COLUMNS = String(info.cols);
|
|
119
|
+
env.LINES = String(info.rows);
|
|
120
|
+
env.SHELL = info.shell;
|
|
121
|
+
if (!env.HOME)
|
|
122
|
+
env.HOME = os.homedir();
|
|
123
|
+
if (!env.USER) {
|
|
124
|
+
try {
|
|
125
|
+
env.USER = os.userInfo().username;
|
|
126
|
+
}
|
|
127
|
+
catch {
|
|
128
|
+
// no passwd entry (containers with arbitrary uids)
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
if (!env.PATH && os.platform() !== 'win32') {
|
|
132
|
+
env.PATH = '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin';
|
|
133
|
+
}
|
|
134
|
+
for (const [k, v] of Object.entries(options?.set ?? {})) {
|
|
135
|
+
env[k] = String(v);
|
|
136
|
+
}
|
|
137
|
+
return env;
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=cli-shell-options.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-shell-options.js","sourceRoot":"","sources":["../../../src/services/cli-shell-options.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { WebSocket } from 'ws';
|
|
2
|
+
import type { IncomingMessage } from 'http';
|
|
3
|
+
import { ICliServerAuth } from '../auth/cli-server-auth';
|
|
4
|
+
import { CliShellAuthMode, CliShellOptions } from './cli-shell-options';
|
|
5
|
+
/** Public view of an open shell session. */
|
|
6
|
+
export interface CliShellSessionInfo {
|
|
7
|
+
id: string;
|
|
8
|
+
authMode: CliShellAuthMode;
|
|
9
|
+
mode: 'interactive' | 'command';
|
|
10
|
+
remoteAddress: string;
|
|
11
|
+
userId?: string;
|
|
12
|
+
userName?: string;
|
|
13
|
+
sessionId?: string;
|
|
14
|
+
startedAt: string;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Manages interactive PTY shell sessions over WebSocket connections and
|
|
18
|
+
* enforces Appendix C: access mode, session binding, limits, timeouts,
|
|
19
|
+
* minimal environment and audit.
|
|
20
|
+
*/
|
|
21
|
+
export declare class CliShellSessionManager {
|
|
22
|
+
private _options;
|
|
23
|
+
private _enabled;
|
|
24
|
+
private _auth?;
|
|
25
|
+
private _unsubscribe?;
|
|
26
|
+
private readonly _sessions;
|
|
27
|
+
private _nextId;
|
|
28
|
+
private _checkTimer?;
|
|
29
|
+
private _trustProxy;
|
|
30
|
+
constructor(options?: {
|
|
31
|
+
enabled?: boolean;
|
|
32
|
+
shell?: CliShellOptions;
|
|
33
|
+
trustProxy?: boolean | number;
|
|
34
|
+
});
|
|
35
|
+
/**
|
|
36
|
+
* Trusted reverse-proxy hops (`true` = 1): the remote address is the
|
|
37
|
+
* `X-Forwarded-For` entry at index `len - hops` (`false`/0: the socket address).
|
|
38
|
+
*/
|
|
39
|
+
setTrustProxy(trust: boolean | number): void;
|
|
40
|
+
get enabled(): boolean;
|
|
41
|
+
setEnabled(enabled: boolean): void;
|
|
42
|
+
get options(): CliShellOptions;
|
|
43
|
+
setOptions(options: CliShellOptions): void;
|
|
44
|
+
/** Current access mode (`undefined` while the shell is disabled). */
|
|
45
|
+
get authMode(): CliShellAuthMode | undefined;
|
|
46
|
+
/** Installs the auth provider (users plugin); subscribes to its session events. */
|
|
47
|
+
setAuth(auth: ICliServerAuth | undefined): void;
|
|
48
|
+
/** Logs the startup state: ERROR when locked, WARNING when anonymous. */
|
|
49
|
+
logStartupState(): void;
|
|
50
|
+
/** Open sessions. */
|
|
51
|
+
getSessions(): CliShellSessionInfo[];
|
|
52
|
+
/**
|
|
53
|
+
* Takes over an accepted shell WebSocket: authorizes it (closing with
|
|
54
|
+
* 4401/4403/4404/4429 when refused), then bridges it to a PTY.
|
|
55
|
+
*/
|
|
56
|
+
accept(ws: WebSocket, request: IncomingMessage, url: URL): Promise<void>;
|
|
57
|
+
/** Decides access for the given mode. */
|
|
58
|
+
private authorize;
|
|
59
|
+
private spawn;
|
|
60
|
+
/** Idle (no stdin) and absolute duration timers ⇒ 4408. */
|
|
61
|
+
private armTimers;
|
|
62
|
+
private onSessionEvent;
|
|
63
|
+
private ensureCheckTimer;
|
|
64
|
+
private stopCheckTimerIfIdle;
|
|
65
|
+
/**
|
|
66
|
+
* Re-validates users-mode shells: session alive, user enabled, still holding
|
|
67
|
+
* `shell:execute` (identities from a host auth adapter are re-authenticated
|
|
68
|
+
* from the original upgrade request). Otherwise the shell is closed with 4401
|
|
69
|
+
* `session ended` (audit reason `session ended` or `permission removed`).
|
|
70
|
+
* The check itself never extends the session; stdin received since the
|
|
71
|
+
* previous check touches it first (at most once per 30 s).
|
|
72
|
+
*/
|
|
73
|
+
recheck(userId?: string): Promise<void>;
|
|
74
|
+
/** One re-check of a users-mode shell; ends it when the session ended or lost `shell:execute`. */
|
|
75
|
+
private revalidateSession;
|
|
76
|
+
private onOpened;
|
|
77
|
+
/**
|
|
78
|
+
* Ends a session once (`why` is the audit reason: exited | closed | session ended |
|
|
79
|
+
* permission removed | shell timed out | server shutdown | error): kills the process tree, closes the socket with the
|
|
80
|
+
* given code (when still open) and audits/logs the close.
|
|
81
|
+
*/
|
|
82
|
+
private end;
|
|
83
|
+
private audit;
|
|
84
|
+
/** Closes every open shell (server shutdown). */
|
|
85
|
+
dispose(): void;
|
|
86
|
+
private remoteAddressOf;
|
|
87
|
+
/** Determines the shell binary and arguments based on options, platform and optional command. */
|
|
88
|
+
private getShellInfo;
|
|
89
|
+
/** Sends a JSON message to the WebSocket if the connection is open. */
|
|
90
|
+
private send;
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=cli-shell-session-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-shell-session-manager.d.ts","sourceRoot":"","sources":["../../../src/services/cli-shell-session-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAC/B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,MAAM,CAAC;AAK5C,OAAO,EAIH,cAAc,EAEjB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACH,gBAAgB,EAChB,eAAe,EAOlB,MAAM,qBAAqB,CAAC;AAwC7B,4CAA4C;AAC5C,MAAM,WAAW,mBAAmB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,IAAI,EAAE,aAAa,GAAG,SAAS,CAAC;IAChC,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACrB;AAiCD;;;;GAIG;AACH,qBAAa,sBAAsB;IAC/B,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,QAAQ,CAAU;IAC1B,OAAO,CAAC,KAAK,CAAC,CAAiB;IAC/B,OAAO,CAAC,YAAY,CAAC,CAAa;IAClC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA2B;IACrD,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,WAAW,CAAC,CAAiB;IAErC,OAAO,CAAC,WAAW,CAAmB;gBAE1B,OAAO,GAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,eAAe,CAAC;QAAC,UAAU,CAAC,EAAE,OAAO,GAAG,MAAM,CAAA;KAAO;IAMvG;;;OAGG;IACH,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI;IAI5C,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAIlC,IAAI,OAAO,IAAI,eAAe,CAE7B;IAED,UAAU,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI;IAI1C,qEAAqE;IACrE,IAAI,QAAQ,IAAI,gBAAgB,GAAG,SAAS,CAE3C;IAED,mFAAmF;IACnF,OAAO,CAAC,IAAI,EAAE,cAAc,GAAG,SAAS,GAAG,IAAI;IAU/C,yEAAyE;IACzE,eAAe,IAAI,IAAI;IAevB,qBAAqB;IACrB,WAAW,IAAI,mBAAmB,EAAE;IAapC;;;OAGG;IACG,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,eAAe,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAkE9E,yCAAyC;YAC3B,SAAS;IA0DvB,OAAO,CAAC,KAAK;IA4Eb,2DAA2D;IAC3D,OAAO,CAAC,SAAS;IAoCjB,OAAO,CAAC,cAAc;IAYtB,OAAO,CAAC,gBAAgB;IAUxB,OAAO,CAAC,oBAAoB;IAO5B;;;;;;;OAOG;IACG,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAO7C,kGAAkG;YACpF,iBAAiB;IA0B/B,OAAO,CAAC,QAAQ;IAQhB;;;;OAIG;IACH,OAAO,CAAC,GAAG;IA2BX,OAAO,CAAC,KAAK;IAqBb,iDAAiD;IACjD,OAAO,IAAI,IAAI;IAYf,OAAO,CAAC,eAAe;IAIvB,iGAAiG;IACjG,OAAO,CAAC,YAAY;IASpB,uEAAuE;IACvE,OAAO,CAAC,IAAI;CAKf"}
|