@dbx-tools/cli 0.9.60 → 0.9.64

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 (43) hide show
  1. package/README.md +175 -81
  2. package/bin/dbx-genie.ts +10 -0
  3. package/index.ts +13 -1
  4. package/lib/bin/dbx-genie.d.ts +2 -0
  5. package/lib/bin/dbx-genie.js +10 -0
  6. package/lib/index.d.ts +13 -1
  7. package/lib/index.js +10 -2
  8. package/lib/src/auth/cli.js +13 -2
  9. package/lib/src/auth/options.d.ts +4 -0
  10. package/lib/src/auth/options.js +5 -1
  11. package/lib/src/cli.js +19 -4
  12. package/lib/src/genie-code/cli.d.ts +19 -0
  13. package/lib/src/genie-code/cli.js +36 -0
  14. package/lib/src/genie-code/config.d.ts +38 -0
  15. package/lib/src/genie-code/config.js +108 -0
  16. package/lib/src/genie-code/install.d.ts +21 -0
  17. package/lib/src/genie-code/install.js +69 -0
  18. package/lib/src/genie-code/options.d.ts +7 -0
  19. package/lib/src/genie-code/options.js +7 -0
  20. package/lib/src/genie-code/runner.d.ts +21 -0
  21. package/lib/src/genie-code/runner.js +90 -0
  22. package/lib/src/genie-code/runtime.d.ts +49 -0
  23. package/lib/src/genie-code/runtime.js +169 -0
  24. package/lib/src/graphiti/cli.js +2 -2
  25. package/lib/src/lakebase-proxy/cli.js +2 -2
  26. package/lib/src/model-gateway/cli.js +3 -3
  27. package/lib/src/model-gateway/server.d.ts +3 -0
  28. package/lib/src/model-gateway/server.js +39 -6
  29. package/lib/tsconfig.tsbuildinfo +1 -1
  30. package/package.json +40 -18
  31. package/src/auth/cli.ts +11 -1
  32. package/src/auth/options.ts +4 -0
  33. package/src/cli.ts +17 -6
  34. package/src/genie-code/cli.ts +58 -0
  35. package/src/genie-code/config.ts +157 -0
  36. package/src/genie-code/install.ts +103 -0
  37. package/src/genie-code/options.ts +14 -0
  38. package/src/genie-code/runner.ts +106 -0
  39. package/src/genie-code/runtime.ts +231 -0
  40. package/src/graphiti/cli.ts +1 -1
  41. package/src/lakebase-proxy/cli.ts +1 -1
  42. package/src/model-gateway/cli.ts +6 -2
  43. package/src/model-gateway/server.ts +40 -5
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Install the pinned multi-file Genie Code runtime under dbx-tools ownership.
3
+ *
4
+ * @module
5
+ */
6
+ import { homedir } from "node:os";
7
+ import { dirname, join } from "node:path";
8
+ import { bin } from "@dbx-tools/core";
9
+ import { GENIE_CODE_VERSION } from "@dbx-tools/shared-genie-code/options";
10
+ const GENIE_CODE_ASSETS = {
11
+ "darwin:arm64": {
12
+ target: "aarch64-apple-darwin",
13
+ sha256: "78cc7e358c8bfc62d6da26364c762be37fc2e2a10b7e83f21a3b166f901f528e",
14
+ },
15
+ "darwin:x64": {
16
+ target: "x86_64-apple-darwin",
17
+ sha256: "2021b8b27ec3116fc015c1676b5f65c3ce11d57f1dff9c302aae135f6e4f1a5f",
18
+ },
19
+ "linux:arm64": {
20
+ target: "aarch64-unknown-linux-musl",
21
+ sha256: "dfd278c267dde43e1fe7e7d7a0da8d7a1a148cdf3d2004bd30b351645c4fe0a7",
22
+ },
23
+ "linux:x64": {
24
+ target: "x86_64-unknown-linux-musl",
25
+ sha256: "e3d9a55f6d51bdc745eda4744fb827ba1df6dacf1069518f7347a59f48c89430",
26
+ },
27
+ "win32:arm64": {
28
+ target: "aarch64-pc-windows-msvc",
29
+ sha256: "aeac95bd0148f942194270ba932245cec32e98da67292ba7b008bcab675ba7f8",
30
+ },
31
+ "win32:x64": {
32
+ target: "x86_64-pc-windows-msvc",
33
+ sha256: "c9f92c8d60273250262527bca525451501c4e8351e59927a1686c305be29a922",
34
+ },
35
+ };
36
+ /** Resolve the pinned release asset for one supported host. */
37
+ export function genieCodeAsset(platform = process.platform, architecture = process.arch) {
38
+ const asset = GENIE_CODE_ASSETS[`${platform}:${architecture}`];
39
+ if (!asset) {
40
+ throw new Error(`Genie Code ${GENIE_CODE_VERSION} does not support ${platform}/${architecture}`);
41
+ }
42
+ return asset;
43
+ }
44
+ /** Install and return the shared Genie Code package entrypoint. */
45
+ export async function installGenieCode(options = {}) {
46
+ const platform = options.platform ?? process.platform;
47
+ const asset = genieCodeAsset(platform, options.architecture ?? process.arch);
48
+ const executable = platform === "win32" ? "genie.exe" : "genie";
49
+ const helper = platform === "win32" ? "genie-code-mode-host.exe" : "genie-code-mode-host";
50
+ const entrypoint = join("bin", executable);
51
+ const root = join(options.homeDirectory ?? homedir(), ".dbx-tools", "genie", "releases", `${GENIE_CODE_VERSION}-${asset.target}`);
52
+ const destination = {
53
+ root,
54
+ binDir: join(root, dirname(entrypoint)),
55
+ path: join(root, entrypoint),
56
+ };
57
+ const url = `https://github.com/databricks/genie-code-cli/releases/download/v${GENIE_CODE_VERSION}/` +
58
+ `genie-package-${asset.target}.tar.gz`;
59
+ return bin.ensure("genie", { url, sha256: asset.sha256 }, {
60
+ destination,
61
+ minVersion: "0.1.0",
62
+ versionParser: ({ stdout }) => stdout.trim() === `genie ${GENIE_CODE_VERSION}` ? "0.1.0" : undefined,
63
+ package: {
64
+ entrypoint,
65
+ requiredPaths: ["genie-package.json", join("bin", helper), "genie-path", "genie-resources"],
66
+ },
67
+ });
68
+ }
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdGFsbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9nZW5pZS1jb2RlL2luc3RhbGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUVILE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDbEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDMUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3RDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBTzFFLE1BQU0saUJBQWlCLEdBQUc7SUFDeEIsY0FBYyxFQUFFO1FBQ2QsTUFBTSxFQUFFLHNCQUFzQjtRQUM5QixNQUFNLEVBQUUsa0VBQWtFO0tBQzNFO0lBQ0QsWUFBWSxFQUFFO1FBQ1osTUFBTSxFQUFFLHFCQUFxQjtRQUM3QixNQUFNLEVBQUUsa0VBQWtFO0tBQzNFO0lBQ0QsYUFBYSxFQUFFO1FBQ2IsTUFBTSxFQUFFLDRCQUE0QjtRQUNwQyxNQUFNLEVBQUUsa0VBQWtFO0tBQzNFO0lBQ0QsV0FBVyxFQUFFO1FBQ1gsTUFBTSxFQUFFLDJCQUEyQjtRQUNuQyxNQUFNLEVBQUUsa0VBQWtFO0tBQzNFO0lBQ0QsYUFBYSxFQUFFO1FBQ2IsTUFBTSxFQUFFLHlCQUF5QjtRQUNqQyxNQUFNLEVBQUUsa0VBQWtFO0tBQzNFO0lBQ0QsV0FBVyxFQUFFO1FBQ1gsTUFBTSxFQUFFLHdCQUF3QjtRQUNoQyxNQUFNLEVBQUUsa0VBQWtFO0tBQzNFO0NBQ2dELENBQUM7QUFTcEQsK0RBQStEO0FBQy9ELE1BQU0sVUFBVSxjQUFjLENBQzVCLFdBQTRCLE9BQU8sQ0FBQyxRQUFRLEVBQzVDLGVBQW9DLE9BQU8sQ0FBQyxJQUFJO0lBRWhELE1BQU0sS0FBSyxHQUFHLGlCQUFpQixDQUFDLEdBQUcsUUFBUSxJQUFJLFlBQVksRUFBb0MsQ0FBQyxDQUFDO0lBQ2pHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNYLE1BQU0sSUFBSSxLQUFLLENBQ2IsY0FBYyxrQkFBa0IscUJBQXFCLFFBQVEsSUFBSSxZQUFZLEVBQUUsQ0FDaEYsQ0FBQztJQUNKLENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRCxtRUFBbUU7QUFDbkUsTUFBTSxDQUFDLEtBQUssVUFBVSxnQkFBZ0IsQ0FDcEMsVUFBbUMsRUFBRTtJQUVyQyxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUM7SUFDdEQsTUFBTSxLQUFLLEdBQUcsY0FBYyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsWUFBWSxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3RSxNQUFNLFVBQVUsR0FBRyxRQUFRLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztJQUNoRSxNQUFNLE1BQU0sR0FBRyxRQUFRLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLENBQUMsc0JBQXNCLENBQUM7SUFDMUYsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQztJQUMzQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQ2YsT0FBTyxDQUFDLGFBQWEsSUFBSSxPQUFPLEVBQUUsRUFDbEMsWUFBWSxFQUNaLE9BQU8sRUFDUCxVQUFVLEVBQ1YsR0FBRyxrQkFBa0IsSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLENBQ3hDLENBQUM7SUFDRixNQUFNLFdBQVcsR0FBbUI7UUFDbEMsSUFBSTtRQUNKLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN2QyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUM7S0FDN0IsQ0FBQztJQUNGLE1BQU0sR0FBRyxHQUNQLG1FQUFtRSxrQkFBa0IsR0FBRztRQUN4RixpQkFBaUIsS0FBSyxDQUFDLE1BQU0sU0FBUyxDQUFDO0lBQ3pDLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FDZixPQUFPLEVBQ1AsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFDN0I7UUFDRSxXQUFXO1FBQ1gsVUFBVSxFQUFFLE9BQU87UUFDbkIsYUFBYSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQzVCLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxTQUFTLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsU0FBUztRQUN2RSxPQUFPLEVBQUU7WUFDUCxVQUFVO1lBQ1YsYUFBYSxFQUFFLENBQUMsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsRUFBRSxZQUFZLEVBQUUsaUJBQWlCLENBQUM7U0FDNUY7S0FDRixDQUNGLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBJbnN0YWxsIHRoZSBwaW5uZWQgbXVsdGktZmlsZSBHZW5pZSBDb2RlIHJ1bnRpbWUgdW5kZXIgZGJ4LXRvb2xzIG93bmVyc2hpcC5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgaG9tZWRpciB9IGZyb20gXCJub2RlOm9zXCI7XG5pbXBvcnQgeyBkaXJuYW1lLCBqb2luIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgYmluIH0gZnJvbSBcIkBkYngtdG9vbHMvY29yZVwiO1xuaW1wb3J0IHsgR0VOSUVfQ09ERV9WRVJTSU9OIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWdlbmllLWNvZGUvb3B0aW9uc1wiO1xuXG5pbnRlcmZhY2UgR2VuaWVDb2RlQXNzZXQge1xuICB0YXJnZXQ6IHN0cmluZztcbiAgc2hhMjU2OiBzdHJpbmc7XG59XG5cbmNvbnN0IEdFTklFX0NPREVfQVNTRVRTID0ge1xuICBcImRhcndpbjphcm02NFwiOiB7XG4gICAgdGFyZ2V0OiBcImFhcmNoNjQtYXBwbGUtZGFyd2luXCIsXG4gICAgc2hhMjU2OiBcIjc4Y2M3ZTM1OGM4YmZjNjJkNmRhMjYzNjRjNzYyYmUzN2ZjMmUyYTEwYjdlODNmMjFhM2IxNjZmOTAxZjUyOGVcIixcbiAgfSxcbiAgXCJkYXJ3aW46eDY0XCI6IHtcbiAgICB0YXJnZXQ6IFwieDg2XzY0LWFwcGxlLWRhcndpblwiLFxuICAgIHNoYTI1NjogXCIyMDIxYjhiMjdlYzMxMTZmYzAxNWMxNjc2YjVmNjVjM2NlMTFkNTdmMWRmZjljMzAyYWFlMTM1ZjZlNGYxYTVmXCIsXG4gIH0sXG4gIFwibGludXg6YXJtNjRcIjoge1xuICAgIHRhcmdldDogXCJhYXJjaDY0LXVua25vd24tbGludXgtbXVzbFwiLFxuICAgIHNoYTI1NjogXCJkZmQyNzhjMjY3ZGRlNDNlMWZlN2U3ZDdhMGRhOGQ3YTFhMTQ4Y2RmM2QyMDA0YmQzMGIzNTE2NDVjNGZlMGE3XCIsXG4gIH0sXG4gIFwibGludXg6eDY0XCI6IHtcbiAgICB0YXJnZXQ6IFwieDg2XzY0LXVua25vd24tbGludXgtbXVzbFwiLFxuICAgIHNoYTI1NjogXCJlM2Q5YTU1ZjZkNTFiZGM3NDVlZGE0NzQ0ZmI4MjdiYTFkZjZkYWNmMTA2OTUxOGY3MzQ3YTU5ZjQ4Yzg5NDMwXCIsXG4gIH0sXG4gIFwid2luMzI6YXJtNjRcIjoge1xuICAgIHRhcmdldDogXCJhYXJjaDY0LXBjLXdpbmRvd3MtbXN2Y1wiLFxuICAgIHNoYTI1NjogXCJhZWFjOTViZDAxNDhmOTQyMTk0MjcwYmE5MzIyNDVjZWMzMmU5OGRhNjcyOTJiYTdiMDA4YmNhYjY3NWJhN2Y4XCIsXG4gIH0sXG4gIFwid2luMzI6eDY0XCI6IHtcbiAgICB0YXJnZXQ6IFwieDg2XzY0LXBjLXdpbmRvd3MtbXN2Y1wiLFxuICAgIHNoYTI1NjogXCJjOWY5MmM4ZDYwMjczMjUwMjYyNTI3YmNhNTI1NDUxNTAxYzRlODM1MWU1OTkyN2ExNjg2YzMwNWJlMjlhOTIyXCIsXG4gIH0sXG59IGFzIGNvbnN0IHNhdGlzZmllcyBSZWNvcmQ8c3RyaW5nLCBHZW5pZUNvZGVBc3NldD47XG5cbi8qKiBIb3N0IG92ZXJyaWRlcyB1c2VkIGJ5IGluc3RhbGxhdGlvbiB0ZXN0cyBhbmQgZW1iZWRkZWQgY2FsbGVycy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5zdGFsbEdlbmllQ29kZU9wdGlvbnMge1xuICBob21lRGlyZWN0b3J5Pzogc3RyaW5nO1xuICBwbGF0Zm9ybT86IE5vZGVKUy5QbGF0Zm9ybTtcbiAgYXJjaGl0ZWN0dXJlPzogTm9kZUpTLkFyY2hpdGVjdHVyZTtcbn1cblxuLyoqIFJlc29sdmUgdGhlIHBpbm5lZCByZWxlYXNlIGFzc2V0IGZvciBvbmUgc3VwcG9ydGVkIGhvc3QuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuaWVDb2RlQXNzZXQoXG4gIHBsYXRmb3JtOiBOb2RlSlMuUGxhdGZvcm0gPSBwcm9jZXNzLnBsYXRmb3JtLFxuICBhcmNoaXRlY3R1cmU6IE5vZGVKUy5BcmNoaXRlY3R1cmUgPSBwcm9jZXNzLmFyY2gsXG4pOiBHZW5pZUNvZGVBc3NldCB7XG4gIGNvbnN0IGFzc2V0ID0gR0VOSUVfQ09ERV9BU1NFVFNbYCR7cGxhdGZvcm19OiR7YXJjaGl0ZWN0dXJlfWAgYXMga2V5b2YgdHlwZW9mIEdFTklFX0NPREVfQVNTRVRTXTtcbiAgaWYgKCFhc3NldCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBHZW5pZSBDb2RlICR7R0VOSUVfQ09ERV9WRVJTSU9OfSBkb2VzIG5vdCBzdXBwb3J0ICR7cGxhdGZvcm19LyR7YXJjaGl0ZWN0dXJlfWAsXG4gICAgKTtcbiAgfVxuICByZXR1cm4gYXNzZXQ7XG59XG5cbi8qKiBJbnN0YWxsIGFuZCByZXR1cm4gdGhlIHNoYXJlZCBHZW5pZSBDb2RlIHBhY2thZ2UgZW50cnlwb2ludC4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbnN0YWxsR2VuaWVDb2RlKFxuICBvcHRpb25zOiBJbnN0YWxsR2VuaWVDb2RlT3B0aW9ucyA9IHt9LFxuKTogUHJvbWlzZTxiaW4uQmluQ29udGV4dD4ge1xuICBjb25zdCBwbGF0Zm9ybSA9IG9wdGlvbnMucGxhdGZvcm0gPz8gcHJvY2Vzcy5wbGF0Zm9ybTtcbiAgY29uc3QgYXNzZXQgPSBnZW5pZUNvZGVBc3NldChwbGF0Zm9ybSwgb3B0aW9ucy5hcmNoaXRlY3R1cmUgPz8gcHJvY2Vzcy5hcmNoKTtcbiAgY29uc3QgZXhlY3V0YWJsZSA9IHBsYXRmb3JtID09PSBcIndpbjMyXCIgPyBcImdlbmllLmV4ZVwiIDogXCJnZW5pZVwiO1xuICBjb25zdCBoZWxwZXIgPSBwbGF0Zm9ybSA9PT0gXCJ3aW4zMlwiID8gXCJnZW5pZS1jb2RlLW1vZGUtaG9zdC5leGVcIiA6IFwiZ2VuaWUtY29kZS1tb2RlLWhvc3RcIjtcbiAgY29uc3QgZW50cnlwb2ludCA9IGpvaW4oXCJiaW5cIiwgZXhlY3V0YWJsZSk7XG4gIGNvbnN0IHJvb3QgPSBqb2luKFxuICAgIG9wdGlvbnMuaG9tZURpcmVjdG9yeSA/PyBob21lZGlyKCksXG4gICAgXCIuZGJ4LXRvb2xzXCIsXG4gICAgXCJnZW5pZVwiLFxuICAgIFwicmVsZWFzZXNcIixcbiAgICBgJHtHRU5JRV9DT0RFX1ZFUlNJT059LSR7YXNzZXQudGFyZ2V0fWAsXG4gICk7XG4gIGNvbnN0IGRlc3RpbmF0aW9uOiBiaW4uQmluQ29udGV4dCA9IHtcbiAgICByb290LFxuICAgIGJpbkRpcjogam9pbihyb290LCBkaXJuYW1lKGVudHJ5cG9pbnQpKSxcbiAgICBwYXRoOiBqb2luKHJvb3QsIGVudHJ5cG9pbnQpLFxuICB9O1xuICBjb25zdCB1cmwgPVxuICAgIGBodHRwczovL2dpdGh1Yi5jb20vZGF0YWJyaWNrcy9nZW5pZS1jb2RlLWNsaS9yZWxlYXNlcy9kb3dubG9hZC92JHtHRU5JRV9DT0RFX1ZFUlNJT059L2AgK1xuICAgIGBnZW5pZS1wYWNrYWdlLSR7YXNzZXQudGFyZ2V0fS50YXIuZ3pgO1xuICByZXR1cm4gYmluLmVuc3VyZShcbiAgICBcImdlbmllXCIsXG4gICAgeyB1cmwsIHNoYTI1NjogYXNzZXQuc2hhMjU2IH0sXG4gICAge1xuICAgICAgZGVzdGluYXRpb24sXG4gICAgICBtaW5WZXJzaW9uOiBcIjAuMS4wXCIsXG4gICAgICB2ZXJzaW9uUGFyc2VyOiAoeyBzdGRvdXQgfSkgPT5cbiAgICAgICAgc3Rkb3V0LnRyaW0oKSA9PT0gYGdlbmllICR7R0VOSUVfQ09ERV9WRVJTSU9OfWAgPyBcIjAuMS4wXCIgOiB1bmRlZmluZWQsXG4gICAgICBwYWNrYWdlOiB7XG4gICAgICAgIGVudHJ5cG9pbnQsXG4gICAgICAgIHJlcXVpcmVkUGF0aHM6IFtcImdlbmllLXBhY2thZ2UuanNvblwiLCBqb2luKFwiYmluXCIsIGhlbHBlciksIFwiZ2VuaWUtcGF0aFwiLCBcImdlbmllLXJlc291cmNlc1wiXSxcbiAgICAgIH0sXG4gICAgfSxcbiAgKTtcbn1cbiJdfQ==
@@ -0,0 +1,7 @@
1
+ /**
2
+ * CLI projection of the shared managed Genie Code options.
3
+ *
4
+ * @module
5
+ */
6
+ export { GenieCodeOptionsSchema as GenieCodeCliOptionsSchema, resolveGenieCodeOptions as resolveGenieCodeCliOptions, } from "@dbx-tools/shared-genie-code/options";
7
+ export type { GenieCodeOptions as GenieCodeCliOptions, ResolvedGenieCodeOptions as ResolvedGenieCodeCliOptions, } from "@dbx-tools/shared-genie-code/options";
@@ -0,0 +1,7 @@
1
+ /**
2
+ * CLI projection of the shared managed Genie Code options.
3
+ *
4
+ * @module
5
+ */
6
+ export { GenieCodeOptionsSchema as GenieCodeCliOptionsSchema, resolveGenieCodeOptions as resolveGenieCodeCliOptions, } from "@dbx-tools/shared-genie-code/options";
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9nZW5pZS1jb2RlL29wdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUVILE9BQU8sRUFDTCxzQkFBc0IsSUFBSSx5QkFBeUIsRUFDbkQsdUJBQXVCLElBQUksMEJBQTBCLEdBQ3RELE1BQU0sc0NBQXNDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENMSSBwcm9qZWN0aW9uIG9mIHRoZSBzaGFyZWQgbWFuYWdlZCBHZW5pZSBDb2RlIG9wdGlvbnMuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmV4cG9ydCB7XG4gIEdlbmllQ29kZU9wdGlvbnNTY2hlbWEgYXMgR2VuaWVDb2RlQ2xpT3B0aW9uc1NjaGVtYSxcbiAgcmVzb2x2ZUdlbmllQ29kZU9wdGlvbnMgYXMgcmVzb2x2ZUdlbmllQ29kZUNsaU9wdGlvbnMsXG59IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1nZW5pZS1jb2RlL29wdGlvbnNcIjtcbmV4cG9ydCB0eXBlIHtcbiAgR2VuaWVDb2RlT3B0aW9ucyBhcyBHZW5pZUNvZGVDbGlPcHRpb25zLFxuICBSZXNvbHZlZEdlbmllQ29kZU9wdGlvbnMgYXMgUmVzb2x2ZWRHZW5pZUNvZGVDbGlPcHRpb25zLFxufSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtZ2VuaWUtY29kZS9vcHRpb25zXCI7XG4iXX0=
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Internal readiness gate and interactive Genie Code child process.
3
+ *
4
+ * @module
5
+ */
6
+ /** Private environment field carrying serialized runner options. */
7
+ declare const RUNNER_OPTIONS_ENV = "DBX_TOOLS_GENIE_RUNNER_OPTIONS";
8
+ /** Parse the serialized runner boundary from its private environment field. */
9
+ export declare function genieCodeRunnerOptions(environment?: NodeJS.ProcessEnv): {
10
+ executable: string;
11
+ arguments: readonly string[];
12
+ home: string;
13
+ gatewayHealthUrl: string;
14
+ bearerToken: string;
15
+ startupTimeoutMs: number;
16
+ };
17
+ /** Wait until the guarded model-gateway health route accepts the runner token. */
18
+ export declare function waitForGenieCodeGateway(healthUrl: string, bearerToken: string, timeoutMs: number): Promise<void>;
19
+ /** Run Genie Code with inherited terminal streams after its gateway is ready. */
20
+ export declare function runGenieCodeChild(environment?: NodeJS.ProcessEnv): Promise<void>;
21
+ export { RUNNER_OPTIONS_ENV };
@@ -0,0 +1,90 @@
1
+ /**
2
+ * Internal readiness gate and interactive Genie Code child process.
3
+ *
4
+ * @module
5
+ */
6
+ import { AppKitChildProcess } from "@dbx-tools/appkit/child-process";
7
+ import { asyncUtils, log } from "@dbx-tools/shared-core";
8
+ import { GenieCodeRunnerOptionsSchema } from "@dbx-tools/shared-genie-code/options";
9
+ /** Private environment field carrying serialized runner options. */
10
+ const RUNNER_OPTIONS_ENV = "DBX_TOOLS_GENIE_RUNNER_OPTIONS";
11
+ const logger = log.logger("genie-code:runner");
12
+ /** Parse the serialized runner boundary from its private environment field. */
13
+ export function genieCodeRunnerOptions(environment = process.env) {
14
+ const serialized = environment[RUNNER_OPTIONS_ENV];
15
+ if (!serialized)
16
+ throw new Error(`${RUNNER_OPTIONS_ENV} is required`);
17
+ return GenieCodeRunnerOptionsSchema.parse(JSON.parse(serialized));
18
+ }
19
+ /** Wait until the guarded model-gateway health route accepts the runner token. */
20
+ export async function waitForGenieCodeGateway(healthUrl, bearerToken, timeoutMs) {
21
+ for await (const ready of asyncUtils.poll(async ({ signal }) => {
22
+ try {
23
+ const response = await fetch(healthUrl, {
24
+ headers: { authorization: `Bearer ${bearerToken}` },
25
+ signal,
26
+ });
27
+ return response.ok;
28
+ }
29
+ catch {
30
+ return false;
31
+ }
32
+ }, {
33
+ intervalMs: 200,
34
+ timeoutMs,
35
+ predicate: (ready) => !ready,
36
+ })) {
37
+ if (ready)
38
+ return;
39
+ }
40
+ }
41
+ /** Run Genie Code with inherited terminal streams after its gateway is ready. */
42
+ export async function runGenieCodeChild(environment = process.env) {
43
+ const options = genieCodeRunnerOptions(environment);
44
+ logger.info("waiting for model gateway", {
45
+ gateway: options.gatewayHealthUrl,
46
+ timeoutMs: options.startupTimeoutMs,
47
+ });
48
+ await waitForGenieCodeGateway(options.gatewayHealthUrl, options.bearerToken, options.startupTimeoutMs);
49
+ logger.info("model gateway ready; starting Genie Code", {
50
+ executable: options.executable,
51
+ home: options.home,
52
+ });
53
+ const child = new AppKitChildProcess([
54
+ options.executable,
55
+ [...options.arguments],
56
+ {
57
+ cwd: process.cwd(),
58
+ env: {
59
+ ...environment,
60
+ GENIE_HOME: options.home,
61
+ },
62
+ stdin: "inherit",
63
+ stdout: "inherit",
64
+ stderr: "inherit",
65
+ },
66
+ ], {
67
+ gracefulTimeoutMs: 5_000,
68
+ forceTimeoutMs: 1_000,
69
+ });
70
+ const running = child.start();
71
+ const shutdown = () => {
72
+ void child.shutdown();
73
+ };
74
+ for (const signal of ["SIGINT", "SIGTERM", "SIGHUP"]) {
75
+ process.once(signal, shutdown);
76
+ }
77
+ try {
78
+ const result = await running;
79
+ if (result.exitCode !== 0)
80
+ process.exitCode = result.exitCode;
81
+ }
82
+ finally {
83
+ for (const signal of ["SIGINT", "SIGTERM", "SIGHUP"]) {
84
+ process.off(signal, shutdown);
85
+ }
86
+ await child.shutdown();
87
+ }
88
+ }
89
+ export { RUNNER_OPTIONS_ENV };
90
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVubmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2dlbmllLWNvZGUvcnVubmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFFSCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNyRSxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3pELE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBRXBGLG9FQUFvRTtBQUNwRSxNQUFNLGtCQUFrQixHQUFHLGdDQUFnQyxDQUFDO0FBQzVELE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztBQUUvQywrRUFBK0U7QUFDL0UsTUFBTSxVQUFVLHNCQUFzQixDQUFDLGNBQWlDLE9BQU8sQ0FBQyxHQUFHO0lBQ2pGLE1BQU0sVUFBVSxHQUFHLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQ25ELElBQUksQ0FBQyxVQUFVO1FBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLGtCQUFrQixjQUFjLENBQUMsQ0FBQztJQUN0RSxPQUFPLDRCQUE0QixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7QUFDcEUsQ0FBQztBQUVELGtGQUFrRjtBQUNsRixNQUFNLENBQUMsS0FBSyxVQUFVLHVCQUF1QixDQUMzQyxTQUFpQixFQUNqQixXQUFtQixFQUNuQixTQUFpQjtJQUVqQixJQUFJLEtBQUssRUFBRSxNQUFNLEtBQUssSUFBSSxVQUFVLENBQUMsSUFBSSxDQUN2QyxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFO1FBQ25CLElBQUksQ0FBQztZQUNILE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUFDLFNBQVMsRUFBRTtnQkFDdEMsT0FBTyxFQUFFLEVBQUUsYUFBYSxFQUFFLFVBQVUsV0FBVyxFQUFFLEVBQUU7Z0JBQ25ELE1BQU07YUFDUCxDQUFDLENBQUM7WUFDSCxPQUFPLFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFDckIsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNQLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztJQUNILENBQUMsRUFDRDtRQUNFLFVBQVUsRUFBRSxHQUFHO1FBQ2YsU0FBUztRQUNULFNBQVMsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLO0tBQzdCLENBQ0YsRUFBRSxDQUFDO1FBQ0YsSUFBSSxLQUFLO1lBQUUsT0FBTztJQUNwQixDQUFDO0FBQ0gsQ0FBQztBQUVELGlGQUFpRjtBQUNqRixNQUFNLENBQUMsS0FBSyxVQUFVLGlCQUFpQixDQUNyQyxjQUFpQyxPQUFPLENBQUMsR0FBRztJQUU1QyxNQUFNLE9BQU8sR0FBRyxzQkFBc0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNwRCxNQUFNLENBQUMsSUFBSSxDQUFDLDJCQUEyQixFQUFFO1FBQ3ZDLE9BQU8sRUFBRSxPQUFPLENBQUMsZ0JBQWdCO1FBQ2pDLFNBQVMsRUFBRSxPQUFPLENBQUMsZ0JBQWdCO0tBQ3BDLENBQUMsQ0FBQztJQUNILE1BQU0sdUJBQXVCLENBQzNCLE9BQU8sQ0FBQyxnQkFBZ0IsRUFDeEIsT0FBTyxDQUFDLFdBQVcsRUFDbkIsT0FBTyxDQUFDLGdCQUFnQixDQUN6QixDQUFDO0lBQ0YsTUFBTSxDQUFDLElBQUksQ0FBQywwQ0FBMEMsRUFBRTtRQUN0RCxVQUFVLEVBQUUsT0FBTyxDQUFDLFVBQVU7UUFDOUIsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO0tBQ25CLENBQUMsQ0FBQztJQUNILE1BQU0sS0FBSyxHQUFHLElBQUksa0JBQWtCLENBQ2xDO1FBQ0UsT0FBTyxDQUFDLFVBQVU7UUFDbEIsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUM7UUFDdEI7WUFDRSxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUcsRUFBRTtZQUNsQixHQUFHLEVBQUU7Z0JBQ0gsR0FBRyxXQUFXO2dCQUNkLFVBQVUsRUFBRSxPQUFPLENBQUMsSUFBSTthQUN6QjtZQUNELEtBQUssRUFBRSxTQUFTO1lBQ2hCLE1BQU0sRUFBRSxTQUFTO1lBQ2pCLE1BQU0sRUFBRSxTQUFTO1NBQ2xCO0tBQ0YsRUFDRDtRQUNFLGlCQUFpQixFQUFFLEtBQUs7UUFDeEIsY0FBYyxFQUFFLEtBQUs7S0FDdEIsQ0FDRixDQUFDO0lBQ0YsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzlCLE1BQU0sUUFBUSxHQUFHLEdBQUcsRUFBRTtRQUNwQixLQUFLLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUN4QixDQUFDLENBQUM7SUFDRixLQUFLLE1BQU0sTUFBTSxJQUFJLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxRQUFRLENBQVUsRUFBRSxDQUFDO1FBQzlELE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFDRCxJQUFJLENBQUM7UUFDSCxNQUFNLE1BQU0sR0FBRyxNQUFNLE9BQU8sQ0FBQztRQUM3QixJQUFJLE1BQU0sQ0FBQyxRQUFRLEtBQUssQ0FBQztZQUFFLE9BQU8sQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQztJQUNoRSxDQUFDO1lBQVMsQ0FBQztRQUNULEtBQUssTUFBTSxNQUFNLElBQUksQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLFFBQVEsQ0FBVSxFQUFFLENBQUM7WUFDOUQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDaEMsQ0FBQztRQUNELE1BQU0sS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3pCLENBQUM7QUFDSCxDQUFDO0FBRUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEludGVybmFsIHJlYWRpbmVzcyBnYXRlIGFuZCBpbnRlcmFjdGl2ZSBHZW5pZSBDb2RlIGNoaWxkIHByb2Nlc3MuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IEFwcEtpdENoaWxkUHJvY2VzcyB9IGZyb20gXCJAZGJ4LXRvb2xzL2FwcGtpdC9jaGlsZC1wcm9jZXNzXCI7XG5pbXBvcnQgeyBhc3luY1V0aWxzLCBsb2cgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHsgR2VuaWVDb2RlUnVubmVyT3B0aW9uc1NjaGVtYSB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1nZW5pZS1jb2RlL29wdGlvbnNcIjtcblxuLyoqIFByaXZhdGUgZW52aXJvbm1lbnQgZmllbGQgY2Fycnlpbmcgc2VyaWFsaXplZCBydW5uZXIgb3B0aW9ucy4gKi9cbmNvbnN0IFJVTk5FUl9PUFRJT05TX0VOViA9IFwiREJYX1RPT0xTX0dFTklFX1JVTk5FUl9PUFRJT05TXCI7XG5jb25zdCBsb2dnZXIgPSBsb2cubG9nZ2VyKFwiZ2VuaWUtY29kZTpydW5uZXJcIik7XG5cbi8qKiBQYXJzZSB0aGUgc2VyaWFsaXplZCBydW5uZXIgYm91bmRhcnkgZnJvbSBpdHMgcHJpdmF0ZSBlbnZpcm9ubWVudCBmaWVsZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5pZUNvZGVSdW5uZXJPcHRpb25zKGVudmlyb25tZW50OiBOb2RlSlMuUHJvY2Vzc0VudiA9IHByb2Nlc3MuZW52KSB7XG4gIGNvbnN0IHNlcmlhbGl6ZWQgPSBlbnZpcm9ubWVudFtSVU5ORVJfT1BUSU9OU19FTlZdO1xuICBpZiAoIXNlcmlhbGl6ZWQpIHRocm93IG5ldyBFcnJvcihgJHtSVU5ORVJfT1BUSU9OU19FTlZ9IGlzIHJlcXVpcmVkYCk7XG4gIHJldHVybiBHZW5pZUNvZGVSdW5uZXJPcHRpb25zU2NoZW1hLnBhcnNlKEpTT04ucGFyc2Uoc2VyaWFsaXplZCkpO1xufVxuXG4vKiogV2FpdCB1bnRpbCB0aGUgZ3VhcmRlZCBtb2RlbC1nYXRld2F5IGhlYWx0aCByb3V0ZSBhY2NlcHRzIHRoZSBydW5uZXIgdG9rZW4uICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd2FpdEZvckdlbmllQ29kZUdhdGV3YXkoXG4gIGhlYWx0aFVybDogc3RyaW5nLFxuICBiZWFyZXJUb2tlbjogc3RyaW5nLFxuICB0aW1lb3V0TXM6IG51bWJlcixcbik6IFByb21pc2U8dm9pZD4ge1xuICBmb3IgYXdhaXQgKGNvbnN0IHJlYWR5IG9mIGFzeW5jVXRpbHMucG9sbChcbiAgICBhc3luYyAoeyBzaWduYWwgfSkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChoZWFsdGhVcmwsIHtcbiAgICAgICAgICBoZWFkZXJzOiB7IGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtiZWFyZXJUb2tlbn1gIH0sXG4gICAgICAgICAgc2lnbmFsLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlLm9rO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIGludGVydmFsTXM6IDIwMCxcbiAgICAgIHRpbWVvdXRNcyxcbiAgICAgIHByZWRpY2F0ZTogKHJlYWR5KSA9PiAhcmVhZHksXG4gICAgfSxcbiAgKSkge1xuICAgIGlmIChyZWFkeSkgcmV0dXJuO1xuICB9XG59XG5cbi8qKiBSdW4gR2VuaWUgQ29kZSB3aXRoIGluaGVyaXRlZCB0ZXJtaW5hbCBzdHJlYW1zIGFmdGVyIGl0cyBnYXRld2F5IGlzIHJlYWR5LiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bkdlbmllQ29kZUNoaWxkKFxuICBlbnZpcm9ubWVudDogTm9kZUpTLlByb2Nlc3NFbnYgPSBwcm9jZXNzLmVudixcbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBvcHRpb25zID0gZ2VuaWVDb2RlUnVubmVyT3B0aW9ucyhlbnZpcm9ubWVudCk7XG4gIGxvZ2dlci5pbmZvKFwid2FpdGluZyBmb3IgbW9kZWwgZ2F0ZXdheVwiLCB7XG4gICAgZ2F0ZXdheTogb3B0aW9ucy5nYXRld2F5SGVhbHRoVXJsLFxuICAgIHRpbWVvdXRNczogb3B0aW9ucy5zdGFydHVwVGltZW91dE1zLFxuICB9KTtcbiAgYXdhaXQgd2FpdEZvckdlbmllQ29kZUdhdGV3YXkoXG4gICAgb3B0aW9ucy5nYXRld2F5SGVhbHRoVXJsLFxuICAgIG9wdGlvbnMuYmVhcmVyVG9rZW4sXG4gICAgb3B0aW9ucy5zdGFydHVwVGltZW91dE1zLFxuICApO1xuICBsb2dnZXIuaW5mbyhcIm1vZGVsIGdhdGV3YXkgcmVhZHk7IHN0YXJ0aW5nIEdlbmllIENvZGVcIiwge1xuICAgIGV4ZWN1dGFibGU6IG9wdGlvbnMuZXhlY3V0YWJsZSxcbiAgICBob21lOiBvcHRpb25zLmhvbWUsXG4gIH0pO1xuICBjb25zdCBjaGlsZCA9IG5ldyBBcHBLaXRDaGlsZFByb2Nlc3MoXG4gICAgW1xuICAgICAgb3B0aW9ucy5leGVjdXRhYmxlLFxuICAgICAgWy4uLm9wdGlvbnMuYXJndW1lbnRzXSxcbiAgICAgIHtcbiAgICAgICAgY3dkOiBwcm9jZXNzLmN3ZCgpLFxuICAgICAgICBlbnY6IHtcbiAgICAgICAgICAuLi5lbnZpcm9ubWVudCxcbiAgICAgICAgICBHRU5JRV9IT01FOiBvcHRpb25zLmhvbWUsXG4gICAgICAgIH0sXG4gICAgICAgIHN0ZGluOiBcImluaGVyaXRcIixcbiAgICAgICAgc3Rkb3V0OiBcImluaGVyaXRcIixcbiAgICAgICAgc3RkZXJyOiBcImluaGVyaXRcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICB7XG4gICAgICBncmFjZWZ1bFRpbWVvdXRNczogNV8wMDAsXG4gICAgICBmb3JjZVRpbWVvdXRNczogMV8wMDAsXG4gICAgfSxcbiAgKTtcbiAgY29uc3QgcnVubmluZyA9IGNoaWxkLnN0YXJ0KCk7XG4gIGNvbnN0IHNodXRkb3duID0gKCkgPT4ge1xuICAgIHZvaWQgY2hpbGQuc2h1dGRvd24oKTtcbiAgfTtcbiAgZm9yIChjb25zdCBzaWduYWwgb2YgW1wiU0lHSU5UXCIsIFwiU0lHVEVSTVwiLCBcIlNJR0hVUFwiXSBhcyBjb25zdCkge1xuICAgIHByb2Nlc3Mub25jZShzaWduYWwsIHNodXRkb3duKTtcbiAgfVxuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJ1bm5pbmc7XG4gICAgaWYgKHJlc3VsdC5leGl0Q29kZSAhPT0gMCkgcHJvY2Vzcy5leGl0Q29kZSA9IHJlc3VsdC5leGl0Q29kZTtcbiAgfSBmaW5hbGx5IHtcbiAgICBmb3IgKGNvbnN0IHNpZ25hbCBvZiBbXCJTSUdJTlRcIiwgXCJTSUdURVJNXCIsIFwiU0lHSFVQXCJdIGFzIGNvbnN0KSB7XG4gICAgICBwcm9jZXNzLm9mZihzaWduYWwsIHNodXRkb3duKTtcbiAgICB9XG4gICAgYXdhaXQgY2hpbGQuc2h1dGRvd24oKTtcbiAgfVxufVxuXG5leHBvcnQgeyBSVU5ORVJfT1BUSU9OU19FTlYgfTtcbiJdfQ==
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Supervise Genie Code and its authenticated local model gateway.
3
+ *
4
+ * @module
5
+ */
6
+ import * as auth from "@dbx-tools/auth";
7
+ import type { BinContext } from "@dbx-tools/core/bin";
8
+ import { type GenieCodeOptions } from "@dbx-tools/shared-genie-code/options";
9
+ import type { ModelClass } from "@dbx-tools/shared-model/contracts";
10
+ import concurrently from "concurrently";
11
+ import { writeGenieCodeConfig, type GenieCodeHome } from "./config.ts";
12
+ import { installGenieCode } from "./install.ts";
13
+ /** Injectable owners used to prepare and supervise managed Genie Code. */
14
+ export interface GenieCodeRuntimeDependencies {
15
+ createAuthClient: typeof auth.client.createAuthClient;
16
+ install: typeof installGenieCode;
17
+ port(options: {
18
+ host: string;
19
+ port?: number;
20
+ }): Promise<number>;
21
+ resolveBin(packageReference: string, binName: string): string;
22
+ resolveCodexModel(model: string | undefined, profile: string, modelClass?: ModelClass): Promise<string>;
23
+ supervise: typeof concurrently;
24
+ token(): string;
25
+ writeConfig: typeof writeGenieCodeConfig;
26
+ }
27
+ /** Inputs accepted by managed Genie Code preparation and execution. */
28
+ export interface RunGenieCodeOptions {
29
+ cwd?: string;
30
+ dependencies?: Partial<GenieCodeRuntimeDependencies>;
31
+ genieArgs?: readonly string[];
32
+ options?: GenieCodeOptions;
33
+ }
34
+ /** Resolved installation, auth, listener, and home for one invocation. */
35
+ export interface PreparedGenieCodeRuntime {
36
+ bearerToken: string;
37
+ gatewayBaseUrl: string;
38
+ gatewayHealthUrl: string;
39
+ gatewayListen: string;
40
+ gatewayPort: number;
41
+ home: GenieCodeHome;
42
+ installation: BinContext;
43
+ model: string;
44
+ profile: string;
45
+ }
46
+ /** Resolve auth, installation, listener, and configuration before spawning children. */
47
+ export declare function prepareGenieCodeRuntime(input?: RunGenieCodeOptions): Promise<PreparedGenieCodeRuntime>;
48
+ /** Run Genie Code and the model gateway until either process exits. */
49
+ export declare function runGenieCode(input?: RunGenieCodeOptions): Promise<void>;
@@ -0,0 +1,169 @@
1
+ /**
2
+ * Supervise Genie Code and its authenticated local model gateway.
3
+ *
4
+ * @module
5
+ */
6
+ import { randomBytes } from "node:crypto";
7
+ import { rm } from "node:fs/promises";
8
+ import { delimiter, dirname } from "node:path";
9
+ import { DatabricksModelRegistry, models } from "@dbx-tools/appkit-model-gateway";
10
+ import * as auth from "@dbx-tools/auth";
11
+ import { resolveServicePackageBin } from "@dbx-tools/cli-service/definition";
12
+ import { workspaceClient } from "@dbx-tools/databricks";
13
+ import { log } from "@dbx-tools/shared-core";
14
+ import { resolveGenieCodeOptions, } from "@dbx-tools/shared-genie-code/options";
15
+ import concurrently from "concurrently";
16
+ import getPort from "get-port";
17
+ import { writeGenieCodeConfig } from "./config.js";
18
+ import { installGenieCode } from "./install.js";
19
+ import { RUNNER_OPTIONS_ENV } from "./runner.js";
20
+ const logger = log.logger("genie-code");
21
+ const DEFAULT_DEPENDENCIES = {
22
+ createAuthClient: auth.client.createAuthClient,
23
+ install: installGenieCode,
24
+ port: ({ host, port }) => getPort({ host, ...(port ? { port } : {}) }),
25
+ resolveBin: resolveServicePackageBin,
26
+ resolveCodexModel,
27
+ supervise: concurrently,
28
+ token: () => randomBytes(32).toString("base64url"),
29
+ writeConfig: writeGenieCodeConfig,
30
+ };
31
+ /** Resolve a Genie `--model` value to the Codex catalogue slug the gateway publishes. */
32
+ async function resolveCodexModel(model, profile, modelClass) {
33
+ const client = await workspaceClient.createWorkspaceClient({ profile });
34
+ const target = await new DatabricksModelRegistry({ client }).resolve(model, {
35
+ requiresTools: true,
36
+ ...(modelClass ? { modelClass } : {}),
37
+ });
38
+ if (!target) {
39
+ throw new Error(model ? `Genie Code model not found: ${model}` : "No tool-capable chat model is available");
40
+ }
41
+ return models.codexModelSlug(target);
42
+ }
43
+ /** Resolve auth, installation, listener, and configuration before spawning children. */
44
+ export async function prepareGenieCodeRuntime(input = {}) {
45
+ const dependencies = { ...DEFAULT_DEPENDENCIES, ...input.dependencies };
46
+ const options = resolveGenieCodeOptions(input.options);
47
+ logger.info("resolving Databricks authentication", {
48
+ requestedProfile: options.profile,
49
+ });
50
+ const authClient = await dependencies.createAuthClient(options.profile ? { profile: options.profile } : {});
51
+ const profile = authClient.profile;
52
+ if (!profile) {
53
+ throw new Error("Genie Code requires a configured Databricks profile");
54
+ }
55
+ logger.info("preparing Genie Code runtime", {
56
+ profile,
57
+ model: options.model,
58
+ modelClass: options.modelClass,
59
+ });
60
+ const installation = await dependencies.install();
61
+ const host = options.gatewayListen.host;
62
+ const requestedPort = options.gatewayListen.port;
63
+ const gatewayPort = await dependencies.port({
64
+ host,
65
+ ...(requestedPort > 0 ? { port: requestedPort } : {}),
66
+ });
67
+ if (requestedPort > 0 && gatewayPort !== requestedPort) {
68
+ throw new Error(`Genie Code gateway port ${requestedPort} is already in use`);
69
+ }
70
+ const model = await dependencies.resolveCodexModel(options.model, profile, options.modelClass);
71
+ logger.info("resolved Genie Code model", {
72
+ requested: options.model,
73
+ modelClass: options.modelClass,
74
+ model,
75
+ });
76
+ const urlHost = host.includes(":") ? `[${host}]` : host;
77
+ const gatewayBaseUrl = `http://${urlHost}:${gatewayPort}/v1`;
78
+ const gatewayHealthUrl = `http://${urlHost}:${gatewayPort}/api/healthz`;
79
+ const gatewayListen = `tcp://${urlHost}:${gatewayPort}`;
80
+ const bearerToken = dependencies.token();
81
+ const home = await dependencies.writeConfig({
82
+ bearerToken,
83
+ gatewayBaseUrl,
84
+ model,
85
+ profile,
86
+ projectDirectory: input.cwd ?? process.cwd(),
87
+ });
88
+ return {
89
+ bearerToken,
90
+ gatewayBaseUrl,
91
+ gatewayHealthUrl,
92
+ gatewayListen,
93
+ gatewayPort,
94
+ home,
95
+ installation,
96
+ model,
97
+ profile,
98
+ };
99
+ }
100
+ function shellExecutable(path) {
101
+ if (process.platform === "win32")
102
+ return `"${path.replaceAll('"', '""')}"`;
103
+ return `'${path.replaceAll("'", "'\\''")}'`;
104
+ }
105
+ function childPath(...paths) {
106
+ return [...new Set([...paths.map(dirname), process.env.PATH].filter(Boolean))].join(delimiter);
107
+ }
108
+ /** Run Genie Code and the model gateway until either process exits. */
109
+ export async function runGenieCode(input = {}) {
110
+ const dependencies = { ...DEFAULT_DEPENDENCIES, ...input.dependencies };
111
+ const prepared = await prepareGenieCodeRuntime({
112
+ ...input,
113
+ dependencies,
114
+ });
115
+ const gatewayBin = dependencies.resolveBin(import.meta.url, "dbx-model-gateway");
116
+ const runnerBin = dependencies.resolveBin(import.meta.url, "dbx-genie");
117
+ const path = childPath(gatewayBin, runnerBin);
118
+ const runnerOptions = {
119
+ executable: prepared.installation.path,
120
+ arguments: ["-p", prepared.home.overlayName, ...(input.genieArgs ?? [])],
121
+ home: prepared.home.home,
122
+ gatewayHealthUrl: prepared.gatewayHealthUrl,
123
+ bearerToken: prepared.bearerToken,
124
+ startupTimeoutMs: 60_000,
125
+ };
126
+ const { result } = dependencies.supervise([
127
+ {
128
+ command: shellExecutable(gatewayBin),
129
+ name: "gateway",
130
+ env: {
131
+ ...process.env,
132
+ PATH: path,
133
+ LISTEN: prepared.gatewayListen,
134
+ DATABRICKS_CONFIG_PROFILE: prepared.profile,
135
+ DBX_TOOLS_MODEL_GATEWAY_BEARER_TOKEN: prepared.bearerToken,
136
+ },
137
+ },
138
+ {
139
+ command: shellExecutable(runnerBin),
140
+ name: "genie",
141
+ env: {
142
+ ...process.env,
143
+ PATH: path,
144
+ DATABRICKS_CONFIG_PROFILE: prepared.profile,
145
+ [RUNNER_OPTIONS_ENV]: JSON.stringify(runnerOptions),
146
+ },
147
+ },
148
+ ], {
149
+ cwd: input.cwd ?? process.cwd(),
150
+ raw: true,
151
+ killOthersOn: ["failure", "success"],
152
+ killSignal: "SIGTERM",
153
+ killTimeout: 17_000,
154
+ successCondition: "command-genie",
155
+ });
156
+ logger.info("started Genie Code and model gateway", {
157
+ profile: prepared.profile,
158
+ model: prepared.model,
159
+ gateway: prepared.gatewayBaseUrl,
160
+ home: prepared.home.home,
161
+ });
162
+ try {
163
+ await result;
164
+ }
165
+ finally {
166
+ await rm(prepared.home.overlayPath, { force: true });
167
+ }
168
+ }
169
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9nZW5pZS1jb2RlL3J1bnRpbWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUVILE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDMUMsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3RDLE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQy9DLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNsRixPQUFPLEtBQUssSUFBSSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hDLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRTdFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDN0MsT0FBTyxFQUNMLHVCQUF1QixHQUd4QixNQUFNLHNDQUFzQyxDQUFDO0FBRTlDLE9BQU8sWUFBWSxNQUFNLGNBQWMsQ0FBQztBQUN4QyxPQUFPLE9BQU8sTUFBTSxVQUFVLENBQUM7QUFFL0IsT0FBTyxFQUFFLG9CQUFvQixFQUFzQixNQUFNLGFBQWEsQ0FBQztBQUN2RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDaEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRWpELE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7QUFrQnhDLE1BQU0sb0JBQW9CLEdBQWlDO0lBQ3pELGdCQUFnQixFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCO0lBQzlDLE9BQU8sRUFBRSxnQkFBZ0I7SUFDekIsSUFBSSxFQUFFLENBQUMs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QUksT0FBTyxDQUFDLEdBQUcsRUFBRTtRQUMvQixHQUFHLEVBQUUsSUFBSTtRQUNULFlBQVksRUFBRSxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUM7UUFDcEMsVUFBVSxFQUFFLFNBQVM7UUFDckIsV0FBVyxFQUFFLE1BQU07UUFDbkIsZ0JBQWdCLEVBQUUsZUFBZTtLQUNsQyxDQUNGLENBQUM7SUFDRixNQUFNLENBQUMsSUFBSSxDQUFDLHNDQUFzQyxFQUFFO1FBQ2xELE9BQU8sRUFBRSxRQUFRLENBQUMsT0FBTztRQUN6QixLQUFLLEVBQUUsUUFBUSxDQUFDLEtBQUs7UUFDckIsT0FBTyxFQUFFLFFBQVEsQ0FBQyxjQUFjO1FBQ2hDLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUk7S0FDekIsQ0FBQyxDQUFDO0lBQ0gsSUFBSSxDQUFDO1FBQ0gsTUFBTSxNQUFNLENBQUM7SUFDZixDQUFDO1lBQVMsQ0FBQztRQUNULE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDdkQsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFN1cGVydmlzZSBHZW5pZSBDb2RlIGFuZCBpdHMgYXV0aGVudGljYXRlZCBsb2NhbCBtb2RlbCBnYXRld2F5LlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyByYW5kb21CeXRlcyB9IGZyb20gXCJub2RlOmNyeXB0b1wiO1xuaW1wb3J0IHsgcm0gfSBmcm9tIFwibm9kZTpmcy9wcm9taXNlc1wiO1xuaW1wb3J0IHsgZGVsaW1pdGVyLCBkaXJuYW1lIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgRGF0YWJyaWNrc01vZGVsUmVnaXN0cnksIG1vZGVscyB9IGZyb20gXCJAZGJ4LXRvb2xzL2FwcGtpdC1tb2RlbC1nYXRld2F5XCI7XG5pbXBvcnQgKiBhcyBhdXRoIGZyb20gXCJAZGJ4LXRvb2xzL2F1dGhcIjtcbmltcG9ydCB7IHJlc29sdmVTZXJ2aWNlUGFja2FnZUJpbiB9IGZyb20gXCJAZGJ4LXRvb2xzL2NsaS1zZXJ2aWNlL2RlZmluaXRpb25cIjtcbmltcG9ydCB0eXBlIHsgQmluQ29udGV4dCB9IGZyb20gXCJAZGJ4LXRvb2xzL2NvcmUvYmluXCI7XG5pbXBvcnQgeyB3b3Jrc3BhY2VDbGllbnQgfSBmcm9tIFwiQGRieC10b29scy9kYXRhYnJpY2tzXCI7XG5pbXBvcnQgeyBsb2cgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHtcbiAgcmVzb2x2ZUdlbmllQ29kZU9wdGlvbnMsXG4gIHR5cGUgR2VuaWVDb2RlT3B0aW9ucyxcbiAgdHlwZSBHZW5pZUNvZGVSdW5uZXJPcHRpb25zLFxufSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtZ2VuaWUtY29kZS9vcHRpb25zXCI7XG5pbXBvcnQgdHlwZSB7IE1vZGVsQ2xhc3MgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtbW9kZWwvY29udHJhY3RzXCI7XG5pbXBvcnQgY29uY3VycmVudGx5IGZyb20gXCJjb25jdXJyZW50bHlcIjtcbmltcG9ydCBnZXRQb3J0IGZyb20gXCJnZXQtcG9ydFwiO1xuXG5pbXBvcnQgeyB3cml0ZUdlbmllQ29kZUNvbmZpZywgdHlwZSBHZW5pZUNvZGVIb21lIH0gZnJvbSBcIi4vY29uZmlnLnRzXCI7XG5pbXBvcnQgeyBpbnN0YWxsR2VuaWVDb2RlIH0gZnJvbSBcIi4vaW5zdGFsbC50c1wiO1xuaW1wb3J0IHsgUlVOTkVSX09QVElPTlNfRU5WIH0gZnJvbSBcIi4vcnVubmVyLnRzXCI7XG5cbmNvbnN0IGxvZ2dlciA9IGxvZy5sb2dnZXIoXCJnZW5pZS1jb2RlXCIpO1xuXG4vKiogSW5qZWN0YWJsZSBvd25lcnMgdXNlZCB0byBwcmVwYXJlIGFuZCBzdXBlcnZpc2UgbWFuYWdlZCBHZW5pZSBDb2RlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZW5pZUNvZGVSdW50aW1lRGVwZW5kZW5jaWVzIHtcbiAgY3JlYXRlQXV0aENsaWVudDogdHlwZW9mIGF1dGguY2xpZW50LmNyZWF0ZUF1dGhDbGllbnQ7XG4gIGluc3RhbGw6IHR5cGVvZiBpbnN0YWxsR2VuaWVDb2RlO1xuICBwb3J0KG9wdGlvbnM6IHsgaG9zdDogc3RyaW5nOyBwb3J0PzogbnVtYmVyIH0pOiBQcm9taXNlPG51bWJlcj47XG4gIHJlc29sdmVCaW4ocGFja2FnZVJlZmVyZW5jZTogc3RyaW5nLCBiaW5OYW1lOiBzdHJpbmcpOiBzdHJpbmc7XG4gIHJlc29sdmVDb2RleE1vZGVsKFxuICAgIG1vZGVsOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgcHJvZmlsZTogc3RyaW5nLFxuICAgIG1vZGVsQ2xhc3M/OiBNb2RlbENsYXNzLFxuICApOiBQcm9taXNlPHN0cmluZz47XG4gIHN1cGVydmlzZTogdHlwZW9mIGNvbmN1cnJlbnRseTtcbiAgdG9rZW4oKTogc3RyaW5nO1xuICB3cml0ZUNvbmZpZzogdHlwZW9mIHdyaXRlR2VuaWVDb2RlQ29uZmlnO1xufVxuXG5jb25zdCBERUZBVUxUX0RFUEVOREVOQ0lFUzogR2VuaWVDb2RlUnVudGltZURlcGVuZGVuY2llcyA9IHtcbiAgY3JlYXRlQXV0aENsaWVudDogYXV0aC5jbGllbnQuY3JlYXRlQXV0aENsaWVudCxcbiAgaW5zdGFsbDogaW5zdGFsbEdlbmllQ29kZSxcbiAgcG9ydDogKHsgaG9zdCwgcG9ydCB9KSA9PiBnZXRQb3J0KHsgaG9zdCwgLi4uKHBvcnQgPyB7IHBvcnQgfSA6IHt9KSB9KSxcbiAgcmVzb2x2ZUJpbjogcmVzb2x2ZVNlcnZpY2VQYWNrYWdlQmluLFxuICByZXNvbHZlQ29kZXhNb2RlbCxcbiAgc3VwZXJ2aXNlOiBjb25jdXJyZW50bHksXG4gIHRva2VuOiAoKSA9PiByYW5kb21CeXRlcygzMikudG9TdHJpbmcoXCJiYXNlNjR1cmxcIiksXG4gIHdyaXRlQ29uZmlnOiB3cml0ZUdlbmllQ29kZUNvbmZpZyxcbn07XG5cbi8qKiBSZXNvbHZlIGEgR2VuaWUgYC0tbW9kZWxgIHZhbHVlIHRvIHRoZSBDb2RleCBjYXRhbG9ndWUgc2x1ZyB0aGUgZ2F0ZXdheSBwdWJsaXNoZXMuICovXG5hc3luYyBmdW5jdGlvbiByZXNvbHZlQ29kZXhNb2RlbChcbiAgbW9kZWw6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgcHJvZmlsZTogc3RyaW5nLFxuICBtb2RlbENsYXNzPzogTW9kZWxDbGFzcyxcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGNsaWVudCA9IGF3YWl0IHdvcmtzcGFjZUNsaWVudC5jcmVhdGVXb3Jrc3BhY2VDbGllbnQoeyBwcm9maWxlIH0pO1xuICBjb25zdCB0YXJnZXQgPSBhd2FpdCBuZXcgRGF0YWJyaWNrc01vZGVsUmVnaXN0cnkoeyBjbGllbnQgfSkucmVzb2x2ZShtb2RlbCwge1xuICAgIHJlcXVpcmVzVG9vbHM6IHRydWUsXG4gICAgLi4uKG1vZGVsQ2xhc3MgPyB7IG1vZGVsQ2xhc3MgfSA6IHt9KSxcbiAgfSk7XG4gIGlmICghdGFyZ2V0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgbW9kZWwgPyBgR2VuaWUgQ29kZSBtb2RlbCBub3QgZm91bmQ6ICR7bW9kZWx9YCA6IFwiTm8gdG9vbC1jYXBhYmxlIGNoYXQgbW9kZWwgaXMgYXZhaWxhYmxlXCIsXG4gICAgKTtcbiAgfVxuICByZXR1cm4gbW9kZWxzLmNvZGV4TW9kZWxTbHVnKHRhcmdldCk7XG59XG5cbi8qKiBJbnB1dHMgYWNjZXB0ZWQgYnkgbWFuYWdlZCBHZW5pZSBDb2RlIHByZXBhcmF0aW9uIGFuZCBleGVjdXRpb24uICovXG5leHBvcnQgaW50ZXJmYWNlIFJ1bkdlbmllQ29kZU9wdGlvbnMge1xuICBjd2Q/OiBzdHJpbmc7XG4gIGRlcGVuZGVuY2llcz86IFBhcnRpYWw8R2VuaWVDb2RlUnVudGltZURlcGVuZGVuY2llcz47XG4gIGdlbmllQXJncz86IHJlYWRvbmx5IHN0cmluZ1tdO1xuICBvcHRpb25zPzogR2VuaWVDb2RlT3B0aW9ucztcbn1cblxuLyoqIFJlc29sdmVkIGluc3RhbGxhdGlvbiwgYXV0aCwgbGlzdGVuZXIsIGFuZCBob21lIGZvciBvbmUgaW52b2NhdGlvbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJlcGFyZWRHZW5pZUNvZGVSdW50aW1lIHtcbiAgYmVhcmVyVG9rZW46IHN0cmluZztcbiAgZ2F0ZXdheUJhc2VVcmw6IHN0cmluZztcbiAgZ2F0ZXdheUhlYWx0aFVybDogc3RyaW5nO1xuICBnYXRld2F5TGlzdGVuOiBzdHJpbmc7XG4gIGdhdGV3YXlQb3J0OiBudW1iZXI7XG4gIGhvbWU6IEdlbmllQ29kZUhvbWU7XG4gIGluc3RhbGxhdGlvbjogQmluQ29udGV4dDtcbiAgbW9kZWw6IHN0cmluZztcbiAgcHJvZmlsZTogc3RyaW5nO1xufVxuXG4vKiogUmVzb2x2ZSBhdXRoLCBpbnN0YWxsYXRpb24sIGxpc3RlbmVyLCBhbmQgY29uZmlndXJhdGlvbiBiZWZvcmUgc3Bhd25pbmcgY2hpbGRyZW4uICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJlcGFyZUdlbmllQ29kZVJ1bnRpbWUoXG4gIGlucHV0OiBSdW5HZW5pZUNvZGVPcHRpb25zID0ge30sXG4pOiBQcm9taXNlPFByZXBhcmVkR2VuaWVDb2RlUnVudGltZT4ge1xuICBjb25zdCBkZXBlbmRlbmNpZXMgPSB7IC4uLkRFRkFVTFRfREVQRU5ERU5DSUVTLCAuLi5pbnB1dC5kZXBlbmRlbmNpZXMgfTtcbiAgY29uc3Qgb3B0aW9ucyA9IHJlc29sdmVHZW5pZUNvZGVPcHRpb25zKGlucHV0Lm9wdGlvbnMpO1xuICBsb2dnZXIuaW5mbyhcInJlc29sdmluZyBEYXRhYnJpY2tzIGF1dGhlbnRpY2F0aW9uXCIsIHtcbiAgICByZXF1ZXN0ZWRQcm9maWxlOiBvcHRpb25zLnByb2ZpbGUsXG4gIH0pO1xuICBjb25zdCBhdXRoQ2xpZW50ID0gYXdhaXQgZGVwZW5kZW5jaWVzLmNyZWF0ZUF1dGhDbGllbnQoXG4gICAgb3B0aW9ucy5wcm9maWxlID8geyBwcm9maWxlOiBvcHRpb25zLnByb2ZpbGUgfSA6IHt9LFxuICApO1xuICBjb25zdCBwcm9maWxlID0gYXV0aENsaWVudC5wcm9maWxlO1xuICBpZiAoIXByb2ZpbGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJHZW5pZSBDb2RlIHJlcXVpcmVzIGEgY29uZmlndXJlZCBEYXRhYnJpY2tzIHByb2ZpbGVcIik7XG4gIH1cbiAgbG9nZ2VyLmluZm8oXCJwcmVwYXJpbmcgR2VuaWUgQ29kZSBydW50aW1lXCIsIHtcbiAgICBwcm9maWxlLFxuICAgIG1vZGVsOiBvcHRpb25zLm1vZGVsLFxuICAgIG1vZGVsQ2xhc3M6IG9wdGlvbnMubW9kZWxDbGFzcyxcbiAgfSk7XG4gIGNvbnN0IGluc3RhbGxhdGlvbiA9IGF3YWl0IGRlcGVuZGVuY2llcy5pbnN0YWxsKCk7XG4gIGNvbnN0IGhvc3QgPSBvcHRpb25zLmdhdGV3YXlMaXN0ZW4uaG9zdDtcbiAgY29uc3QgcmVxdWVzdGVkUG9ydCA9IG9wdGlvbnMuZ2F0ZXdheUxpc3Rlbi5wb3J0O1xuICBjb25zdCBnYXRld2F5UG9ydCA9IGF3YWl0IGRlcGVuZGVuY2llcy5wb3J0KHtcbiAgICBob3N0LFxuICAgIC4uLihyZXF1ZXN0ZWRQb3J0ID4gMCA/IHsgcG9ydDogcmVxdWVzdGVkUG9ydCB9IDoge30pLFxuICB9KTtcbiAgaWYgKHJlcXVlc3RlZFBvcnQgPiAwICYmIGdhdGV3YXlQb3J0ICE9PSByZXF1ZXN0ZWRQb3J0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBHZW5pZSBDb2RlIGdhdGV3YXkgcG9ydCAke3JlcXVlc3RlZFBvcnR9IGlzIGFscmVhZHkgaW4gdXNlYCk7XG4gIH1cbiAgY29uc3QgbW9kZWwgPSBhd2FpdCBkZXBlbmRlbmNpZXMucmVzb2x2ZUNvZGV4TW9kZWwob3B0aW9ucy5tb2RlbCwgcHJvZmlsZSwgb3B0aW9ucy5tb2RlbENsYXNzKTtcbiAgbG9nZ2VyLmluZm8oXCJyZXNvbHZlZCBHZW5pZSBDb2RlIG1vZGVsXCIsIHtcbiAgICByZXF1ZXN0ZWQ6IG9wdGlvbnMubW9kZWwsXG4gICAgbW9kZWxDbGFzczogb3B0aW9ucy5tb2RlbENsYXNzLFxuICAgIG1vZGVsLFxuICB9KTtcbiAgY29uc3QgdXJsSG9zdCA9IGhvc3QuaW5jbHVkZXMoXCI6XCIpID8gYFske2hvc3R9XWAgOiBob3N0O1xuICBjb25zdCBnYXRld2F5QmFzZVVybCA9IGBodHRwOi8vJHt1cmxIb3N0fToke2dhdGV3YXlQb3J0fS92MWA7XG4gIGNvbnN0IGdhdGV3YXlIZWFsdGhVcmwgPSBgaHR0cDovLyR7dXJsSG9zdH06JHtnYXRld2F5UG9ydH0vYXBpL2hlYWx0aHpgO1xuICBjb25zdCBnYXRld2F5TGlzdGVuID0gYHRjcDovLyR7dXJsSG9zdH06JHtnYXRld2F5UG9ydH1gO1xuICBjb25zdCBiZWFyZXJUb2tlbiA9IGRlcGVuZGVuY2llcy50b2tlbigpO1xuICBjb25zdCBob21lID0gYXdhaXQgZGVwZW5kZW5jaWVzLndyaXRlQ29uZmlnKHtcbiAgICBiZWFyZXJUb2tlbixcbiAgICBnYXRld2F5QmFzZVVybCxcbiAgICBtb2RlbCxcbiAgICBwcm9maWxlLFxuICAgIHByb2plY3REaXJlY3Rvcnk6IGlucHV0LmN3ZCA/PyBwcm9jZXNzLmN3ZCgpLFxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBiZWFyZXJUb2tlbixcbiAgICBnYXRld2F5QmFzZVVybCxcbiAgICBnYXRld2F5SGVhbHRoVXJsLFxuICAgIGdhdGV3YXlMaXN0ZW4sXG4gICAgZ2F0ZXdheVBvcnQsXG4gICAgaG9tZSxcbiAgICBpbnN0YWxsYXRpb24sXG4gICAgbW9kZWwsXG4gICAgcHJvZmlsZSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gc2hlbGxFeGVjdXRhYmxlKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSBcIndpbjMyXCIpIHJldHVybiBgXCIke3BhdGgucmVwbGFjZUFsbCgnXCInLCAnXCJcIicpfVwiYDtcbiAgcmV0dXJuIGAnJHtwYXRoLnJlcGxhY2VBbGwoXCInXCIsIFwiJ1xcXFwnJ1wiKX0nYDtcbn1cblxuZnVuY3Rpb24gY2hpbGRQYXRoKC4uLnBhdGhzOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gIHJldHVybiBbLi4ubmV3IFNldChbLi4ucGF0aHMubWFwKGRpcm5hbWUpLCBwcm9jZXNzLmVudi5QQVRIXS5maWx0ZXIoQm9vbGVhbikpXS5qb2luKGRlbGltaXRlcik7XG59XG5cbi8qKiBSdW4gR2VuaWUgQ29kZSBhbmQgdGhlIG1vZGVsIGdhdGV3YXkgdW50aWwgZWl0aGVyIHByb2Nlc3MgZXhpdHMuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuR2VuaWVDb2RlKGlucHV0OiBSdW5HZW5pZUNvZGVPcHRpb25zID0ge30pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgZGVwZW5kZW5jaWVzID0geyAuLi5ERUZBVUxUX0RFUEVOREVOQ0lFUywgLi4uaW5wdXQuZGVwZW5kZW5jaWVzIH07XG4gIGNvbnN0IHByZXBhcmVkID0gYXdhaXQgcHJlcGFyZUdlbmllQ29kZVJ1bnRpbWUoe1xuICAgIC4uLmlucHV0LFxuICAgIGRlcGVuZGVuY2llcyxcbiAgfSk7XG4gIGNvbnN0IGdhdGV3YXlCaW4gPSBkZXBlbmRlbmNpZXMucmVzb2x2ZUJpbihpbXBvcnQubWV0YS51cmwsIFwiZGJ4LW1vZGVsLWdhdGV3YXlcIik7XG4gIGNvbnN0IHJ1bm5lckJpbiA9IGRlcGVuZGVuY2llcy5yZXNvbHZlQmluKGltcG9ydC5tZXRhLnVybCwgXCJkYngtZ2VuaWVcIik7XG4gIGNvbnN0IHBhdGggPSBjaGlsZFBhdGgoZ2F0ZXdheUJpbiwgcnVubmVyQmluKTtcbiAgY29uc3QgcnVubmVyT3B0aW9uczogR2VuaWVDb2RlUnVubmVyT3B0aW9ucyA9IHtcbiAgICBleGVjdXRhYmxlOiBwcmVwYXJlZC5pbnN0YWxsYXRpb24ucGF0aCxcbiAgICBhcmd1bWVudHM6IFtcIi1wXCIsIHByZXBhcmVkLmhvbWUub3ZlcmxheU5hbWUsIC4uLihpbnB1dC5nZW5pZUFyZ3MgPz8gW10pXSxcbiAgICBob21lOiBwcmVwYXJlZC5ob21lLmhvbWUsXG4gICAgZ2F0ZXdheUhlYWx0aFVybDogcHJlcGFyZWQuZ2F0ZXdheUhlYWx0aFVybCxcbiAgICBiZWFyZXJUb2tlbjogcHJlcGFyZWQuYmVhcmVyVG9rZW4sXG4gICAgc3RhcnR1cFRpbWVvdXRNczogNjBfMDAwLFxuICB9O1xuICBjb25zdCB7IHJlc3VsdCB9ID0gZGVwZW5kZW5jaWVzLnN1cGVydmlzZShcbiAgICBbXG4gICAgICB7XG4gICAgICAgIGNvbW1hbmQ6IHNoZWxsRXhlY3V0YWJsZShnYXRld2F5QmluKSxcbiAgICAgICAgbmFtZTogXCJnYXRld2F5XCIsXG4gICAgICAgIGVudjoge1xuICAgICAgICAgIC4uLnByb2Nlc3MuZW52LFxuICAgICAgICAgIFBBVEg6IHBhdGgsXG4gICAgICAgICAgTElTVEVOOiBwcmVwYXJlZC5nYXRld2F5TGlzdGVuLFxuICAgICAgICAgIERBVEFCUklDS1NfQ09ORklHX1BST0ZJTEU6IHByZXBhcmVkLnByb2ZpbGUsXG4gICAgICAgICAgREJYX1RPT0xTX01PREVMX0dBVEVXQVlfQkVBUkVSX1RPS0VOOiBwcmVwYXJlZC5iZWFyZXJUb2tlbixcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNvbW1hbmQ6IHNoZWxsRXhlY3V0YWJsZShydW5uZXJCaW4pLFxuICAgICAgICBuYW1lOiBcImdlbmllXCIsXG4gICAgICAgIGVudjoge1xuICAgICAgICAgIC4uLnByb2Nlc3MuZW52LFxuICAgICAgICAgIFBBVEg6IHBhdGgsXG4gICAgICAgICAgREFUQUJSSUNLU19DT05GSUdfUFJPRklMRTogcHJlcGFyZWQucHJvZmlsZSxcbiAgICAgICAgICBbUlVOTkVSX09QVElPTlNfRU5WXTogSlNPTi5zdHJpbmdpZnkocnVubmVyT3B0aW9ucyksXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIF0sXG4gICAge1xuICAgICAgY3dkOiBpbnB1dC5jd2QgPz8gcHJvY2Vzcy5jd2QoKSxcbiAgICAgIHJhdzogdHJ1ZSxcbiAgICAgIGtpbGxPdGhlcnNPbjogW1wiZmFpbHVyZVwiLCBcInN1Y2Nlc3NcIl0sXG4gICAgICBraWxsU2lnbmFsOiBcIlNJR1RFUk1cIixcbiAgICAgIGtpbGxUaW1lb3V0OiAxN18wMDAsXG4gICAgICBzdWNjZXNzQ29uZGl0aW9uOiBcImNvbW1hbmQtZ2VuaWVcIixcbiAgICB9LFxuICApO1xuICBsb2dnZXIuaW5mbyhcInN0YXJ0ZWQgR2VuaWUgQ29kZSBhbmQgbW9kZWwgZ2F0ZXdheVwiLCB7XG4gICAgcHJvZmlsZTogcHJlcGFyZWQucHJvZmlsZSxcbiAgICBtb2RlbDogcHJlcGFyZWQubW9kZWwsXG4gICAgZ2F0ZXdheTogcHJlcGFyZWQuZ2F0ZXdheUJhc2VVcmwsXG4gICAgaG9tZTogcHJlcGFyZWQuaG9tZS5ob21lLFxuICB9KTtcbiAgdHJ5IHtcbiAgICBhd2FpdCByZXN1bHQ7XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgcm0ocHJlcGFyZWQuaG9tZS5vdmVybGF5UGF0aCwgeyBmb3JjZTogdHJ1ZSB9KTtcbiAgfVxufVxuIl19
@@ -12,8 +12,8 @@ import { buildServiceCommand } from "@dbx-tools/cli-service/cli";
12
12
  import { defineService } from "@dbx-tools/cli-service/definition";
