@dbx-tools/auth 0.9.31 → 0.9.36
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 +49 -97
- package/index.ts +8 -26
- package/lib/index.d.ts +8 -26
- package/lib/index.js +6 -22
- package/lib/src/{databricks-cli.d.ts → _databricks-cli.d.ts} +3 -7
- package/lib/src/_databricks-cli.js +172 -0
- package/lib/src/_errors.d.ts +5 -0
- package/lib/src/_errors.js +10 -0
- package/lib/src/{lifecycle.d.ts → _lifecycle.d.ts} +5 -5
- package/lib/src/_lifecycle.js +214 -0
- package/lib/src/_logging.d.ts +1 -1
- package/lib/src/_logging.js +2 -2
- package/lib/src/{personal-access-token.d.ts → _personal-access-token.d.ts} +1 -1
- package/lib/src/_personal-access-token.js +30 -0
- package/lib/src/_profile-config.d.ts +43 -0
- package/lib/src/_profile-config.js +443 -0
- package/lib/src/{service-principal.d.ts → _service-principal.d.ts} +1 -1
- package/lib/src/_service-principal.js +69 -0
- package/lib/src/{storage.d.ts → _storage.d.ts} +4 -6
- package/lib/src/_storage.js +94 -0
- package/lib/src/_types.d.ts +40 -0
- package/lib/src/_types.js +2 -0
- package/lib/src/client.d.ts +30 -0
- package/lib/src/client.js +223 -0
- package/lib/src/config.d.ts +36 -0
- package/lib/src/config.js +15 -0
- package/lib/src/profile.d.ts +11 -0
- package/lib/src/profile.js +21 -0
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/package.json +34 -10
- package/src/{databricks-cli.ts → _databricks-cli.ts} +20 -109
- package/src/_errors.ts +11 -0
- package/src/{lifecycle.ts → _lifecycle.ts} +24 -48
- package/src/_logging.ts +2 -2
- package/src/{personal-access-token.ts → _personal-access-token.ts} +1 -1
- package/src/_profile-config.ts +545 -0
- package/src/{service-principal.ts → _service-principal.ts} +2 -2
- package/src/_storage.ts +109 -0
- package/src/_types.ts +45 -0
- package/src/client.ts +291 -0
- package/src/config.ts +44 -0
- package/src/profile.ts +33 -0
- package/lib/exports.d.ts +0 -2
- package/lib/exports.js +0 -3
- package/lib/src/_profile-core.d.ts +0 -28
- package/lib/src/_profile-core.js +0 -216
- package/lib/src/_profile.d.ts +0 -15
- package/lib/src/_profile.js +0 -236
- package/lib/src/databricks-auth.d.ts +0 -11
- package/lib/src/databricks-auth.js +0 -314
- package/lib/src/databricks-cli.js +0 -239
- package/lib/src/errors.d.ts +0 -7
- package/lib/src/errors.js +0 -14
- package/lib/src/generated/databricks-cli-assets.json +0 -33
- package/lib/src/http-client.d.ts +0 -23
- package/lib/src/http-client.js +0 -116
- package/lib/src/lifecycle.js +0 -229
- package/lib/src/node-storage.d.ts +0 -20
- package/lib/src/node-storage.js +0 -207
- package/lib/src/personal-access-token.js +0 -30
- package/lib/src/service-principal.js +0 -69
- package/lib/src/storage.js +0 -98
- package/lib/src/types.d.ts +0 -157
- package/lib/src/types.js +0 -67
- package/src/_profile-core.ts +0 -258
- package/src/_profile.ts +0 -319
- package/src/databricks-auth.ts +0 -416
- package/src/errors.ts +0 -16
- package/src/generated/databricks-cli-assets.json +0 -33
- package/src/http-client.ts +0 -147
- package/src/node-storage.ts +0 -230
- package/src/storage.ts +0 -104
- package/src/types.ts +0 -188
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import type { CredentialStore, LockAdapter, Token } from "./
|
|
2
|
-
/** Process-local
|
|
1
|
+
import type { CredentialStore, LockAdapter, Token } from "./_types.ts";
|
|
2
|
+
/** Process-local keyed credential lock. */
|
|
3
3
|
export declare class MemoryLockAdapter implements LockAdapter {
|
|
4
4
|
#private;
|
|
5
|
-
acquire(key: string, timeoutMs
|
|
5
|
+
acquire(key: string, timeoutMs?: number): Promise<string>;
|
|
6
6
|
release(lease: string): Promise<void>;
|
|
7
7
|
}
|
|
8
8
|
/** Process-local credential store with per-key refresh locks. */
|
|
@@ -11,10 +11,8 @@ export declare class MemoryCredentialStore implements CredentialStore {
|
|
|
11
11
|
private readonly locks;
|
|
12
12
|
constructor(locks?: LockAdapter);
|
|
13
13
|
load(key: string): Promise<Token | undefined>;
|
|
14
|
-
prepareWrite(): Promise<void>;
|
|
15
14
|
save(key: string, token: Token): Promise<void>;
|
|
16
15
|
remove(key: string): Promise<void>;
|
|
17
|
-
acquireLock(key: string, timeoutMs
|
|
16
|
+
acquireLock(key: string, timeoutMs?: number): Promise<string>;
|
|
18
17
|
releaseLock(lease: string): Promise<void>;
|
|
19
|
-
name(): string;
|
|
20
18
|
}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { authLogger, credentialId, tokenMetadata } from "./_logging.js";
|
|
2
|
+
const logger = authLogger("memory-storage");
|
|
3
|
+
/** Process-local keyed credential lock. */
|
|
4
|
+
export class MemoryLockAdapter {
|
|
5
|
+
#states = new Map();
|
|
6
|
+
#sequence = 0;
|
|
7
|
+
acquire(key, timeoutMs) {
|
|
8
|
+
const credential = credentialId(key);
|
|
9
|
+
const state = this.#states.get(key);
|
|
10
|
+
if (!state) {
|
|
11
|
+
const lease = this.#nextLease(key);
|
|
12
|
+
this.#states.set(key, { lease, queue: [] });
|
|
13
|
+
logger.debug("memory lock acquired", { credential });
|
|
14
|
+
return Promise.resolve(lease);
|
|
15
|
+
}
|
|
16
|
+
logger.debug("waiting for memory lock", { credential, timeoutMs });
|
|
17
|
+
return new Promise((resolve, reject) => {
|
|
18
|
+
let timer;
|
|
19
|
+
const waiter = {
|
|
20
|
+
resolve: (lease) => {
|
|
21
|
+
if (timer)
|
|
22
|
+
clearTimeout(timer);
|
|
23
|
+
logger.debug("memory lock acquired", { credential });
|
|
24
|
+
resolve(lease);
|
|
25
|
+
},
|
|
26
|
+
reject: (error) => {
|
|
27
|
+
if (timer)
|
|
28
|
+
clearTimeout(timer);
|
|
29
|
+
reject(error);
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
state.queue.push(waiter);
|
|
33
|
+
if (timeoutMs !== undefined && Number.isFinite(timeoutMs) && timeoutMs > 0) {
|
|
34
|
+
timer = setTimeout(() => {
|
|
35
|
+
const index = state.queue.indexOf(waiter);
|
|
36
|
+
if (index >= 0)
|
|
37
|
+
state.queue.splice(index, 1);
|
|
38
|
+
waiter.reject(new Error(`Timed out waiting for lock ${key}`));
|
|
39
|
+
}, timeoutMs);
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
release(lease) {
|
|
44
|
+
const key = lease.split(":").slice(1).join(":");
|
|
45
|
+
const state = this.#states.get(key);
|
|
46
|
+
if (!state || state.lease !== lease)
|
|
47
|
+
return Promise.resolve();
|
|
48
|
+
const next = state.queue.shift();
|
|
49
|
+
if (!next) {
|
|
50
|
+
this.#states.delete(key);
|
|
51
|
+
return Promise.resolve();
|
|
52
|
+
}
|
|
53
|
+
state.lease = this.#nextLease(key);
|
|
54
|
+
next.resolve(state.lease);
|
|
55
|
+
return Promise.resolve();
|
|
56
|
+
}
|
|
57
|
+
#nextLease(key) {
|
|
58
|
+
return `${++this.#sequence}:${key}`;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/** Process-local credential store with per-key refresh locks. */
|
|
62
|
+
export class MemoryCredentialStore {
|
|
63
|
+
locks;
|
|
64
|
+
#tokens = new Map();
|
|
65
|
+
constructor(locks = new MemoryLockAdapter()) {
|
|
66
|
+
this.locks = locks;
|
|
67
|
+
}
|
|
68
|
+
async load(key) {
|
|
69
|
+
const token = this.#tokens.get(key);
|
|
70
|
+
logger.debug("loaded memory credential", {
|
|
71
|
+
credential: credentialId(key),
|
|
72
|
+
token: tokenMetadata(token),
|
|
73
|
+
});
|
|
74
|
+
return token ? structuredClone(token) : undefined;
|
|
75
|
+
}
|
|
76
|
+
async save(key, token) {
|
|
77
|
+
this.#tokens.set(key, structuredClone(token));
|
|
78
|
+
logger.debug("saved memory credential", {
|
|
79
|
+
credential: credentialId(key),
|
|
80
|
+
token: tokenMetadata(token),
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
async remove(key) {
|
|
84
|
+
this.#tokens.delete(key);
|
|
85
|
+
logger.debug("removed memory credential", { credential: credentialId(key) });
|
|
86
|
+
}
|
|
87
|
+
acquireLock(key, timeoutMs) {
|
|
88
|
+
return this.locks.acquire(key, timeoutMs);
|
|
89
|
+
}
|
|
90
|
+
releaseLock(lease) {
|
|
91
|
+
return this.locks.release(lease);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiX3N0b3JhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvX3N0b3JhZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR3hFLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0FBWTVDLDJDQUEyQztBQUMzQyxNQUFNLE9BQU8saUJBQWlCO0lBQ25CLE9BQU8sR0FBRyxJQUFJLEdBQUcsRUFBMkIsQ0FBQztJQUN0RCxTQUFTLEdBQUcsQ0FBQyxDQUFDO0lBRWQsT0FBTyxDQUFDLEdBQVcsRUFBRSxTQUFrQjtRQUNyQyxNQUFNLFVBQVUsR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDckMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ1gsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNuQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDNUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsRUFBRSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7WUFDckQsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hDLENBQUM7UUFDRCxNQUFNLENBQUMsS0FBSyxDQUFDLHlCQUF5QixFQUFFLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFDbkUsT0FBTyxJQUFJLE9BQU8sQ0FBUyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUM3QyxJQUFJLEtBQWdE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bk1ldGFkYXRhIH0gZnJvbSBcIi4vX2xvZ2dpbmcudHNcIjtcbmltcG9ydCB0eXBlIHsgQ3JlZGVudGlhbFN0b3JlLCBMb2NrQWRhcHRlciwgVG9rZW4gfSBmcm9tIFwiLi9fdHlwZXMudHNcIjtcblxuY29uc3QgbG9nZ2VyID0gYXV0aExvZ2dlcihcIm1lbW9yeS1zdG9yYWdlXCIpO1xuXG5pbnRlcmZhY2UgTWVtb3J5TG9ja1dhaXRlciB7XG4gIHJlc29sdmU6IChsZWFzZTogc3RyaW5nKSA9PiB2b2lkO1xuICByZWplY3Q6IChlcnJvcjogdW5rbm93bikgPT4gdm9pZDtcbn1cblxuaW50ZXJmYWNlIE1lbW9yeUxvY2tTdGF0ZSB7XG4gIGxlYXNlOiBzdHJpbmc7XG4gIHF1ZXVlOiBNZW1vcnlMb2NrV2FpdGVyW107XG59XG5cbi8qKiBQcm9jZXNzLWxvY2FsIGtleWVkIGNyZWRlbnRpYWwgbG9jay4gKi9cbmV4cG9ydCBjbGFzcyBNZW1vcnlMb2NrQWRhcHRlciBpbXBsZW1lbnRzIExvY2tBZGFwdGVyIHtcbiAgcmVhZG9ubHkgI3N0YXRlcyA9IG5ldyBNYXA8c3RyaW5nLCBNZW1vcnlMb2NrU3RhdGU+KCk7XG4gICNzZXF1ZW5jZSA9IDA7XG5cbiAgYWNxdWlyZShrZXk6IHN0cmluZywgdGltZW91dE1zPzogbnVtYmVyKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBjcmVkZW50aWFsID0gY3JlZGVudGlhbElkKGtleSk7XG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLiNzdGF0ZXMuZ2V0KGtleSk7XG4gICAgaWYgKCFzdGF0ZSkge1xuICAgICAgY29uc3QgbGVhc2UgPSB0aGlzLiNuZXh0TGVhc2Uoa2V5KTtcbiAgICAgIHRoaXMuI3N0YXRlcy5zZXQoa2V5LCB7IGxlYXNlLCBxdWV1ZTogW10gfSk7XG4gICAgICBsb2dnZXIuZGVidWcoXCJtZW1vcnkgbG9jayBhY3F1aXJlZFwiLCB7IGNyZWRlbnRpYWwgfSk7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGxlYXNlKTtcbiAgICB9XG4gICAgbG9nZ2VyLmRlYnVnKFwid2FpdGluZyBmb3IgbWVtb3J5IGxvY2tcIiwgeyBjcmVkZW50aWFsLCB0aW1lb3V0TXMgfSk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHN0cmluZz4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgbGV0IHRpbWVyOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IHdhaXRlcjogTWVtb3J5TG9ja1dhaXRlciA9IHtcbiAgICAgICAgcmVzb2x2ZTogKGxlYXNlKSA9PiB7XG4gICAgICAgICAgaWYgKHRpbWVyKSBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgICAgIGxvZ2dlci5kZWJ1ZyhcIm1lbW9yeSBsb2NrIGFjcXVpcmVkXCIsIHsgY3JlZGVudGlhbCB9KTtcbiAgICAgICAgICByZXNvbHZlKGxlYXNlKTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVqZWN0OiAoZXJyb3IpID0+IHtcbiAgICAgICAgICBpZiAodGltZXIpIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgICBzdGF0ZS5xdWV1ZS5wdXNoKHdhaXRlcik7XG4gICAgICBpZiAodGltZW91dE1zICE9PSB1bmRlZmluZWQgJiYgTnVtYmVyLmlzRmluaXRlKHRpbWVvdXRNcykgJiYgdGltZW91dE1zID4gMCkge1xuICAgICAgICB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGluZGV4ID0gc3RhdGUucXVldWUuaW5kZXhPZih3YWl0ZXIpO1xuICAgICAgICAgIGlmIChpbmRleCA+PSAwKSBzdGF0ZS5xdWV1ZS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgIHdhaXRlci5yZWplY3QobmV3IEVycm9yKGBUaW1lZCBvdXQgd2FpdGluZyBmb3IgbG9jayAke2tleX1gKSk7XG4gICAgICAgIH0sIHRpbWVvdXRNcyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZWxlYXNlKGxlYXNlOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBrZXkgPSBsZWFzZS5zcGxpdChcIjpcIikuc2xpY2UoMSkuam9pbihcIjpcIik7XG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLiNzdGF0ZXMuZ2V0KGtleSk7XG4gICAgaWYgKCFzdGF0ZSB8fCBzdGF0ZS5sZWFzZSAhPT0gbGVhc2UpIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICBjb25zdCBuZXh0ID0gc3RhdGUucXVldWUuc2hpZnQoKTtcbiAgICBpZiAoIW5leHQpIHtcbiAgICAgIHRoaXMuI3N0YXRlcy5kZWxldGUoa2V5KTtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9XG4gICAgc3RhdGUubGVhc2UgPSB0aGlzLiNuZXh0TGVhc2Uoa2V5KTtcbiAgICBuZXh0LnJlc29sdmUoc3RhdGUubGVhc2UpO1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgfVxuXG4gICNuZXh0TGVhc2Uoa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHsrK3RoaXMuI3NlcXVlbmNlfToke2tleX1gO1xuICB9XG59XG5cbi8qKiBQcm9jZXNzLWxvY2FsIGNyZWRlbnRpYWwgc3RvcmUgd2l0aCBwZXIta2V5IHJlZnJlc2ggbG9ja3MuICovXG5leHBvcnQgY2xhc3MgTWVtb3J5Q3JlZGVudGlhbFN0b3JlIGltcGxlbWVudHMgQ3JlZGVudGlhbFN0b3JlIHtcbiAgcmVhZG9ubHkgI3Rva2VucyA9IG5ldyBNYXA8c3RyaW5nLCBUb2tlbj4oKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGxvY2tzOiBMb2NrQWRhcHRlciA9IG5ldyBNZW1vcnlMb2NrQWRhcHRlcigpKSB7fVxuXG4gIGFzeW5jIGxvYWQoa2V5OiBzdHJpbmcpOiBQcm9taXNlPFRva2VuIHwgdW5kZWZpbmVkPiB7XG4gICAgY29uc3QgdG9rZW4gPSB0aGlzLiN0b2tlbnMuZ2V0KGtleSk7XG4gICAgbG9nZ2VyLmRlYnVnKFwibG9hZGVkIG1lbW9yeSBjcmVkZW50aWFsXCIsIHtcbiAgICAgIGNyZWRlbnRpYWw6IGNyZWRlbnRpYWxJZChrZXkpLFxuICAgICAgdG9rZW46IHRva2VuTWV0YWRhdGEodG9rZW4pLFxuICAgIH0pO1xuICAgIHJldHVybiB0b2tlbiA/IHN0cnVjdHVyZWRDbG9uZSh0b2tlbikgOiB1bmRlZmluZWQ7XG4gIH1cblxuICBhc3luYyBzYXZlKGtleTogc3RyaW5nLCB0b2tlbjogVG9rZW4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLiN0b2tlbnMuc2V0KGtleSwgc3RydWN0dXJlZENsb25lKHRva2VuKSk7XG4gICAgbG9nZ2VyLmRlYnVnKFwic2F2ZWQgbWVtb3J5IGNyZWRlbnRpYWxcIiwge1xuICAgICAgY3JlZGVudGlhbDogY3JlZGVudGlhbElkKGtleSksXG4gICAgICB0b2tlbjogdG9rZW5NZXRhZGF0YSh0b2tlbiksXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyByZW1vdmUoa2V5OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLiN0b2tlbnMuZGVsZXRlKGtleSk7XG4gICAgbG9nZ2VyLmRlYnVnKFwicmVtb3ZlZCBtZW1vcnkgY3JlZGVudGlhbFwiLCB7IGNyZWRlbnRpYWw6IGNyZWRlbnRpYWxJZChrZXkpIH0pO1xuICB9XG5cbiAgYWNxdWlyZUxvY2soa2V5OiBzdHJpbmcsIHRpbWVvdXRNcz86IG51bWJlcik6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMubG9ja3MuYWNxdWlyZShrZXksIHRpbWVvdXRNcyk7XG4gIH1cblxuICByZWxlYXNlTG9jayhsZWFzZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMubG9ja3MucmVsZWFzZShsZWFzZSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { DatabricksProfileSummary } from "@dbx-tools/shared-auth/profile";
|
|
2
|
+
/** Stored OAuth credential with renewal metadata. */
|
|
3
|
+
export interface Token {
|
|
4
|
+
accessToken: string;
|
|
5
|
+
tokenType: string;
|
|
6
|
+
refreshToken?: string;
|
|
7
|
+
expiry?: string;
|
|
8
|
+
scopes: string[];
|
|
9
|
+
}
|
|
10
|
+
/** Resolved profile with secrets retained for provider construction. */
|
|
11
|
+
export interface DatabricksProfile extends DatabricksProfileSummary {
|
|
12
|
+
host: string;
|
|
13
|
+
selectedProfile?: string;
|
|
14
|
+
clientId: string;
|
|
15
|
+
groupId?: string;
|
|
16
|
+
scopes: string[];
|
|
17
|
+
clientSecret?: string;
|
|
18
|
+
accessToken?: string;
|
|
19
|
+
cacheKey: string;
|
|
20
|
+
}
|
|
21
|
+
/** Process-local credential lease adapter. */
|
|
22
|
+
export interface LockAdapter {
|
|
23
|
+
acquire(key: string, timeoutMs?: number): Promise<string>;
|
|
24
|
+
release(lease: string): Promise<void>;
|
|
25
|
+
}
|
|
26
|
+
/** Internal credential lifecycle storage. */
|
|
27
|
+
export interface CredentialStore {
|
|
28
|
+
load(key: string): Promise<Token | undefined>;
|
|
29
|
+
save(key: string, token: Token): Promise<void>;
|
|
30
|
+
remove(key: string): Promise<void>;
|
|
31
|
+
acquireLock(key: string, timeoutMs?: number): Promise<string>;
|
|
32
|
+
releaseLock(lease: string): Promise<void>;
|
|
33
|
+
}
|
|
34
|
+
/** Provider-specific token acquisition. */
|
|
35
|
+
export interface TokenProvider {
|
|
36
|
+
authenticate(timeoutMs: number): Promise<Token>;
|
|
37
|
+
login(timeoutMs: number): Promise<Token>;
|
|
38
|
+
refresh(token: Token): Promise<Token>;
|
|
39
|
+
canAuthenticateSilently(): boolean;
|
|
40
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiX3R5cGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL190eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBEYXRhYnJpY2tzUHJvZmlsZVN1bW1hcnkgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtYXV0aC9wcm9maWxlXCI7XG5cbi8qKiBTdG9yZWQgT0F1dGggY3JlZGVudGlhbCB3aXRoIHJlbmV3YWwgbWV0YWRhdGEuICovXG5leHBvcnQgaW50ZXJmYWNlIFRva2VuIHtcbiAgYWNjZXNzVG9rZW46IHN0cmluZztcbiAgdG9rZW5UeXBlOiBzdHJpbmc7XG4gIHJlZnJlc2hUb2tlbj86IHN0cmluZztcbiAgZXhwaXJ5Pzogc3RyaW5nO1xuICBzY29wZXM6IHN0cmluZ1tdO1xufVxuXG4vKiogUmVzb2x2ZWQgcHJvZmlsZSB3aXRoIHNlY3JldHMgcmV0YWluZWQgZm9yIHByb3ZpZGVyIGNvbnN0cnVjdGlvbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YWJyaWNrc1Byb2ZpbGUgZXh0ZW5kcyBEYXRhYnJpY2tzUHJvZmlsZVN1bW1hcnkge1xuICBob3N0OiBzdHJpbmc7XG4gIHNlbGVjdGVkUHJvZmlsZT86IHN0cmluZztcbiAgY2xpZW50SWQ6IHN0cmluZztcbiAgZ3JvdXBJZD86IHN0cmluZztcbiAgc2NvcGVzOiBzdHJpbmdbXTtcbiAgY2xpZW50U2VjcmV0Pzogc3RyaW5nO1xuICBhY2Nlc3NUb2tlbj86IHN0cmluZztcbiAgY2FjaGVLZXk6IHN0cmluZztcbn1cblxuLyoqIFByb2Nlc3MtbG9jYWwgY3JlZGVudGlhbCBsZWFzZSBhZGFwdGVyLiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2NrQWRhcHRlciB7XG4gIGFjcXVpcmUoa2V5OiBzdHJpbmcsIHRpbWVvdXRNcz86IG51bWJlcik6IFByb21pc2U8c3RyaW5nPjtcbiAgcmVsZWFzZShsZWFzZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPjtcbn1cblxuLyoqIEludGVybmFsIGNyZWRlbnRpYWwgbGlmZWN5Y2xlIHN0b3JhZ2UuICovXG5leHBvcnQgaW50ZXJmYWNlIENyZWRlbnRpYWxTdG9yZSB7XG4gIGxvYWQoa2V5OiBzdHJpbmcpOiBQcm9taXNlPFRva2VuIHwgdW5kZWZpbmVkPjtcbiAgc2F2ZShrZXk6IHN0cmluZywgdG9rZW46IFRva2VuKTogUHJvbWlzZTx2b2lkPjtcbiAgcmVtb3ZlKGtleTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPjtcbiAgYWNxdWlyZUxvY2soa2V5OiBzdHJpbmcsIHRpbWVvdXRNcz86IG51bWJlcik6IFByb21pc2U8c3RyaW5nPjtcbiAgcmVsZWFzZUxvY2sobGVhc2U6IHN0cmluZyk6IFByb21pc2U8dm9pZD47XG59XG5cbi8qKiBQcm92aWRlci1zcGVjaWZpYyB0b2tlbiBhY3F1aXNpdGlvbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVG9rZW5Qcm92aWRlciB7XG4gIGF1dGhlbnRpY2F0ZSh0aW1lb3V0TXM6IG51bWJlcik6IFByb21pc2U8VG9rZW4+O1xuICBsb2dpbih0aW1lb3V0TXM6IG51bWJlcik6IFByb21pc2U8VG9rZW4+O1xuICByZWZyZXNoKHRva2VuOiBUb2tlbik6IFByb21pc2U8VG9rZW4+O1xuICBjYW5BdXRoZW50aWNhdGVTaWxlbnRseSgpOiBib29sZWFuO1xufVxuIl19
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { DatabricksAuthClientInfo } from "@dbx-tools/shared-auth/client";
|
|
2
|
+
import { type DatabricksAuthOptions } from "./config.ts";
|
|
3
|
+
/** Public credential result with no refresh token. */
|
|
4
|
+
export interface AccessToken {
|
|
5
|
+
accessToken: string;
|
|
6
|
+
tokenType: string;
|
|
7
|
+
expiry?: string;
|
|
8
|
+
scopes: string[];
|
|
9
|
+
}
|
|
10
|
+
/** Token acquisition controls. */
|
|
11
|
+
export interface TokenOptions {
|
|
12
|
+
/** Permit interactive CLI login when required. */
|
|
13
|
+
login?: boolean;
|
|
14
|
+
/** Bypass a reusable cached token and refresh it. */
|
|
15
|
+
refresh?: boolean;
|
|
16
|
+
}
|
|
17
|
+
/** WorkspaceClient-shaped Databricks authentication facade. */
|
|
18
|
+
export interface AuthClient extends DatabricksAuthClientInfo {
|
|
19
|
+
token(options?: TokenOptions): Promise<AccessToken>;
|
|
20
|
+
headers(options?: TokenOptions): Promise<Record<string, string>>;
|
|
21
|
+
logout(): Promise<void>;
|
|
22
|
+
}
|
|
23
|
+
/** Injectable host capabilities for Databricks authentication. */
|
|
24
|
+
export interface DatabricksAuthDependencies {
|
|
25
|
+
environment?: Readonly<Record<string, string | undefined>>;
|
|
26
|
+
fetch?: typeof globalThis.fetch;
|
|
27
|
+
resolveCli?: () => Promise<string | undefined>;
|
|
28
|
+
}
|
|
29
|
+
/** Create a Databricks authentication client. */
|
|
30
|
+
export declare function createAuthClient(options?: DatabricksAuthOptions, dependencies?: DatabricksAuthDependencies): Promise<AuthClient>;
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
import { AuthType, TargetKind } from "@dbx-tools/shared-auth/config";
|
|
2
|
+
import { DatabricksCliProvider, resolveDatabricksCli } from "./_databricks-cli.js";
|
|
3
|
+
import { AuthError } from "./_errors.js";
|
|
4
|
+
import { publicToken, TokenLifecycle } from "./_lifecycle.js";
|
|
5
|
+
import { authLogger, tokenMetadata } from "./_logging.js";
|
|
6
|
+
import { DatabricksPersonalAccessTokenProvider } from "./_personal-access-token.js";
|
|
7
|
+
import { machineScopes, resolveConfigFile, resolveDatabricksProfile } from "./_profile-config.js";
|
|
8
|
+
import { DatabricksServicePrincipalProvider } from "./_service-principal.js";
|
|
9
|
+
import { MemoryCredentialStore } from "./_storage.js";
|
|
10
|
+
import { AUTH_DEFAULTS, DEFAULT_ACCESS_TOKEN_HEADER, WORKSPACE_ID_HEADER, } from "./config.js";
|
|
11
|
+
const logger = authLogger("databricks");
|
|
12
|
+
/** Default Databricks auth facade over the provider-neutral lifecycle. */
|
|
13
|
+
class DefaultAuthClient {
|
|
14
|
+
profileValue;
|
|
15
|
+
client;
|
|
16
|
+
requestToken;
|
|
17
|
+
profile;
|
|
18
|
+
host;
|
|
19
|
+
accountId;
|
|
20
|
+
workspaceId;
|
|
21
|
+
target;
|
|
22
|
+
authType;
|
|
23
|
+
principal;
|
|
24
|
+
constructor(profileValue, client, requestToken) {
|
|
25
|
+
this.profileValue = profileValue;
|
|
26
|
+
this.client = client;
|
|
27
|
+
this.requestToken = requestToken;
|
|
28
|
+
this.profile = profileValue.selectedProfile;
|
|
29
|
+
this.host = profileValue.host;
|
|
30
|
+
this.accountId = profileValue.accountId;
|
|
31
|
+
this.workspaceId = profileValue.workspaceId;
|
|
32
|
+
this.target = profileValue.target;
|
|
33
|
+
this.authType = profileValue.authType;
|
|
34
|
+
this.principal = profileValue.principal;
|
|
35
|
+
}
|
|
36
|
+
token(options = {}) {
|
|
37
|
+
logger.debug("Databricks token requested", {
|
|
38
|
+
...this.context(),
|
|
39
|
+
login: options.login ?? "auto",
|
|
40
|
+
refresh: options.refresh ?? false,
|
|
41
|
+
source: this.requestToken ? "request" : "lifecycle",
|
|
42
|
+
});
|
|
43
|
+
if (this.requestToken)
|
|
44
|
+
return Promise.resolve(publicToken(this.requestToken));
|
|
45
|
+
return options.refresh
|
|
46
|
+
? this.requiredClient().forceRefresh(options.login ?? true)
|
|
47
|
+
: this.requiredClient().tokenWithLogin(options.login);
|
|
48
|
+
}
|
|
49
|
+
async headers(options = {}) {
|
|
50
|
+
const token = await this.token(options);
|
|
51
|
+
const headers = {
|
|
52
|
+
[DEFAULT_ACCESS_TOKEN_HEADER]: `${token.tokenType} ${token.accessToken}`,
|
|
53
|
+
...(this.profileValue.workspaceId
|
|
54
|
+
? { [WORKSPACE_ID_HEADER]: this.profileValue.workspaceId }
|
|
55
|
+
: {}),
|
|
56
|
+
};
|
|
57
|
+
logger.debug("generated Databricks authentication headers", {
|
|
58
|
+
...this.context(),
|
|
59
|
+
headerNames: Object.keys(headers),
|
|
60
|
+
token: tokenMetadata(token),
|
|
61
|
+
});
|
|
62
|
+
return headers;
|
|
63
|
+
}
|
|
64
|
+
logout() {
|
|
65
|
+
logger.debug("Databricks logout requested", this.context());
|
|
66
|
+
return this.client?.logout() ?? Promise.resolve();
|
|
67
|
+
}
|
|
68
|
+
requiredClient() {
|
|
69
|
+
if (!this.client)
|
|
70
|
+
throw new AuthError("oauth", "Authentication lifecycle is not available");
|
|
71
|
+
return this.client;
|
|
72
|
+
}
|
|
73
|
+
context() {
|
|
74
|
+
return {
|
|
75
|
+
profile: this.profileValue.name,
|
|
76
|
+
host: this.profileValue.host,
|
|
77
|
+
authType: this.profileValue.authType,
|
|
78
|
+
hasWorkspaceId: Boolean(this.profileValue.workspaceId),
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
/** Create a Databricks authentication client. */
|
|
83
|
+
export async function createAuthClient(options = {}, dependencies = {}) {
|
|
84
|
+
return createResolvedAuth(options, dependencies);
|
|
85
|
+
}
|
|
86
|
+
/** Resolve a Databricks profile and create its token lifecycle. */
|
|
87
|
+
async function createResolvedAuth(options, dependencies) {
|
|
88
|
+
const environment = dependencies.environment ?? process.env;
|
|
89
|
+
const profile = resolveDatabricksProfile(options, environment);
|
|
90
|
+
logger.debug("creating Databricks auth", {
|
|
91
|
+
profile: profile.name,
|
|
92
|
+
host: profile.host,
|
|
93
|
+
authType: profile.authType,
|
|
94
|
+
});
|
|
95
|
+
if (profile.authType === AuthType.AppOnBehalfOf) {
|
|
96
|
+
logger.debug("created request-scoped App OBO authentication", {
|
|
97
|
+
profile: profile.name,
|
|
98
|
+
host: profile.host,
|
|
99
|
+
hasWorkspaceId: Boolean(profile.workspaceId),
|
|
100
|
+
});
|
|
101
|
+
return new DefaultAuthClient(profile, undefined, {
|
|
102
|
+
accessToken: profile.accessToken,
|
|
103
|
+
tokenType: "Bearer",
|
|
104
|
+
scopes: [...profile.scopes],
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
const provider = await providerFor(profile, options, dependencies);
|
|
108
|
+
const store = new MemoryCredentialStore();
|
|
109
|
+
const client = new TokenLifecycle(profile.cacheKey, provider, store, {
|
|
110
|
+
...AUTH_DEFAULTS,
|
|
111
|
+
...options.auth,
|
|
112
|
+
});
|
|
113
|
+
const auth = new DefaultAuthClient(profile, client);
|
|
114
|
+
logger.debug("created authentication lifecycle", {
|
|
115
|
+
profile: profile.name,
|
|
116
|
+
host: profile.host,
|
|
117
|
+
authType: profile.authType,
|
|
118
|
+
});
|
|
119
|
+
return auth;
|
|
120
|
+
}
|
|
121
|
+
async function providerFor(profile, options, dependencies) {
|
|
122
|
+
const environment = dependencies.environment ?? process.env;
|
|
123
|
+
switch (profile.authType) {
|
|
124
|
+
case AuthType.DatabricksCli: {
|
|
125
|
+
logger.debug("selected Databricks CLI provider", { profile: profile.name });
|
|
126
|
+
return new DatabricksCliProvider(profile.name, () => dependencies.resolveCli ? dependencies.resolveCli() : resolveDatabricksCli(environment), cliEnvironment(profile, resolveConfigFile(options.configFile, environment)));
|
|
127
|
+
}
|
|
128
|
+
case AuthType.PersonalAccessToken:
|
|
129
|
+
logger.debug("selected personal access token provider", { profile: profile.name });
|
|
130
|
+
return new DatabricksPersonalAccessTokenProvider(profile.accessToken);
|
|
131
|
+
case AuthType.OAuthM2M:
|
|
132
|
+
case AuthType.AppServicePrincipal: {
|
|
133
|
+
logger.debug("selected service-principal provider", {
|
|
134
|
+
profile: profile.name,
|
|
135
|
+
authType: profile.authType,
|
|
136
|
+
target: profile.target,
|
|
137
|
+
});
|
|
138
|
+
const endpoints = await resolveOAuthEndpoints(profile, dependencies.fetch);
|
|
139
|
+
return new DatabricksServicePrincipalProvider({
|
|
140
|
+
tokenEndpoint: endpoints.tokenEndpoint,
|
|
141
|
+
clientId: profile.clientId,
|
|
142
|
+
clientSecret: profile.clientSecret,
|
|
143
|
+
scopes: machineScopes(profile.scopes),
|
|
144
|
+
...(profile.groupId ? { groupId: profile.groupId } : {}),
|
|
145
|
+
allowInsecureRequests: isLoopbackHttp(profile.host),
|
|
146
|
+
fetch: dependencies.fetch,
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
case AuthType.AppOnBehalfOf:
|
|
150
|
+
throw new AuthError("config", "App OBO tokens do not use a token provider");
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
async function resolveOAuthEndpoints(profile, fetcher = globalThis.fetch) {
|
|
154
|
+
const host = profile.host.replace(/\/$/, "");
|
|
155
|
+
if (profile.target === TargetKind.Account) {
|
|
156
|
+
if (!profile.accountId)
|
|
157
|
+
throw new AuthError("config", "Account target requires account_id");
|
|
158
|
+
const endpoints = {
|
|
159
|
+
tokenEndpoint: `${host}/oidc/accounts/${profile.accountId}/v1/token`,
|
|
160
|
+
};
|
|
161
|
+
logger.debug("resolved account OAuth endpoint", {
|
|
162
|
+
profile: profile.name,
|
|
163
|
+
tokenOrigin: new URL(endpoints.tokenEndpoint).origin,
|
|
164
|
+
});
|
|
165
|
+
return endpoints;
|
|
166
|
+
}
|
|
167
|
+
const discovery = profile.target === TargetKind.Unified
|
|
168
|
+
? `${host}/oidc/accounts/${requiredAccountId(profile)}/.well-known/oauth-authorization-server`
|
|
169
|
+
: `${host}/oidc/.well-known/oauth-authorization-server`;
|
|
170
|
+
logger.debug("requesting OAuth discovery", {
|
|
171
|
+
profile: profile.name,
|
|
172
|
+
target: profile.target,
|
|
173
|
+
discovery,
|
|
174
|
+
});
|
|
175
|
+
const response = await fetcher(discovery, { redirect: "manual" });
|
|
176
|
+
logger.debug("received OAuth discovery response", {
|
|
177
|
+
profile: profile.name,
|
|
178
|
+
status: response.status,
|
|
179
|
+
});
|
|
180
|
+
if (response.status === 404) {
|
|
181
|
+
throw new AuthError("oauth", `OAuth is not supported at ${discovery}`);
|
|
182
|
+
}
|
|
183
|
+
if (!response.ok) {
|
|
184
|
+
throw new AuthError("oauth", `OAuth discovery returned HTTP ${response.status}`);
|
|
185
|
+
}
|
|
186
|
+
const value = (await response.json());
|
|
187
|
+
const tokenEndpoint = stringValue(value.token_endpoint);
|
|
188
|
+
if (!tokenEndpoint)
|
|
189
|
+
throw new AuthError("oauth", "OAuth discovery response is incomplete");
|
|
190
|
+
logger.debug("resolved OAuth token endpoint", {
|
|
191
|
+
profile: profile.name,
|
|
192
|
+
tokenOrigin: new URL(tokenEndpoint).origin,
|
|
193
|
+
});
|
|
194
|
+
return { tokenEndpoint };
|
|
195
|
+
}
|
|
196
|
+
function requiredAccountId(profile) {
|
|
197
|
+
if (!profile.accountId)
|
|
198
|
+
throw new AuthError("config", "Unified target requires account_id");
|
|
199
|
+
return profile.accountId;
|
|
200
|
+
}
|
|
201
|
+
function isLoopbackHttp(host) {
|
|
202
|
+
const url = new URL(host);
|
|
203
|
+
return url.protocol === "http:" && ["127.0.0.1", "localhost"].includes(url.hostname);
|
|
204
|
+
}
|
|
205
|
+
function cliEnvironment(profile, configFile) {
|
|
206
|
+
return {
|
|
207
|
+
DATABRICKS_CONFIG_FILE: configFile,
|
|
208
|
+
DATABRICKS_CONFIG_PROFILE: profile.name,
|
|
209
|
+
DATABRICKS_HOST: profile.host,
|
|
210
|
+
...(profile.accountId ? { DATABRICKS_ACCOUNT_ID: profile.accountId } : {}),
|
|
211
|
+
...(profile.workspaceId ? { DATABRICKS_WORKSPACE_ID: profile.workspaceId } : {}),
|
|
212
|
+
...(profile.authType === AuthType.PersonalAccessToken
|
|
213
|
+
? {
|
|
214
|
+
DATABRICKS_AUTH_TYPE: "pat",
|
|
215
|
+
DATABRICKS_TOKEN: profile.accessToken,
|
|
216
|
+
}
|
|
217
|
+
: {}),
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
function stringValue(value) {
|
|
221
|
+
return typeof value === "string" && value.trim() ? value : undefined;
|
|
222
|
+
}
|
|
223
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25GLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekMsT0FBTyxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRCxPQUFPLEVBQUUscUNBQXFDLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNwRixPQUFPLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixFQUFFLHdCQUF3QixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEcsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDN0UsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXRELE9BQU8sRUFDTCxhQUFhLEVBRWIsMkJBQTJCLEVBQzNCLG1CQUFtQixHQUNwQixNQUFNLGFBQWEsQ0FBQztBQUVyQixNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUM7QUFnQ3hDLDBFQUEwRTtBQUMxRSxNQUFNLGlCQUFpQjtJQVVGO0lBQ0E7SUFDQTtJQVhWLE9BQU8sQ0FBVTtJQUNqQixJQUFJLENBQVM7SUFDYixTQUFTLENBQVU7SUFDbkIsV0FBVyxDQUFVO0lBQ3JCLE1BQU0sQ0FBYTtJQUNuQixRQUFRLENBQVc7SUFDbkIsU0FBUyxDQUFTO0lBRTNCLFlBQ21CLFlBQStCLEVBQy9CLE1BQXVCLEVBQ3ZCLFlBQW9CO1FBRnBCLGlCQUFZLEdBQVosWUFBWSxDQUFtQjtR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RUFBRSxLQUFLO2dCQUMzQixnQkFBZ0IsRUFBRSxPQUFPLENBQUMsV0FBWTthQUN2QztZQUNILENBQUMsQ0FBQyxFQUFFLENBQUM7S0FDUixDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsV0FBVyxDQUFDLEtBQWM7SUFDakMsT0FBTyxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUN2RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBEYXRhYnJpY2tzQXV0aENsaWVudEluZm8gfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtYXV0aC9jbGllbnRcIjtcbmltcG9ydCB7IEF1dGhUeXBlLCBUYXJnZXRLaW5kIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWF1dGgvY29uZmlnXCI7XG5pbXBvcnQgeyBEYXRhYnJpY2tzQ2xpUHJvdmlkZXIsIHJlc29sdmVEYXRhYnJpY2tzQ2xpIH0gZnJvbSBcIi4vX2RhdGFicmlja3MtY2xpLnRzXCI7XG5pbXBvcnQgeyBBdXRoRXJyb3IgfSBmcm9tIFwiLi9fZXJyb3JzLnRzXCI7XG5pbXBvcnQgeyBwdWJsaWNUb2tlbiwgVG9rZW5MaWZlY3ljbGUgfSBmcm9tIFwiLi9fbGlmZWN5Y2xlLnRzXCI7XG5pbXBvcnQgeyBhdXRoTG9nZ2VyLCB0b2tlbk1ldGFkYXRhIH0gZnJvbSBcIi4vX2xvZ2dpbmcudHNcIjtcbmltcG9ydCB7IERhdGFicmlja3NQZXJzb25hbEFjY2Vzc1Rva2VuUHJvdmlkZXIgfSBmcm9tIFwiLi9fcGVyc29uYWwtYWNjZXNzLXRva2VuLnRzXCI7XG5pbXBvcnQgeyBtYWNoaW5lU2NvcGVzLCByZXNvbHZlQ29uZmlnRmlsZSwgcmVzb2x2ZURhdGFicmlja3NQcm9maWxlIH0gZnJvbSBcIi4vX3Byb2ZpbGUtY29uZmlnLnRzXCI7XG5pbXBvcnQgeyBEYXRhYnJpY2tzU2VydmljZVByaW5jaXBhbFByb3ZpZGVyIH0gZnJvbSBcIi4vX3NlcnZpY2UtcHJpbmNpcGFsLnRzXCI7XG5pbXBvcnQgeyBNZW1vcnlDcmVkZW50aWFsU3RvcmUgfSBmcm9tIFwiLi9fc3RvcmFnZS50c1wiO1xuaW1wb3J0IHsgdHlwZSBEYXRhYnJpY2tzUHJvZmlsZSwgdHlwZSBUb2tlbiwgdHlwZSBUb2tlblByb3ZpZGVyIH0gZnJvbSBcIi4vX3R5cGVzLnRzXCI7XG5pbXBvcnQge1xuICBBVVRIX0RFRkFVTFRTLFxuICB0eXBlIERhdGFicmlja3NBdXRoT3B0aW9ucyxcbiAgREVGQVVMVF9BQ0NFU1NfVE9LRU5fSEVBREVSLFxuICBXT1JLU1BBQ0VfSURfSEVBREVSLFxufSBmcm9tIFwiLi9jb25maWcudHNcIjtcblxuY29uc3QgbG9nZ2VyID0gYXV0aExvZ2dlcihcImRhdGFicmlja3NcIik7XG5cbi8qKiBQdWJsaWMgY3JlZGVudGlhbCByZXN1bHQgd2l0aCBubyByZWZyZXNoIHRva2VuLiAqL1xuZXhwb3J0IGludGVyZmFjZSBBY2Nlc3NUb2tlbiB7XG4gIGFjY2Vzc1Rva2VuOiBzdHJpbmc7XG4gIHRva2VuVHlwZTogc3RyaW5nO1xuICBleHBpcnk/OiBzdHJpbmc7XG4gIHNjb3Blczogc3RyaW5nW107XG59XG5cbi8qKiBUb2tlbiBhY3F1aXNpdGlvbiBjb250cm9scy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVG9rZW5PcHRpb25zIHtcbiAgLyoqIFBlcm1pdCBpbnRlcmFjdGl2ZSBDTEkgbG9naW4gd2hlbiByZXF1aXJlZC4gKi9cbiAgbG9naW4/OiBib29sZWFuO1xuICAvKiogQnlwYXNzIGEgcmV1c2FibGUgY2FjaGVkIHRva2VuIGFuZCByZWZyZXNoIGl0LiAqL1xuICByZWZyZXNoPzogYm9vbGVhbjtcbn1cblxuLyoqIFdvcmtzcGFjZUNsaWVudC1zaGFwZWQgRGF0YWJyaWNrcyBhdXRoZW50aWNhdGlvbiBmYWNhZGUuICovXG5leHBvcnQgaW50ZXJmYWNlIEF1dGhDbGllbnQgZXh0ZW5kcyBEYXRhYnJpY2tzQXV0aENsaWVudEluZm8ge1xuICB0b2tlbihvcHRpb25zPzogVG9rZW5PcHRpb25zKTogUHJvbWlzZTxBY2Nlc3NUb2tlbj47XG4gIGhlYWRlcnMob3B0aW9ucz86IFRva2VuT3B0aW9ucyk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgc3RyaW5nPj47XG4gIGxvZ291dCgpOiBQcm9taXNlPHZvaWQ+O1xufVxuXG4vKiogSW5qZWN0YWJsZSBob3N0IGNhcGFiaWxpdGllcyBmb3IgRGF0YWJyaWNrcyBhdXRoZW50aWNhdGlvbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YWJyaWNrc0F1dGhEZXBlbmRlbmNpZXMge1xuICBlbnZpcm9ubWVudD86IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4+O1xuICBmZXRjaD86IHR5cGVvZiBnbG9iYWxUaGlzLmZldGNoO1xuICByZXNvbHZlQ2xpPzogKCkgPT4gUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+O1xufVxuXG4vKiogRGVmYXVsdCBEYXRhYnJpY2tzIGF1dGggZmFjYWRlIG92ZXIgdGhlIHByb3ZpZGVyLW5ldXRyYWwgbGlmZWN5Y2xlLiAqL1xuY2xhc3MgRGVmYXVsdEF1dGhDbGllbnQgaW1wbGVtZW50cyBBdXRoQ2xpZW50IHtcbiAgcmVhZG9ubHkgcHJvZmlsZT86IHN0cmluZztcbiAgcmVhZG9ubHkgaG9zdDogc3RyaW5nO1xuICByZWFkb25seSBhY2NvdW50SWQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHdvcmtzcGFjZUlkPzogc3RyaW5nO1xuICByZWFkb25seSB0YXJnZXQ6IFRhcmdldEtpbmQ7XG4gIHJlYWRvbmx5IGF1dGhUeXBlOiBBdXRoVHlwZTtcbiAgcmVhZG9ubHkgcHJpbmNpcGFsOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBwcm9maWxlVmFsdWU6IERhdGFicmlja3NQcm9maWxlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2xpZW50PzogVG9rZW5MaWZlY3ljbGUsXG4gICAgcHJpdmF0ZSByZWFkb25seSByZXF1ZXN0VG9rZW4/OiBUb2tlbixcbiAgKSB7XG4gICAgdGhpcy5wcm9maWxlID0gcHJvZmlsZVZhbHVlLnNlbGVjdGVkUHJvZmlsZTtcbiAgICB0aGlzLmhvc3QgPSBwcm9maWxlVmFsdWUuaG9zdDtcbiAgICB0aGlzLmFjY291bnRJZCA9IHByb2ZpbGVWYWx1ZS5hY2NvdW50SWQ7XG4gICAgdGhpcy53b3Jrc3BhY2VJZCA9IHByb2ZpbGVWYWx1ZS53b3Jrc3BhY2VJZDtcbiAgICB0aGlzLnRhcmdldCA9IHByb2ZpbGVWYWx1ZS50YXJnZXQ7XG4gICAgdGhpcy5hdXRoVHlwZSA9IHByb2ZpbGVWYWx1ZS5hdXRoVHlwZTtcbiAgICB0aGlzLnByaW5jaXBhbCA9IHByb2ZpbGVWYWx1ZS5wcmluY2lwYWw7XG4gIH1cblxuICB0b2tlbihvcHRpb25zOiBUb2tlbk9wdGlvbnMgPSB7fSkge1xuICAgIGxvZ2dlci5kZWJ1ZyhcIkRhdGFicmlja3MgdG9rZW4gcmVxdWVzdGVkXCIsIHtcbiAgICAgIC4uLnRoaXMuY29udGV4dCgpLFxuICAgICAgbG9naW46IG9wdGlvbnMubG9naW4gPz8gXCJhdXRvXCIsXG4gICAgICByZWZyZXNoOiBvcHRpb25zLnJlZnJlc2ggPz8gZmFsc2UsXG4gICAgICBzb3VyY2U6IHRoaXMucmVxdWVzdFRva2VuID8gXCJyZXF1ZXN0XCIgOiBcImxpZmVjeWNsZVwiLFxuICAgIH0pO1xuICAgIGlmICh0aGlzLnJlcXVlc3RUb2tlbikgcmV0dXJuIFByb21pc2UucmVzb2x2ZShwdWJsaWNUb2tlbih0aGlzLnJlcXVlc3RUb2tlbikpO1xuICAgIHJldHVybiBvcHRpb25zLnJlZnJlc2hcbiAgICAgID8gdGhpcy5yZXF1aXJlZENsaWVudCgpLmZvcmNlUmVmcmVzaChvcHRpb25zLmxvZ2luID8/IHRydWUpXG4gICAgICA6IHRoaXMucmVxdWlyZWRDbGllbnQoKS50b2tlbldpdGhMb2dpbihvcHRpb25zLmxvZ2luKTtcbiAgfVxuXG4gIGFzeW5jIGhlYWRlcnMob3B0aW9uczogVG9rZW5PcHRpb25zID0ge30pOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+IHtcbiAgICBjb25zdCB0b2tlbiA9IGF3YWl0IHRoaXMudG9rZW4ob3B0aW9ucyk7XG4gICAgY29uc3QgaGVhZGVycyA9IHtcbiAgICAgIFtERUZBVUxUX0FDQ0VTU19UT0tFTl9IRUFERVJdOiBgJHt0b2tlbi50b2tlblR5cGV9ICR7dG9rZW4uYWNjZXNzVG9rZW59YCxcbiAgICAgIC4uLih0aGlzLnByb2ZpbGVWYWx1ZS53b3Jrc3BhY2VJZFxuICAgICAgICA/IHsgW1dPUktTUEFDRV9JRF9IRUFERVJdOiB0aGlzLnByb2ZpbGVWYWx1ZS53b3Jrc3BhY2VJZCB9XG4gICAgICAgIDoge30pLFxuICAgIH07XG4gICAgbG9nZ2VyLmRlYnVnKFwiZ2VuZXJhdGVkIERhdGFicmlja3MgYXV0aGVudGljYXRpb24gaGVhZGVyc1wiLCB7XG4gICAgICAuLi50aGlzLmNvbnRleHQoKSxcbiAgICAgIGhlYWRlck5hbWVzOiBPYmplY3Qua2V5cyhoZWFkZXJzKSxcbiAgICAgIHRva2VuOiB0b2tlbk1ldGFkYXRhKHRva2VuKSxcbiAgICB9KTtcbiAgICByZXR1cm4gaGVhZGVycztcbiAgfVxuXG4gIGxvZ291dCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsb2dnZXIuZGVidWcoXCJEYXRhYnJpY2tzIGxvZ291dCByZXF1ZXN0ZWRcIiwgdGhpcy5jb250ZXh0KCkpO1xuICAgIHJldHVybiB0aGlzLmNsaWVudD8ubG9nb3V0KCkgPz8gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH1cblxuICBwcml2YXRlIHJlcXVpcmVkQ2xpZW50KCk6IFRva2VuTGlmZWN5Y2xlIHtcbiAgICBpZiAoIXRoaXMuY2xpZW50KSB0aHJvdyBuZXcgQXV0aEVycm9yKFwib2F1dGhcIiwgXCJBdXRoZW50aWNhdGlvbiBsaWZlY3ljbGUgaXMgbm90IGF2YWlsYWJsZVwiKTtcbiAgICByZXR1cm4gdGhpcy5jbGllbnQ7XG4gIH1cblxuICBwcml2YXRlIGNvbnRleHQoKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAgIHJldHVybiB7XG4gICAgICBwcm9maWxlOiB0aGlzLnByb2ZpbGVWYWx1ZS5uYW1lLFxuICAgICAgaG9zdDogdGhpcy5wcm9maWxlVmFsdWUuaG9zdCxcbiAgICAgIGF1dGhUeXBlOiB0aGlzLnByb2ZpbGVWYWx1ZS5hdXRoVHlwZSxcbiAgICAgIGhhc1dvcmtzcGFjZUlkOiBCb29sZWFuKHRoaXMucHJvZmlsZVZhbHVlLndvcmtzcGFjZUlkKSxcbiAgICB9O1xuICB9XG59XG5cbi8qKiBDcmVhdGUgYSBEYXRhYnJpY2tzIGF1dGhlbnRpY2F0aW9uIGNsaWVudC4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVBdXRoQ2xpZW50KFxuICBvcHRpb25zOiBEYXRhYnJpY2tzQXV0aE9wdGlvbnMgPSB7fSxcbiAgZGVwZW5kZW5jaWVzOiBEYXRhYnJpY2tzQXV0aERlcGVuZGVuY2llcyA9IHt9LFxuKTogUHJvbWlzZTxBdXRoQ2xpZW50PiB7XG4gIHJldHVybiBjcmVhdGVSZXNvbHZlZEF1dGgob3B0aW9ucywgZGVwZW5kZW5jaWVzKTtcbn1cblxuLyoqIFJlc29sdmUgYSBEYXRhYnJpY2tzIHByb2ZpbGUgYW5kIGNyZWF0ZSBpdHMgdG9rZW4gbGlmZWN5Y2xlLiAqL1xuYXN5bmMgZnVuY3Rpb24gY3JlYXRlUmVzb2x2ZWRBdXRoKFxuICBvcHRpb25zOiBEYXRhYnJpY2tzQXV0aE9wdGlvbnMsXG4gIGRlcGVuZGVuY2llczogRGF0YWJyaWNrc0F1dGhEZXBlbmRlbmNpZXMsXG4pOiBQcm9taXNlPERlZmF1bHRBdXRoQ2xpZW50PiB7XG4gIGNvbnN0IGVudmlyb25tZW50ID0gZGVwZW5kZW5jaWVzLmVudmlyb25tZW50ID8/IHByb2Nlc3MuZW52O1xuICBjb25zdCBwcm9maWxlID0gcmVzb2x2ZURhdGFicmlja3NQcm9maWxlKG9wdGlvbnMsIGVudmlyb25tZW50KTtcbiAgbG9nZ2VyLmRlYnVnKFwiY3JlYXRpbmcgRGF0YWJyaWNrcyBhdXRoXCIsIHtcbiAgICBwcm9maWxlOiBwcm9maWxlLm5hbWUsXG4gICAgaG9zdDogcHJvZmlsZS5ob3N0LFxuICAgIGF1dGhUeXBlOiBwcm9maWxlLmF1dGhUeXBlLFxuICB9KTtcbiAgaWYgKHByb2ZpbGUuYXV0aFR5cGUgPT09IEF1dGhUeXBlLkFwcE9uQmVoYWxmT2YpIHtcbiAgICBsb2dnZXIuZGVidWcoXCJjcmVhdGVkIHJlcXVlc3Qtc2NvcGVkIEFwcCBPQk8gYXV0aGVudGljYXRpb25cIiwge1xuICAgICAgcHJvZmlsZTogcHJvZmlsZS5uYW1lLFxuICAgICAgaG9zdDogcHJvZmlsZS5ob3N0LFxuICAgICAgaGFzV29ya3NwYWNlSWQ6IEJvb2xlYW4ocHJvZmlsZS53b3Jrc3BhY2VJZCksXG4gICAgfSk7XG4gICAgcmV0dXJuIG5ldyBEZWZhdWx0QXV0aENsaWVudChwcm9maWxlLCB1bmRlZmluZWQsIHtcbiAgICAgIGFjY2Vzc1Rva2VuOiBwcm9maWxlLmFjY2Vzc1Rva2VuISxcbiAgICAgIHRva2VuVHlwZTogXCJCZWFyZXJcIixcbiAgICAgIHNjb3BlczogWy4uLnByb2ZpbGUuc2NvcGVzXSxcbiAgICB9KTtcbiAgfVxuICBjb25zdCBwcm92aWRlciA9IGF3YWl0IHByb3ZpZGVyRm9yKHByb2ZpbGUsIG9wdGlvbnMsIGRlcGVuZGVuY2llcyk7XG4gIGNvbnN0IHN0b3JlID0gbmV3IE1lbW9yeUNyZWRlbnRpYWxTdG9yZSgpO1xuICBjb25zdCBjbGllbnQgPSBuZXcgVG9rZW5MaWZlY3ljbGUocHJvZmlsZS5jYWNoZUtleSwgcHJvdmlkZXIsIHN0b3JlLCB7XG4gICAgLi4uQVVUSF9ERUZBVUxUUyxcbiAgICAuLi5vcHRpb25zLmF1dGgsXG4gIH0pO1xuICBjb25zdCBhdXRoID0gbmV3IERlZmF1bHRBdXRoQ2xpZW50KHByb2ZpbGUsIGNsaWVudCk7XG4gIGxvZ2dlci5kZWJ1ZyhcImNyZWF0ZWQgYXV0aGVudGljYXRpb24gbGlmZWN5Y2xlXCIsIHtcbiAgICBwcm9maWxlOiBwcm9maWxlLm5hbWUsXG4gICAgaG9zdDogcHJvZmlsZS5ob3N0LFxuICAgIGF1dGhUeXBlOiBwcm9maWxlLmF1dGhUeXBlLFxuICB9KTtcbiAgcmV0dXJuIGF1dGg7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHByb3ZpZGVyRm9yKFxuICBwcm9maWxlOiBEYXRhYnJpY2tzUHJvZmlsZSxcbiAgb3B0aW9uczogRGF0YWJyaWNrc0F1dGhPcHRpb25zLFxuICBkZXBlbmRlbmNpZXM6IERhdGFicmlja3NBdXRoRGVwZW5kZW5jaWVzLFxuKTogUHJvbWlzZTxUb2tlblByb3ZpZGVyPiB7XG4gIGNvbnN0IGVudmlyb25tZW50ID0gZGVwZW5kZW5jaWVzLmVudmlyb25tZW50ID8/IHByb2Nlc3MuZW52O1xuICBzd2l0Y2ggKHByb2ZpbGUuYXV0aFR5cGUpIHtcbiAgICBjYXNlIEF1dGhUeXBlLkRhdGFicmlja3NDbGk6IHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhcInNlbGVjdGVkIERhdGFicmlja3MgQ0xJIHByb3ZpZGVyXCIsIHsgcHJvZmlsZTogcHJvZmlsZS5uYW1lIH0pO1xuICAgICAgcmV0dXJuIG5ldyBEYXRhYnJpY2tzQ2xpUHJvdmlkZXIoXG4gICAgICAgIHByb2ZpbGUubmFtZSxcbiAgICAgICAgKCkgPT5cbiAgICAgICAgICBkZXBlbmRlbmNpZXMucmVzb2x2ZUNsaSA/IGRlcGVuZGVuY2llcy5yZXNvbHZlQ2xpKCkgOiByZXNvbHZlRGF0YWJyaWNrc0NsaShlbnZpcm9ubWVudCksXG4gICAgICAgIGNsaUVudmlyb25tZW50KHByb2ZpbGUsIHJlc29sdmVDb25maWdGaWxlKG9wdGlvbnMuY29uZmlnRmlsZSwgZW52aXJvbm1lbnQpKSxcbiAgICAgICk7XG4gICAgfVxuICAgIGNhc2UgQXV0aFR5cGUuUGVyc29uYWxBY2Nlc3NUb2tlbjpcbiAgICAgIGxvZ2dlci5kZWJ1ZyhcInNlbGVjdGVkIHBlcnNvbmFsIGFjY2VzcyB0b2tlbiBwcm92aWRlclwiLCB7IHByb2ZpbGU6IHByb2ZpbGUubmFtZSB9KTtcbiAgICAgIHJldHVybiBuZXcgRGF0YWJyaWNrc1BlcnNvbmFsQWNjZXNzVG9rZW5Qcm92aWRlcihwcm9maWxlLmFjY2Vzc1Rva2VuISk7XG4gICAgY2FzZSBBdXRoVHlwZS5PQXV0aE0yTTpcbiAgICBjYXNlIEF1dGhUeXBlLkFwcFNlcnZpY2VQcmluY2lwYWw6IHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhcInNlbGVjdGVkIHNlcnZpY2UtcHJpbmNpcGFsIHByb3ZpZGVyXCIsIHtcbiAgICAgICAgcHJvZmlsZTogcHJvZmlsZS5uYW1lLFxuICAgICAgICBhdXRoVHlwZTogcHJvZmlsZS5hdXRoVHlwZSxcbiAgICAgICAgdGFyZ2V0OiBwcm9maWxlLnRhcmdldCxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZW5kcG9pbnRzID0gYXdhaXQgcmVzb2x2ZU9BdXRoRW5kcG9pbnRzKHByb2ZpbGUsIGRlcGVuZGVuY2llcy5mZXRjaCk7XG4gICAgICByZXR1cm4gbmV3IERhdGFicmlja3NTZXJ2aWNlUHJpbmNpcGFsUHJvdmlkZXIoe1xuICAgICAgICB0b2tlbkVuZHBvaW50OiBlbmRwb2ludHMudG9rZW5FbmRwb2ludCxcbiAgICAgICAgY2xpZW50SWQ6IHByb2ZpbGUuY2xpZW50SWQsXG4gICAgICAgIGNsaWVudFNlY3JldDogcHJvZmlsZS5jbGllbnRTZWNyZXQhLFxuICAgICAgICBzY29wZXM6IG1hY2hpbmVTY29wZXMocHJvZmlsZS5zY29wZXMpLFxuICAgICAgICAuLi4ocHJvZmlsZS5ncm91cElkID8geyBncm91cElkOiBwcm9maWxlLmdyb3VwSWQgfSA6IHt9KSxcbiAgICAgICAgYWxsb3dJbnNlY3VyZVJlcXVlc3RzOiBpc0xvb3BiYWNrSHR0cChwcm9maWxlLmhvc3QpLFxuICAgICAgICBmZXRjaDogZGVwZW5kZW5jaWVzLmZldGNoLFxuICAgICAgfSk7XG4gICAgfVxuICAgIGNhc2UgQXV0aFR5cGUuQXBwT25CZWhhbGZPZjpcbiAgICAgIHRocm93IG5ldyBBdXRoRXJyb3IoXCJjb25maWdcIiwgXCJBcHAgT0JPIHRva2VucyBkbyBub3QgdXNlIGEgdG9rZW4gcHJvdmlkZXJcIik7XG4gIH1cbn1cblxuaW50ZXJmYWNlIEF1dGhvcml6YXRpb25TZXJ2ZXIge1xuICB0b2tlbkVuZHBvaW50OiBzdHJpbmc7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVPQXV0aEVuZHBvaW50cyhcbiAgcHJvZmlsZTogRGF0YWJyaWNrc1Byb2ZpbGUsXG4gIGZldGNoZXI6IHR5cGVvZiBnbG9iYWxUaGlzLmZldGNoID0gZ2xvYmFsVGhpcy5mZXRjaCxcbik6IFByb21pc2U8QXV0aG9yaXphdGlvblNlcnZlcj4ge1xuICBjb25zdCBob3N0ID0gcHJvZmlsZS5ob3N0LnJlcGxhY2UoL1xcLyQvLCBcIlwiKTtcbiAgaWYgKHByb2ZpbGUudGFyZ2V0ID09PSBUYXJnZXRLaW5kLkFjY291bnQpIHtcbiAgICBpZiAoIXByb2ZpbGUuYWNjb3VudElkKSB0aHJvdyBuZXcgQXV0aEVycm9yKFwiY29uZmlnXCIsIFwiQWNjb3VudCB0YXJnZXQgcmVxdWlyZXMgYWNjb3VudF9pZFwiKTtcbiAgICBjb25zdCBlbmRwb2ludHMgPSB7XG4gICAgICB0b2tlbkVuZHBvaW50OiBgJHtob3N0fS9vaWRjL2FjY291bnRzLyR7cHJvZmlsZS5hY2NvdW50SWR9L3YxL3Rva2VuYCxcbiAgICB9O1xuICAgIGxvZ2dlci5kZWJ1ZyhcInJlc29sdmVkIGFjY291bnQgT0F1dGggZW5kcG9pbnRcIiwge1xuICAgICAgcHJvZmlsZTogcHJvZmlsZS5uYW1lLFxuICAgICAgdG9rZW5PcmlnaW46IG5ldyBVUkwoZW5kcG9pbnRzLnRva2VuRW5kcG9pbnQpLm9yaWdpbixcbiAgICB9KTtcbiAgICByZXR1cm4gZW5kcG9pbnRzO1xuICB9XG4gIGNvbnN0IGRpc2NvdmVyeSA9XG4gICAgcHJvZmlsZS50YXJnZXQgPT09IFRhcmdldEtpbmQuVW5pZmllZFxuICAgICAgPyBgJHtob3N0fS9vaWRjL2FjY291bnRzLyR7cmVxdWlyZWRBY2NvdW50SWQocHJvZmlsZSl9Ly53ZWxsLWtub3duL29hdXRoLWF1dGhvcml6YXRpb24tc2VydmVyYFxuICAgICAgOiBgJHtob3N0fS9vaWRjLy53ZWxsLWtub3duL29hdXRoLWF1dGhvcml6YXRpb24tc2VydmVyYDtcbiAgbG9nZ2VyLmRlYnVnKFwicmVxdWVzdGluZyBPQXV0aCBkaXNjb3ZlcnlcIiwge1xuICAgIHByb2ZpbGU6IHByb2ZpbGUubmFtZSxcbiAgICB0YXJnZXQ6IHByb2ZpbGUudGFyZ2V0LFxuICAgIGRpc2NvdmVyeSxcbiAgfSk7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2hlcihkaXNjb3ZlcnksIHsgcmVkaXJlY3Q6IFwibWFudWFsXCIgfSk7XG4gIGxvZ2dlci5kZWJ1ZyhcInJlY2VpdmVkIE9BdXRoIGRpc2NvdmVyeSByZXNwb25zZVwiLCB7XG4gICAgcHJvZmlsZTogcHJvZmlsZS5uYW1lLFxuICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICB9KTtcbiAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDA0KSB7XG4gICAgdGhyb3cgbmV3IEF1dGhFcnJvcihcIm9hdXRoXCIsIGBPQXV0aCBpcyBub3Qgc3VwcG9ydGVkIGF0ICR7ZGlzY292ZXJ5fWApO1xuICB9XG4gIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICB0aHJvdyBuZXcgQXV0aEVycm9yKFwib2F1dGhcIiwgYE9BdXRoIGRpc2NvdmVyeSByZXR1cm5lZCBIVFRQICR7cmVzcG9uc2Uuc3RhdHVzfWApO1xuICB9XG4gIGNvbnN0IHZhbHVlID0gKGF3YWl0IHJlc3BvbnNlLmpzb24oKSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGNvbnN0IHRva2VuRW5kcG9pbnQgPSBzdHJpbmdWYWx1ZSh2YWx1ZS50b2tlbl9lbmRwb2ludCk7XG4gIGlmICghdG9rZW5FbmRwb2ludCkgdGhyb3cgbmV3IEF1dGhFcnJvcihcIm9hdXRoXCIsIFwiT0F1dGggZGlzY292ZXJ5IHJlc3BvbnNlIGlzIGluY29tcGxldGVcIik7XG4gIGxvZ2dlci5kZWJ1ZyhcInJlc29sdmVkIE9BdXRoIHRva2VuIGVuZHBvaW50XCIsIHtcbiAgICBwcm9maWxlOiBwcm9maWxlLm5hbWUsXG4gICAgdG9rZW5PcmlnaW46IG5ldyBVUkwodG9rZW5FbmRwb2ludCkub3JpZ2luLFxuICB9KTtcbiAgcmV0dXJuIHsgdG9rZW5FbmRwb2ludCB9O1xufVxuXG5mdW5jdGlvbiByZXF1aXJlZEFjY291bnRJZChwcm9maWxlOiBEYXRhYnJpY2tzUHJvZmlsZSk6IHN0cmluZyB7XG4gIGlmICghcHJvZmlsZS5hY2NvdW50SWQpIHRocm93IG5ldyBBdXRoRXJyb3IoXCJjb25maWdcIiwgXCJVbmlmaWVkIHRhcmdldCByZXF1aXJlcyBhY2NvdW50X2lkXCIpO1xuICByZXR1cm4gcHJvZmlsZS5hY2NvdW50SWQ7XG59XG5cbmZ1bmN0aW9uIGlzTG9vcGJhY2tIdHRwKGhvc3Q6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCB1cmwgPSBuZXcgVVJMKGhvc3QpO1xuICByZXR1cm4gdXJsLnByb3RvY29sID09PSBcImh0dHA6XCIgJiYgW1wiMTI3LjAuMC4xXCIsIFwibG9jYWxob3N0XCJdLmluY2x1ZGVzKHVybC5ob3N0bmFtZSk7XG59XG5cbmZ1bmN0aW9uIGNsaUVudmlyb25tZW50KHByb2ZpbGU6IERhdGFicmlja3NQcm9maWxlLCBjb25maWdGaWxlOiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgcmV0dXJuIHtcbiAgICBEQVRBQlJJQ0tTX0NPTkZJR19GSUxFOiBjb25maWdGaWxlLFxuICAgIERBVEFCUklDS1NfQ09ORklHX1BST0ZJTEU6IHByb2ZpbGUubmFtZSxcbiAgICBEQVRBQlJJQ0tTX0hPU1Q6IHByb2ZpbGUuaG9zdCxcbiAgICAuLi4ocHJvZmlsZS5hY2NvdW50SWQgPyB7IERBVEFCUklDS1NfQUNDT1VOVF9JRDogcHJvZmlsZS5hY2NvdW50SWQgfSA6IHt9KSxcbiAgICAuLi4ocHJvZmlsZS53b3Jrc3BhY2VJZCA/IHsgREFUQUJSSUNLU19XT1JLU1BBQ0VfSUQ6IHByb2ZpbGUud29ya3NwYWNlSWQgfSA6IHt9KSxcbiAgICAuLi4ocHJvZmlsZS5hdXRoVHlwZSA9PT0gQXV0aFR5cGUuUGVyc29uYWxBY2Nlc3NUb2tlblxuICAgICAgPyB7XG4gICAgICAgICAgREFUQUJSSUNLU19BVVRIX1RZUEU6IFwicGF0XCIsXG4gICAgICAgICAgREFUQUJSSUNLU19UT0tFTjogcHJvZmlsZS5hY2Nlc3NUb2tlbiEsXG4gICAgICAgIH1cbiAgICAgIDoge30pLFxuICB9O1xufVxuXG5mdW5jdGlvbiBzdHJpbmdWYWx1ZSh2YWx1ZTogdW5rbm93bik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiYgdmFsdWUudHJpbSgpID8gdmFsdWUgOiB1bmRlZmluZWQ7XG59XG4iXX0=
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { AuthType, TargetKind } from "@dbx-tools/shared-auth/config";
|
|
2
|
+
/** Token lifecycle timing configuration in milliseconds. */
|
|
3
|
+
export interface AuthOptions {
|
|
4
|
+
refreshBufferMs?: number;
|
|
5
|
+
lockTimeoutMs?: number;
|
|
6
|
+
loginTimeoutMs?: number;
|
|
7
|
+
}
|
|
8
|
+
/** Default token refresh, lock, and interactive login timing values. */
|
|
9
|
+
export declare const AUTH_DEFAULTS: Required<AuthOptions>;
|
|
10
|
+
/** Databricks profile and credential-source options. */
|
|
11
|
+
export interface DatabricksAuthOptions {
|
|
12
|
+
profile?: string;
|
|
13
|
+
host?: string;
|
|
14
|
+
accountId?: string;
|
|
15
|
+
workspaceId?: string;
|
|
16
|
+
configFile?: string;
|
|
17
|
+
clientId?: string;
|
|
18
|
+
clientSecret?: string;
|
|
19
|
+
accessToken?: string;
|
|
20
|
+
groupId?: string;
|
|
21
|
+
authType?: AuthType;
|
|
22
|
+
scopes?: string[];
|
|
23
|
+
target?: TargetKind;
|
|
24
|
+
auth?: AuthOptions;
|
|
25
|
+
requestHeaders?: Record<string, string>;
|
|
26
|
+
accessTokenHeader?: string;
|
|
27
|
+
preferUserToMachine?: boolean;
|
|
28
|
+
}
|
|
29
|
+
/** OAuth client used by Databricks CLI-compatible user authentication. */
|
|
30
|
+
export declare const DEFAULT_CLIENT_ID = "databricks-cli";
|
|
31
|
+
/** Default Databricks profile configuration path. */
|
|
32
|
+
export declare const DEFAULT_CONFIG_FILE = "~/.databrickscfg";
|
|
33
|
+
/** Request header carrying a bearer access token. */
|
|
34
|
+
export declare const DEFAULT_ACCESS_TOKEN_HEADER = "authorization";
|
|
35
|
+
/** Request header carrying the resolved Databricks workspace ID. */
|
|
36
|
+
export declare const WORKSPACE_ID_HEADER = "x-databricks-workspace-id";
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/** Default token refresh, lock, and interactive login timing values. */
|
|
2
|
+
export const AUTH_DEFAULTS = {
|
|
3
|
+
refreshBufferMs: 300_000,
|
|
4
|
+
lockTimeoutMs: 0,
|
|
5
|
+
loginTimeoutMs: 900_000,
|
|
6
|
+
};
|
|
7
|
+
/** OAuth client used by Databricks CLI-compatible user authentication. */
|
|
8
|
+
export const DEFAULT_CLIENT_ID = "databricks-cli";
|
|
9
|
+
/** Default Databricks profile configuration path. */
|
|
10
|
+
export const DEFAULT_CONFIG_FILE = "~/.databrickscfg";
|
|
11
|
+
/** Request header carrying a bearer access token. */
|
|
12
|
+
export const DEFAULT_ACCESS_TOKEN_HEADER = "authorization";
|
|
13
|
+
/** Request header carrying the resolved Databricks workspace ID. */
|
|
14
|
+
export const WORKSPACE_ID_HEADER = "x-databricks-workspace-id";
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFTQSx3RUFBd0U7QUFDeEUsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUEwQjtJQUNsRCxlQUFlLEVBQUUsT0FBTztJQUN4QixhQUFhLEVBQUUsQ0FBQztJQUNoQixjQUFjLEVBQUUsT0FBTztDQUN4QixDQUFDO0FBc0JGLDBFQUEwRTtBQUMxRSxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxnQkFBZ0IsQ0FBQztBQUNsRCxxREFBcUQ7QUFDckQsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsa0JBQWtCLENBQUM7QUFDdEQscURBQXFEO0FBQ3JELE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFHLGVBQWUsQ0FBQztBQUMzRCxvRUFBb0U7QUFDcEUsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsMkJBQTJCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEF1dGhUeXBlLCBUYXJnZXRLaW5kIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWF1dGgvY29uZmlnXCI7XG5cbi8qKiBUb2tlbiBsaWZlY3ljbGUgdGltaW5nIGNvbmZpZ3VyYXRpb24gaW4gbWlsbGlzZWNvbmRzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdXRoT3B0aW9ucyB7XG4gIHJlZnJlc2hCdWZmZXJNcz86IG51bWJlcjtcbiAgbG9ja1RpbWVvdXRNcz86IG51bWJlcjtcbiAgbG9naW5UaW1lb3V0TXM/OiBudW1iZXI7XG59XG5cbi8qKiBEZWZhdWx0IHRva2VuIHJlZnJlc2gsIGxvY2ssIGFuZCBpbnRlcmFjdGl2ZSBsb2dpbiB0aW1pbmcgdmFsdWVzLiAqL1xuZXhwb3J0IGNvbnN0IEFVVEhfREVGQVVMVFM6IFJlcXVpcmVkPEF1dGhPcHRpb25zPiA9IHtcbiAgcmVmcmVzaEJ1ZmZlck1zOiAzMDBfMDAwLFxuICBsb2NrVGltZW91dE1zOiAwLFxuICBsb2dpblRpbWVvdXRNczogOTAwXzAwMCxcbn07XG5cbi8qKiBEYXRhYnJpY2tzIHByb2ZpbGUgYW5kIGNyZWRlbnRpYWwtc291cmNlIG9wdGlvbnMuICovXG5leHBvcnQgaW50ZXJmYWNlIERhdGFicmlja3NBdXRoT3B0aW9ucyB7XG4gIHByb2ZpbGU/OiBzdHJpbmc7XG4gIGhvc3Q/OiBzdHJpbmc7XG4gIGFjY291bnRJZD86IHN0cmluZztcbiAgd29ya3NwYWNlSWQ/OiBzdHJpbmc7XG4gIGNvbmZpZ0ZpbGU/OiBzdHJpbmc7XG4gIGNsaWVudElkPzogc3RyaW5nO1xuICBjbGllbnRTZWNyZXQ/OiBzdHJpbmc7XG4gIGFjY2Vzc1Rva2VuPzogc3RyaW5nO1xuICBncm91cElkPzogc3RyaW5nO1xuICBhdXRoVHlwZT86IEF1dGhUeXBlO1xuICBzY29wZXM/OiBzdHJpbmdbXTtcbiAgdGFyZ2V0PzogVGFyZ2V0S2luZDtcbiAgYXV0aD86IEF1dGhPcHRpb25zO1xuICByZXF1ZXN0SGVhZGVycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIGFjY2Vzc1Rva2VuSGVhZGVyPzogc3RyaW5nO1xuICBwcmVmZXJVc2VyVG9NYWNoaW5lPzogYm9vbGVhbjtcbn1cblxuLyoqIE9BdXRoIGNsaWVudCB1c2VkIGJ5IERhdGFicmlja3MgQ0xJLWNvbXBhdGlibGUgdXNlciBhdXRoZW50aWNhdGlvbi4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0NMSUVOVF9JRCA9IFwiZGF0YWJyaWNrcy1jbGlcIjtcbi8qKiBEZWZhdWx0IERhdGFicmlja3MgcHJvZmlsZSBjb25maWd1cmF0aW9uIHBhdGguICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9DT05GSUdfRklMRSA9IFwifi8uZGF0YWJyaWNrc2NmZ1wiO1xuLyoqIFJlcXVlc3QgaGVhZGVyIGNhcnJ5aW5nIGEgYmVhcmVyIGFjY2VzcyB0b2tlbi4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0FDQ0VTU19UT0tFTl9IRUFERVIgPSBcImF1dGhvcml6YXRpb25cIjtcbi8qKiBSZXF1ZXN0IGhlYWRlciBjYXJyeWluZyB0aGUgcmVzb2x2ZWQgRGF0YWJyaWNrcyB3b3Jrc3BhY2UgSUQuICovXG5leHBvcnQgY29uc3QgV09SS1NQQUNFX0lEX0hFQURFUiA9IFwieC1kYXRhYnJpY2tzLXdvcmtzcGFjZS1pZFwiO1xuIl19
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { DatabricksProfileSummary } from "@dbx-tools/shared-auth/profile";
|
|
2
|
+
import type { DatabricksAuthOptions } from "./config.ts";
|
|
3
|
+
/** Profile-listing controls. */
|
|
4
|
+
export interface ListProfilesOptions {
|
|
5
|
+
configFile?: string;
|
|
6
|
+
refresh?: boolean;
|
|
7
|
+
}
|
|
8
|
+
/** Resolve one selected profile without exposing credentials. */
|
|
9
|
+
export declare function resolveProfile(options?: DatabricksAuthOptions): DatabricksProfileSummary;
|
|
10
|
+
/** List configured profiles without exposing credentials. */
|
|
11
|
+
export declare function listProfiles(options?: ListProfilesOptions): DatabricksProfileSummary[];
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { listDatabricksProfiles, resolveDatabricksProfile } from "./_profile-config.js";
|
|
2
|
+
/** Resolve one selected profile without exposing credentials. */
|
|
3
|
+
export function resolveProfile(options = {}) {
|
|
4
|
+
return toProfileSummary(resolveDatabricksProfile(options));
|
|
5
|
+
}
|
|
6
|
+
/** List configured profiles without exposing credentials. */
|
|
7
|
+
export function listProfiles(options = {}) {
|
|
8
|
+
return listDatabricksProfiles(options.configFile, options.refresh);
|
|
9
|
+
}
|
|
10
|
+
function toProfileSummary(profile) {
|
|
11
|
+
return {
|
|
12
|
+
name: profile.name,
|
|
13
|
+
host: profile.host,
|
|
14
|
+
...(profile.accountId ? { accountId: profile.accountId } : {}),
|
|
15
|
+
...(profile.workspaceId ? { workspaceId: profile.workspaceId } : {}),
|
|
16
|
+
target: profile.target,
|
|
17
|
+
authType: profile.authType,
|
|
18
|
+
principal: profile.principal,
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZmlsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm9maWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBVXhGLGlFQUFpRTtBQUNqRSxNQUFNLFVBQVUsY0FBYyxDQUFDLFVBQWlDLEVBQUU7SUFDaEUsT0FBTyxnQkFBZ0IsQ0FBQyx3QkFBd0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQzdELENBQUM7QUFFRCw2REFBNkQ7QUFDN0QsTUFBTSxVQUFVLFlBQVksQ0FBQyxVQUErQixFQUFFO0lBQzVELE9BQU8sc0JBQXNCLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDckUsQ0FBQztBQUVELFNBQVMsZ0JBQWdCLENBQUMsT0FBMEI7SUFDbEQsT0FBTztRQUNMLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTtRQUNsQixJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUk7UUFDbEIsR0FBRyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzlELEdBQUcsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNwRSxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07UUFDdEIsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRO1FBQzFCLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUztLQUM3QixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRGF0YWJyaWNrc1Byb2ZpbGVTdW1tYXJ5IH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWF1dGgvcHJvZmlsZVwiO1xuXG5pbXBvcnQgeyBsaXN0RGF0YWJyaWNrc1Byb2ZpbGVzLCByZXNvbHZlRGF0YWJyaWNrc1Byb2ZpbGUgfSBmcm9tIFwiLi9fcHJvZmlsZS1jb25maWcudHNcIjtcbmltcG9ydCB0eXBlIHsgRGF0YWJyaWNrc1Byb2ZpbGUgfSBmcm9tIFwiLi9fdHlwZXMudHNcIjtcbmltcG9ydCB0eXBlIHsgRGF0YWJyaWNrc0F1dGhPcHRpb25zIH0gZnJvbSBcIi4vY29uZmlnLnRzXCI7XG5cbi8qKiBQcm9maWxlLWxpc3RpbmcgY29udHJvbHMuICovXG5leHBvcnQgaW50ZXJmYWNlIExpc3RQcm9maWxlc09wdGlvbnMge1xuICBjb25maWdGaWxlPzogc3RyaW5nO1xuICByZWZyZXNoPzogYm9vbGVhbjtcbn1cblxuLyoqIFJlc29sdmUgb25lIHNlbGVjdGVkIHByb2ZpbGUgd2l0aG91dCBleHBvc2luZyBjcmVkZW50aWFscy4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlUHJvZmlsZShvcHRpb25zOiBEYXRhYnJpY2tzQXV0aE9wdGlvbnMgPSB7fSk6IERhdGFicmlja3NQcm9maWxlU3VtbWFyeSB7XG4gIHJldHVybiB0b1Byb2ZpbGVTdW1tYXJ5KHJlc29sdmVEYXRhYnJpY2tzUHJvZmlsZShvcHRpb25zKSk7XG59XG5cbi8qKiBMaXN0IGNvbmZpZ3VyZWQgcHJvZmlsZXMgd2l0aG91dCBleHBvc2luZyBjcmVkZW50aWFscy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsaXN0UHJvZmlsZXMob3B0aW9uczogTGlzdFByb2ZpbGVzT3B0aW9ucyA9IHt9KTogRGF0YWJyaWNrc1Byb2ZpbGVTdW1tYXJ5W10ge1xuICByZXR1cm4gbGlzdERhdGFicmlja3NQcm9maWxlcyhvcHRpb25zLmNvbmZpZ0ZpbGUsIG9wdGlvbnMucmVmcmVzaCk7XG59XG5cbmZ1bmN0aW9uIHRvUHJvZmlsZVN1bW1hcnkocHJvZmlsZTogRGF0YWJyaWNrc1Byb2ZpbGUpOiBEYXRhYnJpY2tzUHJvZmlsZVN1bW1hcnkge1xuICByZXR1cm4ge1xuICAgIG5hbWU6IHByb2ZpbGUubmFtZSxcbiAgICBob3N0OiBwcm9maWxlLmhvc3QsXG4gICAgLi4uKHByb2ZpbGUuYWNjb3VudElkID8geyBhY2NvdW50SWQ6IHByb2ZpbGUuYWNjb3VudElkIH0gOiB7fSksXG4gICAgLi4uKHByb2ZpbGUud29ya3NwYWNlSWQgPyB7IHdvcmtzcGFjZUlkOiBwcm9maWxlLndvcmtzcGFjZUlkIH0gOiB7fSksXG4gICAgdGFyZ2V0OiBwcm9maWxlLnRhcmdldCxcbiAgICBhdXRoVHlwZTogcHJvZmlsZS5hdXRoVHlwZSxcbiAgICBwcmluY2lwYWw6IHByb2ZpbGUucHJpbmNpcGFsLFxuICB9O1xufVxuIl19
|
package/lib/tsconfig.tsbuildinfo
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"root":["../src/
|
|
1
|
+
{"root":["../src/_databricks-cli.ts","../src/_errors.ts","../src/_lifecycle.ts","../src/_logging.ts","../src/_personal-access-token.ts","../src/_profile-config.ts","../src/_service-principal.ts","../src/_storage.ts","../src/_types.ts","../src/client.ts","../src/config.ts","../src/profile.ts","../index.ts"],"version":"5.9.3"}
|