@dbx-tools/cli 0.9.121 → 0.9.123
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 +18 -18
- package/index.ts +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.js +2 -2
- package/lib/src/genie-code/runner.js +13 -18
- package/lib/src/lakebase-proxy/options.js +2 -2
- package/lib/src/tunnel/cli.js +20 -27
- package/package.json +19 -19
- package/src/genie-code/runner.ts +13 -21
- package/src/lakebase-proxy/options.ts +1 -1
- package/src/tunnel/cli.ts +23 -32
package/README.md
CHANGED
|
@@ -452,13 +452,13 @@ dbx lakebase-proxy [options] [command]
|
|
|
452
452
|
|
|
453
453
|
#### Options
|
|
454
454
|
|
|
455
|
-
| Option | Description
|
|
456
|
-
| --------------------------------------- |
|
|
457
|
-
| `-V, --version` | output the version number
|
|
458
|
-
| `--postgres-role <value>` | PostgreSQL role assumed after authentication. (env:
|
|
459
|
-
| `-l, --listen <value>` | Loopback listener address. (default: tcp://localhost:5432, env: LISTEN)
|
|
460
|
-
| `-s, --startup-timeout-seconds <value>` | Startup timeout in seconds. (default: 30, env: STARTUP_TIMEOUT_SECONDS)
|
|
461
|
-
| `--profile <value>` | Exact Databricks profile. (env: DATABRICKS_CONFIG_PROFILE)
|
|
455
|
+
| Option | Description |
|
|
456
|
+
| --------------------------------------- | ----------------------------------------------------------------------- |
|
|
457
|
+
| `-V, --version` | output the version number |
|
|
458
|
+
| `--postgres-role <value>` | PostgreSQL role assumed after authentication. (env: POSTGRES_ROLE) |
|
|
459
|
+
| `-l, --listen <value>` | Loopback listener address. (default: tcp://localhost:5432, env: LISTEN) |
|
|
460
|
+
| `-s, --startup-timeout-seconds <value>` | Startup timeout in seconds. (default: 30, env: STARTUP_TIMEOUT_SECONDS) |
|
|
461
|
+
| `--profile <value>` | Exact Databricks profile. (env: DATABRICKS_CONFIG_PROFILE) |
|
|
462
462
|
|
|
463
463
|
#### Commands
|
|
464
464
|
|
|
@@ -512,15 +512,15 @@ dbx lakebase-proxy service install [options]
|
|
|
512
512
|
|
|
513
513
|
#### Options
|
|
514
514
|
|
|
515
|
-
| Option | Description
|
|
516
|
-
| --------------------------------------- |
|
|
517
|
-
| `--no-start` | Do not start the service after installation
|
|
518
|
-
| `--python-project <path>` | Install a local Python project instead of the registry package
|
|
519
|
-
| `--offline` | Install Python packages from the uv cache without network access
|
|
520
|
-
| `--postgres-role <value>` | PostgreSQL role assumed after authentication. (env:
|
|
521
|
-
| `-l, --listen <value>` | Loopback listener address. (default: tcp://localhost:5432, env: LISTEN)
|
|
522
|
-
| `-s, --startup-timeout-seconds <value>` | Startup timeout in seconds. (default: 30, env: STARTUP_TIMEOUT_SECONDS)
|
|
523
|
-
| `--profile <value>` | Exact Databricks profile. (env: DATABRICKS_CONFIG_PROFILE)
|
|
515
|
+
| Option | Description |
|
|
516
|
+
| --------------------------------------- | ----------------------------------------------------------------------- |
|
|
517
|
+
| `--no-start` | Do not start the service after installation |
|
|
518
|
+
| `--python-project <path>` | Install a local Python project instead of the registry package |
|
|
519
|
+
| `--offline` | Install Python packages from the uv cache without network access |
|
|
520
|
+
| `--postgres-role <value>` | PostgreSQL role assumed after authentication. (env: POSTGRES_ROLE) |
|
|
521
|
+
| `-l, --listen <value>` | Loopback listener address. (default: tcp://localhost:5432, env: LISTEN) |
|
|
522
|
+
| `-s, --startup-timeout-seconds <value>` | Startup timeout in seconds. (default: 30, env: STARTUP_TIMEOUT_SECONDS) |
|
|
523
|
+
| `--profile <value>` | Exact Databricks profile. (env: DATABRICKS_CONFIG_PROFILE) |
|
|
524
524
|
|
|
525
525
|
### `dbx lakebase-proxy service start`
|
|
526
526
|
|
|
@@ -735,11 +735,11 @@ dbx graphiti [options] [command]
|
|
|
735
735
|
| `-m, --model-class <value>` | Optional chat capability class used when selecting a default model. (choices: "chat-thinking", "chat-balanced", "chat-fast", default: "chat-fast", env: MODEL_CLASS) |
|
|
736
736
|
| `-t, --temperature <value>` | Sampling temperature forwarded to the Graphiti LLM client. (default: 1, env: TEMPERATURE) |
|
|
737
737
|
| `--structured-output-mode <value>` | Structured-output mode forwarded to Graphiti's OpenAI provider. (default: "json_object", env: LLM_STRUCTURED_OUTPUT_MODE) |
|
|
738
|
-
| `--startup-timeout-ms <value>` | Maximum milliseconds allowed for the Graphiti runtime to become ready. (default: 180000, env:
|
|
738
|
+
| `--startup-timeout-ms <value>` | Maximum milliseconds allowed for the Graphiti runtime to become ready. (default: 180000, env: GRAPHITI_STARTUP_TIMEOUT_MS) |
|
|
739
739
|
| `-l, --listen <value>` | Graphiti HTTP listener. (default: tcp://127.0.0.1:7272, env: GRAPHITI_LISTEN) |
|
|
740
740
|
| `--database-url <value>` | PostgreSQL URL or Lakebase target. Omit it to use persistent embedded PostgreSQL. (env: LAKEBASE_ENDPOINT) |
|
|
741
741
|
| `--database-schema <value>` | PostgreSQL schema used for Lakebase graph tables. (default: "dbx_tools_graphiti", env: GRAPHITI_DATABASE_SCHEMA) |
|
|
742
|
-
| `--postgres-role <value>` | PostgreSQL role assumed after authentication. (env:
|
|
742
|
+
| `--postgres-role <value>` | PostgreSQL role assumed after authentication. (env: POSTGRES_ROLE) |
|
|
743
743
|
|
|
744
744
|
#### Commands
|
|
745
745
|
|
package/index.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
// Hand edits are overwritten on the next watch; this file is read-only.
|
|
4
4
|
|
|
5
5
|
export const PACKAGE_IDENTIFIER = "@dbx-tools/cli";
|
|
6
|
-
export const PACKAGE_VERSION = "0.9.
|
|
6
|
+
export const PACKAGE_VERSION = "0.9.123";
|
|
7
7
|
export * as appkitCli from "./src/appkit/cli.ts";
|
|
8
8
|
export * as appkitEnvExport from "./src/appkit/env-export.ts";
|
|
9
9
|
export * as authCli from "./src/auth/cli.ts";
|
package/lib/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export declare const PACKAGE_IDENTIFIER = "@dbx-tools/cli";
|
|
2
|
-
export declare const PACKAGE_VERSION = "0.9.
|
|
2
|
+
export declare const PACKAGE_VERSION = "0.9.123";
|
|
3
3
|
export * as appkitCli from "./src/appkit/cli.ts";
|
|
4
4
|
export * as appkitEnvExport from "./src/appkit/env-export.ts";
|
|
5
5
|
export * as authCli from "./src/auth/cli.ts";
|
package/lib/index.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// Regenerated from the exporting modules in ./src.
|
|
3
3
|
// Hand edits are overwritten on the next watch; this file is read-only.
|
|
4
4
|
export const PACKAGE_IDENTIFIER = "@dbx-tools/cli";
|
|
5
|
-
export const PACKAGE_VERSION = "0.9.
|
|
5
|
+
export const PACKAGE_VERSION = "0.9.123";
|
|
6
6
|
export * as appkitCli from "./src/appkit/cli.js";
|
|
7
7
|
export * as appkitEnvExport from "./src/appkit/env-export.js";
|
|
8
8
|
export * as authCli from "./src/auth/cli.js";
|
|
@@ -41,4 +41,4 @@ export { SSL_REQUEST, CANCEL_REQUEST, PROTOCOL_3, PostgresProtocolError } from "
|
|
|
41
41
|
export { LakebaseProxy } from "./src/lakebase-proxy/proxy.js";
|
|
42
42
|
export { workspaceRoot } from "./src/root.js";
|
|
43
43
|
export { TunnelOptionsSchema } from "./src/tunnel/options.js";
|
|
44
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
44
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxnQkFBZ0IsQ0FBQztBQUNuRCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDO0FBQ3pDLE9BQU8sS0FBSyxTQUFTLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxLQUFLLGVBQWUsTUFBTSw0QkFBNEIsQ0FBQztBQUM5RCxPQUFPLEtBQUssT0FBTyxNQUFNLG1CQUFtQixDQUFDO0FBQzdDLE9BQU8sS0FBSyxXQUFXLE1BQU0sdUJBQXVCLENBQUM7QUFDckQsT0FBTyxLQUFLLFNBQVMsTUFBTSxvQkFBb0IsQ0FBQztBQUNoRCxPQUFPLEtBQUssR0FBRyxNQUFNLGNBQWMsQ0FBQztBQUNwQyxPQUFPLEtBQUssR0FBRyxNQUFNLGNBQWMsQ0FBQztBQUNwQyxPQUFPLEtBQUssWUFBWSxNQUFNLHlCQUF5QixDQUFDO0FBQ3hELE9BQU8sS0FBSyxlQUFlLE1BQU0sNEJBQTRCLENBQUM7QUFDOUQsT0FBTyxLQUFLLGdCQUFnQixNQUFNLDZCQUE2QixDQUFDO0FBQ2hFLE9BQU8sS0FBSyxnQkFBZ0IsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEtBQUssZUFBZSxNQUFNLDRCQUE0QixDQUFDO0FBQzlELE9BQU8sS0FBSyxnQkFBZ0IsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEtBQUssV0FBVyxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sS0FBSyxlQUFlLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxLQUFLLHlCQUF5QixNQUFNLHNDQUFzQyxDQUFDO0FBQ2xGLE9BQU8sS0FBSyxnQkFBZ0IsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEtBQUssb0JBQW9CLE1BQU0saUNBQWlDLENBQUM7QUFDeEUsT0FBTyxLQUFLLHFCQUFxQixNQUFNLGtDQUFrQyxDQUFDO0FBQzFFLE9BQU8sS0FBSyxrQkFBa0IsTUFBTSwrQkFBK0IsQ0FBQztBQUNwRSxPQUFPLEtBQUssZUFBZSxNQUFNLDRCQUE0QixDQUFDO0FBQzlELE9BQU8sS0FBSyxrQkFBa0IsTUFBTSwrQkFBK0IsQ0FBQztBQUNwRSxPQUFPLEtBQUssSUFBSSxNQUFNLGVBQWUsQ0FBQztBQUN0QyxPQUFPLEtBQUssU0FBUyxNQUFNLHFCQUFxQixDQUFDO0FBQ2pELE9BQU8sS0FBSyxTQUFTLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxLQUFLLGFBQWEsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEtBQUssV0FBVyxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRTVGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXhGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFOUMsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFHekUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFHaEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFHNUUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLDZCQUE2QixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFNUcsT0FBTyxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsVUFBVSxFQUFFLHFCQUFxQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFFbEgsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRTlELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBHRU5FUkFURUQgYnkgcHJvamVuIHdhdGNoIC0gRE8gTk9UIEVESVQuXG4vLyBSZWdlbmVyYXRlZCBmcm9tIHRoZSBleHBvcnRpbmcgbW9kdWxlcyBpbiAuL3NyYy5cbi8vIEhhbmQgZWRpdHMgYXJlIG92ZXJ3cml0dGVuIG9uIHRoZSBuZXh0IHdhdGNoOyB0aGlzIGZpbGUgaXMgcmVhZC1vbmx5LlxuXG5leHBvcnQgY29uc3QgUEFDS0FHRV9JREVOVElGSUVSID0gXCJAZGJ4LXRvb2xzL2NsaVwiO1xuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfVkVSU0lPTiA9IFwiMC45LjEyM1wiO1xuZXhwb3J0ICogYXMgYXBwa2l0Q2xpIGZyb20gXCIuL3NyYy9hcHBraXQvY2xpLnRzXCI7XG5leHBvcnQgKiBhcyBhcHBraXRFbnZFeHBvcnQgZnJvbSBcIi4vc3JjL2FwcGtpdC9lbnYtZXhwb3J0LnRzXCI7XG5leHBvcnQgKiBhcyBhdXRoQ2xpIGZyb20gXCIuL3NyYy9hdXRoL2NsaS50c1wiO1xuZXhwb3J0ICogYXMgYXV0aE9wdGlvbnMgZnJvbSBcIi4vc3JjL2F1dGgvb3B0aW9ucy50c1wiO1xuZXhwb3J0ICogYXMgYm9vdHN0cmFwIGZyb20gXCIuL3NyYy9ib290c3RyYXAudHNcIjtcbmV4cG9ydCAqIGFzIGJ1biBmcm9tIFwiLi9zcmMvYnVuLnRzXCI7XG5leHBvcnQgKiBhcyBjbGkgZnJvbSBcIi4vc3JjL2NsaS50c1wiO1xuZXhwb3J0ICogYXMgZ2VuaWVDb2RlQ2xpIGZyb20gXCIuL3NyYy9nZW5pZS1jb2RlL2NsaS50c1wiO1xuZXhwb3J0ICogYXMgZ2VuaWVDb2RlQ29uZmlnIGZyb20gXCIuL3NyYy9nZW5pZS1jb2RlL2NvbmZpZy50c1wiO1xuZXhwb3J0ICogYXMgZ2VuaWVDb2RlSW5zdGFsbCBmcm9tIFwiLi9zcmMvZ2VuaWUtY29kZS9pbnN0YWxsLnRzXCI7XG5leHBvcnQgKiBhcyBnZW5pZUNvZGVPcHRpb25zIGZyb20gXCIuL3NyYy9nZW5pZS1jb2RlL29wdGlvbnMudHNcIjtcbmV4cG9ydCAqIGFzIGdlbmllQ29kZVJ1bm5lciBmcm9tIFwiLi9zcmMvZ2VuaWUtY29kZS9ydW5uZXIudHNcIjtcbmV4cG9ydCAqIGFzIGdlbmllQ29kZVJ1bnRpbWUgZnJvbSBcIi4vc3JjL2dlbmllLWNvZGUvcnVudGltZS50c1wiO1xuZXhwb3J0ICogYXMgZ3JhcGhpdGlDbGkgZnJvbSBcIi4vc3JjL2dyYXBoaXRpL2NsaS50c1wiO1xuZXhwb3J0ICogYXMgZ3JhcGhpdGlPcHRpb25zIGZyb20gXCIuL3NyYy9ncmFwaGl0aS9vcHRpb25zLnRzXCI7XG5leHBvcnQgKiBhcyBsYWtlYmFzZVByb3h5Q2FuY2VsbGF0aW9uIGZyb20gXCIuL3NyYy9sYWtlYmFzZS1wcm94eS9jYW5jZWxsYXRpb24udHNcIjtcbmV4cG9ydCAqIGFzIGxha2ViYXNlUHJveHlDbGkgZnJvbSBcIi4vc3JjL2xha2ViYXNlLXByb3h5L2NsaS50c1wiO1xuZXhwb3J0ICogYXMgbGFrZWJhc2VQcm94eU9wdGlvbnMgZnJvbSBcIi4vc3JjL2xha2ViYXNlLXByb3h5L29wdGlvbnMudHNcIjtcbmV4cG9ydCAqIGFzIGxha2ViYXNlUHJveHlQcm90b2NvbCBmcm9tIFwiLi9zcmMvbGFrZWJhc2UtcHJveHkvcHJvdG9jb2wudHNcIjtcbmV4cG9ydCAqIGFzIGxha2ViYXNlUHJveHlQcm94eSBmcm9tIFwiLi9zcmMvbGFrZWJhc2UtcHJveHkvcHJveHkudHNcIjtcbmV4cG9ydCAqIGFzIG1vZGVsR2F0ZXdheUNsaSBmcm9tIFwiLi9zcmMvbW9kZWwtZ2F0ZXdheS9jbGkudHNcIjtcbmV4cG9ydCAqIGFzIG1vZGVsR2F0ZXdheVNlcnZlciBmcm9tIFwiLi9zcmMvbW9kZWwtZ2F0ZXdheS9zZXJ2ZXIudHNcIjtcbmV4cG9ydCAqIGFzIHJvb3QgZnJvbSBcIi4vc3JjL3Jvb3QudHNcIjtcbmV4cG9ydCAqIGFzIHR1bm5lbEFwcCBmcm9tIFwiLi9zcmMvdHVubmVsL2FwcC50c1wiO1xuZXhwb3J0ICogYXMgdHVubmVsQ2xpIGZyb20gXCIuL3NyYy90dW5uZWwvY2xpLnRzXCI7XG5leHBvcnQgKiBhcyB0dW5uZWxPcHRpb25zIGZyb20gXCIuL3NyYy90dW5uZWwvb3B0aW9ucy50c1wiO1xuZXhwb3J0ICogYXMgdHVubmVsUHJveHkgZnJvbSBcIi4vc3JjL3R1bm5lbC9wcm94eS50c1wiO1xuZXhwb3J0IHsgRW52RXhwb3J0Rm9ybWF0U2NoZW1hLCBFbnZDb21tYW5kT3B0aW9uc1NjaGVtYSB9IGZyb20gXCIuL3NyYy9hcHBraXQvZW52LWV4cG9ydC50c1wiO1xuZXhwb3J0IHR5cGUgeyBFbnZFeHBvcnRGb3JtYXQsIEVudkNvbW1hbmRPcHRpb25zIH0gZnJvbSBcIi4vc3JjL2FwcGtpdC9lbnYtZXhwb3J0LnRzXCI7XG5leHBvcnQgeyBBdXRoQ2xpT3B0aW9uc1NjaGVtYSwgVG9rZW5Db21tYW5kT3B0aW9uc1NjaGVtYSB9IGZyb20gXCIuL3NyYy9hdXRoL29wdGlvbnMudHNcIjtcbmV4cG9ydCB0eXBlIHsgQXV0aENsaU9wdGlvbnMsIFRva2VuQ29tbWFuZE9wdGlvbnMgfSBmcm9tIFwiLi9zcmMvYXV0aC9vcHRpb25zLnRzXCI7XG5leHBvcnQgeyByZXNvbHZlQnVuQXJndiB9IGZyb20gXCIuL3NyYy9idW4udHNcIjtcbmV4cG9ydCB0eXBlIHsgR2VuaWVDb2RlQ2xpRGVwZW5kZW5jaWVzIH0gZnJvbSBcIi4vc3JjL2dlbmllLWNvZGUvY2xpLnRzXCI7XG5leHBvcnQgeyBHRU5JRV9DT0RFX0dBVEVXQVlfUFJPVklERVIgfSBmcm9tIFwiLi9zcmMvZ2VuaWUtY29kZS9jb25maWcudHNcIjtcbmV4cG9ydCB0eXBlIHsgV3JpdGVHZW5pZUNvZGVDb25maWdPcHRpb25zLCBHZW5pZUNvZGVQcm9maWxlSG9tZSwgR2VuaWVDb2RlSG9tZSB9IGZyb20gXCIuL3NyYy9nZW5pZS1jb2RlL2NvbmZpZy50c1wiO1xuZXhwb3J0IHR5cGUgeyBJbnN0YWxsR2VuaWVDb2RlT3B0aW9ucyB9IGZyb20gXCIuL3NyYy9nZW5pZS1jb2RlL2luc3RhbGwudHNcIjtcbmV4cG9ydCB7IFJVTk5FUl9PUFRJT05TX0VOViB9IGZyb20gXCIuL3NyYy9nZW5pZS1jb2RlL3J1bm5lci50c1wiO1xuZXhwb3J0IHR5cGUgeyBHZW5pZUNvZGVSdW50aW1lRGVwZW5kZW5jaWVzLCBSdW5HZW5pZUNvZGVPcHRpb25zLCBQcmVwYXJlZEdlbmllQ29kZVJ1bnRpbWUgfSBmcm9tIFwiLi9zcmMvZ2VuaWUtY29kZS9ydW50aW1lLnRzXCI7XG5leHBvcnQgdHlwZSB7IEdyYXBoaXRpQ2xpRGVwZW5kZW5jaWVzLCBHcmFwaGl0aVNlcnZpY2VPcHRpb25zIH0gZnJvbSBcIi4vc3JjL2dyYXBoaXRpL2NsaS50c1wiO1xuZXhwb3J0IHsgQ2FuY2VsbGF0aW9uUmVnaXN0cnkgfSBmcm9tIFwiLi9zcmMvbGFrZWJhc2UtcHJveHkvY2FuY2VsbGF0aW9uLnRzXCI7XG5leHBvcnQgdHlwZSB7IENhbmNlbGxhdGlvblRhcmdldCwgQ2FuY2VsbGF0aW9uRm9yd2FyZGVyIH0gZnJvbSBcIi4vc3JjL2xha2ViYXNlLXByb3h5L2NhbmNlbGxhdGlvbi50c1wiO1xuZXhwb3J0IHR5cGUgeyBMYWtlYmFzZVByb3h5Q2xpRGVwZW5kZW5jaWVzIH0gZnJvbSBcIi4vc3JjL2xha2ViYXNlLXByb3h5L2NsaS50c1wiO1xuZXhwb3J0IHsgTGFrZWJhc2VQcm94eU9wdGlvbnNTY2hlbWEsIExha2ViYXNlUHJveHlVcmxPcHRpb25zU2NoZW1hIH0gZnJvbSBcIi4vc3JjL2xha2ViYXNlLXByb3h5L29wdGlvbnMudHNcIjtcbmV4cG9ydCB0eXBlIHsgTGFrZWJhc2VQcm94eU9wdGlvbnMsIFJlc29sdmVkTGFrZWJhc2VQcm94eU9wdGlvbnMsIExha2ViYXNlUHJveHlVcmxPcHRpb25zIH0gZnJvbSBcIi4vc3JjL2xha2ViYXNlLXByb3h5L29wdGlvbnMudHNcIjtcbmV4cG9ydCB7IFNTTF9SRVFVRVNULCBDQU5DRUxfUkVRVUVTVCwgUFJPVE9DT0xfMywgUG9zdGdyZXNQcm90b2NvbEVycm9yIH0gZnJvbSBcIi4vc3JjL2xha2ViYXNlLXByb3h5L3Byb3RvY29sLnRzXCI7XG5leHBvcnQgdHlwZSB7IFN0YXJ0dXBNZXNzYWdlLCBDYW5jZWxNZXNzYWdlLCBJbml0aWFsTWVzc2FnZSB9IGZyb20gXCIuL3NyYy9sYWtlYmFzZS1wcm94eS9wcm90b2NvbC50c1wiO1xuZXhwb3J0IHsgTGFrZWJhc2VQcm94eSB9IGZyb20gXCIuL3NyYy9sYWtlYmFzZS1wcm94eS9wcm94eS50c1wiO1xuZXhwb3J0IHR5cGUgeyBNb2RlbEdhdGV3YXlDbGlEZXBlbmRlbmNpZXMgfSBmcm9tIFwiLi9zcmMvbW9kZWwtZ2F0ZXdheS9jbGkudHNcIjtcbmV4cG9ydCB7IHdvcmtzcGFjZVJvb3QgfSBmcm9tIFwiLi9zcmMvcm9vdC50c1wiO1xuZXhwb3J0IHsgVHVubmVsT3B0aW9uc1NjaGVtYSB9IGZyb20gXCIuL3NyYy90dW5uZWwvb3B0aW9ucy50c1wiO1xuZXhwb3J0IHR5cGUgeyBUdW5uZWxPcHRpb25zLCBSZXNvbHZlZFR1bm5lbE9wdGlvbnMgfSBmcm9tIFwiLi9zcmMvdHVubmVsL29wdGlvbnMudHNcIjtcbmV4cG9ydCB0eXBlIHsgUHJveHlPcHRpb25zIH0gZnJvbSBcIi4vc3JjL3R1bm5lbC9wcm94eS50c1wiO1xuIl19
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* @module
|
|
5
5
|
*/
|
|
6
|
-
import {
|
|
6
|
+
import { exec } from "@dbx-tools/core";
|
|
7
7
|
import { asyncUtils, log } from "@dbx-tools/shared-core";
|
|
8
8
|
import { GenieCodeRunnerOptionsSchema } from "@dbx-tools/shared-genie-code/options";
|
|
9
9
|
/** Private environment field carrying serialized runner options. */
|
|
@@ -50,26 +50,21 @@ export async function runGenieCodeChild(environment = process.env) {
|
|
|
50
50
|
executable: options.executable,
|
|
51
51
|
home: options.home,
|
|
52
52
|
});
|
|
53
|
-
const child =
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
env: {
|
|
59
|
-
...environment,
|
|
60
|
-
GENIE_HOME: options.home,
|
|
61
|
-
},
|
|
62
|
-
stdin: "inherit",
|
|
63
|
-
stdout: "inherit",
|
|
64
|
-
stderr: "inherit",
|
|
53
|
+
const child = exec.spawn(options.executable, [...options.arguments], {
|
|
54
|
+
cwd: process.cwd(),
|
|
55
|
+
env: {
|
|
56
|
+
...environment,
|
|
57
|
+
GENIE_HOME: options.home,
|
|
65
58
|
},
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
59
|
+
stdin: "inherit",
|
|
60
|
+
stdout: "inherit",
|
|
61
|
+
stderr: "inherit",
|
|
62
|
+
terminateTimeout: 5_000,
|
|
63
|
+
killTimeout: 1_000,
|
|
69
64
|
});
|
|
70
|
-
const result = await child
|
|
65
|
+
const result = await child;
|
|
71
66
|
if (result.exitCode !== 0)
|
|
72
67
|
process.exitCode = result.exitCode;
|
|
73
68
|
}
|
|
74
69
|
export { RUNNER_OPTIONS_ENV };
|
|
75
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
70
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVubmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2dlbmllLWNvZGUvcnVubmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFFSCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkMsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUVwRixvRUFBb0U7QUFDcEUsTUFBTSxrQkFBa0IsR0FBRyxnQ0FBZ0MsQ0FBQztBQUM1RCxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7QUFFL0MsK0VBQStFO0FBQy9FLE1BQU0sVUFBVSxzQkFBc0IsQ0FBQyxjQUFpQyxPQUFPLENBQUMsR0FBRztJQUNqRixNQUFNLFVBQVUsR0FBRyxXQUFXLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUNuRCxJQUFJLENBQUMsVUFBVTtRQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxrQkFBa0IsY0FBYyxDQUFDLENBQUM7SUFDdEUsT0FBTyw0QkFBNEIsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0FBQ3BFLENBQUM7QUFFRCxrRkFBa0Y7QUFDbEYsTUFBTSxDQUFDLEtBQUssVUFBVSx1QkFBdUIsQ0FDM0MsU0FBaUIsRUFDakIsV0FBbUIsRUFDbkIsU0FBaUI7SUFFakIsSUFBSSxLQUFLLEVBQUUsTUFBTSxLQUFLLElBQUksVUFBVSxDQUFDLElBQUksQ0FDdkMsS0FBSyxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRTtRQUNuQixJQUFJLENBQUM7WUFDSCxNQUFNLFFBQVEsR0FBRyxNQUFNLEtBQUssQ0FBQyxTQUFTLEVBQUU7Z0JBQ3RDLE9BQU8sRUFBRSxFQUFFLGFBQWEsRUFBRSxVQUFVLFdBQVcsRUFBRSxFQUFFO2dCQUNuRCxNQUFNO2FBQ1AsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxRQUFRLENBQUMsRUFBRSxDQUFDO1FBQ3JCLENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7SUFDSCxDQUFDLEVBQ0Q7UUFDRSxVQUFVLEVBQUUsR0FBRztRQUNmLFNBQVM7UUFDVCxTQUFTLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSztLQUM3QixDQUNGLEVBQUUsQ0FBQztRQUNGLElBQUksS0FBSztZQUFFLE9BQU87SUFDcEIsQ0FBQztBQUNILENBQUM7QUFFRCxpRkFBaUY7QUFDakYsTUFBTSxDQUFDLEtBQUssVUFBVSxpQkFBaUIsQ0FDckMsY0FBaUMsT0FBTyxDQUFDLEdBQUc7SUFFNUMsTUFBTSxPQUFPLEdBQUcsc0JBQXNCLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDcEQsTUFBTSxDQUFDLElBQUksQ0FBQywyQkFBMkIsRUFBRTtRQUN2QyxPQUFPLEVBQUUsT0FBTyxDQUFDLGdCQUFnQjtRQUNqQyxTQUFTLEVBQUUsT0FBTyxDQUFDLGdCQUFnQjtLQUNwQyxDQUFDLENBQUM7SUFDSCxNQUFNLHVCQUF1QixDQUMzQixPQUFPLENBQUMsZ0JBQWdCLEVBQ3hCLE9BQU8sQ0FBQyxXQUFXLEVBQ25CLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FDekIsQ0FBQztJQUNGLE1BQU0sQ0FBQyxJQUFJLENBQUMsMENBQTBDLEVBQUU7UUFDdEQsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVO1FBQzlCLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTtLQUNuQixDQUFDLENBQUM7SUFDSCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRTtRQUNuRSxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUcsRUFBRTtRQUNsQixHQUFHLEVBQUU7WUFDSCxHQUFHLFdBQVc7WUFDZCxVQUFVLEVBQUUsT0FBTyxDQUFDLElBQUk7U0FDekI7UUFDRCxLQUFLLEVBQUUsU0FBUztRQUNoQixNQUFNLEVBQUUsU0FBUztRQUNqQixNQUFNLEVBQUUsU0FBUztRQUNqQixnQkFBZ0IsRUFBRSxLQUFLO1FBQ3ZCLFdBQVcsRUFBRSxLQUFLO0tBQ25CLENBQUMsQ0FBQztJQUNILE1BQU0sTUFBTSxHQUFHLE1BQU0sS0FBSyxDQUFDO0lBQzNCLElBQUksTUFBTSxDQUFDLFFBQVEsS0FBSyxDQUFDO1FBQUUsT0FBTyxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDO0FBQ2hFLENBQUM7QUFFRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogSW50ZXJuYWwgcmVhZGluZXNzIGdhdGUgYW5kIGludGVyYWN0aXZlIEdlbmllIENvZGUgY2hpbGQgcHJvY2Vzcy5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgZXhlYyB9IGZyb20gXCJAZGJ4LXRvb2xzL2NvcmVcIjtcbmltcG9ydCB7IGFzeW5jVXRpbHMsIGxvZyB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQgeyBHZW5pZUNvZGVSdW5uZXJPcHRpb25zU2NoZW1hIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWdlbmllLWNvZGUvb3B0aW9uc1wiO1xuXG4vKiogUHJpdmF0ZSBlbnZpcm9ubWVudCBmaWVsZCBjYXJyeWluZyBzZXJpYWxpemVkIHJ1bm5lciBvcHRpb25zLiAqL1xuY29uc3QgUlVOTkVSX09QVElPTlNfRU5WID0gXCJEQlhfVE9PTFNfR0VOSUVfUlVOTkVSX09QVElPTlNcIjtcbmNvbnN0IGxvZ2dlciA9IGxvZy5sb2dnZXIoXCJnZW5pZS1jb2RlOnJ1bm5lclwiKTtcblxuLyoqIFBhcnNlIHRoZSBzZXJpYWxpemVkIHJ1bm5lciBib3VuZGFyeSBmcm9tIGl0cyBwcml2YXRlIGVudmlyb25tZW50IGZpZWxkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbmllQ29kZVJ1bm5lck9wdGlvbnMoZW52aXJvbm1lbnQ6IE5vZGVKUy5Qcm9jZXNzRW52ID0gcHJvY2Vzcy5lbnYpIHtcbiAgY29uc3Qgc2VyaWFsaXplZCA9IGVudmlyb25tZW50W1JVTk5FUl9PUFRJT05TX0VOVl07XG4gIGlmICghc2VyaWFsaXplZCkgdGhyb3cgbmV3IEVycm9yKGAke1JVTk5FUl9PUFRJT05TX0VOVn0gaXMgcmVxdWlyZWRgKTtcbiAgcmV0dXJuIEdlbmllQ29kZVJ1bm5lck9wdGlvbnNTY2hlbWEucGFyc2UoSlNPTi5wYXJzZShzZXJpYWxpemVkKSk7XG59XG5cbi8qKiBXYWl0IHVudGlsIHRoZSBndWFyZGVkIG1vZGVsLWdhdGV3YXkgaGVhbHRoIHJvdXRlIGFjY2VwdHMgdGhlIHJ1bm5lciB0b2tlbi4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3YWl0Rm9yR2VuaWVDb2RlR2F0ZXdheShcbiAgaGVhbHRoVXJsOiBzdHJpbmcsXG4gIGJlYXJlclRva2VuOiBzdHJpbmcsXG4gIHRpbWVvdXRNczogbnVtYmVyLFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGZvciBhd2FpdCAoY29uc3QgcmVhZHkgb2YgYXN5bmNVdGlscy5wb2xsKFxuICAgIGFzeW5jICh7IHNpZ25hbCB9KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGhlYWx0aFVybCwge1xuICAgICAgICAgIGhlYWRlcnM6IHsgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke2JlYXJlclRva2VufWAgfSxcbiAgICAgICAgICBzaWduYWwsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzcG9uc2Uub2s7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgaW50ZXJ2YWxNczogMjAwLFxuICAgICAgdGltZW91dE1zLFxuICAgICAgcHJlZGljYXRlOiAocmVhZHkpID0+ICFyZWFkeSxcbiAgICB9LFxuICApKSB7XG4gICAgaWYgKHJlYWR5KSByZXR1cm47XG4gIH1cbn1cblxuLyoqIFJ1biBHZW5pZSBDb2RlIHdpdGggaW5oZXJpdGVkIHRlcm1pbmFsIHN0cmVhbXMgYWZ0ZXIgaXRzIGdhdGV3YXkgaXMgcmVhZHkuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuR2VuaWVDb2RlQ2hpbGQoXG4gIGVudmlyb25tZW50OiBOb2RlSlMuUHJvY2Vzc0VudiA9IHByb2Nlc3MuZW52LFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IG9wdGlvbnMgPSBnZW5pZUNvZGVSdW5uZXJPcHRpb25zKGVudmlyb25tZW50KTtcbiAgbG9nZ2VyLmluZm8oXCJ3YWl0aW5nIGZvciBtb2RlbCBnYXRld2F5XCIsIHtcbiAgICBnYXRld2F5OiBvcHRpb25zLmdhdGV3YXlIZWFsdGhVcmwsXG4gICAgdGltZW91dE1zOiBvcHRpb25zLnN0YXJ0dXBUaW1lb3V0TXMsXG4gIH0pO1xuICBhd2FpdCB3YWl0Rm9yR2VuaWVDb2RlR2F0ZXdheShcbiAgICBvcHRpb25zLmdhdGV3YXlIZWFsdGhVcmwsXG4gICAgb3B0aW9ucy5iZWFyZXJUb2tlbixcbiAgICBvcHRpb25zLnN0YXJ0dXBUaW1lb3V0TXMsXG4gICk7XG4gIGxvZ2dlci5pbmZvKFwibW9kZWwgZ2F0ZXdheSByZWFkeTsgc3RhcnRpbmcgR2VuaWUgQ29kZVwiLCB7XG4gICAgZXhlY3V0YWJsZTogb3B0aW9ucy5leGVjdXRhYmxlLFxuICAgIGhvbWU6IG9wdGlvbnMuaG9tZSxcbiAgfSk7XG4gIGNvbnN0IGNoaWxkID0gZXhlYy5zcGF3bihvcHRpb25zLmV4ZWN1dGFibGUsIFsuLi5vcHRpb25zLmFyZ3VtZW50c10sIHtcbiAgICBjd2Q6IHByb2Nlc3MuY3dkKCksXG4gICAgZW52OiB7XG4gICAgICAuLi5lbnZpcm9ubWVudCxcbiAgICAgIEdFTklFX0hPTUU6IG9wdGlvbnMuaG9tZSxcbiAgICB9LFxuICAgIHN0ZGluOiBcImluaGVyaXRcIixcbiAgICBzdGRvdXQ6IFwiaW5oZXJpdFwiLFxuICAgIHN0ZGVycjogXCJpbmhlcml0XCIsXG4gICAgdGVybWluYXRlVGltZW91dDogNV8wMDAsXG4gICAga2lsbFRpbWVvdXQ6IDFfMDAwLFxuICB9KTtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY2hpbGQ7XG4gIGlmIChyZXN1bHQuZXhpdENvZGUgIT09IDApIHByb2Nlc3MuZXhpdENvZGUgPSByZXN1bHQuZXhpdENvZGU7XG59XG5cbmV4cG9ydCB7IFJVTk5FUl9PUFRJT05TX0VOViB9O1xuIl19
|
|
@@ -8,7 +8,7 @@ import { z } from "zod";
|
|
|
8
8
|
const text = (description) => z.string().trim().min(1).optional().describe(description);
|
|
9
9
|
export const LakebaseProxyOptionsSchema = z
|
|
10
10
|
.object({
|
|
11
|
-
...options.
|
|
11
|
+
...options.PostgresConfigOptionsSchema.shape,
|
|
12
12
|
listen: options
|
|
13
13
|
.listenAddressSchema({ port: 5432, loopback: true })
|
|
14
14
|
.describe("Loopback listener address."),
|
|
@@ -38,4 +38,4 @@ export const LakebaseProxyUrlOptionsSchema = z
|
|
|
38
38
|
export function resolveLakebaseProxyOptions(options = {}) {
|
|
39
39
|
return LakebaseProxyOptionsSchema.parse(options);
|
|
40
40
|
}
|
|
41
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
41
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9sYWtlYmFzZS1wcm94eS9vcHRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFFSCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakQsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUV4QixNQUFNLElBQUksR0FBRyxDQUFDLFdBQW1CLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBRWhHLE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFHLENBQUM7S0FDeEMsTUFBTSxDQUFDO0lBQ04sR0FBRyxPQUFPLENBQUMsMkJBQTJCLENBQUMsS0FBSztJQUM1QyxNQUFNLEVBQUUsT0FBTztTQUNaLG1CQUFtQixDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUM7U0FDbkQsUUFBUSxDQUFDLDRCQUE0QixDQUFDO0lBQ3pDLHFCQUFxQixFQUFFLENBQUMsQ0FBQyxNQUFNO1NBQzVCLE1BQU0sRUFBVTtTQUNoQixHQUFHLEVBQUU7U0FDTCxXQUFXLEVBQUU7U0FDYixPQUFPLENBQUMsRUFBRSxDQUFDO1NBQ1gsUUFBUSxDQUFDLDZCQUE2QixDQUFDO0lBQzFDLE9BQU8sRUFBRSxPQUFPLENBQUMsdUJBQXVCLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsMkJBQTJCLENBQUM7Q0FDN0YsQ0FBQztLQUNELE1BQU0sRUFBRTtLQUNSLFFBQVEsQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO0FBRTVELE1BQU0sQ0FBQyxNQUFNLDZCQUE2QixHQUFHLENBQUM7S0FDM0MsTUFBTSxDQUFDO0lBQ04sTUFBTSxFQUFFLElBQUksQ0FBQyxnREFBZ0QsQ0FBQztJQUM5RCxnQkFBZ0IsRUFBRSxPQUFPLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLGdCQUFnQjtJQUN0RSxNQUFNLEVBQUUsT0FBTyxDQUFDLG1CQUFtQixDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLHNCQUFzQixDQUFDO0NBQ3JGLENBQUM7S0FDRCxNQUFNLEVBQUU7S0FDUixNQUFNLENBQ0wsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEtBQUssU0FBUyxJQUFJLFVBQVUsQ0FBQyxnQkFBZ0IsS0FBSyxTQUFTLEVBQzVGO0lBQ0UsT0FBTyxFQUFFLGtDQUFrQztJQUMzQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUM7Q0FDakIsQ0FDRjtLQUNBLFFBQVEsQ0FBQyx5REFBeUQsQ0FBQyxDQUFDO0FBUXZFLDREQUE0RDtBQUM1RCxNQUFNLFVBQVUsMkJBQTJCLENBQ3pDLFVBQWdDLEVBQUU7SUFFbEMsT0FBTywwQkFBMEIsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDbkQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTGFrZWJhc2UgcHJveHkgbGlzdGVuZXIsIHNlcnZpY2UsIGFuZCBVUkwgY29tbWFuZCBvcHRpb25zLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBvcHRpb25zIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5cbmNvbnN0IHRleHQgPSAoZGVzY3JpcHRpb246IHN0cmluZykgPT4gei5zdHJpbmcoKS50cmltKCkubWluKDEpLm9wdGlvbmFsKCkuZGVzY3JpYmUoZGVzY3JpcHRpb24pO1xuXG5leHBvcnQgY29uc3QgTGFrZWJhc2VQcm94eU9wdGlvbnNTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIC4uLm9wdGlvbnMuUG9zdGdyZXNDb25maWdPcHRpb25zU2NoZW1hLnNoYXBlLFxuICAgIGxpc3Rlbjogb3B0aW9uc1xuICAgICAgLmxpc3RlbkFkZHJlc3NTY2hlbWEoeyBwb3J0OiA1NDMyLCBsb29wYmFjazogdHJ1ZSB9KVxuICAgICAgLmRlc2NyaWJlKFwiTG9vcGJhY2sgbGlzdGVuZXIgYWRkcmVzcy5cIiksXG4gICAgc3RhcnR1cFRpbWVvdXRTZWNvbmRzOiB6LmNvZXJjZVxuICAgICAgLm51bWJlcjxudW1iZXI+KClcbiAgICAgIC5pbnQoKVxuICAgICAgLm5vbm5lZ2F0aXZlKClcbiAgICAgIC5kZWZhdWx0KDMwKVxuICAgICAgLmRlc2NyaWJlKFwiU3RhcnR1cCB0aW1lb3V0IGluIHNlY29uZHMuXCIpLFxuICAgIHByb2ZpbGU6IG9wdGlvbnMuRGF0YWJyaWNrc09wdGlvbnNTY2hlbWEuc2hhcGUucHJvZmlsZS5kZXNjcmliZShcIkV4YWN0IERhdGFicmlja3MgcHJvZmlsZS5cIiksXG4gIH0pXG4gIC5zdHJpY3QoKVxuICAuZGVzY3JpYmUoXCJMYWtlYmFzZSBwcm94eSBsaXN0ZW5lciBhbmQgc2VydmljZSBvcHRpb25zLlwiKTtcblxuZXhwb3J0IGNvbnN0IExha2ViYXNlUHJveHlVcmxPcHRpb25zU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICB0YXJnZXQ6IHRleHQoXCJMYWtlYmFzZSBwcm9qZWN0LCByZXNvdXJjZSBwYXRoLCBob3N0LCBvciBVUkwuXCIpLFxuICAgIGxha2ViYXNlRW5kcG9pbnQ6IG9wdGlvbnMuTGFrZWJhc2VPcHRpb25zU2NoZW1hLnNoYXBlLmxha2ViYXNlRW5kcG9pbnQsXG4gICAgbGlzdGVuOiBvcHRpb25zLmxpc3RlbkFkZHJlc3NTY2hlbWEoeyBwb3J0OiA1NDMyIH0pLmRlc2NyaWJlKFwiTG9jYWwgcHJveHkgYWRkcmVzcy5cIiksXG4gIH0pXG4gIC5zdHJpY3QoKVxuICAucmVmaW5lKFxuICAgIChjb25maWd1cmVkKSA9PiBjb25maWd1cmVkLnRhcmdldCAhPT0gdW5kZWZpbmVkIHx8IGNvbmZpZ3VyZWQubGFrZWJhc2VFbmRwb2ludCAhPT0gdW5kZWZpbmVkLFxuICAgIHtcbiAgICAgIG1lc3NhZ2U6IFwiVVJMIHJlcXVpcmVzIHRhcmdldCBvciBlbmRwb2ludC5cIixcbiAgICAgIHBhdGg6IFtcInRhcmdldFwiXSxcbiAgICB9LFxuICApXG4gIC5kZXNjcmliZShcIk9wdGlvbnMgZm9yIGZvcm1hdHRpbmcgYSBsb2NhbCBMYWtlYmFzZSBQb3N0Z3JlU1FMIFVSTC5cIik7XG5cbmV4cG9ydCB0eXBlIExha2ViYXNlUHJveHlPcHRpb25zID0gei5pbnB1dDx0eXBlb2YgTGFrZWJhc2VQcm94eU9wdGlvbnNTY2hlbWE+O1xuXG5leHBvcnQgdHlwZSBSZXNvbHZlZExha2ViYXNlUHJveHlPcHRpb25zID0gei5vdXRwdXQ8dHlwZW9mIExha2ViYXNlUHJveHlPcHRpb25zU2NoZW1hPjtcblxuZXhwb3J0IHR5cGUgTGFrZWJhc2VQcm94eVVybE9wdGlvbnMgPSB6Lm91dHB1dDx0eXBlb2YgTGFrZWJhc2VQcm94eVVybE9wdGlvbnNTY2hlbWE+O1xuXG4vKiogVmFsaWRhdGUgYW5kIGRlZmF1bHQgTGFrZWJhc2UgcHJveHkgbGlzdGVuZXIgb3B0aW9ucy4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlTGFrZWJhc2VQcm94eU9wdGlvbnMoXG4gIG9wdGlvbnM6IExha2ViYXNlUHJveHlPcHRpb25zID0ge30sXG4pOiBSZXNvbHZlZExha2ViYXNlUHJveHlPcHRpb25zIHtcbiAgcmV0dXJuIExha2ViYXNlUHJveHlPcHRpb25zU2NoZW1hLnBhcnNlKG9wdGlvbnMpO1xufVxuIl19
|
package/lib/src/tunnel/cli.js
CHANGED
|
@@ -22,8 +22,8 @@
|
|
|
22
22
|
* @module
|
|
23
23
|
*/
|
|
24
24
|
import { createServer } from "node:net";
|
|
25
|
-
import { AppKitChildProcess } from "@dbx-tools/appkit/child-process";
|
|
26
25
|
import { addArgs, parseArgs } from "@dbx-tools/cli-args";
|
|
26
|
+
import { exec } from "@dbx-tools/core";
|
|
27
27
|
import { log } from "@dbx-tools/shared-core";
|
|
28
28
|
import { frp, interceptor, portr } from "@dbx-tools/tunnel";
|
|
29
29
|
import { Command, CommanderError } from "commander";
|
|
@@ -48,10 +48,10 @@ function freePort() {
|
|
|
48
48
|
});
|
|
49
49
|
}
|
|
50
50
|
/**
|
|
51
|
-
* Tie the wrapper's lifetime to its children
|
|
52
|
-
*
|
|
53
|
-
*
|
|
54
|
-
*
|
|
51
|
+
* Tie the wrapper's lifetime to its children: a child that exits takes the
|
|
52
|
+
* wrapper down with its code. Core exec owns parent termination forwarding for
|
|
53
|
+
* every spawned child. Without this a crashed app leaves a portr tunnel serving
|
|
54
|
+
* a dead port, which looks like a hang rather than a failure.
|
|
55
55
|
*/
|
|
56
56
|
function supervise(children) {
|
|
57
57
|
let stopping = false;
|
|
@@ -64,10 +64,7 @@ function supervise(children) {
|
|
|
64
64
|
});
|
|
65
65
|
};
|
|
66
66
|
for (const child of children) {
|
|
67
|
-
void child.
|
|
68
|
-
}
|
|
69
|
-
for (const signal of ["SIGTERM", "SIGINT", "SIGHUP"]) {
|
|
70
|
-
process.on(signal, () => stop(0));
|
|
67
|
+
void child.on("exit", (code) => stop(code ?? 1));
|
|
71
68
|
}
|
|
72
69
|
}
|
|
73
70
|
async function run(raw, command) {
|
|
@@ -84,22 +81,18 @@ async function run(raw, command) {
|
|
|
84
81
|
let appPort;
|
|
85
82
|
if (executable) {
|
|
86
83
|
appPort = resolved.appPort ?? (await freePort());
|
|
87
|
-
const app =
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
DATABRICKS_APP_PORT: String(appPort),
|
|
94
|
-
PORT: String(appPort),
|
|
95
|
-
HOST: "127.0.0.1",
|
|
96
|
-
},
|
|
97
|
-
stdin: "inherit",
|
|
98
|
-
stdout: "inherit",
|
|
99
|
-
stderr: "inherit",
|
|
84
|
+
const app = exec.spawn(executable, args, {
|
|
85
|
+
env: {
|
|
86
|
+
...process.env,
|
|
87
|
+
DATABRICKS_APP_PORT: String(appPort),
|
|
88
|
+
PORT: String(appPort),
|
|
89
|
+
HOST: "127.0.0.1",
|
|
100
90
|
},
|
|
101
|
-
|
|
102
|
-
|
|
91
|
+
stdin: "inherit",
|
|
92
|
+
stdout: "inherit",
|
|
93
|
+
stderr: "inherit",
|
|
94
|
+
terminateTimeout: 10_000,
|
|
95
|
+
});
|
|
103
96
|
children.push(app);
|
|
104
97
|
}
|
|
105
98
|
else if (resolved.appPort) {
|
|
@@ -131,12 +124,12 @@ async function run(raw, command) {
|
|
|
131
124
|
if ((resolved.transport === "portr" || resolved.transport === "both") && resolved.portr) {
|
|
132
125
|
const portrEnv = await portr.installPortr();
|
|
133
126
|
await portr.writePortrConfig(resolved.portr, portrEnv);
|
|
134
|
-
children.push(
|
|
127
|
+
children.push(portr.startPortr(resolved.portr, portrEnv));
|
|
135
128
|
}
|
|
136
129
|
if ((resolved.transport === "frp" || resolved.transport === "both") && resolved.frp) {
|
|
137
130
|
const frpEnv = await frp.installFrp();
|
|
138
131
|
const configPath = await frp.writeFrpConfig(resolved.frp, frpEnv);
|
|
139
|
-
children.push(
|
|
132
|
+
children.push(frp.startFrp(resolved.frp, frpEnv, configPath));
|
|
140
133
|
}
|
|
141
134
|
const activeTunnelCount = children.length - (executable ? 1 : 0);
|
|
142
135
|
if (!activeTunnelCount) {
|
|
@@ -187,4 +180,4 @@ export function buildProgram(name = "dbx tunnel") {
|
|
|
187
180
|
});
|
|
188
181
|
return program;
|
|
189
182
|
}
|
|
190
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3R1bm5lbC9jbGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFFSCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDekQsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzdDLE9BQU8sRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzVELE9BQU8sRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRXBELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxtQkFBbUIsRUFBc0IsTUFBTSxjQUFjLENBQUM7QUFDN0YsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUV4QyxPQUFPLEVBQUUsY0FBYyxFQUFFLENBQUM7QUFFMUIsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUVwQzs7OztHQUlHO0FBQ0gsU0FBUyxRQUFRO0lBQ2YsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtRQUNyQyxNQUFNLEtBQUssR0FBRyxZQUFZLEVBQUUsQ0FBQztRQUM3QixLQUFLLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUMxQixLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsR0FBRyxFQUFFO1lBQ2hDLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNoQyxN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LFFBQVEsR0FBRyxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsYUFBYSxFQUFFLG1CQUFtQixDQUFDLENBQUMsQ0FBQztRQUNyRixPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakUsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPO1NBQ0osT0FBTyxDQUFDLFNBQVMsQ0FBQztTQUNsQixRQUFRLENBQUMsYUFBYSxFQUFFLHFCQUFxQixFQUFFLE9BQU8sQ0FBQztTQUN2RCxXQUFXLENBQUMsZ0RBQWdELENBQUM7U0FDN0QsTUFBTSxDQUFDLEtBQUssRUFBRSxTQUFpQixFQUFFLEVBQUU7UUFDbEMsTUFBTSxNQUFNLEdBQUcsV0FBVyxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNsRSxJQUFJLE1BQU0sS0FBSyxPQUFPLElBQUksTUFBTSxLQUFLLE1BQU07WUFBRSxNQUFNLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN4RSxJQUFJLE1BQU0sS0FBSyxLQUFLLElBQUksTUFBTSxLQUFLLE1BQU07WUFBRSxNQUFNLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUNwRSxDQUFDLENBQUMsQ0FBQztJQUVMLE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIGBkYnggdHVubmVsYCAtIGZyb250IGEgY29tbWFuZCB3aXRoIGEgcHVibGljIHBvcnRyIHR1bm5lbCBhbmQgcGFzc3dvcmRsZXNzIGdhdGUuXG4gKlxuICogVGhpcyBpcyB0aGUgV1JBUFBFUiBwYXRoLCBhbmQgaXQgZXhpc3RzIGZvciBvbmUgY2FzZTogYSBwcm9qZWN0IHRoYXQgZG9lcyBub3RcbiAqIHVzZSBgQGRieC10b29scy9hcHBraXRgJ3MgYGNyZWF0ZUFwcGAsIGFuZCB0aGVyZWZvcmUgY2Fubm90IHJlZ2lzdGVyXG4gKiBgdHVubmVsSW50ZXJjZXB0b3IoKWAgKyB0aGUgYGF1dGhHYXRlYCBwbHVnaW4gaW4tcHJvY2Vzcy4gQW4gQXBwS2l0IGFwcCBzaG91bGRcbiAqIHN0aWxsIHRha2UgdGhlIHBsdWdpbiBwYXRoIC0gb25lIHByb2Nlc3MsIG5vIHByb3h5IGhvcCwgbm8gZHVwbGljYXRlZCBoZWFkZXJcbiAqIGhhbmRsaW5nLlxuICpcbiAqIFRoZSB3cmFwcGVyIGNsYWltcyB0aGUgUFVCTElDIHBvcnQgKGBEQVRBQlJJQ0tTX0FQUF9QT1JUYCwgdGhlIHBvcnQgdGhlXG4gKiBwbGF0Zm9ybSBhbmQgcG9ydHIgcm91dGUgdG8pLCBtb3ZlcyB0aGUgd3JhcHBlZCBhcHAgdG8gYSBwcml2YXRlIG9uZSwgYW5kXG4gKiByZXZlcnNlLXByb3hpZXMgYmV0d2VlbiB0aGVtIHNvIHRoZSBnYXRlIHNpdHMgaW4gZnJvbnQgb2YgdHJhZmZpYyBpdCB3b3VsZFxuICogb3RoZXJ3aXNlIGhhdmUgbm8gd2F5IHRvIGludGVyY2VwdC4gRXZlcnl0aGluZyBlbHNlIGlzIGRlbGVnYXRlZDogdGhlIGdhdGVcbiAqIGNvbmZpZyBjb21lcyBmcm9tIGBwbHVnaW4ucmVzb2x2ZUF1dGhHYXRlQ29uZmlnYCwgdGhlIHBvcnRyIGxpZmVjeWNsZSBmcm9tXG4gKiBgcG9ydHIuKmAgLSBib3RoIHRoZSBzYW1lIGZ1bmN0aW9ucyB0aGUgaW4tcHJvY2VzcyBwYXRoIHVzZXMuXG4gKlxuICogU2hpcHMgbm8gYmluLiBgQGRieC10b29scy9jbGlgIG1vdW50cyBgYnVpbGRQcm9ncmFtKClgIGFzIGBkYnggdHVubmVsYCBsYXppbHksXG4gKiBzbyBgZGJ4IGRldmAgcGF5cyBmb3Igbm9uZSBvZiB0aGlzLCBhbmQgYC0taW5zZWN1cmVgIC8gYHN0YXR1c2AgLyBgaW5zdGFsbGBcbiAqIG5ldmVyIGxvYWQgQXBwS2l0IG9yIHRoZSBTTVRQIHN0YWNrIGVpdGhlciAodGhlIGdhdGUgYXBwIGlzIGJlaGluZCBhIGR5bmFtaWNcbiAqIGltcG9ydCkuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IGNyZWF0ZVNlcnZlciB9IGZyb20gXCJub2RlOm5ldFwiO1xuaW1wb3J0IHsgQXBwS2l0Q2hpbGRQcm9jZXNzIH0gZnJvbSBcIkBkYngtdG9vbHMvYXBwa2l0L2NoaWxkLXByb2Nlc3NcIjtcbmltcG9ydCB7IGFkZEFyZ3MsIHBhcnNlQXJncyB9IGZyb20gXCJAZGJ4LXRvb2xzL2NsaS1hcmdzXCI7XG5pbXBvcnQgeyBsb2cgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHsgZnJwLCBpbnRlcmNlcHRvciwgcG9ydHIgfSBmcm9tIFwiQGRieC10b29scy90dW5uZWxcIjtcbmltcG9ydCB7IENvbW1hbmQsIENvbW1hbmRlckVycm9yIH0gZnJvbSBcImNvbW1hbmRlclwiO1xuXG5pbXBvcnQgeyByZXNvbHZlVHVubmVsT3B0aW9ucywgVHVubmVsT3B0aW9uc1NjaGVtYSwgdHlwZSBUdW5uZWxPcHRpb25zIH0gZnJvbSBcIi4vb3B0aW9ucy50c1wiO1xuaW1wb3J0IHsgc3RhcnRQcm94eSB9IGZyb20gXCIuL3Byb3h5LnRzXCI7XG5cbmV4cG9ydCB7IENvbW1hbmRlckVycm9yIH07XG5cbmNvbnN0IGxvZ2dlciA9IGxvZy5sb2dnZXIoXCJ0dW5uZWxcIik7XG5cbi8qKlxuICogQSBmcmVlIGxvb3BiYWNrIHBvcnQsIGZyb20gdGhlIE9TIHJhdGhlciB0aGFuIGEgcmFuZG9tIGd1ZXNzOiBiaW5kaW5nIGAwYCBhbmRcbiAqIHJlYWRpbmcgYmFjayB3aGF0IHdhcyBhc3NpZ25lZCBpcyB0aGUgb25seSB3YXkgdG8ga25vdyB0aGUgcG9ydCBpcyBhY3R1YWxseVxuICogYXZhaWxhYmxlLCBzbyB0d28gdHVubmVscyBjYW4gcnVuIHNpZGUgYnkgc2lkZSB3aXRob3V0IGNvbGxpZGluZy5cbiAqL1xuZnVuY3Rpb24gZnJlZVBvcnQoKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBwcm9iZSA9IGNyZWF0ZVNlcnZlcigpO1xuICAgIHByb2JlLm9uKFwiZXJyb3JcIiwgcmVqZWN0KTtcbiAgICBwcm9iZS5saXN0ZW4oMCwgXCIxMjcuMC4wLjFcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgYWRkcmVzcyA9IHByb2JlLmFkZHJlc3MoKTtcbiAgICAgIGNvbnN0IHBvcnQgPSB0eXBlb2YgYWRkcmVzcyA9PT0gXCJvYmplY3RcIiAmJiBhZGRyZXNzID8gYWRkcmVzcy5wb3J0IDogMDtcbiAgICAgIHByb2JlLmNsb3NlKCgpID0+IChwb3J0ID4gMCA/IHJlc29sdmUocG9ydCkgOiByZWplY3QobmV3IEVycm9yKFwibm8gZnJlZSBwb3J0XCIpKSkpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuLyoqXG4gKiBUaWUgdGhlIHdyYXBwZXIncyBsaWZldGltZSB0byBpdHMgY2hpbGRyZW4ncywgaW4gYm90aCBkaXJlY3Rpb25zOiBhIGNoaWxkIHRoYXRcbiAqIGV4aXRzIHRha2VzIHRoZSB3cmFwcGVyIGRvd24gd2l0aCBpdHMgY29kZSwgYW5kIGEgc2lnbmFsIHRvIHRoZSB3cmFwcGVyIGlzXG4gKiBmb3J3YXJkZWQgYmVmb3JlIGl0IGxlYXZlcy4gV2l0aG91dCB0aGlzIGEgY3Jhc2hlZCBhcHAgbGVhdmVzIGEgcG9ydHIgdHVubmVsXG4gKiBzZXJ2aW5nIGEgZGVhZCBwb3J0LCB3aGljaCBsb29rcyBsaWtlIGEgaGFuZyByYXRoZXIgdGhhbiBhIGZhaWx1cmUuXG4gKi9cbmZ1bmN0aW9uIHN1cGVydmlzZShjaGlsZHJlbjogcmVhZG9ubHkgQXBwS2l0Q2hpbGRQcm9jZXNzW10pOiB2b2lkIHtcbiAgbGV0IHN0b3BwaW5nID0gZmFsc2U7XG4gIGNvbnN0IHN0b3AgPSAoY29kZTogbnVtYmVyKTogdm9pZCA9PiB7XG4gICAgaWYgKHN0b3BwaW5nKSByZXR1cm47XG4gICAgc3RvcHBpbmcgPSB0cnVlO1xuICAgIHZvaWQgUHJvbWlzZS5hbGxTZXR0bGVkKGNoaWxkcmVuLm1hcCgoY2hpbGQpID0+IGNoaWxkLnNodXRkb3duKCkpKS50aGVuKCgpID0+IHtcbiAgICAgIHByb2Nlc3MuZXhpdChjb2RlKTtcbiAgICB9KTtcbiAgfTtcbiAgZm9yIChjb25zdCBjaGlsZCBvZiBjaGlsZHJlbikge1xuICAgIHZvaWQgY2hpbGQucHJvY2Vzcz8ub24oXCJleGl0XCIsIChjb2RlKSA9PiBzdG9wKGNvZGUgPz8gMSkpO1xuICB9XG4gIGZvciAoY29uc3Qgc2lnbmFsIG9mIFtcIlNJR1RFUk1cIiwgXCJTSUdJTlRcIiwgXCJTSUdIVVBcIl0gYXMgY29uc3QpIHtcbiAgICBwcm9jZXNzLm9uKHNpZ25hbCwgKCkgPT4gc3RvcCgwKSk7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gcnVuKHJhdzogVHVubmVsT3B0aW9ucywgY29tbWFuZDogcmVhZG9ubHkgc3RyaW5nW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgW2V4ZWN1dGFibGUsIC4uLmFyZ3NdID0gY29tbWFuZDtcbiAgY29uc3QgcmVzb2x2ZWQgPSByZXNvbHZlVHVubmVsT3B0aW9ucyhyYXcpO1xuICBjb25zdCBjaGlsZHJlbjogQXBwS2l0Q2hpbGRQcm9jZXNzW10gPSBbXTtcblxuICAvLyBUd28gdXBzdHJlYW0gbW9kZXM6XG4gIC8vICAgLSBXUkFQOiBhIGNvbW1hbmQgYWZ0ZXIgYC0tYC4gVGhlIHdyYXBwZXIgc3Bhd25zIGl0IG9uIGEgcHJpdmF0ZSBsb29wYmFja1xuICAvLyAgICAgcG9ydCBhbmQgaXMgdGhlIG9ubHkgdGhpbmcgdGhhdCB0YWxrcyB0byBpdC5cbiAgLy8gICAtIEFUVEFDSDogbm8gY29tbWFuZCwgYnV0IGAtLWFwcC1wb3J0YCBuYW1lcyBhbiBhbHJlYWR5LXJ1bm5pbmcgdXBzdHJlYW1cbiAgLy8gICAgIChlLmcuIGEgbG9jYWwgcmV2ZXJzZSBwcm94eSkuIFRoZSBnYXRlIGZyb250cyBpdCB3aXRob3V0IHNwYXduaW5nIGFcbiAgLy8gICAgIGNoaWxkLiBUaGlzIGlzIHdoYXQgbGV0cyB0aGUgZ2F0ZSBzaXQgb24gYW4gaW50ZXJmYWNlIGluIGZyb250IG9mIGFcbiAgLy8gICAgIHNlcGFyYXRlbHktc3VwZXJ2aXNlZCBzdGFjay5cbiAgbGV0IGFwcFBvcnQ6IG51bWJlcjtcbiAgaWYgKGV4ZWN1dGFibGUpIHtcbiAgICBhcHBQb3J0ID0gcmVzb2x2ZWQuYXBwUG9ydCA/PyAoYXdhaXQgZnJlZVBvcnQoKSk7XG4gICAgY29uc3QgYXBwID0gbmV3IEFwcEtpdENoaWxkUHJvY2VzcyhcbiAgICAgIFtcbiAgICAgICAgZXhlY3V0YWJsZSxcbiAgICAgICAgYXJncyxcbiAgICAgICAge1xuICAgICAgICAgIGVudjoge1xuICAgICAgICAgICAgLi4ucHJvY2Vzcy5lbnYsXG4gICAgICAgICAgICBEQVRBQlJJQ0tTX0FQUF9QT1JUOiBTdHJpbmcoYXBwUG9ydCksXG4gICAgICAgICAgICBQT1JUOiBTdHJpbmcoYXBwUG9ydCksXG4gICAgICAgICAgICBIT1NUOiBcIjEyNy4wLjAuMVwiLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgc3RkaW46IFwiaW5oZXJpdFwiLFxuICAgICAgICAgIHN0ZG91dDogXCJpbmhlcml0XCIsXG4gICAgICAgICAgc3RkZXJyOiBcImluaGVyaXRcIixcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICB7IGdyYWNlZnVsVGltZW91dE1zOiAxMF8wMDAgfSxcbiAgICApO1xuICAgIGF3YWl0IGFwcC5zdGFydCgpO1xuICAgIGNoaWxkcmVuLnB1c2goYXBwKTtcbiAgfSBlbHNlIGlmIChyZXNvbHZlZC5hcHBQb3J0KSB7XG4gICAgYXBwUG9ydCA9IHJlc29sdmVkLmFwcFBvcnQ7XG4gICAgbG9nZ2VyLmluZm8oXCJhdHRhY2hpbmcgZ2F0ZSB0byBleGlzdGluZyB1cHN0cmVhbVwiLCB7IGFwcFBvcnQgfSk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IENvbW1hbmRlckVycm9yKFxuICAgICAgMSxcbiAgICAgIFwidHVubmVsLm5vLXVwc3RyZWFtXCIsXG4gICAgICBcIm5vIGNvbW1hbmQgZ2l2ZW4gKHBhc3MgaXQgYWZ0ZXIgYC0tYCkgYW5kIG5vIC0tYXBwLXBvcnQgdG8gYXR0YWNoIHRvXCIsXG4gICAgKTtcbiAgfVxuXG4gIC8vIER5bmFtaWMgaW1wb3J0OiB0aGUgZ2F0ZSBpcyB0aGUgb25seSB0aGluZyBoZXJlIHRoYXQgbmVlZHMgQXBwS2l0ICsgU01UUCwgc29cbiAgLy8gYW4gYC0taW5zZWN1cmVgIHJ1biBuZXZlciBsb2FkcyBlaXRoZXIuXG4gIGNvbnN0IGdhdGUgPSByZXNvbHZlZC5nYXRlLmluc2VjdXJlXG4gICAgPyB1bmRlZmluZWRcbiAgICA6IGF3YWl0IChcbiAgICAgICAgYXdhaXQgaW1wb3J0KFwiLi9hcHAudHNcIilcbiAgICAgICkuc3RhcnRHYXRlQXBwKHtcbiAgICAgICAgLi4ucmVzb2x2ZWQuZ2F0ZUNvbmZpZyxcbiAgICAgICAgcHVibGljRG9tYWluOiByZXNvbHZlZC5nYXRlLnB1YmxpY0RvbWFpbiA/PyBgbG9jYWxob3N0OiR7cmVzb2x2ZWQucHVibGljUG9ydH1gLFxuICAgICAgfSk7XG4gIGlmICghZ2F0ZSkgbG9nZ2VyLndhcm4oXCJydW5uaW5nIE9QRU4gLSBubyBnYXRlIGlzIGluIGZyb250IG9mIHRoaXMgdHVubmVsXCIpO1xuXG4gIGF3YWl0IHN0YXJ0UHJveHkoe1xuICAgIHB1YmxpY1BvcnQ6IHJlc29sdmVkLnB1YmxpY1BvcnQsXG4gICAgYXBwUG9ydCxcbiAgICBnYXRlLFxuICAgIGZvcndhcmRIZWFkZXJzOiByZXNvbHZlZC5nYXRlLmZvcndhcmRIZWFkZXJzLFxuICAgIGdhdGVQYXRoczogcmVzb2x2ZWQuZ2F0ZS5nYXRlUGF0aHMsXG4gICAgYnJhbmROYW1lOiByZXNvbHZlZC5nYXRlLmJyYW5kTmFtZSxcbiAgICBiaW5kSG9zdHM6IHJlc29sdmVkLmJpbmRIb3N0cyxcbiAgfSk7XG5cbiAgaWYgKChyZXNvbHZlZC50cmFuc3BvcnQgPT09IFwicG9ydHJcIiB8fCByZXNvbHZlZC50cmFuc3BvcnQgPT09IFwiYm90aFwiKSAmJiByZXNvbHZlZC5wb3J0cikge1xuICAgIGNvbnN0IHBvcnRyRW52ID0gYXdhaXQgcG9ydHIuaW5zdGFsbFBvcnRyKCk7XG4gICAgYXdhaXQgcG9ydHIud3JpdGVQb3J0ckNvbmZpZyhyZXNvbHZlZC5wb3J0ciwgcG9ydHJFbnYpO1xuICAgIGNoaWxkcmVuLnB1c2goYXdhaXQgcG9ydHIuc3RhcnRQb3J0cihyZXNvbHZlZC5wb3J0ciwgcG9ydHJFbnYpKTtcbiAgfVxuICBpZiAoKHJlc29sdmVkLnRyYW5zcG9ydCA9PT0gXCJmcnBcIiB8fCByZXNvbHZlZC50cmFuc3BvcnQgPT09IFwiYm90aFwiKSAmJiByZXNvbHZlZC5mcnApIHtcbiAgICBjb25zdCBmcnBFbnYgPSBhd2FpdCBmcnAuaW5zdGFsbEZycCgpO1xuICAgIGNvbnN0IGNvbmZpZ1BhdGggPSBhd2FpdCBmcnAud3JpdGVGcnBDb25maWcocmVzb2x2ZWQuZnJwLCBmcnBFbnYpO1xuICAgIGNoaWxkcmVuLnB1c2goYXdhaXQgZnJwLnN0YXJ0RnJwKHJlc29sdmVkLmZycCwgZnJwRW52LCBjb25maWdQYXRoKSk7XG4gIH1cbiAgY29uc3QgYWN0aXZlVHVubmVsQ291bnQgPSBjaGlsZHJlbi5sZW5ndGggLSAoZXhlY3V0YWJsZSA/IDEgOiAwKTtcbiAgaWYgKCFhY3RpdmVUdW5uZWxDb3VudCkge1xuICAgIGxvZ2dlci5pbmZvKFwibm8gc2VsZWN0ZWQgcHVibGljIHR1bm5lbCBpcyBjb25maWd1cmVkXCIsIHtcbiAgICAgIHRyYW5zcG9ydDogcmVzb2x2ZWQudHJhbnNwb3J0LFxuICAgICAgcHVibGljUG9ydDogcmVzb2x2ZWQucHVibGljUG9ydCxcbiAgICB9KTtcbiAgfVxuICBzdXBlcnZpc2UoY2hpbGRyZW4pO1xufVxuXG4vKiogVGhlIGBkYnggdHVubmVsYCBwcm9ncmFtLiBObyBzaWRlIGVmZmVjdHMgdW50aWwgcGFyc2VkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkUHJvZ3JhbShuYW1lID0gXCJkYnggdHVubmVsXCIpOiBDb21tYW5kIHtcbiAgY29uc3QgcHJvZ3JhbSA9IGFkZEFyZ3MoXG4gICAgbmV3IENvbW1hbmQoKVxuICAgICAgLm5hbWUobmFtZSlcbiAgICAgIC5kZXNjcmlwdGlvbihcIkZyb250IGEgY29tbWFuZCB3aXRoIGEgcHVibGljIHR1bm5lbCBhbmQgcGFzc3dvcmRsZXNzIGF1dGhcIiksXG4gICAgVHVubmVsT3B0aW9uc1NjaGVtYSxcbiAgKTtcblxuICAvLyBgcnVuYCBpcyB0aGUgREVGQVVMVCBhY3Rpb24gYXMgd2VsbCBhcyBhIG5hbWVkIHN1YmNvbW1hbmQsIHByZXNlcnZpbmcgdGhlIG9sZFxuICAvLyB3cmFwcGVyJ3MgZXJnb25vbWljcyAoYGRieCB0dW5uZWwgLS1hbGxvdyB4IC0tIGJ1biBzcmMvc2VydmVyLnRzYCkgd2hpbGVcbiAgLy8gbGVhdmluZyBzb21ld2hlcmUgZm9yIGBzdGF0dXNgIGFuZCBgaW5zdGFsbGAgdG8gbGl2ZS5cbiAgcHJvZ3JhbVxuICAgIC5hcmd1bWVudChcIltjb21tYW5kLi4uXVwiLCBcInRoZSBjb21tYW5kIHRvIHdyYXAsIGFmdGVyIGAtLWBcIilcbiAgICAuYWN0aW9uKGFzeW5jIChjb21tYW5kOiBzdHJpbmdbXSkgPT4ge1xuICAgICAgYXdhaXQgcnVuKHBhcnNlQXJncyhwcm9ncmFtLCBUdW5uZWxPcHRpb25zU2NoZW1hKSwgY29tbWFuZCk7XG4gICAgfSk7XG5cbiAgY29uc3QgcnVuQ29tbWFuZCA9IGFkZEFyZ3MoXG4gICAgcHJvZ3JhbS5jb21tYW5kKFwicnVuXCIpLmRlc2NyaXB0aW9uKFwiV3JhcCBhIGNvbW1hbmQgKHRoZSBkZWZhdWx0IGFjdGlvbilcIiksXG4gICAgVHVubmVsT3B0aW9uc1NjaGVtYSxcbiAgKTtcbiAgcnVuQ29tbWFuZFxuICAgIC5hcmd1bWVudChcIjxjb21tYW5kLi4uPlwiLCBcInRoZSBjb21tYW5kIHRvIHdyYXAsIGFmdGVyIGAtLWBcIilcbiAgICAuYWN0aW9uKGFzeW5jIChjb21tYW5kOiBzdHJpbmdbXSkgPT4ge1xuICAgICAgYXdhaXQgcnVuKHBhcnNlQXJncyhydW5Db21tYW5kLCBUdW5uZWxPcHRpb25zU2NoZW1hKSwgY29tbWFuZCk7XG4gICAgfSk7XG5cbiAgLy8gV29ydGggaXRzIG93biBjb21tYW5kOiB0aGUgbW9zdCBjb21tb24gZmFpbHVyZSBpcyBhIHR1bm5lbCB0aGF0IHNpbGVudGx5XG4gIC8vIGRvZXMgbm90aGluZyBiZWNhdXNlIG5vIHRva2VuIG9yIGRvbWFpbiByZXNvbHZlZCwgYW5kIHRoaXMgcHJpbnRzIGV4YWN0bHlcbiAgLy8gd2hhdCB3b3VsZCBoYXBwZW4gd2l0aG91dCBzdGFydGluZyBhbnl0aGluZy5cbiAgY29uc3Qgc3RhdHVzQ29tbWFuZCA9IGFkZEFyZ3MoXG4gICAgcHJvZ3JhbS5jb21tYW5kKFwic3RhdHVzXCIpLmRlc2NyaXB0aW9uKFwiUmVzb2x2ZSB0aGUgY29uZmlndXJhdGlvbiBhbmQgcHJpbnQgaXRcIiksXG4gICAgVHVubmVsT3B0aW9uc1NjaGVtYSxcbiAgKTtcbiAgc3RhdHVzQ29tbWFuZC5hY3Rpb24oKCkgPT4ge1xuICAgIGNvbnN0IHJlc29sdmVkID0gcmVzb2x2ZVR1bm5lbE9wdGlvbnMocGFyc2VBcmdzKHN0YXR1c0NvbW1hbmQsIFR1bm5lbE9wdGlvbnNTY2hlbWEpKTtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShgJHtKU09OLnN0cmluZ2lmeShyZXNvbHZlZCwgbnVsbCwgMil9XFxuYCk7XG4gIH0pO1xuXG4gIHByb2dyYW1cbiAgICAuY29tbWFuZChcImluc3RhbGxcIilcbiAgICAuYXJndW1lbnQoXCJbdHJhbnNwb3J0XVwiLCBcInBvcnRyLCBmcnAsIG9yIGJvdGhcIiwgXCJwb3J0clwiKVxuICAgIC5kZXNjcmlwdGlvbihcIkluc3RhbGwgcHVibGljIHR1bm5lbCBjbGllbnQgYmluYXJpZXMgYW5kIGV4aXRcIilcbiAgICAuYWN0aW9uKGFzeW5jICh0cmFuc3BvcnQ6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgcGFyc2VkID0gaW50ZXJjZXB0b3IuVHVubmVsVHJhbnNwb3J0U2NoZW1hLnBhcnNlKHRyYW5zcG9ydCk7XG4gICAgICBpZiAocGFyc2VkID09PSBcInBvcnRyXCIgfHwgcGFyc2VkID09PSBcImJvdGhcIikgYXdhaXQgcG9ydHIuaW5zdGFsbFBvcnRyKCk7XG4gICAgICBpZiAocGFyc2VkID09PSBcImZycFwiIHx8IHBhcnNlZCA9PT0gXCJib3RoXCIpIGF3YWl0IGZycC5pbnN0YWxsRnJwKCk7XG4gICAgfSk7XG5cbiAgcmV0dXJuIHByb2dyYW07XG59XG4iXX0=
|
|
183
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3R1bm5lbC9jbGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFFSCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDekQsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXZDLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUVwRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsbUJBQW1CLEVBQXNCLE1BQU0sY0FBYyxDQUFDO0FBQzdGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFeEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxDQUFDO0FBRTFCLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7QUFFcEM7Ozs7R0FJRztBQUNILFNBQVMsUUFBUTtJQUNmLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDckMsTUFBTSxLQUFLLEdBQUcsWUFBWSxFQUFFLENBQUM7UUFDN0IsS0FBSyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDMUIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLEdBQUcsRUFBRTtZQUNoQyxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDaEMsTUFB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LGFBQWEsRUFBRSxxQkFBcUIsRUFBRSxPQUFPLENBQUM7U0FDdkQsV0FBVyxDQUFDLGdEQUFnRCxDQUFDO1NBQzdELE1BQU0sQ0FBQyxLQUFLLEVBQUUsU0FBaUIsRUFBRSxFQUFFO1FBQ2xDLE1BQU0sTUFBTSxHQUFHLFdBQVcsQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDbEUsSUFBSSxNQUFNLEtBQUssT0FBTyxJQUFJLE1BQU0sS0FBSyxNQUFNO1lBQUUsTUFBTSxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDeEUsSUFBSSxNQUFNLEtBQUssS0FBSyxJQUFJLE1BQU0sS0FBSyxNQUFNO1lBQUUsTUFBTSxHQUFHLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDcEUsQ0FBQyxDQUFDLENBQUM7SUFFTCxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBgZGJ4IHR1bm5lbGAgLSBmcm9udCBhIGNvbW1hbmQgd2l0aCBhIHB1YmxpYyBwb3J0ciB0dW5uZWwgYW5kIHBhc3N3b3JkbGVzcyBnYXRlLlxuICpcbiAqIFRoaXMgaXMgdGhlIFdSQVBQRVIgcGF0aCwgYW5kIGl0IGV4aXN0cyBmb3Igb25lIGNhc2U6IGEgcHJvamVjdCB0aGF0IGRvZXMgbm90XG4gKiB1c2UgYEBkYngtdG9vbHMvYXBwa2l0YCdzIGBjcmVhdGVBcHBgLCBhbmQgdGhlcmVmb3JlIGNhbm5vdCByZWdpc3RlclxuICogYHR1bm5lbEludGVyY2VwdG9yKClgICsgdGhlIGBhdXRoR2F0ZWAgcGx1Z2luIGluLXByb2Nlc3MuIEFuIEFwcEtpdCBhcHAgc2hvdWxkXG4gKiBzdGlsbCB0YWtlIHRoZSBwbHVnaW4gcGF0aCAtIG9uZSBwcm9jZXNzLCBubyBwcm94eSBob3AsIG5vIGR1cGxpY2F0ZWQgaGVhZGVyXG4gKiBoYW5kbGluZy5cbiAqXG4gKiBUaGUgd3JhcHBlciBjbGFpbXMgdGhlIFBVQkxJQyBwb3J0IChgREFUQUJSSUNLU19BUFBfUE9SVGAsIHRoZSBwb3J0IHRoZVxuICogcGxhdGZvcm0gYW5kIHBvcnRyIHJvdXRlIHRvKSwgbW92ZXMgdGhlIHdyYXBwZWQgYXBwIHRvIGEgcHJpdmF0ZSBvbmUsIGFuZFxuICogcmV2ZXJzZS1wcm94aWVzIGJldHdlZW4gdGhlbSBzbyB0aGUgZ2F0ZSBzaXRzIGluIGZyb250IG9mIHRyYWZmaWMgaXQgd291bGRcbiAqIG90aGVyd2lzZSBoYXZlIG5vIHdheSB0byBpbnRlcmNlcHQuIEV2ZXJ5dGhpbmcgZWxzZSBpcyBkZWxlZ2F0ZWQ6IHRoZSBnYXRlXG4gKiBjb25maWcgY29tZXMgZnJvbSBgcGx1Z2luLnJlc29sdmVBdXRoR2F0ZUNvbmZpZ2AsIHRoZSBwb3J0ciBsaWZlY3ljbGUgZnJvbVxuICogYHBvcnRyLipgIC0gYm90aCB0aGUgc2FtZSBmdW5jdGlvbnMgdGhlIGluLXByb2Nlc3MgcGF0aCB1c2VzLlxuICpcbiAqIFNoaXBzIG5vIGJpbi4gYEBkYngtdG9vbHMvY2xpYCBtb3VudHMgYGJ1aWxkUHJvZ3JhbSgpYCBhcyBgZGJ4IHR1bm5lbGAgbGF6aWx5LFxuICogc28gYGRieCBkZXZgIHBheXMgZm9yIG5vbmUgb2YgdGhpcywgYW5kIGAtLWluc2VjdXJlYCAvIGBzdGF0dXNgIC8gYGluc3RhbGxgXG4gKiBuZXZlciBsb2FkIEFwcEtpdCBvciB0aGUgU01UUCBzdGFjayBlaXRoZXIgKHRoZSBnYXRlIGFwcCBpcyBiZWhpbmQgYSBkeW5hbWljXG4gKiBpbXBvcnQpLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBjcmVhdGVTZXJ2ZXIgfSBmcm9tIFwibm9kZTpuZXRcIjtcbmltcG9ydCB7IGFkZEFyZ3MsIHBhcnNlQXJncyB9IGZyb20gXCJAZGJ4LXRvb2xzL2NsaS1hcmdzXCI7XG5pbXBvcnQgeyBleGVjIH0gZnJvbSBcIkBkYngtdG9vbHMvY29yZVwiO1xuaW1wb3J0IHR5cGUgeyBDaGlsZFByb2Nlc3NSZXN1bHQgfSBmcm9tIFwiQGRieC10b29scy9jb3JlL2V4ZWNcIjtcbmltcG9ydCB7IGxvZyB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQgeyBmcnAsIGludGVyY2VwdG9yLCBwb3J0ciB9IGZyb20gXCJAZGJ4LXRvb2xzL3R1bm5lbFwiO1xuaW1wb3J0IHsgQ29tbWFuZCwgQ29tbWFuZGVyRXJyb3IgfSBmcm9tIFwiY29tbWFuZGVyXCI7XG5cbmltcG9ydCB7IHJlc29sdmVUdW5uZWxPcHRpb25zLCBUdW5uZWxPcHRpb25zU2NoZW1hLCB0eXBlIFR1bm5lbE9wdGlvbnMgfSBmcm9tIFwiLi9vcHRpb25zLnRzXCI7XG5pbXBvcnQgeyBzdGFydFByb3h5IH0gZnJvbSBcIi4vcHJveHkudHNcIjtcblxuZXhwb3J0IHsgQ29tbWFuZGVyRXJyb3IgfTtcblxuY29uc3QgbG9nZ2VyID0gbG9nLmxvZ2dlcihcInR1bm5lbFwiKTtcblxuLyoqXG4gKiBBIGZyZWUgbG9vcGJhY2sgcG9ydCwgZnJvbSB0aGUgT1MgcmF0aGVyIHRoYW4gYSByYW5kb20gZ3Vlc3M6IGJpbmRpbmcgYDBgIGFuZFxuICogcmVhZGluZyBiYWNrIHdoYXQgd2FzIGFzc2lnbmVkIGlzIHRoZSBvbmx5IHdheSB0byBrbm93IHRoZSBwb3J0IGlzIGFjdHVhbGx5XG4gKiBhdmFpbGFibGUsIHNvIHR3byB0dW5uZWxzIGNhbiBydW4gc2lkZSBieSBzaWRlIHdpdGhvdXQgY29sbGlkaW5nLlxuICovXG5mdW5jdGlvbiBmcmVlUG9ydCgpOiBQcm9taXNlPG51bWJlcj4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHByb2JlID0gY3JlYXRlU2VydmVyKCk7XG4gICAgcHJvYmUub24oXCJlcnJvclwiLCByZWplY3QpO1xuICAgIHByb2JlLmxpc3RlbigwLCBcIjEyNy4wLjAuMVwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBhZGRyZXNzID0gcHJvYmUuYWRkcmVzcygpO1xuICAgICAgY29uc3QgcG9ydCA9IHR5cGVvZiBhZGRyZXNzID09PSBcIm9iamVjdFwiICYmIGFkZHJlc3MgPyBhZGRyZXNzLnBvcnQgOiAwO1xuICAgICAgcHJvYmUuY2xvc2UoKCkgPT4gKHBvcnQgPiAwID8gcmVzb2x2ZShwb3J0KSA6IHJlamVjdChuZXcgRXJyb3IoXCJubyBmcmVlIHBvcnRcIikpKSk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIFRpZSB0aGUgd3JhcHBlcidzIGxpZmV0aW1lIHRvIGl0cyBjaGlsZHJlbjogYSBjaGlsZCB0aGF0IGV4aXRzIHRha2VzIHRoZVxuICogd3JhcHBlciBkb3duIHdpdGggaXRzIGNvZGUuIENvcmUgZXhlYyBvd25zIHBhcmVudCB0ZXJtaW5hdGlvbiBmb3J3YXJkaW5nIGZvclxuICogZXZlcnkgc3Bhd25lZCBjaGlsZC4gV2l0aG91dCB0aGlzIGEgY3Jhc2hlZCBhcHAgbGVhdmVzIGEgcG9ydHIgdHVubmVsIHNlcnZpbmdcbiAqIGEgZGVhZCBwb3J0LCB3aGljaCBsb29rcyBsaWtlIGEgaGFuZyByYXRoZXIgdGhhbiBhIGZhaWx1cmUuXG4gKi9cbmZ1bmN0aW9uIHN1cGVydmlzZShjaGlsZHJlbjogcmVhZG9ubHkgQ2hpbGRQcm9jZXNzUmVzdWx0W10pOiB2b2lkIHtcbiAgbGV0IHN0b3BwaW5nID0gZmFsc2U7XG4gIGNvbnN0IHN0b3AgPSAoY29kZTogbnVtYmVyKTogdm9pZCA9PiB7XG4gICAgaWYgKHN0b3BwaW5nKSByZXR1cm47XG4gICAgc3RvcHBpbmcgPSB0cnVlO1xuICAgIHZvaWQgUHJvbWlzZS5hbGxTZXR0bGVkKGNoaWxkcmVuLm1hcCgoY2hpbGQpID0+IGNoaWxkLnNodXRkb3duKCkpKS50aGVuKCgpID0+IHtcbiAgICAgIHByb2Nlc3MuZXhpdChjb2RlKTtcbiAgICB9KTtcbiAgfTtcbiAgZm9yIChjb25zdCBjaGlsZCBvZiBjaGlsZHJlbikge1xuICAgIHZvaWQgY2hpbGQub24oXCJleGl0XCIsIChjb2RlKSA9PiBzdG9wKGNvZGUgPz8gMSkpO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJ1bihyYXc6IFR1bm5lbE9wdGlvbnMsIGNvbW1hbmQ6IHJlYWRvbmx5IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IFtleGVjdXRhYmxlLCAuLi5hcmdzXSA9IGNvbW1hbmQ7XG4gIGNvbnN0IHJlc29sdmVkID0gcmVzb2x2ZVR1bm5lbE9wdGlvbnMocmF3KTtcbiAgY29uc3QgY2hpbGRyZW46IENoaWxkUHJvY2Vzc1Jlc3VsdFtdID0gW107XG5cbiAgLy8gVHdvIHVwc3RyZWFtIG1vZGVzOlxuICAvLyAgIC0gV1JBUDogYSBjb21tYW5kIGFmdGVyIGAtLWAuIFRoZSB3cmFwcGVyIHNwYXducyBpdCBvbiBhIHByaXZhdGUgbG9vcGJhY2tcbiAgLy8gICAgIHBvcnQgYW5kIGlzIHRoZSBvbmx5IHRoaW5nIHRoYXQgdGFsa3MgdG8gaXQuXG4gIC8vICAgLSBBVFRBQ0g6IG5vIGNvbW1hbmQsIGJ1dCBgLS1hcHAtcG9ydGAgbmFtZXMgYW4gYWxyZWFkeS1ydW5uaW5nIHVwc3RyZWFtXG4gIC8vICAgICAoZS5nLiBhIGxvY2FsIHJldmVyc2UgcHJveHkpLiBUaGUgZ2F0ZSBmcm9udHMgaXQgd2l0aG91dCBzcGF3bmluZyBhXG4gIC8vICAgICBjaGlsZC4gVGhpcyBpcyB3aGF0IGxldHMgdGhlIGdhdGUgc2l0IG9uIGFuIGludGVyZmFjZSBpbiBmcm9udCBvZiBhXG4gIC8vICAgICBzZXBhcmF0ZWx5LXN1cGVydmlzZWQgc3RhY2suXG4gIGxldCBhcHBQb3J0OiBudW1iZXI7XG4gIGlmIChleGVjdXRhYmxlKSB7XG4gICAgYXBwUG9ydCA9IHJlc29sdmVkLmFwcFBvcnQgPz8gKGF3YWl0IGZyZWVQb3J0KCkpO1xuICAgIGNvbnN0IGFwcCA9IGV4ZWMuc3Bhd24oZXhlY3V0YWJsZSwgYXJncywge1xuICAgICAgZW52OiB7XG4gICAgICAgIC4uLnByb2Nlc3MuZW52LFxuICAgICAgICBEQVRBQlJJQ0tTX0FQUF9QT1JUOiBTdHJpbmcoYXBwUG9ydCksXG4gICAgICAgIFBPUlQ6IFN0cmluZyhhcHBQb3J0KSxcbiAgICAgICAgSE9TVDogXCIxMjcuMC4wLjFcIixcbiAgICAgIH0sXG4gICAgICBzdGRpbjogXCJpbmhlcml0XCIsXG4gICAgICBzdGRvdXQ6IFwiaW5oZXJpdFwiLFxuICAgICAgc3RkZXJyOiBcImluaGVyaXRcIixcbiAgICAgIHRlcm1pbmF0ZVRpbWVvdXQ6IDEwXzAwMCxcbiAgICB9KTtcbiAgICBjaGlsZHJlbi5wdXNoKGFwcCk7XG4gIH0gZWxzZSBpZiAocmVzb2x2ZWQuYXBwUG9ydCkge1xuICAgIGFwcFBvcnQgPSByZXNvbHZlZC5hcHBQb3J0O1xuICAgIGxvZ2dlci5pbmZvKFwiYXR0YWNoaW5nIGdhdGUgdG8gZXhpc3RpbmcgdXBzdHJlYW1cIiwgeyBhcHBQb3J0IH0pO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBDb21tYW5kZXJFcnJvcihcbiAgICAgIDEsXG4gICAgICBcInR1bm5lbC5uby11cHN0cmVhbVwiLFxuICAgICAgXCJubyBjb21tYW5kIGdpdmVuIChwYXNzIGl0IGFmdGVyIGAtLWApIGFuZCBubyAtLWFwcC1wb3J0IHRvIGF0dGFjaCB0b1wiLFxuICAgICk7XG4gIH1cblxuICAvLyBEeW5hbWljIGltcG9ydDogdGhlIGdhdGUgaXMgdGhlIG9ubHkgdGhpbmcgaGVyZSB0aGF0IG5lZWRzIEFwcEtpdCArIFNNVFAsIHNvXG4gIC8vIGFuIGAtLWluc2VjdXJlYCBydW4gbmV2ZXIgbG9hZHMgZWl0aGVyLlxuICBjb25zdCBnYXRlID0gcmVzb2x2ZWQuZ2F0ZS5pbnNlY3VyZVxuICAgID8gdW5kZWZpbmVkXG4gICAgOiBhd2FpdCAoXG4gICAgICAgIGF3YWl0IGltcG9ydChcIi4vYXBwLnRzXCIpXG4gICAgICApLnN0YXJ0R2F0ZUFwcCh7XG4gICAgICAgIC4uLnJlc29sdmVkLmdhdGVDb25maWcsXG4gICAgICAgIHB1YmxpY0RvbWFpbjogcmVzb2x2ZWQuZ2F0ZS5wdWJsaWNEb21haW4gPz8gYGxvY2FsaG9zdDoke3Jlc29sdmVkLnB1YmxpY1BvcnR9YCxcbiAgICAgIH0pO1xuICBpZiAoIWdhdGUpIGxvZ2dlci53YXJuKFwicnVubmluZyBPUEVOIC0gbm8gZ2F0ZSBpcyBpbiBmcm9udCBvZiB0aGlzIHR1bm5lbFwiKTtcblxuICBhd2FpdCBzdGFydFByb3h5KHtcbiAgICBwdWJsaWNQb3J0OiByZXNvbHZlZC5wdWJsaWNQb3J0LFxuICAgIGFwcFBvcnQsXG4gICAgZ2F0ZSxcbiAgICBmb3J3YXJkSGVhZGVyczogcmVzb2x2ZWQuZ2F0ZS5mb3J3YXJkSGVhZGVycyxcbiAgICBnYXRlUGF0aHM6IHJlc29sdmVkLmdhdGUuZ2F0ZVBhdGhzLFxuICAgIGJyYW5kTmFtZTogcmVzb2x2ZWQuZ2F0ZS5icmFuZE5hbWUsXG4gICAgYmluZEhvc3RzOiByZXNvbHZlZC5iaW5kSG9zdHMsXG4gIH0pO1xuXG4gIGlmICgocmVzb2x2ZWQudHJhbnNwb3J0ID09PSBcInBvcnRyXCIgfHwgcmVzb2x2ZWQudHJhbnNwb3J0ID09PSBcImJvdGhcIikgJiYgcmVzb2x2ZWQucG9ydHIpIHtcbiAgICBjb25zdCBwb3J0ckVudiA9IGF3YWl0IHBvcnRyLmluc3RhbGxQb3J0cigpO1xuICAgIGF3YWl0IHBvcnRyLndyaXRlUG9ydHJDb25maWcocmVzb2x2ZWQucG9ydHIsIHBvcnRyRW52KTtcbiAgICBjaGlsZHJlbi5wdXNoKHBvcnRyLnN0YXJ0UG9ydHIocmVzb2x2ZWQucG9ydHIsIHBvcnRyRW52KSk7XG4gIH1cbiAgaWYgKChyZXNvbHZlZC50cmFuc3BvcnQgPT09IFwiZnJwXCIgfHwgcmVzb2x2ZWQudHJhbnNwb3J0ID09PSBcImJvdGhcIikgJiYgcmVzb2x2ZWQuZnJwKSB7XG4gICAgY29uc3QgZnJwRW52ID0gYXdhaXQgZnJwLmluc3RhbGxGcnAoKTtcbiAgICBjb25zdCBjb25maWdQYXRoID0gYXdhaXQgZnJwLndyaXRlRnJwQ29uZmlnKHJlc29sdmVkLmZycCwgZnJwRW52KTtcbiAgICBjaGlsZHJlbi5wdXNoKGZycC5zdGFydEZycChyZXNvbHZlZC5mcnAsIGZycEVudiwgY29uZmlnUGF0aCkpO1xuICB9XG4gIGNvbnN0IGFjdGl2ZVR1bm5lbENvdW50ID0gY2hpbGRyZW4ubGVuZ3RoIC0gKGV4ZWN1dGFibGUgPyAxIDogMCk7XG4gIGlmICghYWN0aXZlVHVubmVsQ291bnQpIHtcbiAgICBsb2dnZXIuaW5mbyhcIm5vIHNlbGVjdGVkIHB1YmxpYyB0dW5uZWwgaXMgY29uZmlndXJlZFwiLCB7XG4gICAgICB0cmFuc3BvcnQ6IHJlc29sdmVkLnRyYW5zcG9ydCxcbiAgICAgIHB1YmxpY1BvcnQ6IHJlc29sdmVkLnB1YmxpY1BvcnQsXG4gICAgfSk7XG4gIH1cbiAgc3VwZXJ2aXNlKGNoaWxkcmVuKTtcbn1cblxuLyoqIFRoZSBgZGJ4IHR1bm5lbGAgcHJvZ3JhbS4gTm8gc2lkZSBlZmZlY3RzIHVudGlsIHBhcnNlZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFByb2dyYW0obmFtZSA9IFwiZGJ4IHR1bm5lbFwiKTogQ29tbWFuZCB7XG4gIGNvbnN0IHByb2dyYW0gPSBhZGRBcmdzKFxuICAgIG5ldyBDb21tYW5kKClcbiAgICAgIC5uYW1lKG5hbWUpXG4gICAgICAuZGVzY3JpcHRpb24oXCJGcm9udCBhIGNvbW1hbmQgd2l0aCBhIHB1YmxpYyB0dW5uZWwgYW5kIHBhc3N3b3JkbGVzcyBhdXRoXCIpLFxuICAgIFR1bm5lbE9wdGlvbnNTY2hlbWEsXG4gICk7XG5cbiAgLy8gYHJ1bmAgaXMgdGhlIERFRkFVTFQgYWN0aW9uIGFzIHdlbGwgYXMgYSBuYW1lZCBzdWJjb21tYW5kLCBwcmVzZXJ2aW5nIHRoZSBvbGRcbiAgLy8gd3JhcHBlcidzIGVyZ29ub21pY3MgKGBkYnggdHVubmVsIC0tYWxsb3cgeCAtLSBidW4gc3JjL3NlcnZlci50c2ApIHdoaWxlXG4gIC8vIGxlYXZpbmcgc29tZXdoZXJlIGZvciBgc3RhdHVzYCBhbmQgYGluc3RhbGxgIHRvIGxpdmUuXG4gIHByb2dyYW1cbiAgICAuYXJndW1lbnQoXCJbY29tbWFuZC4uLl1cIiwgXCJ0aGUgY29tbWFuZCB0byB3cmFwLCBhZnRlciBgLS1gXCIpXG4gICAgLmFjdGlvbihhc3luYyAoY29tbWFuZDogc3RyaW5nW10pID0+IHtcbiAgICAgIGF3YWl0IHJ1bihwYXJzZUFyZ3MocHJvZ3JhbSwgVHVubmVsT3B0aW9uc1NjaGVtYSksIGNvbW1hbmQpO1xuICAgIH0pO1xuXG4gIGNvbnN0IHJ1bkNvbW1hbmQgPSBhZGRBcmdzKFxuICAgIHByb2dyYW0uY29tbWFuZChcInJ1blwiKS5kZXNjcmlwdGlvbihcIldyYXAgYSBjb21tYW5kICh0aGUgZGVmYXVsdCBhY3Rpb24pXCIpLFxuICAgIFR1bm5lbE9wdGlvbnNTY2hlbWEsXG4gICk7XG4gIHJ1bkNvbW1hbmRcbiAgICAuYXJndW1lbnQoXCI8Y29tbWFuZC4uLj5cIiwgXCJ0aGUgY29tbWFuZCB0byB3cmFwLCBhZnRlciBgLS1gXCIpXG4gICAgLmFjdGlvbihhc3luYyAoY29tbWFuZDogc3RyaW5nW10pID0+IHtcbiAgICAgIGF3YWl0IHJ1bihwYXJzZUFyZ3MocnVuQ29tbWFuZCwgVHVubmVsT3B0aW9uc1NjaGVtYSksIGNvbW1hbmQpO1xuICAgIH0pO1xuXG4gIC8vIFdvcnRoIGl0cyBvd24gY29tbWFuZDogdGhlIG1vc3QgY29tbW9uIGZhaWx1cmUgaXMgYSB0dW5uZWwgdGhhdCBzaWxlbnRseVxuICAvLyBkb2VzIG5vdGhpbmcgYmVjYXVzZSBubyB0b2tlbiBvciBkb21haW4gcmVzb2x2ZWQsIGFuZCB0aGlzIHByaW50cyBleGFjdGx5XG4gIC8vIHdoYXQgd291bGQgaGFwcGVuIHdpdGhvdXQgc3RhcnRpbmcgYW55dGhpbmcuXG4gIGNvbnN0IHN0YXR1c0NvbW1hbmQgPSBhZGRBcmdzKFxuICAgIHByb2dyYW0uY29tbWFuZChcInN0YXR1c1wiKS5kZXNjcmlwdGlvbihcIlJlc29sdmUgdGhlIGNvbmZpZ3VyYXRpb24gYW5kIHByaW50IGl0XCIpLFxuICAgIFR1bm5lbE9wdGlvbnNTY2hlbWEsXG4gICk7XG4gIHN0YXR1c0NvbW1hbmQuYWN0aW9uKCgpID0+IHtcbiAgICBjb25zdCByZXNvbHZlZCA9IHJlc29sdmVUdW5uZWxPcHRpb25zKHBhcnNlQXJncyhzdGF0dXNDb21tYW5kLCBUdW5uZWxPcHRpb25zU2NoZW1hKSk7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoYCR7SlNPTi5zdHJpbmdpZnkocmVzb2x2ZWQsIG51bGwsIDIpfVxcbmApO1xuICB9KTtcblxuICBwcm9ncmFtXG4gICAgLmNvbW1hbmQoXCJpbnN0YWxsXCIpXG4gICAgLmFyZ3VtZW50KFwiW3RyYW5zcG9ydF1cIiwgXCJwb3J0ciwgZnJwLCBvciBib3RoXCIsIFwicG9ydHJcIilcbiAgICAuZGVzY3JpcHRpb24oXCJJbnN0YWxsIHB1YmxpYyB0dW5uZWwgY2xpZW50IGJpbmFyaWVzIGFuZCBleGl0XCIpXG4gICAgLmFjdGlvbihhc3luYyAodHJhbnNwb3J0OiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IGludGVyY2VwdG9yLlR1bm5lbFRyYW5zcG9ydFNjaGVtYS5wYXJzZSh0cmFuc3BvcnQpO1xuICAgICAgaWYgKHBhcnNlZCA9PT0gXCJwb3J0clwiIHx8IHBhcnNlZCA9PT0gXCJib3RoXCIpIGF3YWl0IHBvcnRyLmluc3RhbGxQb3J0cigpO1xuICAgICAgaWYgKHBhcnNlZCA9PT0gXCJmcnBcIiB8fCBwYXJzZWQgPT09IFwiYm90aFwiKSBhd2FpdCBmcnAuaW5zdGFsbEZycCgpO1xuICAgIH0pO1xuXG4gIHJldHVybiBwcm9ncmFtO1xufVxuIl19
|
package/package.json
CHANGED
|
@@ -34,24 +34,24 @@
|
|
|
34
34
|
"dependencies": {
|
|
35
35
|
"@clack/prompts": "^1.7.0",
|
|
36
36
|
"@databricks/appkit": "0.81.0",
|
|
37
|
-
"@dbx-tools/appkit": "^0.9.
|
|
38
|
-
"@dbx-tools/appkit-graphiti": "^0.9.
|
|
39
|
-
"@dbx-tools/appkit-model-gateway": "^0.9.
|
|
40
|
-
"@dbx-tools/auth": "^0.9.
|
|
41
|
-
"@dbx-tools/auth-gate": "^0.9.
|
|
42
|
-
"@dbx-tools/cli-args": "^0.9.
|
|
43
|
-
"@dbx-tools/cli-service": "^0.9.
|
|
44
|
-
"@dbx-tools/core": "^0.9.
|
|
45
|
-
"@dbx-tools/databricks": "^0.9.
|
|
46
|
-
"@dbx-tools/email": "^0.9.
|
|
47
|
-
"@dbx-tools/lakebase": "^0.9.
|
|
48
|
-
"@dbx-tools/postgres": "^0.9.
|
|
49
|
-
"@dbx-tools/shared-auth": "^0.9.
|
|
50
|
-
"@dbx-tools/shared-core": "^0.9.
|
|
51
|
-
"@dbx-tools/shared-email": "^0.9.
|
|
52
|
-
"@dbx-tools/shared-genie-code": "^0.9.
|
|
53
|
-
"@dbx-tools/shared-model-gateway": "^0.9.
|
|
54
|
-
"@dbx-tools/tunnel": "^0.9.
|
|
37
|
+
"@dbx-tools/appkit": "^0.9.123",
|
|
38
|
+
"@dbx-tools/appkit-graphiti": "^0.9.123",
|
|
39
|
+
"@dbx-tools/appkit-model-gateway": "^0.9.123",
|
|
40
|
+
"@dbx-tools/auth": "^0.9.123",
|
|
41
|
+
"@dbx-tools/auth-gate": "^0.9.123",
|
|
42
|
+
"@dbx-tools/cli-args": "^0.9.123",
|
|
43
|
+
"@dbx-tools/cli-service": "^0.9.123",
|
|
44
|
+
"@dbx-tools/core": "^0.9.123",
|
|
45
|
+
"@dbx-tools/databricks": "^0.9.123",
|
|
46
|
+
"@dbx-tools/email": "^0.9.123",
|
|
47
|
+
"@dbx-tools/lakebase": "^0.9.123",
|
|
48
|
+
"@dbx-tools/postgres": "^0.9.123",
|
|
49
|
+
"@dbx-tools/shared-auth": "^0.9.123",
|
|
50
|
+
"@dbx-tools/shared-core": "^0.9.123",
|
|
51
|
+
"@dbx-tools/shared-email": "^0.9.123",
|
|
52
|
+
"@dbx-tools/shared-genie-code": "^0.9.123",
|
|
53
|
+
"@dbx-tools/shared-model-gateway": "^0.9.123",
|
|
54
|
+
"@dbx-tools/tunnel": "^0.9.123",
|
|
55
55
|
"commander": "^15.0.0",
|
|
56
56
|
"concurrently": "^10.0.3",
|
|
57
57
|
"get-port": "^7.1.0",
|
|
@@ -158,7 +158,7 @@
|
|
|
158
158
|
"./package.json": "./package.json"
|
|
159
159
|
}
|
|
160
160
|
},
|
|
161
|
-
"version": "0.9.
|
|
161
|
+
"version": "0.9.123",
|
|
162
162
|
"types": "./lib/index.d.ts",
|
|
163
163
|
"dbxToolsConfig": {
|
|
164
164
|
"tags": [
|
package/src/genie-code/runner.ts
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* @module
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
import {
|
|
7
|
+
import { exec } from "@dbx-tools/core";
|
|
8
8
|
import { asyncUtils, log } from "@dbx-tools/shared-core";
|
|
9
9
|
import { GenieCodeRunnerOptionsSchema } from "@dbx-tools/shared-genie-code/options";
|
|
10
10
|
|
|
@@ -65,27 +65,19 @@ export async function runGenieCodeChild(
|
|
|
65
65
|
executable: options.executable,
|
|
66
66
|
home: options.home,
|
|
67
67
|
});
|
|
68
|
-
const child =
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
cwd: process.cwd(),
|
|
74
|
-
env: {
|
|
75
|
-
...environment,
|
|
76
|
-
GENIE_HOME: options.home,
|
|
77
|
-
},
|
|
78
|
-
stdin: "inherit",
|
|
79
|
-
stdout: "inherit",
|
|
80
|
-
stderr: "inherit",
|
|
81
|
-
},
|
|
82
|
-
],
|
|
83
|
-
{
|
|
84
|
-
gracefulTimeoutMs: 5_000,
|
|
85
|
-
forceTimeoutMs: 1_000,
|
|
68
|
+
const child = exec.spawn(options.executable, [...options.arguments], {
|
|
69
|
+
cwd: process.cwd(),
|
|
70
|
+
env: {
|
|
71
|
+
...environment,
|
|
72
|
+
GENIE_HOME: options.home,
|
|
86
73
|
},
|
|
87
|
-
|
|
88
|
-
|
|
74
|
+
stdin: "inherit",
|
|
75
|
+
stdout: "inherit",
|
|
76
|
+
stderr: "inherit",
|
|
77
|
+
terminateTimeout: 5_000,
|
|
78
|
+
killTimeout: 1_000,
|
|
79
|
+
});
|
|
80
|
+
const result = await child;
|
|
89
81
|
if (result.exitCode !== 0) process.exitCode = result.exitCode;
|
|
90
82
|
}
|
|
91
83
|
|
|
@@ -11,7 +11,7 @@ const text = (description: string) => z.string().trim().min(1).optional().descri
|
|
|
11
11
|
|
|
12
12
|
export const LakebaseProxyOptionsSchema = z
|
|
13
13
|
.object({
|
|
14
|
-
...options.
|
|
14
|
+
...options.PostgresConfigOptionsSchema.shape,
|
|
15
15
|
listen: options
|
|
16
16
|
.listenAddressSchema({ port: 5432, loopback: true })
|
|
17
17
|
.describe("Loopback listener address."),
|
package/src/tunnel/cli.ts
CHANGED
|
@@ -23,8 +23,9 @@
|
|
|
23
23
|
*/
|
|
24
24
|
|
|
25
25
|
import { createServer } from "node:net";
|
|
26
|
-
import { AppKitChildProcess } from "@dbx-tools/appkit/child-process";
|
|
27
26
|
import { addArgs, parseArgs } from "@dbx-tools/cli-args";
|
|
27
|
+
import { exec } from "@dbx-tools/core";
|
|
28
|
+
import type { ChildProcessResult } from "@dbx-tools/core/exec";
|
|
28
29
|
import { log } from "@dbx-tools/shared-core";
|
|
29
30
|
import { frp, interceptor, portr } from "@dbx-tools/tunnel";
|
|
30
31
|
import { Command, CommanderError } from "commander";
|
|
@@ -54,12 +55,12 @@ function freePort(): Promise<number> {
|
|
|
54
55
|
}
|
|
55
56
|
|
|
56
57
|
/**
|
|
57
|
-
* Tie the wrapper's lifetime to its children
|
|
58
|
-
*
|
|
59
|
-
*
|
|
60
|
-
*
|
|
58
|
+
* Tie the wrapper's lifetime to its children: a child that exits takes the
|
|
59
|
+
* wrapper down with its code. Core exec owns parent termination forwarding for
|
|
60
|
+
* every spawned child. Without this a crashed app leaves a portr tunnel serving
|
|
61
|
+
* a dead port, which looks like a hang rather than a failure.
|
|
61
62
|
*/
|
|
62
|
-
function supervise(children: readonly
|
|
63
|
+
function supervise(children: readonly ChildProcessResult[]): void {
|
|
63
64
|
let stopping = false;
|
|
64
65
|
const stop = (code: number): void => {
|
|
65
66
|
if (stopping) return;
|
|
@@ -69,17 +70,14 @@ function supervise(children: readonly AppKitChildProcess[]): void {
|
|
|
69
70
|
});
|
|
70
71
|
};
|
|
71
72
|
for (const child of children) {
|
|
72
|
-
void child.
|
|
73
|
-
}
|
|
74
|
-
for (const signal of ["SIGTERM", "SIGINT", "SIGHUP"] as const) {
|
|
75
|
-
process.on(signal, () => stop(0));
|
|
73
|
+
void child.on("exit", (code) => stop(code ?? 1));
|
|
76
74
|
}
|
|
77
75
|
}
|
|
78
76
|
|
|
79
77
|
async function run(raw: TunnelOptions, command: readonly string[]): Promise<void> {
|
|
80
78
|
const [executable, ...args] = command;
|
|
81
79
|
const resolved = resolveTunnelOptions(raw);
|
|
82
|
-
const children:
|
|
80
|
+
const children: ChildProcessResult[] = [];
|
|
83
81
|
|
|
84
82
|
// Two upstream modes:
|
|
85
83
|
// - WRAP: a command after `--`. The wrapper spawns it on a private loopback
|
|
@@ -91,25 +89,18 @@ async function run(raw: TunnelOptions, command: readonly string[]): Promise<void
|
|
|
91
89
|
let appPort: number;
|
|
92
90
|
if (executable) {
|
|
93
91
|
appPort = resolved.appPort ?? (await freePort());
|
|
94
|
-
const app =
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
stdout: "inherit",
|
|
107
|
-
stderr: "inherit",
|
|
108
|
-
},
|
|
109
|
-
],
|
|
110
|
-
{ gracefulTimeoutMs: 10_000 },
|
|
111
|
-
);
|
|
112
|
-
await app.start();
|
|
92
|
+
const app = exec.spawn(executable, args, {
|
|
93
|
+
env: {
|
|
94
|
+
...process.env,
|
|
95
|
+
DATABRICKS_APP_PORT: String(appPort),
|
|
96
|
+
PORT: String(appPort),
|
|
97
|
+
HOST: "127.0.0.1",
|
|
98
|
+
},
|
|
99
|
+
stdin: "inherit",
|
|
100
|
+
stdout: "inherit",
|
|
101
|
+
stderr: "inherit",
|
|
102
|
+
terminateTimeout: 10_000,
|
|
103
|
+
});
|
|
113
104
|
children.push(app);
|
|
114
105
|
} else if (resolved.appPort) {
|
|
115
106
|
appPort = resolved.appPort;
|
|
@@ -147,12 +138,12 @@ async function run(raw: TunnelOptions, command: readonly string[]): Promise<void
|
|
|
147
138
|
if ((resolved.transport === "portr" || resolved.transport === "both") && resolved.portr) {
|
|
148
139
|
const portrEnv = await portr.installPortr();
|
|
149
140
|
await portr.writePortrConfig(resolved.portr, portrEnv);
|
|
150
|
-
children.push(
|
|
141
|
+
children.push(portr.startPortr(resolved.portr, portrEnv));
|
|
151
142
|
}
|
|
152
143
|
if ((resolved.transport === "frp" || resolved.transport === "both") && resolved.frp) {
|
|
153
144
|
const frpEnv = await frp.installFrp();
|
|
154
145
|
const configPath = await frp.writeFrpConfig(resolved.frp, frpEnv);
|
|
155
|
-
children.push(
|
|
146
|
+
children.push(frp.startFrp(resolved.frp, frpEnv, configPath));
|
|
156
147
|
}
|
|
157
148
|
const activeTunnelCount = children.length - (executable ? 1 : 0);
|
|
158
149
|
if (!activeTunnelCount) {
|