@databricks/sdk-auth 0.0.0-dev → 0.1.0-dev.2
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/LICENSE +203 -0
- package/README.md +11 -1
- package/dist/auth.d.ts +81 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +47 -0
- package/dist/auth.js.map +1 -0
- package/dist/credentials/default/chain.d.ts +28 -0
- package/dist/credentials/default/chain.d.ts.map +1 -0
- package/dist/credentials/default/chain.js +62 -0
- package/dist/credentials/default/chain.js.map +1 -0
- package/dist/credentials/default/default-credentials.d.ts +25 -0
- package/dist/credentials/default/default-credentials.d.ts.map +1 -0
- package/dist/credentials/default/default-credentials.js +23 -0
- package/dist/credentials/default/default-credentials.js.map +1 -0
- package/dist/credentials/default/errors.d.ts +13 -0
- package/dist/credentials/default/errors.d.ts.map +1 -0
- package/dist/credentials/default/errors.js +15 -0
- package/dist/credentials/default/errors.js.map +1 -0
- package/dist/credentials/default/u2m-strategy.d.ts +9 -0
- package/dist/credentials/default/u2m-strategy.d.ts.map +1 -0
- package/dist/credentials/default/u2m-strategy.js +20 -0
- package/dist/credentials/default/u2m-strategy.js.map +1 -0
- package/dist/credentials/errors.d.ts +28 -0
- package/dist/credentials/errors.d.ts.map +1 -0
- package/dist/credentials/errors.js +32 -0
- package/dist/credentials/errors.js.map +1 -0
- package/dist/credentials/host-metadata.d.ts +45 -0
- package/dist/credentials/host-metadata.d.ts.map +1 -0
- package/dist/credentials/host-metadata.js +122 -0
- package/dist/credentials/host-metadata.js.map +1 -0
- package/dist/credentials/index.browser.d.ts +11 -0
- package/dist/credentials/index.browser.d.ts.map +1 -0
- package/dist/credentials/index.browser.js +9 -0
- package/dist/credentials/index.browser.js.map +1 -0
- package/dist/credentials/index.d.ts +14 -0
- package/dist/credentials/index.d.ts.map +1 -0
- package/dist/credentials/index.js +10 -0
- package/dist/credentials/index.js.map +1 -0
- package/dist/credentials/m2m.d.ts +40 -0
- package/dist/credentials/m2m.d.ts.map +1 -0
- package/dist/credentials/m2m.js +91 -0
- package/dist/credentials/m2m.js.map +1 -0
- package/dist/credentials/pat.d.ts +14 -0
- package/dist/credentials/pat.d.ts.map +1 -0
- package/dist/credentials/pat.js +41 -0
- package/dist/credentials/pat.js.map +1 -0
- package/dist/credentials/u2m.d.ts +31 -0
- package/dist/credentials/u2m.d.ts.map +1 -0
- package/dist/credentials/u2m.js +157 -0
- package/dist/credentials/u2m.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/oidc/env.d.ts +10 -0
- package/dist/oidc/env.d.ts.map +1 -0
- package/dist/oidc/env.js +19 -0
- package/dist/oidc/env.js.map +1 -0
- package/dist/oidc/file.d.ts +7 -0
- package/dist/oidc/file.d.ts.map +1 -0
- package/dist/oidc/file.js +28 -0
- package/dist/oidc/file.js.map +1 -0
- package/dist/oidc/index.browser.d.ts +13 -0
- package/dist/oidc/index.browser.d.ts.map +1 -0
- package/dist/oidc/index.browser.js +11 -0
- package/dist/oidc/index.browser.js.map +1 -0
- package/dist/oidc/index.d.ts +14 -0
- package/dist/oidc/index.d.ts.map +1 -0
- package/dist/oidc/index.js +12 -0
- package/dist/oidc/index.js.map +1 -0
- package/dist/oidc/oidc.d.ts +21 -0
- package/dist/oidc/oidc.d.ts.map +1 -0
- package/dist/oidc/oidc.js +10 -0
- package/dist/oidc/oidc.js.map +1 -0
- package/dist/oidc/tokensource.d.ts +56 -0
- package/dist/oidc/tokensource.d.ts.map +1 -0
- package/dist/oidc/tokensource.js +62 -0
- package/dist/oidc/tokensource.js.map +1 -0
- package/package.json +52 -4
- package/src/auth.ts +117 -0
- package/src/credentials/default/chain.ts +75 -0
- package/src/credentials/default/default-credentials.ts +40 -0
- package/src/credentials/default/errors.ts +18 -0
- package/src/credentials/default/u2m-strategy.ts +20 -0
- package/src/credentials/errors.ts +51 -0
- package/src/credentials/host-metadata.ts +166 -0
- package/src/credentials/index.browser.ts +11 -0
- package/src/credentials/index.ts +14 -0
- package/src/credentials/m2m.ts +156 -0
- package/src/credentials/pat.ts +44 -0
- package/src/credentials/u2m.ts +212 -0
- package/src/index.ts +19 -0
- package/src/oidc/env.ts +21 -0
- package/src/oidc/file.ts +29 -0
- package/src/oidc/index.browser.ts +16 -0
- package/src/oidc/index.ts +17 -0
- package/src/oidc/oidc.ts +26 -0
- package/src/oidc/tokensource.ts +133 -0
- package/index.js +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"u2m.js","sourceRoot":"","sources":["../../src/credentials/u2m.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Databricks authentication library for JavaScript/TypeScript.
|
|
3
|
+
*
|
|
4
|
+
* @packageDocumentation
|
|
5
|
+
*/
|
|
6
|
+
export type { Header, Token, Credentials, TokenProvider, TokenCredentials, } from './auth';
|
|
7
|
+
export { newTokenCredentials, tokenProviderFn } from './auth';
|
|
8
|
+
/** Version of this auth library, sourced from package.json. */
|
|
9
|
+
export declare const VERSION: string;
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,YAAY,EACV,MAAM,EACN,KAAK,EACL,WAAW,EACX,aAAa,EACb,gBAAgB,GACjB,MAAM,QAAQ,CAAC;AAChB,OAAO,EAAC,mBAAmB,EAAE,eAAe,EAAC,MAAM,QAAQ,CAAC;AAE5D,+DAA+D;AAC/D,eAAO,MAAM,OAAO,EAAE,MAAwB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Databricks authentication library for JavaScript/TypeScript.
|
|
3
|
+
*
|
|
4
|
+
* @packageDocumentation
|
|
5
|
+
*/
|
|
6
|
+
import pkgJson from '../package.json' with { type: 'json' };
|
|
7
|
+
export { newTokenCredentials, tokenProviderFn } from './auth';
|
|
8
|
+
/** Version of this auth library, sourced from package.json. */
|
|
9
|
+
export const VERSION = pkgJson.version;
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,OAAO,MAAM,iBAAiB,CAAC,OAAM,IAAI,EAAE,MAAM,EAAC,CAAC;AAS1D,OAAO,EAAC,mBAAmB,EAAE,eAAe,EAAC,MAAM,QAAQ,CAAC;AAE5D,+DAA+D;AAC/D,MAAM,CAAC,MAAM,OAAO,GAAW,OAAO,CAAC,OAAO,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { IdTokenProvider } from './oidc';
|
|
2
|
+
/**
|
|
3
|
+
* Returns an IdTokenProvider that reads the ID token from environment variable
|
|
4
|
+
* `name`.
|
|
5
|
+
*
|
|
6
|
+
* Note that the IdTokenProvider does not cache the token and will read the
|
|
7
|
+
* token from environment variable `name` each time.
|
|
8
|
+
*/
|
|
9
|
+
export declare function newEnvIdTokenProvider(name: string): IdTokenProvider;
|
|
10
|
+
//# sourceMappingURL=env.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/oidc/env.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,QAAQ,CAAC;AAG5C;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,CAQnE"}
|
package/dist/oidc/env.js
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { env } from 'node:process';
|
|
2
|
+
import { idTokenProviderFn } from './oidc';
|
|
3
|
+
/**
|
|
4
|
+
* Returns an IdTokenProvider that reads the ID token from environment variable
|
|
5
|
+
* `name`.
|
|
6
|
+
*
|
|
7
|
+
* Note that the IdTokenProvider does not cache the token and will read the
|
|
8
|
+
* token from environment variable `name` each time.
|
|
9
|
+
*/
|
|
10
|
+
export function newEnvIdTokenProvider(name) {
|
|
11
|
+
return idTokenProviderFn(() => {
|
|
12
|
+
const t = env[name];
|
|
13
|
+
if (t === undefined || t === '') {
|
|
14
|
+
return Promise.reject(new Error(`missing env var "${name}"`));
|
|
15
|
+
}
|
|
16
|
+
return Promise.resolve({ value: t });
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=env.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/oidc/env.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,GAAG,EAAC,MAAM,cAAc,CAAC;AAGjC,OAAO,EAAC,iBAAiB,EAAC,MAAM,QAAQ,CAAC;AAEzC;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAY;IAChD,OAAO,iBAAiB,CAAC,GAAG,EAAE;QAC5B,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;QACpB,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC;YAChC,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,oBAAoB,IAAI,GAAG,CAAC,CAAC,CAAC;QAChE,CAAC;QACD,OAAO,OAAO,CAAC,OAAO,CAAC,EAAC,KAAK,EAAE,CAAC,EAAC,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { IdTokenProvider } from './oidc';
|
|
2
|
+
/**
|
|
3
|
+
* Returns an IdTokenProvider that reads the ID token from a file. The file
|
|
4
|
+
* should contain a single line with the token.
|
|
5
|
+
*/
|
|
6
|
+
export declare function newFileTokenProvider(path: string): IdTokenProvider;
|
|
7
|
+
//# sourceMappingURL=file.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file.d.ts","sourceRoot":"","sources":["../../src/oidc/file.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,QAAQ,CAAC;AAG5C;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,CAmBlE"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { readFile } from 'node:fs/promises';
|
|
2
|
+
import { idTokenProviderFn } from './oidc';
|
|
3
|
+
/**
|
|
4
|
+
* Returns an IdTokenProvider that reads the ID token from a file. The file
|
|
5
|
+
* should contain a single line with the token.
|
|
6
|
+
*/
|
|
7
|
+
export function newFileTokenProvider(path) {
|
|
8
|
+
return idTokenProviderFn(async () => {
|
|
9
|
+
if (path === '') {
|
|
10
|
+
throw new Error('missing path');
|
|
11
|
+
}
|
|
12
|
+
let content;
|
|
13
|
+
try {
|
|
14
|
+
content = await readFile(path, 'utf-8');
|
|
15
|
+
}
|
|
16
|
+
catch (e) {
|
|
17
|
+
if (e instanceof Error && 'code' in e && e.code === 'ENOENT') {
|
|
18
|
+
throw new Error(`file "${path}" does not exist`);
|
|
19
|
+
}
|
|
20
|
+
throw e;
|
|
21
|
+
}
|
|
22
|
+
if (content.length === 0) {
|
|
23
|
+
throw new Error(`file "${path}" is empty`);
|
|
24
|
+
}
|
|
25
|
+
return { value: content };
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=file.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file.js","sourceRoot":"","sources":["../../src/oidc/file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAC,MAAM,kBAAkB,CAAC;AAG1C,OAAO,EAAC,iBAAiB,EAAC,MAAM,QAAQ,CAAC;AAEzC;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC/C,OAAO,iBAAiB,CAAC,KAAK,IAAI,EAAE;QAClC,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC;QAClC,CAAC;QACD,IAAI,OAAe,CAAC;QACpB,IAAI,CAAC;YACH,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC1C,CAAC;QAAC,OAAO,CAAU,EAAE,CAAC;YACpB,IAAI,CAAC,YAAY,KAAK,IAAI,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC7D,MAAM,IAAI,KAAK,CAAC,SAAS,IAAI,kBAAkB,CAAC,CAAC;YACnD,CAAC;YACD,MAAM,CAAC,CAAC;QACV,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,SAAS,IAAI,YAAY,CAAC,CAAC;QAC7C,CAAC;QACD,OAAO,EAAC,KAAK,EAAE,OAAO,EAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Browser entry point for OIDC ID token utilities and the Databricks OIDC
|
|
3
|
+
* token-exchange provider.
|
|
4
|
+
*
|
|
5
|
+
* This package is experimental and subject to change.
|
|
6
|
+
*
|
|
7
|
+
* @packageDocumentation
|
|
8
|
+
*/
|
|
9
|
+
export type { IdToken, IdTokenProvider } from './oidc';
|
|
10
|
+
export { idTokenProviderFn } from './oidc';
|
|
11
|
+
export type { DatabricksOidcTokenProviderConfig, OAuthAuthorizationServer, } from './tokensource';
|
|
12
|
+
export { newDatabricksOidcTokenProvider } from './tokensource';
|
|
13
|
+
//# sourceMappingURL=index.browser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.browser.d.ts","sourceRoot":"","sources":["../../src/oidc/index.browser.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,YAAY,EAAC,OAAO,EAAE,eAAe,EAAC,MAAM,QAAQ,CAAC;AACrD,OAAO,EAAC,iBAAiB,EAAC,MAAM,QAAQ,CAAC;AACzC,YAAY,EACV,iCAAiC,EACjC,wBAAwB,GACzB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAC,8BAA8B,EAAC,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Browser entry point for OIDC ID token utilities and the Databricks OIDC
|
|
3
|
+
* token-exchange provider.
|
|
4
|
+
*
|
|
5
|
+
* This package is experimental and subject to change.
|
|
6
|
+
*
|
|
7
|
+
* @packageDocumentation
|
|
8
|
+
*/
|
|
9
|
+
export { idTokenProviderFn } from './oidc';
|
|
10
|
+
export { newDatabricksOidcTokenProvider } from './tokensource';
|
|
11
|
+
//# sourceMappingURL=index.browser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.browser.js","sourceRoot":"","sources":["../../src/oidc/index.browser.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAC,iBAAiB,EAAC,MAAM,QAAQ,CAAC;AAKzC,OAAO,EAAC,8BAA8B,EAAC,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OIDC ID token utilities and Databricks OIDC token-exchange provider.
|
|
3
|
+
*
|
|
4
|
+
* This package is experimental and subject to change.
|
|
5
|
+
*
|
|
6
|
+
* @packageDocumentation
|
|
7
|
+
*/
|
|
8
|
+
export type { IdToken, IdTokenProvider } from './oidc';
|
|
9
|
+
export { idTokenProviderFn } from './oidc';
|
|
10
|
+
export { newEnvIdTokenProvider } from './env';
|
|
11
|
+
export { newFileTokenProvider } from './file';
|
|
12
|
+
export type { DatabricksOidcTokenProviderConfig, OAuthAuthorizationServer, } from './tokensource';
|
|
13
|
+
export { newDatabricksOidcTokenProvider } from './tokensource';
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/oidc/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,YAAY,EAAC,OAAO,EAAE,eAAe,EAAC,MAAM,QAAQ,CAAC;AACrD,OAAO,EAAC,iBAAiB,EAAC,MAAM,QAAQ,CAAC;AACzC,OAAO,EAAC,qBAAqB,EAAC,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAC,oBAAoB,EAAC,MAAM,QAAQ,CAAC;AAC5C,YAAY,EACV,iCAAiC,EACjC,wBAAwB,GACzB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAC,8BAA8B,EAAC,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OIDC ID token utilities and Databricks OIDC token-exchange provider.
|
|
3
|
+
*
|
|
4
|
+
* This package is experimental and subject to change.
|
|
5
|
+
*
|
|
6
|
+
* @packageDocumentation
|
|
7
|
+
*/
|
|
8
|
+
export { idTokenProviderFn } from './oidc';
|
|
9
|
+
export { newEnvIdTokenProvider } from './env';
|
|
10
|
+
export { newFileTokenProvider } from './file';
|
|
11
|
+
export { newDatabricksOidcTokenProvider } from './tokensource';
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/oidc/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAC,iBAAiB,EAAC,MAAM,QAAQ,CAAC;AACzC,OAAO,EAAC,qBAAqB,EAAC,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAC,oBAAoB,EAAC,MAAM,QAAQ,CAAC;AAK5C,OAAO,EAAC,8BAA8B,EAAC,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IdToken represents an OIDC ID token that can be exchanged for a Databricks
|
|
3
|
+
* access token.
|
|
4
|
+
*/
|
|
5
|
+
export interface IdToken {
|
|
6
|
+
value: string;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* IdTokenProvider is anything that returns an IdToken given an audience.
|
|
10
|
+
*/
|
|
11
|
+
export interface IdTokenProvider {
|
|
12
|
+
idToken(audience: string): Promise<IdToken>;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Adapter to allow the use of ordinary functions as IdTokenProvider.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* const provider = idTokenProviderFn(async () => ({ value: 'my-id-token' }));
|
|
19
|
+
*/
|
|
20
|
+
export declare function idTokenProviderFn(fn: (audience: string) => Promise<IdToken>): IdTokenProvider;
|
|
21
|
+
//# sourceMappingURL=oidc.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oidc.d.ts","sourceRoot":"","sources":["../../src/oidc/oidc.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC7C;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,EAAE,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,GACzC,eAAe,CAEjB"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Adapter to allow the use of ordinary functions as IdTokenProvider.
|
|
3
|
+
*
|
|
4
|
+
* @example
|
|
5
|
+
* const provider = idTokenProviderFn(async () => ({ value: 'my-id-token' }));
|
|
6
|
+
*/
|
|
7
|
+
export function idTokenProviderFn(fn) {
|
|
8
|
+
return { idToken: fn };
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=oidc.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oidc.js","sourceRoot":"","sources":["../../src/oidc/oidc.ts"],"names":[],"mappings":"AAeA;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAC/B,EAA0C;IAE1C,OAAO,EAAC,OAAO,EAAE,EAAE,EAAC,CAAC;AACvB,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Databricks OIDC token-exchange provider. Exchanges an OIDC ID token for a
|
|
3
|
+
* Databricks access token using the OAuth 2.0 token-exchange grant.
|
|
4
|
+
*/
|
|
5
|
+
import type { TokenProvider } from '../auth';
|
|
6
|
+
import type { IdTokenProvider } from './oidc';
|
|
7
|
+
/**
|
|
8
|
+
* OAuthAuthorizationServer describes the OAuth endpoints used to mint
|
|
9
|
+
* Databricks access tokens.
|
|
10
|
+
*/
|
|
11
|
+
export interface OAuthAuthorizationServer {
|
|
12
|
+
tokenEndpoint: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* DatabricksOidcTokenProviderConfig is the configuration for a Databricks OIDC
|
|
16
|
+
* TokenProvider.
|
|
17
|
+
*/
|
|
18
|
+
export interface DatabricksOidcTokenProviderConfig {
|
|
19
|
+
/**
|
|
20
|
+
* Client ID of the Databricks OIDC application. It corresponds to the
|
|
21
|
+
* Application ID of the Databricks Service Principal.
|
|
22
|
+
*
|
|
23
|
+
* This field is only required for Workload Identity Federation and should
|
|
24
|
+
* be empty for Account-wide token federation.
|
|
25
|
+
*/
|
|
26
|
+
clientId?: string;
|
|
27
|
+
/**
|
|
28
|
+
* Account ID of the Databricks Account. This field is only required for
|
|
29
|
+
* Account-wide token federation.
|
|
30
|
+
*/
|
|
31
|
+
accountId?: string;
|
|
32
|
+
/**
|
|
33
|
+
* Host is the host of the Databricks account or workspace.
|
|
34
|
+
*/
|
|
35
|
+
host: string;
|
|
36
|
+
/**
|
|
37
|
+
* TokenEndpointProvider returns the token endpoint for the Databricks OIDC
|
|
38
|
+
* application.
|
|
39
|
+
*/
|
|
40
|
+
tokenEndpointProvider: () => Promise<OAuthAuthorizationServer>;
|
|
41
|
+
/**
|
|
42
|
+
* Audience is the audience of the Databricks OIDC application.
|
|
43
|
+
* This is only used for Workspace level tokens.
|
|
44
|
+
*/
|
|
45
|
+
audience?: string;
|
|
46
|
+
/**
|
|
47
|
+
* IdTokenProvider returns the ID token to be used for the token exchange.
|
|
48
|
+
*/
|
|
49
|
+
idTokenProvider: IdTokenProvider;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Returns a new Databricks OIDC TokenProvider that exchanges an OIDC ID token
|
|
53
|
+
* for a Databricks access token using the OAuth 2.0 token-exchange grant.
|
|
54
|
+
*/
|
|
55
|
+
export declare function newDatabricksOidcTokenProvider(config: DatabricksOidcTokenProviderConfig): TokenProvider;
|
|
56
|
+
//# sourceMappingURL=tokensource.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokensource.d.ts","sourceRoot":"","sources":["../../src/oidc/tokensource.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAQ,aAAa,EAAC,MAAM,SAAS,CAAC;AAGlD,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,QAAQ,CAAC;AAE5C;;;GAGG;AACH,MAAM,WAAW,wBAAwB;IACvC,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;;GAGG;AACH,MAAM,WAAW,iCAAiC;IAChD;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;;OAGG;IACH,qBAAqB,EAAE,MAAM,OAAO,CAAC,wBAAwB,CAAC,CAAC;IAE/D;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,eAAe,EAAE,eAAe,CAAC;CAClC;AAED;;;GAGG;AACH,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,iCAAiC,GACxC,aAAa,CAEf"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Databricks OIDC token-exchange provider. Exchanges an OIDC ID token for a
|
|
3
|
+
* Databricks access token using the OAuth 2.0 token-exchange grant.
|
|
4
|
+
*/
|
|
5
|
+
import { z } from 'zod';
|
|
6
|
+
import { tokenProviderFn } from '../auth';
|
|
7
|
+
/**
|
|
8
|
+
* Returns a new Databricks OIDC TokenProvider that exchanges an OIDC ID token
|
|
9
|
+
* for a Databricks access token using the OAuth 2.0 token-exchange grant.
|
|
10
|
+
*/
|
|
11
|
+
export function newDatabricksOidcTokenProvider(config) {
|
|
12
|
+
return tokenProviderFn(() => exchangeIdToken(config));
|
|
13
|
+
}
|
|
14
|
+
async function exchangeIdToken(config) {
|
|
15
|
+
if (config.host === '') {
|
|
16
|
+
throw new Error('missing Host');
|
|
17
|
+
}
|
|
18
|
+
const endpoints = await config.tokenEndpointProvider();
|
|
19
|
+
const audience = determineAudience(config, endpoints);
|
|
20
|
+
const idToken = await config.idTokenProvider.idToken(audience);
|
|
21
|
+
const params = new URLSearchParams();
|
|
22
|
+
if (config.clientId !== undefined && config.clientId !== '') {
|
|
23
|
+
params.set('client_id', config.clientId);
|
|
24
|
+
}
|
|
25
|
+
params.set('scope', 'all-apis');
|
|
26
|
+
params.set('subject_token_type', 'urn:ietf:params:oauth:token-type:jwt');
|
|
27
|
+
params.set('subject_token', idToken.value);
|
|
28
|
+
params.set('grant_type', 'urn:ietf:params:oauth:grant-type:token-exchange');
|
|
29
|
+
const response = await fetch(endpoints.tokenEndpoint, {
|
|
30
|
+
method: 'POST',
|
|
31
|
+
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
|
|
32
|
+
body: params.toString(),
|
|
33
|
+
});
|
|
34
|
+
if (!response.ok) {
|
|
35
|
+
const text = await response.text();
|
|
36
|
+
throw new Error(`token request failed with status ${response.status.toString()}: ${text}`);
|
|
37
|
+
}
|
|
38
|
+
const parsed = tokenResponseSchema.parse(await response.json());
|
|
39
|
+
const expiry = parsed.expires_in !== undefined
|
|
40
|
+
? new Date(Date.now() + parsed.expires_in * 1000)
|
|
41
|
+
: undefined;
|
|
42
|
+
return {
|
|
43
|
+
value: parsed.access_token,
|
|
44
|
+
...(parsed.token_type !== undefined && { type: parsed.token_type }),
|
|
45
|
+
...(expiry !== undefined && { expiry }),
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
function determineAudience(config, endpoints) {
|
|
49
|
+
if (config.audience !== undefined && config.audience !== '') {
|
|
50
|
+
return config.audience;
|
|
51
|
+
}
|
|
52
|
+
if (config.accountId !== undefined && config.accountId !== '') {
|
|
53
|
+
return config.accountId;
|
|
54
|
+
}
|
|
55
|
+
return endpoints.tokenEndpoint;
|
|
56
|
+
}
|
|
57
|
+
const tokenResponseSchema = z.object({
|
|
58
|
+
access_token: z.string(),
|
|
59
|
+
token_type: z.string().optional(),
|
|
60
|
+
expires_in: z.number().optional(),
|
|
61
|
+
});
|
|
62
|
+
//# sourceMappingURL=tokensource.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokensource.js","sourceRoot":"","sources":["../../src/oidc/tokensource.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,55 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@databricks/sdk-auth",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "
|
|
5
|
-
"
|
|
6
|
-
"
|
|
3
|
+
"version": "0.1.0-dev.2",
|
|
4
|
+
"description": "Databricks authentication library for JavaScript/TypeScript",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"import": "./dist/index.js"
|
|
12
|
+
},
|
|
13
|
+
"./credentials": {
|
|
14
|
+
"types": "./dist/credentials/index.d.ts",
|
|
15
|
+
"import": "./dist/credentials/index.js"
|
|
16
|
+
},
|
|
17
|
+
"./credentials/browser": {
|
|
18
|
+
"types": "./dist/credentials/index.browser.d.ts",
|
|
19
|
+
"import": "./dist/credentials/index.browser.js"
|
|
20
|
+
},
|
|
21
|
+
"./oidc": {
|
|
22
|
+
"types": "./dist/oidc/index.d.ts",
|
|
23
|
+
"import": "./dist/oidc/index.js"
|
|
24
|
+
},
|
|
25
|
+
"./oidc/browser": {
|
|
26
|
+
"types": "./dist/oidc/index.browser.d.ts",
|
|
27
|
+
"import": "./dist/oidc/index.browser.js"
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
"files": [
|
|
31
|
+
"dist",
|
|
32
|
+
"src",
|
|
33
|
+
"LICENSE"
|
|
34
|
+
],
|
|
35
|
+
"scripts": {
|
|
36
|
+
"build": "tsc -b",
|
|
37
|
+
"lint": "eslint src tests --ext .ts",
|
|
38
|
+
"lint:fix": "eslint src tests --ext .ts --fix",
|
|
39
|
+
"format": "prettier --write \"src/**/*.ts\" \"tests/**/*.ts\"",
|
|
40
|
+
"format:check": "prettier --check \"src/**/*.ts\" \"tests/**/*.ts\"",
|
|
41
|
+
"test": "vitest run",
|
|
42
|
+
"test:browser": "vitest run --config vitest.config.browser.ts",
|
|
43
|
+
"typecheck": "tsc --noEmit",
|
|
44
|
+
"clean": "rm -rf dist tsconfig.tsbuildinfo"
|
|
45
|
+
},
|
|
46
|
+
"author": "Databricks",
|
|
47
|
+
"license": "Apache-2.0",
|
|
48
|
+
"engines": {
|
|
49
|
+
"node": ">=22.0.0"
|
|
50
|
+
},
|
|
51
|
+
"dependencies": {
|
|
52
|
+
"@databricks/sdk-core": ">=0.1.0-dev.3 <1.0.0",
|
|
53
|
+
"zod": "^4.3.6"
|
|
54
|
+
}
|
|
7
55
|
}
|
package/src/auth.ts
ADDED
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core authentication interfaces and types for the Databricks SDK.
|
|
3
|
+
*
|
|
4
|
+
* This module is not meant to be used directly by consumers of the SDK
|
|
5
|
+
* and is subject to change without notice.
|
|
6
|
+
*
|
|
7
|
+
* @packageDocumentation
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Represents a header that can be used to sign requests.
|
|
12
|
+
*/
|
|
13
|
+
export interface Header {
|
|
14
|
+
key: string;
|
|
15
|
+
value: string;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Anything that can return authentication headers.
|
|
20
|
+
*/
|
|
21
|
+
export interface Credentials {
|
|
22
|
+
/**
|
|
23
|
+
* Short identifier for the authentication strategy, e.g. `pat` or
|
|
24
|
+
* `oauth-m2m`. Used for logging and for selecting between strategies.
|
|
25
|
+
*/
|
|
26
|
+
name(): string;
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Returns headers to authenticate requests.
|
|
30
|
+
*/
|
|
31
|
+
authHeaders(): Promise<Header[]>;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Represents a token that can be used to sign requests.
|
|
36
|
+
*/
|
|
37
|
+
export interface Token {
|
|
38
|
+
/**
|
|
39
|
+
* The raw value to sign requests with.
|
|
40
|
+
* It typically is an access token but can represent other types of tokens
|
|
41
|
+
* (e.g., ID tokens).
|
|
42
|
+
*/
|
|
43
|
+
value: string;
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* The type of token. If empty, the token type is assumed to be "Bearer".
|
|
47
|
+
*/
|
|
48
|
+
type?: string;
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* The time at which the token expires.
|
|
52
|
+
* If undefined, the token is considered to be valid indefinitely.
|
|
53
|
+
*/
|
|
54
|
+
expiry?: Date;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Anything that can return a token.
|
|
59
|
+
*/
|
|
60
|
+
export interface TokenProvider {
|
|
61
|
+
/**
|
|
62
|
+
* Returns a token or throws an error.
|
|
63
|
+
* The returned Token should be considered immutable and should not be
|
|
64
|
+
* modified.
|
|
65
|
+
*/
|
|
66
|
+
token(): Promise<Token>;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Adapter to allow the use of ordinary functions as TokenProvider.
|
|
71
|
+
*
|
|
72
|
+
* @example
|
|
73
|
+
* const provider = tokenProviderFn(async () => ({ value: 'my-token' }));
|
|
74
|
+
*/
|
|
75
|
+
export function tokenProviderFn(fn: () => Promise<Token>): TokenProvider {
|
|
76
|
+
return {token: fn};
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Combines TokenProvider and Credentials interfaces.
|
|
81
|
+
*/
|
|
82
|
+
export interface TokenCredentials extends TokenProvider, Credentials {}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Creates a TokenCredentials that uses the given TokenProvider to return
|
|
86
|
+
* authentication headers.
|
|
87
|
+
*
|
|
88
|
+
* @param name - Short identifier for the auth strategy (e.g. `oauth-m2m`).
|
|
89
|
+
* @param provider - Source of tokens used to build the Authorization header.
|
|
90
|
+
*/
|
|
91
|
+
export function newTokenCredentials(
|
|
92
|
+
name: string,
|
|
93
|
+
provider: TokenProvider
|
|
94
|
+
): TokenCredentials {
|
|
95
|
+
return new TokenCredentialsImpl(name, provider);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
class TokenCredentialsImpl implements TokenCredentials {
|
|
99
|
+
constructor(
|
|
100
|
+
private readonly strategyName: string,
|
|
101
|
+
private readonly provider: TokenProvider
|
|
102
|
+
) {}
|
|
103
|
+
|
|
104
|
+
name(): string {
|
|
105
|
+
return this.strategyName;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
async token(): Promise<Token> {
|
|
109
|
+
return this.provider.token();
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
async authHeaders(): Promise<Header[]> {
|
|
113
|
+
const t = await this.token();
|
|
114
|
+
const scheme = t.type ?? 'Bearer';
|
|
115
|
+
return [{key: 'Authorization', value: `${scheme} ${t.value}`}];
|
|
116
|
+
}
|
|
117
|
+
}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import type {Profile} from '@databricks/sdk-core/profiles';
|
|
2
|
+
|
|
3
|
+
import type {Credentials, Header} from '../../auth';
|
|
4
|
+
import {newM2mCredentials} from '../m2m';
|
|
5
|
+
import {newPatCredentials} from '../pat';
|
|
6
|
+
|
|
7
|
+
import {DefaultCredentialsError} from './errors';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* A strategy inspects a profile and either returns configured credentials
|
|
11
|
+
* or `undefined` if it is not applicable.
|
|
12
|
+
*/
|
|
13
|
+
export type Strategy = (profile: Profile) => Credentials | undefined;
|
|
14
|
+
|
|
15
|
+
const AUTH_DOC_URL = 'https://docs.databricks.com/aws/en/dev-tools/auth/index';
|
|
16
|
+
const NO_AUTH_CONFIGURED_MESSAGE = `cannot configure default credentials, please check ${AUTH_DOC_URL} to configure credentials for your preferred authentication method`;
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Lazy {@link Credentials} that resolves to the first configured strategy
|
|
20
|
+
* on the first `authHeaders()` call.
|
|
21
|
+
*/
|
|
22
|
+
export class DefaultCredentials implements Credentials {
|
|
23
|
+
private resolved: Credentials | undefined;
|
|
24
|
+
|
|
25
|
+
constructor(
|
|
26
|
+
private readonly strategies: readonly Strategy[],
|
|
27
|
+
private readonly loadProfile: () => Promise<Profile>
|
|
28
|
+
) {}
|
|
29
|
+
|
|
30
|
+
name(): string {
|
|
31
|
+
return 'default';
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
async authHeaders(): Promise<Header[]> {
|
|
35
|
+
this.resolved ??= await this.resolveChain();
|
|
36
|
+
return this.resolved.authHeaders();
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
private async resolveChain(): Promise<Credentials> {
|
|
40
|
+
const profile = await this.loadProfile();
|
|
41
|
+
for (const strategy of this.strategies) {
|
|
42
|
+
const built = strategy(profile);
|
|
43
|
+
if (built !== undefined) {
|
|
44
|
+
return built;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
throw new DefaultCredentialsError(
|
|
48
|
+
'NO_AUTH_CONFIGURED',
|
|
49
|
+
NO_AUTH_CONFIGURED_MESSAGE
|
|
50
|
+
);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/** PAT strategy: configured when `token` is set in the profile. */
|
|
55
|
+
export const patStrategy: Strategy = profile => {
|
|
56
|
+
if (profile.host === undefined) return undefined;
|
|
57
|
+
if (profile.token === undefined) return undefined;
|
|
58
|
+
return newPatCredentials(profile.token.value);
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* OAuth M2M strategy: configured when `clientId` and `clientSecret` are
|
|
63
|
+
* both set in the profile.
|
|
64
|
+
*/
|
|
65
|
+
export const m2mStrategy: Strategy = profile => {
|
|
66
|
+
if (profile.host === undefined) return undefined;
|
|
67
|
+
if (profile.clientId === undefined) return undefined;
|
|
68
|
+
if (profile.clientSecret === undefined) return undefined;
|
|
69
|
+
return newM2mCredentials({
|
|
70
|
+
host: profile.host,
|
|
71
|
+
clientId: profile.clientId,
|
|
72
|
+
clientSecret: profile.clientSecret.value,
|
|
73
|
+
...(profile.accountId !== undefined && {accountId: profile.accountId}),
|
|
74
|
+
});
|
|
75
|
+
};
|