@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.
Files changed (73) hide show
  1. package/README.md +49 -97
  2. package/index.ts +8 -26
  3. package/lib/index.d.ts +8 -26
  4. package/lib/index.js +6 -22
  5. package/lib/src/{databricks-cli.d.ts → _databricks-cli.d.ts} +3 -7
  6. package/lib/src/_databricks-cli.js +172 -0
  7. package/lib/src/_errors.d.ts +5 -0
  8. package/lib/src/_errors.js +10 -0
  9. package/lib/src/{lifecycle.d.ts → _lifecycle.d.ts} +5 -5
  10. package/lib/src/_lifecycle.js +214 -0
  11. package/lib/src/_logging.d.ts +1 -1
  12. package/lib/src/_logging.js +2 -2
  13. package/lib/src/{personal-access-token.d.ts → _personal-access-token.d.ts} +1 -1
  14. package/lib/src/_personal-access-token.js +30 -0
  15. package/lib/src/_profile-config.d.ts +43 -0
  16. package/lib/src/_profile-config.js +443 -0
  17. package/lib/src/{service-principal.d.ts → _service-principal.d.ts} +1 -1
  18. package/lib/src/_service-principal.js +69 -0
  19. package/lib/src/{storage.d.ts → _storage.d.ts} +4 -6
  20. package/lib/src/_storage.js +94 -0
  21. package/lib/src/_types.d.ts +40 -0
  22. package/lib/src/_types.js +2 -0
  23. package/lib/src/client.d.ts +30 -0
  24. package/lib/src/client.js +223 -0
  25. package/lib/src/config.d.ts +36 -0
  26. package/lib/src/config.js +15 -0
  27. package/lib/src/profile.d.ts +11 -0
  28. package/lib/src/profile.js +21 -0
  29. package/lib/tsconfig.tsbuildinfo +1 -1
  30. package/package.json +34 -10
  31. package/src/{databricks-cli.ts → _databricks-cli.ts} +20 -109
  32. package/src/_errors.ts +11 -0
  33. package/src/{lifecycle.ts → _lifecycle.ts} +24 -48
  34. package/src/_logging.ts +2 -2
  35. package/src/{personal-access-token.ts → _personal-access-token.ts} +1 -1
  36. package/src/_profile-config.ts +545 -0
  37. package/src/{service-principal.ts → _service-principal.ts} +2 -2
  38. package/src/_storage.ts +109 -0
  39. package/src/_types.ts +45 -0
  40. package/src/client.ts +291 -0
  41. package/src/config.ts +44 -0
  42. package/src/profile.ts +33 -0
  43. package/lib/exports.d.ts +0 -2
  44. package/lib/exports.js +0 -3
  45. package/lib/src/_profile-core.d.ts +0 -28
  46. package/lib/src/_profile-core.js +0 -216
  47. package/lib/src/_profile.d.ts +0 -15
  48. package/lib/src/_profile.js +0 -236
  49. package/lib/src/databricks-auth.d.ts +0 -11
  50. package/lib/src/databricks-auth.js +0 -314
  51. package/lib/src/databricks-cli.js +0 -239
  52. package/lib/src/errors.d.ts +0 -7
  53. package/lib/src/errors.js +0 -14
  54. package/lib/src/generated/databricks-cli-assets.json +0 -33
  55. package/lib/src/http-client.d.ts +0 -23
  56. package/lib/src/http-client.js +0 -116
  57. package/lib/src/lifecycle.js +0 -229
  58. package/lib/src/node-storage.d.ts +0 -20
  59. package/lib/src/node-storage.js +0 -207
  60. package/lib/src/personal-access-token.js +0 -30
  61. package/lib/src/service-principal.js +0 -69
  62. package/lib/src/storage.js +0 -98
  63. package/lib/src/types.d.ts +0 -157
  64. package/lib/src/types.js +0 -67
  65. package/src/_profile-core.ts +0 -258
  66. package/src/_profile.ts +0 -319
  67. package/src/databricks-auth.ts +0 -416
  68. package/src/errors.ts +0 -16
  69. package/src/generated/databricks-cli-assets.json +0 -33
  70. package/src/http-client.ts +0 -147
  71. package/src/node-storage.ts +0 -230
  72. package/src/storage.ts +0 -104
  73. package/src/types.ts +0 -188