13
13
  import { runGraphiti } from "@dbx-tools/graphiti/runtime";
14
14
  import { Command } from "commander";
15
- import { PACKAGE_VERSION } from "../../index.js";
16
15
  import { GraphitiCliOptionsSchema, GraphitiOptionsSchema, } from "./options.js";
16
+ import { PACKAGE_VERSION } from "../../index.js";
17
17
  /** Define a Graphiti service without duplicating installation or lifecycle policy. */
18
18
  export function graphitiServiceDefinition(options = {}) {
19
19
  return defineService(import.meta.url, {
@@ -40,4 +40,4 @@ export function buildProgram(name = "dbx graphiti", dependencies = { run: runGra
40
40
  function graphitiOptions(command) {
41
41
  return GraphitiOptionsSchema.parse(parseArgs(command, GraphitiCliOptionsSchema));
42
42
  }
43
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2dyYXBoaXRpL2NsaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7R0FRRztBQUNILE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxtQkFBbUIsRUFBa0MsTUFBTSw0QkFBNEIsQ0FBQztBQUNqRyxPQUFPLEVBQUUsYUFBYSxFQUE2QixNQUFNLG1DQUFtQyxDQUFDO0FBQzdGLE9BQU8sRUFBRSxXQUFXLEVBQStCLE1BQU0sNkJBQTZCLENBQUM7QUFDdkYsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUVwQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakQsT0FBTyxFQUNMLHdCQUF3QixFQUN4QixxQkFBcUIsR0FFdEIsTUFBTSxjQUFjLENBQUM7QUFhdEIsc0ZBQXNGO0FBQ3RGLE1BQU0sVUFBVSx5QkFBeUIsQ0FDdkMsVUFBa0MsRUFBRTtJQUVwQyxPQUFPLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtRQUNwQyxFQUFFLEVBQUUsd0JBQXdCO1FBQzVCLElBQUksRUFBRSxjQUFjO1FBQ3BCLGFBQWEsRUFBRSxFQUFFLElBQUksRUFBRSxvQkFBb0IsRUFBRTtRQUM3QyxPQUFPLEVBQUU7WUFDUCxPQUFPLEVBQUUsY0FBYztZQUN2QixTQUFTLEVBQUUsYUFBYSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUMvRDtLQUNGLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxzRUFBc0U7QUFDdEUsTUFBTSxVQUFVLFlBQVksQ0FDMUIsSUFBSSxHQUFHLGNBQWMsRUFDckIsZUFBd0MsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFO0lBRTVELE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FDckIsSUFBSSxPQUFPLEVBQUU7U0FDVixJQUFJLENBQUMsSUFBSSxDQUFDO1NBQ1YsV0FBVyxDQUFDLHlEQUF5RCxDQUFDO1NBQ3RFLE9BQU8sQ0FBQyxlQUFlLEVBQUUsZUFBZSxDQUFDLEVBQzVDLHdCQUF3QixDQUN6QixDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksRUFBRTtRQUNsQixNQUFNLFlBQVksQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDbkQsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLENBQUMsVUFBVSxDQUNoQixtQkFBbUIsQ0FDakIsR0FBRyxFQUFFLENBQUMseUJBQXlCLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQ3pELFlBQVksQ0FBQyxPQUFPLENBQ3JCLENBQ0YsQ0FBQztJQUNGLE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUM7QUFFRCxTQUFTLGVBQWUsQ0FBQyxPQUFnQjtJQUN2QyxPQUFPLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLHdCQUF3QixDQUFDLENBQUMsQ0FBQztBQUNuRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb21tYW5kZXItb3duZWQgR3JhcGhpdGkgQ0xJIGFuZCBzaGFyZWQgY3VycmVudC11c2VyIHNlcnZpY2UgZGVmaW5pdGlvbi5cbiAqXG4gKiBUaGlzIG1vZHVsZSBvd25zIGV2ZXJ5IHVzZXItZmFjaW5nIEdyYXBoaXRpIGNvbW1hbmQuIFRoZSBzaGFyZWQgR3JhcGhpdGkgWm9kXG4gKiBzY2hlbWEgb3ducyBpdHMgb3B0aW9ucywgZW52aXJvbm1lbnQgbmFtZXMsIGRlZmF1bHRzLCBhbmQgdmFsaWRhdGlvbi4gVGhlXG4gKiBOb2RlIEdyYXBoaXRpIHBhY2thZ2Ugb3ducyBydW50aW1lIGFuZCBQeXRob24gaW50ZXJhY3Rpb24uXG4gKlxuICogQG1vZHVsZVxuICovXG5pbXBvcnQgeyBhZGRBcmdzLCBwYXJzZUFyZ3MsIHNlcmlhbGl6ZUFyZ3MgfSBmcm9tIFwiQGRieC10b29scy9jbGktYXJnc1wiO1xuaW1wb3J0IHsgYnVpbGRTZXJ2aWNlQ29tbWFuZCwgdHlwZSBDbGlTZXJ2aWNlQ2xpRGVwZW5kZW5jaWVzIH0gZnJvbSBcIkBkYngtdG9vbHMvY2xpLXNlcnZpY2UvY2xpXCI7XG5pbXBvcnQgeyBkZWZpbmVTZXJ2aWNlLCB0eXBlIENsaVNlcnZpY2VEZWZpbml0aW9uIH0gZnJvbSBcIkBkYngtdG9vbHMvY2xpLXNlcnZpY2UvZGVmaW5pdGlvblwiO1xuaW1wb3J0IHsgcnVuR3JhcGhpdGksIHR5cGUgR3JhcGhpdGlSdW50aW1lT3B0aW9ucyB9IGZyb20gXCJAZGJ4LXRvb2xzL2dyYXBoaXRpL3J1bnRpbWVcIjtcbmltcG9ydCB7IENvbW1hbmQgfSBmcm9tIFwiY29tbWFuZGVyXCI7XG5cbmltcG9ydCB7IFBBQ0tBR0VfVkVSU0lPTiB9IGZyb20gXCIuLi8uLi9pbmRleC50c1wiO1xuaW1wb3J0IHtcbiAgR3JhcGhpdGlDbGlPcHRpb25zU2NoZW1hLFxuICBHcmFwaGl0aU9wdGlvbnNTY2hlbWEsXG4gIHR5cGUgR3JhcGhpdGlPcHRpb25zLFxufSBmcm9tIFwiLi9vcHRpb25zLnRzXCI7XG5cbi8qKiBJbmplY3RhYmxlIHJ1bnRpbWUgYW5kIHNlcnZpY2UgbGlmZWN5Y2xlIGJvdW5kYXJpZXMgZm9yIENMSSBjYWxsZXJzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcmFwaGl0aUNsaURlcGVuZGVuY2llcyB7XG4gIC8qKiBSdW4gdGhlIEdyYXBoaXRpIHN0YWNrIHRocm91Z2ggdGhlIE5vZGUgcnVudGltZSBvd25lci4gKi9cbiAgcnVuKG9wdGlvbnM6IEdyYXBoaXRpUnVudGltZU9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+O1xuICAvKiogU2hhcmVkIHNlcnZpY2UgY29tbWFuZCBkZXBlbmRlbmNpZXMgZm9yIHRlc3RzIGFuZCBlbWJlZGRpbmcuICovXG4gIHJlYWRvbmx5IHNlcnZpY2U/OiBDbGlTZXJ2aWNlQ2xpRGVwZW5kZW5jaWVzO1xufVxuXG4vKiogUnVudGltZSBvcHRpb25zIHBlcnNpc3RlZCB3aGVuIGluc3RhbGxpbmcgdGhlIEdyYXBoaXRpIGRlc2t0b3Agc2VydmljZS4gKi9cbmV4cG9ydCB0eXBlIEdyYXBoaXRpU2VydmljZU9wdGlvbnMgPSBHcmFwaGl0aU9wdGlvbnM7XG5cbi8qKiBEZWZpbmUgYSBHcmFwaGl0aSBzZXJ2aWNlIHdpdGhvdXQgZHVwbGljYXRpbmcgaW5zdGFsbGF0aW9uIG9yIGxpZmVjeWNsZSBwb2xpY3kuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhpdGlTZXJ2aWNlRGVmaW5pdGlvbihcbiAgb3B0aW9uczogR3JhcGhpdGlTZXJ2aWNlT3B0aW9ucyA9IHt9LFxuKTogQ2xpU2VydmljZURlZmluaXRpb24ge1xuICByZXR1cm4gZGVmaW5lU2VydmljZShpbXBvcnQubWV0YS51cmwsIHtcbiAgICBpZDogXCJkYngtdG9vbHMuY2xpLWdyYXBoaXRpXCIsXG4gICAgbmFtZTogXCJkYnggZ3JhcGhpdGlcIixcbiAgICBweXRob25QYWNrYWdlOiB7IG5hbWU6IFwiZGJ4LXRvb2xzLWdyYXBoaXRpXCIgfSxcbiAgICBjb21tYW5kOiB7XG4gICAgICBiaW5OYW1lOiBcImRieC1ncmFwaGl0aVwiLFxuICAgICAgYXJndW1lbnRzOiBzZXJpYWxpemVBcmdzKEdyYXBoaXRpT3B0aW9uc1NjaGVtYS5wYXJzZShvcHRpb25zKSksXG4gICAgfSxcbiAgfSk7XG59XG5cbi8qKiBCdWlsZCBmb3JlZ3JvdW5kIGV4ZWN1dGlvbiBhbmQgc2hhcmVkIGRlc2t0b3Atc2VydmljZSBjb21tYW5kcy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFByb2dyYW0oXG4gIG5hbWUgPSBcImRieCBncmFwaGl0aVwiLFxuICBkZXBlbmRlbmNpZXM6IEdyYXBoaXRpQ2xpRGVwZW5kZW5jaWVzID0geyBydW46IHJ1bkdyYXBoaXRpIH0sXG4pOiBDb21tYW5kIHtcbiAgY29uc3QgcHJvZ3JhbSA9IGFkZEFyZ3MoXG4gICAgbmV3IENvbW1hbmQoKVxuICAgICAgLm5hbWUobmFtZSlcbiAgICAgIC5kZXNjcmlwdGlvbihcIlJ1biBHcmFwaGl0aSBvciBtYW5hZ2UgaXRzIGN1cnJlbnQtdXNlciBkZXNrdG9wIHNlcnZpY2VcIilcbiAgICAgIC52ZXJzaW9uKFBBQ0tBR0VfVkVSU0lPTiwgXCItdiwgLS12ZXJzaW9uXCIpLFxuICAgIEdyYXBoaXRpQ2xpT3B0aW9uc1NjaGVtYSxcbiAgKS5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IGRlcGVuZGVuY2llcy5ydW4oZ3JhcGhpdGlPcHRpb25zKHByb2dyYW0pKTtcbiAgfSk7XG5cbiAgcHJvZ3JhbS5hZGRDb21tYW5kKFxuICAgIGJ1aWxkU2VydmljZUNvbW1hbmQoXG4gICAgICAoKSA9PiBncmFwaGl0aVNlcnZpY2VEZWZpbml0aW9uKGdyYXBoaXRpT3B0aW9ucyhwcm9ncmFtKSksXG4gICAgICBkZXBlbmRlbmNpZXMuc2VydmljZSxcbiAgICApLFxuICApO1xuICByZXR1cm4gcHJvZ3JhbTtcbn1cblxuZnVuY3Rpb24gZ3JhcGhpdGlPcHRpb25zKGNvbW1hbmQ6IENvbW1hbmQpOiBHcmFwaGl0aU9wdGlvbnMge1xuICByZXR1cm4gR3JhcGhpdGlPcHRpb25zU2NoZW1hLnBhcnNlKHBhcnNlQXJncyhjb21tYW5kLCBHcmFwaGl0aUNsaU9wdGlvbnNTY2hlbWEpKTtcbn1cbiJdfQ==
43
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2dyYXBoaXRpL2NsaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7R0FRRztBQUNILE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxtQkFBbUIsRUFBa0MsTUFBTSw0QkFBNEIsQ0FBQztBQUNqRyxPQUFPLEVBQUUsYUFBYSxFQUE2QixNQUFNLG1DQUFtQyxDQUFDO0FBQzdGLE9BQU8sRUFBRSxXQUFXLEVBQStCLE1BQU0sNkJBQTZCLENBQUM7QUFDdkYsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUVwQyxPQUFPLEVBQ0wsd0JBQXdCLEVBQ3hCLHFCQUFxQixHQUV0QixNQUFNLGNBQWMsQ0FBQztBQUN0QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFhakQsc0ZBQXNGO0FBQ3RGLE1BQU0sVUFBVSx5QkFBeUIsQ0FDdkMsVUFBa0MsRUFBRTtJQUVwQyxPQUFPLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtRQUNwQyxFQUFFLEVBQUUsd0JBQXdCO1FBQzVCLElBQUksRUFBRSxjQUFjO1FBQ3BCLGFBQWEsRUFBRSxFQUFFLElBQUksRUFBRSxvQkFBb0IsRUFBRTtRQUM3QyxPQUFPLEVBQUU7WUFDUCxPQUFPLEVBQUUsY0FBYztZQUN2QixTQUFTLEVBQUUsYUFBYSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUMvRDtLQUNGLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxzRUFBc0U7QUFDdEUsTUFBTSxVQUFVLFlBQVksQ0FDMUIsSUFBSSxHQUFHLGNBQWMsRUFDckIsZUFBd0MsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFO0lBRTVELE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FDckIsSUFBSSxPQUFPLEVBQUU7U0FDVixJQUFJLENBQUMsSUFBSSxDQUFDO1NBQ1YsV0FBVyxDQUFDLHlEQUF5RCxDQUFDO1NBQ3RFLE9BQU8sQ0FBQyxlQUFlLEVBQUUsZUFBZSxDQUFDLEVBQzVDLHdCQUF3QixDQUN6QixDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksRUFBRTtRQUNsQixNQUFNLFlBQVksQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDbkQsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLENBQUMsVUFBVSxDQUNoQixtQkFBbUIsQ0FDakIsR0FBRyxFQUFFLENBQUMseUJBQXlCLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQ3pELFlBQVksQ0FBQyxPQUFPLENBQ3JCLENBQ0YsQ0FBQztJQUNGLE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUM7QUFFRCxTQUFTLGVBQWUsQ0FBQyxPQUFnQjtJQUN2QyxPQUFPLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLHdCQUF3QixDQUFDLENBQUMsQ0FBQztBQUNuRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb21tYW5kZXItb3duZWQgR3JhcGhpdGkgQ0xJIGFuZCBzaGFyZWQgY3VycmVudC11c2VyIHNlcnZpY2UgZGVmaW5pdGlvbi5cbiAqXG4gKiBUaGlzIG1vZHVsZSBvd25zIGV2ZXJ5IHVzZXItZmFjaW5nIEdyYXBoaXRpIGNvbW1hbmQuIFRoZSBzaGFyZWQgR3JhcGhpdGkgWm9kXG4gKiBzY2hlbWEgb3ducyBpdHMgb3B0aW9ucywgZW52aXJvbm1lbnQgbmFtZXMsIGRlZmF1bHRzLCBhbmQgdmFsaWRhdGlvbi4gVGhlXG4gKiBOb2RlIEdyYXBoaXRpIHBhY2thZ2Ugb3ducyBydW50aW1lIGFuZCBQeXRob24gaW50ZXJhY3Rpb24uXG4gKlxuICogQG1vZHVsZVxuICovXG5pbXBvcnQgeyBhZGRBcmdzLCBwYXJzZUFyZ3MsIHNlcmlhbGl6ZUFyZ3MgfSBmcm9tIFwiQGRieC10b29scy9jbGktYXJnc1wiO1xuaW1wb3J0IHsgYnVpbGRTZXJ2aWNlQ29tbWFuZCwgdHlwZSBDbGlTZXJ2aWNlQ2xpRGVwZW5kZW5jaWVzIH0gZnJvbSBcIkBkYngtdG9vbHMvY2xpLXNlcnZpY2UvY2xpXCI7XG5pbXBvcnQgeyBkZWZpbmVTZXJ2aWNlLCB0eXBlIENsaVNlcnZpY2VEZWZpbml0aW9uIH0gZnJvbSBcIkBkYngtdG9vbHMvY2xpLXNlcnZpY2UvZGVmaW5pdGlvblwiO1xuaW1wb3J0IHsgcnVuR3JhcGhpdGksIHR5cGUgR3JhcGhpdGlSdW50aW1lT3B0aW9ucyB9IGZyb20gXCJAZGJ4LXRvb2xzL2dyYXBoaXRpL3J1bnRpbWVcIjtcbmltcG9ydCB7IENvbW1hbmQgfSBmcm9tIFwiY29tbWFuZGVyXCI7XG5cbmltcG9ydCB7XG4gIEdyYXBoaXRpQ2xpT3B0aW9uc1NjaGVtYSxcbiAgR3JhcGhpdGlPcHRpb25zU2NoZW1hLFxuICB0eXBlIEdyYXBoaXRpT3B0aW9ucyxcbn0gZnJvbSBcIi4vb3B0aW9ucy50c1wiO1xuaW1wb3J0IHsgUEFDS0FHRV9WRVJTSU9OIH0gZnJvbSBcIi4uLy4uL2luZGV4LnRzXCI7XG5cbi8qKiBJbmplY3RhYmxlIHJ1bnRpbWUgYW5kIHNlcnZpY2UgbGlmZWN5Y2xlIGJvdW5kYXJpZXMgZm9yIENMSSBjYWxsZXJzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcmFwaGl0aUNsaURlcGVuZGVuY2llcyB7XG4gIC8qKiBSdW4gdGhlIEdyYXBoaXRpIHN0YWNrIHRocm91Z2ggdGhlIE5vZGUgcnVudGltZSBvd25lci4gKi9cbiAgcnVuKG9wdGlvbnM6IEdyYXBoaXRpUnVudGltZU9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+O1xuICAvKiogU2hhcmVkIHNlcnZpY2UgY29tbWFuZCBkZXBlbmRlbmNpZXMgZm9yIHRlc3RzIGFuZCBlbWJlZGRpbmcuICovXG4gIHJlYWRvbmx5IHNlcnZpY2U/OiBDbGlTZXJ2aWNlQ2xpRGVwZW5kZW5jaWVzO1xufVxuXG4vKiogUnVudGltZSBvcHRpb25zIHBlcnNpc3RlZCB3aGVuIGluc3RhbGxpbmcgdGhlIEdyYXBoaXRpIGRlc2t0b3Agc2VydmljZS4gKi9cbmV4cG9ydCB0eXBlIEdyYXBoaXRpU2VydmljZU9wdGlvbnMgPSBHcmFwaGl0aU9wdGlvbnM7XG5cbi8qKiBEZWZpbmUgYSBHcmFwaGl0aSBzZXJ2aWNlIHdpdGhvdXQgZHVwbGljYXRpbmcgaW5zdGFsbGF0aW9uIG9yIGxpZmVjeWNsZSBwb2xpY3kuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JhcGhpdGlTZXJ2aWNlRGVmaW5pdGlvbihcbiAgb3B0aW9uczogR3JhcGhpdGlTZXJ2aWNlT3B0aW9ucyA9IHt9LFxuKTogQ2xpU2VydmljZURlZmluaXRpb24ge1xuICByZXR1cm4gZGVmaW5lU2VydmljZShpbXBvcnQubWV0YS51cmwsIHtcbiAgICBpZDogXCJkYngtdG9vbHMuY2xpLWdyYXBoaXRpXCIsXG4gICAgbmFtZTogXCJkYnggZ3JhcGhpdGlcIixcbiAgICBweXRob25QYWNrYWdlOiB7IG5hbWU6IFwiZGJ4LXRvb2xzLWdyYXBoaXRpXCIgfSxcbiAgICBjb21tYW5kOiB7XG4gICAgICBiaW5OYW1lOiBcImRieC1ncmFwaGl0aVwiLFxuICAgICAgYXJndW1lbnRzOiBzZXJpYWxpemVBcmdzKEdyYXBoaXRpT3B0aW9uc1NjaGVtYS5wYXJzZShvcHRpb25zKSksXG4gICAgfSxcbiAgfSk7XG59XG5cbi8qKiBCdWlsZCBmb3JlZ3JvdW5kIGV4ZWN1dGlvbiBhbmQgc2hhcmVkIGRlc2t0b3Atc2VydmljZSBjb21tYW5kcy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFByb2dyYW0oXG4gIG5hbWUgPSBcImRieCBncmFwaGl0aVwiLFxuICBkZXBlbmRlbmNpZXM6IEdyYXBoaXRpQ2xpRGVwZW5kZW5jaWVzID0geyBydW46IHJ1bkdyYXBoaXRpIH0sXG4pOiBDb21tYW5kIHtcbiAgY29uc3QgcHJvZ3JhbSA9IGFkZEFyZ3MoXG4gICAgbmV3IENvbW1hbmQoKVxuICAgICAgLm5hbWUobmFtZSlcbiAgICAgIC5kZXNjcmlwdGlvbihcIlJ1biBHcmFwaGl0aSBvciBtYW5hZ2UgaXRzIGN1cnJlbnQtdXNlciBkZXNrdG9wIHNlcnZpY2VcIilcbiAgICAgIC52ZXJzaW9uKFBBQ0tBR0VfVkVSU0lPTiwgXCItdiwgLS12ZXJzaW9uXCIpLFxuICAgIEdyYXBoaXRpQ2xpT3B0aW9uc1NjaGVtYSxcbiAgKS5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IGRlcGVuZGVuY2llcy5ydW4oZ3JhcGhpdGlPcHRpb25zKHByb2dyYW0pKTtcbiAgfSk7XG5cbiAgcHJvZ3JhbS5hZGRDb21tYW5kKFxuICAgIGJ1aWxkU2VydmljZUNvbW1hbmQoXG4gICAgICAoKSA9PiBncmFwaGl0aVNlcnZpY2VEZWZpbml0aW9uKGdyYXBoaXRpT3B0aW9ucyhwcm9ncmFtKSksXG4gICAgICBkZXBlbmRlbmNpZXMuc2VydmljZSxcbiAgICApLFxuICApO1xuICByZXR1cm4gcHJvZ3JhbTtcbn1cblxuZnVuY3Rpb24gZ3JhcGhpdGlPcHRpb25zKGNvbW1hbmQ6IENvbW1hbmQpOiBHcmFwaGl0aU9wdGlvbnMge1xuICByZXR1cm4gR3JhcGhpdGlPcHRpb25zU2NoZW1hLnBhcnNlKHBhcnNlQXJncyhjb21tYW5kLCBHcmFwaGl0aUNsaU9wdGlvbnNTY2hlbWEpKTtcbn1cbiJdfQ==
@@ -4,9 +4,9 @@ import { buildServiceCommand } from "@dbx-tools/cli-service/cli";
4
4
  import { defineService } from "@dbx-tools/cli-service/definition";
5
5
  import { connectionUrl } from "@dbx-tools/lakebase";
6
6
  import { Command } from "commander";
7
- import { PACKAGE_VERSION } from "../../index.js";
8
7
  import { LakebaseProxyOptionsSchema, LakebaseProxyUrlOptionsSchema, resolveLakebaseProxyOptions, } from "./options.js";
9
8
  import { LakebaseProxy } from "./proxy.js";
9
+ import { PACKAGE_VERSION } from "../../index.js";
10
10
  /** Build the tray-only Lakebase proxy service definition. */
11
11
  export function lakebaseProxyServiceDefinition(options = {}) {
12
12
  const resolved = resolveLakebaseProxyOptions(options);
@@ -51,4 +51,4 @@ function waitForShutdown() {
51
51
  process.once("SIGTERM", shutdown);
52
52
  });
53
53
  }
54
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xha2ViYXNlLXByb3h5L2NsaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSw4REFBOEQ7QUFFOUQsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDeEUsT0FBTyxFQUFFLG1CQUFtQixFQUFrQyxNQUFNLDRCQUE0QixDQUFDO0FBQ2pHLE9BQU8sRUFBRSxhQUFhLEVBQTZCLE1BQU0sbUNBQW1DLENBQUM7QUFDN0YsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFcEMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pELE9BQU8sRUFDTCwwQkFBMEIsRUFDMUIsNkJBQTZCLEVBQzdCLDJCQUEyQixHQUU1QixNQUFNLGNBQWMsQ0FBQztBQUN0QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBTzNDLDZEQUE2RDtBQUM3RCxNQUFNLFVBQVUsOEJBQThCLENBQzVDLFVBQWdDLEVBQUU7SUFFbEMsTUFBTSxRQUFRLEdBQUcsMkJBQTJCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdEQsT0FBTyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7UUFDcEMsRUFBRSxFQUFFLDhCQUE4QjtRQUNsQyxJQUFJLEVBQUUsb0JBQW9CO1FBQzFCLE9BQU8sRUFBRTtZQUNQLE9BQU8sRUFBRSxvQkFBb0I7WUFDN0IsU0FBUyxFQUFFLGFBQWEsQ0FBQyxRQUFRLENBQUM7U0FDbkM7S0FDRixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQscURBQXFEO0FBQ3JELE1BQU0sVUFBVSxZQUFZLENBQzFCLElBQUksR0FBRyxvQkFBb0IsRUFDM0IsZUFBNkMsRUFBRTtJQUUvQyxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQ3JCLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQztTQUNkLFdBQVcsQ0FBQyx5REFBeUQsQ0FBQztTQUN0RSxPQUFPLENBQUMsZUFBZSxDQUFDO1NBQ3hCLHVCQUF1QixFQUFFLEVBQzVCLDBCQUEwQixDQUMzQixDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksRUFBRTtRQUNsQixNQUFNLEtBQUssR0FBRyxJQUFJLGFBQWEsQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLDBCQUEwQixDQUFDLENBQUMsQ0FBQztRQUNoRixNQUFNLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNyQixNQUFNLGVBQWUsRUFBRSxDQUFDO1FBQ3hCLE1BQU0sS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3RCLENBQUMsQ0FBQyxDQUFDO0lBRUgsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUN4QixPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLFdBQVcsQ0FBQyxxREFBcUQsQ0FBQyxFQUN6Riw2QkFBNkIsQ0FDOUIsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFO1FBQ1osTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLFVBQVUsRUFBRSw2QkFBNkIsQ0FBQyxDQUFDO1FBQ3JFLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLElBQUksT0FBTyxDQUFDLGdCQUFpQixDQUFDO1FBQzNELE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsYUFBYSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvRixDQUFDLENBQUMsQ0FBQztJQUNILElBQUksY0FBd0IsQ0FBQztJQUM3QixNQUFNLGNBQWMsR0FBRyxtQkFBbUIsQ0FBQyxHQUFHLEVBQUU7UUFDOUMsT0FBTyw4QkFBOEIsQ0FBQyxTQUFTLENBQUMsY0FBYyxFQUFFLDBCQUEwQixDQUFDLENBQUMsQ0FBQztJQUMvRixDQUFDLEVBQUUsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3pCLGNBQWMsR0FBRyxjQUFjLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLFNBQVMsQ0FBRSxDQUFDO0lBQzFGLE9BQU8sQ0FBQyxjQUFjLEVBQUUsMEJBQTBCLENBQUMsQ0FBQztJQUNwRCxPQUFPLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ25DLE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUM7QUFFRCxTQUFTLGVBQWU7SUFDdEIsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1FBQzdCLE1BQU0sUUFBUSxHQUFHLEdBQUcsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2pDLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ2pDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3BDLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBDb21tYW5kZXIgZW50cnkgcG9pbnQgZm9yIHRoZSBwdXJlIE5vZGUgTGFrZWJhc2UgcHJveHkuICovXG5cbmltcG9ydCB7IGFkZEFyZ3MsIHBhcnNlQXJncywgc2VyaWFsaXplQXJncyB9IGZyb20gXCJAZGJ4LXRvb2xzL2NsaS1hcmdzXCI7XG5pbXBvcnQgeyBidWlsZFNlcnZpY2VDb21tYW5kLCB0eXBlIENsaVNlcnZpY2VDbGlEZXBlbmRlbmNpZXMgfSBmcm9tIFwiQGRieC10b29scy9jbGktc2VydmljZS9jbGlcIjtcbmltcG9ydCB7IGRlZmluZVNlcnZpY2UsIHR5cGUgQ2xpU2VydmljZURlZmluaXRpb24gfSBmcm9tIFwiQGRieC10b29scy9jbGktc2VydmljZS9kZWZpbml0aW9uXCI7XG5pbXBvcnQgeyBjb25uZWN0aW9uVXJsIH0gZnJvbSBcIkBkYngtdG9vbHMvbGFrZWJhc2VcIjtcbmltcG9ydCB7IENvbW1hbmQgfSBmcm9tIFwiY29tbWFuZGVyXCI7XG5cbmltcG9ydCB7IFBBQ0tBR0VfVkVSU0lPTiB9IGZyb20gXCIuLi8uLi9pbmRleC50c1wiO1xuaW1wb3J0IHtcbiAgTGFrZWJhc2VQcm94eU9wdGlvbnNTY2hlbWEsXG4gIExha2ViYXNlUHJveHlVcmxPcHRpb25zU2NoZW1hLFxuICByZXNvbHZlTGFrZWJhc2VQcm94eU9wdGlvbnMsXG4gIHR5cGUgTGFrZWJhc2VQcm94eU9wdGlvbnMsXG59IGZyb20gXCIuL29wdGlvbnMudHNcIjtcbmltcG9ydCB7IExha2ViYXNlUHJveHkgfSBmcm9tIFwiLi9wcm94eS50c1wiO1xuXG4vKiogSW5qZWN0YWJsZSBzZXJ2aWNlIGJvdW5kYXJ5IGZvciBMYWtlYmFzZSBwcm94eSBDTEkgY29tcG9zaXRpb24gYW5kIHRlc3RzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBMYWtlYmFzZVByb3h5Q2xpRGVwZW5kZW5jaWVzIHtcbiAgcmVhZG9ubHkgc2VydmljZT86IENsaVNlcnZpY2VDbGlEZXBlbmRlbmNpZXM7XG59XG5cbi8qKiBCdWlsZCB0aGUgdHJheS1vbmx5IExha2ViYXNlIHByb3h5IHNlcnZpY2UgZGVmaW5pdGlvbi4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYWtlYmFzZVByb3h5U2VydmljZURlZmluaXRpb24oXG4gIG9wdGlvbnM6IExha2ViYXNlUHJveHlPcHRpb25zID0ge30sXG4pOiBDbGlTZXJ2aWNlRGVmaW5pdGlvbiB7XG4gIGNvbnN0IHJlc29sdmVkID0gcmVzb2x2ZUxha2ViYXNlUHJveHlPcHRpb25zKG9wdGlvbnMpO1xuICByZXR1cm4gZGVmaW5lU2VydmljZShpbXBvcnQubWV0YS51cmwsIHtcbiAgICBpZDogXCJkYngtdG9vbHMuY2xpLWxha2ViYXNlLXByb3h5XCIsXG4gICAgbmFtZTogXCJkYnggbGFrZWJhc2UgcHJveHlcIixcbiAgICBjb21tYW5kOiB7XG4gICAgICBiaW5OYW1lOiBcImRieC1sYWtlYmFzZS1wcm94eVwiLFxuICAgICAgYXJndW1lbnRzOiBzZXJpYWxpemVBcmdzKHJlc29sdmVkKSxcbiAgICB9LFxuICB9KTtcbn1cblxuLyoqIEJ1aWxkIHRoZSBMYWtlYmFzZSBwcm94eSBjb21tYW5kLWxpbmUgcHJvZ3JhbS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFByb2dyYW0oXG4gIG5hbWUgPSBcImRieCBsYWtlYmFzZS1wcm94eVwiLFxuICBkZXBlbmRlbmNpZXM6IExha2ViYXNlUHJveHlDbGlEZXBlbmRlbmNpZXMgPSB7fSxcbik6IENvbW1hbmQge1xuICBjb25zdCBwcm9ncmFtID0gYWRkQXJncyhcbiAgICBuZXcgQ29tbWFuZChuYW1lKVxuICAgICAgLmRlc2NyaXB0aW9uKFwiUnVuIGEgbG9vcGJhY2sgUG9zdGdyZVNRTCBwcm94eSBmb3IgRGF0YWJyaWNrcyBMYWtlYmFzZVwiKVxuICAgICAgLnZlcnNpb24oUEFDS0FHRV9WRVJTSU9OKVxuICAgICAgLmVuYWJsZVBvc2l0aW9uYWxPcHRpb25zKCksXG4gICAgTGFrZWJhc2VQcm94eU9wdGlvbnNTY2hlbWEsXG4gICkuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBwcm94eSA9IG5ldyBMYWtlYmFzZVByb3h5KHBhcnNlQXJncyhwcm9ncmFtLCBMYWtlYmFzZVByb3h5T3B0aW9uc1NjaGVtYSkpO1xuICAgIGF3YWl0IHByb3h5Lmxpc3RlbigpO1xuICAgIGF3YWl0IHdhaXRGb3JTaHV0ZG93bigpO1xuICAgIGF3YWl0IHByb3h5LmNsb3NlKCk7XG4gIH0pO1xuXG4gIGNvbnN0IHVybENvbW1hbmQgPSBhZGRBcmdzKFxuICAgIHByb2dyYW0uY29tbWFuZChcInVybFwiKS5kZXNjcmlwdGlvbihcIkZvcm1hdCBhIGxvY2FsIFBvc3RncmVTUUwgVVJMIGZvciBhIExha2ViYXNlIHRhcmdldFwiKSxcbiAgICBMYWtlYmFzZVByb3h5VXJsT3B0aW9uc1NjaGVtYSxcbiAgKS5hY3Rpb24oKCkgPT4ge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBwYXJzZUFyZ3ModXJsQ29tbWFuZCwgTGFrZWJhc2VQcm94eVVybE9wdGlvbnNTY2hlbWEpO1xuICAgIGNvbnN0IHRhcmdldCA9IG9wdGlvbnMudGFyZ2V0ID8/IG9wdGlvbnMubGFrZWJhc2VFbmRwb2ludCE7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoYCR7Y29ubmVjdGlvblVybCh0YXJnZXQsIG9wdGlvbnMubGlzdGVuLmhvc3QsIG9wdGlvbnMubGlzdGVuLnBvcnQpfVxcbmApO1xuICB9KTtcbiAgbGV0IGluc3RhbGxDb21tYW5kITogQ29tbWFuZDtcbiAgY29uc3Qgc2VydmljZUNvbW1hbmQgPSBidWlsZFNlcnZpY2VDb21tYW5kKCgpID0+IHtcbiAgICByZXR1cm4gbGFrZWJhc2VQcm94eVNlcnZpY2VEZWZpbml0aW9uKHBhcnNlQXJncyhpbnN0YWxsQ29tbWFuZCwgTGFrZWJhc2VQcm94eU9wdGlvbnNTY2hlbWEpKTtcbiAgfSwgZGVwZW5kZW5jaWVzLnNlcnZpY2UpO1xuICBpbnN0YWxsQ29tbWFuZCA9IHNlcnZpY2VDb21tYW5kLmNvbW1hbmRzLmZpbmQoKGNvbW1hbmQpID0+IGNvbW1hbmQubmFtZSgpID09PSBcImluc3RhbGxcIikhO1xuICBhZGRBcmdzKGluc3RhbGxDb21tYW5kLCBMYWtlYmFzZVByb3h5T3B0aW9uc1NjaGVtYSk7XG4gIHByb2dyYW0uYWRkQ29tbWFuZChzZXJ2aWNlQ29tbWFuZCk7XG4gIHJldHVybiBwcm9ncmFtO1xufVxuXG5mdW5jdGlvbiB3YWl0Rm9yU2h1dGRvd24oKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIGNvbnN0IHNodXRkb3duID0gKCkgPT4gcmVzb2x2ZSgpO1xuICAgIHByb2Nlc3Mub25jZShcIlNJR0lOVFwiLCBzaHV0ZG93bik7XG4gICAgcHJvY2Vzcy5vbmNlKFwiU0lHVEVSTVwiLCBzaHV0ZG93bik7XG4gIH0pO1xufVxuIl19
54
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xha2ViYXNlLXByb3h5L2NsaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSw4REFBOEQ7QUFFOUQsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDeEUsT0FBTyxFQUFFLG1CQUFtQixFQUFrQyxNQUFNLDRCQUE0QixDQUFDO0FBQ2pHLE9BQU8sRUFBRSxhQUFhLEVBQTZCLE1BQU0sbUNBQW1DLENBQUM7QUFDN0YsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFcEMsT0FBTyxFQUNMLDBCQUEwQixFQUMxQiw2QkFBNkIsRUFDN0IsMkJBQTJCLEdBRTVCLE1BQU0sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDM0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBT2pELDZEQUE2RDtBQUM3RCxNQUFNLFVBQVUsOEJBQThCLENBQzVDLFVBQWdDLEVBQUU7SUFFbEMsTUFBTSxRQUFRLEdBQUcsMkJBQTJCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdEQsT0FBTyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7UUFDcEMsRUFBRSxFQUFFLDhCQUE4QjtRQUNsQyxJQUFJLEVBQUUsb0JBQW9CO1FBQzFCLE9BQU8sRUFBRTtZQUNQLE9BQU8sRUFBRSxvQkFBb0I7WUFDN0IsU0FBUyxFQUFFLGFBQWEsQ0FBQyxRQUFRLENBQUM7U0FDbkM7S0FDRixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQscURBQXFEO0FBQ3JELE1BQU0sVUFBVSxZQUFZLENBQzFCLElBQUksR0FBRyxvQkFBb0IsRUFDM0IsZUFBNkMsRUFBRTtJQUUvQyxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQ3JCLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQztTQUNkLFdBQVcsQ0FBQyx5REFBeUQsQ0FBQztTQUN0RSxPQUFPLENBQUMsZUFBZSxDQUFDO1NBQ3hCLHVCQUF1QixFQUFFLEVBQzVCLDBCQUEwQixDQUMzQixDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksRUFBRTtRQUNsQixNQUFNLEtBQUssR0FBRyxJQUFJLGFBQWEsQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLDBCQUEwQixDQUFDLENBQUMsQ0FBQztRQUNoRixNQUFNLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNyQixNQUFNLGVBQWUsRUFBRSxDQUFDO1FBQ3hCLE1BQU0sS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3RCLENBQUMsQ0FBQyxDQUFDO0lBRUgsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUN4QixPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLFdBQVcsQ0FBQyxxREFBcUQsQ0FBQyxFQUN6Riw2QkFBNkIsQ0FDOUIsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFO1FBQ1osTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLFVBQVUsRUFBRSw2QkFBNkIsQ0FBQyxDQUFDO1FBQ3JFLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLElBQUksT0FBTyxDQUFDLGdCQUFpQixDQUFDO1FBQzNELE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsYUFBYSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvRixDQUFDLENBQUMsQ0FBQztJQUNILElBQUksY0FBd0IsQ0FBQztJQUM3QixNQUFNLGNBQWMsR0FBRyxtQkFBbUIsQ0FBQyxHQUFHLEVBQUU7UUFDOUMsT0FBTyw4QkFBOEIsQ0FBQyxTQUFTLENBQUMsY0FBYyxFQUFFLDBCQUEwQixDQUFDLENBQUMsQ0FBQztJQUMvRixDQUFDLEVBQUUsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3pCLGNBQWMsR0FBRyxjQUFjLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLFNBQVMsQ0FBRSxDQUFDO0lBQzFGLE9BQU8sQ0FBQyxjQUFjLEVBQUUsMEJBQTBCLENBQUMsQ0FBQztJQUNwRCxPQUFPLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ25DLE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUM7QUFFRCxTQUFTLGVBQWU7SUFDdEIsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1FBQzdCLE1BQU0sUUFBUSxHQUFHLEdBQUcsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2pDLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ2pDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3BDLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBDb21tYW5kZXIgZW50cnkgcG9pbnQgZm9yIHRoZSBwdXJlIE5vZGUgTGFrZWJhc2UgcHJveHkuICovXG5cbmltcG9ydCB7IGFkZEFyZ3MsIHBhcnNlQXJncywgc2VyaWFsaXplQXJncyB9IGZyb20gXCJAZGJ4LXRvb2xzL2NsaS1hcmdzXCI7XG5pbXBvcnQgeyBidWlsZFNlcnZpY2VDb21tYW5kLCB0eXBlIENsaVNlcnZpY2VDbGlEZXBlbmRlbmNpZXMgfSBmcm9tIFwiQGRieC10b29scy9jbGktc2VydmljZS9jbGlcIjtcbmltcG9ydCB7IGRlZmluZVNlcnZpY2UsIHR5cGUgQ2xpU2VydmljZURlZmluaXRpb24gfSBmcm9tIFwiQGRieC10b29scy9jbGktc2VydmljZS9kZWZpbml0aW9uXCI7XG5pbXBvcnQgeyBjb25uZWN0aW9uVXJsIH0gZnJvbSBcIkBkYngtdG9vbHMvbGFrZWJhc2VcIjtcbmltcG9ydCB7IENvbW1hbmQgfSBmcm9tIFwiY29tbWFuZGVyXCI7XG5cbmltcG9ydCB7XG4gIExha2ViYXNlUHJveHlPcHRpb25zU2NoZW1hLFxuICBMYWtlYmFzZVByb3h5VXJsT3B0aW9uc1NjaGVtYSxcbiAgcmVzb2x2ZUxha2ViYXNlUHJveHlPcHRpb25zLFxuICB0eXBlIExha2ViYXNlUHJveHlPcHRpb25zLFxufSBmcm9tIFwiLi9vcHRpb25zLnRzXCI7XG5pbXBvcnQgeyBMYWtlYmFzZVByb3h5IH0gZnJvbSBcIi4vcHJveHkudHNcIjtcbmltcG9ydCB7IFBBQ0tBR0VfVkVSU0lPTiB9IGZyb20gXCIuLi8uLi9pbmRleC50c1wiO1xuXG4vKiogSW5qZWN0YWJsZSBzZXJ2aWNlIGJvdW5kYXJ5IGZvciBMYWtlYmFzZSBwcm94eSBDTEkgY29tcG9zaXRpb24gYW5kIHRlc3RzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBMYWtlYmFzZVByb3h5Q2xpRGVwZW5kZW5jaWVzIHtcbiAgcmVhZG9ubHkgc2VydmljZT86IENsaVNlcnZpY2VDbGlEZXBlbmRlbmNpZXM7XG59XG5cbi8qKiBCdWlsZCB0aGUgdHJheS1vbmx5IExha2ViYXNlIHByb3h5IHNlcnZpY2UgZGVmaW5pdGlvbi4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYWtlYmFzZVByb3h5U2VydmljZURlZmluaXRpb24oXG4gIG9wdGlvbnM6IExha2ViYXNlUHJveHlPcHRpb25zID0ge30sXG4pOiBDbGlTZXJ2aWNlRGVmaW5pdGlvbiB7XG4gIGNvbnN0IHJlc29sdmVkID0gcmVzb2x2ZUxha2ViYXNlUHJveHlPcHRpb25zKG9wdGlvbnMpO1xuICByZXR1cm4gZGVmaW5lU2VydmljZShpbXBvcnQubWV0YS51cmwsIHtcbiAgICBpZDogXCJkYngtdG9vbHMuY2xpLWxha2ViYXNlLXByb3h5XCIsXG4gICAgbmFtZTogXCJkYnggbGFrZWJhc2UgcHJveHlcIixcbiAgICBjb21tYW5kOiB7XG4gICAgICBiaW5OYW1lOiBcImRieC1sYWtlYmFzZS1wcm94eVwiLFxuICAgICAgYXJndW1lbnRzOiBzZXJpYWxpemVBcmdzKHJlc29sdmVkKSxcbiAgICB9LFxuICB9KTtcbn1cblxuLyoqIEJ1aWxkIHRoZSBMYWtlYmFzZSBwcm94eSBjb21tYW5kLWxpbmUgcHJvZ3JhbS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFByb2dyYW0oXG4gIG5hbWUgPSBcImRieCBsYWtlYmFzZS1wcm94eVwiLFxuICBkZXBlbmRlbmNpZXM6IExha2ViYXNlUHJveHlDbGlEZXBlbmRlbmNpZXMgPSB7fSxcbik6IENvbW1hbmQge1xuICBjb25zdCBwcm9ncmFtID0gYWRkQXJncyhcbiAgICBuZXcgQ29tbWFuZChuYW1lKVxuICAgICAgLmRlc2NyaXB0aW9uKFwiUnVuIGEgbG9vcGJhY2sgUG9zdGdyZVNRTCBwcm94eSBmb3IgRGF0YWJyaWNrcyBMYWtlYmFzZVwiKVxuICAgICAgLnZlcnNpb24oUEFDS0FHRV9WRVJTSU9OKVxuICAgICAgLmVuYWJsZVBvc2l0aW9uYWxPcHRpb25zKCksXG4gICAgTGFrZWJhc2VQcm94eU9wdGlvbnNTY2hlbWEsXG4gICkuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBwcm94eSA9IG5ldyBMYWtlYmFzZVByb3h5KHBhcnNlQXJncyhwcm9ncmFtLCBMYWtlYmFzZVByb3h5T3B0aW9uc1NjaGVtYSkpO1xuICAgIGF3YWl0IHByb3h5Lmxpc3RlbigpO1xuICAgIGF3YWl0IHdhaXRGb3JTaHV0ZG93bigpO1xuICAgIGF3YWl0IHByb3h5LmNsb3NlKCk7XG4gIH0pO1xuXG4gIGNvbnN0IHVybENvbW1hbmQgPSBhZGRBcmdzKFxuICAgIHByb2dyYW0uY29tbWFuZChcInVybFwiKS5kZXNjcmlwdGlvbihcIkZvcm1hdCBhIGxvY2FsIFBvc3RncmVTUUwgVVJMIGZvciBhIExha2ViYXNlIHRhcmdldFwiKSxcbiAgICBMYWtlYmFzZVByb3h5VXJsT3B0aW9uc1NjaGVtYSxcbiAgKS5hY3Rpb24oKCkgPT4ge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBwYXJzZUFyZ3ModXJsQ29tbWFuZCwgTGFrZWJhc2VQcm94eVVybE9wdGlvbnNTY2hlbWEpO1xuICAgIGNvbnN0IHRhcmdldCA9IG9wdGlvbnMudGFyZ2V0ID8/IG9wdGlvbnMubGFrZWJhc2VFbmRwb2ludCE7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoYCR7Y29ubmVjdGlvblVybCh0YXJnZXQsIG9wdGlvbnMubGlzdGVuLmhvc3QsIG9wdGlvbnMubGlzdGVuLnBvcnQpfVxcbmApO1xuICB9KTtcbiAgbGV0IGluc3RhbGxDb21tYW5kITogQ29tbWFuZDtcbiAgY29uc3Qgc2VydmljZUNvbW1hbmQgPSBidWlsZFNlcnZpY2VDb21tYW5kKCgpID0+IHtcbiAgICByZXR1cm4gbGFrZWJhc2VQcm94eVNlcnZpY2VEZWZpbml0aW9uKHBhcnNlQXJncyhpbnN0YWxsQ29tbWFuZCwgTGFrZWJhc2VQcm94eU9wdGlvbnNTY2hlbWEpKTtcbiAgfSwgZGVwZW5kZW5jaWVzLnNlcnZpY2UpO1xuICBpbnN0YWxsQ29tbWFuZCA9IHNlcnZpY2VDb21tYW5kLmNvbW1hbmRzLmZpbmQoKGNvbW1hbmQpID0+IGNvbW1hbmQubmFtZSgpID09PSBcImluc3RhbGxcIikhO1xuICBhZGRBcmdzKGluc3RhbGxDb21tYW5kLCBMYWtlYmFzZVByb3h5T3B0aW9uc1NjaGVtYSk7XG4gIHByb2dyYW0uYWRkQ29tbWFuZChzZXJ2aWNlQ29tbWFuZCk7XG4gIHJldHVybiBwcm9ncmFtO1xufVxuXG5mdW5jdGlvbiB3YWl0Rm9yU2h1dGRvd24oKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIGNvbnN0IHNodXRkb3duID0gKCkgPT4gcmVzb2x2ZSgpO1xuICAgIHByb2Nlc3Mub25jZShcIlNJR0lOVFwiLCBzaHV0ZG93bik7XG4gICAgcHJvY2Vzcy5vbmNlKFwiU0lHVEVSTVwiLCBzaHV0ZG93bik7XG4gIH0pO1xufVxuIl19
@@ -8,14 +8,14 @@ import { buildServiceCommand } from "@dbx-tools/cli-service/cli";
8
8
  import { defineService } from "@dbx-tools/cli-service/definition";
9
9
  import { ModelGatewayCliOptionsSchema, resolveModelGatewayCliOptions, } from "@dbx-tools/shared-model-gateway/options";
10
10
  import { Command } from "commander";
11
- import { PACKAGE_VERSION } from "../../index.js";
12
11
  import { startModelGateway } from "./server.js";
12
+ import { PACKAGE_VERSION } from "../../index.js";
13
13
  const DEFAULT_DEPENDENCIES = {
14
14
  start: startModelGateway,
15
15
  };
16
16
  /** Build the tray-only model-gateway service definition. */
17
17
  export function modelGatewayServiceDefinition(options = {}) {
18
- const { runtimeInfo: _, ...resolved } = resolveModelGatewayCliOptions(options);
18
+ const { runtimeInfo: _, bearerToken: _bearerToken, ...resolved } = resolveModelGatewayCliOptions(options);
19
19
  const host = urlHost(resolved.listen.host);
20
20
  return defineService(import.meta.url, {
21
21
  id: "dbx-tools.cli-model-gateway",
@@ -60,4 +60,4 @@ function modelGatewayOptions(command) {
60
60
  function urlHost(host) {
61
61
  return host.includes(":") ? `[${host}]` : host;
62
62
  }
63
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21vZGVsLWdhdGV3YXkvY2xpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFFSCxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsbUJBQW1CLEVBQWtDLE1BQU0sNEJBQTRCLENBQUM7QUFDakcsT0FBTyxFQUFFLGFBQWEsRUFBNkIsTUFBTSxtQ0FBbUMsQ0FBQztBQUM3RixPQUFPLEVBQ0wsNEJBQTRCLEVBQzVCLDZCQUE2QixHQUc5QixNQUFNLHlDQUF5QyxDQUFDO0FBQ2pELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFcEMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQVNoRCxNQUFNLG9CQUFvQixHQUFnQztJQUN4RCxLQUFLLEVBQUUsaUJBQWlCO0NBQ3pCLENBQUM7QUFFRiw0REFBNEQ7QUFDNUQsTUFBTSxVQUFVLDZCQUE2QixDQUMzQyxVQUErQixFQUFFO0lBRWpDLE1BQU0sRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFLEdBQUcsUUFBUSxFQUFFLEdBQUcsNkJBQTZCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDL0UsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDM0MsT0FBTyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7UUFDcEMsRUFBRSxFQUFFLDZCQUE2QjtRQUNqQyxJQUFJLEVBQUUsbUJBQW1CO1FBQ3pCLE9BQU8sRUFBRTtZQUNQLE9BQU8sRUFBRSxtQkFBbUI7WUFDNUIsU0FBUyxFQUFFLGFBQWEsQ0FBQyxRQUFRLENBQUM7U0FDbkM7UUFDRCxJQUFJLEVBQUU7WUFDSjtnQkFDRSxJQUFJLEVBQUUsS0FBSztnQkFDWCxLQUFLLEVBQUUsUUFBUTtnQkFDZixHQUFHLEVBQUUsVUFBVSxJQUFJLElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLFlBQVk7YUFDeEQ7U0FDRjtLQUNGLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxxRkFBcUY7QUFDckYsTUFBTSxVQUFVLFlBQVksQ0FDMUIsSUFBSSxHQUFHLG1CQUFtQixFQUMxQixlQUE0QyxvQkFBb0I7SUFFaEUsTUFBTSxPQUFPLEdBQUcsZUFBZSxDQUFDO0lBQ2hDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FDckIsSUFBSSxPQUFPLEVBQUU7U0FDVixJQUFJLENBQUMsSUFBSSxDQUFDO1NBQ1YsV0FBVyxDQUFDLG1EQUFtRCxDQUFDO1NBQ2hFLE9BQU8sQ0FBQyxPQUFPLEVBQUUsZUFBZSxDQUFDLEVBQ3BDLDRCQUE0QixDQUM3QixDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksRUFBRTtRQUNsQixNQUFNLE9BQU8sR0FBRyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM3QyxJQUFJLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN4QixPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxjQUFjLEVBQUUsbUJBQW1CLEVBQUUsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDOUYsT0FBTztRQUNULENBQUM7UUFDRCxNQUFNLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBRSxHQUFHLGFBQWEsRUFBRSxHQUFHLE9BQU8sQ0FBQztRQUNyRCxNQUFNLFlBQVksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDMUMsQ0FBQyxDQUFDLENBQUM7SUFDSCxNQUFNLGNBQWMsR0FBRyxtQkFBbUIsQ0FBQyxHQUFHLEVBQUU7UUFDOUMsT0FBTyw2QkFBNkIsQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLENBQUMsRUFBRSxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDekIsT0FBTyxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNuQyxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDO0FBRUQsU0FBUyxtQkFBbUIsQ0FBQyxPQUFnQjtJQUMzQyxPQUFPLFNBQVMsQ0FBQyxPQUFPLEVBQUUsNEJBQTRCLENBQUMsQ0FBQztBQUMxRCxDQUFDO0FBRUQsU0FBUyxPQUFPLENBQUMsSUFBWTtJQUMzQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUNqRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBGb3JlZ3JvdW5kIGBkYnggbW9kZWwtZ2F0ZXdheWAgY29tbWFuZC5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgYWRkQXJncywgcGFyc2VBcmdzLCBzZXJpYWxpemVBcmdzIH0gZnJvbSBcIkBkYngtdG9vbHMvY2xpLWFyZ3NcIjtcbmltcG9ydCB7IGJ1aWxkU2VydmljZUNvbW1hbmQsIHR5cGUgQ2xpU2VydmljZUNsaURlcGVuZGVuY2llcyB9IGZyb20gXCJAZGJ4LXRvb2xzL2NsaS1zZXJ2aWNlL2NsaVwiO1xuaW1wb3J0IHsgZGVmaW5lU2VydmljZSwgdHlwZSBDbGlTZXJ2aWNlRGVmaW5pdGlvbiB9IGZyb20gXCJAZGJ4LXRvb2xzL2NsaS1zZXJ2aWNlL2RlZmluaXRpb25cIjtcbmltcG9ydCB7XG4gIE1vZGVsR2F0ZXdheUNsaU9wdGlvbnNTY2hlbWEsXG4gIHJlc29sdmVNb2RlbEdhdGV3YXlDbGlPcHRpb25zLFxuICB0eXBlIE1vZGVsR2F0ZXdheUNsaU9wdGlvbnMsXG4gIHR5cGUgTW9kZWxHYXRld2F5T3B0aW9ucyxcbn0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLW1vZGVsLWdhdGV3YXkvb3B0aW9uc1wiO1xuaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gXCJjb21tYW5kZXJcIjtcblxuaW1wb3J0IHsgUEFDS0FHRV9WRVJTSU9OIH0gZnJvbSBcIi4uLy4uL2luZGV4LnRzXCI7XG5pbXBvcnQgeyBzdGFydE1vZGVsR2F0ZXdheSB9IGZyb20gXCIuL3NlcnZlci50c1wiO1xuXG4vKiogSW5qZWN0YWJsZSBmb3JlZ3JvdW5kIGdhdGV3YXkgYm91bmRhcnkgZm9yIENMSSB0ZXN0cy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTW9kZWxHYXRld2F5Q2xpRGVwZW5kZW5jaWVzIHtcbiAgc3RhcnQob3B0aW9uczogTW9kZWxHYXRld2F5T3B0aW9ucyk6IFByb21pc2U8dm9pZD47XG4gIC8qKiBPcHRpb25hbCBzZXJ2aWNlIENMSSBib3VuZGFyeSBmb3IgdGVzdHMgYW5kIGVtYmVkZGluZy4gKi9cbiAgcmVhZG9ubHkgc2VydmljZT86IENsaVNlcnZpY2VDbGlEZXBlbmRlbmNpZXM7XG59XG5cbmNvbnN0IERFRkFVTFRfREVQRU5ERU5DSUVTOiBNb2RlbEdhdGV3YXlDbGlEZXBlbmRlbmNpZXMgPSB7XG4gIHN0YXJ0OiBzdGFydE1vZGVsR2F0ZXdheSxcbn07XG5cbi8qKiBCdWlsZCB0aGUgdHJheS1vbmx5IG1vZGVsLWdhdGV3YXkgc2VydmljZSBkZWZpbml0aW9uLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1vZGVsR2F0ZXdheVNlcnZpY2VEZWZpbml0aW9uKFxuICBvcHRpb25zOiBNb2RlbEdhdGV3YXlPcHRpb25zID0ge30sXG4pOiBDbGlTZXJ2aWNlRGVmaW5pdGlvbiB7XG4gIGNvbnN0IHsgcnVudGltZUluZm86IF8sIC4uLnJlc29sdmVkIH0gPSByZXNvbHZlTW9kZWxHYXRld2F5Q2xpT3B0aW9ucyhvcHRpb25zKTtcbiAgY29uc3QgaG9zdCA9IHVybEhvc3QocmVzb2x2ZWQubGlzdGVuLmhvc3QpO1xuICByZXR1cm4gZGVmaW5lU2VydmljZShpbXBvcnQubWV0YS51cmwsIHtcbiAgICBpZDogXCJkYngtdG9vbHMuY2xpLW1vZGVsLWdhdGV3YXlcIixcbiAgICBuYW1lOiBcImRieCBtb2RlbCBnYXRld2F5XCIsXG4gICAgY29tbWFuZDoge1xuICAgICAgYmluTmFtZTogXCJkYngtbW9kZWwtZ2F0ZXdheVwiLFxuICAgICAgYXJndW1lbnRzOiBzZXJpYWxpemVBcmdzKHJlc29sdmVkKSxcbiAgICB9LFxuICAgIG1lbnU6IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJ1cmxcIixcbiAgICAgICAgbGFiZWw6IFwiTW9kZWxzXCIsXG4gICAgICAgIHVybDogYGh0dHA6Ly8ke2hvc3R9OiR7cmVzb2x2ZWQubGlzdGVuLnBvcnR9L3YxL21vZGVsc2AsXG4gICAgICB9LFxuICAgIF0sXG4gIH0pO1xufVxuXG4vKiogQnVpbGQgZm9yZWdyb3VuZCBhbmQgc2VydmljZSBtb2RlbC1nYXRld2F5IGNvbW1hbmRzIHdpdGhvdXQgc3RhcnRpbmcgYSBzZXJ2ZXIuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRQcm9ncmFtKFxuICBuYW1lID0gXCJkYnggbW9kZWwtZ2F0ZXdheVwiLFxuICBkZXBlbmRlbmNpZXM6IE1vZGVsR2F0ZXdheUNsaURlcGVuZGVuY2llcyA9IERFRkFVTFRfREVQRU5ERU5DSUVTLFxuKTogQ29tbWFuZCB7XG4gIGNvbnN0IHZlcnNpb24gPSBQQUNLQUdFX1ZFUlNJT047XG4gIGNvbnN0IHByb2dyYW0gPSBhZGRBcmdzKFxuICAgIG5ldyBDb21tYW5kKClcbiAgICAgIC5uYW1lKG5hbWUpXG4gICAgICAuZGVzY3JpcHRpb24oXCJSdW4gb3IgbWFuYWdlIHRoZSBBcHBLaXQgRGF0YWJyaWNrcyBtb2RlbCBnYXRld2F5XCIpXG4gICAgICAudmVyc2lvbih2ZXJzaW9uLCBcIi12LCAtLXZlcnNpb25cIiksXG4gICAgTW9kZWxHYXRld2F5Q2xpT3B0aW9uc1NjaGVtYSxcbiAgKS5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBtb2RlbEdhdGV3YXlPcHRpb25zKHByb2dyYW0pO1xuICAgIGlmIChvcHRpb25zLnJ1bnRpbWVJbmZvKSB7XG4gICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShgJHtKU09OLnN0cmluZ2lmeSh7IGltcGxlbWVudGF0aW9uOiBcInR5cGVzY3JpcHQtYXBwa2l0XCIsIHZlcnNpb24gfSl9XFxuYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHsgcnVudGltZUluZm86IF8sIC4uLnNlcnZlck9wdGlvbnMgfSA9IG9wdGlvbnM7XG4gICAgYXdhaXQgZGVwZW5kZW5jaWVzLnN0YXJ0KHNlcnZlck9wdGlvbnMpO1xuICB9KTtcbiAgY29uc3Qgc2VydmljZUNvbW1hbmQgPSBidWlsZFNlcnZpY2VDb21tYW5kKCgpID0+IHtcbiAgICByZXR1cm4gbW9kZWxHYXRld2F5U2VydmljZURlZmluaXRpb24obW9kZWxHYXRld2F5T3B0aW9ucyhwcm9ncmFtKSk7XG4gIH0sIGRlcGVuZGVuY2llcy5zZXJ2aWNlKTtcbiAgcHJvZ3JhbS5hZGRDb21tYW5kKHNlcnZpY2VDb21tYW5kKTtcbiAgcmV0dXJuIHByb2dyYW07XG59XG5cbmZ1bmN0aW9uIG1vZGVsR2F0ZXdheU9wdGlvbnMoY29tbWFuZDogQ29tbWFuZCk6IE1vZGVsR2F0ZXdheUNsaU9wdGlvbnMge1xuICByZXR1cm4gcGFyc2VBcmdzKGNvbW1hbmQsIE1vZGVsR2F0ZXdheUNsaU9wdGlvbnNTY2hlbWEpO1xufVxuXG5mdW5jdGlvbiB1cmxIb3N0KGhvc3Q6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBob3N0LmluY2x1ZGVzKFwiOlwiKSA/IGBbJHtob3N0fV1gIDogaG9zdDtcbn1cbiJdfQ==
63
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21vZGVsLWdhdGV3YXkvY2xpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFFSCxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsbUJBQW1CLEVBQWtDLE1BQU0sNEJBQTRCLENBQUM7QUFDakcsT0FBTyxFQUFFLGFBQWEsRUFBNkIsTUFBTSxtQ0FBbUMsQ0FBQztBQUM3RixPQUFPLEVBQ0wsNEJBQTRCLEVBQzVCLDZCQUE2QixHQUc5QixNQUFNLHlDQUF5QyxDQUFDO0FBQ2pELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFcEMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQVNqRCxNQUFNLG9CQUFvQixHQUFnQztJQUN4RCxLQUFLLEVBQUUsaUJBQWlCO0NBQ3pCLENBQUM7QUFFRiw0REFBNEQ7QUFDNUQsTUFBTSxVQUFVLDZCQUE2QixDQUMzQyxVQUErQixFQUFFO0lBRWpDLE1BQU0sRUFDSixXQUFXLEVBQUUsQ0FBQyxFQUNkLFdBQVcsRUFBRSxZQUFZLEVBQ3pCLEdBQUcsUUFBUSxFQUNaLEdBQUcsNkJBQTZCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDM0MsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDM0MsT0FBTyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7UUFDcEMsRUFBRSxFQUFFLDZCQUE2QjtRQUNqQyxJQUFJLEVBQUUsbUJBQW1CO1FBQ3pCLE9BQU8sRUFBRTtZQUNQLE9BQU8sRUFBRSxtQkFBbUI7WUFDNUIsU0FBUyxFQUFFLGFBQWEsQ0FBQyxRQUFRLENBQUM7U0FDbkM7UUFDRCxJQUFJLEVBQUU7WUFDSjtnQkFDRSxJQUFJLEVBQUUsS0FBSztnQkFDWCxLQUFLLEVBQUUsUUFBUTtnQkFDZixHQUFHLEVBQUUsVUFBVSxJQUFJLElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLFlBQVk7YUFDeEQ7U0FDRjtLQUNGLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxxRkFBcUY7QUFDckYsTUFBTSxVQUFVLFlBQVksQ0FDMUIsSUFBSSxHQUFHLG1CQUFtQixFQUMxQixlQUE0QyxvQkFBb0I7SUFFaEUsTUFBTSxPQUFPLEdBQUcsZUFBZSxDQUFDO0lBQ2hDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FDckIsSUFBSSxPQUFPLEVBQUU7U0FDVixJQUFJLENBQUMsSUFBSSxDQUFDO1NBQ1YsV0FBVyxDQUFDLG1EQUFtRCxDQUFDO1NBQ2hFLE9BQU8sQ0FBQyxPQUFPLEVBQUUsZUFBZSxDQUFDLEVBQ3BDLDRCQUE0QixDQUM3QixDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksRUFBRTtRQUNsQixNQUFNLE9BQU8sR0FBRyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM3QyxJQUFJLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN4QixPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxjQUFjLEVBQUUsbUJBQW1CLEVBQUUsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDOUYsT0FBTztRQUNULENBQUM7UUFDRCxNQUFNLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBRSxHQUFHLGFBQWEsRUFBRSxHQUFHLE9BQU8sQ0FBQztRQUNyRCxNQUFNLFlBQVksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDMUMsQ0FBQyxDQUFDLENBQUM7SUFDSCxNQUFNLGNBQWMsR0FBRyxtQkFBbUIsQ0FBQyxHQUFHLEVBQUU7UUFDOUMsT0FBTyw2QkFBNkIsQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLENBQUMsRUFBRSxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDekIsT0FBTyxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNuQyxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDO0FBRUQsU0FBUyxtQkFBbUIsQ0FBQyxPQUFnQjtJQUMzQyxPQUFPLFNBQVMsQ0FBQyxPQUFPLEVBQUUsNEJBQTRCLENBQUMsQ0FBQztBQUMxRCxDQUFDO0FBRUQsU0FBUyxPQUFPLENBQUMsSUFBWTtJQUMzQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUNqRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBGb3JlZ3JvdW5kIGBkYnggbW9kZWwtZ2F0ZXdheWAgY29tbWFuZC5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgYWRkQXJncywgcGFyc2VBcmdzLCBzZXJpYWxpemVBcmdzIH0gZnJvbSBcIkBkYngtdG9vbHMvY2xpLWFyZ3NcIjtcbmltcG9ydCB7IGJ1aWxkU2VydmljZUNvbW1hbmQsIHR5cGUgQ2xpU2VydmljZUNsaURlcGVuZGVuY2llcyB9IGZyb20gXCJAZGJ4LXRvb2xzL2NsaS1zZXJ2aWNlL2NsaVwiO1xuaW1wb3J0IHsgZGVmaW5lU2VydmljZSwgdHlwZSBDbGlTZXJ2aWNlRGVmaW5pdGlvbiB9IGZyb20gXCJAZGJ4LXRvb2xzL2NsaS1zZXJ2aWNlL2RlZmluaXRpb25cIjtcbmltcG9ydCB7XG4gIE1vZGVsR2F0ZXdheUNsaU9wdGlvbnNTY2hlbWEsXG4gIHJlc29sdmVNb2RlbEdhdGV3YXlDbGlPcHRpb25zLFxuICB0eXBlIE1vZGVsR2F0ZXdheUNsaU9wdGlvbnMsXG4gIHR5cGUgTW9kZWxHYXRld2F5T3B0aW9ucyxcbn0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLW1vZGVsLWdhdGV3YXkvb3B0aW9uc1wiO1xuaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gXCJjb21tYW5kZXJcIjtcblxuaW1wb3J0IHsgc3RhcnRNb2RlbEdhdGV3YXkgfSBmcm9tIFwiLi9zZXJ2ZXIudHNcIjtcbmltcG9ydCB7IFBBQ0tBR0VfVkVSU0lPTiB9IGZyb20gXCIuLi8uLi9pbmRleC50c1wiO1xuXG4vKiogSW5qZWN0YWJsZSBmb3JlZ3JvdW5kIGdhdGV3YXkgYm91bmRhcnkgZm9yIENMSSB0ZXN0cy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTW9kZWxHYXRld2F5Q2xpRGVwZW5kZW5jaWVzIHtcbiAgc3RhcnQob3B0aW9uczogTW9kZWxHYXRld2F5T3B0aW9ucyk6IFByb21pc2U8dm9pZD47XG4gIC8qKiBPcHRpb25hbCBzZXJ2aWNlIENMSSBib3VuZGFyeSBmb3IgdGVzdHMgYW5kIGVtYmVkZGluZy4gKi9cbiAgcmVhZG9ubHkgc2VydmljZT86IENsaVNlcnZpY2VDbGlEZXBlbmRlbmNpZXM7XG59XG5cbmNvbnN0IERFRkFVTFRfREVQRU5ERU5DSUVTOiBNb2RlbEdhdGV3YXlDbGlEZXBlbmRlbmNpZXMgPSB7XG4gIHN0YXJ0OiBzdGFydE1vZGVsR2F0ZXdheSxcbn07XG5cbi8qKiBCdWlsZCB0aGUgdHJheS1vbmx5IG1vZGVsLWdhdGV3YXkgc2VydmljZSBkZWZpbml0aW9uLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1vZGVsR2F0ZXdheVNlcnZpY2VEZWZpbml0aW9uKFxuICBvcHRpb25zOiBNb2RlbEdhdGV3YXlPcHRpb25zID0ge30sXG4pOiBDbGlTZXJ2aWNlRGVmaW5pdGlvbiB7XG4gIGNvbnN0IHtcbiAgICBydW50aW1lSW5mbzogXyxcbiAgICBiZWFyZXJUb2tlbjogX2JlYXJlclRva2VuLFxuICAgIC4uLnJlc29sdmVkXG4gIH0gPSByZXNvbHZlTW9kZWxHYXRld2F5Q2xpT3B0aW9ucyhvcHRpb25zKTtcbiAgY29uc3QgaG9zdCA9IHVybEhvc3QocmVzb2x2ZWQubGlzdGVuLmhvc3QpO1xuICByZXR1cm4gZGVmaW5lU2VydmljZShpbXBvcnQubWV0YS51cmwsIHtcbiAgICBpZDogXCJkYngtdG9vbHMuY2xpLW1vZGVsLWdhdGV3YXlcIixcbiAgICBuYW1lOiBcImRieCBtb2RlbCBnYXRld2F5XCIsXG4gICAgY29tbWFuZDoge1xuICAgICAgYmluTmFtZTogXCJkYngtbW9kZWwtZ2F0ZXdheVwiLFxuICAgICAgYXJndW1lbnRzOiBzZXJpYWxpemVBcmdzKHJlc29sdmVkKSxcbiAgICB9LFxuICAgIG1lbnU6IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJ1cmxcIixcbiAgICAgICAgbGFiZWw6IFwiTW9kZWxzXCIsXG4gICAgICAgIHVybDogYGh0dHA6Ly8ke2hvc3R9OiR7cmVzb2x2ZWQubGlzdGVuLnBvcnR9L3YxL21vZGVsc2AsXG4gICAgICB9LFxuICAgIF0sXG4gIH0pO1xufVxuXG4vKiogQnVpbGQgZm9yZWdyb3VuZCBhbmQgc2VydmljZSBtb2RlbC1nYXRld2F5IGNvbW1hbmRzIHdpdGhvdXQgc3RhcnRpbmcgYSBzZXJ2ZXIuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRQcm9ncmFtKFxuICBuYW1lID0gXCJkYnggbW9kZWwtZ2F0ZXdheVwiLFxuICBkZXBlbmRlbmNpZXM6IE1vZGVsR2F0ZXdheUNsaURlcGVuZGVuY2llcyA9IERFRkFVTFRfREVQRU5ERU5DSUVTLFxuKTogQ29tbWFuZCB7XG4gIGNvbnN0IHZlcnNpb24gPSBQQUNLQUdFX1ZFUlNJT047XG4gIGNvbnN0IHByb2dyYW0gPSBhZGRBcmdzKFxuICAgIG5ldyBDb21tYW5kKClcbiAgICAgIC5uYW1lKG5hbWUpXG4gICAgICAuZGVzY3JpcHRpb24oXCJSdW4gb3IgbWFuYWdlIHRoZSBBcHBLaXQgRGF0YWJyaWNrcyBtb2RlbCBnYXRld2F5XCIpXG4gICAgICAudmVyc2lvbih2ZXJzaW9uLCBcIi12LCAtLXZlcnNpb25cIiksXG4gICAgTW9kZWxHYXRld2F5Q2xpT3B0aW9uc1NjaGVtYSxcbiAgKS5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBtb2RlbEdhdGV3YXlPcHRpb25zKHByb2dyYW0pO1xuICAgIGlmIChvcHRpb25zLnJ1bnRpbWVJbmZvKSB7XG4gICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShgJHtKU09OLnN0cmluZ2lmeSh7IGltcGxlbWVudGF0aW9uOiBcInR5cGVzY3JpcHQtYXBwa2l0XCIsIHZlcnNpb24gfSl9XFxuYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHsgcnVudGltZUluZm86IF8sIC4uLnNlcnZlck9wdGlvbnMgfSA9IG9wdGlvbnM7XG4gICAgYXdhaXQgZGVwZW5kZW5jaWVzLnN0YXJ0KHNlcnZlck9wdGlvbnMpO1xuICB9KTtcbiAgY29uc3Qgc2VydmljZUNvbW1hbmQgPSBidWlsZFNlcnZpY2VDb21tYW5kKCgpID0+IHtcbiAgICByZXR1cm4gbW9kZWxHYXRld2F5U2VydmljZURlZmluaXRpb24obW9kZWxHYXRld2F5T3B0aW9ucyhwcm9ncmFtKSk7XG4gIH0sIGRlcGVuZGVuY2llcy5zZXJ2aWNlKTtcbiAgcHJvZ3JhbS5hZGRDb21tYW5kKHNlcnZpY2VDb21tYW5kKTtcbiAgcmV0dXJuIHByb2dyYW07XG59XG5cbmZ1bmN0aW9uIG1vZGVsR2F0ZXdheU9wdGlvbnMoY29tbWFuZDogQ29tbWFuZCk6IE1vZGVsR2F0ZXdheUNsaU9wdGlvbnMge1xuICByZXR1cm4gcGFyc2VBcmdzKGNvbW1hbmQsIE1vZGVsR2F0ZXdheUNsaU9wdGlvbnNTY2hlbWEpO1xufVxuXG5mdW5jdGlvbiB1cmxIb3N0KGhvc3Q6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBob3N0LmluY2x1ZGVzKFwiOlwiKSA/IGBbJHtob3N0fV1gIDogaG9zdDtcbn1cbiJdfQ==