@dbx-tools/cli 0.9.54 → 0.9.60
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 +548 -58
- package/bin/dbx-graphiti.ts +5 -0
- package/bin/dbx-lakebase-proxy.ts +4 -0
- package/bin/dbx-model-gateway.ts +5 -0
- package/index.ts +35 -1
- package/lib/bin/dbx-graphiti.d.ts +2 -0
- package/lib/bin/dbx-graphiti.js +4 -0
- package/lib/bin/dbx-lakebase-proxy.d.ts +2 -0
- package/lib/bin/dbx-lakebase-proxy.js +4 -0
- package/lib/bin/dbx-model-gateway.d.ts +2 -0
- package/lib/bin/dbx-model-gateway.js +4 -0
- package/lib/index.d.ts +35 -1
- package/lib/index.js +26 -2
- package/lib/src/appkit/cli.d.ts +24 -0
- package/lib/src/appkit/cli.js +54 -0
- package/lib/src/appkit/env-export.d.ts +40 -0
- package/lib/src/appkit/env-export.js +99 -0
- package/lib/src/auth/cli.d.ts +20 -0
- package/lib/src/auth/cli.js +118 -0
- package/lib/src/auth/options.d.ts +41 -0
- package/lib/src/auth/options.js +64 -0
- package/lib/src/cli.d.ts +2 -0
- package/lib/src/cli.js +13 -7
- package/lib/src/graphiti/cli.d.ts +18 -0
- package/lib/src/graphiti/cli.js +43 -0
- package/lib/src/graphiti/options.d.ts +10 -0
- package/lib/src/graphiti/options.js +10 -0
- package/lib/src/lakebase-proxy/cancellation.d.ts +22 -0
- package/lib/src/lakebase-proxy/cancellation.js +100 -0
- package/lib/src/lakebase-proxy/cli.d.ts +13 -0
- package/lib/src/lakebase-proxy/cli.js +54 -0
- package/lib/src/lakebase-proxy/options.d.ts +23 -0
- package/lib/src/lakebase-proxy/options.js +41 -0
- package/lib/src/lakebase-proxy/protocol.d.ts +37 -0
- package/lib/src/lakebase-proxy/protocol.js +124 -0
- package/lib/src/lakebase-proxy/proxy.d.ts +22 -0
- package/lib/src/lakebase-proxy/proxy.js +200 -0
- package/lib/src/model-gateway/cli.d.ts +19 -0
- package/lib/src/model-gateway/cli.js +63 -0
- package/lib/src/model-gateway/server.d.ts +13 -0
- package/lib/src/model-gateway/server.js +53 -0
- package/lib/src/tunnel/app.d.ts +20 -0
- package/lib/src/tunnel/app.js +52 -0
- package/lib/src/tunnel/cli.d.ts +27 -0
- package/lib/src/tunnel/cli.js +190 -0
- package/lib/src/tunnel/options.d.ts +72 -0
- package/lib/src/tunnel/options.js +138 -0
- package/lib/src/tunnel/proxy.d.ts +51 -0
- package/lib/src/tunnel/proxy.js +143 -0
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/package.json +124 -9
- package/src/appkit/cli.ts +72 -0
- package/src/appkit/env-export.ts +124 -0
- package/src/auth/cli.ts +165 -0
- package/src/auth/options.ts +79 -0
- package/src/cli.ts +22 -6
- package/src/graphiti/cli.ts +75 -0
- package/src/graphiti/options.ts +20 -0
- package/src/lakebase-proxy/cancellation.ts +116 -0
- package/src/lakebase-proxy/cli.ts +80 -0
- package/src/lakebase-proxy/options.ts +56 -0
- package/src/lakebase-proxy/protocol.ts +170 -0
- package/src/lakebase-proxy/proxy.ts +256 -0
- package/src/model-gateway/cli.ts +89 -0
- package/src/model-gateway/server.ts +62 -0
- package/src/tunnel/app.ts +58 -0
- package/src/tunnel/cli.ts +218 -0
- package/src/tunnel/options.ts +169 -0
- package/src/tunnel/proxy.ts +194 -0
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Databricks auth command-line option schemas and runtime projection.
|
|
3
|
+
*
|
|
4
|
+
* @module
|
|
5
|
+
*/
|
|
6
|
+
import { type DatabricksAuthOptions } from "@dbx-tools/auth/config";
|
|
7
|
+
import { z } from "zod";
|
|
8
|
+
export declare const AuthCliOptionsSchema: z.ZodObject<{
|
|
9
|
+
profile: z.ZodOptional<z.ZodString>;
|
|
10
|
+
host: z.ZodOptional<z.ZodString>;
|
|
11
|
+
accountId: z.ZodOptional<z.ZodString>;
|
|
12
|
+
workspaceId: z.ZodOptional<z.ZodString>;
|
|
13
|
+
configFile: z.ZodOptional<z.ZodString>;
|
|
14
|
+
clientId: z.ZodOptional<z.ZodString>;
|
|
15
|
+
groupId: z.ZodOptional<z.ZodString>;
|
|
16
|
+
authType: z.ZodOptional<z.ZodEnum<{
|
|
17
|
+
"databricks-cli": "databricks-cli";
|
|
18
|
+
"oauth-m2m": "oauth-m2m";
|
|
19
|
+
pat: "pat";
|
|
20
|
+
app_obo: "app_obo";
|
|
21
|
+
app_sp: "app_sp";
|
|
22
|
+
}>>;
|
|
23
|
+
scopes: z.ZodDefault<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodArray<z.ZodString>>>;
|
|
24
|
+
target: z.ZodOptional<z.ZodEnum<{
|
|
25
|
+
workspace: "workspace";
|
|
26
|
+
account: "account";
|
|
27
|
+
unified: "unified";
|
|
28
|
+
}>>;
|
|
29
|
+
lockTimeoutMs: z.ZodDefault<z.ZodCoercedNumber<number>>;
|
|
30
|
+
loginTimeoutMs: z.ZodDefault<z.ZodCoercedNumber<number>>;
|
|
31
|
+
refreshBufferMs: z.ZodDefault<z.ZodCoercedNumber<number>>;
|
|
32
|
+
preferUserToMachine: z.ZodDefault<z.ZodBoolean>;
|
|
33
|
+
}, z.core.$strict>;
|
|
34
|
+
export declare const TokenCommandOptionsSchema: z.ZodObject<{
|
|
35
|
+
forceRefresh: z.ZodDefault<z.ZodBoolean>;
|
|
36
|
+
login: z.ZodDefault<z.ZodBoolean>;
|
|
37
|
+
}, z.core.$strict>;
|
|
38
|
+
export type AuthCliOptions = z.output<typeof AuthCliOptionsSchema>;
|
|
39
|
+
export type TokenCommandOptions = z.output<typeof TokenCommandOptionsSchema>;
|
|
40
|
+
/** Convert flat CLI fields into the Node auth package's nested options. */
|
|
41
|
+
export declare function databricksAuthOptions(options: AuthCliOptions): DatabricksAuthOptions;
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Databricks auth command-line option schemas and runtime projection.
|
|
3
|
+
*
|
|
4
|
+
* @module
|
|
5
|
+
*/
|
|
6
|
+
import { AuthOptionsSchema, DatabricksAuthOptionsSchema, } from "@dbx-tools/auth/config";
|
|
7
|
+
import { stringUtils } from "@dbx-tools/shared-core";
|
|
8
|
+
import { z } from "zod";
|
|
9
|
+
export const AuthCliOptionsSchema = z
|
|
10
|
+
.object({
|
|
11
|
+
profile: DatabricksAuthOptionsSchema.shape.profile,
|
|
12
|
+
host: DatabricksAuthOptionsSchema.shape.host,
|
|
13
|
+
accountId: DatabricksAuthOptionsSchema.shape.accountId,
|
|
14
|
+
workspaceId: DatabricksAuthOptionsSchema.shape.workspaceId,
|
|
15
|
+
configFile: DatabricksAuthOptionsSchema.shape.configFile,
|
|
16
|
+
clientId: DatabricksAuthOptionsSchema.shape.clientId,
|
|
17
|
+
groupId: DatabricksAuthOptionsSchema.shape.groupId,
|
|
18
|
+
authType: DatabricksAuthOptionsSchema.shape.authType,
|
|
19
|
+
scopes: z
|
|
20
|
+
.preprocess((value) => Array.isArray(value)
|
|
21
|
+
? value.flatMap((entry) => stringUtils.parseList(String(entry)))
|
|
22
|
+
: value, z.array(z.string().trim().min(1)))
|
|
23
|
+
.default([])
|
|
24
|
+
.describe("OAuth scopes."),
|
|
25
|
+
target: DatabricksAuthOptionsSchema.shape.target,
|
|
26
|
+
lockTimeoutMs: AuthOptionsSchema.shape.lockTimeoutMs,
|
|
27
|
+
loginTimeoutMs: AuthOptionsSchema.shape.loginTimeoutMs,
|
|
28
|
+
refreshBufferMs: AuthOptionsSchema.shape.refreshBufferMs,
|
|
29
|
+
preferUserToMachine: z
|
|
30
|
+
.boolean()
|
|
31
|
+
.default(true)
|
|
32
|
+
.describe("Prefer a matching user profile over selected machine credentials."),
|
|
33
|
+
})
|
|
34
|
+
.strict()
|
|
35
|
+
.describe("Options shared by every Databricks auth command.");
|
|
36
|
+
export const TokenCommandOptionsSchema = z
|
|
37
|
+
.object({
|
|
38
|
+
forceRefresh: z.boolean().default(false).describe("Refresh the token before returning it."),
|
|
39
|
+
login: z.boolean().default(true).describe("Log in when credentials are missing or invalid."),
|
|
40
|
+
})
|
|
41
|
+
.strict()
|
|
42
|
+
.describe("Options for returning a Databricks access token.");
|
|
43
|
+
/** Convert flat CLI fields into the Node auth package's nested options. */
|
|
44
|
+
export function databricksAuthOptions(options) {
|
|
45
|
+
return {
|
|
46
|
+
profile: options.profile,
|
|
47
|
+
host: options.host,
|
|
48
|
+
accountId: options.accountId,
|
|
49
|
+
workspaceId: options.workspaceId,
|
|
50
|
+
configFile: options.configFile,
|
|
51
|
+
clientId: options.clientId,
|
|
52
|
+
groupId: options.groupId,
|
|
53
|
+
authType: options.authType,
|
|
54
|
+
scopes: options.scopes.length > 0 ? options.scopes : undefined,
|
|
55
|
+
target: options.target,
|
|
56
|
+
auth: {
|
|
57
|
+
lockTimeoutMs: options.lockTimeoutMs,
|
|
58
|
+
loginTimeoutMs: options.loginTimeoutMs,
|
|
59
|
+
refreshBufferMs: options.refreshBufferMs,
|
|
60
|
+
},
|
|
61
|
+
preferUserToMachine: options.preferUserToMachine,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hdXRoL29wdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUVILE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsMkJBQTJCLEdBRTVCLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFFeEIsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQztLQUNsQyxNQUFNLENBQUM7SUFDTixPQUFPLEVBQUUsMkJBQTJCLENBQUMsS0FBSyxDQUFDLE9BQU87SUFDbEQsSUFBSSxFQUFFLDJCQUEyQixDQUFDLEtBQUssQ0FBQyxJQUFJO0lBQzVDLFNBQVMsRUFBRSwyQkFBMkIsQ0FBQyxLQUFLLENBQUMsU0FBUztJQUN0RCxXQUFXLEVBQUUsMkJBQTJCLENBQUMsS0FBSyxDQUFDLFdBQVc7SUFDMUQsVUFBVSxFQUFFLDJCQUEyQixDQUFDLEtBQUssQ0FBQyxVQUFVO0lBQ3hELFFBQVEsRUFBRSwyQkFBMkIsQ0FBQyxLQUFLLENBQUMsUUFBUTtJQUNwRCxPQUFPLEVBQUUsMkJBQTJCLENBQUMsS0FBSyxDQUFDLE9BQU87SUFDbEQsUUFBUSxFQUFFLDJCQUEyQixDQUFDLEtBQUssQ0FBQyxRQUFRO0lBQ3BELE1BQU0sRUFBRSxDQUFDO1NBQ04sVUFBVSxDQUNULENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FDUixLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztRQUNsQixDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNoRSxDQUFDLENBQUMsS0FBSyxFQUNYLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUNsQztTQUNBLE9BQU8sQ0FBQyxFQUFFLENBQUM7U0FDWCxRQUFRLENBQUMsZUFBZSxDQUFDO0lBQzVCLE1BQU0sRUFBRSwyQkFBMkIsQ0FBQyxLQUFLLENBQUMsTUFBTTtJQUNoRCxhQUFhLEVBQUUsaUJBQWlCLENBQUMsS0FBSyxDQUFDLGFBQWE7SUFDcEQsY0FBYyxFQUFFLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxjQUFjO0lBQ3RELGVBQWUsRUFBRSxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsZUFBZTtJQUN4RCxtQkFBbUIsRUFBRSxDQUFDO1NBQ25CLE9BQU8sRUFBRTtTQUNULE9BQU8sQ0FBQyxJQUFJLENBQUM7U0FDYixRQUFRLENBQUMsbUVBQW1FLENBQUM7Q0FDakYsQ0FBQztLQUNELE1BQU0sRUFBRTtLQUNSLFFBQVEsQ0FBQyxrREFBa0QsQ0FBQyxDQUFDO0FBRWhFLE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUFHLENBQUM7S0FDdkMsTUFBTSxDQUFDO0lBQ04sWUFBWSxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLHdDQUF3QyxDQUFDO0lBQzNGLEtBQUssRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxpREFBaUQsQ0FBQztDQUM3RixDQUFDO0tBQ0QsTUFBTSxFQUFFO0tBQ1IsUUFBUSxDQUFDLGtEQUFrRCxDQUFDLENBQUM7QUFNaEUsMkVBQTJFO0FBQzNFLE1BQU0sVUFBVSxxQkFBcUIsQ0FBQyxPQUF1QjtJQUMzRCxPQUFPO1FBQ0wsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPO1FBQ3hCLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTtRQUNsQixTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVM7UUFDNUIsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXO1FBQ2hDLFVBQVUsRUFBRSxPQUFPLENBQUMsVUFBVTtRQUM5QixRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVE7UUFDMUIsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPO1FBQ3hCLFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUTtRQUMxQixNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxTQUFTO1FBQzlELE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTTtRQUN0QixJQUFJLEVBQUU7WUFDSixhQUFhLEVBQUUsT0FBTyxDQUFDLGFBQWE7WUFDcEMsY0FBYyxFQUFFLE9BQU8sQ0FBQyxjQUFjO1lBQ3RDLGVBQWUsRUFBRSxPQUFPLENBQUMsZUFBZTtTQUN6QztRQUNELG1CQUFtQixFQUFFLE9BQU8sQ0FBQyxtQkFBbUI7S0FDakQsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIERhdGFicmlja3MgYXV0aCBjb21tYW5kLWxpbmUgb3B0aW9uIHNjaGVtYXMgYW5kIHJ1bnRpbWUgcHJvamVjdGlvbi5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHtcbiAgQXV0aE9wdGlvbnNTY2hlbWEsXG4gIERhdGFicmlja3NBdXRoT3B0aW9uc1NjaGVtYSxcbiAgdHlwZSBEYXRhYnJpY2tzQXV0aE9wdGlvbnMsXG59IGZyb20gXCJAZGJ4LXRvb2xzL2F1dGgvY29uZmlnXCI7XG5pbXBvcnQgeyBzdHJpbmdVdGlscyB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiO1xuXG5leHBvcnQgY29uc3QgQXV0aENsaU9wdGlvbnNTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIHByb2ZpbGU6IERhdGFicmlja3NBdXRoT3B0aW9uc1NjaGVtYS5zaGFwZS5wcm9maWxlLFxuICAgIGhvc3Q6IERhdGFicmlja3NBdXRoT3B0aW9uc1NjaGVtYS5zaGFwZS5ob3N0LFxuICAgIGFjY291bnRJZDogRGF0YWJyaWNrc0F1dGhPcHRpb25zU2NoZW1hLnNoYXBlLmFjY291bnRJZCxcbiAgICB3b3Jrc3BhY2VJZDogRGF0YWJyaWNrc0F1dGhPcHRpb25zU2NoZW1hLnNoYXBlLndvcmtzcGFjZUlkLFxuICAgIGNvbmZpZ0ZpbGU6IERhdGFicmlja3NBdXRoT3B0aW9uc1NjaGVtYS5zaGFwZS5jb25maWdGaWxlLFxuICAgIGNsaWVudElkOiBEYXRhYnJpY2tzQXV0aE9wdGlvbnNTY2hlbWEuc2hhcGUuY2xpZW50SWQsXG4gICAgZ3JvdXBJZDogRGF0YWJyaWNrc0F1dGhPcHRpb25zU2NoZW1hLnNoYXBlLmdyb3VwSWQsXG4gICAgYXV0aFR5cGU6IERhdGFicmlja3NBdXRoT3B0aW9uc1NjaGVtYS5zaGFwZS5hdXRoVHlwZSxcbiAgICBzY29wZXM6IHpcbiAgICAgIC5wcmVwcm9jZXNzKFxuICAgICAgICAodmFsdWUpID0+XG4gICAgICAgICAgQXJyYXkuaXNBcnJheSh2YWx1ZSlcbiAgICAgICAgICAgID8gdmFsdWUuZmxhdE1hcCgoZW50cnkpID0+IHN0cmluZ1V0aWxzLnBhcnNlTGlzdChTdHJpbmcoZW50cnkpKSlcbiAgICAgICAgICAgIDogdmFsdWUsXG4gICAgICAgIHouYXJyYXkoei5zdHJpbmcoKS50cmltKCkubWluKDEpKSxcbiAgICAgIClcbiAgICAgIC5kZWZhdWx0KFtdKVxuICAgICAgLmRlc2NyaWJlKFwiT0F1dGggc2NvcGVzLlwiKSxcbiAgICB0YXJnZXQ6IERhdGFicmlja3NBdXRoT3B0aW9uc1NjaGVtYS5zaGFwZS50YXJnZXQsXG4gICAgbG9ja1RpbWVvdXRNczogQXV0aE9wdGlvbnNTY2hlbWEuc2hhcGUubG9ja1RpbWVvdXRNcyxcbiAgICBsb2dpblRpbWVvdXRNczogQXV0aE9wdGlvbnNTY2hlbWEuc2hhcGUubG9naW5UaW1lb3V0TXMsXG4gICAgcmVmcmVzaEJ1ZmZlck1zOiBBdXRoT3B0aW9uc1NjaGVtYS5zaGFwZS5yZWZyZXNoQnVmZmVyTXMsXG4gICAgcHJlZmVyVXNlclRvTWFjaGluZTogelxuICAgICAgLmJvb2xlYW4oKVxuICAgICAgLmRlZmF1bHQodHJ1ZSlcbiAgICAgIC5kZXNjcmliZShcIlByZWZlciBhIG1hdGNoaW5nIHVzZXIgcHJvZmlsZSBvdmVyIHNlbGVjdGVkIG1hY2hpbmUgY3JlZGVudGlhbHMuXCIpLFxuICB9KVxuICAuc3RyaWN0KClcbiAgLmRlc2NyaWJlKFwiT3B0aW9ucyBzaGFyZWQgYnkgZXZlcnkgRGF0YWJyaWNrcyBhdXRoIGNvbW1hbmQuXCIpO1xuXG5leHBvcnQgY29uc3QgVG9rZW5Db21tYW5kT3B0aW9uc1NjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgZm9yY2VSZWZyZXNoOiB6LmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKS5kZXNjcmliZShcIlJlZnJlc2ggdGhlIHRva2VuIGJlZm9yZSByZXR1cm5pbmcgaXQuXCIpLFxuICAgIGxvZ2luOiB6LmJvb2xlYW4oKS5kZWZhdWx0KHRydWUpLmRlc2NyaWJlKFwiTG9nIGluIHdoZW4gY3JlZGVudGlhbHMgYXJlIG1pc3Npbmcgb3IgaW52YWxpZC5cIiksXG4gIH0pXG4gIC5zdHJpY3QoKVxuICAuZGVzY3JpYmUoXCJPcHRpb25zIGZvciByZXR1cm5pbmcgYSBEYXRhYnJpY2tzIGFjY2VzcyB0b2tlbi5cIik7XG5cbmV4cG9ydCB0eXBlIEF1dGhDbGlPcHRpb25zID0gei5vdXRwdXQ8dHlwZW9mIEF1dGhDbGlPcHRpb25zU2NoZW1hPjtcblxuZXhwb3J0IHR5cGUgVG9rZW5Db21tYW5kT3B0aW9ucyA9IHoub3V0cHV0PHR5cGVvZiBUb2tlbkNvbW1hbmRPcHRpb25zU2NoZW1hPjtcblxuLyoqIENvbnZlcnQgZmxhdCBDTEkgZmllbGRzIGludG8gdGhlIE5vZGUgYXV0aCBwYWNrYWdlJ3MgbmVzdGVkIG9wdGlvbnMuICovXG5leHBvcnQgZnVuY3Rpb24gZGF0YWJyaWNrc0F1dGhPcHRpb25zKG9wdGlvbnM6IEF1dGhDbGlPcHRpb25zKTogRGF0YWJyaWNrc0F1dGhPcHRpb25zIHtcbiAgcmV0dXJuIHtcbiAgICBwcm9maWxlOiBvcHRpb25zLnByb2ZpbGUsXG4gICAgaG9zdDogb3B0aW9ucy5ob3N0LFxuICAgIGFjY291bnRJZDogb3B0aW9ucy5hY2NvdW50SWQsXG4gICAgd29ya3NwYWNlSWQ6IG9wdGlvbnMud29ya3NwYWNlSWQsXG4gICAgY29uZmlnRmlsZTogb3B0aW9ucy5jb25maWdGaWxlLFxuICAgIGNsaWVudElkOiBvcHRpb25zLmNsaWVudElkLFxuICAgIGdyb3VwSWQ6IG9wdGlvbnMuZ3JvdXBJZCxcbiAgICBhdXRoVHlwZTogb3B0aW9ucy5hdXRoVHlwZSxcbiAgICBzY29wZXM6IG9wdGlvbnMuc2NvcGVzLmxlbmd0aCA+IDAgPyBvcHRpb25zLnNjb3BlcyA6IHVuZGVmaW5lZCxcbiAgICB0YXJnZXQ6IG9wdGlvbnMudGFyZ2V0LFxuICAgIGF1dGg6IHtcbiAgICAgIGxvY2tUaW1lb3V0TXM6IG9wdGlvbnMubG9ja1RpbWVvdXRNcyxcbiAgICAgIGxvZ2luVGltZW91dE1zOiBvcHRpb25zLmxvZ2luVGltZW91dE1zLFxuICAgICAgcmVmcmVzaEJ1ZmZlck1zOiBvcHRpb25zLnJlZnJlc2hCdWZmZXJNcyxcbiAgICB9LFxuICAgIHByZWZlclVzZXJUb01hY2hpbmU6IG9wdGlvbnMucHJlZmVyVXNlclRvTWFjaGluZSxcbiAgfTtcbn1cbiJdfQ==
|
package/lib/src/cli.d.ts
CHANGED
|
@@ -16,5 +16,7 @@ import { Command } from "commander";
|
|
|
16
16
|
export declare function prepareAndRunProjen(projenArgs: string[], startDir?: string): Promise<void>;
|
|
17
17
|
/** Build the `dbx` commander program (no side effects until parsed). */
|
|
18
18
|
export declare function buildProgram(name?: string): Command;
|
|
19
|
+
/** Build the complete command tree used for generated documentation. */
|
|
20
|
+
export declare function buildDocumentationProgram(name?: string): Promise<Command>;
|
|
19
21
|
/** Parse `argv` (a `process.argv`) and run the matching command. */
|
|
20
22
|
export declare function runCli(argv: string[]): Promise<void>;
|
package/lib/src/cli.js
CHANGED
|
@@ -84,12 +84,18 @@ export function buildProgram(name = PROGRAM_NAMES[0]) {
|
|
|
84
84
|
.action(async (projenArgs) => {
|
|
85
85
|
await prepareAndRunProjen(projenArgs);
|
|
86
86
|
});
|
|
87
|
-
addForwardedCommand(program, "appkit", "AppKit helpers (env: print the environment an AppKit app resolves)", async () => (await import("
|
|
88
|
-
addForwardedCommand(program, "auth", "Authenticate to Databricks and manage OAuth tokens", async () => (await import("
|
|
89
|
-
addForwardedCommand(program, "tunnel", "Run a public portr tunnel with an email-OTP gate", async () => (await import("
|
|
90
|
-
addForwardedCommand(program, "lakebase-proxy", "Run the Node Databricks Lakebase PostgreSQL proxy", async () => (await import("
|
|
91
|
-
addForwardedCommand(program, "model-gateway", "Run the foreground AppKit Databricks model gateway", async () => (await import("
|
|
92
|
-
addForwardedCommand(program, "graphiti", "Run Graphiti or manage its current-user desktop service", async () => (await import("
|
|
87
|
+
addForwardedCommand(program, "appkit", "AppKit helpers (env: print the environment an AppKit app resolves)", async () => (await import("./appkit/cli.js")).buildProgram);
|
|
88
|
+
addForwardedCommand(program, "auth", "Authenticate to Databricks and manage OAuth tokens", async () => (await import("./auth/cli.js")).buildProgram);
|
|
89
|
+
addForwardedCommand(program, "tunnel", "Run a public portr tunnel with an email-OTP gate", async () => (await import("./tunnel/cli.js")).buildProgram);
|
|
90
|
+
addForwardedCommand(program, "lakebase-proxy", "Run the Node Databricks Lakebase PostgreSQL proxy", async () => (await import("./lakebase-proxy/cli.js")).buildProgram);
|
|
91
|
+
addForwardedCommand(program, "model-gateway", "Run the foreground AppKit Databricks model gateway", async () => (await import("./model-gateway/cli.js")).buildProgram);
|
|
92
|
+
addForwardedCommand(program, "graphiti", "Run Graphiti or manage its current-user desktop service", async () => (await import("./graphiti/cli.js")).buildProgram);
|
|
93
|
+
return program;
|
|
94
|
+
}
|
|
95
|
+
/** Build the complete command tree used for generated documentation. */
|
|
96
|
+
export async function buildDocumentationProgram(name = PROGRAM_NAMES[0]) {
|
|
97
|
+
const program = buildProgram(name);
|
|
98
|
+
program.commands.splice(1, program.commands.length - 1, (await import("./appkit/cli.js")).buildProgram("appkit"), (await import("./auth/cli.js")).buildProgram("auth"), (await import("./tunnel/cli.js")).buildProgram("tunnel"), (await import("./lakebase-proxy/cli.js")).buildProgram("lakebase-proxy"), (await import("./model-gateway/cli.js")).buildProgram("model-gateway"), (await import("./graphiti/cli.js")).buildProgram("graphiti"));
|
|
93
99
|
return program;
|
|
94
100
|
}
|
|
95
101
|
/**
|
|
@@ -104,4 +110,4 @@ function programName(argv) {
|
|
|
104
110
|
export async function runCli(argv) {
|
|
105
111
|
await buildProgram(programName(argv)).parseAsync(argv);
|
|
106
112
|
}
|
|
107
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDcEMsT0FBTyxFQUNMLGtCQUFrQixFQUNsQixtQkFBbUIsRUFDbkIsZUFBZSxFQUNmLGFBQWEsR0FDZCxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ25FLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRTlFLHNFQUFzRTtBQUN0RSxNQUFNLGFBQWEsR0FBRyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQVUsQ0FBQztBQUVwRDs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxtQkFBbUIsQ0FBQyxVQUFvQixFQUFFLFFBQWlCO0lBQy9FLE1BQU0sSUFBSSxHQUFHLE1BQU0saUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDL0MsSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUN6QixrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QixPQUFPO0lBQ1QsQ0FBQztJQUNELElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDekIsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BCLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QixNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMxQixPQUFPO0lBQ1QsQ0FBQztJQUNELG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFD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QkFBNkIsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUN2RSxDQUFDO0lBRUYsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQVMsV0FBVyxDQUFDLElBQWM7SUFDakMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLG1CQUFtQixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDekYsT0FBTyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxTQUFTLEtBQUssT0FBTyxDQUFDLElBQUksYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RGLENBQUM7QUFFRCxvRUFBb0U7QUFDcEUsTUFBTSxDQUFDLEtBQUssVUFBVSxNQUFNLENBQUMsSUFBYztJQUN6QyxNQUFNLFlBQVksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDekQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29tbWFuZGVyIGVudHJ5IGZvciBgZGJ4YCBhbmQgaXRzIGBkYngtdG9vbHNgIGFsaWFzLlxuICpcbiAqIGBkZXZgIGJvb3RzdHJhcHMgb3IgcmVwYWlycyBhIHdvcmtzcGFjZSBhbmQgZm9yd2FyZHMgdG8gcHJvamVuLlxuICogYGFwcGtpdGAgcHJvdmlkZXMgQXBwS2l0IGVudmlyb25tZW50IGhlbHBlcnMuXG4gKiBgYXV0aGAgbWFuYWdlcyBEYXRhYnJpY2tzIE9BdXRoIGFuZCBhY2Nlc3MgdG9rZW5zLlxuICogYHR1bm5lbGAgcnVucyBhIHB1YmxpYyBwb3J0ciB0dW5uZWwgd2l0aCBwYXNzd29yZGxlc3MgYWNjZXNzIGdhdGluZy5cbiAqXG4gKiBGZWF0dXJlIGNvbW1hbmRzIGxvYWQgdGhlaXIgc2libGluZyBwYWNrYWdlcyBvbmx5IHdoZW4gc2VsZWN0ZWQgYW5kIGZvcndhcmRcbiAqIHRoZWlyIGNvbXBsZXRlIGFyZ3VtZW50IGxpc3QsIGluY2x1ZGluZyBgLS1oZWxwYC5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cbmltcG9ydCB7IGJhc2VuYW1lIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gXCJjb21tYW5kZXJcIjtcbmltcG9ydCB7XG4gIGJvb3RzdHJhcFdvcmtzcGFjZSxcbiAgZW5zdXJlRW5naW5lQ3VycmVudCxcbiAgcnVuSW5pdGlhbFN5bnRoLFxuICBzZWVkVG9vbGNoYWluLFxufSBmcm9tIFwiLi9ib290c3RyYXAudHNcIjtcbmltcG9ydCB7IGVuc3VyZVdvcmtzcGFjZVJlYWR5LCBydW5CdW4sIHJ1blByb2plbiB9IGZyb20gXCIuL2J1bi50c1wiO1xuaW1wb3J0IHsgZmluZFdvcmtzcGFjZVJvb3QsIG5lZWRzQm9vdHN0cmFwLCBuZWVkc1Rvb2xjaGFpbiB9IGZyb20gXCIuL3Jvb3QudHNcIjtcblxuLyoqIENvbW1hbmRzIHRoZSBiaW4gZXhwb3NlcywgYW5kIHRoZSBuYW1lcyBoZWxwIGlzIHJlbmRlcmVkIHVuZGVyLiAqL1xuY29uc3QgUFJPR1JBTV9OQU1FUyA9IFtcImRieFwiLCBcImRieC10b29sc1wiXSBhcyBjb25zdDtcblxuLyoqXG4gKiBQcmVwYXJlIHRoZSB3b3Jrc3BhY2UgYXQgYHJvb3RgLCB0aGVuIHJ1biBwcm9qZW4gKHZpYSBidW4pIHdpdGggYHByb2plbkFyZ3NgLlxuICpcbiAqIFRocmVlIGNhc2VzLCBpbiBvcmRlcjpcbiAqICAgLSBubyBgLnByb2plbnJjLnRzYCBhdCBhbGwgLT4gZnVsbCBib290c3RyYXAgKHNjYWZmb2xkICsgaW5zdGFsbCArIHN5bnRoKSxcbiAqICAgICB3aGljaCBhbHJlYWR5IHJ1bnMgdGhlIGluaXRpYWwgc3ludGg7IG5vdGhpbmcgbW9yZSB0byBmb3J3YXJkLlxuICogICAtIGEgYC5wcm9qZW5yYy50c2AgYnV0IHRoZSBlbmdpbmUvdG9vbGNoYWluIGlzbid0IGluc3RhbGxlZCAoZS5nLiBhIGZyZXNobHlcbiAqICAgICBjb3BpZWQgcHJvamVjdCB3aG9zZSBnZW5lcmF0ZWQgZmlsZXMgKyBtYW5pZmVzdHMgYXJlIGdpdGlnbm9yZWQpIC0+IHNlZWRcbiAqICAgICB0aGUgdG9vbGNoYWluLCB0aGVuIHJ1biB0aGUgSU5JVElBTCBzeW50aCBkaXJlY3RseSAodGhlIHByb2plbiB0YXNrcyB0aGVcbiAqICAgICBhcmdzIHdvdWxkIG5hbWUsIGxpa2UgYHN5bmNgLCBkb24ndCBleGlzdCB1bnRpbCBgLnByb2plbnJjLnRzYCBoYXMgcnVuXG4gKiAgICAgb25jZSksIGFuZCBpbnN0YWxsLiBEb24ndCBmb3J3YXJkIGBwcm9qZW5BcmdzYCAtIHRoZSBzeW50aCBpcyB0aGUgd29yay5cbiAqICAgLSBvdGhlcndpc2UgKGVzdGFibGlzaGVkIHdvcmtzcGFjZSkgLT4gZW5zdXJlIGRlcHMsIGJyaW5nIHRoZSBlbmdpbmUgdXAgdG9cbiAqICAgICB0aGlzIENMSSdzIHZlcnNpb24sIHRoZW4gZm9yd2FyZCB0byBwcm9qZW4uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcmVwYXJlQW5kUnVuUHJvamVuKHByb2plbkFyZ3M6IHN0cmluZ1tdLCBzdGFydERpcj86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCByb290ID0gYXdhaXQgZmluZFdvcmtzcGFjZVJvb3Qoc3RhcnREaXIpO1xuICBpZiAobmVlZHNCb290c3RyYXAocm9vdCkpIHtcbiAgICBib290c3RyYXBXb3Jrc3BhY2Uocm9vdCk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChuZWVkc1Rvb2xjaGFpbihyb290KSkge1xuICAgIHNlZWRUb29sY2hhaW4ocm9vdCk7XG4gICAgcnVuSW5pdGlhbFN5bnRoKHJvb3QpO1xuICAgIHJ1bkJ1bihbXCJpbnN0YWxsXCJdLCByb290KTtcbiAgICByZXR1cm47XG4gIH1cbiAgZW5zdXJlV29ya3NwYWNlUmVhZHkocm9vdCk7XG4gIGVuc3VyZUVuZ2luZUN1cnJlbnQocm9vdCk7XG4gIHJ1blByb2plbihwcm9qZW5BcmdzLCByb290KTtcbn1cblxuLyoqXG4gKiBNb3VudCBgbmFtZWAgYXMgYSBjb21tYW5kIHRoYXQgY2FwdHVyZXMgZXZlcnkgZm9sbG93aW5nIHRva2VuIHZlcmJhdGltIGFuZFxuICogaGFuZHMgaXQgdG8gdGhlIHByb2dyYW0gYGxvYWQoKWAgcmVzb2x2ZXMuIGBoZWxwT3B0aW9uKGZhbHNlKWAgaXMgd2hhdCBsZXRzXG4gKiBgLS1oZWxwYCB0aHJvdWdoIHRvIHRoZSBjaGlsZCBpbnN0ZWFkIG9mIGJlaW5nIGFuc3dlcmVkIGhlcmUsIGFuZCB0aGUgY2hpbGRcbiAqIHByb2dyYW0gb3ducyBpdHMgb3duIGZsYWdzLCBzbyB0aGlzIHdyYXBwZXIgbmV2ZXIgaGFzIHRvIHJlc3RhdGUgdGhlbS5cbiAqL1xuZnVuY3Rpb24gYWRkRm9yd2FyZGVkQ29tbWFuZChcbiAgcHJvZ3JhbTogQ29tbWFuZCxcbiAgbmFtZTogc3RyaW5nLFxuICBkZXNjcmlwdGlvbjogc3RyaW5nLFxuICBsb2FkOiAoKSA9PiBQcm9taXNlPChuYW1lOiBzdHJpbmcpID0+IENvbW1hbmQ+LFxuKTogdm9pZCB7XG4gIHByb2dyYW1cbiAgICAuY29tbWFuZChuYW1lKVxuICAgIC5kZXNjcmlwdGlvbihkZXNjcmlwdGlvbilcbiAgICAuYXJndW1lbnQoXCJbYXJncy4uLl1cIiwgYGFyZ3VtZW50cyBmb3J3YXJkZWQgdG8gJHtuYW1lfWApXG4gICAgLmFsbG93VW5rbm93bk9wdGlvbigpXG4gICAgLmFsbG93RXhjZXNzQXJndW1lbnRzKClcbiAgICAuaGVscE9wdGlvbihmYWxzZSlcbiAgICAuYWN0aW9uKGFzeW5jIChhcmdzOiBzdHJpbmdbXSkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRQcm9ncmFtID0gYXdhaXQgbG9hZCgpO1xuICAgICAgYXdhaXQgYnVpbGRQcm9ncmFtKGAke3Byb2dyYW0ubmFtZSgpfSAke25hbWV9YCkucGFyc2VBc3luYyhhcmdzLCB7IGZyb206IFwidXNlclwiIH0pO1xuICAgIH0pO1xufVxuXG4vKiogQnVpbGQgdGhlIGBkYnhgIGNvbW1hbmRlciBwcm9ncmFtIChubyBzaWRlIGVmZmVjdHMgdW50aWwgcGFyc2VkKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFByb2dyYW0obmFtZTogc3RyaW5nID0gUFJPR1JBTV9OQU1FU1swXSk6IENvbW1hbmQge1xuICBjb25zdCBwcm9ncmFtID0gbmV3IENvbW1hbmQoKVxuICAgIC5uYW1lKG5hbWUpXG4gICAgLmRlc2NyaXB0aW9uKFxuICAgICAgXCJEYXRhYnJpY2tzIGRldmVsb3BlciB0b29sczogd29ya3NwYWNlIGxpZmVjeWNsZSwgQXBwS2l0IGVudiwgYXV0aCwgdHVubmVscywgYW5kIGxvY2FsIHByb3hpZXNcIixcbiAgICApXG4gICAgLnNob3dIZWxwQWZ0ZXJFcnJvcigpXG4gICAgLmhlbHBPcHRpb24oXCItaCwgLS1oZWxwXCIsIGBTaG93ICR7bmFtZX0gaGVscGApO1xuXG4gIHByb2dyYW1cbiAgICAuY29tbWFuZChcImRldlwiKVxuICAgIC5kZXNjcmlwdGlvbihcIkJvb3RzdHJhcCBvciByZXBhaXIgYSBkYngtdG9vbHMgd29ya3NwYWNlLCB0aGVuIGZvcndhcmQgdG8gcHJvamVuXCIpXG4gICAgLmFyZ3VtZW50KFwiW3Byb2plbkFyZ3MuLi5dXCIsIFwicHJvamVuIHRhc2sgYW5kIGFyZ3VtZW50cyAoZS5nLiBzeW5jIC0td2F0Y2gpXCIpXG4gICAgLmFsbG93VW5rbm93bk9wdGlvbigpXG4gICAgLmFsbG93RXhjZXNzQXJndW1lbnRzKClcbiAgICAuaGVscE9wdGlvbihmYWxzZSlcbiAgICAuYWN0aW9uKGFzeW5jIChwcm9qZW5BcmdzOiBzdHJpbmdbXSkgPT4ge1xuICAgICAgYXdhaXQgcHJlcGFyZUFuZFJ1blByb2plbihwcm9qZW5BcmdzKTtcbiAgICB9KTtcblxuICBhZGRGb3J3YXJkZWRDb21tYW5kKFxuICAgIHByb2dyYW0sXG4gICAgXCJhcHBraXRcIixcbiAgICBcIkFwcEtpdCBoZWxwZXJzIChlbnY6IHByaW50IHRoZSBlbnZpcm9ubWVudCBhbiBBcHBLaXQgYXBwIHJlc29sdmVzKVwiLFxuICAgIGFzeW5jICgpID0+IChhd2FpdCBpbXBvcnQoXCJAZGJ4LXRvb2xzL2NsaS1hcHBraXQtZW52L2NsaVwiKSkuYnVpbGRQcm9ncmFtLFxuICApO1xuXG4gIGFkZEZvcndhcmRlZENvbW1hbmQoXG4gICAgcHJvZ3JhbSxcbiAgICBcImF1dGhcIixcbiAgICBcIkF1dGhlbnRpY2F0ZSB0byBEYXRhYnJpY2tzIGFuZCBtYW5hZ2UgT0F1dGggdG9rZW5zXCIsXG4gICAgYXN5bmMgKCkgPT4gKGF3YWl0IGltcG9ydChcIkBkYngtdG9vbHMvY2xpLWF1dGgvY2xpXCIpKS5idWlsZFByb2dyYW0sXG4gICk7XG5cbiAgYWRkRm9yd2FyZGVkQ29tbWFuZChcbiAgICBwcm9ncmFtLFxuICAgIFwidHVubmVsXCIsXG4gICAgXCJSdW4gYSBwdWJsaWMgcG9ydHIgdHVubmVsIHdpdGggYW4gZW1haWwtT1RQIGdhdGVcIixcbiAgICBhc3luYyAoKSA9PiAoYXdhaXQgaW1wb3J0KFwiQGRieC10b29scy9jbGktdHVubmVsL2NsaVwiKSkuYnVpbGRQcm9ncmFtLFxuICApO1xuXG4gIGFkZEZvcndhcmRlZENvbW1hbmQoXG4gICAgcHJvZ3JhbSxcbiAgICBcImxha2ViYXNlLXByb3h5XCIsXG4gICAgXCJSdW4gdGhlIE5vZGUgRGF0YWJyaWNrcyBMYWtlYmFzZSBQb3N0Z3JlU1FMIHByb3h5XCIsXG4gICAgYXN5bmMgKCkgPT4gKGF3YWl0IGltcG9ydChcIkBkYngtdG9vbHMvY2xpLWxha2ViYXNlLXByb3h5L2NsaVwiKSkuYnVpbGRQcm9ncmFtLFxuICApO1xuXG4gIGFkZEZvcndhcmRlZENvbW1hbmQoXG4gICAgcHJvZ3JhbSxcbiAgICBcIm1vZGVsLWdhdGV3YXlcIixcbiAgICBcIlJ1biB0aGUgZm9yZWdyb3VuZCBBcHBLaXQgRGF0YWJyaWNrcyBtb2RlbCBnYXRld2F5XCIsXG4gICAgYXN5bmMgKCkgPT4gKGF3YWl0IGltcG9ydChcIkBkYngtdG9vbHMvY2xpLW1vZGVsLWdhdGV3YXkvY2xpXCIpKS5idWlsZFByb2dyYW0sXG4gICk7XG5cbiAgYWRkRm9yd2FyZGVkQ29tbWFuZChcbiAgICBwcm9ncmFtLFxuICAgIFwiZ3JhcGhpdGlcIixcbiAgICBcIlJ1biBHcmFwaGl0aSBvciBtYW5hZ2UgaXRzIGN1cnJlbnQtdXNlciBkZXNrdG9wIHNlcnZpY2VcIixcbiAgICBhc3luYyAoKSA9PiAoYXdhaXQgaW1wb3J0KFwiQGRieC10b29scy9jbGktZ3JhcGhpdGkvY2xpXCIpKS5idWlsZFByb2dyYW0sXG4gICk7XG5cbiAgcmV0dXJuIHByb2dyYW07XG59XG5cbi8qKlxuICogUHJvZ3JhbSBuYW1lIGZvciBoZWxwIG91dHB1dDogd2hpY2hldmVyIGJpbiB0aGUgdXNlciBhY3R1YWxseSB0eXBlZCwgc29cbiAqIGBkYngtdG9vbHMgLS1oZWxwYCBkb2Vzbid0IGRvY3VtZW50IGl0c2VsZiBhcyBgZGJ4YC4gRmFsbHMgYmFjayB0byBgZGJ4YC5cbiAqL1xuZnVuY3Rpb24gcHJvZ3JhbU5hbWUoYXJndjogc3RyaW5nW10pOiBzdHJpbmcge1xuICBjb25zdCBpbnZva2VkID0gYXJndlsxXSA/IGJhc2VuYW1lKGFyZ3ZbMV0pLnJlcGxhY2UoL1xcLig/OltjbV0/W2p0XXMpJC8sIFwiXCIpIDogdW5kZWZpbmVkO1xuICByZXR1cm4gUFJPR1JBTV9OQU1FUy5maW5kKChjYW5kaWRhdGUpID0+IGNhbmRpZGF0ZSA9PT0gaW52b2tlZCkgPz8gUFJPR1JBTV9OQU1FU1swXTtcbn1cblxuLyoqIFBhcnNlIGBhcmd2YCAoYSBgcHJvY2Vzcy5hcmd2YCkgYW5kIHJ1biB0aGUgbWF0Y2hpbmcgY29tbWFuZC4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5DbGkoYXJndjogc3RyaW5nW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgYnVpbGRQcm9ncmFtKHByb2dyYW1OYW1lKGFyZ3YpKS5wYXJzZUFzeW5jKGFyZ3YpO1xufVxuIl19
|
|
113
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDcEMsT0FBTyxFQUNMLGtCQUFrQixFQUNsQixtQkFBbUIsRUFDbkIsZUFBZSxFQUNmLGFBQWEsR0FDZCxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ25FLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRTlFLHNFQUFzRTtBQUN0RSxNQUFNLGFBQWEsR0FBRyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQVUsQ0FBQztBQUVwRDs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxtQkFBbUIsQ0FBQyxVQUFvQixFQUFFLFFBQWlCO0lBQy9FLE1BQU0sSUFBSSxHQUFHLE1BQU0saUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDL0MsSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUN6QixrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QixPQUFPO0lBQ1QsQ0FBQztJQUNELElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDekIsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BCLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QixNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMxQixPQUFPO0lBQ1QsQ0FBQztJQUNELG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNCLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFCLFNBQVMsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDOUIsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBUyxtQkFBbUIsQ0FDMUIsT0FBZ0IsRUFDaEIsSUFBWSxFQUNaLFdBQW1CLEVBQ25CLElBQThDO0lBRTlDLE9BQU87U0FDSixPQUFPLENBQUMsSUFBSSxDQUFDO1NBQ2IsV0FBVyxDQUFDLFdBQVcsQ0FBQztTQUN4QixRQUFRLENBQUMsV0FBVyxFQUFFLDBCQUEwQixJQUFJLEVBQUUsQ0FBQztTQUN2RCxrQkFBa0IsRUFBRTtTQUNwQixvQkFBb0IsRUFBRTtTQUN0QixVQUFVLENBQUMsS0FBSyxDQUFDO1NBQ2pCLE1BQU0sQ0FBQyxLQUFLLEVBQUUsSUFBYyxFQUFFLEVBQUU7UUFDL0IsTUFBTSxZQUFZLEdBQUcsTUFBTSxJQUFJLEVBQUUsQ0FBQztRQUNsQyxNQUFNLFlBQVksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUNyRixDQUFDLENBQUMsQ0FBQztBQUNQLENBQUM7QUFFRCx3RUFBd0U7QUFDeEUsTUFBTSxVQUFVLFlBQVksQ0FBQyxPQUFlLGFBQWEsQ0FBQyxDQUFDLENBQUM7SUFDMUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxPQUFPLEVBQUU7U0FDMUIsSUFBSSxDQUFDLElBQUksQ0FBQztTQUNWLFdBQVcsQ0FDViwrRkFBK0YsQ0FDaEc7U0FDQSxrQkFBa0IsRUFBRTtTQUNwQixVQUFVLENBQUMsWUFBWSxFQUFFLFFBQVEsSUFBSSxPQUFPLENBQUMsQ0FBQztJQUVqRCxPQUFPO1NBQ0osT0FBTyxDQUFDLEtBQUssQ0FBQztTQUNkLFdBQVcsQ0FBQyxtRUFBbUUsQ0FBQztTQUNoRixRQUFRLENBQUMsaUJBQWlCLEVBQUUsK0NBQStDLENBQUM7U0FDNUUsa0JBQWtCLEVBQUU7U0FDcEIsb0JBQW9CLEVBQUU7U0FDdEIsVUFBVSxDQUFDLEtBQUssQ0FBQztTQUNqQixNQUFNLENBQUMsS0FBSyxFQUFFLFVBQW9CLEVBQUUsRUFBRTtRQUNyQyxNQUFNLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3hDLENBQUMsQ0FBQyxDQUFDO0lBRUwsbUJBQW1CLENBQ2pCLE9BQU8sRUFDUCxRQUFRLEVBQ1Isb0VBQW9FLEVBQ3BFLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUMzRCxDQUFDO0lBRUYsbUJBQW1CLENBQ2pCLE9BQU8sRUFDUCxNQUFNLEVBQ04sb0RBQW9ELEVBQ3BELEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FDekQsQ0FBQztJQUVGLG1CQUFtQixDQUNqQixPQUFPLEVBQ1AsUUFBUSxFQUNSLGtEQUFrRCxFQUNsRCxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FDM0QsQ0FBQztJQUVGLG1CQUFtQixDQUNqQixPQUFPLEVBQ1AsZ0JBQWdCLEVBQ2hCLG1EQUFtRCxFQUNuRCxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxNQUFNLENBQUMseUJBQXlCLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FDbkUsQ0FBQztJQUVGLG1CQUFtQixDQUNqQixPQUFPLEVBQ1AsZUFBZSxFQUNmLG9EQUFvRCxFQUNwRCxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxNQUFNLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FDbEUsQ0FBQztJQUVGLG1CQUFtQixDQUNqQixPQUFPLEVBQ1AsVUFBVSxFQUNWLHlEQUF5RCxFQUN6RCxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FDN0QsQ0FBQztJQUVGLE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUM7QUFFRCx3RUFBd0U7QUFDeEUsTUFBTSxDQUFDLEtBQUssVUFBVSx5QkFBeUIsQ0FBQyxPQUFlLGFBQWEsQ0FBQyxDQUFDLENBQUM7SUFDN0UsTUFBTSxPQUFPLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xDLE9BQU8sQ0FBQyxRQUFzQixDQUFDLE1BQU0sQ0FDcEMsQ0FBQyxFQUNELE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFDM0IsQ0FBQyxNQUFNLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxFQUN4RCxDQUFDLE1BQU0sTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxFQUNwRCxDQUFDLE1BQU0sTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEVBQ3hELENBQUMsTUFBTSxNQUFNLENBQUMseUJBQXlCLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxFQUN4RSxDQUFDLE1BQU0sTUFBTSxDQUFDLHdCQUF3QixDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUFDLEVBQ3RFLENBQUMsTUFBTSxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FDN0QsQ0FBQztJQUNGLE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFTLFdBQVcsQ0FBQyxJQUFjO0lBQ2pDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ3pGLE9BQU8sYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsU0FBUyxLQUFLLE9BQU8sQ0FBQyxJQUFJLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0RixDQUFDO0FBRUQsb0VBQW9FO0FBQ3BFLE1BQU0sQ0FBQyxLQUFLLFVBQVUsTUFBTSxDQUFDLElBQWM7SUFDekMsTUFBTSxZQUFZLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3pELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvbW1hbmRlciBlbnRyeSBmb3IgYGRieGAgYW5kIGl0cyBgZGJ4LXRvb2xzYCBhbGlhcy5cbiAqXG4gKiBgZGV2YCBib290c3RyYXBzIG9yIHJlcGFpcnMgYSB3b3Jrc3BhY2UgYW5kIGZvcndhcmRzIHRvIHByb2plbi5cbiAqIGBhcHBraXRgIHByb3ZpZGVzIEFwcEtpdCBlbnZpcm9ubWVudCBoZWxwZXJzLlxuICogYGF1dGhgIG1hbmFnZXMgRGF0YWJyaWNrcyBPQXV0aCBhbmQgYWNjZXNzIHRva2Vucy5cbiAqIGB0dW5uZWxgIHJ1bnMgYSBwdWJsaWMgcG9ydHIgdHVubmVsIHdpdGggcGFzc3dvcmRsZXNzIGFjY2VzcyBnYXRpbmcuXG4gKlxuICogRmVhdHVyZSBjb21tYW5kcyBsb2FkIHRoZWlyIHNpYmxpbmcgcGFja2FnZXMgb25seSB3aGVuIHNlbGVjdGVkIGFuZCBmb3J3YXJkXG4gKiB0aGVpciBjb21wbGV0ZSBhcmd1bWVudCBsaXN0LCBpbmNsdWRpbmcgYC0taGVscGAuXG4gKlxuICogQG1vZHVsZVxuICovXG5pbXBvcnQgeyBiYXNlbmFtZSB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IENvbW1hbmQgfSBmcm9tIFwiY29tbWFuZGVyXCI7XG5pbXBvcnQge1xuICBib290c3RyYXBXb3Jrc3BhY2UsXG4gIGVuc3VyZUVuZ2luZUN1cnJlbnQsXG4gIHJ1bkluaXRpYWxTeW50aCxcbiAgc2VlZFRvb2xjaGFpbixcbn0gZnJvbSBcIi4vYm9vdHN0cmFwLnRzXCI7XG5pbXBvcnQgeyBlbnN1cmVXb3Jrc3BhY2VSZWFkeSwgcnVuQnVuLCBydW5Qcm9qZW4gfSBmcm9tIFwiLi9idW4udHNcIjtcbmltcG9ydCB7IGZpbmRXb3Jrc3BhY2VSb290LCBuZWVkc0Jvb3RzdHJhcCwgbmVlZHNUb29sY2hhaW4gfSBmcm9tIFwiLi9yb290LnRzXCI7XG5cbi8qKiBDb21tYW5kcyB0aGUgYmluIGV4cG9zZXMsIGFuZCB0aGUgbmFtZXMgaGVscCBpcyByZW5kZXJlZCB1bmRlci4gKi9cbmNvbnN0IFBST0dSQU1fTkFNRVMgPSBbXCJkYnhcIiwgXCJkYngtdG9vbHNcIl0gYXMgY29uc3Q7XG5cbi8qKlxuICogUHJlcGFyZSB0aGUgd29ya3NwYWNlIGF0IGByb290YCwgdGhlbiBydW4gcHJvamVuICh2aWEgYnVuKSB3aXRoIGBwcm9qZW5BcmdzYC5cbiAqXG4gKiBUaHJlZSBjYXNlcywgaW4gb3JkZXI6XG4gKiAgIC0gbm8gYC5wcm9qZW5yYy50c2AgYXQgYWxsIC0+IGZ1bGwgYm9vdHN0cmFwIChzY2FmZm9sZCArIGluc3RhbGwgKyBzeW50aCksXG4gKiAgICAgd2hpY2ggYWxyZWFkeSBydW5zIHRoZSBpbml0aWFsIHN5bnRoOyBub3RoaW5nIG1vcmUgdG8gZm9yd2FyZC5cbiAqICAgLSBhIGAucHJvamVucmMudHNgIGJ1dCB0aGUgZW5naW5lL3Rvb2xjaGFpbiBpc24ndCBpbnN0YWxsZWQgKGUuZy4gYSBmcmVzaGx5XG4gKiAgICAgY29waWVkIHByb2plY3Qgd2hvc2UgZ2VuZXJhdGVkIGZpbGVzICsgbWFuaWZlc3RzIGFyZSBnaXRpZ25vcmVkKSAtPiBzZWVkXG4gKiAgICAgdGhlIHRvb2xjaGFpbiwgdGhlbiBydW4gdGhlIElOSVRJQUwgc3ludGggZGlyZWN0bHkgKHRoZSBwcm9qZW4gdGFza3MgdGhlXG4gKiAgICAgYXJncyB3b3VsZCBuYW1lLCBsaWtlIGBzeW5jYCwgZG9uJ3QgZXhpc3QgdW50aWwgYC5wcm9qZW5yYy50c2AgaGFzIHJ1blxuICogICAgIG9uY2UpLCBhbmQgaW5zdGFsbC4gRG9uJ3QgZm9yd2FyZCBgcHJvamVuQXJnc2AgLSB0aGUgc3ludGggaXMgdGhlIHdvcmsuXG4gKiAgIC0gb3RoZXJ3aXNlIChlc3RhYmxpc2hlZCB3b3Jrc3BhY2UpIC0+IGVuc3VyZSBkZXBzLCBicmluZyB0aGUgZW5naW5lIHVwIHRvXG4gKiAgICAgdGhpcyBDTEkncyB2ZXJzaW9uLCB0aGVuIGZvcndhcmQgdG8gcHJvamVuLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJlcGFyZUFuZFJ1blByb2plbihwcm9qZW5BcmdzOiBzdHJpbmdbXSwgc3RhcnREaXI/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3Qgcm9vdCA9IGF3YWl0IGZpbmRXb3Jrc3BhY2VSb290KHN0YXJ0RGlyKTtcbiAgaWYgKG5lZWRzQm9vdHN0cmFwKHJvb3QpKSB7XG4gICAgYm9vdHN0cmFwV29ya3NwYWNlKHJvb3QpO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAobmVlZHNUb29sY2hhaW4ocm9vdCkpIHtcbiAgICBzZWVkVG9vbGNoYWluKHJvb3QpO1xuICAgIHJ1bkluaXRpYWxTeW50aChyb290KTtcbiAgICBydW5CdW4oW1wiaW5zdGFsbFwiXSwgcm9vdCk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGVuc3VyZVdvcmtzcGFjZVJlYWR5KHJvb3QpO1xuICBlbnN1cmVFbmdpbmVDdXJyZW50KHJvb3QpO1xuICBydW5Qcm9qZW4ocHJvamVuQXJncywgcm9vdCk7XG59XG5cbi8qKlxuICogTW91bnQgYG5hbWVgIGFzIGEgY29tbWFuZCB0aGF0IGNhcHR1cmVzIGV2ZXJ5IGZvbGxvd2luZyB0b2tlbiB2ZXJiYXRpbSBhbmRcbiAqIGhhbmRzIGl0IHRvIHRoZSBwcm9ncmFtIGBsb2FkKClgIHJlc29sdmVzLiBgaGVscE9wdGlvbihmYWxzZSlgIGlzIHdoYXQgbGV0c1xuICogYC0taGVscGAgdGhyb3VnaCB0byB0aGUgY2hpbGQgaW5zdGVhZCBvZiBiZWluZyBhbnN3ZXJlZCBoZXJlLCBhbmQgdGhlIGNoaWxkXG4gKiBwcm9ncmFtIG93bnMgaXRzIG93biBmbGFncywgc28gdGhpcyB3cmFwcGVyIG5ldmVyIGhhcyB0byByZXN0YXRlIHRoZW0uXG4gKi9cbmZ1bmN0aW9uIGFkZEZvcndhcmRlZENvbW1hbmQoXG4gIHByb2dyYW06IENvbW1hbmQsXG4gIG5hbWU6IHN0cmluZyxcbiAgZGVzY3JpcHRpb246IHN0cmluZyxcbiAgbG9hZDogKCkgPT4gUHJvbWlzZTwobmFtZTogc3RyaW5nKSA9PiBDb21tYW5kPixcbik6IHZvaWQge1xuICBwcm9ncmFtXG4gICAgLmNvbW1hbmQobmFtZSlcbiAgICAuZGVzY3JpcHRpb24oZGVzY3JpcHRpb24pXG4gICAgLmFyZ3VtZW50KFwiW2FyZ3MuLi5dXCIsIGBhcmd1bWVudHMgZm9yd2FyZGVkIHRvICR7bmFtZX1gKVxuICAgIC5hbGxvd1Vua25vd25PcHRpb24oKVxuICAgIC5hbGxvd0V4Y2Vzc0FyZ3VtZW50cygpXG4gICAgLmhlbHBPcHRpb24oZmFsc2UpXG4gICAgLmFjdGlvbihhc3luYyAoYXJnczogc3RyaW5nW10pID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkUHJvZ3JhbSA9IGF3YWl0IGxvYWQoKTtcbiAgICAgIGF3YWl0IGJ1aWxkUHJvZ3JhbShgJHtwcm9ncmFtLm5hbWUoKX0gJHtuYW1lfWApLnBhcnNlQXN5bmMoYXJncywgeyBmcm9tOiBcInVzZXJcIiB9KTtcbiAgICB9KTtcbn1cblxuLyoqIEJ1aWxkIHRoZSBgZGJ4YCBjb21tYW5kZXIgcHJvZ3JhbSAobm8gc2lkZSBlZmZlY3RzIHVudGlsIHBhcnNlZCkuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRQcm9ncmFtKG5hbWU6IHN0cmluZyA9IFBST0dSQU1fTkFNRVNbMF0pOiBDb21tYW5kIHtcbiAgY29uc3QgcHJvZ3JhbSA9IG5ldyBDb21tYW5kKClcbiAgICAubmFtZShuYW1lKVxuICAgIC5kZXNjcmlwdGlvbihcbiAgICAgIFwiRGF0YWJyaWNrcyBkZXZlbG9wZXIgdG9vbHM6IHdvcmtzcGFjZSBsaWZlY3ljbGUsIEFwcEtpdCBlbnYsIGF1dGgsIHR1bm5lbHMsIGFuZCBsb2NhbCBwcm94aWVzXCIsXG4gICAgKVxuICAgIC5zaG93SGVscEFmdGVyRXJyb3IoKVxuICAgIC5oZWxwT3B0aW9uKFwiLWgsIC0taGVscFwiLCBgU2hvdyAke25hbWV9IGhlbHBgKTtcblxuICBwcm9ncmFtXG4gICAgLmNvbW1hbmQoXCJkZXZcIilcbiAgICAuZGVzY3JpcHRpb24oXCJCb290c3RyYXAgb3IgcmVwYWlyIGEgZGJ4LXRvb2xzIHdvcmtzcGFjZSwgdGhlbiBmb3J3YXJkIHRvIHByb2plblwiKVxuICAgIC5hcmd1bWVudChcIltwcm9qZW5BcmdzLi4uXVwiLCBcInByb2plbiB0YXNrIGFuZCBhcmd1bWVudHMgKGUuZy4gc3luYyAtLXdhdGNoKVwiKVxuICAgIC5hbGxvd1Vua25vd25PcHRpb24oKVxuICAgIC5hbGxvd0V4Y2Vzc0FyZ3VtZW50cygpXG4gICAgLmhlbHBPcHRpb24oZmFsc2UpXG4gICAgLmFjdGlvbihhc3luYyAocHJvamVuQXJnczogc3RyaW5nW10pID0+IHtcbiAgICAgIGF3YWl0IHByZXBhcmVBbmRSdW5Qcm9qZW4ocHJvamVuQXJncyk7XG4gICAgfSk7XG5cbiAgYWRkRm9yd2FyZGVkQ29tbWFuZChcbiAgICBwcm9ncmFtLFxuICAgIFwiYXBwa2l0XCIsXG4gICAgXCJBcHBLaXQgaGVscGVycyAoZW52OiBwcmludCB0aGUgZW52aXJvbm1lbnQgYW4gQXBwS2l0IGFwcCByZXNvbHZlcylcIixcbiAgICBhc3luYyAoKSA9PiAoYXdhaXQgaW1wb3J0KFwiLi9hcHBraXQvY2xpLnRzXCIpKS5idWlsZFByb2dyYW0sXG4gICk7XG5cbiAgYWRkRm9yd2FyZGVkQ29tbWFuZChcbiAgICBwcm9ncmFtLFxuICAgIFwiYXV0aFwiLFxuICAgIFwiQXV0aGVudGljYXRlIHRvIERhdGFicmlja3MgYW5kIG1hbmFnZSBPQXV0aCB0b2tlbnNcIixcbiAgICBhc3luYyAoKSA9PiAoYXdhaXQgaW1wb3J0KFwiLi9hdXRoL2NsaS50c1wiKSkuYnVpbGRQcm9ncmFtLFxuICApO1xuXG4gIGFkZEZvcndhcmRlZENvbW1hbmQoXG4gICAgcHJvZ3JhbSxcbiAgICBcInR1bm5lbFwiLFxuICAgIFwiUnVuIGEgcHVibGljIHBvcnRyIHR1bm5lbCB3aXRoIGFuIGVtYWlsLU9UUCBnYXRlXCIsXG4gICAgYXN5bmMgKCkgPT4gKGF3YWl0IGltcG9ydChcIi4vdHVubmVsL2NsaS50c1wiKSkuYnVpbGRQcm9ncmFtLFxuICApO1xuXG4gIGFkZEZvcndhcmRlZENvbW1hbmQoXG4gICAgcHJvZ3JhbSxcbiAgICBcImxha2ViYXNlLXByb3h5XCIsXG4gICAgXCJSdW4gdGhlIE5vZGUgRGF0YWJyaWNrcyBMYWtlYmFzZSBQb3N0Z3JlU1FMIHByb3h5XCIsXG4gICAgYXN5bmMgKCkgPT4gKGF3YWl0IGltcG9ydChcIi4vbGFrZWJhc2UtcHJveHkvY2xpLnRzXCIpKS5idWlsZFByb2dyYW0sXG4gICk7XG5cbiAgYWRkRm9yd2FyZGVkQ29tbWFuZChcbiAgICBwcm9ncmFtLFxuICAgIFwibW9kZWwtZ2F0ZXdheVwiLFxuICAgIFwiUnVuIHRoZSBmb3JlZ3JvdW5kIEFwcEtpdCBEYXRhYnJpY2tzIG1vZGVsIGdhdGV3YXlcIixcbiAgICBhc3luYyAoKSA9PiAoYXdhaXQgaW1wb3J0KFwiLi9tb2RlbC1nYXRld2F5L2NsaS50c1wiKSkuYnVpbGRQcm9ncmFtLFxuICApO1xuXG4gIGFkZEZvcndhcmRlZENvbW1hbmQoXG4gICAgcHJvZ3JhbSxcbiAgICBcImdyYXBoaXRpXCIsXG4gICAgXCJSdW4gR3JhcGhpdGkgb3IgbWFuYWdlIGl0cyBjdXJyZW50LXVzZXIgZGVza3RvcCBzZXJ2aWNlXCIsXG4gICAgYXN5bmMgKCkgPT4gKGF3YWl0IGltcG9ydChcIi4vZ3JhcGhpdGkvY2xpLnRzXCIpKS5idWlsZFByb2dyYW0sXG4gICk7XG5cbiAgcmV0dXJuIHByb2dyYW07XG59XG5cbi8qKiBCdWlsZCB0aGUgY29tcGxldGUgY29tbWFuZCB0cmVlIHVzZWQgZm9yIGdlbmVyYXRlZCBkb2N1bWVudGF0aW9uLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJ1aWxkRG9jdW1lbnRhdGlvblByb2dyYW0obmFtZTogc3RyaW5nID0gUFJPR1JBTV9OQU1FU1swXSk6IFByb21pc2U8Q29tbWFuZD4ge1xuICBjb25zdCBwcm9ncmFtID0gYnVpbGRQcm9ncmFtKG5hbWUpO1xuICAocHJvZ3JhbS5jb21tYW5kcyBhcyBDb21tYW5kW10pLnNwbGljZShcbiAgICAxLFxuICAgIHByb2dyYW0uY29tbWFuZHMubGVuZ3RoIC0gMSxcbiAgICAoYXdhaXQgaW1wb3J0KFwiLi9hcHBraXQvY2xpLnRzXCIpKS5idWlsZFByb2dyYW0oXCJhcHBraXRcIiksXG4gICAgKGF3YWl0IGltcG9ydChcIi4vYXV0aC9jbGkudHNcIikpLmJ1aWxkUHJvZ3JhbShcImF1dGhcIiksXG4gICAgKGF3YWl0IGltcG9ydChcIi4vdHVubmVsL2NsaS50c1wiKSkuYnVpbGRQcm9ncmFtKFwidHVubmVsXCIpLFxuICAgIChhd2FpdCBpbXBvcnQoXCIuL2xha2ViYXNlLXByb3h5L2NsaS50c1wiKSkuYnVpbGRQcm9ncmFtKFwibGFrZWJhc2UtcHJveHlcIiksXG4gICAgKGF3YWl0IGltcG9ydChcIi4vbW9kZWwtZ2F0ZXdheS9jbGkudHNcIikpLmJ1aWxkUHJvZ3JhbShcIm1vZGVsLWdhdGV3YXlcIiksXG4gICAgKGF3YWl0IGltcG9ydChcIi4vZ3JhcGhpdGkvY2xpLnRzXCIpKS5idWlsZFByb2dyYW0oXCJncmFwaGl0aVwiKSxcbiAgKTtcbiAgcmV0dXJuIHByb2dyYW07XG59XG5cbi8qKlxuICogUHJvZ3JhbSBuYW1lIGZvciBoZWxwIG91dHB1dDogd2hpY2hldmVyIGJpbiB0aGUgdXNlciBhY3R1YWxseSB0eXBlZCwgc29cbiAqIGBkYngtdG9vbHMgLS1oZWxwYCBkb2Vzbid0IGRvY3VtZW50IGl0c2VsZiBhcyBgZGJ4YC4gRmFsbHMgYmFjayB0byBgZGJ4YC5cbiAqL1xuZnVuY3Rpb24gcHJvZ3JhbU5hbWUoYXJndjogc3RyaW5nW10pOiBzdHJpbmcge1xuICBjb25zdCBpbnZva2VkID0gYXJndlsxXSA/IGJhc2VuYW1lKGFyZ3ZbMV0pLnJlcGxhY2UoL1xcLig/OltjbV0/W2p0XXMpJC8sIFwiXCIpIDogdW5kZWZpbmVkO1xuICByZXR1cm4gUFJPR1JBTV9OQU1FUy5maW5kKChjYW5kaWRhdGUpID0+IGNhbmRpZGF0ZSA9PT0gaW52b2tlZCkgPz8gUFJPR1JBTV9OQU1FU1swXTtcbn1cblxuLyoqIFBhcnNlIGBhcmd2YCAoYSBgcHJvY2Vzcy5hcmd2YCkgYW5kIHJ1biB0aGUgbWF0Y2hpbmcgY29tbWFuZC4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5DbGkoYXJndjogc3RyaW5nW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgYnVpbGRQcm9ncmFtKHByb2dyYW1OYW1lKGFyZ3YpKS5wYXJzZUFzeW5jKGFyZ3YpO1xufVxuIl19
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { type CliServiceCliDependencies } from "@dbx-tools/cli-service/cli";
|
|
2
|
+
import { type CliServiceDefinition } from "@dbx-tools/cli-service/definition";
|
|
3
|
+
import { type GraphitiRuntimeOptions } from "@dbx-tools/graphiti/runtime";
|
|
4
|
+
import { Command } from "commander";
|
|
5
|
+
import { type GraphitiOptions } from "./options.ts";
|
|
6
|
+
/** Injectable runtime and service lifecycle boundaries for CLI callers. */
|
|
7
|
+
export interface GraphitiCliDependencies {
|
|
8
|
+
/** Run the Graphiti stack through the Node runtime owner. */
|
|
9
|
+
run(options: GraphitiRuntimeOptions): Promise<void>;
|
|
10
|
+
/** Shared service command dependencies for tests and embedding. */
|
|
11
|
+
readonly service?: CliServiceCliDependencies;
|
|
12
|
+
}
|
|
13
|
+
/** Runtime options persisted when installing the Graphiti desktop service. */
|
|
14
|
+
export type GraphitiServiceOptions = GraphitiOptions;
|
|
15
|
+
/** Define a Graphiti service without duplicating installation or lifecycle policy. */
|
|
16
|
+
export declare function graphitiServiceDefinition(options?: GraphitiServiceOptions): CliServiceDefinition;
|
|
17
|
+
/** Build foreground execution and shared desktop-service commands. */
|
|
18
|
+
export declare function buildProgram(name?: string, dependencies?: GraphitiCliDependencies): Command;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Commander-owned Graphiti CLI and shared current-user service definition.
|
|
3
|
+
*
|
|
4
|
+
* This module owns every user-facing Graphiti command. The shared Graphiti Zod
|
|
5
|
+
* schema owns its options, environment names, defaults, and validation. The
|
|
6
|
+
* Node Graphiti package owns runtime and Python interaction.
|
|
7
|
+
*
|
|
8
|
+
* @module
|
|
9
|
+
*/
|
|
10
|
+
import { addArgs, parseArgs, serializeArgs } from "@dbx-tools/cli-args";
|
|
11
|
+
import { buildServiceCommand } from "@dbx-tools/cli-service/cli";
|
|
12
|
+
import { defineService } from "@dbx-tools/cli-service/definition";
|
|
13
|
+
import { runGraphiti } from "@dbx-tools/graphiti/runtime";
|
|
14
|
+
import { Command } from "commander";
|
|
15
|
+
import { PACKAGE_VERSION } from "../../index.js";
|
|
16
|
+
import { GraphitiCliOptionsSchema, GraphitiOptionsSchema, } from "./options.js";
|
|
17
|
+
/** Define a Graphiti service without duplicating installation or lifecycle policy. */
|
|
18
|
+
export function graphitiServiceDefinition(options = {}) {
|
|
19
|
+
return defineService(import.meta.url, {
|
|
20
|
+
id: "dbx-tools.cli-graphiti",
|
|
21
|
+
name: "dbx graphiti",
|
|
22
|
+
pythonPackage: { name: "dbx-tools-graphiti" },
|
|
23
|
+
command: {
|
|
24
|
+
binName: "dbx-graphiti",
|
|
25
|
+
arguments: serializeArgs(GraphitiOptionsSchema.parse(options)),
|
|
26
|
+
},
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
/** Build foreground execution and shared desktop-service commands. */
|
|
30
|
+
export function buildProgram(name = "dbx graphiti", dependencies = { run: runGraphiti }) {
|
|
31
|
+
const program = addArgs(new Command()
|
|
32
|
+
.name(name)
|
|
33
|
+
.description("Run Graphiti or manage its current-user desktop service")
|
|
34
|
+
.version(PACKAGE_VERSION, "-v, --version"), GraphitiCliOptionsSchema).action(async () => {
|
|
35
|
+
await dependencies.run(graphitiOptions(program));
|
|
36
|
+
});
|
|
37
|
+
program.addCommand(buildServiceCommand(() => graphitiServiceDefinition(graphitiOptions(program)), dependencies.service));
|
|
38
|
+
return program;
|
|
39
|
+
}
|
|
40
|
+
function graphitiOptions(command) {
|
|
41
|
+
return GraphitiOptionsSchema.parse(parseArgs(command, GraphitiCliOptionsSchema));
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2dyYXBoaXRpL2NsaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7R0FRRztBQUNILE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxtQkFBbUIsRUFBa0MsTUFBTSw0QkFBNEIsQ0FBQztBQUNqRyxPQUFPLEVBQUUsYUFBYSxFQUE2QixNQUFNLG1DQUFtQyxDQUFDO0FBQzdGLE9BQU8sRUFBRSxXQUFXLEVBQStCLE1BQU0sNkJBQTZCLENBQUM7QUFDdkYsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUVwQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakQsT0FBTyxFQUNMLHdCQUF3QixFQUN4QixxQkFBcUIsR0FFdEIsTUFBTSxjQUFjLENBQUM7QUFhdEIsc0ZBQXNGO0FBQ3RGLE1BQU0sVUFBVSx5QkFBeUIsQ0FDdkMsVUFBa0MsRUFBRTtJQUVwQyxPQUFPLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtRQUNwQyxFQUFFLEVBQUUsd0JBQXdCO1FBQzVCLElBQUksRUFBRSxjQUFjO1FBQ3BCLGFBQWEsRUFBRSxFQUFFLElBQUksRUFBRSxvQkFBb0IsRUFBRTtRQUM3QyxPQUFPLEVBQUU7WUFDUCxPQUFPLEVBQUUsY0FBYztZQUN2QixTQUFTLEVBQUUsYUFBYSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUMvRDtLQUNGLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxzRUFBc0U7QUFDdEUsTUFBTSxVQUFVLFlBQVksQ0FDMUIsSUFBSSxHQUFHLGNBQWMsRUFDckIsZUFBd0MsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFO0lBRTVELE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FDckIsSUFBSSxPQUFPLEVBQUU7U0FDVixJQUFJLENBQUMsSUFBSSxDQUFDO1NBQ1YsV0FBVyxDQUFDLHlEQUF5RCxDQUFDO1NBQ3RFLE9BQU8sQ0FBQyxlQUFlLEVBQUUsZUFBZSxDQUFDLEVBQzVDLHdCQUF3QixDQUN6QixDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksRUFBRTtRQUNsQixNQUFNLFlBQVksQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDbkQsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLENBQUMsVUFBVSxDQUNoQixtQkFBbUIsQ0FDakIsR0FBRyxFQUFFLENBQUMseUJBQXlCLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQ3pELFlBQVksQ0FBQyxPQUFPLENBQ3JCLENBQ0YsQ0FBQztJQUNGLE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUM7QUFFRCxTQUFTLGVBQWUsQ0FBQyxPQUFnQjtJQUN2QyxPQUFPLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLHdCQUF3QixDQUFDLENBQUMsQ0FBQztBQUNuRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb21tYW5kZXItb3duZWQgR3JhcGhpdGkgQ0xJIGFuZCBzaGFyZWQgY3VycmVudC11c2VyIHNlcnZpY2UgZGVmaW5pdGlvbi5cbiAqXG4gKiBUaGlzIG1vZHVsZSBvd25zIGV2ZXJ5IHVzZXItZmFjaW5nIEdyYXBoaXRpIGNvbW1hbmQuIFRoZSBzaGFyZWQgR3JhcGhpdGkgWm9kXG4gKiBzY2hlbWEgb3ducyBpdHMgb3B0aW9ucywgZW52aXJvbm1lbnQgbmFtZXMsIGRlZmF1bHRzLCBhbmQgdmFsaWRhdGlvbi4gVGhlXG4gKiBOb2RlIEdyYXBoaXRpIHBhY2thZ2Ugb3ducyBydW50aW1lIGFuZCBQeXRob24gaW50ZXJhY3Rpb24uXG4gKlxuICogQG1vZHVsZVxuICovXG5pbXBvcnQgeyBhZGRBcmdzLCBwYXJzZUFyZ3MsIHNlcmlhbGl6ZUFyZ3MgfSBmcm9tIFwiQGRieC10b29scy9jbGktYXJnc1wiO1xuaW1wb3J0IHsgYnVpbGRTZXJ2aWNlQ29tbWFuZCwgdHlwZSBDbGlTZXJ2aWNlQ2xpRGVwZW5kZW5jaWVzIH0gZnJvbSBcIkBkYngtdG9vbHMvY2xpLXNlcnZpY2UvY2xpXCI7XG5pbXBvcnQgeyBkZWZpbmVTZXJ2aWNlLCB0eXBlIENsaVNlcnZpY2VEZWZpbml0aW9uIH0gZnJvbSBcIkBkYngtdG9vbHMvY2xpLXNlcnZpY2UvZGVmaW5pdGlvblwiO1xuaW1wb3J0IHsgcnVuR3JhcGhpdGksIHR5cGUgR3JhcGhpdGlSdW50aW1lT3B0aW9ucyB9IGZyb20gXCJAZGJ4LXRvb2xzL2dyYXBoaXRpL3J1bnRpbWVcIjtcbmltcG9ydCB7IENvbW1hbmQgfSBmcm9tIFwiY29tbWFuZGVyXCI7XG5cbmltcG9ydCB7IFBBQ0tBR0VfVkVSU0lPTiB9IGZyb20gXCIuLi8uLi9pbmRleC50c1wiO1xuaW1wb3J0IHtcbiAgR3JhcGhpdGlDbGlPcHRpb25zU2NoZW1hLFxuICBHcmFwaGl0aU9wdGlvbnNTY2hlbWEsXG4gIHR5cGUgR3JhcGhpdGlPcHRpb25zLFxufSBmcm9tIFwiLi9vcHRpb25zLnRzXCI7XG5cbi8qKiBJbmplY3RhYmxlIHJ1bnRpbWUgYW5kIHNlcnZpY2UgbGlmZWN5Y2xlIGJvdW5kYXJpZXMgZm9yIENMSSBjYWxsZXJzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcmFwaGl0aUNsaURlcGVuZGVuY2llcyB7XG4gIC8qKiBSdW4gdGhlIEdyYXBoaXRpIHN0YWNrIHRocm91Z2ggdGhlIE5vZGUgcnVudGltZSBvd25lci4gKi9cbiAgcnVuKG9wdGlvbnM6IEdyYXBoaXRpUnVudGltZU9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+O1xuICAvKiogU2hhcmVkIHNlcnZpY2UgY29tbWFuZCBkZXBlbmRlbmNpZXMgZm9yIHRlc3RzIGFuZCBlbWJlZGRpbmcuICovXG4gIHJlYWRvbmx5IHNlcnZpY2U/OiBDbGlTZXJ2aWNlQ2xpRGVwZW5kZW5jaWVzO1xufVxuXG4vKiogUnVudGltZSBvcHRpb25zIHBlcnNpc3RlZCB3aGVuIGluc3RhbGxpbmcgdGhlIEdyYXBoaXRpIGRlc2t0b3Agc2VydmljZS4gKi9cbmV4cG9ydCB0eXBlIEdyYXBoaXRpU2VydmljZU9wdGlvbnMgPSBHcmFwaGl0aU9wdGlvbnM7XG5cbi8qKiBEZWZpbmUgYSBHcmFwaGl0aSBzZXJ2aWNlIHdpdGhvdXQgZHVwbGljYXRpbmcgaW5zdGFsbGF0aW9uIG9yIGxpZmVjeWNsZSBwb2xpY3kuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhpdGlTZXJ2aWNlRGVmaW5pdGlvbihcbiAgb3B0aW9uczogR3JhcGhpdGlTZXJ2aWNlT3B0aW9ucyA9IHt9LFxuKTogQ2xpU2VydmljZURlZmluaXRpb24ge1xuICByZXR1cm4gZGVmaW5lU2VydmljZShpbXBvcnQubWV0YS51cmwsIHtcbiAgICBpZDogXCJkYngtdG9vbHMuY2xpLWdyYXBoaXRpXCIsXG4gICAgbmFtZTogXCJkYnggZ3JhcGhpdGlcIixcbiAgICBweXRob25QYWNrYWdlOiB7IG5hbWU6IFwiZGJ4LXRvb2xzLWdyYXBoaXRpXCIgfSxcbiAgICBjb21tYW5kOiB7XG4gICAgICBiaW5OYW1lOiBcImRieC1ncmFwaGl0aVwiLFxuICAgICAgYXJndW1lbnRzOiBzZXJpYWxpemVBcmdzKEdyYXBoaXRpT3B0aW9uc1NjaGVtYS5wYXJzZShvcHRpb25zKSksXG4gICAgfSxcbiAgfSk7XG59XG5cbi8qKiBCdWlsZCBmb3JlZ3JvdW5kIGV4ZWN1dGlvbiBhbmQgc2hhcmVkIGRlc2t0b3Atc2VydmljZSBjb21tYW5kcy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFByb2dyYW0oXG4gIG5hbWUgPSBcImRieCBncmFwaGl0aVwiLFxuICBkZXBlbmRlbmNpZXM6IEdyYXBoaXRpQ2xpRGVwZW5kZW5jaWVzID0geyBydW46IHJ1bkdyYXBoaXRpIH0sXG4pOiBDb21tYW5kIHtcbiAgY29uc3QgcHJvZ3JhbSA9IGFkZEFyZ3MoXG4gICAgbmV3IENvbW1hbmQoKVxuICAgICAgLm5hbWUobmFtZSlcbiAgICAgIC5kZXNjcmlwdGlvbihcIlJ1biBHcmFwaGl0aSBvciBtYW5hZ2UgaXRzIGN1cnJlbnQtdXNlciBkZXNrdG9wIHNlcnZpY2VcIilcbiAgICAgIC52ZXJzaW9uKFBBQ0tBR0VfVkVSU0lPTiwgXCItdiwgLS12ZXJzaW9uXCIpLFxuICAgIEdyYXBoaXRpQ2xpT3B0aW9uc1NjaGVtYSxcbiAgKS5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IGRlcGVuZGVuY2llcy5ydW4oZ3JhcGhpdGlPcHRpb25zKHByb2dyYW0pKTtcbiAgfSk7XG5cbiAgcHJvZ3JhbS5hZGRDb21tYW5kKFxuICAgIGJ1aWxkU2VydmljZUNvbW1hbmQoXG4gICAgICAoKSA9PiBncmFwaGl0aVNlcnZpY2VEZWZpbml0aW9uKGdyYXBoaXRpT3B0aW9ucyhwcm9ncmFtKSksXG4gICAgICBkZXBlbmRlbmNpZXMuc2VydmljZSxcbiAgICApLFxuICApO1xuICByZXR1cm4gcHJvZ3JhbTtcbn1cblxuZnVuY3Rpb24gZ3JhcGhpdGlPcHRpb25zKGNvbW1hbmQ6IENvbW1hbmQpOiBHcmFwaGl0aU9wdGlvbnMge1xuICByZXR1cm4gR3JhcGhpdGlPcHRpb25zU2NoZW1hLnBhcnNlKHBhcnNlQXJncyhjb21tYW5kLCBHcmFwaGl0aUNsaU9wdGlvbnNTY2hlbWEpKTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Graphiti CLI option surface.
|
|
3
|
+
*
|
|
4
|
+
* The Node Graphiti runtime owns the complete shared option contract. This
|
|
5
|
+
* module re-exports that surface without creating parallel CLI policy.
|
|
6
|
+
*
|
|
7
|
+
* @module
|
|
8
|
+
*/
|
|
9
|
+
export { GRAPHITI_DEFAULTS, GraphitiCliOptionsSchema, GraphitiOptionsSchema, ResolvedGraphitiOptionsSchema, graphitiOptionOverrides, graphitiOptionsEnvironment, graphitiOptionsFromEnvironment, resolveGraphitiOptions, } from "@dbx-tools/graphiti/options";
|
|
10
|
+
export type { GraphitiOptions, ResolvedGraphitiOptions } from "@dbx-tools/graphiti/options";
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Graphiti CLI option surface.
|
|
3
|
+
*
|
|
4
|
+
* The Node Graphiti runtime owns the complete shared option contract. This
|
|
5
|
+
* module re-exports that surface without creating parallel CLI policy.
|
|
6
|
+
*
|
|
7
|
+
* @module
|
|
8
|
+
*/
|
|
9
|
+
export { GRAPHITI_DEFAULTS, GraphitiCliOptionsSchema, GraphitiOptionsSchema, ResolvedGraphitiOptionsSchema, graphitiOptionOverrides, graphitiOptionsEnvironment, graphitiOptionsFromEnvironment, resolveGraphitiOptions, } from "@dbx-tools/graphiti/options";
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ncmFwaGl0aS9vcHRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O0dBT0c7QUFFSCxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLHdCQUF3QixFQUN4QixxQkFBcUIsRUFDckIsNkJBQTZCLEVBQzdCLHVCQUF1QixFQUN2QiwwQkFBMEIsRUFDMUIsOEJBQThCLEVBQzlCLHNCQUFzQixHQUN2QixNQUFNLDZCQUE2QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHcmFwaGl0aSBDTEkgb3B0aW9uIHN1cmZhY2UuXG4gKlxuICogVGhlIE5vZGUgR3JhcGhpdGkgcnVudGltZSBvd25zIHRoZSBjb21wbGV0ZSBzaGFyZWQgb3B0aW9uIGNvbnRyYWN0LiBUaGlzXG4gKiBtb2R1bGUgcmUtZXhwb3J0cyB0aGF0IHN1cmZhY2Ugd2l0aG91dCBjcmVhdGluZyBwYXJhbGxlbCBDTEkgcG9saWN5LlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5leHBvcnQge1xuICBHUkFQSElUSV9ERUZBVUxUUyxcbiAgR3JhcGhpdGlDbGlPcHRpb25zU2NoZW1hLFxuICBHcmFwaGl0aU9wdGlvbnNTY2hlbWEsXG4gIFJlc29sdmVkR3JhcGhpdGlPcHRpb25zU2NoZW1hLFxuICBncmFwaGl0aU9wdGlvbk92ZXJyaWRlcyxcbiAgZ3JhcGhpdGlPcHRpb25zRW52aXJvbm1lbnQsXG4gIGdyYXBoaXRpT3B0aW9uc0Zyb21FbnZpcm9ubWVudCxcbiAgcmVzb2x2ZUdyYXBoaXRpT3B0aW9ucyxcbn0gZnJvbSBcIkBkYngtdG9vbHMvZ3JhcGhpdGkvb3B0aW9uc1wiO1xuZXhwb3J0IHR5cGUgeyBHcmFwaGl0aU9wdGlvbnMsIFJlc29sdmVkR3JhcGhpdGlPcHRpb25zIH0gZnJvbSBcIkBkYngtdG9vbHMvZ3JhcGhpdGkvb3B0aW9uc1wiO1xuIl19
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/** PostgreSQL cancellation key translation and TLS forwarding. */
|
|
2
|
+
import { type CancelMessage } from "./protocol.ts";
|
|
3
|
+
/** Upstream PostgreSQL backend key used to forward a cancellation request. */
|
|
4
|
+
export interface CancellationTarget {
|
|
5
|
+
host: string;
|
|
6
|
+
port: number;
|
|
7
|
+
processId: number;
|
|
8
|
+
secretKey: number;
|
|
9
|
+
}
|
|
10
|
+
/** Sends one PostgreSQL cancellation request to its upstream backend. */
|
|
11
|
+
export type CancellationForwarder = (target: CancellationTarget) => Promise<void>;
|
|
12
|
+
/** Maps synthetic local backend keys onto real upstream cancellation targets. */
|
|
13
|
+
export declare class CancellationRegistry {
|
|
14
|
+
private readonly forwarder;
|
|
15
|
+
private readonly targets;
|
|
16
|
+
constructor(forwarder?: CancellationForwarder);
|
|
17
|
+
register(target: CancellationTarget): CancelMessage;
|
|
18
|
+
remove(message: CancelMessage): void;
|
|
19
|
+
forward(message: CancelMessage): Promise<boolean>;
|
|
20
|
+
}
|
|
21
|
+
/** Forward a PostgreSQL cancellation request over a verified TLS connection. */
|
|
22
|
+
export declare function forwardCancellation(target: CancellationTarget): Promise<void>;
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/** PostgreSQL cancellation key translation and TLS forwarding. */
|
|
2
|
+
import { randomBytes } from "node:crypto";
|
|
3
|
+
import { createConnection, isIP } from "node:net";
|
|
4
|
+
import { connect as connectTls } from "node:tls";
|
|
5
|
+
import { cancelRequest, sslRequest } from "./protocol.js";
|
|
6
|
+
let nextProcessId = 10_000;
|
|
7
|
+
/** Maps synthetic local backend keys onto real upstream cancellation targets. */
|
|
8
|
+
export class CancellationRegistry {
|
|
9
|
+
forwarder;
|
|
10
|
+
targets = new Map();
|
|
11
|
+
constructor(forwarder = forwardCancellation) {
|
|
12
|
+
this.forwarder = forwarder;
|
|
13
|
+
}
|
|
14
|
+
register(target) {
|
|
15
|
+
const processId = nextProcessId++;
|
|
16
|
+
const secretKey = randomBytes(4).readInt32BE(0);
|
|
17
|
+
this.targets.set(key(processId, secretKey), target);
|
|
18
|
+
return { kind: "cancel", processId, secretKey };
|
|
19
|
+
}
|
|
20
|
+
remove(message) {
|
|
21
|
+
this.targets.delete(key(message.processId, message.secretKey));
|
|
22
|
+
}
|
|
23
|
+
async forward(message) {
|
|
24
|
+
const target = this.targets.get(key(message.processId, message.secretKey));
|
|
25
|
+
if (!target)
|
|
26
|
+
return false;
|
|
27
|
+
await this.forwarder(target);
|
|
28
|
+
return true;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/** Forward a PostgreSQL cancellation request over a verified TLS connection. */
|
|
32
|
+
export async function forwardCancellation(target) {
|
|
33
|
+
const socket = createConnection({ host: target.host, port: target.port });
|
|
34
|
+
await event(socket, "connect");
|
|
35
|
+
socket.write(sslRequest());
|
|
36
|
+
const response = await readByte(socket);
|
|
37
|
+
if (response !== "S".charCodeAt(0)) {
|
|
38
|
+
socket.destroy();
|
|
39
|
+
throw new Error("Lakebase upstream refused TLS for cancellation");
|
|
40
|
+
}
|
|
41
|
+
const tls = connectTls({
|
|
42
|
+
socket,
|
|
43
|
+
rejectUnauthorized: true,
|
|
44
|
+
...(isIP(target.host) === 0 ? { servername: target.host } : {}),
|
|
45
|
+
});
|
|
46
|
+
await event(tls, "secureConnect");
|
|
47
|
+
await writeAndClose(tls, cancelRequest(target.processId, target.secretKey));
|
|
48
|
+
}
|
|
49
|
+
function key(processId, secretKey) {
|
|
50
|
+
return `${processId}:${secretKey}`;
|
|
51
|
+
}
|
|
52
|
+
function event(socket, name) {
|
|
53
|
+
return new Promise((resolve, reject) => {
|
|
54
|
+
const onEvent = () => finish();
|
|
55
|
+
const onError = (error) => finish(error);
|
|
56
|
+
const finish = (error) => {
|
|
57
|
+
socket.off(name, onEvent);
|
|
58
|
+
socket.off("error", onError);
|
|
59
|
+
if (error)
|
|
60
|
+
reject(error);
|
|
61
|
+
else
|
|
62
|
+
resolve();
|
|
63
|
+
};
|
|
64
|
+
socket.once(name, onEvent);
|
|
65
|
+
socket.once("error", onError);
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
function readByte(socket) {
|
|
69
|
+
return new Promise((resolve, reject) => {
|
|
70
|
+
const onData = (chunk) => {
|
|
71
|
+
finish();
|
|
72
|
+
if (chunk.length > 1)
|
|
73
|
+
socket.unshift(chunk.subarray(1));
|
|
74
|
+
resolve(chunk[0]);
|
|
75
|
+
};
|
|
76
|
+
const onError = (error) => {
|
|
77
|
+
finish();
|
|
78
|
+
reject(error);
|
|
79
|
+
};
|
|
80
|
+
const onEnd = () => {
|
|
81
|
+
finish();
|
|
82
|
+
reject(new Error("Lakebase upstream closed during TLS negotiation"));
|
|
83
|
+
};
|
|
84
|
+
const finish = () => {
|
|
85
|
+
socket.off("data", onData);
|
|
86
|
+
socket.off("error", onError);
|
|
87
|
+
socket.off("end", onEnd);
|
|
88
|
+
};
|
|
89
|
+
socket.once("data", onData);
|
|
90
|
+
socket.once("error", onError);
|
|
91
|
+
socket.once("end", onEnd);
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
function writeAndClose(socket, packet) {
|
|
95
|
+
return new Promise((resolve, reject) => {
|
|
96
|
+
socket.end(packet, () => resolve());
|
|
97
|
+
socket.once("error", reject);
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FuY2VsbGF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xha2ViYXNlLXByb3h5L2NhbmNlbGxhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxrRUFBa0U7QUFFbEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMxQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFlLE1BQU0sVUFBVSxDQUFDO0FBQy9ELE9BQU8sRUFBRSxPQUFPLElBQUksVUFBVSxFQUFrQixNQUFNLFVBQVUsQ0FBQztBQUVqRSxPQUFPLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBc0IsTUFBTSxlQUFlLENBQUM7QUFhOUUsSUFBSSxhQUFhLEdBQUcsTUFBTSxDQUFDO0FBRTNCLGlGQUFpRjtBQUNqRixNQUFNLE9BQU8sb0JBQW9CO0lBR0Y7SUFGWixPQUFPLEdBQUcsSUFBSSxHQUFHLEVBQThCLENBQUM7SUFFakUsWUFBNkIsWUFBbUMsbUJBQW1CO1FBQXRELGNBQVMsR0FBVCxTQUFTLENBQTZDO0lBQUcsQ0FBQztJQUV2RixRQUFRLENBQUMsTUFBMEI7UUFDakMsTUFBTSxTQUFTLEdBQUcsYUFBYSxFQUFFLENBQUM7UUFDbEMsTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoRCxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3BELE9BQU8sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsQ0FBQztJQUNsRCxDQUFDO0lBRUQsTUFBTSxDQUFDLE9BQXNCO1FBQzNCLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxT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QUFDLE1BQWlCLEVBQUUsTUFBYztJQUN0RCxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1FBQ3JDLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDcEMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDL0IsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqIFBvc3RncmVTUUwgY2FuY2VsbGF0aW9uIGtleSB0cmFuc2xhdGlvbiBhbmQgVExTIGZvcndhcmRpbmcuICovXG5cbmltcG9ydCB7IHJhbmRvbUJ5dGVzIH0gZnJvbSBcIm5vZGU6Y3J5cHRvXCI7XG5pbXBvcnQgeyBjcmVhdGVDb25uZWN0aW9uLCBpc0lQLCB0eXBlIFNvY2tldCB9IGZyb20gXCJub2RlOm5ldFwiO1xuaW1wb3J0IHsgY29ubmVjdCBhcyBjb25uZWN0VGxzLCB0eXBlIFRMU1NvY2tldCB9IGZyb20gXCJub2RlOnRsc1wiO1xuXG5pbXBvcnQgeyBjYW5jZWxSZXF1ZXN0LCBzc2xSZXF1ZXN0LCB0eXBlIENhbmNlbE1lc3NhZ2UgfSBmcm9tIFwiLi9wcm90b2NvbC50c1wiO1xuXG4vKiogVXBzdHJlYW0gUG9zdGdyZVNRTCBiYWNrZW5kIGtleSB1c2VkIHRvIGZvcndhcmQgYSBjYW5jZWxsYXRpb24gcmVxdWVzdC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2FuY2VsbGF0aW9uVGFyZ2V0IHtcbiAgaG9zdDogc3RyaW5nO1xuICBwb3J0OiBudW1iZXI7XG4gIHByb2Nlc3NJZDogbnVtYmVyO1xuICBzZWNyZXRLZXk6IG51bWJlcjtcbn1cblxuLyoqIFNlbmRzIG9uZSBQb3N0Z3JlU1FMIGNhbmNlbGxhdGlvbiByZXF1ZXN0IHRvIGl0cyB1cHN0cmVhbSBiYWNrZW5kLiAqL1xuZXhwb3J0IHR5cGUgQ2FuY2VsbGF0aW9uRm9yd2FyZGVyID0gKHRhcmdldDogQ2FuY2VsbGF0aW9uVGFyZ2V0KSA9PiBQcm9taXNlPHZvaWQ+O1xuXG5sZXQgbmV4dFByb2Nlc3NJZCA9IDEwXzAwMDtcblxuLyoqIE1hcHMgc3ludGhldGljIGxvY2FsIGJhY2tlbmQga2V5cyBvbnRvIHJlYWwgdXBzdHJlYW0gY2FuY2VsbGF0aW9uIHRhcmdldHMuICovXG5leHBvcnQgY2xhc3MgQ2FuY2VsbGF0aW9uUmVnaXN0cnkge1xuICBwcml2YXRlIHJlYWRvbmx5IHRhcmdldHMgPSBuZXcgTWFwPHN0cmluZywgQ2FuY2VsbGF0aW9uVGFyZ2V0PigpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgZm9yd2FyZGVyOiBDYW5jZWxsYXRpb25Gb3J3YXJkZXIgPSBmb3J3YXJkQ2FuY2VsbGF0aW9uKSB7fVxuXG4gIHJlZ2lzdGVyKHRhcmdldDogQ2FuY2VsbGF0aW9uVGFyZ2V0KTogQ2FuY2VsTWVzc2FnZSB7XG4gICAgY29uc3QgcHJvY2Vzc0lkID0gbmV4dFByb2Nlc3NJZCsrO1xuICAgIGNvbnN0IHNlY3JldEtleSA9IHJhbmRvbUJ5dGVzKDQpLnJlYWRJbnQzMkJFKDApO1xuICAgIHRoaXMudGFyZ2V0cy5zZXQoa2V5KHByb2Nlc3NJZCwgc2VjcmV0S2V5KSwgdGFyZ2V0KTtcbiAgICByZXR1cm4geyBraW5kOiBcImNhbmNlbFwiLCBwcm9jZXNzSWQsIHNlY3JldEtleSB9O1xuICB9XG5cbiAgcmVtb3ZlKG1lc3NhZ2U6IENhbmNlbE1lc3NhZ2UpOiB2b2lkIHtcbiAgICB0aGlzLnRhcmdldHMuZGVsZXRlKGtleShtZXNzYWdlLnByb2Nlc3NJZCwgbWVzc2FnZS5zZWNyZXRLZXkpKTtcbiAgfVxuXG4gIGFzeW5jIGZvcndhcmQobWVzc2FnZTogQ2FuY2VsTWVzc2FnZSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHRhcmdldCA9IHRoaXMudGFyZ2V0cy5nZXQoa2V5KG1lc3NhZ2UucHJvY2Vzc0lkLCBtZXNzYWdlLnNlY3JldEtleSkpO1xuICAgIGlmICghdGFyZ2V0KSByZXR1cm4gZmFsc2U7XG4gICAgYXdhaXQgdGhpcy5mb3J3YXJkZXIodGFyZ2V0KTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG4vKiogRm9yd2FyZCBhIFBvc3RncmVTUUwgY2FuY2VsbGF0aW9uIHJlcXVlc3Qgb3ZlciBhIHZlcmlmaWVkIFRMUyBjb25uZWN0aW9uLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZvcndhcmRDYW5jZWxsYXRpb24odGFyZ2V0OiBDYW5jZWxsYXRpb25UYXJnZXQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3Qgc29ja2V0ID0gY3JlYXRlQ29ubmVjdGlvbih7IGhvc3Q6IHRhcmdldC5ob3N0LCBwb3J0OiB0YXJnZXQucG9ydCB9KTtcbiAgYXdhaXQgZXZlbnQoc29ja2V0LCBcImNvbm5lY3RcIik7XG4gIHNvY2tldC53cml0ZShzc2xSZXF1ZXN0KCkpO1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHJlYWRCeXRlKHNvY2tldCk7XG4gIGlmIChyZXNwb25zZSAhPT0gXCJTXCIuY2hhckNvZGVBdCgwKSkge1xuICAgIHNvY2tldC5kZXN0cm95KCk7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTGFrZWJhc2UgdXBzdHJlYW0gcmVmdXNlZCBUTFMgZm9yIGNhbmNlbGxhdGlvblwiKTtcbiAgfVxuICBjb25zdCB0bHMgPSBjb25uZWN0VGxzKHtcbiAgICBzb2NrZXQsXG4gICAgcmVqZWN0VW5hdXRob3JpemVkOiB0cnVlLFxuICAgIC4uLihpc0lQKHRhcmdldC5ob3N0KSA9PT0gMCA/IHsgc2VydmVybmFtZTogdGFyZ2V0Lmhvc3QgfSA6IHt9KSxcbiAgfSk7XG4gIGF3YWl0IGV2ZW50KHRscywgXCJzZWN1cmVDb25uZWN0XCIpO1xuICBhd2FpdCB3cml0ZUFuZENsb3NlKHRscywgY2FuY2VsUmVxdWVzdCh0YXJnZXQucHJvY2Vzc0lkLCB0YXJnZXQuc2VjcmV0S2V5KSk7XG59XG5cbmZ1bmN0aW9uIGtleShwcm9jZXNzSWQ6IG51bWJlciwgc2VjcmV0S2V5OiBudW1iZXIpOiBzdHJpbmcge1xuICByZXR1cm4gYCR7cHJvY2Vzc0lkfToke3NlY3JldEtleX1gO1xufVxuXG5mdW5jdGlvbiBldmVudChzb2NrZXQ6IFNvY2tldCB8IFRMU1NvY2tldCwgbmFtZTogXCJjb25uZWN0XCIgfCBcInNlY3VyZUNvbm5lY3RcIik6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IG9uRXZlbnQgPSAoKSA9PiBmaW5pc2goKTtcbiAgICBjb25zdCBvbkVycm9yID0gKGVycm9yOiBFcnJvcikgPT4gZmluaXNoKGVycm9yKTtcbiAgICBjb25zdCBmaW5pc2ggPSAoZXJyb3I/OiBFcnJvcikgPT4ge1xuICAgICAgc29ja2V0Lm9mZihuYW1lLCBvbkV2ZW50KTtcbiAgICAgIHNvY2tldC5vZmYoXCJlcnJvclwiLCBvbkVycm9yKTtcbiAgICAgIGlmIChlcnJvcikgcmVqZWN0KGVycm9yKTtcbiAgICAgIGVsc2UgcmVzb2x2ZSgpO1xuICAgIH07XG4gICAgc29ja2V0Lm9uY2UobmFtZSwgb25FdmVudCk7XG4gICAgc29ja2V0Lm9uY2UoXCJlcnJvclwiLCBvbkVycm9yKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlYWRCeXRlKHNvY2tldDogU29ja2V0KTogUHJvbWlzZTxudW1iZXI+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBvbkRhdGEgPSAoY2h1bms6IEJ1ZmZlcikgPT4ge1xuICAgICAgZmluaXNoKCk7XG4gICAgICBpZiAoY2h1bmsubGVuZ3RoID4gMSkgc29ja2V0LnVuc2hpZnQoY2h1bmsuc3ViYXJyYXkoMSkpO1xuICAgICAgcmVzb2x2ZShjaHVua1swXSEpO1xuICAgIH07XG4gICAgY29uc3Qgb25FcnJvciA9IChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIGZpbmlzaCgpO1xuICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICB9O1xuICAgIGNvbnN0IG9uRW5kID0gKCkgPT4ge1xuICAgICAgZmluaXNoKCk7XG4gICAgICByZWplY3QobmV3IEVycm9yKFwiTGFrZWJhc2UgdXBzdHJlYW0gY2xvc2VkIGR1cmluZyBUTFMgbmVnb3RpYXRpb25cIikpO1xuICAgIH07XG4gICAgY29uc3QgZmluaXNoID0gKCkgPT4ge1xuICAgICAgc29ja2V0Lm9mZihcImRhdGFcIiwgb25EYXRhKTtcbiAgICAgIHNvY2tldC5vZmYoXCJlcnJvclwiLCBvbkVycm9yKTtcbiAgICAgIHNvY2tldC5vZmYoXCJlbmRcIiwgb25FbmQpO1xuICAgIH07XG4gICAgc29ja2V0Lm9uY2UoXCJkYXRhXCIsIG9uRGF0YSk7XG4gICAgc29ja2V0Lm9uY2UoXCJlcnJvclwiLCBvbkVycm9yKTtcbiAgICBzb2NrZXQub25jZShcImVuZFwiLCBvbkVuZCk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiB3cml0ZUFuZENsb3NlKHNvY2tldDogVExTU29ja2V0LCBwYWNrZXQ6IEJ1ZmZlcik6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHNvY2tldC5lbmQocGFja2V0LCAoKSA9PiByZXNvbHZlKCkpO1xuICAgIHNvY2tldC5vbmNlKFwiZXJyb3JcIiwgcmVqZWN0KTtcbiAgfSk7XG59XG4iXX0=
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/** Commander entry point for the pure Node Lakebase proxy. */
|
|
2
|
+
import { type CliServiceCliDependencies } from "@dbx-tools/cli-service/cli";
|
|
3
|
+
import { type CliServiceDefinition } from "@dbx-tools/cli-service/definition";
|
|
4
|
+
import { Command } from "commander";
|
|
5
|
+
import { type LakebaseProxyOptions } from "./options.ts";
|
|
6
|
+
/** Injectable service boundary for Lakebase proxy CLI composition and tests. */
|
|
7
|
+
export interface LakebaseProxyCliDependencies {
|
|
8
|
+
readonly service?: CliServiceCliDependencies;
|
|
9
|
+
}
|
|
10
|
+
/** Build the tray-only Lakebase proxy service definition. */
|
|
11
|
+
export declare function lakebaseProxyServiceDefinition(options?: LakebaseProxyOptions): CliServiceDefinition;
|
|
12
|
+
/** Build the Lakebase proxy command-line program. */
|
|
13
|
+
export declare function buildProgram(name?: string, dependencies?: LakebaseProxyCliDependencies): Command;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/** Commander entry point for the pure Node Lakebase proxy. */
|
|
2
|
+
import { addArgs, parseArgs, serializeArgs } from "@dbx-tools/cli-args";
|
|
3
|
+
import { buildServiceCommand } from "@dbx-tools/cli-service/cli";
|
|
4
|
+
import { defineService } from "@dbx-tools/cli-service/definition";
|
|
5
|
+
import { connectionUrl } from "@dbx-tools/lakebase";
|
|
6
|
+
import { Command } from "commander";
|
|
7
|
+
import { PACKAGE_VERSION } from "../../index.js";
|
|
8
|
+
import { LakebaseProxyOptionsSchema, LakebaseProxyUrlOptionsSchema, resolveLakebaseProxyOptions, } from "./options.js";
|
|
9
|
+
import { LakebaseProxy } from "./proxy.js";
|
|
10
|
+
/** Build the tray-only Lakebase proxy service definition. */
|
|
11
|
+
export function lakebaseProxyServiceDefinition(options = {}) {
|
|
12
|
+
const resolved = resolveLakebaseProxyOptions(options);
|
|
13
|
+
return defineService(import.meta.url, {
|
|
14
|
+
id: "dbx-tools.cli-lakebase-proxy",
|
|
15
|
+
name: "dbx lakebase proxy",
|
|
16
|
+
command: {
|
|
17
|
+
binName: "dbx-lakebase-proxy",
|
|
18
|
+
arguments: serializeArgs(resolved),
|
|
19
|
+
},
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
/** Build the Lakebase proxy command-line program. */
|
|
23
|
+
export function buildProgram(name = "dbx lakebase-proxy", dependencies = {}) {
|
|
24
|
+
const program = addArgs(new Command(name)
|
|
25
|
+
.description("Run a loopback PostgreSQL proxy for Databricks Lakebase")
|
|
26
|
+
.version(PACKAGE_VERSION)
|
|
27
|
+
.enablePositionalOptions(), LakebaseProxyOptionsSchema).action(async () => {
|
|
28
|
+
const proxy = new LakebaseProxy(parseArgs(program, LakebaseProxyOptionsSchema));
|
|
29
|
+
await proxy.listen();
|
|
30
|
+
await waitForShutdown();
|
|
31
|
+
await proxy.close();
|
|
32
|
+
});
|
|
33
|
+
const urlCommand = addArgs(program.command("url").description("Format a local PostgreSQL URL for a Lakebase target"), LakebaseProxyUrlOptionsSchema).action(() => {
|
|
34
|
+
const options = parseArgs(urlCommand, LakebaseProxyUrlOptionsSchema);
|
|
35
|
+
const target = options.target ?? options.lakebaseEndpoint;
|
|
36
|
+
process.stdout.write(`${connectionUrl(target, options.listen.host, options.listen.port)}\n`);
|
|
37
|
+
});
|
|
38
|
+
let installCommand;
|
|
39
|
+
const serviceCommand = buildServiceCommand(() => {
|
|
40
|
+
return lakebaseProxyServiceDefinition(parseArgs(installCommand, LakebaseProxyOptionsSchema));
|
|
41
|
+
}, dependencies.service);
|
|
42
|
+
installCommand = serviceCommand.commands.find((command) => command.name() === "install");
|
|
43
|
+
addArgs(installCommand, LakebaseProxyOptionsSchema);
|
|
44
|
+
program.addCommand(serviceCommand);
|
|
45
|
+
return program;
|
|
46
|
+
}
|
|
47
|
+
function waitForShutdown() {
|
|
48
|
+
return new Promise((resolve) => {
|
|
49
|
+
const shutdown = () => resolve();
|
|
50
|
+
process.once("SIGINT", shutdown);
|
|
51
|
+
process.once("SIGTERM", shutdown);
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xha2ViYXNlLXByb3h5L2NsaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSw4REFBOEQ7QUFFOUQsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDeEUsT0FBTyxFQUFFLG1CQUFtQixFQUFrQyxNQUFNLDRCQUE0QixDQUFDO0FBQ2pHLE9BQU8sRUFBRSxhQUFhLEVBQTZCLE1BQU0sbUNBQW1DLENBQUM7QUFDN0YsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFcEMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pELE9BQU8sRUFDTCwwQkFBMEIsRUFDMUIsNkJBQTZCLEVBQzdCLDJCQUEyQixHQUU1QixNQUFNLGNBQWMsQ0FBQztBQUN0QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBTzNDLDZEQUE2RDtBQUM3RCxNQUFNLFVBQVUsOEJBQThCLENBQzVDLFVBQWdDLEVBQUU7SUFFbEMsTUFBTSxRQUFRLEdBQUcsMkJBQTJCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdEQsT0FBTyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7UUFDcEMsRUFBRSxFQUFFLDhCQUE4QjtRQUNsQyxJQUFJLEVBQUUsb0JBQW9CO1FBQzFCLE9BQU8sRUFBRTtZQUNQLE9BQU8sRUFBRSxvQkFBb0I7WUFDN0IsU0FBUyxFQUFFLGFBQWEsQ0FBQyxRQUFRLENBQUM7U0FDbkM7S0FDRixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQscURBQXFEO0FBQ3JELE1BQU0sVUFBVSxZQUFZLENBQzFCLElBQUksR0FBRyxvQkFBb0IsRUFDM0IsZUFBNkMsRUFBRTtJQUUvQyxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQ3JCLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQztTQUNkLFdBQVcsQ0FBQyx5REFBeUQsQ0FBQztTQUN0RSxPQUFPLENBQUMsZUFBZSxDQUFDO1NBQ3hCLHVCQUF1QixFQUFFLEVBQzVCLDBCQUEwQixDQUMzQixDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksRUFBRTtRQUNsQixNQUFNLEtBQUssR0FBRyxJQUFJLGFBQWEsQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLDBCQUEwQixDQUFDLENBQUMsQ0FBQztRQUNoRixNQUFNLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNyQixNQUFNLGVBQWUsRUFBRSxDQUFDO1FBQ3hCLE1BQU0sS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3RCLENBQUMsQ0FBQyxDQUFDO0lBRUgsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUN4QixPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLFdBQVcsQ0FBQyxxREFBcUQsQ0FBQyxFQUN6Riw2QkFBNkIsQ0FDOUIsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFO1FBQ1osTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLFVBQVUsRUFBRSw2QkFBNkIsQ0FBQyxDQUFDO1FBQ3JFLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLElBQUksT0FBTyxDQUFDLGdCQUFpQixDQUFDO1FBQzNELE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsYUFBYSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvRixDQUFDLENBQUMsQ0FBQztJQUNILElBQUksY0FBd0IsQ0FBQztJQUM3QixNQUFNLGNBQWMsR0FBRyxtQkFBbUIsQ0FBQyxHQUFHLEVBQUU7UUFDOUMsT0FBTyw4QkFBOEIsQ0FBQyxTQUFTLENBQUMsY0FBYyxFQUFFLDBCQUEwQixDQUFDLENBQUMsQ0FBQztJQUMvRixDQUFDLEVBQUUsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3pCLGNBQWMsR0FBRyxjQUFjLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLFNBQVMsQ0FBRSxDQUFDO0lBQzFGLE9BQU8sQ0FBQyxjQUFjLEVBQUUsMEJBQTBCLENBQUMsQ0FBQztJQUNwRCxPQUFPLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ25DLE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUM7QUFFRCxTQUFTLGVBQWU7SUFDdEIsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1FBQzdCLE1BQU0sUUFBUSxHQUFHLEdBQUcsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2pDLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ2pDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3BDLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBDb21tYW5kZXIgZW50cnkgcG9pbnQgZm9yIHRoZSBwdXJlIE5vZGUgTGFrZWJhc2UgcHJveHkuICovXG5cbmltcG9ydCB7IGFkZEFyZ3MsIHBhcnNlQXJncywgc2VyaWFsaXplQXJncyB9IGZyb20gXCJAZGJ4LXRvb2xzL2NsaS1hcmdzXCI7XG5pbXBvcnQgeyBidWlsZFNlcnZpY2VDb21tYW5kLCB0eXBlIENsaVNlcnZpY2VDbGlEZXBlbmRlbmNpZXMgfSBmcm9tIFwiQGRieC10b29scy9jbGktc2VydmljZS9jbGlcIjtcbmltcG9ydCB7IGRlZmluZVNlcnZpY2UsIHR5cGUgQ2xpU2VydmljZURlZmluaXRpb24gfSBmcm9tIFwiQGRieC10b29scy9jbGktc2VydmljZS9kZWZpbml0aW9uXCI7XG5pbXBvcnQgeyBjb25uZWN0aW9uVXJsIH0gZnJvbSBcIkBkYngtdG9vbHMvbGFrZWJhc2VcIjtcbmltcG9ydCB7IENvbW1hbmQgfSBmcm9tIFwiY29tbWFuZGVyXCI7XG5cbmltcG9ydCB7IFBBQ0tBR0VfVkVSU0lPTiB9IGZyb20gXCIuLi8uLi9pbmRleC50c1wiO1xuaW1wb3J0IHtcbiAgTGFrZWJhc2VQcm94eU9wdGlvbnNTY2hlbWEsXG4gIExha2ViYXNlUHJveHlVcmxPcHRpb25zU2NoZW1hLFxuICByZXNvbHZlTGFrZWJhc2VQcm94eU9wdGlvbnMsXG4gIHR5cGUgTGFrZWJhc2VQcm94eU9wdGlvbnMsXG59IGZyb20gXCIuL29wdGlvbnMudHNcIjtcbmltcG9ydCB7IExha2ViYXNlUHJveHkgfSBmcm9tIFwiLi9wcm94eS50c1wiO1xuXG4vKiogSW5qZWN0YWJsZSBzZXJ2aWNlIGJvdW5kYXJ5IGZvciBMYWtlYmFzZSBwcm94eSBDTEkgY29tcG9zaXRpb24gYW5kIHRlc3RzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBMYWtlYmFzZVByb3h5Q2xpRGVwZW5kZW5jaWVzIHtcbiAgcmVhZG9ubHkgc2VydmljZT86IENsaVNlcnZpY2VDbGlEZXBlbmRlbmNpZXM7XG59XG5cbi8qKiBCdWlsZCB0aGUgdHJheS1vbmx5IExha2ViYXNlIHByb3h5IHNlcnZpY2UgZGVmaW5pdGlvbi4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYWtlYmFzZVByb3h5U2VydmljZURlZmluaXRpb24oXG4gIG9wdGlvbnM6IExha2ViYXNlUHJveHlPcHRpb25zID0ge30sXG4pOiBDbGlTZXJ2aWNlRGVmaW5pdGlvbiB7XG4gIGNvbnN0IHJlc29sdmVkID0gcmVzb2x2ZUxha2ViYXNlUHJveHlPcHRpb25zKG9wdGlvbnMpO1xuICByZXR1cm4gZGVmaW5lU2VydmljZShpbXBvcnQubWV0YS51cmwsIHtcbiAgICBpZDogXCJkYngtdG9vbHMuY2xpLWxha2ViYXNlLXByb3h5XCIsXG4gICAgbmFtZTogXCJkYnggbGFrZWJhc2UgcHJveHlcIixcbiAgICBjb21tYW5kOiB7XG4gICAgICBiaW5OYW1lOiBcImRieC1sYWtlYmFzZS1wcm94eVwiLFxuICAgICAgYXJndW1lbnRzOiBzZXJpYWxpemVBcmdzKHJlc29sdmVkKSxcbiAgICB9LFxuICB9KTtcbn1cblxuLyoqIEJ1aWxkIHRoZSBMYWtlYmFzZSBwcm94eSBjb21tYW5kLWxpbmUgcHJvZ3JhbS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFByb2dyYW0oXG4gIG5hbWUgPSBcImRieCBsYWtlYmFzZS1wcm94eVwiLFxuICBkZXBlbmRlbmNpZXM6IExha2ViYXNlUHJveHlDbGlEZXBlbmRlbmNpZXMgPSB7fSxcbik6IENvbW1hbmQge1xuICBjb25zdCBwcm9ncmFtID0gYWRkQXJncyhcbiAgICBuZXcgQ29tbWFuZChuYW1lKVxuICAgICAgLmRlc2NyaXB0aW9uKFwiUnVuIGEgbG9vcGJhY2sgUG9zdGdyZVNRTCBwcm94eSBmb3IgRGF0YWJyaWNrcyBMYWtlYmFzZVwiKVxuICAgICAgLnZlcnNpb24oUEFDS0FHRV9WRVJTSU9OKVxuICAgICAgLmVuYWJsZVBvc2l0aW9uYWxPcHRpb25zKCksXG4gICAgTGFrZWJhc2VQcm94eU9wdGlvbnNTY2hlbWEsXG4gICkuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBwcm94eSA9IG5ldyBMYWtlYmFzZVByb3h5KHBhcnNlQXJncyhwcm9ncmFtLCBMYWtlYmFzZVByb3h5T3B0aW9uc1NjaGVtYSkpO1xuICAgIGF3YWl0IHByb3h5Lmxpc3RlbigpO1xuICAgIGF3YWl0IHdhaXRGb3JTaHV0ZG93bigpO1xuICAgIGF3YWl0IHByb3h5LmNsb3NlKCk7XG4gIH0pO1xuXG4gIGNvbnN0IHVybENvbW1hbmQgPSBhZGRBcmdzKFxuICAgIHByb2dyYW0uY29tbWFuZChcInVybFwiKS5kZXNjcmlwdGlvbihcIkZvcm1hdCBhIGxvY2FsIFBvc3RncmVTUUwgVVJMIGZvciBhIExha2ViYXNlIHRhcmdldFwiKSxcbiAgICBMYWtlYmFzZVByb3h5VXJsT3B0aW9uc1NjaGVtYSxcbiAgKS5hY3Rpb24oKCkgPT4ge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBwYXJzZUFyZ3ModXJsQ29tbWFuZCwgTGFrZWJhc2VQcm94eVVybE9wdGlvbnNTY2hlbWEpO1xuICAgIGNvbnN0IHRhcmdldCA9IG9wdGlvbnMudGFyZ2V0ID8/IG9wdGlvbnMubGFrZWJhc2VFbmRwb2ludCE7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoYCR7Y29ubmVjdGlvblVybCh0YXJnZXQsIG9wdGlvbnMubGlzdGVuLmhvc3QsIG9wdGlvbnMubGlzdGVuLnBvcnQpfVxcbmApO1xuICB9KTtcbiAgbGV0IGluc3RhbGxDb21tYW5kITogQ29tbWFuZDtcbiAgY29uc3Qgc2VydmljZUNvbW1hbmQgPSBidWlsZFNlcnZpY2VDb21tYW5kKCgpID0+IHtcbiAgICByZXR1cm4gbGFrZWJhc2VQcm94eVNlcnZpY2VEZWZpbml0aW9uKHBhcnNlQXJncyhpbnN0YWxsQ29tbWFuZCwgTGFrZWJhc2VQcm94eU9wdGlvbnNTY2hlbWEpKTtcbiAgfSwgZGVwZW5kZW5jaWVzLnNlcnZpY2UpO1xuICBpbnN0YWxsQ29tbWFuZCA9IHNlcnZpY2VDb21tYW5kLmNvbW1hbmRzLmZpbmQoKGNvbW1hbmQpID0+IGNvbW1hbmQubmFtZSgpID09PSBcImluc3RhbGxcIikhO1xuICBhZGRBcmdzKGluc3RhbGxDb21tYW5kLCBMYWtlYmFzZVByb3h5T3B0aW9uc1NjaGVtYSk7XG4gIHByb2dyYW0uYWRkQ29tbWFuZChzZXJ2aWNlQ29tbWFuZCk7XG4gIHJldHVybiBwcm9ncmFtO1xufVxuXG5mdW5jdGlvbiB3YWl0Rm9yU2h1dGRvd24oKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIGNvbnN0IHNodXRkb3duID0gKCkgPT4gcmVzb2x2ZSgpO1xuICAgIHByb2Nlc3Mub25jZShcIlNJR0lOVFwiLCBzaHV0ZG93bik7XG4gICAgcHJvY2Vzcy5vbmNlKFwiU0lHVEVSTVwiLCBzaHV0ZG93bik7XG4gIH0pO1xufVxuIl19
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lakebase proxy listener, service, and URL command options.
|
|
3
|
+
*
|
|
4
|
+
* @module
|
|
5
|
+
*/
|
|
6
|
+
import { options } from "@dbx-tools/shared-core";
|
|
7
|
+
import { z } from "zod";
|
|
8
|
+
export declare const LakebaseProxyOptionsSchema: z.ZodObject<{
|
|
9
|
+
listen: z.ZodDefault<z.ZodType<options.TcpListenAddress, unknown, z.core.$ZodTypeInternals<options.TcpListenAddress, unknown>>>;
|
|
10
|
+
startupTimeoutSeconds: z.ZodDefault<z.ZodCoercedNumber<number>>;
|
|
11
|
+
profile: z.ZodOptional<z.ZodString>;
|
|
12
|
+
postgresRole: z.ZodOptional<z.ZodString>;
|
|
13
|
+
}, z.core.$strict>;
|
|
14
|
+
export declare const LakebaseProxyUrlOptionsSchema: z.ZodObject<{
|
|
15
|
+
target: z.ZodOptional<z.ZodString>;
|
|
16
|
+
lakebaseEndpoint: z.ZodOptional<z.ZodString>;
|
|
17
|
+
listen: z.ZodDefault<z.ZodType<options.TcpListenAddress, unknown, z.core.$ZodTypeInternals<options.TcpListenAddress, unknown>>>;
|
|
18
|
+
}, z.core.$strict>;
|
|
19
|
+
export type LakebaseProxyOptions = z.input<typeof LakebaseProxyOptionsSchema>;
|
|
20
|
+
export type ResolvedLakebaseProxyOptions = z.output<typeof LakebaseProxyOptionsSchema>;
|
|
21
|
+
export type LakebaseProxyUrlOptions = z.output<typeof LakebaseProxyUrlOptionsSchema>;
|
|
22
|
+
/** Validate and default Lakebase proxy listener options. */
|
|
23
|
+
export declare function resolveLakebaseProxyOptions(options?: LakebaseProxyOptions): ResolvedLakebaseProxyOptions;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lakebase proxy listener, service, and URL command options.
|
|
3
|
+
*
|
|
4
|
+
* @module
|
|
5
|
+
*/
|
|
6
|
+
import { options } from "@dbx-tools/shared-core";
|
|
7
|
+
import { z } from "zod";
|
|
8
|
+
const text = (description) => z.string().trim().min(1).optional().describe(description);
|
|
9
|
+
export const LakebaseProxyOptionsSchema = z
|
|
10
|
+
.object({
|
|
11
|
+
...options.PostgresOptionsSchema.shape,
|
|
12
|
+
listen: options
|
|
13
|
+
.listenAddressSchema({ port: 5432, loopback: true })
|
|
14
|
+
.describe("Loopback listener address."),
|
|
15
|
+
startupTimeoutSeconds: z.coerce
|
|
16
|
+
.number()
|
|
17
|
+
.int()
|
|
18
|
+
.nonnegative()
|
|
19
|
+
.default(30)
|
|
20
|
+
.describe("Startup timeout in seconds."),
|
|
21
|
+
profile: options.DatabricksOptionsSchema.shape.profile.describe("Exact Databricks profile."),
|
|
22
|
+
})
|
|
23
|
+
.strict()
|
|
24
|
+
.describe("Lakebase proxy listener and service options.");
|
|
25
|
+
export const LakebaseProxyUrlOptionsSchema = z
|
|
26
|
+
.object({
|
|
27
|
+
target: text("Lakebase project, resource path, host, or URL."),
|
|
28
|
+
lakebaseEndpoint: options.LakebaseOptionsSchema.shape.lakebaseEndpoint,
|
|
29
|
+
listen: options.listenAddressSchema({ port: 5432 }).describe("Local proxy address."),
|
|
30
|
+
})
|
|
31
|
+
.strict()
|
|
32
|
+
.refine((configured) => configured.target !== undefined || configured.lakebaseEndpoint !== undefined, {
|
|
33
|
+
message: "URL requires target or endpoint.",
|
|
34
|
+
path: ["target"],
|
|
35
|
+
})
|
|
36
|
+
.describe("Options for formatting a local Lakebase PostgreSQL URL.");
|
|
37
|
+
/** Validate and default Lakebase proxy listener options. */
|
|
38
|
+
export function resolveLakebaseProxyOptions(options = {}) {
|
|
39
|
+
return LakebaseProxyOptionsSchema.parse(options);
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9sYWtlYmFzZS1wcm94eS9vcHRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFFSCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakQsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUV4QixNQUFNLElBQUksR0FBRyxDQUFDLFdBQW1CLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBRWhHLE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFHLENBQUM7S0FDeEMsTUFBTSxDQUFDO0lBQ04sR0FBRyxPQUFPLENBQUMscUJBQXFCLENBQUMsS0FBSztJQUN0QyxNQUFNLEVBQUUsT0FBTztTQUNaLG1CQUFtQixDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUM7U0FDbkQsUUFBUSxDQUFDLDRCQUE0QixDQUFDO0lBQ3pDLHFCQUFxQixFQUFFLENBQUMsQ0FBQyxNQUFNO1NBQzVCLE1BQU0sRUFBVTtTQUNoQixHQUFHLEVBQUU7U0FDTCxXQUFXLEVBQUU7U0FDYixPQUFPLENBQUMsRUFBRSxDQUFDO1NBQ1gsUUFBUSxDQUFDLDZCQUE2QixDQUFDO0lBQzFDLE9BQU8sRUFBRSxPQUFPLENBQUMsdUJBQXVCLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsMkJBQTJCLENBQUM7Q0FDN0YsQ0FBQztLQUNELE1BQU0sRUFBRTtLQUNSLFFBQVEsQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO0FBRTVELE1BQU0sQ0FBQyxNQUFNLDZCQUE2QixHQUFHLENBQUM7S0FDM0MsTUFBTSxDQUFDO0lBQ04sTUFBTSxFQUFFLElBQUksQ0FBQyxnREFBZ0QsQ0FBQztJQUM5RCxnQkFBZ0IsRUFBRSxPQUFPLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLGdCQUFnQjtJQUN0RSxNQUFNLEVBQUUsT0FBTyxDQUFDLG1CQUFtQixDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLHNCQUFzQixDQUFDO0NBQ3JGLENBQUM7S0FDRCxNQUFNLEVBQUU7S0FDUixNQUFNLENBQ0wsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEtBQUssU0FBUyxJQUFJLFVBQVUsQ0FBQyxnQkFBZ0IsS0FBSyxTQUFTLEVBQzVGO0lBQ0UsT0FBTyxFQUFFLGtDQUFrQztJQUMzQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUM7Q0FDakIsQ0FDRjtLQUNBLFFBQVEsQ0FBQyx5REFBeUQsQ0FBQyxDQUFDO0FBUXZFLDREQUE0RDtBQUM1RCxNQUFNLFVBQVUsMkJBQTJCLENBQ3pDLFVBQWdDLEVBQUU7SUFFbEMsT0FBTywwQkFBMEIsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDbkQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTGFrZWJhc2UgcHJveHkgbGlzdGVuZXIsIHNlcnZpY2UsIGFuZCBVUkwgY29tbWFuZCBvcHRpb25zLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBvcHRpb25zIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5cbmNvbnN0IHRleHQgPSAoZGVzY3JpcHRpb246IHN0cmluZykgPT4gei5zdHJpbmcoKS50cmltKCkubWluKDEpLm9wdGlvbmFsKCkuZGVzY3JpYmUoZGVzY3JpcHRpb24pO1xuXG5leHBvcnQgY29uc3QgTGFrZWJhc2VQcm94eU9wdGlvbnNTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIC4uLm9wdGlvbnMuUG9zdGdyZXNPcHRpb25zU2NoZW1hLnNoYXBlLFxuICAgIGxpc3Rlbjogb3B0aW9uc1xuICAgICAgLmxpc3RlbkFkZHJlc3NTY2hlbWEoeyBwb3J0OiA1NDMyLCBsb29wYmFjazogdHJ1ZSB9KVxuICAgICAgLmRlc2NyaWJlKFwiTG9vcGJhY2sgbGlzdGVuZXIgYWRkcmVzcy5cIiksXG4gICAgc3RhcnR1cFRpbWVvdXRTZWNvbmRzOiB6LmNvZXJjZVxuICAgICAgLm51bWJlcjxudW1iZXI+KClcbiAgICAgIC5pbnQoKVxuICAgICAgLm5vbm5lZ2F0aXZlKClcbiAgICAgIC5kZWZhdWx0KDMwKVxuICAgICAgLmRlc2NyaWJlKFwiU3RhcnR1cCB0aW1lb3V0IGluIHNlY29uZHMuXCIpLFxuICAgIHByb2ZpbGU6IG9wdGlvbnMuRGF0YWJyaWNrc09wdGlvbnNTY2hlbWEuc2hhcGUucHJvZmlsZS5kZXNjcmliZShcIkV4YWN0IERhdGFicmlja3MgcHJvZmlsZS5cIiksXG4gIH0pXG4gIC5zdHJpY3QoKVxuICAuZGVzY3JpYmUoXCJMYWtlYmFzZSBwcm94eSBsaXN0ZW5lciBhbmQgc2VydmljZSBvcHRpb25zLlwiKTtcblxuZXhwb3J0IGNvbnN0IExha2ViYXNlUHJveHlVcmxPcHRpb25zU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICB0YXJnZXQ6IHRleHQoXCJMYWtlYmFzZSBwcm9qZWN0LCByZXNvdXJjZSBwYXRoLCBob3N0LCBvciBVUkwuXCIpLFxuICAgIGxha2ViYXNlRW5kcG9pbnQ6IG9wdGlvbnMuTGFrZWJhc2VPcHRpb25zU2NoZW1hLnNoYXBlLmxha2ViYXNlRW5kcG9pbnQsXG4gICAgbGlzdGVuOiBvcHRpb25zLmxpc3RlbkFkZHJlc3NTY2hlbWEoeyBwb3J0OiA1NDMyIH0pLmRlc2NyaWJlKFwiTG9jYWwgcHJveHkgYWRkcmVzcy5cIiksXG4gIH0pXG4gIC5zdHJpY3QoKVxuICAucmVmaW5lKFxuICAgIChjb25maWd1cmVkKSA9PiBjb25maWd1cmVkLnRhcmdldCAhPT0gdW5kZWZpbmVkIHx8IGNvbmZpZ3VyZWQubGFrZWJhc2VFbmRwb2ludCAhPT0gdW5kZWZpbmVkLFxuICAgIHtcbiAgICAgIG1lc3NhZ2U6IFwiVVJMIHJlcXVpcmVzIHRhcmdldCBvciBlbmRwb2ludC5cIixcbiAgICAgIHBhdGg6IFtcInRhcmdldFwiXSxcbiAgICB9LFxuICApXG4gIC5kZXNjcmliZShcIk9wdGlvbnMgZm9yIGZvcm1hdHRpbmcgYSBsb2NhbCBMYWtlYmFzZSBQb3N0Z3JlU1FMIFVSTC5cIik7XG5cbmV4cG9ydCB0eXBlIExha2ViYXNlUHJveHlPcHRpb25zID0gei5pbnB1dDx0eXBlb2YgTGFrZWJhc2VQcm94eU9wdGlvbnNTY2hlbWE+O1xuXG5leHBvcnQgdHlwZSBSZXNvbHZlZExha2ViYXNlUHJveHlPcHRpb25zID0gei5vdXRwdXQ8dHlwZW9mIExha2ViYXNlUHJveHlPcHRpb25zU2NoZW1hPjtcblxuZXhwb3J0IHR5cGUgTGFrZWJhc2VQcm94eVVybE9wdGlvbnMgPSB6Lm91dHB1dDx0eXBlb2YgTGFrZWJhc2VQcm94eVVybE9wdGlvbnNTY2hlbWE+O1xuXG4vKiogVmFsaWRhdGUgYW5kIGRlZmF1bHQgTGFrZWJhc2UgcHJveHkgbGlzdGVuZXIgb3B0aW9ucy4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlTGFrZWJhc2VQcm94eU9wdGlvbnMoXG4gIG9wdGlvbnM6IExha2ViYXNlUHJveHlPcHRpb25zID0ge30sXG4pOiBSZXNvbHZlZExha2ViYXNlUHJveHlPcHRpb25zIHtcbiAgcmV0dXJuIExha2ViYXNlUHJveHlPcHRpb25zU2NoZW1hLnBhcnNlKG9wdGlvbnMpO1xufVxuIl19
|