@@ -1,69 +0,0 @@
1
- import * as oauth from "oauth4webapi";
2
- import { authLogger, failureMetadata, tokenMetadata } from "./_logging.js";
3
- import { AuthError } from "./errors.js";
4
- const logger = authLogger("service-principal");
5
- /** Databricks service-principal provider backed by client credentials. */
6
- export class DatabricksServicePrincipalProvider {
7
- config;
8
- authorizationServer;
9
- client;
10
- requestOptions;
11
- constructor(config) {
12
- this.config = config;
13
- this.authorizationServer = {
14
- issuer: new URL(config.tokenEndpoint).origin,
15
- token_endpoint: config.tokenEndpoint,
16
- };
17
- this.client = { client_id: config.clientId };
18
- this.requestOptions = {
19
- ...(config.fetch ? { [oauth.customFetch]: config.fetch } : {}),
20
- ...(config.allowInsecureRequests ? { [oauth.allowInsecureRequests]: true } : {}),
21
- };
22
- }
23
- authenticate() {
24
- return this.acquire();
25
- }
26
- login() {
27
- return this.acquire();
28
- }
29
- refresh() {
30
- return this.acquire();
31
- }
32
- canAuthenticateSilently() {
33
- return true;
34
- }
35
- async acquire() {
36
- logger.debug("requesting service-principal token", {
37
- tokenOrigin: new URL(this.config.tokenEndpoint).origin,
38
- scopeCount: this.config.scopes.length,
39
- hasGroupId: Boolean(this.config.groupId),
40
- allowInsecureRequests: Boolean(this.config.allowInsecureRequests),
41
- });
42
- try {
43
- const response = await oauth.clientCredentialsGrantRequest(this.authorizationServer, this.client, oauth.ClientSecretBasic(this.config.clientSecret), {
44
- scope: [...new Set(this.config.scopes)].sort().join(" "),
45
- ...(this.config.groupId ? { assume_group: this.config.groupId } : {}),
46
- }, this.requestOptions);
47
- const value = await oauth.processClientCredentialsResponse(this.authorizationServer, this.client, response);
48
- const token = {
49
- accessToken: value.access_token,
50
- tokenType: value.token_type.toLowerCase() === "bearer" ? "Bearer" : value.token_type,
51
- ...(value.expires_in !== undefined
52
- ? { expiry: new Date(Date.now() + value.expires_in * 1000).toISOString() }
53
- : {}),
54
- scopes: value.scope?.split(/\s+/).filter(Boolean) ?? [...this.config.scopes],
55
- };
56
- logger.debug("received service-principal token", { token: tokenMetadata(token) });
57
- return token;
58
- }
59
- catch (cause) {
60
- logger.debug("service-principal token request failed", {
61
- error: failureMetadata(cause),
62
- });
63
- throw new AuthError("oauth", "Databricks service-principal authentication failed", {
64
- cause,
65
- });
66
- }
67
- }
68
- }
69
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS1wcmluY2lwYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmljZS1wcmluY2lwYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEtBQUssTUFBTSxjQUFjLENBQUM7QUFFdEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFHeEMsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLG1CQUFtQixDQUFDLENBQUM7QUFhL0MsMEVBQTBFO0FBQzFFLE1BQU0sT0FBTyxrQ0FBa0M7SUFLaEI7SUFKWixtQkFBbUIsQ0FBNEI7SUFDL0MsTUFBTSxDQUFlO0lBQ3JCLGNBQWMsQ0FBb0Q7SUFFbkYsWUFBNkIsTUFBd0M7UUFBeEMsV0FBTSxHQUFOLE1BQU0sQ0FBa0M7UUFDbkUsSUFBSSxDQUFDLG1CQUFtQixHQUFHO1lBQ3pCLE1BQU0sRUFBRSxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUMsTUFBTTtZQUM1QyxjQUFjLEVBQUUsTUFBTSxDQUFDLGFBQWE7U0FDckMsQ0FBQztRQUNGLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzdDLElBQUksQ0FBQyxjQUFjLEdBQUc7WUFDcEIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEVBQUUsTUFBTSxDQUFDLEtBQWdDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3pGLEdBQUcsQ0FBQyxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxD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LENBQUMsS0FBSyxDQUFDO2FBQzlCLENBQUMsQ0FBQztZQUNILE1BQU0sSUFBSSxTQUFTLENBQUMsT0FBTyxFQUFFLG9EQUFvRCxFQUFFO2dCQUNqRixLQUFLO2FBQ04sQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIG9hdXRoIGZyb20gXCJvYXV0aDR3ZWJhcGlcIjtcblxuaW1wb3J0IHsgYXV0aExvZ2dlciwgZmFpbHVyZU1ldGFkYXRhLCB0b2tlbk1ldGFkYXRhIH0gZnJvbSBcIi4vX2xvZ2dpbmcudHNcIjtcbmltcG9ydCB7IEF1dGhFcnJvciB9IGZyb20gXCIuL2Vycm9ycy50c1wiO1xuaW1wb3J0IHR5cGUgeyBUb2tlbiwgVG9rZW5Qcm92aWRlciB9IGZyb20gXCIuL3R5cGVzLnRzXCI7XG5cbmNvbnN0IGxvZ2dlciA9IGF1dGhMb2dnZXIoXCJzZXJ2aWNlLXByaW5jaXBhbFwiKTtcblxuLyoqIENsaWVudC1jcmVkZW50aWFscyBpbnB1dHMgYW5kIHRyYW5zcG9ydCBvcHRpb25zIGZvciBEYXRhYnJpY2tzIE9BdXRoLiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhYnJpY2tzU2VydmljZVByaW5jaXBhbENvbmZpZyB7XG4gIHRva2VuRW5kcG9pbnQ6IHN0cmluZztcbiAgY2xpZW50SWQ6IHN0cmluZztcbiAgY2xpZW50U2VjcmV0OiBzdHJpbmc7XG4gIHNjb3Blczogc3RyaW5nW107XG4gIGdyb3VwSWQ/OiBzdHJpbmc7XG4gIGZldGNoPzogdHlwZW9mIGdsb2JhbFRoaXMuZmV0Y2g7XG4gIGFsbG93SW5zZWN1cmVSZXF1ZXN0cz86IGJvb2xlYW47XG59XG5cbi8qKiBEYXRhYnJpY2tzIHNlcnZpY2UtcHJpbmNpcGFsIHByb3ZpZGVyIGJhY2tlZCBieSBjbGllbnQgY3JlZGVudGlhbHMuICovXG5leHBvcnQgY2xhc3MgRGF0YWJyaWNrc1NlcnZpY2VQcmluY2lwYWxQcm92aWRlciBpbXBsZW1lbnRzIFRva2VuUHJvdmlkZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IGF1dGhvcml6YXRpb25TZXJ2ZXI6IG9hdXRoLkF1dGhvcml6YXRpb25TZXJ2ZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2xpZW50OiBvYXV0aC5DbGllbnQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVxdWVzdE9wdGlvbnM6IG9hdXRoLkh0dHBSZXF1ZXN0T3B0aW9uczxzdHJpbmcsIFVSTFNlYXJjaFBhcmFtcz47XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBjb25maWc6IERhdGFicmlja3NTZXJ2aWNlUHJpbmNpcGFsQ29uZmlnKSB7XG4gICAgdGhpcy5hdXRob3JpemF0aW9uU2VydmVyID0ge1xuICAgICAgaXNzdWVyOiBuZXcgVVJMKGNvbmZpZy50b2tlbkVuZHBvaW50KS5vcmlnaW4sXG4gICAgICB0b2tlbl9lbmRwb2ludDogY29uZmlnLnRva2VuRW5kcG9pbnQsXG4gICAgfTtcbiAgICB0aGlzLmNsaWVudCA9IHsgY2xpZW50X2lkOiBjb25maWcuY2xpZW50SWQgfTtcbiAgICB0aGlzLnJlcXVlc3RPcHRpb25zID0ge1xuICAgICAgLi4uKGNvbmZpZy5mZXRjaCA/IHsgW29hdXRoLmN1c3RvbUZldGNoXTogY29uZmlnLmZldGNoIGFzIHR5cGVvZiBnbG9iYWxUaGlzLmZldGNoIH0gOiB7fSksXG4gICAgICAuLi4oY29uZmlnLmFsbG93SW5zZWN1cmVSZXF1ZXN0cyA/IHsgW29hdXRoLmFsbG93SW5zZWN1cmVSZXF1ZXN0c106IHRydWUgfSA6IHt9KSxcbiAgICB9O1xuICB9XG5cbiAgYXV0aGVudGljYXRlKCk6IFByb21pc2U8VG9rZW4+IHtcbiAgICByZXR1cm4gdGhpcy5hY3F1aXJlKCk7XG4gIH1cblxuICBsb2dpbigpOiBQcm9taXNlPFRva2VuPiB7XG4gICAgcmV0dXJuIHRoaXMuYWNxdWlyZSgpO1xuICB9XG5cbiAgcmVmcmVzaCgpOiBQcm9taXNlPFRva2VuPiB7XG4gICAgcmV0dXJuIHRoaXMuYWNxdWlyZSgpO1xuICB9XG5cbiAgY2FuQXV0aGVudGljYXRlU2lsZW50bHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGFjcXVpcmUoKTogUHJvbWlzZTxUb2tlbj4ge1xuICAgIGxvZ2dlci5kZWJ1ZyhcInJlcXVlc3Rpbmcgc2VydmljZS1wcmluY2lwYWwgdG9rZW5cIiwge1xuICAgICAgdG9rZW5PcmlnaW46IG5ldyBVUkwodGhpcy5jb25maWcudG9rZW5FbmRwb2ludCkub3JpZ2luLFxuICAgICAgc2NvcGVDb3VudDogdGhpcy5jb25maWcuc2NvcGVzLmxlbmd0aCxcbiAgICAgIGhhc0dyb3VwSWQ6IEJvb2xlYW4odGhpcy5jb25maWcuZ3JvdXBJZCksXG4gICAgICBhbGxvd0luc2VjdXJlUmVxdWVzdHM6IEJvb2xlYW4odGhpcy5jb25maWcuYWxsb3dJbnNlY3VyZVJlcXVlc3RzKSxcbiAgICB9KTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBvYXV0aC5jbGllbnRDcmVkZW50aWFsc0dyYW50UmVxdWVzdChcbiAgICAgICAgdGhpcy5hdXRob3JpemF0aW9uU2VydmVyLFxuICAgICAgICB0aGlzLmNsaWVudCxcbiAgICAgICAgb2F1dGguQ2xpZW50U2VjcmV0QmFzaWModGhpcy5jb25maWcuY2xpZW50U2VjcmV0KSxcbiAgICAgICAge1xuICAgICAgICAgIHNjb3BlOiBbLi4ubmV3IFNldCh0aGlzLmNvbmZpZy5zY29wZXMpXS5zb3J0KCkuam9pbihcIiBcIiksXG4gICAgICAgICAgLi4uKHRoaXMuY29uZmlnLmdyb3VwSWQgPyB7IGFzc3VtZV9ncm91cDogdGhpcy5jb25maWcuZ3JvdXBJZCB9IDoge30pLFxuICAgICAgICB9LFxuICAgICAgICB0aGlzLnJlcXVlc3RPcHRpb25zLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHZhbHVlID0gYXdhaXQgb2F1dGgucHJvY2Vzc0NsaWVudENyZWRlbnRpYWxzUmVzcG9uc2UoXG4gICAgICAgIHRoaXMuYXV0aG9yaXphdGlvblNlcnZlcixcbiAgICAgICAgdGhpcy5jbGllbnQsXG4gICAgICAgIHJlc3BvbnNlLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHRva2VuID0ge1xuICAgICAgICBhY2Nlc3NUb2tlbjogdmFsdWUuYWNjZXNzX3Rva2VuLFxuICAgICAgICB0b2tlblR5cGU6IHZhbHVlLnRva2VuX3R5cGUudG9Mb3dlckNhc2UoKSA9PT0gXCJiZWFyZXJcIiA/IFwiQmVhcmVyXCIgOiB2YWx1ZS50b2tlbl90eXBlLFxuICAgICAgICAuLi4odmFsdWUuZXhwaXJlc19pbiAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyB7IGV4cGlyeTogbmV3IERhdGUoRGF0ZS5ub3coKSArIHZhbHVlLmV4cGlyZXNfaW4gKiAxMDAwKS50b0lTT1N0cmluZygpIH1cbiAgICAgICAgICA6IHt9KSxcbiAgICAgICAgc2NvcGVzOiB2YWx1ZS5zY29wZT8uc3BsaXQoL1xccysvKS5maWx0ZXIoQm9vbGVhbikgPz8gWy4uLnRoaXMuY29uZmlnLnNjb3Blc10sXG4gICAgICB9O1xuICAgICAgbG9nZ2VyLmRlYnVnKFwicmVjZWl2ZWQgc2VydmljZS1wcmluY2lwYWwgdG9rZW5cIiwgeyB0b2tlbjogdG9rZW5NZXRhZGF0YSh0b2tlbikgfSk7XG4gICAgICByZXR1cm4gdG9rZW47XG4gICAgfSBjYXRjaCAoY2F1c2UpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhcInNlcnZpY2UtcHJpbmNpcGFsIHRva2VuIHJlcXVlc3QgZmFpbGVkXCIsIHtcbiAgICAgICAgZXJyb3I6IGZhaWx1cmVNZXRhZGF0YShjYXVzZSksXG4gICAgICB9KTtcbiAgICAgIHRocm93IG5ldyBBdXRoRXJyb3IoXCJvYXV0aFwiLCBcIkRhdGFicmlja3Mgc2VydmljZS1wcmluY2lwYWwgYXV0aGVudGljYXRpb24gZmFpbGVkXCIsIHtcbiAgICAgICAgY2F1c2UsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -1,98 +0,0 @@
1
- import { authLogger, credentialId, tokenMetadata } from "./_logging.js";
2
- const logger = authLogger("memory-storage");
3
- /** Process-local generic lease registry used by the in-memory store. */
4
- export class MemoryLockAdapter {
5
- #tails = new Map();
6
- #leases = new Map();
7
- #sequence = 0;
8
- async acquire(key, timeoutMs) {
9
- const credential = credentialId(key);
10
- const previous = this.#tails.get(key) ?? Promise.resolve();
11
- let release;
12
- const current = new Promise((resolve) => {
13
- release = resolve;
14
- });
15
- const tail = previous.then(() => current);
16
- this.#tails.set(key, tail);
17
- try {
18
- logger.debug("waiting for memory lock", { credential, timeoutMs });
19
- await withTimeout(previous, timeoutMs, `Timed out waiting for lock ${key}`);
20
- }
21
- catch (error) {
22
- release();
23
- if (this.#tails.get(key) === tail)
24
- this.#tails.delete(key);
25
- throw error;
26
- }
27
- const lease = `${++this.#sequence}:${key}`;
28
- this.#leases.set(lease, () => {
29
- release();
30
- this.#leases.delete(lease);
31
- if (this.#tails.get(key) === tail)
32
- this.#tails.delete(key);
33
- });
34
- logger.debug("memory lock acquired", { credential });
35
- return lease;
36
- }
37
- async release(lease) {
38
- logger.debug("releasing memory lock", {
39
- credential: credentialId(lease.split(":").slice(1).join(":")),
40
- });
41
- this.#leases.get(lease)?.();
42
- }
43
- }
44
- /** Process-local credential store with per-key refresh locks. */
45
- export class MemoryCredentialStore {
46
- locks;
47
- #tokens = new Map();
48
- constructor(locks = new MemoryLockAdapter()) {
49
- this.locks = locks;
50
- }
51
- async load(key) {
52
- const token = this.#tokens.get(key);
53
- logger.debug("loaded memory credential", {
54
- credential: credentialId(key),
55
- token: tokenMetadata(token),
56
- });
57
- return token ? structuredClone(token) : undefined;
58
- }
59
- async prepareWrite() { }
60
- async save(key, token) {
61
- this.#tokens.set(key, structuredClone(token));
62
- logger.debug("saved memory credential", {
63
- credential: credentialId(key),
64
- token: tokenMetadata(token),
65
- });
66
- }
67
- async remove(key) {
68
- this.#tokens.delete(key);
69
- logger.debug("removed memory credential", { credential: credentialId(key) });
70
- }
71
- acquireLock(key, timeoutMs) {
72
- return this.locks.acquire(key, timeoutMs);
73
- }
74
- releaseLock(lease) {
75
- return this.locks.release(lease);
76
- }
77
- name() {
78
- return "memory";
79
- }
80
- }
81
- async function withTimeout(promise, timeoutMs, message) {
82
- if (!Number.isFinite(timeoutMs) || timeoutMs < 0)
83
- throw new TypeError("timeoutMs must be non-negative");
84
- let timeout;
85
- try {
86
- return await Promise.race([
87
- promise,
88
- new Promise((_, reject) => {
89
- timeout = setTimeout(() => reject(new Error(message)), timeoutMs);
90
- }),
91
- ]);
92
- }
93
- finally {
94
- if (timeout)
95
- clearTimeout(timeout);
96
- }
97
- }
98
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zdG9yYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUd4RSxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUU1Qyx3RUFBd0U7QUFDeEUsTUFBTSxPQUFPLGlCQUFpQjtJQUNuQixNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQXlCLENBQUM7SUFDMUMsT0FBTyxHQUFHLElBQUksR0FBRyxFQUFzQixDQUFDO0lBQ2pELFNBQVMsR0FBRyxDQUFDLENBQUM7SUFFZCxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQVcsRUFBRSxTQUFpQjtRQUMxQyxNQUFNLFVBQVUsR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDckMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzNELElBQUksT0FBb0IsQ0FBQztRQUN6QixNQUFNLE9BQU8sR0FBRyxJQUFJLE9BQU8sQ0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQzVDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDcEIsQ0FBQyxDQUFDLENBQUM7UUFDSCxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMzQixJQUFJLENBQUM7WUFDSCxNQUFNLENBQUMsS0FBSyxDQUFDLHlCQUF5QixFQUFFLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7WUFDbkUsTUFBTSxXQUFXLENBQUMsUUFBUSxF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QUFFLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDL0UsQ0FBQztJQUVELFdBQVcsQ0FBQyxHQUFXLEVBQUUsU0FBaUI7UUFDeEMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFhO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELElBQUk7UUFDRixPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0NBQ0Y7QUFFRCxLQUFLLFVBQVUsV0FBVyxDQUFJLE9BQW1CLEVBQUUsU0FBaUIsRUFBRSxPQUFlO0lBQ25GLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLFNBQVMsR0FBRyxDQUFDO1FBQzlDLE1BQU0sSUFBSSxTQUFTLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztJQUN4RCxJQUFJLE9BQWtELENBQUM7SUFDdkQsSUFBSSxDQUFDO1FBQ0gsT0FBTyxNQUFNLE9BQU8sQ0FBQyxJQUFJLENBQUM7WUFDeEIsT0FBTztZQUNQLElBQUksT0FBTyxDQUFRLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFO2dCQUMvQixPQUFPLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQ3BFLENBQUMsQ0FBQztTQUNILENBQUMsQ0FBQztJQUNMLENBQUM7WUFBUyxDQUFDO1FBQ1QsSUFBSSxPQUFPO1lBQUUsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3JDLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYXV0aExvZ2dlciwgY3JlZGVudGlhbElkLCB0b2tlbk1ldGFkYXRhIH0gZnJvbSBcIi4vX2xvZ2dpbmcudHNcIjtcbmltcG9ydCB0eXBlIHsgQ3JlZGVudGlhbFN0b3JlLCBMb2NrQWRhcHRlciwgVG9rZW4gfSBmcm9tIFwiLi90eXBlcy50c1wiO1xuXG5jb25zdCBsb2dnZXIgPSBhdXRoTG9nZ2VyKFwibWVtb3J5LXN0b3JhZ2VcIik7XG5cbi8qKiBQcm9jZXNzLWxvY2FsIGdlbmVyaWMgbGVhc2UgcmVnaXN0cnkgdXNlZCBieSB0aGUgaW4tbWVtb3J5IHN0b3JlLiAqL1xuZXhwb3J0IGNsYXNzIE1lbW9yeUxvY2tBZGFwdGVyIGltcGxlbWVudHMgTG9ja0FkYXB0ZXIge1xuICByZWFkb25seSAjdGFpbHMgPSBuZXcgTWFwPHN0cmluZywgUHJvbWlzZTx2b2lkPj4oKTtcbiAgcmVhZG9ubHkgI2xlYXNlcyA9IG5ldyBNYXA8c3RyaW5nLCAoKSA9PiB2b2lkPigpO1xuICAjc2VxdWVuY2UgPSAwO1xuXG4gIGFzeW5jIGFjcXVpcmUoa2V5OiBzdHJpbmcsIHRpbWVvdXRNczogbnVtYmVyKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBjcmVkZW50aWFsID0gY3JlZGVudGlhbElkKGtleSk7XG4gICAgY29uc3QgcHJldmlvdXMgPSB0aGlzLiN0YWlscy5nZXQoa2V5KSA/PyBQcm9taXNlLnJlc29sdmUoKTtcbiAgICBsZXQgcmVsZWFzZSE6ICgpID0+IHZvaWQ7XG4gICAgY29uc3QgY3VycmVudCA9IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG4gICAgICByZWxlYXNlID0gcmVzb2x2ZTtcbiAgICB9KTtcbiAgICBjb25zdCB0YWlsID0gcHJldmlvdXMudGhlbigoKSA9PiBjdXJyZW50KTtcbiAgICB0aGlzLiN0YWlscy5zZXQoa2V5LCB0YWlsKTtcbiAgICB0cnkge1xuICAgICAgbG9nZ2VyLmRlYnVnKFwid2FpdGluZyBmb3IgbWVtb3J5IGxvY2tcIiwgeyBjcmVkZW50aWFsLCB0aW1lb3V0TXMgfSk7XG4gICAgICBhd2FpdCB3aXRoVGltZW91dChwcmV2aW91cywgdGltZW91dE1zLCBgVGltZWQgb3V0IHdhaXRpbmcgZm9yIGxvY2sgJHtrZXl9YCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJlbGVhc2UoKTtcbiAgICAgIGlmICh0aGlzLiN0YWlscy5nZXQoa2V5KSA9PT0gdGFpbCkgdGhpcy4jdGFpbHMuZGVsZXRlKGtleSk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gICAgY29uc3QgbGVhc2UgPSBgJHsrK3RoaXMuI3NlcXVlbmNlfToke2tleX1gO1xuICAgIHRoaXMuI2xlYXNlcy5zZXQobGVhc2UsICgpID0+IHtcbiAgICAgIHJlbGVhc2UoKTtcbiAgICAgIHRoaXMuI2xlYXNlcy5kZWxldGUobGVhc2UpO1xuICAgICAgaWYgKHRoaXMuI3RhaWxzLmdldChrZXkpID09PSB0YWlsKSB0aGlzLiN0YWlscy5kZWxldGUoa2V5KTtcbiAgICB9KTtcbiAgICBsb2dnZXIuZGVidWcoXCJtZW1vcnkgbG9jayBhY3F1aXJlZFwiLCB7IGNyZWRlbnRpYWwgfSk7XG4gICAgcmV0dXJuIGxlYXNlO1xuICB9XG5cbiAgYXN5bmMgcmVsZWFzZShsZWFzZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgbG9nZ2VyLmRlYnVnKFwicmVsZWFzaW5nIG1lbW9yeSBsb2NrXCIsIHtcbiAgICAgIGNyZWRlbnRpYWw6IGNyZWRlbnRpYWxJZChsZWFzZS5zcGxpdChcIjpcIikuc2xpY2UoMSkuam9pbihcIjpcIikpLFxuICAgIH0pO1xuICAgIHRoaXMuI2xlYXNlcy5nZXQobGVhc2UpPy4oKTtcbiAgfVxufVxuXG4vKiogUHJvY2Vzcy1sb2NhbCBjcmVkZW50aWFsIHN0b3JlIHdpdGggcGVyLWtleSByZWZyZXNoIGxvY2tzLiAqL1xuZXhwb3J0IGNsYXNzIE1lbW9yeUNyZWRlbnRpYWxTdG9yZSBpbXBsZW1lbnRzIENyZWRlbnRpYWxTdG9yZSB7XG4gIHJlYWRvbmx5ICN0b2tlbnMgPSBuZXcgTWFwPHN0cmluZywgVG9rZW4+KCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBsb2NrczogTG9ja0FkYXB0ZXIgPSBuZXcgTWVtb3J5TG9ja0FkYXB0ZXIoKSkge31cblxuICBhc3luYyBsb2FkKGtleTogc3RyaW5nKTogUHJvbWlzZTxUb2tlbiB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IHRva2VuID0gdGhpcy4jdG9rZW5zLmdldChrZXkpO1xuICAgIGxvZ2dlci5kZWJ1ZyhcImxvYWRlZCBtZW1vcnkgY3JlZGVudGlhbFwiLCB7XG4gICAgICBjcmVkZW50aWFsOiBjcmVkZW50aWFsSWQoa2V5KSxcbiAgICAgIHRva2VuOiB0b2tlbk1ldGFkYXRhKHRva2VuKSxcbiAgICB9KTtcbiAgICByZXR1cm4gdG9rZW4gPyBzdHJ1Y3R1cmVkQ2xvbmUodG9rZW4pIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgYXN5bmMgcHJlcGFyZVdyaXRlKCk6IFByb21pc2U8dm9pZD4ge31cblxuICBhc3luYyBzYXZlKGtleTogc3RyaW5nLCB0b2tlbjogVG9rZW4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLiN0b2tlbnMuc2V0KGtleSwgc3RydWN0dXJlZENsb25lKHRva2VuKSk7XG4gICAgbG9nZ2VyLmRlYnVnKFwic2F2ZWQgbWVtb3J5IGNyZWRlbnRpYWxcIiwge1xuICAgICAgY3JlZGVudGlhbDogY3JlZGVudGlhbElkKGtleSksXG4gICAgICB0b2tlbjogdG9rZW5NZXRhZGF0YSh0b2tlbiksXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyByZW1vdmUoa2V5OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLiN0b2tlbnMuZGVsZXRlKGtleSk7XG4gICAgbG9nZ2VyLmRlYnVnKFwicmVtb3ZlZCBtZW1vcnkgY3JlZGVudGlhbFwiLCB7IGNyZWRlbnRpYWw6IGNyZWRlbnRpYWxJZChrZXkpIH0pO1xuICB9XG5cbiAgYWNxdWlyZUxvY2soa2V5OiBzdHJpbmcsIHRpbWVvdXRNczogbnVtYmVyKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5sb2Nrcy5hY3F1aXJlKGtleSwgdGltZW91dE1zKTtcbiAgfVxuXG4gIHJlbGVhc2VMb2NrKGxlYXNlOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5sb2Nrcy5yZWxlYXNlKGxlYXNlKTtcbiAgfVxuXG4gIG5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJtZW1vcnlcIjtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiB3aXRoVGltZW91dDxUPihwcm9taXNlOiBQcm9taXNlPFQ+LCB0aW1lb3V0TXM6IG51bWJlciwgbWVzc2FnZTogc3RyaW5nKTogUHJvbWlzZTxUPiB7XG4gIGlmICghTnVtYmVyLmlzRmluaXRlKHRpbWVvdXRNcykgfHwgdGltZW91dE1zIDwgMClcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwidGltZW91dE1zIG11c3QgYmUgbm9uLW5lZ2F0aXZlXCIpO1xuICBsZXQgdGltZW91dDogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCB1bmRlZmluZWQ7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICBwcm9taXNlLFxuICAgICAgbmV3IFByb21pc2U8bmV2ZXI+KChfLCByZWplY3QpID0+IHtcbiAgICAgICAgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gcmVqZWN0KG5ldyBFcnJvcihtZXNzYWdlKSksIHRpbWVvdXRNcyk7XG4gICAgICB9KSxcbiAgICBdKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBpZiAodGltZW91dCkgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICB9XG59XG4iXX0=
@@ -1,157 +0,0 @@
1
- /** Authentication strategy selected from Databricks configuration. */
2
- export declare enum AuthKind {
3
- UserToMachine = "user-to-machine",
4
- MachineToMachine = "machine-to-machine",
5
- PersonalAccessToken = "personal-access-token",
6
- AppServicePrincipal = "app-service-principal",
7
- AppOnBehalfOf = "app-on-behalf-of"
8
- }
9
- /** Scope of the Databricks authentication target. */
10
- export declare enum TargetKind {
11
- Workspace = "workspace",
12
- Account = "account",
13
- Unified = "unified"
14
- }
15
- /** Built-in credential storage backend. */
16
- export declare enum Storage {
17
- Auto = "auto",
18
- Memory = "memory",
19
- File = "file"
20
- }
21
- /** File organization used by a persistent credential store. */
22
- export declare enum FileLayout {
23
- Single = "single",
24
- PerCredential = "per-credential"
25
- }
26
- /** Stored OAuth credential, including renewal metadata. */
27
- export interface Token {
28
- accessToken: string;
29
- tokenType: string;
30
- refreshToken?: string;
31
- expiry?: string;
32
- scopes: string[];
33
- }
34
- /** Public credential result; deliberately excludes the refresh token. */
35
- export interface AccessToken {
36
- accessToken: string;
37
- tokenType: string;
38
- expiry?: string;
39
- scopes: string[];
40
- }
41
- /** Shared lifecycle configuration embedded by every provider. */
42
- export interface AuthOptions {
43
- refreshBufferSeconds: number;
44
- lockTimeoutSeconds: number;
45
- loginTimeoutSeconds: number;
46
- }
47
- /** Record-style factory retained for straightforward Node/Python bridging. */
48
- export declare const AuthOptions: {
49
- create(options?: Partial<AuthOptions>): AuthOptions;
50
- defaults(): Readonly<AuthOptions>;
51
- };
52
- /** Secret-free metadata discovered from one Databricks CLI profile. */
53
- export interface DatabricksProfileSummary {
54
- name: string;
55
- host?: string;
56
- accountId?: string;
57
- workspaceId?: string;
58
- target: TargetKind;
59
- authKind: AuthKind;
60
- }
61
- /** Resolved Databricks identity and active storage backend. */
62
- export interface DatabricksAuthStatus {
63
- profile: string;
64
- host: string;
65
- storage: Storage;
66
- }
67
- /** Public Databricks authentication options. */
68
- export interface DatabricksAuthOptions {
69
- profile?: string;
70
- host?: string;
71
- accountId?: string;
72
- workspaceId?: string;
73
- configFile?: string;
74
- clientId?: string;
75
- clientSecret?: string;
76
- accessToken?: string;
77
- groupId?: string;
78
- authType?: string;
79
- scopes?: string[];
80
- target?: string;
81
- cacheDir?: string;
82
- auth?: AuthOptions;
83
- requestHeaders?: Record<string, string>;
84
- accessTokenHeader?: string;
85
- installCliInApp?: boolean;
86
- preferUserToMachine: boolean;
87
- }
88
- /** Record-style factory retained for callers migrating from generated bindings. */
89
- export declare const DatabricksAuthOptions: {
90
- create(options?: Partial<DatabricksAuthOptions>): DatabricksAuthOptions;
91
- defaults(): Readonly<DatabricksAuthOptions>;
92
- };
93
- /** Resolved profile with secrets retained only for provider construction. */
94
- export interface DatabricksProfile extends DatabricksProfileSummary {
95
- host: string;
96
- authType?: string;
97
- clientId: string;
98
- groupId?: string;
99
- scopes: string[];
100
- clientSecret?: string;
101
- accessToken?: string;
102
- cacheKey: string;
103
- principal: string;
104
- }
105
- /** Cross-language lease adapter; implementations may use files, databases, or FFI. */
106
- export interface LockAdapter {
107
- acquire(key: string, timeoutMs: number): Promise<string>;
108
- release(lease: string): Promise<void>;
109
- }
110
- /** Cross-language credential persistence contract. */
111
- export interface CredentialStore {
112
- load(key: string): Promise<Token | undefined>;
113
- prepareWrite(): Promise<void>;
114
- save(key: string, token: Token): Promise<void>;
115
- remove(key: string): Promise<void>;
116
- acquireLock(key: string, timeoutMs: number): Promise<string>;
117
- releaseLock(lease: string): Promise<void>;
118
- name(): string;
119
- }
120
- /** Provider-specific token acquisition. */
121
- export interface TokenProvider {
122
- authenticate(timeoutMs: number): Promise<Token>;
123
- login(timeoutMs: number): Promise<Token>;
124
- refresh(token: Token): Promise<Token>;
125
- canAuthenticateSilently(): boolean;
126
- }
127
- /** Stable facade shared by Node, the CLI, and generated language bindings. */
128
- export interface AuthClient {
129
- challenge(): Promise<void>;
130
- token(login?: boolean): Promise<AccessToken>;
131
- authenticate(login?: boolean): Promise<Record<string, string>>;
132
- authorizationHeaderForUrl(requestUrl: string, login?: boolean): Promise<string | undefined>;
133
- requestHeadersForUrl(requestUrl: string, login?: boolean): Promise<Record<string, string>>;
134
- forceRefreshToken(login?: boolean): Promise<AccessToken>;
135
- refreshRejectedToken(staleAccessToken: string, login?: boolean): Promise<AccessToken>;
136
- logout(): Promise<void>;
137
- status(): DatabricksAuthStatus;
138
- principal(): string;
139
- workspaceId(): string | undefined;
140
- authKind(): AuthKind;
141
- profile(name?: string): DatabricksProfileSummary;
142
- listProfiles(refresh?: boolean): DatabricksProfileSummary[];
143
- }
144
- /** Public OAuth client used by Databricks CLI-compatible user authentication. */
145
- export declare const DEFAULT_CLIENT_ID = "databricks-cli";
146
- /** Default Databricks profile configuration path. */
147
- export declare const DEFAULT_CONFIG_FILE = "~/.databrickscfg";
148
- /** Default Databricks account console origin. */
149
- export declare const DEFAULT_ACCOUNTS_HOST = "https://accounts.cloud.databricks.com";
150
- /** Canonical request header carrying a bearer access token. */
151
- export declare const DEFAULT_ACCESS_TOKEN_HEADER = "authorization";
152
- /** Canonical request header carrying the resolved Databricks workspace ID. */
153
- export declare const WORKSPACE_ID_HEADER = "x-databricks-workspace-id";
154
- /** Authentication type for Databricks App on-behalf-of request credentials. */
155
- export declare const AUTH_TYPE_APP_OBO = "app_obo";
156
- /** Authentication type for Databricks App service-principal credentials. */
157
- export declare const AUTH_TYPE_APP_SP = "app_sp";
package/lib/src/types.js DELETED
@@ -1,67 +0,0 @@
1
- /** Authentication strategy selected from Databricks configuration. */
2
- export var AuthKind;
3
- (function (AuthKind) {
4
- AuthKind["UserToMachine"] = "user-to-machine";
5
- AuthKind["MachineToMachine"] = "machine-to-machine";
6
- AuthKind["PersonalAccessToken"] = "personal-access-token";
7
- AuthKind["AppServicePrincipal"] = "app-service-principal";
8
- AuthKind["AppOnBehalfOf"] = "app-on-behalf-of";
9
- })(AuthKind || (AuthKind = {}));
10
- /** Scope of the Databricks authentication target. */
11
- export var TargetKind;
12
- (function (TargetKind) {
13
- TargetKind["Workspace"] = "workspace";
14
- TargetKind["Account"] = "account";
15
- TargetKind["Unified"] = "unified";
16
- })(TargetKind || (TargetKind = {}));
17
- /** Built-in credential storage backend. */
18
- export var Storage;
19
- (function (Storage) {
20
- Storage["Auto"] = "auto";
21
- Storage["Memory"] = "memory";
22
- Storage["File"] = "file";
23
- })(Storage || (Storage = {}));
24
- /** File organization used by a persistent credential store. */
25
- export var FileLayout;
26
- (function (FileLayout) {
27
- FileLayout["Single"] = "single";
28
- FileLayout["PerCredential"] = "per-credential";
29
- })(FileLayout || (FileLayout = {}));
30
- const AUTH_DEFAULTS = {
31
- refreshBufferSeconds: 300,
32
- lockTimeoutSeconds: 30,
33
- loginTimeoutSeconds: 900,
34
- };
35
- /** Record-style factory retained for straightforward Node/Python bridging. */
36
- export const AuthOptions = {
37
- create(options = {}) {
38
- return { ...AUTH_DEFAULTS, ...options };
39
- },
40
- defaults() {
41
- return Object.freeze({ ...AUTH_DEFAULTS });
42
- },
43
- };
44
- /** Record-style factory retained for callers migrating from generated bindings. */
45
- export const DatabricksAuthOptions = {
46
- create(options = {}) {
47
- return { preferUserToMachine: true, ...options };
48
- },
49
- defaults() {
50
- return Object.freeze({ preferUserToMachine: true });
51
- },
52
- };
53
- /** Public OAuth client used by Databricks CLI-compatible user authentication. */
54
- export const DEFAULT_CLIENT_ID = "databricks-cli";
55
- /** Default Databricks profile configuration path. */
56
- export const DEFAULT_CONFIG_FILE = "~/.databrickscfg";
57
- /** Default Databricks account console origin. */
58
- export const DEFAULT_ACCOUNTS_HOST = "https://accounts.cloud.databricks.com";
59
- /** Canonical request header carrying a bearer access token. */
60
- export const DEFAULT_ACCESS_TOKEN_HEADER = "authorization";
61
- /** Canonical request header carrying the resolved Databricks workspace ID. */
62
- export const WORKSPACE_ID_HEADER = "x-databricks-workspace-id";
63
- /** Authentication type for Databricks App on-behalf-of request credentials. */
64
- export const AUTH_TYPE_APP_OBO = "app_obo";
65
- /** Authentication type for Databricks App service-principal credentials. */
66
- export const AUTH_TYPE_APP_SP = "app_sp";
67
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsc0VBQXNFO0FBQ3RFLE1BQU0sQ0FBTixJQUFZLFFBTVg7QUFORCxXQUFZLFFBQVE7SUFDbEIsNkNBQWlDLENBQUE7SUFDakMsbURBQXVDLENBQUE7SUFDdkMseURBQTZDLENBQUE7SUFDN0MseURBQTZDLENBQUE7SUFDN0MsOENBQWtDLENBQUE7QUFDcEMsQ0FBQyxFQU5XLFFBQVEsS0FBUixRQUFRLFFBTW5CO0FBRUQscURBQXFEO0FBQ3JELE1BQU0sQ0FBTixJQUFZLFVBSVg7QUFKRCxXQUFZLFVBQVU7SUFDcEIscUNBQXVCLENBQUE7SUFDdkIsaUNBQW1CLENBQUE7SUFDbkIsaUNBQW1CLENBQUE7QUFDckIsQ0FBQyxFQUpXLFVBQVUsS0FBVixVQUFVLFFBSXJCO0FBRUQsMkNBQTJDO0FBQzNDLE1BQU0sQ0FBTixJQUFZLE9BSVg7QUFKRCxXQUFZLE9BQU87SUFDakIsd0JBQWEsQ0FBQTtJQUNiLDRCQUFpQixDQUFBO0lBQ2pCLHdCQUFhLENBQUE7QUFDZixDQUFDLEVBSlcsT0FBTyxLQUFQLE9BQU8sUUFJbEI7QUFFRCwrREFBK0Q7QUFDL0QsTUFBTSxDQUFOLElBQVksVUFHWDtBQUhELFdBQVksVUFBVTtJQUNwQiwrQkFBaUIsQ0FBQTtJQUNqQiw4Q0FBZ0MsQ0FBQTtBQUNsQyxDQUFDLEVBSFcsVUFBVSxLQUFWLFVBQVUsUUFHckI7QUEwQkQsTUFBTSxhQUFhLEdBQWdCO0lBQ2pDLG9CQUFvQixFQUFFLEdBQUc7SUFDekIsa0JBQWtCLEVBQUUsRUFBRTtJQUN0QixtQkFBbUIsRUFBRSxHQUFHO0NBQ3pCLENBQUM7QUFFRiw4RUFBOEU7QUFDOUUsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHO0lBQ3pCLE1BQU0sQ0FBQyxVQUFnQyxFQUFFO1FBQ3ZDLE9BQU8sRUFBRSxHQUFHLGFBQWEsRUFBRSxHQUFHLE9BQU8sRUFBRSxDQUFDO0lBQzFDLENBQUM7SUFDRCxRQUFRO1FBQ04sT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxhQUFhLEVBQUUsQ0FBQyxDQUFDO0lBQzdDLENBQUM7Q0FDRixDQUFDO0FBeUNGLG1GQUFtRjtBQUNuRixNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRztJQUNuQyxNQUFNLENBQUMsVUFBMEMsRUFBRTtRQUNqRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsSUFBSSxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUM7SUFDbkQsQ0FBQztJQUNELFFBQVE7UUFDTixPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxtQkFBbUIsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3RELENBQUM7Q0FDRixDQUFDO0FBMERGLGlGQUFpRjtBQUNqRixNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxnQkFBZ0IsQ0FBQztBQUNsRCxxREFBcUQ7QUFDckQsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsa0JBQWtCLENBQUM7QUFDdEQsaURBQWlEO0FBQ2pELE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLHVDQUF1QyxDQUFDO0FBQzdFLCtEQUErRDtBQUMvRCxNQUFNLENBQUMsTUFBTSwyQkFBMkIsR0FBRyxlQUFlLENBQUM7QUFDM0QsOEVBQThFO0FBQzlFLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLDJCQUEyQixDQUFDO0FBQy9ELCtFQUErRTtBQUMvRSxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxTQUFTLENBQUM7QUFDM0MsNEVBQTRFO0FBQzVFLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBBdXRoZW50aWNhdGlvbiBzdHJhdGVneSBzZWxlY3RlZCBmcm9tIERhdGFicmlja3MgY29uZmlndXJhdGlvbi4gKi9cbmV4cG9ydCBlbnVtIEF1dGhLaW5kIHtcbiAgVXNlclRvTWFjaGluZSA9IFwidXNlci10by1tYWNoaW5lXCIsXG4gIE1hY2hpbmVUb01hY2hpbmUgPSBcIm1hY2hpbmUtdG8tbWFjaGluZVwiLFxuICBQZXJzb25hbEFjY2Vzc1Rva2VuID0gXCJwZXJzb25hbC1hY2Nlc3MtdG9rZW5cIixcbiAgQXBwU2VydmljZVByaW5jaXBhbCA9IFwiYXBwLXNlcnZpY2UtcHJpbmNpcGFsXCIsXG4gIEFwcE9uQmVoYWxmT2YgPSBcImFwcC1vbi1iZWhhbGYtb2ZcIixcbn1cblxuLyoqIFNjb3BlIG9mIHRoZSBEYXRhYnJpY2tzIGF1dGhlbnRpY2F0aW9uIHRhcmdldC4gKi9cbmV4cG9ydCBlbnVtIFRhcmdldEtpbmQge1xuICBXb3Jrc3BhY2UgPSBcIndvcmtzcGFjZVwiLFxuICBBY2NvdW50ID0gXCJhY2NvdW50XCIsXG4gIFVuaWZpZWQgPSBcInVuaWZpZWRcIixcbn1cblxuLyoqIEJ1aWx0LWluIGNyZWRlbnRpYWwgc3RvcmFnZSBiYWNrZW5kLiAqL1xuZXhwb3J0IGVudW0gU3RvcmFnZSB7XG4gIEF1dG8gPSBcImF1dG9cIixcbiAgTWVtb3J5ID0gXCJtZW1vcnlcIixcbiAgRmlsZSA9IFwiZmlsZVwiLFxufVxuXG4vKiogRmlsZSBvcmdhbml6YXRpb24gdXNlZCBieSBhIHBlcnNpc3RlbnQgY3JlZGVudGlhbCBzdG9yZS4gKi9cbmV4cG9ydCBlbnVtIEZpbGVMYXlvdXQge1xuICBTaW5nbGUgPSBcInNpbmdsZVwiLFxuICBQZXJDcmVkZW50aWFsID0gXCJwZXItY3JlZGVudGlhbFwiLFxufVxuXG4vKiogU3RvcmVkIE9BdXRoIGNyZWRlbnRpYWwsIGluY2x1ZGluZyByZW5ld2FsIG1ldGFkYXRhLiAqL1xuZXhwb3J0IGludGVyZmFjZSBUb2tlbiB7XG4gIGFjY2Vzc1Rva2VuOiBzdHJpbmc7XG4gIHRva2VuVHlwZTogc3RyaW5nO1xuICByZWZyZXNoVG9rZW4/OiBzdHJpbmc7XG4gIGV4cGlyeT86IHN0cmluZztcbiAgc2NvcGVzOiBzdHJpbmdbXTtcbn1cblxuLyoqIFB1YmxpYyBjcmVkZW50aWFsIHJlc3VsdDsgZGVsaWJlcmF0ZWx5IGV4Y2x1ZGVzIHRoZSByZWZyZXNoIHRva2VuLiAqL1xuZXhwb3J0IGludGVyZmFjZSBBY2Nlc3NUb2tlbiB7XG4gIGFjY2Vzc1Rva2VuOiBzdHJpbmc7XG4gIHRva2VuVHlwZTogc3RyaW5nO1xuICBleHBpcnk/OiBzdHJpbmc7XG4gIHNjb3Blczogc3RyaW5nW107XG59XG5cbi8qKiBTaGFyZWQgbGlmZWN5Y2xlIGNvbmZpZ3VyYXRpb24gZW1iZWRkZWQgYnkgZXZlcnkgcHJvdmlkZXIuICovXG5leHBvcnQgaW50ZXJmYWNlIEF1dGhPcHRpb25zIHtcbiAgcmVmcmVzaEJ1ZmZlclNlY29uZHM6IG51bWJlcjtcbiAgbG9ja1RpbWVvdXRTZWNvbmRzOiBudW1iZXI7XG4gIGxvZ2luVGltZW91dFNlY29uZHM6IG51bWJlcjtcbn1cblxuY29uc3QgQVVUSF9ERUZBVUxUUzogQXV0aE9wdGlvbnMgPSB7XG4gIHJlZnJlc2hCdWZmZXJTZWNvbmRzOiAzMDAsXG4gIGxvY2tUaW1lb3V0U2Vjb25kczogMzAsXG4gIGxvZ2luVGltZW91dFNlY29uZHM6IDkwMCxcbn07XG5cbi8qKiBSZWNvcmQtc3R5bGUgZmFjdG9yeSByZXRhaW5lZCBmb3Igc3RyYWlnaHRmb3J3YXJkIE5vZGUvUHl0aG9uIGJyaWRnaW5nLiAqL1xuZXhwb3J0IGNvbnN0IEF1dGhPcHRpb25zID0ge1xuICBjcmVhdGUob3B0aW9uczogUGFydGlhbDxBdXRoT3B0aW9ucz4gPSB7fSk6IEF1dGhPcHRpb25zIHtcbiAgICByZXR1cm4geyAuLi5BVVRIX0RFRkFVTFRTLCAuLi5vcHRpb25zIH07XG4gIH0sXG4gIGRlZmF1bHRzKCk6IFJlYWRvbmx5PEF1dGhPcHRpb25zPiB7XG4gICAgcmV0dXJuIE9iamVjdC5mcmVlemUoeyAuLi5BVVRIX0RFRkFVTFRTIH0pO1xuICB9LFxufTtcblxuLyoqIFNlY3JldC1mcmVlIG1ldGFkYXRhIGRpc2NvdmVyZWQgZnJvbSBvbmUgRGF0YWJyaWNrcyBDTEkgcHJvZmlsZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YWJyaWNrc1Byb2ZpbGVTdW1tYXJ5IHtcbiAgbmFtZTogc3RyaW5nO1xuICBob3N0Pzogc3RyaW5nO1xuICBhY2NvdW50SWQ/OiBzdHJpbmc7XG4gIHdvcmtzcGFjZUlkPzogc3RyaW5nO1xuICB0YXJnZXQ6IFRhcmdldEtpbmQ7XG4gIGF1dGhLaW5kOiBBdXRoS2luZDtcbn1cblxuLyoqIFJlc29sdmVkIERhdGFicmlja3MgaWRlbnRpdHkgYW5kIGFjdGl2ZSBzdG9yYWdlIGJhY2tlbmQuICovXG5leHBvcnQgaW50ZXJmYWNlIERhdGFicmlja3NBdXRoU3RhdHVzIHtcbiAgcHJvZmlsZTogc3RyaW5nO1xuICBob3N0OiBzdHJpbmc7XG4gIHN0b3JhZ2U6IFN0b3JhZ2U7XG59XG5cbi8qKiBQdWJsaWMgRGF0YWJyaWNrcyBhdXRoZW50aWNhdGlvbiBvcHRpb25zLiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhYnJpY2tzQXV0aE9wdGlvbnMge1xuICBwcm9maWxlPzogc3RyaW5nO1xuICBob3N0Pzogc3RyaW5nO1xuICBhY2NvdW50SWQ/OiBzdHJpbmc7XG4gIHdvcmtzcGFjZUlkPzogc3RyaW5nO1xuICBjb25maWdGaWxlPzogc3RyaW5nO1xuICBjbGllbnRJZD86IHN0cmluZztcbiAgY2xpZW50U2VjcmV0Pzogc3RyaW5nO1xuICBhY2Nlc3NUb2tlbj86IHN0cmluZztcbiAgZ3JvdXBJZD86IHN0cmluZztcbiAgYXV0aFR5cGU/OiBzdHJpbmc7XG4gIHNjb3Blcz86IHN0cmluZ1tdO1xuICB0YXJnZXQ/OiBzdHJpbmc7XG4gIGNhY2hlRGlyPzogc3RyaW5nO1xuICBhdXRoPzogQXV0aE9wdGlvbnM7XG4gIHJlcXVlc3RIZWFkZXJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgYWNjZXNzVG9rZW5IZWFkZXI/OiBzdHJpbmc7XG4gIGluc3RhbGxDbGlJbkFwcD86IGJvb2xlYW47XG4gIHByZWZlclVzZXJUb01hY2hpbmU6IGJvb2xlYW47XG59XG5cbi8qKiBSZWNvcmQtc3R5bGUgZmFjdG9yeSByZXRhaW5lZCBmb3IgY2FsbGVycyBtaWdyYXRpbmcgZnJvbSBnZW5lcmF0ZWQgYmluZGluZ3MuICovXG5leHBvcnQgY29uc3QgRGF0YWJyaWNrc0F1dGhPcHRpb25zID0ge1xuICBjcmVhdGUob3B0aW9uczogUGFydGlhbDxEYXRhYnJpY2tzQXV0aE9wdGlvbnM+ID0ge30pOiBEYXRhYnJpY2tzQXV0aE9wdGlvbnMge1xuICAgIHJldHVybiB7IHByZWZlclVzZXJUb01hY2hpbmU6IHRydWUsIC4uLm9wdGlvbnMgfTtcbiAgfSxcbiAgZGVmYXVsdHMoKTogUmVhZG9ubHk8RGF0YWJyaWNrc0F1dGhPcHRpb25zPiB7XG4gICAgcmV0dXJuIE9iamVjdC5mcmVlemUoeyBwcmVmZXJVc2VyVG9NYWNoaW5lOiB0cnVlIH0pO1xuICB9LFxufTtcblxuLyoqIFJlc29sdmVkIHByb2ZpbGUgd2l0aCBzZWNyZXRzIHJldGFpbmVkIG9ubHkgZm9yIHByb3ZpZGVyIGNvbnN0cnVjdGlvbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YWJyaWNrc1Byb2ZpbGUgZXh0ZW5kcyBEYXRhYnJpY2tzUHJvZmlsZVN1bW1hcnkge1xuICBob3N0OiBzdHJpbmc7XG4gIGF1dGhUeXBlPzogc3RyaW5nO1xuICBjbGllbnRJZDogc3RyaW5nO1xuICBncm91cElkPzogc3RyaW5nO1xuICBzY29wZXM6IHN0cmluZ1tdO1xuICBjbGllbnRTZWNyZXQ/OiBzdHJpbmc7XG4gIGFjY2Vzc1Rva2VuPzogc3RyaW5nO1xuICBjYWNoZUtleTogc3RyaW5nO1xuICBwcmluY2lwYWw6IHN0cmluZztcbn1cblxuLyoqIENyb3NzLWxhbmd1YWdlIGxlYXNlIGFkYXB0ZXI7IGltcGxlbWVudGF0aW9ucyBtYXkgdXNlIGZpbGVzLCBkYXRhYmFzZXMsIG9yIEZGSS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9ja0FkYXB0ZXIge1xuICBhY3F1aXJlKGtleTogc3RyaW5nLCB0aW1lb3V0TXM6IG51bWJlcik6IFByb21pc2U8c3RyaW5nPjtcbiAgcmVsZWFzZShsZWFzZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPjtcbn1cblxuLyoqIENyb3NzLWxhbmd1YWdlIGNyZWRlbnRpYWwgcGVyc2lzdGVuY2UgY29udHJhY3QuICovXG5leHBvcnQgaW50ZXJmYWNlIENyZWRlbnRpYWxTdG9yZSB7XG4gIGxvYWQoa2V5OiBzdHJpbmcpOiBQcm9taXNlPFRva2VuIHwgdW5kZWZpbmVkPjtcbiAgcHJlcGFyZVdyaXRlKCk6IFByb21pc2U8dm9pZD47XG4gIHNhdmUoa2V5OiBzdHJpbmcsIHRva2VuOiBUb2tlbik6IFByb21pc2U8dm9pZD47XG4gIHJlbW92ZShrZXk6IHN0cmluZyk6IFByb21pc2U8dm9pZD47XG4gIGFjcXVpcmVMb2NrKGtleTogc3RyaW5nLCB0aW1lb3V0TXM6IG51bWJlcik6IFByb21pc2U8c3RyaW5nPjtcbiAgcmVsZWFzZUxvY2sobGVhc2U6IHN0cmluZyk6IFByb21pc2U8dm9pZD47XG4gIG5hbWUoKTogc3RyaW5nO1xufVxuXG4vKiogUHJvdmlkZXItc3BlY2lmaWMgdG9rZW4gYWNxdWlzaXRpb24uICovXG5leHBvcnQgaW50ZXJmYWNlIFRva2VuUHJvdmlkZXIge1xuICBhdXRoZW50aWNhdGUodGltZW91dE1zOiBudW1iZXIpOiBQcm9taXNlPFRva2VuPjtcbiAgbG9naW4odGltZW91dE1zOiBudW1iZXIpOiBQcm9taXNlPFRva2VuPjtcbiAgcmVmcmVzaCh0b2tlbjogVG9rZW4pOiBQcm9taXNlPFRva2VuPjtcbiAgY2FuQXV0aGVudGljYXRlU2lsZW50bHkoKTogYm9vbGVhbjtcbn1cblxuLyoqIFN0YWJsZSBmYWNhZGUgc2hhcmVkIGJ5IE5vZGUsIHRoZSBDTEksIGFuZCBnZW5lcmF0ZWQgbGFuZ3VhZ2UgYmluZGluZ3MuICovXG5leHBvcnQgaW50ZXJmYWNlIEF1dGhDbGllbnQge1xuICBjaGFsbGVuZ2UoKTogUHJvbWlzZTx2b2lkPjtcbiAgdG9rZW4obG9naW4/OiBib29sZWFuKTogUHJvbWlzZTxBY2Nlc3NUb2tlbj47XG4gIGF1dGhlbnRpY2F0ZShsb2dpbj86IGJvb2xlYW4pOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+O1xuICBhdXRob3JpemF0aW9uSGVhZGVyRm9yVXJsKHJlcXVlc3RVcmw6IHN0cmluZywgbG9naW4/OiBib29sZWFuKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+O1xuICByZXF1ZXN0SGVhZGVyc0ZvclVybChyZXF1ZXN0VXJsOiBzdHJpbmcsIGxvZ2luPzogYm9vbGVhbik6IFByb21pc2U8UmVjb3JkPHN0cmluZywgc3RyaW5nPj47XG4gIGZvcmNlUmVmcmVzaFRva2VuKGxvZ2luPzogYm9vbGVhbik6IFByb21pc2U8QWNjZXNzVG9rZW4+O1xuICByZWZyZXNoUmVqZWN0ZWRUb2tlbihzdGFsZUFjY2Vzc1Rva2VuOiBzdHJpbmcsIGxvZ2luPzogYm9vbGVhbik6IFByb21pc2U8QWNjZXNzVG9rZW4+O1xuICBsb2dvdXQoKTogUHJvbWlzZTx2b2lkPjtcbiAgc3RhdHVzKCk6IERhdGFicmlja3NBdXRoU3RhdHVzO1xuICBwcmluY2lwYWwoKTogc3RyaW5nO1xuICB3b3Jrc3BhY2VJZCgpOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGF1dGhLaW5kKCk6IEF1dGhLaW5kO1xuICBwcm9maWxlKG5hbWU/OiBzdHJpbmcpOiBEYXRhYnJpY2tzUHJvZmlsZVN1bW1hcnk7XG4gIGxpc3RQcm9maWxlcyhyZWZyZXNoPzogYm9vbGVhbik6IERhdGFicmlja3NQcm9maWxlU3VtbWFyeVtdO1xufVxuXG4vKiogUHVibGljIE9BdXRoIGNsaWVudCB1c2VkIGJ5IERhdGFicmlja3MgQ0xJLWNvbXBhdGlibGUgdXNlciBhdXRoZW50aWNhdGlvbi4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0NMSUVOVF9JRCA9IFwiZGF0YWJyaWNrcy1jbGlcIjtcbi8qKiBEZWZhdWx0IERhdGFicmlja3MgcHJvZmlsZSBjb25maWd1cmF0aW9uIHBhdGguICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9DT05GSUdfRklMRSA9IFwifi8uZGF0YWJyaWNrc2NmZ1wiO1xuLyoqIERlZmF1bHQgRGF0YWJyaWNrcyBhY2NvdW50IGNvbnNvbGUgb3JpZ2luLiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfQUNDT1VOVFNfSE9TVCA9IFwiaHR0cHM6Ly9hY2NvdW50cy5jbG91ZC5kYXRhYnJpY2tzLmNvbVwiO1xuLyoqIENhbm9uaWNhbCByZXF1ZXN0IGhlYWRlciBjYXJyeWluZyBhIGJlYXJlciBhY2Nlc3MgdG9rZW4uICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9BQ0NFU1NfVE9LRU5fSEVBREVSID0gXCJhdXRob3JpemF0aW9uXCI7XG4vKiogQ2Fub25pY2FsIHJlcXVlc3QgaGVhZGVyIGNhcnJ5aW5nIHRoZSByZXNvbHZlZCBEYXRhYnJpY2tzIHdvcmtzcGFjZSBJRC4gKi9cbmV4cG9ydCBjb25zdCBXT1JLU1BBQ0VfSURfSEVBREVSID0gXCJ4LWRhdGFicmlja3Mtd29ya3NwYWNlLWlkXCI7XG4vKiogQXV0aGVudGljYXRpb24gdHlwZSBmb3IgRGF0YWJyaWNrcyBBcHAgb24tYmVoYWxmLW9mIHJlcXVlc3QgY3JlZGVudGlhbHMuICovXG5leHBvcnQgY29uc3QgQVVUSF9UWVBFX0FQUF9PQk8gPSBcImFwcF9vYm9cIjtcbi8qKiBBdXRoZW50aWNhdGlvbiB0eXBlIGZvciBEYXRhYnJpY2tzIEFwcCBzZXJ2aWNlLXByaW5jaXBhbCBjcmVkZW50aWFscy4gKi9cbmV4cG9ydCBjb25zdCBBVVRIX1RZUEVfQVBQX1NQID0gXCJhcHBfc3BcIjtcbiJdfQ==