@dbx-tools/cli 0.9.58 → 0.9.61

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. package/README.md +594 -57
  2. package/bin/dbx-genie.ts +13 -0
  3. package/bin/dbx-graphiti.ts +5 -0
  4. package/bin/dbx-lakebase-proxy.ts +4 -0
  5. package/bin/dbx-model-gateway.ts +5 -0
  6. package/index.ts +47 -1
  7. package/lib/bin/dbx-genie.d.ts +2 -0
  8. package/lib/bin/dbx-genie.js +10 -0
  9. package/lib/bin/dbx-graphiti.d.ts +2 -0
  10. package/lib/bin/dbx-graphiti.js +4 -0
  11. package/lib/bin/dbx-lakebase-proxy.d.ts +2 -0
  12. package/lib/bin/dbx-lakebase-proxy.js +4 -0
  13. package/lib/bin/dbx-model-gateway.d.ts +2 -0
  14. package/lib/bin/dbx-model-gateway.js +4 -0
  15. package/lib/index.d.ts +47 -1
  16. package/lib/index.js +34 -2
  17. package/lib/src/appkit/cli.d.ts +24 -0
  18. package/lib/src/appkit/cli.js +54 -0
  19. package/lib/src/appkit/env-export.d.ts +40 -0
  20. package/lib/src/appkit/env-export.js +99 -0
  21. package/lib/src/auth/cli.d.ts +20 -0
  22. package/lib/src/auth/cli.js +129 -0
  23. package/lib/src/auth/options.d.ts +45 -0
  24. package/lib/src/auth/options.js +68 -0
  25. package/lib/src/cli.d.ts +2 -0
  26. package/lib/src/cli.js +19 -9
  27. package/lib/src/genie-code/cli.d.ts +19 -0
  28. package/lib/src/genie-code/cli.js +36 -0
  29. package/lib/src/genie-code/config.d.ts +38 -0
  30. package/lib/src/genie-code/config.js +111 -0
  31. package/lib/src/genie-code/install.d.ts +21 -0
  32. package/lib/src/genie-code/install.js +69 -0
  33. package/lib/src/genie-code/options.d.ts +7 -0
  34. package/lib/src/genie-code/options.js +7 -0
  35. package/lib/src/genie-code/runner.d.ts +21 -0
  36. package/lib/src/genie-code/runner.js +90 -0
  37. package/lib/src/genie-code/runtime.d.ts +48 -0
  38. package/lib/src/genie-code/runtime.js +162 -0
  39. package/lib/src/graphiti/cli.d.ts +18 -0
  40. package/lib/src/graphiti/cli.js +43 -0
  41. package/lib/src/graphiti/options.d.ts +10 -0
  42. package/lib/src/graphiti/options.js +10 -0
  43. package/lib/src/lakebase-proxy/cancellation.d.ts +22 -0
  44. package/lib/src/lakebase-proxy/cancellation.js +100 -0
  45. package/lib/src/lakebase-proxy/cli.d.ts +13 -0
  46. package/lib/src/lakebase-proxy/cli.js +54 -0
  47. package/lib/src/lakebase-proxy/options.d.ts +23 -0
  48. package/lib/src/lakebase-proxy/options.js +41 -0
  49. package/lib/src/lakebase-proxy/protocol.d.ts +37 -0
  50. package/lib/src/lakebase-proxy/protocol.js +124 -0
  51. package/lib/src/lakebase-proxy/proxy.d.ts +22 -0
  52. package/lib/src/lakebase-proxy/proxy.js +200 -0
  53. package/lib/src/model-gateway/cli.d.ts +19 -0
  54. package/lib/src/model-gateway/cli.js +63 -0
  55. package/lib/src/model-gateway/server.d.ts +16 -0
  56. package/lib/src/model-gateway/server.js +83 -0
  57. package/lib/src/tunnel/app.d.ts +20 -0
  58. package/lib/src/tunnel/app.js +52 -0
  59. package/lib/src/tunnel/cli.d.ts +27 -0
  60. package/lib/src/tunnel/cli.js +190 -0
  61. package/lib/src/tunnel/options.d.ts +72 -0
  62. package/lib/src/tunnel/options.js +138 -0
  63. package/lib/src/tunnel/proxy.d.ts +51 -0
  64. package/lib/src/tunnel/proxy.js +143 -0
  65. package/lib/tsconfig.tsbuildinfo +1 -1
  66. package/package.json +146 -9
  67. package/src/appkit/cli.ts +72 -0
  68. package/src/appkit/env-export.ts +124 -0
  69. package/src/auth/cli.ts +175 -0
  70. package/src/auth/options.ts +83 -0
  71. package/src/cli.ts +35 -8
  72. package/src/genie-code/cli.ts +58 -0
  73. package/src/genie-code/config.ts +161 -0
  74. package/src/genie-code/install.ts +103 -0
  75. package/src/genie-code/options.ts +14 -0
  76. package/src/genie-code/runner.ts +106 -0
  77. package/src/genie-code/runtime.ts +212 -0
  78. package/src/graphiti/cli.ts +75 -0
  79. package/src/graphiti/options.ts +20 -0
  80. package/src/lakebase-proxy/cancellation.ts +116 -0
  81. package/src/lakebase-proxy/cli.ts +80 -0
  82. package/src/lakebase-proxy/options.ts +56 -0
  83. package/src/lakebase-proxy/protocol.ts +170 -0
  84. package/src/lakebase-proxy/proxy.ts +256 -0
  85. package/src/model-gateway/cli.ts +93 -0
  86. package/src/model-gateway/server.ts +94 -0
  87. package/src/tunnel/app.ts +58 -0
  88. package/src/tunnel/cli.ts +218 -0
  89. package/src/tunnel/options.ts +169 -0
  90. package/src/tunnel/proxy.ts +194 -0
