@dbx-tools/databricks 0.6.185 → 0.6.188
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -36
- package/index.ts +1 -2
- package/lib/index.d.ts +15 -0
- package/lib/index.js +15 -2730
- package/lib/src/cloud.d.ts +80 -0
- package/lib/src/cloud.js +240 -0
- package/lib/src/databricks-fs.d.ts +93 -0
- package/lib/src/databricks-fs.js +327 -0
- package/lib/src/databricks-path.d.ts +67 -0
- package/lib/src/databricks-path.js +113 -0
- package/lib/src/net.d.ts +29 -0
- package/lib/src/net.js +68 -0
- package/lib/src/workspace.d.ts +43 -0
- package/lib/src/workspace.js +110 -0
- package/lib/tsconfig.tsbuildinfo +1 -0
- package/package.json +39 -21
- package/src/_bindings-ffi.ts +0 -859
- package/src/_bindings.ts +0 -2501
- package/src/bindings.ts +0 -12
package/lib/src/net.js
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Server-side networking helpers that need Node builtins, layered over the
|
|
3
|
+
* browser-safe URL / IP toolkit in `@dbx-tools/shared-core`'s `net` module: DNS
|
|
4
|
+
* resolution ({@link resolveHostIps}, `node:dns`) and public-IP discovery
|
|
5
|
+
* ({@link getPublicIp}).
|
|
6
|
+
*
|
|
7
|
+
* @module
|
|
8
|
+
*/
|
|
9
|
+
import { lookup } from "node:dns/promises";
|
|
10
|
+
import { functionModule, http, net } from "@dbx-tools/shared-core";
|
|
11
|
+
/**
|
|
12
|
+
* This process's outbound public IP, cached for 5 minutes. Asks Cloudflare's
|
|
13
|
+
* `cdn-cgi/trace` first and falls back to ipify. Useful for allowlisting or for
|
|
14
|
+
* reasoning about egress from a Databricks App.
|
|
15
|
+
*/
|
|
16
|
+
export const getPublicIp = functionModule.memoize(async () => {
|
|
17
|
+
const cloudflareResponse = await fetch("https://cloudflare.com/cdn-cgi/trace");
|
|
18
|
+
if (cloudflareResponse.ok) {
|
|
19
|
+
const trace = await cloudflareResponse.text();
|
|
20
|
+
const ipKey = "ip=";
|
|
21
|
+
const ip = trace
|
|
22
|
+
.split("\n")
|
|
23
|
+
.map((line) => line.trim())
|
|
24
|
+
.find((line) => line.startsWith(ipKey))
|
|
25
|
+
?.slice(ipKey.length);
|
|
26
|
+
if (ip)
|
|
27
|
+
return ip;
|
|
28
|
+
}
|
|
29
|
+
const ipifyResponse = await fetch("https://api.ipify.org?format=json");
|
|
30
|
+
if (!ipifyResponse.ok) {
|
|
31
|
+
throw await http.createFetchError(ipifyResponse);
|
|
32
|
+
}
|
|
33
|
+
const ipifyData = (await ipifyResponse.json());
|
|
34
|
+
const ip = ipifyData?.ip;
|
|
35
|
+
if (ip)
|
|
36
|
+
return ip;
|
|
37
|
+
throw new Error("Could not determine public IP");
|
|
38
|
+
}, { ttlMs: 1000 * 60 * 5 });
|
|
39
|
+
/**
|
|
40
|
+
* Resolve the host of `input` to its IP address(es) via the OS resolver
|
|
41
|
+
* (`dns.lookup` with `all: true`, so both A and AAAA records are returned when
|
|
42
|
+
* the host is dual-stacked). Accepts any `net.UrlLike` - a bare hostname, a full
|
|
43
|
+
* URL, or a `{ url }` wrapper - and returns the deduplicated list of literal
|
|
44
|
+
* addresses. Never throws: an unparseable input, an IP-literal host (returned
|
|
45
|
+
* as-is without a DNS round-trip), or a resolution failure all yield the
|
|
46
|
+
* appropriate list or `[]`.
|
|
47
|
+
*
|
|
48
|
+
* `dns.lookup` (not `resolve4` / `resolve6`) is used so `/etc/hosts` and the
|
|
49
|
+
* platform resolver order are honored, matching what an outbound connection to
|
|
50
|
+
* the host would actually use.
|
|
51
|
+
*/
|
|
52
|
+
export async function resolveHostIps(input) {
|
|
53
|
+
const host = net.urlBuilder(input)?.hostname;
|
|
54
|
+
if (!host)
|
|
55
|
+
return [];
|
|
56
|
+
// WHATWG `URL.hostname` brackets IPv6 literals; strip before parsing.
|
|
57
|
+
const literal = net.parseIp(host.replace(/^\[|\]$/g, ""));
|
|
58
|
+
if (literal)
|
|
59
|
+
return [host.replace(/^\[|\]$/g, "")];
|
|
60
|
+
try {
|
|
61
|
+
const results = await lookup(host, { all: true });
|
|
62
|
+
return [...new Set(results.map((r) => r.address))];
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
return [];
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL25ldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7OztHQU9HO0FBRUgsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRW5FOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsY0FBYyxDQUFDLE9BQU8sQ0FDL0MsS0FBSyxJQUFJLEVBQUU7SUFDVCxNQUFNLGtCQUFrQixHQUFHLE1BQU0sS0FBSyxDQUFDLHNDQUFzQyxDQUFDLENBQUM7SUFDL0UsSUFBSSxrQkFBa0IsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUMxQixNQUFNLEtBQUssR0FBRyxNQUFNLGtCQUFrQixDQUFDLElBQUksRUFBRSxDQUFDO1FBQzlDLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNwQixNQUFNLEVBQUUsR0FBRyxLQUFLO2FBQ2IsS0FBSyxDQUFDLElBQUksQ0FBQzthQUNYLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO2FBQzFCLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN2QyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDeEIsSUFBSSxFQUFFO1lBQUUsT0FBTyxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUNELE1BQU0sYUFBYSxHQUFHLE1BQU0sS0FBSyxDQUFDLG1DQUFtQyxDQUFDLENBQUM7SUFDdkUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUN0QixNQUFNLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFDRCxNQUFNLFNBQVMsR0FBRyxDQUFDLE1BQU0sYUFBYSxDQUFDLElBQUksRUFBRSxDQUFvQixDQUFDO0lBQ2xFLE1BQU0sRUFBRSxHQUFHLFNBQVMsRUFBRSxFQUFFLENBQUM7SUFDekIsSUFBSSxFQUFFO1FBQUUsT0FBTyxFQUFFLENBQUM7SUFDbEIsTUFBTSxJQUFJLEtBQUssQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO0FBQ25ELENBQUMsRUFDRCxFQUFFLEtBQUssRUFBRSxJQUFJLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUN6QixDQUFDO0FBRUY7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxjQUFjLENBQUMsS0FBa0I7SUFDckQsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxRQUFRLENBQUM7SUFDN0MsSUFBSSxDQUFDLElBQUk7UUFBRSxPQUFPLEVBQUUsQ0FBQztJQUNyQixzRUFBc0U7SUFDdEUsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzFELElBQUksT0FBTztRQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ25ELElBQUksQ0FBQztRQUNILE1BQU0sT0FBTyxHQUFHLE1BQU0sTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ2xELE9BQU8sQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFNlcnZlci1zaWRlIG5ldHdvcmtpbmcgaGVscGVycyB0aGF0IG5lZWQgTm9kZSBidWlsdGlucywgbGF5ZXJlZCBvdmVyIHRoZVxuICogYnJvd3Nlci1zYWZlIFVSTCAvIElQIHRvb2xraXQgaW4gYEBkYngtdG9vbHMvc2hhcmVkLWNvcmVgJ3MgYG5ldGAgbW9kdWxlOiBETlNcbiAqIHJlc29sdXRpb24gKHtAbGluayByZXNvbHZlSG9zdElwc30sIGBub2RlOmRuc2ApIGFuZCBwdWJsaWMtSVAgZGlzY292ZXJ5XG4gKiAoe0BsaW5rIGdldFB1YmxpY0lwfSkuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IGxvb2t1cCB9IGZyb20gXCJub2RlOmRucy9wcm9taXNlc1wiO1xuaW1wb3J0IHsgZnVuY3Rpb25Nb2R1bGUsIGh0dHAsIG5ldCB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5cbi8qKlxuICogVGhpcyBwcm9jZXNzJ3Mgb3V0Ym91bmQgcHVibGljIElQLCBjYWNoZWQgZm9yIDUgbWludXRlcy4gQXNrcyBDbG91ZGZsYXJlJ3NcbiAqIGBjZG4tY2dpL3RyYWNlYCBmaXJzdCBhbmQgZmFsbHMgYmFjayB0byBpcGlmeS4gVXNlZnVsIGZvciBhbGxvd2xpc3Rpbmcgb3IgZm9yXG4gKiByZWFzb25pbmcgYWJvdXQgZWdyZXNzIGZyb20gYSBEYXRhYnJpY2tzIEFwcC5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldFB1YmxpY0lwID0gZnVuY3Rpb25Nb2R1bGUubWVtb2l6ZShcbiAgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGNsb3VkZmxhcmVSZXNwb25zZSA9IGF3YWl0IGZldGNoKFwiaHR0cHM6Ly9jbG91ZGZsYXJlLmNvbS9jZG4tY2dpL3RyYWNlXCIpO1xuICAgIGlmIChjbG91ZGZsYXJlUmVzcG9uc2Uub2spIHtcbiAgICAgIGNvbnN0IHRyYWNlID0gYXdhaXQgY2xvdWRmbGFyZVJlc3BvbnNlLnRleHQoKTtcbiAgICAgIGNvbnN0IGlwS2V5ID0gXCJpcD1cIjtcbiAgICAgIGNvbnN0IGlwID0gdHJhY2VcbiAgICAgICAgLnNwbGl0KFwiXFxuXCIpXG4gICAgICAgIC5tYXAoKGxpbmUpID0+IGxpbmUudHJpbSgpKVxuICAgICAgICAuZmluZCgobGluZSkgPT4gbGluZS5zdGFydHNXaXRoKGlwS2V5KSlcbiAgICAgICAgPy5zbGljZShpcEtleS5sZW5ndGgpO1xuICAgICAgaWYgKGlwKSByZXR1cm4gaXA7XG4gICAgfVxuICAgIGNvbnN0IGlwaWZ5UmVzcG9uc2UgPSBhd2FpdCBmZXRjaChcImh0dHBzOi8vYXBpLmlwaWZ5Lm9yZz9mb3JtYXQ9anNvblwiKTtcbiAgICBpZiAoIWlwaWZ5UmVzcG9uc2Uub2spIHtcbiAgICAgIHRocm93IGF3YWl0IGh0dHAuY3JlYXRlRmV0Y2hFcnJvcihpcGlmeVJlc3BvbnNlKTtcbiAgICB9XG4gICAgY29uc3QgaXBpZnlEYXRhID0gKGF3YWl0IGlwaWZ5UmVzcG9uc2UuanNvbigpKSBhcyB7IGlwPzogc3RyaW5nIH07XG4gICAgY29uc3QgaXAgPSBpcGlmeURhdGE/LmlwO1xuICAgIGlmIChpcCkgcmV0dXJuIGlwO1xuICAgIHRocm93IG5ldyBFcnJvcihcIkNvdWxkIG5vdCBkZXRlcm1pbmUgcHVibGljIElQXCIpO1xuICB9LFxuICB7IHR0bE1zOiAxMDAwICogNjAgKiA1IH0sXG4pO1xuXG4vKipcbiAqIFJlc29sdmUgdGhlIGhvc3Qgb2YgYGlucHV0YCB0byBpdHMgSVAgYWRkcmVzcyhlcykgdmlhIHRoZSBPUyByZXNvbHZlclxuICogKGBkbnMubG9va3VwYCB3aXRoIGBhbGw6IHRydWVgLCBzbyBib3RoIEEgYW5kIEFBQUEgcmVjb3JkcyBhcmUgcmV0dXJuZWQgd2hlblxuICogdGhlIGhvc3QgaXMgZHVhbC1zdGFja2VkKS4gQWNjZXB0cyBhbnkgYG5ldC5VcmxMaWtlYCAtIGEgYmFyZSBob3N0bmFtZSwgYSBmdWxsXG4gKiBVUkwsIG9yIGEgYHsgdXJsIH1gIHdyYXBwZXIgLSBhbmQgcmV0dXJucyB0aGUgZGVkdXBsaWNhdGVkIGxpc3Qgb2YgbGl0ZXJhbFxuICogYWRkcmVzc2VzLiBOZXZlciB0aHJvd3M6IGFuIHVucGFyc2VhYmxlIGlucHV0LCBhbiBJUC1saXRlcmFsIGhvc3QgKHJldHVybmVkXG4gKiBhcy1pcyB3aXRob3V0IGEgRE5TIHJvdW5kLXRyaXApLCBvciBhIHJlc29sdXRpb24gZmFpbHVyZSBhbGwgeWllbGQgdGhlXG4gKiBhcHByb3ByaWF0ZSBsaXN0IG9yIGBbXWAuXG4gKlxuICogYGRucy5sb29rdXBgIChub3QgYHJlc29sdmU0YCAvIGByZXNvbHZlNmApIGlzIHVzZWQgc28gYC9ldGMvaG9zdHNgIGFuZCB0aGVcbiAqIHBsYXRmb3JtIHJlc29sdmVyIG9yZGVyIGFyZSBob25vcmVkLCBtYXRjaGluZyB3aGF0IGFuIG91dGJvdW5kIGNvbm5lY3Rpb24gdG9cbiAqIHRoZSBob3N0IHdvdWxkIGFjdHVhbGx5IHVzZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVIb3N0SXBzKGlucHV0OiBuZXQuVXJsTGlrZSk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgY29uc3QgaG9zdCA9IG5ldC51cmxCdWlsZGVyKGlucHV0KT8uaG9zdG5hbWU7XG4gIGlmICghaG9zdCkgcmV0dXJuIFtdO1xuICAvLyBXSEFUV0cgYFVSTC5ob3N0bmFtZWAgYnJhY2tldHMgSVB2NiBsaXRlcmFsczsgc3RyaXAgYmVmb3JlIHBhcnNpbmcuXG4gIGNvbnN0IGxpdGVyYWwgPSBuZXQucGFyc2VJcChob3N0LnJlcGxhY2UoL15cXFt8XFxdJC9nLCBcIlwiKSk7XG4gIGlmIChsaXRlcmFsKSByZXR1cm4gW2hvc3QucmVwbGFjZSgvXlxcW3xcXF0kL2csIFwiXCIpXTtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgbG9va3VwKGhvc3QsIHsgYWxsOiB0cnVlIH0pO1xuICAgIHJldHVybiBbLi4ubmV3IFNldChyZXN1bHRzLm1hcCgocikgPT4gci5hZGRyZXNzKSldO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gW107XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolve the current Databricks workspace's URL, numeric id, and client from
|
|
3
|
+
* the active execution context (AppKit, when initialized), a default
|
|
4
|
+
* {@link WorkspaceClient}, or the environment. Server-only.
|
|
5
|
+
*
|
|
6
|
+
* @module
|
|
7
|
+
*/
|
|
8
|
+
import { type WorkspaceClient as AppKitWorkspaceClient } from "@databricks/appkit";
|
|
9
|
+
import { net } from "@dbx-tools/shared-core";
|
|
10
|
+
/** Legacy SDK client exposed by AppKit for APIs not yet on its facade. */
|
|
11
|
+
export type WorkspaceClient = ReturnType<AppKitWorkspaceClient["toLegacyWorkspaceClient"]>;
|
|
12
|
+
/** Resolve AppKit's facade or an existing legacy client to the legacy SDK surface. */
|
|
13
|
+
export declare function toLegacyWorkspaceClient(client: AppKitWorkspaceClient | WorkspaceClient): WorkspaceClient;
|
|
14
|
+
/**
|
|
15
|
+
* The AppKit execution-context workspace client when available, otherwise
|
|
16
|
+
* `undefined`. Never constructs a fallback client and never throws for a
|
|
17
|
+
* missing AppKit scope.
|
|
18
|
+
*/
|
|
19
|
+
export declare function tryGetWorkspaceClient(): WorkspaceClient | undefined;
|
|
20
|
+
/**
|
|
21
|
+
* Resolve a {@link WorkspaceClient}: {@link tryGetWorkspaceClient} first, else
|
|
22
|
+
* a memoized default client from env / profile auth.
|
|
23
|
+
*/
|
|
24
|
+
export declare function getWorkspaceClient(): Promise<WorkspaceClient>;
|
|
25
|
+
/**
|
|
26
|
+
* Current Databricks username for workspace home paths
|
|
27
|
+
* (`/Workspace/Users/<userName>`).
|
|
28
|
+
*
|
|
29
|
+
* Prefers `userName` on the AppKit execution context when set, otherwise
|
|
30
|
+
* calls `currentUser.me()` on {@link client} (or {@link getWorkspaceClient}).
|
|
31
|
+
*/
|
|
32
|
+
export declare function getCurrentUserName(client?: WorkspaceClient): Promise<string>;
|
|
33
|
+
/**
|
|
34
|
+
* Resolve the current workspace host as a `net.UrlBuilder`: the workspace
|
|
35
|
+
* `Config` host first, then the `DATABRICKS_HOST` env var, else `undefined`.
|
|
36
|
+
*/
|
|
37
|
+
export declare function getWorkspaceUrl(): Promise<net.UrlBuilder | undefined>;
|
|
38
|
+
/**
|
|
39
|
+
* Resolve the numeric workspace id: the workspace `Config`'s `workspaceId`
|
|
40
|
+
* first, else the 10-20 digit run of `workspaceHost` (defaulting to
|
|
41
|
+
* {@link getWorkspaceUrl}'s host). `undefined` when neither yields an id.
|
|
42
|
+
*/
|
|
43
|
+
export declare function getWorkspaceId(workspaceHost?: string): Promise<string | undefined>;
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolve the current Databricks workspace's URL, numeric id, and client from
|
|
3
|
+
* the active execution context (AppKit, when initialized), a default
|
|
4
|
+
* {@link WorkspaceClient}, or the environment. Server-only.
|
|
5
|
+
*
|
|
6
|
+
* @module
|
|
7
|
+
*/
|
|
8
|
+
import { createWorkspaceClient, } from "@databricks/appkit";
|
|
9
|
+
import { appkit } from "@dbx-tools/appkit";
|
|
10
|
+
import { functionModule, net } from "@dbx-tools/shared-core";
|
|
11
|
+
/** Databricks workspace ids are a 10-20 digit run embedded in the host. */
|
|
12
|
+
const WORKSPACE_ID_REGEX = /\d{10,20}/;
|
|
13
|
+
/** Resolve AppKit's facade or an existing legacy client to the legacy SDK surface. */
|
|
14
|
+
export function toLegacyWorkspaceClient(client) {
|
|
15
|
+
return "toLegacyWorkspaceClient" in client ? client.toLegacyWorkspaceClient() : client;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Lazily-constructed default `WorkspaceClient` (env / profile auth), memoized so
|
|
19
|
+
* construction happens at most once per process. Used only when there's no
|
|
20
|
+
* AppKit execution context to borrow a client from.
|
|
21
|
+
*/
|
|
22
|
+
const getDefaultWorkspaceClient = functionModule.memoize(async () => createWorkspaceClient().toLegacyWorkspaceClient());
|
|
23
|
+
/**
|
|
24
|
+
* The AppKit execution-context workspace client when available, otherwise
|
|
25
|
+
* `undefined`. Never constructs a fallback client and never throws for a
|
|
26
|
+
* missing AppKit scope.
|
|
27
|
+
*/
|
|
28
|
+
export function tryGetWorkspaceClient() {
|
|
29
|
+
return appkit.tryGetExecutionContext()?.client.toLegacyWorkspaceClient();
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Resolve a {@link WorkspaceClient}: {@link tryGetWorkspaceClient} first, else
|
|
33
|
+
* a memoized default client from env / profile auth.
|
|
34
|
+
*/
|
|
35
|
+
export async function getWorkspaceClient() {
|
|
36
|
+
return tryGetWorkspaceClient() ?? (await getDefaultWorkspaceClient());
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* The active workspace `Config`: the AppKit execution-context client's config
|
|
40
|
+
* when AppKit is initialized, else the default client's. Returns `undefined`
|
|
41
|
+
* (never throws) when neither is available.
|
|
42
|
+
*/
|
|
43
|
+
async function getWorkspaceConfig() {
|
|
44
|
+
try {
|
|
45
|
+
return (await getWorkspaceClient()).config;
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
return undefined;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Current Databricks username for workspace home paths
|
|
53
|
+
* (`/Workspace/Users/<userName>`).
|
|
54
|
+
*
|
|
55
|
+
* Prefers `userName` on the AppKit execution context when set, otherwise
|
|
56
|
+
* calls `currentUser.me()` on {@link client} (or {@link getWorkspaceClient}).
|
|
57
|
+
*/
|
|
58
|
+
export async function getCurrentUserName(client) {
|
|
59
|
+
const contextUser = readContextUserName(appkit.tryGetExecutionContext());
|
|
60
|
+
if (contextUser)
|
|
61
|
+
return contextUser;
|
|
62
|
+
const resolved = client ?? (await getWorkspaceClient());
|
|
63
|
+
const me = await resolved.currentUser.me();
|
|
64
|
+
const userName = me.userName?.trim();
|
|
65
|
+
if (!userName) {
|
|
66
|
+
throw new Error("Databricks currentUser.me() did not return a userName");
|
|
67
|
+
}
|
|
68
|
+
return userName;
|
|
69
|
+
}
|
|
70
|
+
/** Best-effort `userName` off an AppKit execution context (shape varies by mode). */
|
|
71
|
+
function readContextUserName(ctx) {
|
|
72
|
+
if (typeof ctx !== "object" || ctx === null || !("userName" in ctx))
|
|
73
|
+
return undefined;
|
|
74
|
+
const value = ctx.userName;
|
|
75
|
+
return typeof value === "string" && value.trim() ? value.trim() : undefined;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Resolve the current workspace host as a `net.UrlBuilder`: the workspace
|
|
79
|
+
* `Config` host first, then the `DATABRICKS_HOST` env var, else `undefined`.
|
|
80
|
+
*/
|
|
81
|
+
export async function getWorkspaceUrl() {
|
|
82
|
+
const config = await getWorkspaceConfig();
|
|
83
|
+
if (config) {
|
|
84
|
+
const configHost = net.urlBuilder(await config.getHost());
|
|
85
|
+
if (configHost)
|
|
86
|
+
return configHost;
|
|
87
|
+
}
|
|
88
|
+
const databricksHost = net.urlBuilder(process.env.DATABRICKS_HOST);
|
|
89
|
+
if (databricksHost)
|
|
90
|
+
return databricksHost;
|
|
91
|
+
return undefined;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Resolve the numeric workspace id: the workspace `Config`'s `workspaceId`
|
|
95
|
+
* first, else the 10-20 digit run of `workspaceHost` (defaulting to
|
|
96
|
+
* {@link getWorkspaceUrl}'s host). `undefined` when neither yields an id.
|
|
97
|
+
*/
|
|
98
|
+
export async function getWorkspaceId(workspaceHost) {
|
|
99
|
+
const workspaceId = (await getWorkspaceConfig())?.workspaceId;
|
|
100
|
+
if (workspaceId)
|
|
101
|
+
return workspaceId;
|
|
102
|
+
workspaceHost = workspaceHost ?? (await getWorkspaceUrl())?.host;
|
|
103
|
+
if (workspaceHost) {
|
|
104
|
+
const match = workspaceHost.match(WORKSPACE_ID_REGEX)?.[0];
|
|
105
|
+
if (match)
|
|
106
|
+
return match;
|
|
107
|
+
}
|
|
108
|
+
return undefined;
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya3NwYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3dvcmtzcGFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEVBQ0wscUJBQXFCLEdBRXRCLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxjQUFjLEVBQUUsR0FBRyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFN0QsMkVBQTJFO0FBQzNFLE1BQU0sa0JBQWtCLEdBQUcsV0FBVyxDQUFDO0FBTXZDLHNGQUFzRjtBQUN0RixNQUFNLFVBQVUsdUJBQXVCLENBQ3JDLE1BQStDO0lBRS9DLE9BQU8seUJBQXlCLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsdUJBQXVCLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0FBQ3pGLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSx5QkFBeUIsR0FBRyxjQUFjLENBQUMsT0FBTyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQ2xFLHFCQUFxQixFQUFFLENBQUMsdUJBQXVCLEVBQUUsQ0FDbEQsQ0FBQztBQUVGOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUscUJBQXFCO0lBQ25DLE9BQU8sTUFBTSxDQUFDLHNCQUFzQixFQUFFLEVBQUUsTUFBTSxDQUFDLHVCQUF1QixFQUFFLENBQUM7QUFDM0UsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsa0JBQWtCO0lBQ3RDLE9BQU8scUJBQXFCLEVBQUUsSUFBSSxDQUFDLE1BQU0seUJBQXlCLEVBQUUsQ0FBQyxDQUFDO0FBQ3hFLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsS0FBSyxVQUFVLGtCQUFrQjtJQUMvQixJQUFJLENBQUM7UUFDSCxPQUFPLENBQUMsTUFBTSxrQkFBa0IsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQzdDLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsa0JBQWtCLENBQUMsTUFBd0I7SUFDL0QsTUFBTSxXQUFXLEdBQUcsbUJBQW1CLENBQUMsTUFBTSxDQUFDLHNCQUFzQixFQUFFLENBQUMsQ0FBQztJQUN6RSxJQUFJLFdBQVc7UUFBRSxPQUFPLFdBQVcsQ0FBQztJQUVwQyxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxNQUFNLGtCQUFrQixFQUFFLENBQUMsQ0FBQztJQUN4RCxNQUFNLEVBQUUsR0FBRyxNQUFNLFFBQVEsQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLENBQUM7SUFDM0MsTUFBTSxRQUFRLEdBQUcsRUFBRSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUNyQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDZCxNQUFNLElBQUksS0FBSyxDQUFDLHVEQUF1RCxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUNELE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUM7QUFFRCxxRkFBcUY7QUFDckYsU0FBUyxtQkFBbUIsQ0FBQyxHQUFZO0lBQ3ZDLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxJQUFJLEdBQUcsS0FBSyxJQUFJLElBQUksQ0FBQyxDQUFDLFVBQVUsSUFBSSxHQUFHLENBQUM7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUN0RixNQUFNLEtBQUssR0FBSSxHQUE4QixDQUFDLFFBQVEsQ0FBQztJQUN2RCxPQUFPLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQzlFLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLGVBQWU7SUFDbkMsTUFBTSxNQUFNLEdBQUcsTUFBTSxrQkFBa0IsRUFBRSxDQUFDO0lBQzFDLElBQUksTUFBTSxFQUFFLENBQUM7UUFDWCxNQUFNLFVBQVUsR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDLE1BQU0sTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDMUQsSUFBSSxVQUFVO1lBQUUsT0FBTyxVQUFVLENBQUM7SUFDcEMsQ0FBQztJQUNELE1BQU0sY0FBYyxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUNuRSxJQUFJLGNBQWM7UUFBRSxPQUFPLGNBQWMsQ0FBQztJQUMxQyxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsY0FBYyxDQUFDLGFBQXNCO0lBQ3pELE1BQU0sV0FBVyxHQUFHLENBQUMsTUFBTSxrQkFBa0IsRUFBRSxDQUFDLEVBQUUsV0FBVyxDQUFDO0lBQzlELElBQUksV0FBVztRQUFFLE9BQU8sV0FBVyxDQUFDO0lBQ3BDLGFBQWEsR0FBRyxhQUFhLElBQUksQ0FBQyxNQUFNLGVBQWUsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDO0lBQ2pFLElBQUksYUFBYSxFQUFFLENBQUM7UUFDbEIsTUFBTSxLQUFLLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0QsSUFBSSxLQUFLO1lBQUUsT0FBTyxLQUFLLENBQUM7SUFDMUIsQ0FBQztJQUNELE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFJlc29sdmUgdGhlIGN1cnJlbnQgRGF0YWJyaWNrcyB3b3Jrc3BhY2UncyBVUkwsIG51bWVyaWMgaWQsIGFuZCBjbGllbnQgZnJvbVxuICogdGhlIGFjdGl2ZSBleGVjdXRpb24gY29udGV4dCAoQXBwS2l0LCB3aGVuIGluaXRpYWxpemVkKSwgYSBkZWZhdWx0XG4gKiB7QGxpbmsgV29ya3NwYWNlQ2xpZW50fSwgb3IgdGhlIGVudmlyb25tZW50LiBTZXJ2ZXItb25seS5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHtcbiAgY3JlYXRlV29ya3NwYWNlQ2xpZW50LFxuICB0eXBlIFdvcmtzcGFjZUNsaWVudCBhcyBBcHBLaXRXb3Jrc3BhY2VDbGllbnQsXG59IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXRcIjtcbmltcG9ydCB7IGFwcGtpdCB9IGZyb20gXCJAZGJ4LXRvb2xzL2FwcGtpdFwiO1xuaW1wb3J0IHsgZnVuY3Rpb25Nb2R1bGUsIG5ldCB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5cbi8qKiBEYXRhYnJpY2tzIHdvcmtzcGFjZSBpZHMgYXJlIGEgMTAtMjAgZGlnaXQgcnVuIGVtYmVkZGVkIGluIHRoZSBob3N0LiAqL1xuY29uc3QgV09SS1NQQUNFX0lEX1JFR0VYID0gL1xcZHsxMCwyMH0vO1xuXG4vKiogTGVnYWN5IFNESyBjbGllbnQgZXhwb3NlZCBieSBBcHBLaXQgZm9yIEFQSXMgbm90IHlldCBvbiBpdHMgZmFjYWRlLiAqL1xuZXhwb3J0IHR5cGUgV29ya3NwYWNlQ2xpZW50ID0gUmV0dXJuVHlwZTxBcHBLaXRXb3Jrc3BhY2VDbGllbnRbXCJ0b0xlZ2FjeVdvcmtzcGFjZUNsaWVudFwiXT47XG50eXBlIENvbmZpZyA9IFdvcmtzcGFjZUNsaWVudFtcImNvbmZpZ1wiXTtcblxuLyoqIFJlc29sdmUgQXBwS2l0J3MgZmFjYWRlIG9yIGFuIGV4aXN0aW5nIGxlZ2FjeSBjbGllbnQgdG8gdGhlIGxlZ2FjeSBTREsgc3VyZmFjZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0xlZ2FjeVdvcmtzcGFjZUNsaWVudChcbiAgY2xpZW50OiBBcHBLaXRXb3Jrc3BhY2VDbGllbnQgfCBXb3Jrc3BhY2VDbGllbnQsXG4pOiBXb3Jrc3BhY2VDbGllbnQge1xuICByZXR1cm4gXCJ0b0xlZ2FjeVdvcmtzcGFjZUNsaWVudFwiIGluIGNsaWVudCA/IGNsaWVudC50b0xlZ2FjeVdvcmtzcGFjZUNsaWVudCgpIDogY2xpZW50O1xufVxuXG4vKipcbiAqIExhemlseS1jb25zdHJ1Y3RlZCBkZWZhdWx0IGBXb3Jrc3BhY2VDbGllbnRgIChlbnYgLyBwcm9maWxlIGF1dGgpLCBtZW1vaXplZCBzb1xuICogY29uc3RydWN0aW9uIGhhcHBlbnMgYXQgbW9zdCBvbmNlIHBlciBwcm9jZXNzLiBVc2VkIG9ubHkgd2hlbiB0aGVyZSdzIG5vXG4gKiBBcHBLaXQgZXhlY3V0aW9uIGNvbnRleHQgdG8gYm9ycm93IGEgY2xpZW50IGZyb20uXG4gKi9cbmNvbnN0IGdldERlZmF1bHRXb3Jrc3BhY2VDbGllbnQgPSBmdW5jdGlvbk1vZHVsZS5tZW1vaXplKGFzeW5jICgpID0+XG4gIGNyZWF0ZVdvcmtzcGFjZUNsaWVudCgpLnRvTGVnYWN5V29ya3NwYWNlQ2xpZW50KCksXG4pO1xuXG4vKipcbiAqIFRoZSBBcHBLaXQgZXhlY3V0aW9uLWNvbnRleHQgd29ya3NwYWNlIGNsaWVudCB3aGVuIGF2YWlsYWJsZSwgb3RoZXJ3aXNlXG4gKiBgdW5kZWZpbmVkYC4gTmV2ZXIgY29uc3RydWN0cyBhIGZhbGxiYWNrIGNsaWVudCBhbmQgbmV2ZXIgdGhyb3dzIGZvciBhXG4gKiBtaXNzaW5nIEFwcEtpdCBzY29wZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyeUdldFdvcmtzcGFjZUNsaWVudCgpOiBXb3Jrc3BhY2VDbGllbnQgfCB1bmRlZmluZWQge1xuICByZXR1cm4gYXBwa2l0LnRyeUdldEV4ZWN1dGlvbkNvbnRleHQoKT8uY2xpZW50LnRvTGVnYWN5V29ya3NwYWNlQ2xpZW50KCk7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBhIHtAbGluayBXb3Jrc3BhY2VDbGllbnR9OiB7QGxpbmsgdHJ5R2V0V29ya3NwYWNlQ2xpZW50fSBmaXJzdCwgZWxzZVxuICogYSBtZW1vaXplZCBkZWZhdWx0IGNsaWVudCBmcm9tIGVudiAvIHByb2ZpbGUgYXV0aC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFdvcmtzcGFjZUNsaWVudCgpOiBQcm9taXNlPFdvcmtzcGFjZUNsaWVudD4ge1xuICByZXR1cm4gdHJ5R2V0V29ya3NwYWNlQ2xpZW50KCkgPz8gKGF3YWl0IGdldERlZmF1bHRXb3Jrc3BhY2VDbGllbnQoKSk7XG59XG5cbi8qKlxuICogVGhlIGFjdGl2ZSB3b3Jrc3BhY2UgYENvbmZpZ2A6IHRoZSBBcHBLaXQgZXhlY3V0aW9uLWNvbnRleHQgY2xpZW50J3MgY29uZmlnXG4gKiB3aGVuIEFwcEtpdCBpcyBpbml0aWFsaXplZCwgZWxzZSB0aGUgZGVmYXVsdCBjbGllbnQncy4gUmV0dXJucyBgdW5kZWZpbmVkYFxuICogKG5ldmVyIHRocm93cykgd2hlbiBuZWl0aGVyIGlzIGF2YWlsYWJsZS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0V29ya3NwYWNlQ29uZmlnKCk6IFByb21pc2U8Q29uZmlnIHwgdW5kZWZpbmVkPiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIChhd2FpdCBnZXRXb3Jrc3BhY2VDbGllbnQoKSkuY29uZmlnO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbi8qKlxuICogQ3VycmVudCBEYXRhYnJpY2tzIHVzZXJuYW1lIGZvciB3b3Jrc3BhY2UgaG9tZSBwYXRoc1xuICogKGAvV29ya3NwYWNlL1VzZXJzLzx1c2VyTmFtZT5gKS5cbiAqXG4gKiBQcmVmZXJzIGB1c2VyTmFtZWAgb24gdGhlIEFwcEtpdCBleGVjdXRpb24gY29udGV4dCB3aGVuIHNldCwgb3RoZXJ3aXNlXG4gKiBjYWxscyBgY3VycmVudFVzZXIubWUoKWAgb24ge0BsaW5rIGNsaWVudH0gKG9yIHtAbGluayBnZXRXb3Jrc3BhY2VDbGllbnR9KS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEN1cnJlbnRVc2VyTmFtZShjbGllbnQ/OiBXb3Jrc3BhY2VDbGllbnQpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBjb250ZXh0VXNlciA9IHJlYWRDb250ZXh0VXNlck5hbWUoYXBwa2l0LnRyeUdldEV4ZWN1dGlvbkNvbnRleHQoKSk7XG4gIGlmIChjb250ZXh0VXNlcikgcmV0dXJuIGNvbnRleHRVc2VyO1xuXG4gIGNvbnN0IHJlc29sdmVkID0gY2xpZW50ID8/IChhd2FpdCBnZXRXb3Jrc3BhY2VDbGllbnQoKSk7XG4gIGNvbnN0IG1lID0gYXdhaXQgcmVzb2x2ZWQuY3VycmVudFVzZXIubWUoKTtcbiAgY29uc3QgdXNlck5hbWUgPSBtZS51c2VyTmFtZT8udHJpbSgpO1xuICBpZiAoIXVzZXJOYW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiRGF0YWJyaWNrcyBjdXJyZW50VXNlci5tZSgpIGRpZCBub3QgcmV0dXJuIGEgdXNlck5hbWVcIik7XG4gIH1cbiAgcmV0dXJuIHVzZXJOYW1lO1xufVxuXG4vKiogQmVzdC1lZmZvcnQgYHVzZXJOYW1lYCBvZmYgYW4gQXBwS2l0IGV4ZWN1dGlvbiBjb250ZXh0IChzaGFwZSB2YXJpZXMgYnkgbW9kZSkuICovXG5mdW5jdGlvbiByZWFkQ29udGV4dFVzZXJOYW1lKGN0eDogdW5rbm93bik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICh0eXBlb2YgY3R4ICE9PSBcIm9iamVjdFwiIHx8IGN0eCA9PT0gbnVsbCB8fCAhKFwidXNlck5hbWVcIiBpbiBjdHgpKSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCB2YWx1ZSA9IChjdHggYXMgeyB1c2VyTmFtZT86IHVua25vd24gfSkudXNlck5hbWU7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiYgdmFsdWUudHJpbSgpID8gdmFsdWUudHJpbSgpIDogdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFJlc29sdmUgdGhlIGN1cnJlbnQgd29ya3NwYWNlIGhvc3QgYXMgYSBgbmV0LlVybEJ1aWxkZXJgOiB0aGUgd29ya3NwYWNlXG4gKiBgQ29uZmlnYCBob3N0IGZpcnN0LCB0aGVuIHRoZSBgREFUQUJSSUNLU19IT1NUYCBlbnYgdmFyLCBlbHNlIGB1bmRlZmluZWRgLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0V29ya3NwYWNlVXJsKCk6IFByb21pc2U8bmV0LlVybEJ1aWxkZXIgfCB1bmRlZmluZWQ+IHtcbiAgY29uc3QgY29uZmlnID0gYXdhaXQgZ2V0V29ya3NwYWNlQ29uZmlnKCk7XG4gIGlmIChjb25maWcpIHtcbiAgICBjb25zdCBjb25maWdIb3N0ID0gbmV0LnVybEJ1aWxkZXIoYXdhaXQgY29uZmlnLmdldEhvc3QoKSk7XG4gICAgaWYgKGNvbmZpZ0hvc3QpIHJldHVybiBjb25maWdIb3N0O1xuICB9XG4gIGNvbnN0IGRhdGFicmlja3NIb3N0ID0gbmV0LnVybEJ1aWxkZXIocHJvY2Vzcy5lbnYuREFUQUJSSUNLU19IT1NUKTtcbiAgaWYgKGRhdGFicmlja3NIb3N0KSByZXR1cm4gZGF0YWJyaWNrc0hvc3Q7XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogUmVzb2x2ZSB0aGUgbnVtZXJpYyB3b3Jrc3BhY2UgaWQ6IHRoZSB3b3Jrc3BhY2UgYENvbmZpZ2AncyBgd29ya3NwYWNlSWRgXG4gKiBmaXJzdCwgZWxzZSB0aGUgMTAtMjAgZGlnaXQgcnVuIG9mIGB3b3Jrc3BhY2VIb3N0YCAoZGVmYXVsdGluZyB0b1xuICoge0BsaW5rIGdldFdvcmtzcGFjZVVybH0ncyBob3N0KS4gYHVuZGVmaW5lZGAgd2hlbiBuZWl0aGVyIHlpZWxkcyBhbiBpZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFdvcmtzcGFjZUlkKHdvcmtzcGFjZUhvc3Q/OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCB3b3Jrc3BhY2VJZCA9IChhd2FpdCBnZXRXb3Jrc3BhY2VDb25maWcoKSk/LndvcmtzcGFjZUlkO1xuICBpZiAod29ya3NwYWNlSWQpIHJldHVybiB3b3Jrc3BhY2VJZDtcbiAgd29ya3NwYWNlSG9zdCA9IHdvcmtzcGFjZUhvc3QgPz8gKGF3YWl0IGdldFdvcmtzcGFjZVVybCgpKT8uaG9zdDtcbiAgaWYgKHdvcmtzcGFjZUhvc3QpIHtcbiAgICBjb25zdCBtYXRjaCA9IHdvcmtzcGFjZUhvc3QubWF0Y2goV09SS1NQQUNFX0lEX1JFR0VYKT8uWzBdO1xuICAgIGlmIChtYXRjaCkgcmV0dXJuIG1hdGNoO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"root":["../src/cloud.ts","../src/databricks-fs.ts","../src/databricks-path.ts","../src/net.ts","../src/workspace.ts","../index.ts"],"version":"5.9.3"}
|
package/package.json
CHANGED
|
@@ -1,28 +1,55 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dbx-tools/databricks",
|
|
3
|
-
"description": "Databricks workspace, filesystem, cloud,
|
|
3
|
+
"description": "Databricks workspace, filesystem, cloud, and network utilities",
|
|
4
4
|
"repository": {
|
|
5
5
|
"type": "git",
|
|
6
6
|
"url": "git+https://github.com/reggie-db/dbx-tools.git",
|
|
7
7
|
"directory": "packages/js/node/databricks"
|
|
8
8
|
},
|
|
9
|
+
"scripts": {
|
|
10
|
+
"build": "projen build",
|
|
11
|
+
"compile": "projen compile",
|
|
12
|
+
"default": "projen default",
|
|
13
|
+
"package": "projen package",
|
|
14
|
+
"post-compile": "projen post-compile",
|
|
15
|
+
"pre-compile": "projen pre-compile",
|
|
16
|
+
"prepack": "projen prepack",
|
|
17
|
+
"test": "projen test",
|
|
18
|
+
"watch": "projen watch",
|
|
19
|
+
"projen": "projen"
|
|
20
|
+
},
|
|
21
|
+
"devDependencies": {
|
|
22
|
+
"@types/bun": "1.3.14",
|
|
23
|
+
"@types/node": "^24.6.0",
|
|
24
|
+
"typescript": "^5.9.3"
|
|
25
|
+
},
|
|
9
26
|
"dependencies": {
|
|
10
27
|
"@databricks/appkit": "^0.60.0",
|
|
11
|
-
"@dbx-tools/appkit": "0.6.
|
|
12
|
-
"@dbx-tools/core": "0.6.
|
|
13
|
-
"@dbx-tools/shared-core": "0.6.
|
|
14
|
-
"@dbx-tools/shared-fs": "0.6.
|
|
15
|
-
"@ubjs/core": "0.31.0-5",
|
|
16
|
-
"@ubjs/node": "0.31.0-5"
|
|
28
|
+
"@dbx-tools/appkit": "0.6.188",
|
|
29
|
+
"@dbx-tools/core": "0.6.188",
|
|
30
|
+
"@dbx-tools/shared-core": "0.6.188",
|
|
31
|
+
"@dbx-tools/shared-fs": "0.6.188"
|
|
17
32
|
},
|
|
18
33
|
"main": "./lib/index.js",
|
|
19
|
-
"license": "
|
|
20
|
-
"
|
|
21
|
-
|
|
34
|
+
"license": "UNLICENSED",
|
|
35
|
+
"publishConfig": {
|
|
36
|
+
"access": "public",
|
|
37
|
+
"main": "./lib/index.js",
|
|
38
|
+
"types": "./lib/index.d.ts",
|
|
39
|
+
"exports": {
|
|
40
|
+
".": {
|
|
41
|
+
"types": "./lib/index.d.ts",
|
|
42
|
+
"default": "./lib/index.js"
|
|
43
|
+
},
|
|
44
|
+
"./package.json": "./package.json"
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
"version": "0.6.188",
|
|
48
|
+
"types": "./lib/index.d.ts",
|
|
22
49
|
"type": "module",
|
|
23
50
|
"exports": {
|
|
24
51
|
".": {
|
|
25
|
-
"types": "./index.ts",
|
|
52
|
+
"types": "./lib/index.d.ts",
|
|
26
53
|
"default": "./lib/index.js"
|
|
27
54
|
},
|
|
28
55
|
"./package.json": "./package.json"
|
|
@@ -32,19 +59,10 @@
|
|
|
32
59
|
"src",
|
|
33
60
|
"lib"
|
|
34
61
|
],
|
|
35
|
-
"optionalDependencies": {
|
|
36
|
-
"@dbx-tools/databricks-linux-x64-gnu": "0.6.185",
|
|
37
|
-
"@dbx-tools/databricks-linux-arm64-gnu": "0.6.185",
|
|
38
|
-
"@dbx-tools/databricks-darwin-x64": "0.6.185",
|
|
39
|
-
"@dbx-tools/databricks-darwin-arm64": "0.6.185",
|
|
40
|
-
"@dbx-tools/databricks-win32-x64-msvc": "0.6.185"
|
|
41
|
-
},
|
|
42
62
|
"dbxToolsConfig": {
|
|
43
|
-
"uniffi": true,
|
|
44
63
|
"tags": [
|
|
45
64
|
"node"
|
|
46
65
|
]
|
|
47
66
|
},
|
|
48
|
-
"//": "~~ Generated by projen. To modify, edit .projenrc.js and run \"bunx projen\"."
|
|
49
|
-
"private": false
|
|
67
|
+
"//": "~~ Generated by projen. To modify, edit .projenrc.js and run \"bunx projen\"."
|
|
50
68
|
}
|