@@ -0,0 +1,129 @@
1
+ /**
2
+ * `dbx auth` Commander program for Databricks OAuth.
3
+ *
4
+ * The command delegates profile resolution and token lifecycle to
5
+ * `@dbx-tools/auth`.
6
+ *
7
+ * @module
8
+ */
9
+ import * as databricks from "@dbx-tools/auth";
10
+ import { addArgs, parseArgs } from "@dbx-tools/cli-args";
11
+ import { Command, CommanderError } from "commander";
12
+ import { AuthCliOptionsSchema, databricksAuthOptions, TokenCommandOptionsSchema, } from "./options.js";
13
+ const DEFAULT_DEPENDENCIES = {
14
+ createAuthClient: databricks.client.createAuthClient,
15
+ writeJson: (value) => {
16
+ process.stdout.write(`${JSON.stringify(value, null, 2)}\n`);
17
+ },
18
+ writeText: (value) => {
19
+ process.stdout.write(`${value}\n`);
20
+ },
21
+ };
22
+ /** Open the selected authentication client. */
23
+ async function openAuth(options, dependencies) {
24
+ return {
25
+ auth: await dependencies.createAuthClient(databricksAuthOptions(options)),
26
+ close: async () => { },
27
+ };
28
+ }
29
+ /** Execute an auth action and close resources owned by the command. */
30
+ async function withAuth(options, dependencies, action) {
31
+ const context = await openAuth(options, dependencies);
32
+ try {
33
+ await action(context);
34
+ }
35
+ finally {
36
+ await context.close();
37
+ }
38
+ }
39
+ /** Shape a generated token record for stable CLI JSON output. */
40
+ function tokenJson(token) {
41
+ return {
42
+ access_token: token.accessToken,
43
+ token_type: token.tokenType,
44
+ ...(token.expiry ? { expiry: token.expiry } : {}),
45
+ ...(token.scopes.length ? { scopes: token.scopes } : {}),
46
+ };
47
+ }
48
+ /** Select the serializable identity fields from an authentication client. */
49
+ function clientInfo(auth) {
50
+ return {
51
+ ...(auth.profile ? { profile: auth.profile } : {}),
52
+ host: auth.host,
53
+ ...(auth.accountId ? { accountId: auth.accountId } : {}),
54
+ ...(auth.workspaceId ? { workspaceId: auth.workspaceId } : {}),
55
+ target: auth.target,
56
+ authType: auth.authType,
57
+ principal: auth.principal,
58
+ };
59
+ }
60
+ /** Build the `dbx auth` Commander program without parsing arguments. */
61
+ export function buildProgram(name = "dbx auth", overrides = {}) {
62
+ const dependencies = { ...DEFAULT_DEPENDENCIES, ...overrides };
63
+ const program = addArgs(new Command()
64
+ .name(name)
65
+ .description("Authenticate to Databricks with user or machine OAuth")
66
+ .showHelpAfterError(), AuthCliOptionsSchema);
67
+ const options = () => parseArgs(program, AuthCliOptionsSchema);
68
+ program
69
+ .command("login")
70
+ .description("Force browser login and return an access token")
71
+ .action(async () => {
72
+ await withAuth(options(), dependencies, async ({ auth }) => {
73
+ dependencies.writeJson(tokenJson(await auth.token({ login: true })));
74
+ });
75
+ });
76
+ const tokenCommand = addArgs(program.command("token").description("Return a valid access token, logging in when needed"), TokenCommandOptionsSchema);
77
+ tokenCommand.action(async () => {
78
+ const tokenOptions = parseArgs(tokenCommand, TokenCommandOptionsSchema);
79
+ await withAuth(options(), dependencies, async ({ auth }) => {
80
+ const token = await auth.token({
81
+ ...(tokenOptions.login ? {} : { login: false }),
82
+ ...(tokenOptions.forceRefresh ? { refresh: true } : {}),
83
+ });
84
+ if (tokenOptions.format === "text")
85
+ dependencies.writeText(token.accessToken);
86
+ else
87
+ dependencies.writeJson(tokenJson(token));
88
+ });
89
+ });
90
+ program
91
+ .command("headers")
92
+ .description("Return current Databricks authentication headers")
93
+ .action(async () => {
94
+ await withAuth(options(), dependencies, async ({ auth }) => {
95
+ dependencies.writeJson(await auth.headers());
96
+ });
97
+ });
98
+ program
99
+ .command("profile")
100
+ .description("Print the configured or automatically detected profile")
101
+ .action(async () => {
102
+ await withAuth(options(), dependencies, async ({ auth }) => {
103
+ dependencies.writeText(auth.profile ?? "ambient");
104
+ });
105
+ });
106
+ program
107
+ .command("logout")
108
+ .description("Delete the stored credential for the selected profile")
109
+ .action(async () => {
110
+ await withAuth(options(), dependencies, async ({ auth }) => {
111
+ await auth.logout();
112
+ });
113
+ });
114
+ program
115
+ .command("status")
116
+ .description("Show the resolved authentication client configuration")
117
+ .action(async () => {
118
+ await withAuth(options(), dependencies, async ({ auth }) => {
119
+ dependencies.writeJson(clientInfo(auth));
120
+ });
121
+ });
122
+ return program;
123
+ }
124
+ /** Parse `argv` and run the selected auth operation. */
125
+ export async function runCli(argv) {
126
+ await buildProgram().parseAsync(argv);
127
+ }
128
+ export { CommanderError };
129
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F1dGgvY2xpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O0dBT0c7QUFFSCxPQUFPLEtBQUssVUFBVSxNQUFNLGlCQUFpQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFekQsT0FBTyxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFcEQsT0FBTyxFQUNMLG9CQUFvQixFQUNwQixxQkFBcUIsRUFDckIseUJBQXlCLEdBRTFCLE1BQU0sY0FBYyxDQUFDO0FBYXRCLE1BQU0sb0JBQW9CLEdBQXdCO0lBQ2hELGdCQUFnQixFQUFFLFVBQVUsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCO0lBQ3BELFNBQVMsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO1FBQ25CLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBQ0QsU0FBUyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7UUFDbkIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxDQUFDO0lBQ3JDLENBQUM7Q0FDRixDQUFDO0FBRUYsK0NBQStDO0FBQy9DLEtBQUssVUFBVSxRQUFRLENBQ3JCLE9BQXVCLEVBQ3ZCLFlBQWlDO0lBRWpDLE9BQU87UUFDTCxJQUFJLEVBQUUsTUFBTSxZQUFZLENBQUMsZ0JBQWdCLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDekUsS0FBSyxFQUFFLEtBQUssSUFBSSxFQUFFLEdBQUUsQ0FBQztLQUN0QixDQUFDO0FBQ0osQ0FBQztBQUVELHVFQUF1RTtBQUN2RSxLQUFLLFVBQVUs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QixDQUFDO0FBRUQsd0RBQXdEO0FBQ3hELE1BQU0sQ0FBQyxLQUFLLFVBQVUsTUFBTSxDQUFDLElBQWM7SUFDekMsTUFBTSxZQUFZLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDeEMsQ0FBQztBQUVELE9BQU8sRUFBRSxjQUFjLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogYGRieCBhdXRoYCBDb21tYW5kZXIgcHJvZ3JhbSBmb3IgRGF0YWJyaWNrcyBPQXV0aC5cbiAqXG4gKiBUaGUgY29tbWFuZCBkZWxlZ2F0ZXMgcHJvZmlsZSByZXNvbHV0aW9uIGFuZCB0b2tlbiBsaWZlY3ljbGUgdG9cbiAqIGBAZGJ4LXRvb2xzL2F1dGhgLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgKiBhcyBkYXRhYnJpY2tzIGZyb20gXCJAZGJ4LXRvb2xzL2F1dGhcIjtcbmltcG9ydCB7IGFkZEFyZ3MsIHBhcnNlQXJncyB9IGZyb20gXCJAZGJ4LXRvb2xzL2NsaS1hcmdzXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFicmlja3NBdXRoQ2xpZW50SW5mbyB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1hdXRoL2NsaWVudFwiO1xuaW1wb3J0IHsgQ29tbWFuZCwgQ29tbWFuZGVyRXJyb3IgfSBmcm9tIFwiY29tbWFuZGVyXCI7XG5cbmltcG9ydCB7XG4gIEF1dGhDbGlPcHRpb25zU2NoZW1hLFxuICBkYXRhYnJpY2tzQXV0aE9wdGlvbnMsXG4gIFRva2VuQ29tbWFuZE9wdGlvbnNTY2hlbWEsXG4gIHR5cGUgQXV0aENsaU9wdGlvbnMsXG59IGZyb20gXCIuL29wdGlvbnMudHNcIjtcblxuaW50ZXJmYWNlIEF1dGhDb250ZXh0IHtcbiAgYXV0aDogZGF0YWJyaWNrcy5BdXRoQ2xpZW50O1xuICBjbG9zZSgpOiBQcm9taXNlPHZvaWQ+O1xufVxuXG5pbnRlcmZhY2UgQXV0aENsaURlcGVuZGVuY2llcyB7XG4gIGNyZWF0ZUF1dGhDbGllbnQ6IHR5cGVvZiBkYXRhYnJpY2tzLmNsaWVudC5jcmVhdGVBdXRoQ2xpZW50O1xuICB3cml0ZUpzb24odmFsdWU6IHVua25vd24pOiB2b2lkO1xuICB3cml0ZVRleHQodmFsdWU6IHN0cmluZyk6IHZvaWQ7XG59XG5cbmNvbnN0IERFRkFVTFRfREVQRU5ERU5DSUVTOiBBdXRoQ2xpRGVwZW5kZW5jaWVzID0ge1xuICBjcmVhdGVBdXRoQ2xpZW50OiBkYXRhYnJpY2tzLmNsaWVudC5jcmVhdGVBdXRoQ2xpZW50LFxuICB3cml0ZUpzb246ICh2YWx1ZSkgPT4ge1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGAke0pTT04uc3RyaW5naWZ5KHZhbHVlLCBudWxsLCAyKX1cXG5gKTtcbiAgfSxcbiAgd3JpdGVUZXh0OiAodmFsdWUpID0+IHtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShgJHt2YWx1ZX1cXG5gKTtcbiAgfSxcbn07XG5cbi8qKiBPcGVuIHRoZSBzZWxlY3RlZCBhdXRoZW50aWNhdGlvbiBjbGllbnQuICovXG5hc3luYyBmdW5jdGlvbiBvcGVuQXV0aChcbiAgb3B0aW9uczogQXV0aENsaU9wdGlvbnMsXG4gIGRlcGVuZGVuY2llczogQXV0aENsaURlcGVuZGVuY2llcyxcbik6IFByb21pc2U8QXV0aENvbnRleHQ+IHtcbiAgcmV0dXJuIHtcbiAgICBhdXRoOiBhd2FpdCBkZXBlbmRlbmNpZXMuY3JlYXRlQXV0aENsaWVudChkYXRhYnJpY2tzQXV0aE9wdGlvbnMob3B0aW9ucykpLFxuICAgIGNsb3NlOiBhc3luYyAoKSA9PiB7fSxcbiAgfTtcbn1cblxuLyoqIEV4ZWN1dGUgYW4gYXV0aCBhY3Rpb24gYW5kIGNsb3NlIHJlc291cmNlcyBvd25lZCBieSB0aGUgY29tbWFuZC4gKi9cbmFzeW5jIGZ1bmN0aW9uIHdpdGhBdXRoKFxuICBvcHRpb25zOiBBdXRoQ2xpT3B0aW9ucyxcbiAgZGVwZW5kZW5jaWVzOiBBdXRoQ2xpRGVwZW5kZW5jaWVzLFxuICBhY3Rpb246IChjb250ZXh0OiBBdXRoQ29udGV4dCkgPT4gUHJvbWlzZTx2b2lkPixcbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBjb250ZXh0ID0gYXdhaXQgb3BlbkF1dGgob3B0aW9ucywgZGVwZW5kZW5jaWVzKTtcbiAgdHJ5IHtcbiAgICBhd2FpdCBhY3Rpb24oY29udGV4dCk7XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgY29udGV4dC5jbG9zZSgpO1xuICB9XG59XG5cbi8qKiBTaGFwZSBhIGdlbmVyYXRlZCB0b2tlbiByZWNvcmQgZm9yIHN0YWJsZSBDTEkgSlNPTiBvdXRwdXQuICovXG5mdW5jdGlvbiB0b2tlbkpzb24odG9rZW46IGRhdGFicmlja3MuQWNjZXNzVG9rZW4pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIHJldHVybiB7XG4gICAgYWNjZXNzX3Rva2VuOiB0b2tlbi5hY2Nlc3NUb2tlbixcbiAgICB0b2tlbl90eXBlOiB0b2tlbi50b2tlblR5cGUsXG4gICAgLi4uKHRva2VuLmV4cGlyeSA/IHsgZXhwaXJ5OiB0b2tlbi5leHBpcnkgfSA6IHt9KSxcbiAgICAuLi4odG9rZW4uc2NvcGVzLmxlbmd0aCA/IHsgc2NvcGVzOiB0b2tlbi5zY29wZXMgfSA6IHt9KSxcbiAgfTtcbn1cblxuLyoqIFNlbGVjdCB0aGUgc2VyaWFsaXphYmxlIGlkZW50aXR5IGZpZWxkcyBmcm9tIGFuIGF1dGhlbnRpY2F0aW9uIGNsaWVudC4gKi9cbmZ1bmN0aW9uIGNsaWVudEluZm8oYXV0aDogZGF0YWJyaWNrcy5BdXRoQ2xpZW50KTogRGF0YWJyaWNrc0F1dGhDbGllbnRJbmZvIHtcbiAgcmV0dXJuIHtcbiAgICAuLi4oYXV0aC5wcm9maWxlID8geyBwcm9maWxlOiBhdXRoLnByb2ZpbGUgfSA6IHt9KSxcbiAgICBob3N0OiBhdXRoLmhvc3QsXG4gICAgLi4uKGF1dGguYWNjb3VudElkID8geyBhY2NvdW50SWQ6IGF1dGguYWNjb3VudElkIH0gOiB7fSksXG4gICAgLi4uKGF1dGgud29ya3NwYWNlSWQgPyB7IHdvcmtzcGFjZUlkOiBhdXRoLndvcmtzcGFjZUlkIH0gOiB7fSksXG4gICAgdGFyZ2V0OiBhdXRoLnRhcmdldCxcbiAgICBhdXRoVHlwZTogYXV0aC5hdXRoVHlwZSxcbiAgICBwcmluY2lwYWw6IGF1dGgucHJpbmNpcGFsLFxuICB9O1xufVxuXG4vKiogQnVpbGQgdGhlIGBkYnggYXV0aGAgQ29tbWFuZGVyIHByb2dyYW0gd2l0aG91dCBwYXJzaW5nIGFyZ3VtZW50cy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFByb2dyYW0oXG4gIG5hbWUgPSBcImRieCBhdXRoXCIsXG4gIG92ZXJyaWRlczogUGFydGlhbDxBdXRoQ2xpRGVwZW5kZW5jaWVzPiA9IHt9LFxuKTogQ29tbWFuZCB7XG4gIGNvbnN0IGRlcGVuZGVuY2llcyA9IHsgLi4uREVGQVVMVF9ERVBFTkRFTkNJRVMsIC4uLm92ZXJyaWRlcyB9O1xuICBjb25zdCBwcm9ncmFtID0gYWRkQXJncyhcbiAgICBuZXcgQ29tbWFuZCgpXG4gICAgICAubmFtZShuYW1lKVxuICAgICAgLmRlc2NyaXB0aW9uKFwiQXV0aGVudGljYXRlIHRvIERhdGFicmlja3Mgd2l0aCB1c2VyIG9yIG1hY2hpbmUgT0F1dGhcIilcbiAgICAgIC5zaG93SGVscEFmdGVyRXJyb3IoKSxcbiAgICBBdXRoQ2xpT3B0aW9uc1NjaGVtYSxcbiAgKTtcbiAgY29uc3Qgb3B0aW9ucyA9ICgpOiBBdXRoQ2xpT3B0aW9ucyA9PiBwYXJzZUFyZ3MocHJvZ3JhbSwgQXV0aENsaU9wdGlvbnNTY2hlbWEpO1xuXG4gIHByb2dyYW1cbiAgICAuY29tbWFuZChcImxvZ2luXCIpXG4gICAgLmRlc2NyaXB0aW9uKFwiRm9yY2UgYnJvd3NlciBsb2dpbiBhbmQgcmV0dXJuIGFuIGFjY2VzcyB0b2tlblwiKVxuICAgIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgd2l0aEF1dGgob3B0aW9ucygpLCBkZXBlbmRlbmNpZXMsIGFzeW5jICh7IGF1dGggfSkgPT4ge1xuICAgICAgICBkZXBlbmRlbmNpZXMud3JpdGVKc29uKHRva2VuSnNvbihhd2FpdCBhdXRoLnRva2VuKHsgbG9naW46IHRydWUgfSkpKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gIGNvbnN0IHRva2VuQ29tbWFuZCA9IGFkZEFyZ3MoXG4gICAgcHJvZ3JhbS5jb21tYW5kKFwidG9rZW5cIikuZGVzY3JpcHRpb24oXCJSZXR1cm4gYSB2YWxpZCBhY2Nlc3MgdG9rZW4sIGxvZ2dpbmcgaW4gd2hlbiBuZWVkZWRcIiksXG4gICAgVG9rZW5Db21tYW5kT3B0aW9uc1NjaGVtYSxcbiAgKTtcbiAgdG9rZW5Db21tYW5kLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgdG9rZW5PcHRpb25zID0gcGFyc2VBcmdzKHRva2VuQ29tbWFuZCwgVG9rZW5Db21tYW5kT3B0aW9uc1NjaGVtYSk7XG4gICAgYXdhaXQgd2l0aEF1dGgob3B0aW9ucygpLCBkZXBlbmRlbmNpZXMsIGFzeW5jICh7IGF1dGggfSkgPT4ge1xuICAgICAgY29uc3QgdG9rZW4gPSBhd2FpdCBhdXRoLnRva2VuKHtcbiAgICAgICAgLi4uKHRva2VuT3B0aW9ucy5sb2dpbiA/IHt9IDogeyBsb2dpbjogZmFsc2UgfSksXG4gICAgICAgIC4uLih0b2tlbk9wdGlvbnMuZm9yY2VSZWZyZXNoID8geyByZWZyZXNoOiB0cnVlIH0gOiB7fSksXG4gICAgICB9KTtcbiAgICAgIGlmICh0b2tlbk9wdGlvbnMuZm9ybWF0ID09PSBcInRleHRcIikgZGVwZW5kZW5jaWVzLndyaXRlVGV4dCh0b2tlbi5hY2Nlc3NUb2tlbik7XG4gICAgICBlbHNlIGRlcGVuZGVuY2llcy53cml0ZUpzb24odG9rZW5Kc29uKHRva2VuKSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIHByb2dyYW1cbiAgICAuY29tbWFuZChcImhlYWRlcnNcIilcbiAgICAuZGVzY3JpcHRpb24oXCJSZXR1cm4gY3VycmVudCBEYXRhYnJpY2tzIGF1dGhlbnRpY2F0aW9uIGhlYWRlcnNcIilcbiAgICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IHdpdGhBdXRoKG9wdGlvbnMoKSwgZGVwZW5kZW5jaWVzLCBhc3luYyAoeyBhdXRoIH0pID0+IHtcbiAgICAgICAgZGVwZW5kZW5jaWVzLndyaXRlSnNvbihhd2FpdCBhdXRoLmhlYWRlcnMoKSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICBwcm9ncmFtXG4gICAgLmNvbW1hbmQoXCJwcm9maWxlXCIpXG4gICAgLmRlc2NyaXB0aW9uKFwiUHJpbnQgdGhlIGNvbmZpZ3VyZWQgb3IgYXV0b21hdGljYWxseSBkZXRlY3RlZCBwcm9maWxlXCIpXG4gICAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCB3aXRoQXV0aChvcHRpb25zKCksIGRlcGVuZGVuY2llcywgYXN5bmMgKHsgYXV0aCB9KSA9PiB7XG4gICAgICAgIGRlcGVuZGVuY2llcy53cml0ZVRleHQoYXV0aC5wcm9maWxlID8/IFwiYW1iaWVudFwiKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gIHByb2dyYW1cbiAgICAuY29tbWFuZChcImxvZ291dFwiKVxuICAgIC5kZXNjcmlwdGlvbihcIkRlbGV0ZSB0aGUgc3RvcmVkIGNyZWRlbnRpYWwgZm9yIHRoZSBzZWxlY3RlZCBwcm9maWxlXCIpXG4gICAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCB3aXRoQXV0aChvcHRpb25zKCksIGRlcGVuZGVuY2llcywgYXN5bmMgKHsgYXV0aCB9KSA9PiB7XG4gICAgICAgIGF3YWl0IGF1dGgubG9nb3V0KCk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICBwcm9ncmFtXG4gICAgLmNvbW1hbmQoXCJzdGF0dXNcIilcbiAgICAuZGVzY3JpcHRpb24oXCJTaG93IHRoZSByZXNvbHZlZCBhdXRoZW50aWNhdGlvbiBjbGllbnQgY29uZmlndXJhdGlvblwiKVxuICAgIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgd2l0aEF1dGgob3B0aW9ucygpLCBkZXBlbmRlbmNpZXMsIGFzeW5jICh7IGF1dGggfSkgPT4ge1xuICAgICAgICBkZXBlbmRlbmNpZXMud3JpdGVKc29uKGNsaWVudEluZm8oYXV0aCkpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgcmV0dXJuIHByb2dyYW07XG59XG5cbi8qKiBQYXJzZSBgYXJndmAgYW5kIHJ1biB0aGUgc2VsZWN0ZWQgYXV0aCBvcGVyYXRpb24uICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuQ2xpKGFyZ3Y6IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IGJ1aWxkUHJvZ3JhbSgpLnBhcnNlQXN5bmMoYXJndik7XG59XG5cbmV4cG9ydCB7IENvbW1hbmRlckVycm9yIH07XG4iXX0=
@@ -0,0 +1,45 @@
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
+ format: z.ZodDefault<z.ZodEnum<{
38
+ json: "json";
39
+ text: "text";
40
+ }>>;
41
+ }, z.core.$strict>;
42
+ export type AuthCliOptions = z.output<typeof AuthCliOptionsSchema>;
43
+ export type TokenCommandOptions = z.output<typeof TokenCommandOptionsSchema>;
44
+ /** Convert flat CLI fields into the Node auth package's nested options. */
45
+ export declare function databricksAuthOptions(options: AuthCliOptions): DatabricksAuthOptions;
@@ -0,0 +1,68 @@
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
+ format: z
41
+ .enum(["json", "text"])
42
+ .default("json")
43
+ .describe("Output structured token metadata or only the access token."),
44
+ })
45
+ .strict()
46
+ .describe("Options for returning a Databricks access token.");
47
+ /** Convert flat CLI fields into the Node auth package's nested options. */
48
+ export function databricksAuthOptions(options) {
49
+ return {
50
+ profile: options.profile,
51
+ host: options.host,
52
+ accountId: options.accountId,
53
+ workspaceId: options.workspaceId,
54
+ configFile: options.configFile,
55
+ clientId: options.clientId,
56
+ groupId: options.groupId,
57
+ authType: options.authType,
58
+ scopes: options.scopes.length > 0 ? options.scopes : undefined,
59
+ target: options.target,
60
+ auth: {
61
+ lockTimeoutMs: options.lockTimeoutMs,
62
+ loginTimeoutMs: options.loginTimeoutMs,
63
+ refreshBufferMs: options.refreshBufferMs,
64
+ },
65
+ preferUserToMachine: options.preferUserToMachine,
66
+ };
67
+ }
68
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hdXRoL29wdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUVILE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsMkJBQTJCLEdBRTVCLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFFeEIsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQztLQUNsQyxNQUFNLENBQUM7SUFDTixPQUFPLEVBQUUsMkJBQTJCLENBQUMsS0FBSyxDQUFDLE9BQU87SUFDbEQsSUFBSSxFQUFFLDJCQUEyQixDQUFDLEtBQUssQ0FBQyxJQUFJO0lBQzVDLFNBQVMsRUFBRSwyQkFBMkIsQ0FBQyxLQUFLLENBQUMsU0FBUztJQUN0RCxXQUFXLEVBQUUsMkJBQTJCLENBQUMsS0FBSyxDQUFDLFdBQVc7SUFDMUQsVUFBVSxFQUFFLDJCQUEyQixDQUFDLEtBQUssQ0FBQyxVQUFVO0lBQ3hELFFBQVEsRUFBRSwyQkFBMkIsQ0FBQyxLQUFLLENBQUMsUUFBUTtJQUNwRCxPQUFPLEVBQUUsMkJBQTJCLENBQUMsS0FBSyxDQUFDLE9BQU87SUFDbEQsUUFBUSxFQUFFLDJCQUEyQixDQUFDLEtBQUssQ0FBQyxRQUFRO0lBQ3BELE1BQU0sRUFBRSxDQUFDO1NBQ04sVUFBVSxDQUNULENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FDUixLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztRQUNsQixDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNoRSxDQUFDLENBQUMsS0FBSyxFQUNYLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUNsQztTQUNBLE9BQU8sQ0FBQyxFQUFFLENBQUM7U0FDWCxRQUFRLENBQUMsZUFBZSxDQUFDO0lBQzVCLE1BQU0sRUFBRSwyQkFBMkIsQ0FBQyxLQUFLLENBQUMsTUFBTTtJQUNoRCxhQUFhLEVBQUUsaUJBQWlCLENBQUMsS0FBSyxDQUFDLGFBQWE7SUFDcEQsY0FBYyxFQUFFLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxjQUFjO0lBQ3RELGVBQWUsRUFBRSxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsZUFBZTtJQUN4RCxtQkFBbUIsRUFBRSxDQUFDO1NBQ25CLE9BQU8sRUFBRTtTQUNULE9BQU8sQ0FBQyxJQUFJLENBQUM7U0FDYixRQUFRLENBQUMsbUVBQW1FLENBQUM7Q0FDakYsQ0FBQztLQUNELE1BQU0sRUFBRTtLQUNSLFFBQVEsQ0FBQyxrREFBa0QsQ0FBQyxDQUFDO0FBRWhFLE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUFHLENBQUM7S0FDdkMsTUFBTSxDQUFDO0lBQ04sWUFBWSxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLHdDQUF3QyxDQUFDO0lBQzNGLEtBQUssRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxpREFBaUQsQ0FBQztJQUM1RixNQUFNLEVBQUUsQ0FBQztTQUNOLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztTQUN0QixPQUFPLENBQUMsTUFBTSxDQUFDO1NBQ2YsUUFBUSxDQUFDLDREQUE0RCxDQUFDO0NBQzFFLENBQUM7S0FDRCxNQUFNLEVBQUU7S0FDUixRQUFRLENBQUMsa0RBQWtELENBQUMsQ0FBQztBQU1oRSwyRUFBMkU7QUFDM0UsTUFBTSxVQUFVLHFCQUFxQixDQUFDLE9BQXVCO0lBQzNELE9BQU87UUFDTCxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87UUFDeEIsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO1FBQ2xCLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUztRQUM1QixXQUFXLEVBQUUsT0FBTyxDQUFDLFdBQVc7UUFDaEMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVO1FBQzlCLFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUTtRQUMxQixPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87UUFDeEIsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRO1FBQzFCLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFNBQVM7UUFDOUQsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO1FBQ3RCLElBQUksRUFBRTtZQUNKLGFBQWEsRUFBRSxPQUFPLENBQUMsYUFBYTtZQUNwQyxjQUFjLEVBQUUsT0FBTyxDQUFDLGNBQWM7WUFDdEMsZUFBZSxFQUFFLE9BQU8sQ0FBQyxlQUFlO1NBQ3pDO1FBQ0QsbUJBQW1CLEVBQUUsT0FBTyxDQUFDLG1CQUFtQjtLQUNqRCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRGF0YWJyaWNrcyBhdXRoIGNvbW1hbmQtbGluZSBvcHRpb24gc2NoZW1hcyBhbmQgcnVudGltZSBwcm9qZWN0aW9uLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQge1xuICBBdXRoT3B0aW9uc1NjaGVtYSxcbiAgRGF0YWJyaWNrc0F1dGhPcHRpb25zU2NoZW1hLFxuICB0eXBlIERhdGFicmlja3NBdXRoT3B0aW9ucyxcbn0gZnJvbSBcIkBkYngtdG9vbHMvYXV0aC9jb25maWdcIjtcbmltcG9ydCB7IHN0cmluZ1V0aWxzIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5cbmV4cG9ydCBjb25zdCBBdXRoQ2xpT3B0aW9uc1NjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgcHJvZmlsZTogRGF0YWJyaWNrc0F1dGhPcHRpb25zU2NoZW1hLnNoYXBlLnByb2ZpbGUsXG4gICAgaG9zdDogRGF0YWJyaWNrc0F1dGhPcHRpb25zU2NoZW1hLnNoYXBlLmhvc3QsXG4gICAgYWNjb3VudElkOiBEYXRhYnJpY2tzQXV0aE9wdGlvbnNTY2hlbWEuc2hhcGUuYWNjb3VudElkLFxuICAgIHdvcmtzcGFjZUlkOiBEYXRhYnJpY2tzQXV0aE9wdGlvbnNTY2hlbWEuc2hhcGUud29ya3NwYWNlSWQsXG4gICAgY29uZmlnRmlsZTogRGF0YWJyaWNrc0F1dGhPcHRpb25zU2NoZW1hLnNoYXBlLmNvbmZpZ0ZpbGUsXG4gICAgY2xpZW50SWQ6IERhdGFicmlja3NBdXRoT3B0aW9uc1NjaGVtYS5zaGFwZS5jbGllbnRJZCxcbiAgICBncm91cElkOiBEYXRhYnJpY2tzQXV0aE9wdGlvbnNTY2hlbWEuc2hhcGUuZ3JvdXBJZCxcbiAgICBhdXRoVHlwZTogRGF0YWJyaWNrc0F1dGhPcHRpb25zU2NoZW1hLnNoYXBlLmF1dGhUeXBlLFxuICAgIHNjb3BlczogelxuICAgICAgLnByZXByb2Nlc3MoXG4gICAgICAgICh2YWx1ZSkgPT5cbiAgICAgICAgICBBcnJheS5pc0FycmF5KHZhbHVlKVxuICAgICAgICAgICAgPyB2YWx1ZS5mbGF0TWFwKChlbnRyeSkgPT4gc3RyaW5nVXRpbHMucGFyc2VMaXN0KFN0cmluZyhlbnRyeSkpKVxuICAgICAgICAgICAgOiB2YWx1ZSxcbiAgICAgICAgei5hcnJheSh6LnN0cmluZygpLnRyaW0oKS5taW4oMSkpLFxuICAgICAgKVxuICAgICAgLmRlZmF1bHQoW10pXG4gICAgICAuZGVzY3JpYmUoXCJPQXV0aCBzY29wZXMuXCIpLFxuICAgIHRhcmdldDogRGF0YWJyaWNrc0F1dGhPcHRpb25zU2NoZW1hLnNoYXBlLnRhcmdldCxcbiAgICBsb2NrVGltZW91dE1zOiBBdXRoT3B0aW9uc1NjaGVtYS5zaGFwZS5sb2NrVGltZW91dE1zLFxuICAgIGxvZ2luVGltZW91dE1zOiBBdXRoT3B0aW9uc1NjaGVtYS5zaGFwZS5sb2dpblRpbWVvdXRNcyxcbiAgICByZWZyZXNoQnVmZmVyTXM6IEF1dGhPcHRpb25zU2NoZW1hLnNoYXBlLnJlZnJlc2hCdWZmZXJNcyxcbiAgICBwcmVmZXJVc2VyVG9NYWNoaW5lOiB6XG4gICAgICAuYm9vbGVhbigpXG4gICAgICAuZGVmYXVsdCh0cnVlKVxuICAgICAgLmRlc2NyaWJlKFwiUHJlZmVyIGEgbWF0Y2hpbmcgdXNlciBwcm9maWxlIG92ZXIgc2VsZWN0ZWQgbWFjaGluZSBjcmVkZW50aWFscy5cIiksXG4gIH0pXG4gIC5zdHJpY3QoKVxuICAuZGVzY3JpYmUoXCJPcHRpb25zIHNoYXJlZCBieSBldmVyeSBEYXRhYnJpY2tzIGF1dGggY29tbWFuZC5cIik7XG5cbmV4cG9ydCBjb25zdCBUb2tlbkNvbW1hbmRPcHRpb25zU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICBmb3JjZVJlZnJlc2g6IHouYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLmRlc2NyaWJlKFwiUmVmcmVzaCB0aGUgdG9rZW4gYmVmb3JlIHJldHVybmluZyBpdC5cIiksXG4gICAgbG9naW46IHouYm9vbGVhbigpLmRlZmF1bHQodHJ1ZSkuZGVzY3JpYmUoXCJMb2cgaW4gd2hlbiBjcmVkZW50aWFscyBhcmUgbWlzc2luZyBvciBpbnZhbGlkLlwiKSxcbiAgICBmb3JtYXQ6IHpcbiAgICAgIC5lbnVtKFtcImpzb25cIiwgXCJ0ZXh0XCJdKVxuICAgICAgLmRlZmF1bHQoXCJqc29uXCIpXG4gICAgICAuZGVzY3JpYmUoXCJPdXRwdXQgc3RydWN0dXJlZCB0b2tlbiBtZXRhZGF0YSBvciBvbmx5IHRoZSBhY2Nlc3MgdG9rZW4uXCIpLFxuICB9KVxuICAuc3RyaWN0KClcbiAgLmRlc2NyaWJlKFwiT3B0aW9ucyBmb3IgcmV0dXJuaW5nIGEgRGF0YWJyaWNrcyBhY2Nlc3MgdG9rZW4uXCIpO1xuXG5leHBvcnQgdHlwZSBBdXRoQ2xpT3B0aW9ucyA9IHoub3V0cHV0PHR5cGVvZiBBdXRoQ2xpT3B0aW9uc1NjaGVtYT47XG5cbmV4cG9ydCB0eXBlIFRva2VuQ29tbWFuZE9wdGlvbnMgPSB6Lm91dHB1dDx0eXBlb2YgVG9rZW5Db21tYW5kT3B0aW9uc1NjaGVtYT47XG5cbi8qKiBDb252ZXJ0IGZsYXQgQ0xJIGZpZWxkcyBpbnRvIHRoZSBOb2RlIGF1dGggcGFja2FnZSdzIG5lc3RlZCBvcHRpb25zLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRhdGFicmlja3NBdXRoT3B0aW9ucyhvcHRpb25zOiBBdXRoQ2xpT3B0aW9ucyk6IERhdGFicmlja3NBdXRoT3B0aW9ucyB7XG4gIHJldHVybiB7XG4gICAgcHJvZmlsZTogb3B0aW9ucy5wcm9maWxlLFxuICAgIGhvc3Q6IG9wdGlvbnMuaG9zdCxcbiAgICBhY2NvdW50SWQ6IG9wdGlvbnMuYWNjb3VudElkLFxuICAgIHdvcmtzcGFjZUlkOiBvcHRpb25zLndvcmtzcGFjZUlkLFxuICAgIGNvbmZpZ0ZpbGU6IG9wdGlvbnMuY29uZmlnRmlsZSxcbiAgICBjbGllbnRJZDogb3B0aW9ucy5jbGllbnRJZCxcbiAgICBncm91cElkOiBvcHRpb25zLmdyb3VwSWQsXG4gICAgYXV0aFR5cGU6IG9wdGlvbnMuYXV0aFR5cGUsXG4gICAgc2NvcGVzOiBvcHRpb25zLnNjb3Blcy5sZW5ndGggPiAwID8gb3B0aW9ucy5zY29wZXMgOiB1bmRlZmluZWQsXG4gICAgdGFyZ2V0OiBvcHRpb25zLnRhcmdldCxcbiAgICBhdXRoOiB7XG4gICAgICBsb2NrVGltZW91dE1zOiBvcHRpb25zLmxvY2tUaW1lb3V0TXMsXG4gICAgICBsb2dpblRpbWVvdXRNczogb3B0aW9ucy5sb2dpblRpbWVvdXRNcyxcbiAgICAgIHJlZnJlc2hCdWZmZXJNczogb3B0aW9ucy5yZWZyZXNoQnVmZmVyTXMsXG4gICAgfSxcbiAgICBwcmVmZXJVc2VyVG9NYWNoaW5lOiBvcHRpb25zLnByZWZlclVzZXJUb01hY2hpbmUsXG4gIH07XG59XG4iXX0=
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
@@ -51,8 +51,9 @@ export async function prepareAndRunProjen(projenArgs, startDir) {
51
51
  /**
52
52
  * Mount `name` as a command that captures every following token verbatim and
53
53
  * hands it to the program `load()` resolves. `helpOption(false)` is what lets
54
- * `--help` through to the child instead of being answered here, and the child
55
- * program owns its own flags, so this wrapper never has to restate them.
54
+ * `--help` through to the child instead of being answered here, and
55
+ * `passThroughOptions()` keeps unknown flags in that token list so the child
56
+ * program owns them.
56
57
  */
57
58
  function addForwardedCommand(program, name, description, load) {
58
59
  program
@@ -60,6 +61,7 @@ function addForwardedCommand(program, name, description, load) {
60
61
  .description(description)
61
62
  .argument("[args...]", `arguments forwarded to ${name}`)
62
63
  .allowUnknownOption()
64
+ .passThroughOptions()
63
65
  .allowExcessArguments()
64
66
  .helpOption(false)
65
67
  .action(async (args) => {
@@ -72,6 +74,7 @@ export function buildProgram(name = PROGRAM_NAMES[0]) {
72
74
  const program = new Command()
73
75
  .name(name)
74
76
  .description("Databricks developer tools: workspace lifecycle, AppKit env, auth, tunnels, and local proxies")
77
+ .enablePositionalOptions()
75
78
  .showHelpAfterError()
76
79
  .helpOption("-h, --help", `Show ${name} help`);
77
80
  program
@@ -84,12 +87,19 @@ export function buildProgram(name = PROGRAM_NAMES[0]) {
84
87
  .action(async (projenArgs) => {
85
88
  await prepareAndRunProjen(projenArgs);
86
89
  });
87
- addForwardedCommand(program, "appkit", "AppKit helpers (env: print the environment an AppKit app resolves)", async () => (await import("@dbx-tools/cli-appkit-env/cli")).buildProgram);
88
- addForwardedCommand(program, "auth", "Authenticate to Databricks and manage OAuth tokens", async () => (await import("@dbx-tools/cli-auth/cli")).buildProgram);
89
- addForwardedCommand(program, "tunnel", "Run a public portr tunnel with an email-OTP gate", async () => (await import("@dbx-tools/cli-tunnel/cli")).buildProgram);
90
- addForwardedCommand(program, "lakebase-proxy", "Run the Node Databricks Lakebase PostgreSQL proxy", async () => (await import("@dbx-tools/cli-lakebase-proxy/cli")).buildProgram);
91
- addForwardedCommand(program, "model-gateway", "Run the foreground AppKit Databricks model gateway", async () => (await import("@dbx-tools/cli-model-gateway/cli")).buildProgram);
92
- addForwardedCommand(program, "graphiti", "Run Graphiti or manage its current-user desktop service", async () => (await import("@dbx-tools/cli-graphiti/cli")).buildProgram);
90
+ addForwardedCommand(program, "appkit", "AppKit helpers (env: print the environment an AppKit app resolves)", async () => (await import("./appkit/cli.js")).buildProgram);
91
+ addForwardedCommand(program, "auth", "Authenticate to Databricks and manage OAuth tokens", async () => (await import("./auth/cli.js")).buildProgram);
92
+ addForwardedCommand(program, "tunnel", "Run a public portr tunnel with an email-OTP gate", async () => (await import("./tunnel/cli.js")).buildProgram);
93
+ addForwardedCommand(program, "lakebase-proxy", "Run the Node Databricks Lakebase PostgreSQL proxy", async () => (await import("./lakebase-proxy/cli.js")).buildProgram);
94
+ addForwardedCommand(program, "model-gateway", "Run the foreground AppKit Databricks model gateway", async () => (await import("./model-gateway/cli.js")).buildProgram);
95
+ addForwardedCommand(program, "genie", "Run managed Genie Code through a local Databricks model gateway", async () => (await import("./genie-code/cli.js")).buildProgram);
96
+ addForwardedCommand(program, "graphiti", "Run Graphiti or manage its current-user desktop service", async () => (await import("./graphiti/cli.js")).buildProgram);
97
+ return program;
98
+ }
99
+ /** Build the complete command tree used for generated documentation. */
100
+ export async function buildDocumentationProgram(name = PROGRAM_NAMES[0]) {
101
+ const program = buildProgram(name);
102
+ 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("./genie-code/cli.js")).buildProgram("genie"), (await import("./graphiti/cli.js")).buildProgram("graphiti"));
93
103
  return program;
94
104
  }
95
105
  /**
@@ -104,4 +114,4 @@ function programName(argv) {
104
114
  export async function runCli(argv) {
105
115
  await buildProgram(programName(argv)).parseAsync(argv);
106
116
  }
107
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDcEMsT0FBTyxFQUNMLGtCQUFrQixFQUNsQixtQkFBbUIsRUFDbkIsZUFBZSxFQUNmLGFBQWEsR0FDZCxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ25FLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRTlFLHNFQUFzRTtBQUN0RSxNQUFNLGFBQWEsR0FBRyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQVUsQ0FBQztBQUVwRDs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxtQkFBbUIsQ0FBQyxVQUFvQixFQUFFLFFBQWlCO0lBQy9FLE1BQU0sSUFBSSxHQUFHLE1BQU0saUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDL0MsSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUN6QixrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QixPQUFPO0lBQ1QsQ0FBQztJQUNELElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDekIsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BCLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QixNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMxQixPQUFPO0lBQ1QsQ0FBQztJQUNELG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFD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QkFBNkIsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUN2RSxDQUFDO0lBRUYsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQVMsV0FBVyxDQUFDLElBQWM7SUFDakMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLG1CQUFtQixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDekYsT0FBTyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxTQUFTLEtBQUssT0FBTyxDQUFDLElBQUksYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RGLENBQUM7QUFFRCxvRUFBb0U7QUFDcEUsTUFBTSxDQUFDLEtBQUssVUFBVSxNQUFNLENBQUMsSUFBYztJQUN6QyxNQUFNLFlBQVksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDekQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29tbWFuZGVyIGVudHJ5IGZvciBgZGJ4YCBhbmQgaXRzIGBkYngtdG9vbHNgIGFsaWFzLlxuICpcbiAqIGBkZXZgIGJvb3RzdHJhcHMgb3IgcmVwYWlycyBhIHdvcmtzcGFjZSBhbmQgZm9yd2FyZHMgdG8gcHJvamVuLlxuICogYGFwcGtpdGAgcHJvdmlkZXMgQXBwS2l0IGVudmlyb25tZW50IGhlbHBlcnMuXG4gKiBgYXV0aGAgbWFuYWdlcyBEYXRhYnJpY2tzIE9BdXRoIGFuZCBhY2Nlc3MgdG9rZW5zLlxuICogYHR1bm5lbGAgcnVucyBhIHB1YmxpYyBwb3J0ciB0dW5uZWwgd2l0aCBwYXNzd29yZGxlc3MgYWNjZXNzIGdhdGluZy5cbiAqXG4gKiBGZWF0dXJlIGNvbW1hbmRzIGxvYWQgdGhlaXIgc2libGluZyBwYWNrYWdlcyBvbmx5IHdoZW4gc2VsZWN0ZWQgYW5kIGZvcndhcmRcbiAqIHRoZWlyIGNvbXBsZXRlIGFyZ3VtZW50IGxpc3QsIGluY2x1ZGluZyBgLS1oZWxwYC5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cbmltcG9ydCB7IGJhc2VuYW1lIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gXCJjb21tYW5kZXJcIjtcbmltcG9ydCB7XG4gIGJvb3RzdHJhcFdvcmtzcGFjZSxcbiAgZW5zdXJlRW5naW5lQ3VycmVudCxcbiAgcnVuSW5pdGlhbFN5bnRoLFxuICBzZWVkVG9vbGNoYWluLFxufSBmcm9tIFwiLi9ib290c3RyYXAudHNcIjtcbmltcG9ydCB7IGVuc3VyZVdvcmtzcGFjZVJlYWR5LCBydW5CdW4sIHJ1blByb2plbiB9IGZyb20gXCIuL2J1bi50c1wiO1xuaW1wb3J0IHsgZmluZFdvcmtzcGFjZVJvb3QsIG5lZWRzQm9vdHN0cmFwLCBuZWVkc1Rvb2xjaGFpbiB9IGZyb20gXCIuL3Jvb3QudHNcIjtcblxuLyoqIENvbW1hbmRzIHRoZSBiaW4gZXhwb3NlcywgYW5kIHRoZSBuYW1lcyBoZWxwIGlzIHJlbmRlcmVkIHVuZGVyLiAqL1xuY29uc3QgUFJPR1JBTV9OQU1FUyA9IFtcImRieFwiLCBcImRieC10b29sc1wiXSBhcyBjb25zdDtcblxuLyoqXG4gKiBQcmVwYXJlIHRoZSB3b3Jrc3BhY2UgYXQgYHJvb3RgLCB0aGVuIHJ1biBwcm9qZW4gKHZpYSBidW4pIHdpdGggYHByb2plbkFyZ3NgLlxuICpcbiAqIFRocmVlIGNhc2VzLCBpbiBvcmRlcjpcbiAqICAgLSBubyBgLnByb2plbnJjLnRzYCBhdCBhbGwgLT4gZnVsbCBib290c3RyYXAgKHNjYWZmb2xkICsgaW5zdGFsbCArIHN5bnRoKSxcbiAqICAgICB3aGljaCBhbHJlYWR5IHJ1bnMgdGhlIGluaXRpYWwgc3ludGg7IG5vdGhpbmcgbW9yZSB0byBmb3J3YXJkLlxuICogICAtIGEgYC5wcm9qZW5yYy50c2AgYnV0IHRoZSBlbmdpbmUvdG9vbGNoYWluIGlzbid0IGluc3RhbGxlZCAoZS5nLiBhIGZyZXNobHlcbiAqICAgICBjb3BpZWQgcHJvamVjdCB3aG9zZSBnZW5lcmF0ZWQgZmlsZXMgKyBtYW5pZmVzdHMgYXJlIGdpdGlnbm9yZWQpIC0+IHNlZWRcbiAqICAgICB0aGUgdG9vbGNoYWluLCB0aGVuIHJ1biB0aGUgSU5JVElBTCBzeW50aCBkaXJlY3RseSAodGhlIHByb2plbiB0YXNrcyB0aGVcbiAqICAgICBhcmdzIHdvdWxkIG5hbWUsIGxpa2UgYHN5bmNgLCBkb24ndCBleGlzdCB1bnRpbCBgLnByb2plbnJjLnRzYCBoYXMgcnVuXG4gKiAgICAgb25jZSksIGFuZCBpbnN0YWxsLiBEb24ndCBmb3J3YXJkIGBwcm9qZW5BcmdzYCAtIHRoZSBzeW50aCBpcyB0aGUgd29yay5cbiAqICAgLSBvdGhlcndpc2UgKGVzdGFibGlzaGVkIHdvcmtzcGFjZSkgLT4gZW5zdXJlIGRlcHMsIGJyaW5nIHRoZSBlbmdpbmUgdXAgdG9cbiAqICAgICB0aGlzIENMSSdzIHZlcnNpb24sIHRoZW4gZm9yd2FyZCB0byBwcm9qZW4uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcmVwYXJlQW5kUnVuUHJvamVuKHByb2plbkFyZ3M6IHN0cmluZ1tdLCBzdGFydERpcj86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCByb290ID0gYXdhaXQgZmluZFdvcmtzcGFjZVJvb3Qoc3RhcnREaXIpO1xuICBpZiAobmVlZHNCb290c3RyYXAocm9vdCkpIHtcbiAgICBib290c3RyYXBXb3Jrc3BhY2Uocm9vdCk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChuZWVkc1Rvb2xjaGFpbihyb290KSkge1xuICAgIHNlZWRUb29sY2hhaW4ocm9vdCk7XG4gICAgcnVuSW5pdGlhbFN5bnRoKHJvb3QpO1xuICAgIHJ1bkJ1bihbXCJpbnN0YWxsXCJdLCByb290KTtcbiAgICByZXR1cm47XG4gIH1cbiAgZW5zdXJlV29ya3NwYWNlUmVhZHkocm9vdCk7XG4gIGVuc3VyZUVuZ2luZUN1cnJlbnQocm9vdCk7XG4gIHJ1blByb2plbihwcm9qZW5BcmdzLCByb290KTtcbn1cblxuLyoqXG4gKiBNb3VudCBgbmFtZWAgYXMgYSBjb21tYW5kIHRoYXQgY2FwdHVyZXMgZXZlcnkgZm9sbG93aW5nIHRva2VuIHZlcmJhdGltIGFuZFxuICogaGFuZHMgaXQgdG8gdGhlIHByb2dyYW0gYGxvYWQoKWAgcmVzb2x2ZXMuIGBoZWxwT3B0aW9uKGZhbHNlKWAgaXMgd2hhdCBsZXRzXG4gKiBgLS1oZWxwYCB0aHJvdWdoIHRvIHRoZSBjaGlsZCBpbnN0ZWFkIG9mIGJlaW5nIGFuc3dlcmVkIGhlcmUsIGFuZCB0aGUgY2hpbGRcbiAqIHByb2dyYW0gb3ducyBpdHMgb3duIGZsYWdzLCBzbyB0aGlzIHdyYXBwZXIgbmV2ZXIgaGFzIHRvIHJlc3RhdGUgdGhlbS5cbiAqL1xuZnVuY3Rpb24gYWRkRm9yd2FyZGVkQ29tbWFuZChcbiAgcHJvZ3JhbTogQ29tbWFuZCxcbiAgbmFtZTogc3RyaW5nLFxuICBkZXNjcmlwdGlvbjogc3RyaW5nLFxuICBsb2FkOiAoKSA9PiBQcm9taXNlPChuYW1lOiBzdHJpbmcpID0+IENvbW1hbmQ+LFxuKTogdm9pZCB7XG4gIHByb2dyYW1cbiAgICAuY29tbWFuZChuYW1lKVxuICAgIC5kZXNjcmlwdGlvbihkZXNjcmlwdGlvbilcbiAgICAuYXJndW1lbnQoXCJbYXJncy4uLl1cIiwgYGFyZ3VtZW50cyBmb3J3YXJkZWQgdG8gJHtuYW1lfWApXG4gICAgLmFsbG93VW5rbm93bk9wdGlvbigpXG4gICAgLmFsbG93RXhjZXNzQXJndW1lbnRzKClcbiAgICAuaGVscE9wdGlvbihmYWxzZSlcbiAgICAuYWN0aW9uKGFzeW5jIChhcmdzOiBzdHJpbmdbXSkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRQcm9ncmFtID0gYXdhaXQgbG9hZCgpO1xuICAgICAgYXdhaXQgYnVpbGRQcm9ncmFtKGAke3Byb2dyYW0ubmFtZSgpfSAke25hbWV9YCkucGFyc2VBc3luYyhhcmdzLCB7IGZyb206IFwidXNlclwiIH0pO1xuICAgIH0pO1xufVxuXG4vKiogQnVpbGQgdGhlIGBkYnhgIGNvbW1hbmRlciBwcm9ncmFtIChubyBzaWRlIGVmZmVjdHMgdW50aWwgcGFyc2VkKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFByb2dyYW0obmFtZTogc3RyaW5nID0gUFJPR1JBTV9OQU1FU1swXSk6IENvbW1hbmQge1xuICBjb25zdCBwcm9ncmFtID0gbmV3IENvbW1hbmQoKVxuICAgIC5uYW1lKG5hbWUpXG4gICAgLmRlc2NyaXB0aW9uKFxuICAgICAgXCJEYXRhYnJpY2tzIGRldmVsb3BlciB0b29sczogd29ya3NwYWNlIGxpZmVjeWNsZSwgQXBwS2l0IGVudiwgYXV0aCwgdHVubmVscywgYW5kIGxvY2FsIHByb3hpZXNcIixcbiAgICApXG4gICAgLnNob3dIZWxwQWZ0ZXJFcnJvcigpXG4gICAgLmhlbHBPcHRpb24oXCItaCwgLS1oZWxwXCIsIGBTaG93ICR7bmFtZX0gaGVscGApO1xuXG4gIHByb2dyYW1cbiAgICAuY29tbWFuZChcImRldlwiKVxuICAgIC5kZXNjcmlwdGlvbihcIkJvb3RzdHJhcCBvciByZXBhaXIgYSBkYngtdG9vbHMgd29ya3NwYWNlLCB0aGVuIGZvcndhcmQgdG8gcHJvamVuXCIpXG4gICAgLmFyZ3VtZW50KFwiW3Byb2plbkFyZ3MuLi5dXCIsIFwicHJvamVuIHRhc2sgYW5kIGFyZ3VtZW50cyAoZS5nLiBzeW5jIC0td2F0Y2gpXCIpXG4gICAgLmFsbG93VW5rbm93bk9wdGlvbigpXG4gICAgLmFsbG93RXhjZXNzQXJndW1lbnRzKClcbiAgICAuaGVscE9wdGlvbihmYWxzZSlcbiAgICAuYWN0aW9uKGFzeW5jIChwcm9qZW5BcmdzOiBzdHJpbmdbXSkgPT4ge1xuICAgICAgYXdhaXQgcHJlcGFyZUFuZFJ1blByb2plbihwcm9qZW5BcmdzKTtcbiAgICB9KTtcblxuICBhZGRGb3J3YXJkZWRDb21tYW5kKFxuICAgIHByb2dyYW0sXG4gICAgXCJhcHBraXRcIixcbiAgICBcIkFwcEtpdCBoZWxwZXJzIChlbnY6IHByaW50IHRoZSBlbnZpcm9ubWVudCBhbiBBcHBLaXQgYXBwIHJlc29sdmVzKVwiLFxuICAgIGFzeW5jICgpID0+IChhd2FpdCBpbXBvcnQoXCJAZGJ4LXRvb2xzL2NsaS1hcHBraXQtZW52L2NsaVwiKSkuYnVpbGRQcm9ncmFtLFxuICApO1xuXG4gIGFkZEZvcndhcmRlZENvbW1hbmQoXG4gICAgcHJvZ3JhbSxcbiAgICBcImF1dGhcIixcbiAgICBcIkF1dGhlbnRpY2F0ZSB0byBEYXRhYnJpY2tzIGFuZCBtYW5hZ2UgT0F1dGggdG9rZW5zXCIsXG4gICAgYXN5bmMgKCkgPT4gKGF3YWl0IGltcG9ydChcIkBkYngtdG9vbHMvY2xpLWF1dGgvY2xpXCIpKS5idWlsZFByb2dyYW0sXG4gICk7XG5cbiAgYWRkRm9yd2FyZGVkQ29tbWFuZChcbiAgICBwcm9ncmFtLFxuICAgIFwidHVubmVsXCIsXG4gICAgXCJSdW4gYSBwdWJsaWMgcG9ydHIgdHVubmVsIHdpdGggYW4gZW1haWwtT1RQIGdhdGVcIixcbiAgICBhc3luYyAoKSA9PiAoYXdhaXQgaW1wb3J0KFwiQGRieC10b29scy9jbGktdHVubmVsL2NsaVwiKSkuYnVpbGRQcm9ncmFtLFxuICApO1xuXG4gIGFkZEZvcndhcmRlZENvbW1hbmQoXG4gICAgcHJvZ3JhbSxcbiAgICBcImxha2ViYXNlLXByb3h5XCIsXG4gICAgXCJSdW4gdGhlIE5vZGUgRGF0YWJyaWNrcyBMYWtlYmFzZSBQb3N0Z3JlU1FMIHByb3h5XCIsXG4gICAgYXN5bmMgKCkgPT4gKGF3YWl0IGltcG9ydChcIkBkYngtdG9vbHMvY2xpLWxha2ViYXNlLXByb3h5L2NsaVwiKSkuYnVpbGRQcm9ncmFtLFxuICApO1xuXG4gIGFkZEZvcndhcmRlZENvbW1hbmQoXG4gICAgcHJvZ3JhbSxcbiAgICBcIm1vZGVsLWdhdGV3YXlcIixcbiAgICBcIlJ1biB0aGUgZm9yZWdyb3VuZCBBcHBLaXQgRGF0YWJyaWNrcyBtb2RlbCBnYXRld2F5XCIsXG4gICAgYXN5bmMgKCkgPT4gKGF3YWl0IGltcG9ydChcIkBkYngtdG9vbHMvY2xpLW1vZGVsLWdhdGV3YXkvY2xpXCIpKS5idWlsZFByb2dyYW0sXG4gICk7XG5cbiAgYWRkRm9yd2FyZGVkQ29tbWFuZChcbiAgICBwcm9ncmFtLFxuICAgIFwiZ3JhcGhpdGlcIixcbiAgICBcIlJ1biBHcmFwaGl0aSBvciBtYW5hZ2UgaXRzIGN1cnJlbnQtdXNlciBkZXNrdG9wIHNlcnZpY2VcIixcbiAgICBhc3luYyAoKSA9PiAoYXdhaXQgaW1wb3J0KFwiQGRieC10b29scy9jbGktZ3JhcGhpdGkvY2xpXCIpKS5idWlsZFByb2dyYW0sXG4gICk7XG5cbiAgcmV0dXJuIHByb2dyYW07XG59XG5cbi8qKlxuICogUHJvZ3JhbSBuYW1lIGZvciBoZWxwIG91dHB1dDogd2hpY2hldmVyIGJpbiB0aGUgdXNlciBhY3R1YWxseSB0eXBlZCwgc29cbiAqIGBkYngtdG9vbHMgLS1oZWxwYCBkb2Vzbid0IGRvY3VtZW50IGl0c2VsZiBhcyBgZGJ4YC4gRmFsbHMgYmFjayB0byBgZGJ4YC5cbiAqL1xuZnVuY3Rpb24gcHJvZ3JhbU5hbWUoYXJndjogc3RyaW5nW10pOiBzdHJpbmcge1xuICBjb25zdCBpbnZva2VkID0gYXJndlsxXSA/IGJhc2VuYW1lKGFyZ3ZbMV0pLnJlcGxhY2UoL1xcLig/OltjbV0/W2p0XXMpJC8sIFwiXCIpIDogdW5kZWZpbmVkO1xuICByZXR1cm4gUFJPR1JBTV9OQU1FUy5maW5kKChjYW5kaWRhdGUpID0+IGNhbmRpZGF0ZSA9PT0gaW52b2tlZCkgPz8gUFJPR1JBTV9OQU1FU1swXTtcbn1cblxuLyoqIFBhcnNlIGBhcmd2YCAoYSBgcHJvY2Vzcy5hcmd2YCkgYW5kIHJ1biB0aGUgbWF0Y2hpbmcgY29tbWFuZC4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5DbGkoYXJndjogc3RyaW5nW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgYnVpbGRQcm9ncmFtKHByb2dyYW1OYW1lKGFyZ3YpKS5wYXJzZUFzeW5jKGFyZ3YpO1xufVxuIl19
117
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDcEMsT0FBTyxFQUNMLGtCQUFrQixFQUNsQixtQkFBbUIsRUFDbkIsZUFBZSxFQUNmLGFBQWEsR0FDZCxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ25FLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRTlFLHNFQUFzRTtBQUN0RSxNQUFNLGFBQWEsR0FBRyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQVUsQ0FBQztBQUVwRDs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxtQkFBbUIsQ0FBQyxVQUFvQixFQUFFLFFBQWlCO0lBQy9FLE1BQU0sSUFBSSxHQUFHLE1BQU0saUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDL0MsSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUN6QixrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QixPQUFPO0lBQ1QsQ0FBQztJQUNELElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDekIsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BCLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QixNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMxQixPQUFPO0lBQ1QsQ0FBQztJQUNELG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFD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QyxVQUFVLENBQUMsQ0FDN0QsQ0FBQztJQUNGLE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFTLFdBQVcsQ0FBQyxJQUFjO0lBQ2pDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ3pGLE9BQU8sYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsU0FBUyxLQUFLLE9BQU8sQ0FBQyxJQUFJLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0RixDQUFDO0FBRUQsb0VBQW9FO0FBQ3BFLE1BQU0sQ0FBQyxLQUFLLFVBQVUsTUFBTSxDQUFDLElBQWM7SUFDekMsTUFBTSxZQUFZLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3pELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvbW1hbmRlciBlbnRyeSBmb3IgYGRieGAgYW5kIGl0cyBgZGJ4LXRvb2xzYCBhbGlhcy5cbiAqXG4gKiBgZGV2YCBib290c3RyYXBzIG9yIHJlcGFpcnMgYSB3b3Jrc3BhY2UgYW5kIGZvcndhcmRzIHRvIHByb2plbi5cbiAqIGBhcHBraXRgIHByb3ZpZGVzIEFwcEtpdCBlbnZpcm9ubWVudCBoZWxwZXJzLlxuICogYGF1dGhgIG1hbmFnZXMgRGF0YWJyaWNrcyBPQXV0aCBhbmQgYWNjZXNzIHRva2Vucy5cbiAqIGB0dW5uZWxgIHJ1bnMgYSBwdWJsaWMgcG9ydHIgdHVubmVsIHdpdGggcGFzc3dvcmRsZXNzIGFjY2VzcyBnYXRpbmcuXG4gKlxuICogRmVhdHVyZSBjb21tYW5kcyBsb2FkIHRoZWlyIHNpYmxpbmcgcGFja2FnZXMgb25seSB3aGVuIHNlbGVjdGVkIGFuZCBmb3J3YXJkXG4gKiB0aGVpciBjb21wbGV0ZSBhcmd1bWVudCBsaXN0LCBpbmNsdWRpbmcgYC0taGVscGAuXG4gKlxuICogQG1vZHVsZVxuICovXG5pbXBvcnQgeyBiYXNlbmFtZSB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IENvbW1hbmQgfSBmcm9tIFwiY29tbWFuZGVyXCI7XG5pbXBvcnQge1xuICBib290c3RyYXBXb3Jrc3BhY2UsXG4gIGVuc3VyZUVuZ2luZUN1cnJlbnQsXG4gIHJ1bkluaXRpYWxTeW50aCxcbiAgc2VlZFRvb2xjaGFpbixcbn0gZnJvbSBcIi4vYm9vdHN0cmFwLnRzXCI7XG5pbXBvcnQgeyBlbnN1cmVXb3Jrc3BhY2VSZWFkeSwgcnVuQnVuLCBydW5Qcm9qZW4gfSBmcm9tIFwiLi9idW4udHNcIjtcbmltcG9ydCB7IGZpbmRXb3Jrc3BhY2VSb290LCBuZWVkc0Jvb3RzdHJhcCwgbmVlZHNUb29sY2hhaW4gfSBmcm9tIFwiLi9yb290LnRzXCI7XG5cbi8qKiBDb21tYW5kcyB0aGUgYmluIGV4cG9zZXMsIGFuZCB0aGUgbmFtZXMgaGVscCBpcyByZW5kZXJlZCB1bmRlci4gKi9cbmNvbnN0IFBST0dSQU1fTkFNRVMgPSBbXCJkYnhcIiwgXCJkYngtdG9vbHNcIl0gYXMgY29uc3Q7XG5cbi8qKlxuICogUHJlcGFyZSB0aGUgd29ya3NwYWNlIGF0IGByb290YCwgdGhlbiBydW4gcHJvamVuICh2aWEgYnVuKSB3aXRoIGBwcm9qZW5BcmdzYC5cbiAqXG4gKiBUaHJlZSBjYXNlcywgaW4gb3JkZXI6XG4gKiAgIC0gbm8gYC5wcm9qZW5yYy50c2AgYXQgYWxsIC0+IGZ1bGwgYm9vdHN0cmFwIChzY2FmZm9sZCArIGluc3RhbGwgKyBzeW50aCksXG4gKiAgICAgd2hpY2ggYWxyZWFkeSBydW5zIHRoZSBpbml0aWFsIHN5bnRoOyBub3RoaW5nIG1vcmUgdG8gZm9yd2FyZC5cbiAqICAgLSBhIGAucHJvamVucmMudHNgIGJ1dCB0aGUgZW5naW5lL3Rvb2xjaGFpbiBpc24ndCBpbnN0YWxsZWQgKGUuZy4gYSBmcmVzaGx5XG4gKiAgICAgY29waWVkIHByb2plY3Qgd2hvc2UgZ2VuZXJhdGVkIGZpbGVzICsgbWFuaWZlc3RzIGFyZSBnaXRpZ25vcmVkKSAtPiBzZWVkXG4gKiAgICAgdGhlIHRvb2xjaGFpbiwgdGhlbiBydW4gdGhlIElOSVRJQUwgc3ludGggZGlyZWN0bHkgKHRoZSBwcm9qZW4gdGFza3MgdGhlXG4gKiAgICAgYXJncyB3b3VsZCBuYW1lLCBsaWtlIGBzeW5jYCwgZG9uJ3QgZXhpc3QgdW50aWwgYC5wcm9qZW5yYy50c2AgaGFzIHJ1blxuICogICAgIG9uY2UpLCBhbmQgaW5zdGFsbC4gRG9uJ3QgZm9yd2FyZCBgcHJvamVuQXJnc2AgLSB0aGUgc3ludGggaXMgdGhlIHdvcmsuXG4gKiAgIC0gb3RoZXJ3aXNlIChlc3RhYmxpc2hlZCB3b3Jrc3BhY2UpIC0+IGVuc3VyZSBkZXBzLCBicmluZyB0aGUgZW5naW5lIHVwIHRvXG4gKiAgICAgdGhpcyBDTEkncyB2ZXJzaW9uLCB0aGVuIGZvcndhcmQgdG8gcHJvamVuLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJlcGFyZUFuZFJ1blByb2plbihwcm9qZW5BcmdzOiBzdHJpbmdbXSwgc3RhcnREaXI/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3Qgcm9vdCA9IGF3YWl0IGZpbmRXb3Jrc3BhY2VSb290KHN0YXJ0RGlyKTtcbiAgaWYgKG5lZWRzQm9vdHN0cmFwKHJvb3QpKSB7XG4gICAgYm9vdHN0cmFwV29ya3NwYWNlKHJvb3QpO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAobmVlZHNUb29sY2hhaW4ocm9vdCkpIHtcbiAgICBzZWVkVG9vbGNoYWluKHJvb3QpO1xuICAgIHJ1bkluaXRpYWxTeW50aChyb290KTtcbiAgICBydW5CdW4oW1wiaW5zdGFsbFwiXSwgcm9vdCk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGVuc3VyZVdvcmtzcGFjZVJlYWR5KHJvb3QpO1xuICBlbnN1cmVFbmdpbmVDdXJyZW50KHJvb3QpO1xuICBydW5Qcm9qZW4ocHJvamVuQXJncywgcm9vdCk7XG59XG5cbi8qKlxuICogTW91bnQgYG5hbWVgIGFzIGEgY29tbWFuZCB0aGF0IGNhcHR1cmVzIGV2ZXJ5IGZvbGxvd2luZyB0b2tlbiB2ZXJiYXRpbSBhbmRcbiAqIGhhbmRzIGl0IHRvIHRoZSBwcm9ncmFtIGBsb2FkKClgIHJlc29sdmVzLiBgaGVscE9wdGlvbihmYWxzZSlgIGlzIHdoYXQgbGV0c1xuICogYC0taGVscGAgdGhyb3VnaCB0byB0aGUgY2hpbGQgaW5zdGVhZCBvZiBiZWluZyBhbnN3ZXJlZCBoZXJlLCBhbmRcbiAqIGBwYXNzVGhyb3VnaE9wdGlvbnMoKWAga2VlcHMgdW5rbm93biBmbGFncyBpbiB0aGF0IHRva2VuIGxpc3Qgc28gdGhlIGNoaWxkXG4gKiBwcm9ncmFtIG93bnMgdGhlbS5cbiAqL1xuZnVuY3Rpb24gYWRkRm9yd2FyZGVkQ29tbWFuZChcbiAgcHJvZ3JhbTogQ29tbWFuZCxcbiAgbmFtZTogc3RyaW5nLFxuICBkZXNjcmlwdGlvbjogc3RyaW5nLFxuICBsb2FkOiAoKSA9PiBQcm9taXNlPChuYW1lOiBzdHJpbmcpID0+IENvbW1hbmQ+LFxuKTogdm9pZCB7XG4gIHByb2dyYW1cbiAgICAuY29tbWFuZChuYW1lKVxuICAgIC5kZXNjcmlwdGlvbihkZXNjcmlwdGlvbilcbiAgICAuYXJndW1lbnQoXCJbYXJncy4uLl1cIiwgYGFyZ3VtZW50cyBmb3J3YXJkZWQgdG8gJHtuYW1lfWApXG4gICAgLmFsbG93VW5rbm93bk9wdGlvbigpXG4gICAgLnBhc3NUaHJvdWdoT3B0aW9ucygpXG4gICAgLmFsbG93RXhjZXNzQXJndW1lbnRzKClcbiAgICAuaGVscE9wdGlvbihmYWxzZSlcbiAgICAuYWN0aW9uKGFzeW5jIChhcmdzOiBzdHJpbmdbXSkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRQcm9ncmFtID0gYXdhaXQgbG9hZCgpO1xuICAgICAgYXdhaXQgYnVpbGRQcm9ncmFtKGAke3Byb2dyYW0ubmFtZSgpfSAke25hbWV9YCkucGFyc2VBc3luYyhhcmdzLCB7IGZyb206IFwidXNlclwiIH0pO1xuICAgIH0pO1xufVxuXG4vKiogQnVpbGQgdGhlIGBkYnhgIGNvbW1hbmRlciBwcm9ncmFtIChubyBzaWRlIGVmZmVjdHMgdW50aWwgcGFyc2VkKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFByb2dyYW0obmFtZTogc3RyaW5nID0gUFJPR1JBTV9OQU1FU1swXSk6IENvbW1hbmQge1xuICBjb25zdCBwcm9ncmFtID0gbmV3IENvbW1hbmQoKVxuICAgIC5uYW1lKG5hbWUpXG4gICAgLmRlc2NyaXB0aW9uKFxuICAgICAgXCJEYXRhYnJpY2tzIGRldmVsb3BlciB0b29sczogd29ya3NwYWNlIGxpZmVjeWNsZSwgQXBwS2l0IGVudiwgYXV0aCwgdHVubmVscywgYW5kIGxvY2FsIHByb3hpZXNcIixcbiAgICApXG4gICAgLmVuYWJsZVBvc2l0aW9uYWxPcHRpb25zKClcbiAgICAuc2hvd0hlbHBBZnRlckVycm9yKClcbiAgICAuaGVscE9wdGlvbihcIi1oLCAtLWhlbHBcIiwgYFNob3cgJHtuYW1lfSBoZWxwYCk7XG5cbiAgcHJvZ3JhbVxuICAgIC5jb21tYW5kKFwiZGV2XCIpXG4gICAgLmRlc2NyaXB0aW9uKFwiQm9vdHN0cmFwIG9yIHJlcGFpciBhIGRieC10b29scyB3b3Jrc3BhY2UsIHRoZW4gZm9yd2FyZCB0byBwcm9qZW5cIilcbiAgICAuYXJndW1lbnQoXCJbcHJvamVuQXJncy4uLl1cIiwgXCJwcm9qZW4gdGFzayBhbmQgYXJndW1lbnRzIChlLmcuIHN5bmMgLS13YXRjaClcIilcbiAgICAuYWxsb3dVbmtub3duT3B0aW9uKClcbiAgICAuYWxsb3dFeGNlc3NBcmd1bWVudHMoKVxuICAgIC5oZWxwT3B0aW9uKGZhbHNlKVxuICAgIC5hY3Rpb24oYXN5bmMgKHByb2plbkFyZ3M6IHN0cmluZ1tdKSA9PiB7XG4gICAgICBhd2FpdCBwcmVwYXJlQW5kUnVuUHJvamVuKHByb2plbkFyZ3MpO1xuICAgIH0pO1xuXG4gIGFkZEZvcndhcmRlZENvbW1hbmQoXG4gICAgcHJvZ3JhbSxcbiAgICBcImFwcGtpdFwiLFxuICAgIFwiQXBwS2l0IGhlbHBlcnMgKGVudjogcHJpbnQgdGhlIGVudmlyb25tZW50IGFuIEFwcEtpdCBhcHAgcmVzb2x2ZXMpXCIsXG4gICAgYXN5bmMgKCkgPT4gKGF3YWl0IGltcG9ydChcIi4vYXBwa2l0L2NsaS50c1wiKSkuYnVpbGRQcm9ncmFtLFxuICApO1xuXG4gIGFkZEZvcndhcmRlZENvbW1hbmQoXG4gICAgcHJvZ3JhbSxcbiAgICBcImF1dGhcIixcbiAgICBcIkF1dGhlbnRpY2F0ZSB0byBEYXRhYnJpY2tzIGFuZCBtYW5hZ2UgT0F1dGggdG9rZW5zXCIsXG4gICAgYXN5bmMgKCkgPT4gKGF3YWl0IGltcG9ydChcIi4vYXV0aC9jbGkudHNcIikpLmJ1aWxkUHJvZ3JhbSxcbiAgKTtcblxuICBhZGRGb3J3YXJkZWRDb21tYW5kKFxuICAgIHByb2dyYW0sXG4gICAgXCJ0dW5uZWxcIixcbiAgICBcIlJ1biBhIHB1YmxpYyBwb3J0ciB0dW5uZWwgd2l0aCBhbiBlbWFpbC1PVFAgZ2F0ZVwiLFxuICAgIGFzeW5jICgpID0+IChhd2FpdCBpbXBvcnQoXCIuL3R1bm5lbC9jbGkudHNcIikpLmJ1aWxkUHJvZ3JhbSxcbiAgKTtcblxuICBhZGRGb3J3YXJkZWRDb21tYW5kKFxuICAgIHByb2dyYW0sXG4gICAgXCJsYWtlYmFzZS1wcm94eVwiLFxuICAgIFwiUnVuIHRoZSBOb2RlIERhdGFicmlja3MgTGFrZWJhc2UgUG9zdGdyZVNRTCBwcm94eVwiLFxuICAgIGFzeW5jICgpID0+IChhd2FpdCBpbXBvcnQoXCIuL2xha2ViYXNlLXByb3h5L2NsaS50c1wiKSkuYnVpbGRQcm9ncmFtLFxuICApO1xuXG4gIGFkZEZvcndhcmRlZENvbW1hbmQoXG4gICAgcHJvZ3JhbSxcbiAgICBcIm1vZGVsLWdhdGV3YXlcIixcbiAgICBcIlJ1biB0aGUgZm9yZWdyb3VuZCBBcHBLaXQgRGF0YWJyaWNrcyBtb2RlbCBnYXRld2F5XCIsXG4gICAgYXN5bmMgKCkgPT4gKGF3YWl0IGltcG9ydChcIi4vbW9kZWwtZ2F0ZXdheS9jbGkudHNcIikpLmJ1aWxkUHJvZ3JhbSxcbiAgKTtcblxuICBhZGRGb3J3YXJkZWRDb21tYW5kKFxuICAgIHByb2dyYW0sXG4gICAgXCJnZW5pZVwiLFxuICAgIFwiUnVuIG1hbmFnZWQgR2VuaWUgQ29kZSB0aHJvdWdoIGEgbG9jYWwgRGF0YWJyaWNrcyBtb2RlbCBnYXRld2F5XCIsXG4gICAgYXN5bmMgKCkgPT4gKGF3YWl0IGltcG9ydChcIi4vZ2VuaWUtY29kZS9jbGkudHNcIikpLmJ1aWxkUHJvZ3JhbSxcbiAgKTtcblxuICBhZGRGb3J3YXJkZWRDb21tYW5kKFxuICAgIHByb2dyYW0sXG4gICAgXCJncmFwaGl0aVwiLFxuICAgIFwiUnVuIEdyYXBoaXRpIG9yIG1hbmFnZSBpdHMgY3VycmVudC11c2VyIGRlc2t0b3Agc2VydmljZVwiLFxuICAgIGFzeW5jICgpID0+IChhd2FpdCBpbXBvcnQoXCIuL2dyYXBoaXRpL2NsaS50c1wiKSkuYnVpbGRQcm9ncmFtLFxuICApO1xuXG4gIHJldHVybiBwcm9ncmFtO1xufVxuXG4vKiogQnVpbGQgdGhlIGNvbXBsZXRlIGNvbW1hbmQgdHJlZSB1c2VkIGZvciBnZW5lcmF0ZWQgZG9jdW1lbnRhdGlvbi4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBidWlsZERvY3VtZW50YXRpb25Qcm9ncmFtKG5hbWU6IHN0cmluZyA9IFBST0dSQU1fTkFNRVNbMF0pOiBQcm9taXNlPENvbW1hbmQ+IHtcbiAgY29uc3QgcHJvZ3JhbSA9IGJ1aWxkUHJvZ3JhbShuYW1lKTtcbiAgKHByb2dyYW0uY29tbWFuZHMgYXMgQ29tbWFuZFtdKS5zcGxpY2UoXG4gICAgMSxcbiAgICBwcm9ncmFtLmNvbW1hbmRzLmxlbmd0aCAtIDEsXG4gICAgKGF3YWl0IGltcG9ydChcIi4vYXBwa2l0L2NsaS50c1wiKSkuYnVpbGRQcm9ncmFtKFwiYXBwa2l0XCIpLFxuICAgIChhd2FpdCBpbXBvcnQoXCIuL2F1dGgvY2xpLnRzXCIpKS5idWlsZFByb2dyYW0oXCJhdXRoXCIpLFxuICAgIChhd2FpdCBpbXBvcnQoXCIuL3R1bm5lbC9jbGkudHNcIikpLmJ1aWxkUHJvZ3JhbShcInR1bm5lbFwiKSxcbiAgICAoYXdhaXQgaW1wb3J0KFwiLi9sYWtlYmFzZS1wcm94eS9jbGkudHNcIikpLmJ1aWxkUHJvZ3JhbShcImxha2ViYXNlLXByb3h5XCIpLFxuICAgIChhd2FpdCBpbXBvcnQoXCIuL21vZGVsLWdhdGV3YXkvY2xpLnRzXCIpKS5idWlsZFByb2dyYW0oXCJtb2RlbC1nYXRld2F5XCIpLFxuICAgIChhd2FpdCBpbXBvcnQoXCIuL2dlbmllLWNvZGUvY2xpLnRzXCIpKS5idWlsZFByb2dyYW0oXCJnZW5pZVwiKSxcbiAgICAoYXdhaXQgaW1wb3J0KFwiLi9ncmFwaGl0aS9jbGkudHNcIikpLmJ1aWxkUHJvZ3JhbShcImdyYXBoaXRpXCIpLFxuICApO1xuICByZXR1cm4gcHJvZ3JhbTtcbn1cblxuLyoqXG4gKiBQcm9ncmFtIG5hbWUgZm9yIGhlbHAgb3V0cHV0OiB3aGljaGV2ZXIgYmluIHRoZSB1c2VyIGFjdHVhbGx5IHR5cGVkLCBzb1xuICogYGRieC10b29scyAtLWhlbHBgIGRvZXNuJ3QgZG9jdW1lbnQgaXRzZWxmIGFzIGBkYnhgLiBGYWxscyBiYWNrIHRvIGBkYnhgLlxuICovXG5mdW5jdGlvbiBwcm9ncmFtTmFtZShhcmd2OiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gIGNvbnN0IGludm9rZWQgPSBhcmd2WzFdID8gYmFzZW5hbWUoYXJndlsxXSkucmVwbGFjZSgvXFwuKD86W2NtXT9banRdcykkLywgXCJcIikgOiB1bmRlZmluZWQ7XG4gIHJldHVybiBQUk9HUkFNX05BTUVTLmZpbmQoKGNhbmRpZGF0ZSkgPT4gY2FuZGlkYXRlID09PSBpbnZva2VkKSA/PyBQUk9HUkFNX05BTUVTWzBdO1xufVxuXG4vKiogUGFyc2UgYGFyZ3ZgIChhIGBwcm9jZXNzLmFyZ3ZgKSBhbmQgcnVuIHRoZSBtYXRjaGluZyBjb21tYW5kLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bkNsaShhcmd2OiBzdHJpbmdbXSk6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBidWlsZFByb2dyYW0ocHJvZ3JhbU5hbWUoYXJndikpLnBhcnNlQXN5bmMoYXJndik7XG59XG4iXX0=
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Managed `dbx genie` command.
3
+ *
4
+ * @module
5
+ */
6
+ import { Command } from "commander";
7
+ import { type GenieCodeCliOptions } from "./options.ts";
8
+ /** Injectable managed Genie execution boundary for parser tests and embedding. */
9
+ export interface GenieCodeCliDependencies {
10
+ run(input: {
11
+ cwd: string;
12
+ genieArgs: readonly string[];
13
+ options: GenieCodeCliOptions;
14
+ }): Promise<void>;
15
+ }
16
+ /** Build the managed Genie Code command without executing it. */
17
+ export declare function buildProgram(name?: string, dependencies?: GenieCodeCliDependencies): Command;
18
+ /** Parse argv and run managed Genie Code. */
19
+ export declare function runCli(argv: string[]): Promise<void>;
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Managed `dbx genie` command.
3
+ *
4
+ * @module
5
+ */
6
+ import { addArgs, parseArgs } from "@dbx-tools/cli-args";
7
+ import { Command } from "commander";
8
+ import { GenieCodeCliOptionsSchema } from "./options.js";
9
+ import { runGenieCode } from "./runtime.js";
10
+ const DEFAULT_DEPENDENCIES = {
11
+ run: runGenieCode,
12
+ };
13
+ /** Build the managed Genie Code command without executing it. */
14
+ export function buildProgram(name = "dbx genie", dependencies = DEFAULT_DEPENDENCIES) {
15
+ const program = addArgs(new Command()
16
+ .name(name)
17
+ .description("Run Genie Code through an authenticated local Databricks model gateway")
18
+ .argument("[genieArgs...]", "arguments and unknown flags forwarded to Genie Code; wrapper options may be separated with --")
19
+ .allowUnknownOption()
20
+ .passThroughOptions()
21
+ .allowExcessArguments()
22
+ .showHelpAfterError(), GenieCodeCliOptionsSchema);
23
+ program.action(async (genieArgs) => {
24
+ await dependencies.run({
25
+ cwd: process.cwd(),
26
+ genieArgs,
27
+ options: parseArgs(program, GenieCodeCliOptionsSchema),
28
+ });
29
+ });
30
+ return program;
31
+ }
32
+ /** Parse argv and run managed Genie Code. */
33
+ export async function runCli(argv) {
34
+ await buildProgram().parseAsync(argv);
35
+ }
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2dlbmllLWNvZGUvY2xpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFFSCxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFcEMsT0FBTyxFQUFFLHlCQUF5QixFQUE0QixNQUFNLGNBQWMsQ0FBQztBQUNuRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBVzVDLE1BQU0sb0JBQW9CLEdBQTZCO0lBQ3JELEdBQUcsRUFBRSxZQUFZO0NBQ2xCLENBQUM7QUFFRixpRUFBaUU7QUFDakUsTUFBTSxVQUFVLFlBQVksQ0FDMUIsSUFBSSxHQUFHLFdBQVcsRUFDbEIsZUFBeUMsb0JBQW9CO0lBRTdELE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FDckIsSUFBSSxPQUFPLEVBQUU7U0FDVixJQUFJLENBQUMsSUFBSSxDQUFDO1NBQ1YsV0FBVyxDQUFDLHdFQUF3RSxDQUFDO1NBQ3JGLFFBQVEsQ0FDUCxnQkFBZ0IsRUFDaEIsK0ZBQStGLENBQ2hHO1NBQ0Esa0JBQWtCLEVBQUU7U0FDcEIsa0JBQWtCLEVBQUU7U0FDcEIsb0JBQW9CLEVBQUU7U0FDdEIsa0JBQWtCLEVBQUUsRUFDdkIseUJBQXlCLENBQzFCLENBQUM7SUFDRixPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxTQUFtQixFQUFFLEVBQUU7UUFDM0MsTUFBTSxZQUFZLENBQUMsR0FBRyxDQUFDO1lBQ3JCLEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBRyxFQUFFO1lBQ2xCLFNBQVM7WUFDVCxPQUFPLEVBQUUsU0FBUyxDQUFDLE9BQU8sRUFBRSx5QkFBeUIsQ0FBQztTQUN2RCxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUNILE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUM7QUFFRCw2Q0FBNkM7QUFDN0MsTUFBTSxDQUFDLEtBQUssVUFBVSxNQUFNLENBQUMsSUFBYztJQUN6QyxNQUFNLFlBQVksRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN4QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBNYW5hZ2VkIGBkYnggZ2VuaWVgIGNvbW1hbmQuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IGFkZEFyZ3MsIHBhcnNlQXJncyB9IGZyb20gXCJAZGJ4LXRvb2xzL2NsaS1hcmdzXCI7XG5pbXBvcnQgeyBDb21tYW5kIH0gZnJvbSBcImNvbW1hbmRlclwiO1xuXG5pbXBvcnQgeyBHZW5pZUNvZGVDbGlPcHRpb25zU2NoZW1hLCB0eXBlIEdlbmllQ29kZUNsaU9wdGlvbnMgfSBmcm9tIFwiLi9vcHRpb25zLnRzXCI7XG5pbXBvcnQgeyBydW5HZW5pZUNvZGUgfSBmcm9tIFwiLi9ydW50aW1lLnRzXCI7XG5cbi8qKiBJbmplY3RhYmxlIG1hbmFnZWQgR2VuaWUgZXhlY3V0aW9uIGJvdW5kYXJ5IGZvciBwYXJzZXIgdGVzdHMgYW5kIGVtYmVkZGluZy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2VuaWVDb2RlQ2xpRGVwZW5kZW5jaWVzIHtcbiAgcnVuKGlucHV0OiB7XG4gICAgY3dkOiBzdHJpbmc7XG4gICAgZ2VuaWVBcmdzOiByZWFkb25seSBzdHJpbmdbXTtcbiAgICBvcHRpb25zOiBHZW5pZUNvZGVDbGlPcHRpb25zO1xuICB9KTogUHJvbWlzZTx2b2lkPjtcbn1cblxuY29uc3QgREVGQVVMVF9ERVBFTkRFTkNJRVM6IEdlbmllQ29kZUNsaURlcGVuZGVuY2llcyA9IHtcbiAgcnVuOiBydW5HZW5pZUNvZGUsXG59O1xuXG4vKiogQnVpbGQgdGhlIG1hbmFnZWQgR2VuaWUgQ29kZSBjb21tYW5kIHdpdGhvdXQgZXhlY3V0aW5nIGl0LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkUHJvZ3JhbShcbiAgbmFtZSA9IFwiZGJ4IGdlbmllXCIsXG4gIGRlcGVuZGVuY2llczogR2VuaWVDb2RlQ2xpRGVwZW5kZW5jaWVzID0gREVGQVVMVF9ERVBFTkRFTkNJRVMsXG4pOiBDb21tYW5kIHtcbiAgY29uc3QgcHJvZ3JhbSA9IGFkZEFyZ3MoXG4gICAgbmV3IENvbW1hbmQoKVxuICAgICAgLm5hbWUobmFtZSlcbiAgICAgIC5kZXNjcmlwdGlvbihcIlJ1biBHZW5pZSBDb2RlIHRocm91Z2ggYW4gYXV0aGVudGljYXRlZCBsb2NhbCBEYXRhYnJpY2tzIG1vZGVsIGdhdGV3YXlcIilcbiAgICAgIC5hcmd1bWVudChcbiAgICAgICAgXCJbZ2VuaWVBcmdzLi4uXVwiLFxuICAgICAgICBcImFyZ3VtZW50cyBhbmQgdW5rbm93biBmbGFncyBmb3J3YXJkZWQgdG8gR2VuaWUgQ29kZTsgd3JhcHBlciBvcHRpb25zIG1heSBiZSBzZXBhcmF0ZWQgd2l0aCAtLVwiLFxuICAgICAgKVxuICAgICAgLmFsbG93VW5rbm93bk9wdGlvbigpXG4gICAgICAucGFzc1Rocm91Z2hPcHRpb25zKClcbiAgICAgIC5hbGxvd0V4Y2Vzc0FyZ3VtZW50cygpXG4gICAgICAuc2hvd0hlbHBBZnRlckVycm9yKCksXG4gICAgR2VuaWVDb2RlQ2xpT3B0aW9uc1NjaGVtYSxcbiAgKTtcbiAgcHJvZ3JhbS5hY3Rpb24oYXN5bmMgKGdlbmllQXJnczogc3RyaW5nW10pID0+IHtcbiAgICBhd2FpdCBkZXBlbmRlbmNpZXMucnVuKHtcbiAgICAgIGN3ZDogcHJvY2Vzcy5jd2QoKSxcbiAgICAgIGdlbmllQXJncyxcbiAgICAgIG9wdGlvbnM6IHBhcnNlQXJncyhwcm9ncmFtLCBHZW5pZUNvZGVDbGlPcHRpb25zU2NoZW1hKSxcbiAgICB9KTtcbiAgfSk7XG4gIHJldHVybiBwcm9ncmFtO1xufVxuXG4vKiogUGFyc2UgYXJndiBhbmQgcnVuIG1hbmFnZWQgR2VuaWUgQ29kZS4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5DbGkoYXJndjogc3RyaW5nW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgYnVpbGRQcm9ncmFtKCkucGFyc2VBc3luYyhhcmd2KTtcbn1cbiJdfQ==
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Generate one persistent Genie Code home per exact profile-model pairing.
3
+ *
4
+ * @module
5
+ */
6
+ import { type GenieCodeBaseConfig, type GenieCodeConfig, type GenieCodeProviderOverlay } from "@dbx-tools/shared-genie-code/config";
7
+ /** Provider identifier written to the base and invocation overlay configurations. */
8
+ export declare const GENIE_CODE_GATEWAY_PROVIDER = "dbx_tools_model_gateway";
9
+ /** Inputs used to update a persistent home and create one invocation overlay. */
10
+ export interface WriteGenieCodeConfigOptions {
11
+ bearerToken: string;
12
+ gatewayBaseUrl: string;
13
+ homeDirectory?: string;
14
+ model: string;
15
+ profile: string;
16
+ projectDirectory: string;
17
+ }
18
+ /** Stable persistent home for one exact profile-model pairing. */
19
+ export interface GenieCodePairingHome {
20
+ configPath: string;
21
+ home: string;
22
+ name: string;
23
+ }
24
+ /** Persistent pairing home and invocation-specific provider overlay. */
25
+ export interface GenieCodeHome extends GenieCodePairingHome {
26
+ overlayName: string;
27
+ overlayPath: string;
28
+ }
29
+ /** Derive the stable home for one exact profile-model pair. */
30
+ export declare function genieCodeHome(profile: string, model: string, homeDirectory?: string): GenieCodePairingHome;
31
+ /** Render the persistent profile-model configuration. */
32
+ export declare function genieCodeBaseConfig(options: WriteGenieCodeConfigOptions, existingProjects?: Readonly<Record<string, unknown>>): GenieCodeBaseConfig;
33
+ /** Render the invocation-specific guarded provider configuration. */
34
+ export declare function genieCodeProviderOverlay(options: WriteGenieCodeConfigOptions): GenieCodeProviderOverlay;
35
+ /** Render the merged configuration used by validation and tests. */
36
+ export declare function genieCodeConfig(options: WriteGenieCodeConfigOptions): GenieCodeConfig;
37
+ /** Update the persistent base config and write one private invocation overlay. */
38
+ export declare function writeGenieCodeConfig(options: WriteGenieCodeConfigOptions): Promise<GenieCodeHome>;