@fabric-harness/databricks 0.18.0 → 1.1.0
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 +72 -32
- package/dist/app.d.ts +84 -0
- package/dist/app.d.ts.map +1 -0
- package/dist/app.js +91 -0
- package/dist/app.js.map +1 -0
- package/dist/client.d.ts +19 -7
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +14 -5
- package/dist/client.js.map +1 -1
- package/dist/feature-serving.js +1 -1
- package/dist/feature-serving.js.map +1 -1
- package/dist/governance.d.ts +4 -0
- package/dist/governance.d.ts.map +1 -1
- package/dist/governance.js +14 -2
- package/dist/governance.js.map +1 -1
- package/dist/identity.d.ts +34 -0
- package/dist/identity.d.ts.map +1 -1
- package/dist/identity.js +63 -0
- package/dist/identity.js.map +1 -1
- package/dist/index.d.ts +19 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -3
- package/dist/index.js.map +1 -1
- package/dist/lakebase.d.ts +29 -17
- package/dist/lakebase.d.ts.map +1 -1
- package/dist/lakebase.js +77 -1
- package/dist/lakebase.js.map +1 -1
- package/dist/mlflow-tracing.d.ts +111 -0
- package/dist/mlflow-tracing.d.ts.map +1 -0
- package/dist/mlflow-tracing.js +167 -0
- package/dist/mlflow-tracing.js.map +1 -0
- package/dist/persistence.d.ts +73 -0
- package/dist/persistence.d.ts.map +1 -0
- package/dist/persistence.js +82 -0
- package/dist/persistence.js.map +1 -0
- package/dist/serving-usage.d.ts +48 -0
- package/dist/serving-usage.d.ts.map +1 -0
- package/dist/serving-usage.js +100 -0
- package/dist/serving-usage.js.map +1 -0
- package/dist/telemetry-sink.d.ts +29 -0
- package/dist/telemetry-sink.d.ts.map +1 -0
- package/dist/telemetry-sink.js +129 -0
- package/dist/telemetry-sink.js.map +1 -0
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +4 -2
- package/dist/tools.js.map +1 -1
- package/dist/volumes-attachment-store.d.ts +64 -0
- package/dist/volumes-attachment-store.d.ts.map +1 -0
- package/dist/volumes-attachment-store.js +172 -0
- package/dist/volumes-attachment-store.js.map +1 -0
- package/package.json +9 -4
package/dist/identity.js
CHANGED
|
@@ -53,4 +53,67 @@ function base64(value) {
|
|
|
53
53
|
return Buffer.from(value, 'utf8').toString('base64');
|
|
54
54
|
return btoa(value);
|
|
55
55
|
}
|
|
56
|
+
// ─── Identity propagation (v2, workstream C3) ───────────────────────────────
|
|
57
|
+
/**
|
|
58
|
+
* The service principal a Databricks App runs as, from the standard app
|
|
59
|
+
* runtime environment (`DATABRICKS_HOST` / `DATABRICKS_CLIENT_ID` /
|
|
60
|
+
* `DATABRICKS_CLIENT_SECRET`). Returns `undefined` when any variable is
|
|
61
|
+
* missing, so callers can fall back to explicit configuration.
|
|
62
|
+
*/
|
|
63
|
+
export function appServicePrincipalFromEnv(env = typeof process !== 'undefined' ? process.env : {}) {
|
|
64
|
+
const host = env.DATABRICKS_HOST;
|
|
65
|
+
const clientId = env.DATABRICKS_CLIENT_ID;
|
|
66
|
+
const clientSecret = env.DATABRICKS_CLIENT_SECRET;
|
|
67
|
+
if (!host || !clientId || !clientSecret)
|
|
68
|
+
return undefined;
|
|
69
|
+
return {
|
|
70
|
+
kind: 'service-principal',
|
|
71
|
+
host: host.includes('://') ? host : `https://${host}`,
|
|
72
|
+
clientId,
|
|
73
|
+
clientSecret,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* On-behalf-of principal from Databricks Apps user-authorization headers:
|
|
78
|
+
* the platform forwards the signed-in user's access token as
|
|
79
|
+
* `x-forwarded-access-token` (plus `x-forwarded-email`/`x-forwarded-user`).
|
|
80
|
+
* Returns `undefined` when the request carries no user token (e.g. app
|
|
81
|
+
* service-to-service traffic) so callers fall back to the app principal.
|
|
82
|
+
*/
|
|
83
|
+
export function onBehalfOfFromHeaders(headers) {
|
|
84
|
+
const read = (name) => {
|
|
85
|
+
if (typeof headers.get === 'function')
|
|
86
|
+
return headers.get(name) ?? undefined;
|
|
87
|
+
const value = headers[name];
|
|
88
|
+
return Array.isArray(value) ? value[0] : value;
|
|
89
|
+
};
|
|
90
|
+
const token = read('x-forwarded-access-token');
|
|
91
|
+
if (!token)
|
|
92
|
+
return undefined;
|
|
93
|
+
const label = read('x-forwarded-email') ?? read('x-forwarded-user');
|
|
94
|
+
return { kind: 'on-behalf-of', userToken: () => token, ...(label ? { label } : {}) };
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Map a Databricks principal onto the SDK's {@link FabricPrincipal} so the
|
|
98
|
+
* governed identity rides submissions → tool calls → lineage/cost records.
|
|
99
|
+
* Never carries a token — ids and labels only.
|
|
100
|
+
*/
|
|
101
|
+
export function fabricPrincipalFor(principal, overrides = {}) {
|
|
102
|
+
if (principal.kind === 'service-principal') {
|
|
103
|
+
const id = overrides.id ?? principal.clientId;
|
|
104
|
+
return {
|
|
105
|
+
kind: overrides.asAppPrincipal ? 'app-principal' : 'service-principal',
|
|
106
|
+
id,
|
|
107
|
+
ucPrincipal: overrides.ucPrincipal ?? id,
|
|
108
|
+
...(overrides.displayName ? { displayName: overrides.displayName } : {}),
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
const id = overrides.id ?? principal.label ?? (principal.kind === 'pat' ? 'pat-user' : 'on-behalf-of-user');
|
|
112
|
+
return {
|
|
113
|
+
kind: 'user',
|
|
114
|
+
id,
|
|
115
|
+
...(overrides.ucPrincipal ? { ucPrincipal: overrides.ucPrincipal } : {}),
|
|
116
|
+
...(overrides.displayName ? { displayName: overrides.displayName } : {}),
|
|
117
|
+
};
|
|
118
|
+
}
|
|
56
119
|
//# sourceMappingURL=identity.js.map
|
package/dist/identity.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"identity.js","sourceRoot":"","sources":["../src/identity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"identity.js","sourceRoot":"","sources":["../src/identity.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -6,17 +6,29 @@ import type { DatabricksLineageRecord } from './governance.js';
|
|
|
6
6
|
import type { LakebaseClient, LakebasePoolFactory } from './lakebase.js';
|
|
7
7
|
import type { DatabricksConsumption } from './consumption.js';
|
|
8
8
|
export { DatabricksRestClient, createDatabricksClient, waitForDatabricksRun, waitForDatabricksStatement } from './client.js';
|
|
9
|
-
export type { DatabricksClientOptions, DatabricksWaitOptions } from './client.js';
|
|
9
|
+
export type { DatabricksClientOptions, DatabricksRequestOptions, DatabricksWaitOptions } from './client.js';
|
|
10
10
|
export { databricksSqlTool, databricksRunJobTool, databricksNotebookTool, databricksMlflowLogMetricTool, databricksMlflowLogParamTool, unityCatalogTablesTool, databricksTableInfoTool, databricksWorkspaceSource } from './tools.js';
|
|
11
11
|
export type { DatabricksSqlToolOptions, DatabricksWorkspaceSourceOptions } from './tools.js';
|
|
12
12
|
export { databricksFoundationModelProvider, registerDatabricksModelProvider } from './model.js';
|
|
13
13
|
export type { DatabricksModelOptions } from './model.js';
|
|
14
|
-
export { databricksIdentity } from './identity.js';
|
|
15
|
-
export type { DatabricksPrincipal, DatabricksTokenProvider } from './identity.js';
|
|
14
|
+
export { appServicePrincipalFromEnv, databricksIdentity, fabricPrincipalFor, onBehalfOfFromHeaders } from './identity.js';
|
|
15
|
+
export type { DatabricksPrincipal, DatabricksTokenProvider, FabricPrincipalOverrides } from './identity.js';
|
|
16
16
|
export { withGovernance, withGovernanceTools, databricksApprovalRules, databricksGovernancePolicy } from './governance.js';
|
|
17
17
|
export type { DatabricksGovernanceOptions, DatabricksLineageRecord, DatabricksApprovalRuleOptions, DatabricksGovernancePolicyOptions } from './governance.js';
|
|
18
|
-
export { lakebaseClient } from './lakebase.js';
|
|
19
|
-
export
|
|
18
|
+
export { lakebaseClient, lakebaseCredentialProvider } from './lakebase.js';
|
|
19
|
+
export { databricksPersistence } from './persistence.js';
|
|
20
|
+
export { databricksTelemetry, ensureDatabricksTelemetryTables } from './telemetry-sink.js';
|
|
21
|
+
export { databricksApp } from './app.js';
|
|
22
|
+
export type { DatabricksAppOptions, DatabricksAppRuntime } from './app.js';
|
|
23
|
+
export type { DatabricksTelemetry, DatabricksTelemetryOptions } from './telemetry-sink.js';
|
|
24
|
+
export type { DatabricksPersistence, DatabricksPersistenceOptions, DatabricksPersistenceStoreModule } from './persistence.js';
|
|
25
|
+
export type { LakebaseClient, LakebaseClientOptions, LakebaseCredentialProviderOptions, LakebasePoolConfig, LakebasePoolFactory } from './lakebase.js';
|
|
26
|
+
export { UcVolumesAttachmentStore } from './volumes-attachment-store.js';
|
|
27
|
+
export type { UcVolumesAttachmentStoreOptions } from './volumes-attachment-store.js';
|
|
28
|
+
export { buildMlflowTrace, mlflowTraceExporter } from './mlflow-tracing.js';
|
|
29
|
+
export type { MlflowTraceExporter, MlflowTraceExporterOptions, MlflowTraceInput, MlflowTracePayload } from './mlflow-tracing.js';
|
|
30
|
+
export { inferenceTableUsageQuery, servingUsageCapture } from './serving-usage.js';
|
|
31
|
+
export type { InferenceTableUsageQueryOptions, ServingUsageCaptureOptions } from './serving-usage.js';
|
|
20
32
|
export { databricksEmbeddings } from './embeddings.js';
|
|
21
33
|
export type { DatabricksEmbeddingsOptions } from './embeddings.js';
|
|
22
34
|
export { databricksVectorSearch } from './vector-search.js';
|
|
@@ -64,6 +76,8 @@ export interface DatabricksBundleConfig {
|
|
|
64
76
|
host: string;
|
|
65
77
|
database: string;
|
|
66
78
|
user: string;
|
|
79
|
+
/** Lakebase endpoint resource name used for database credential exchange. */
|
|
80
|
+
endpoint: string;
|
|
67
81
|
port?: number;
|
|
68
82
|
ssl?: boolean | {
|
|
69
83
|
rejectUnauthorized?: boolean;
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,aAAa,EAAE,SAAS,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAElJ,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAEnD,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,YAAY,CAAC;AAEnE,OAAO,KAAK,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAGlF,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAE/D,OAAO,KAAK,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAOzE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAM9D,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAC7H,YAAY,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -17,9 +17,15 @@ import { databricksActualCostSource, databricksTenantCostLimit } from './cost-bu
|
|
|
17
17
|
export { DatabricksRestClient, createDatabricksClient, waitForDatabricksRun, waitForDatabricksStatement } from './client.js';
|
|
18
18
|
export { databricksSqlTool, databricksRunJobTool, databricksNotebookTool, databricksMlflowLogMetricTool, databricksMlflowLogParamTool, unityCatalogTablesTool, databricksTableInfoTool, databricksWorkspaceSource } from './tools.js';
|
|
19
19
|
export { databricksFoundationModelProvider, registerDatabricksModelProvider } from './model.js';
|
|
20
|
-
export { databricksIdentity } from './identity.js';
|
|
20
|
+
export { appServicePrincipalFromEnv, databricksIdentity, fabricPrincipalFor, onBehalfOfFromHeaders } from './identity.js';
|
|
21
21
|
export { withGovernance, withGovernanceTools, databricksApprovalRules, databricksGovernancePolicy } from './governance.js';
|
|
22
|
-
export { lakebaseClient } from './lakebase.js';
|
|
22
|
+
export { lakebaseClient, lakebaseCredentialProvider } from './lakebase.js';
|
|
23
|
+
export { databricksPersistence } from './persistence.js';
|
|
24
|
+
export { databricksTelemetry, ensureDatabricksTelemetryTables } from './telemetry-sink.js';
|
|
25
|
+
export { databricksApp } from './app.js';
|
|
26
|
+
export { UcVolumesAttachmentStore } from './volumes-attachment-store.js';
|
|
27
|
+
export { buildMlflowTrace, mlflowTraceExporter } from './mlflow-tracing.js';
|
|
28
|
+
export { inferenceTableUsageQuery, servingUsageCapture } from './serving-usage.js';
|
|
23
29
|
export { databricksEmbeddings } from './embeddings.js';
|
|
24
30
|
export { databricksVectorSearch } from './vector-search.js';
|
|
25
31
|
export { databricksAiQueryTool } from './ai.js';
|
|
@@ -96,7 +102,7 @@ export function databricks(config) {
|
|
|
96
102
|
...(config.consumption && config.warehouseId ? { consumption: databricksConsumption(client, { warehouseId: config.warehouseId }) } : {}),
|
|
97
103
|
};
|
|
98
104
|
if (config.lakebase) {
|
|
99
|
-
const lakebase = lakebaseClient({ ...config.lakebase, token: identity });
|
|
105
|
+
const lakebase = lakebaseClient({ ...config.lakebase, workspaceHost: config.host, token: identity });
|
|
100
106
|
bundle.lakebase = lakebase;
|
|
101
107
|
if (config.sessionStoreFactory)
|
|
102
108
|
bundle.store = config.sessionStoreFactory(lakebase);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAE3H,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAEnD,OAAO,EAAE,iCAAiC,EAAE,+BAA+B,EAAE,MAAM,YAAY,CAAC;AAChG,OAAO,EAAE,0BAA0B,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAElF,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAEpF,OAAO,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,0BAA0B,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAGjG,2FAA2F;AAC3F,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAE7H,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,6BAA6B,EAAE,4BAA4B,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAGtO,OAAO,EAAE,iCAAiC,EAAE,+BAA+B,EAAE,MAAM,YAAY,CAAC;AAEhG,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/lakebase.d.ts
CHANGED
|
@@ -1,15 +1,4 @@
|
|
|
1
1
|
import type { DatabricksTokenProvider } from './identity.js';
|
|
2
|
-
/**
|
|
3
|
-
* Databricks Lakebase is managed Postgres. This builds a Postgres client whose **password is the
|
|
4
|
-
* rotating OAuth token** (from {@link databricksIdentity}) rather than a static string: `pg.Pool`
|
|
5
|
-
* evaluates the `password` function for every new connection, so a long-lived pool never pins a
|
|
6
|
-
* stale token. The returned client is structurally compatible with `PostgresClientLike` from
|
|
7
|
-
* `@fabric-harness/node`, so it drops straight into `new PostgresSessionStore({ client })` (and the
|
|
8
|
-
* Postgres cost-budget / session-memory stores) — sessions + dispatch journal live in the lakehouse.
|
|
9
|
-
*
|
|
10
|
-
* Kept decoupled from `@fabric-harness/node` on purpose: this package owns the rotating-token
|
|
11
|
-
* client; store assembly happens at the app / `databricks()` bundle layer where `node` is present.
|
|
12
|
-
*/
|
|
13
2
|
export interface LakebaseClient {
|
|
14
3
|
query<T = Record<string, unknown>>(sql: string, params?: unknown[]): Promise<{
|
|
15
4
|
rows: T[];
|
|
@@ -21,7 +10,6 @@ export interface LakebasePoolConfig {
|
|
|
21
10
|
port: number;
|
|
22
11
|
database: string;
|
|
23
12
|
user: string;
|
|
24
|
-
/** Static password or a resolver evaluated per new connection (the rotating token path). */
|
|
25
13
|
password: string | (() => string | Promise<string>);
|
|
26
14
|
ssl?: boolean | {
|
|
27
15
|
rejectUnauthorized?: boolean;
|
|
@@ -29,20 +17,44 @@ export interface LakebasePoolConfig {
|
|
|
29
17
|
max?: number;
|
|
30
18
|
}
|
|
31
19
|
export type LakebasePoolFactory = (config: LakebasePoolConfig) => LakebaseClient;
|
|
20
|
+
export interface LakebaseCredentialProviderOptions {
|
|
21
|
+
/** Databricks workspace URL, distinct from the Lakebase Postgres host. */
|
|
22
|
+
workspaceHost: string;
|
|
23
|
+
/** Full endpoint resource name: projects/.../branches/.../endpoints/.... */
|
|
24
|
+
endpoint: string;
|
|
25
|
+
/** Workspace OAuth token. It is exchanged for a database credential. */
|
|
26
|
+
token: string | DatabricksTokenProvider;
|
|
27
|
+
fetchImpl?: typeof fetch;
|
|
28
|
+
/** Refresh this long before expiry. Default five minutes. */
|
|
29
|
+
refreshBeforeMs?: number;
|
|
30
|
+
/** Additional randomized early-refresh window. Default thirty seconds. */
|
|
31
|
+
refreshJitterMs?: number;
|
|
32
|
+
now?: () => number;
|
|
33
|
+
random?: () => number;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Exchange a workspace OAuth token for a Lakebase database credential. The
|
|
37
|
+
* result is cached, refreshed early with jitter, and refreshes are single-flight.
|
|
38
|
+
*/
|
|
39
|
+
export declare function lakebaseCredentialProvider(options: LakebaseCredentialProviderOptions): () => Promise<string>;
|
|
32
40
|
export interface LakebaseClientOptions {
|
|
33
41
|
host: string;
|
|
34
42
|
database: string;
|
|
35
43
|
user: string;
|
|
36
|
-
/**
|
|
37
|
-
|
|
38
|
-
/**
|
|
44
|
+
/** Direct database password. Intended for local Postgres/testing, not workspace OAuth. */
|
|
45
|
+
password?: string | (() => string | Promise<string>);
|
|
46
|
+
/** Workspace OAuth token to exchange. Requires workspaceHost and endpoint. */
|
|
47
|
+
token?: string | DatabricksTokenProvider;
|
|
48
|
+
workspaceHost?: string;
|
|
49
|
+
endpoint?: string;
|
|
50
|
+
fetchImpl?: typeof fetch;
|
|
51
|
+
refreshBeforeMs?: number;
|
|
52
|
+
refreshJitterMs?: number;
|
|
39
53
|
port?: number;
|
|
40
|
-
/** Default `{ rejectUnauthorized: true }` — Lakebase requires TLS. */
|
|
41
54
|
ssl?: boolean | {
|
|
42
55
|
rejectUnauthorized?: boolean;
|
|
43
56
|
};
|
|
44
57
|
max?: number;
|
|
45
|
-
/** Inject a pg-like Pool factory for testing; defaults to the optional `pg` package. */
|
|
46
58
|
poolFactory?: LakebasePoolFactory;
|
|
47
59
|
}
|
|
48
60
|
export declare function lakebaseClient(options: LakebaseClientOptions): LakebaseClient;
|
package/dist/lakebase.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lakebase.d.ts","sourceRoot":"","sources":["../src/lakebase.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"lakebase.d.ts","sourceRoot":"","sources":["../src/lakebase.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAI7D,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,CAAC,EAAE,CAAA;KAAE,CAAC,CAAC;IAC5F,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IACpD,GAAG,CAAC,EAAE,OAAO,GAAG;QAAE,kBAAkB,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IACjD,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,MAAM,mBAAmB,GAAG,CAAC,MAAM,EAAE,kBAAkB,KAAK,cAAc,CAAC;AAEjF,MAAM,WAAW,iCAAiC;IAChD,0EAA0E;IAC1E,aAAa,EAAE,MAAM,CAAC;IACtB,4EAA4E;IAC5E,QAAQ,EAAE,MAAM,CAAC;IACjB,wEAAwE;IACxE,KAAK,EAAE,MAAM,GAAG,uBAAuB,CAAC;IACxC,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,6DAA6D;IAC7D,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,0EAA0E;IAC1E,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,MAAM,CAAC;CACvB;AAOD;;;GAGG;AACH,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,iCAAiC,GACzC,MAAM,OAAO,CAAC,MAAM,CAAC,CA+CvB;AAYD,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,0FAA0F;IAC1F,QAAQ,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IACrD,8EAA8E;IAC9E,KAAK,CAAC,EAAE,MAAM,GAAG,uBAAuB,CAAC;IACzC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,OAAO,GAAG;QAAE,kBAAkB,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IACjD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,mBAAmB,CAAC;CACnC;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,qBAAqB,GAAG,cAAc,CA2B7E"}
|
package/dist/lakebase.js
CHANGED
|
@@ -1,13 +1,89 @@
|
|
|
1
1
|
import { createRequire } from 'node:module';
|
|
2
|
+
import { redactText } from '@fabric-harness/sdk';
|
|
2
3
|
const require = createRequire(import.meta.url);
|
|
4
|
+
/**
|
|
5
|
+
* Exchange a workspace OAuth token for a Lakebase database credential. The
|
|
6
|
+
* result is cached, refreshed early with jitter, and refreshes are single-flight.
|
|
7
|
+
*/
|
|
8
|
+
export function lakebaseCredentialProvider(options) {
|
|
9
|
+
const workspaceHost = options.workspaceHost.replace(/\/$/, '');
|
|
10
|
+
const fetchImpl = options.fetchImpl ?? fetch;
|
|
11
|
+
const now = options.now ?? Date.now;
|
|
12
|
+
const random = options.random ?? Math.random;
|
|
13
|
+
const refreshBeforeMs = options.refreshBeforeMs ?? 5 * 60_000;
|
|
14
|
+
const refreshJitterMs = options.refreshJitterMs ?? 30_000;
|
|
15
|
+
let cached;
|
|
16
|
+
let refreshing;
|
|
17
|
+
const refresh = async () => {
|
|
18
|
+
const workspaceToken = typeof options.token === 'function' ? await options.token() : options.token;
|
|
19
|
+
const response = await fetchImpl(`${workspaceHost}/api/2.0/postgres/credentials`, {
|
|
20
|
+
method: 'POST',
|
|
21
|
+
headers: {
|
|
22
|
+
authorization: `Bearer ${workspaceToken}`,
|
|
23
|
+
'content-type': 'application/json',
|
|
24
|
+
},
|
|
25
|
+
body: JSON.stringify({ endpoint: options.endpoint }),
|
|
26
|
+
});
|
|
27
|
+
if (!response.ok) {
|
|
28
|
+
const text = redactText(await response.text(), { additionalSecrets: [workspaceToken] });
|
|
29
|
+
throw new Error(`Lakebase credential exchange failed: ${response.status} ${response.statusText}: ${text.slice(0, 2000)}`);
|
|
30
|
+
}
|
|
31
|
+
const value = await response.json();
|
|
32
|
+
if (typeof value.token !== 'string' || !value.token) {
|
|
33
|
+
throw new Error('Lakebase credential exchange returned no token.');
|
|
34
|
+
}
|
|
35
|
+
const expiresAt = parseExpireTime(value.expire_time);
|
|
36
|
+
if (!Number.isFinite(expiresAt)) {
|
|
37
|
+
throw new Error('Lakebase credential exchange returned an invalid expire_time.');
|
|
38
|
+
}
|
|
39
|
+
const jitter = Math.max(0, refreshJitterMs) * random();
|
|
40
|
+
cached = {
|
|
41
|
+
token: value.token,
|
|
42
|
+
refreshAt: Math.max(now(), expiresAt - Math.max(0, refreshBeforeMs) - jitter),
|
|
43
|
+
};
|
|
44
|
+
return value.token;
|
|
45
|
+
};
|
|
46
|
+
return async () => {
|
|
47
|
+
if (cached && now() < cached.refreshAt)
|
|
48
|
+
return cached.token;
|
|
49
|
+
refreshing ??= refresh().finally(() => {
|
|
50
|
+
refreshing = undefined;
|
|
51
|
+
});
|
|
52
|
+
return refreshing;
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
function parseExpireTime(value) {
|
|
56
|
+
if (typeof value === 'number') {
|
|
57
|
+
// Databricks APIs commonly use epoch milliseconds, but tolerate epoch
|
|
58
|
+
// seconds so credentials are not treated as already expired.
|
|
59
|
+
return value < 1_000_000_000_000 ? value * 1000 : value;
|
|
60
|
+
}
|
|
61
|
+
if (typeof value === 'string')
|
|
62
|
+
return new Date(value).getTime();
|
|
63
|
+
return Number.NaN;
|
|
64
|
+
}
|
|
3
65
|
export function lakebaseClient(options) {
|
|
4
66
|
const factory = options.poolFactory ?? defaultPoolFactory();
|
|
67
|
+
let password = options.password;
|
|
68
|
+
if (password === undefined) {
|
|
69
|
+
if (!options.token || !options.workspaceHost || !options.endpoint) {
|
|
70
|
+
throw new Error('Lakebase OAuth requires token, workspaceHost, and endpoint. A workspace token cannot be used directly as the Postgres password.');
|
|
71
|
+
}
|
|
72
|
+
password = lakebaseCredentialProvider({
|
|
73
|
+
workspaceHost: options.workspaceHost,
|
|
74
|
+
endpoint: options.endpoint,
|
|
75
|
+
token: options.token,
|
|
76
|
+
...(options.fetchImpl ? { fetchImpl: options.fetchImpl } : {}),
|
|
77
|
+
...(options.refreshBeforeMs !== undefined ? { refreshBeforeMs: options.refreshBeforeMs } : {}),
|
|
78
|
+
...(options.refreshJitterMs !== undefined ? { refreshJitterMs: options.refreshJitterMs } : {}),
|
|
79
|
+
});
|
|
80
|
+
}
|
|
5
81
|
return factory({
|
|
6
82
|
host: options.host,
|
|
7
83
|
port: options.port ?? 5432,
|
|
8
84
|
database: options.database,
|
|
9
85
|
user: options.user,
|
|
10
|
-
password
|
|
86
|
+
password,
|
|
11
87
|
ssl: options.ssl ?? { rejectUnauthorized: true },
|
|
12
88
|
...(options.max !== undefined ? { max: options.max } : {}),
|
|
13
89
|
});
|
package/dist/lakebase.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lakebase.js","sourceRoot":"","sources":["../src/lakebase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"lakebase.js","sourceRoot":"","sources":["../src/lakebase.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import type { FabricEvent, SubmissionTelemetrySink, TelemetrySpan } from '@fabric-harness/sdk';
|
|
2
|
+
import type { DatabricksRestClient } from './client.js';
|
|
3
|
+
/**
|
|
4
|
+
* MLflow trace export (v2 migration, workstream C6): one MLflow trace per
|
|
5
|
+
* settled submission, so agent activity shows up in the workspace's MLflow
|
|
6
|
+
* experiment UI next to models and evaluations.
|
|
7
|
+
*
|
|
8
|
+
* Wiring: `sink` goes into `createSubmissionRunner({ telemetry })` and
|
|
9
|
+
* `onEvent` fans in with the app's `onEvent` callback. A `submission_started`
|
|
10
|
+
* telemetry event opens a span buffer keyed by the store session id
|
|
11
|
+
* (`agent:<agent>:<instanceId>:<session>` — the `sessionId` stamped on
|
|
12
|
+
* `FabricEvent`s during the attempt); every event that matches an open buffer
|
|
13
|
+
* and converts via the SDK's `eventToTelemetrySpan` (i.e. carries
|
|
14
|
+
* `data.durationMs`) is appended as a child span. `submission_settled` builds
|
|
15
|
+
* the trace and POSTs it to the MLflow **V3 traces API**
|
|
16
|
+
* (`POST /api/3.0/mlflow/traces`), then drops the buffer.
|
|
17
|
+
*
|
|
18
|
+
* The V3 payload ({@link buildMlflowTrace}) is implemented to the published
|
|
19
|
+
* API spec — OTLP-shaped spans with base64 ids, unix-nano timestamps and
|
|
20
|
+
* typed attributes — but live verification requires a workspace: run the
|
|
21
|
+
* live-gated smoke test (`DATABRICKS_LIVE_TEST=1` +
|
|
22
|
+
* `DATABRICKS_MLFLOW_EXPERIMENT_ID`) against yours before relying on it.
|
|
23
|
+
*
|
|
24
|
+
* Both `sink.record` and `onEvent` never throw — failures (including the
|
|
25
|
+
* async POST) are reported through `onError`.
|
|
26
|
+
*/
|
|
27
|
+
export interface MlflowTraceExporterOptions {
|
|
28
|
+
client: DatabricksRestClient;
|
|
29
|
+
/** MLflow experiment receiving the traces. */
|
|
30
|
+
experimentId: string;
|
|
31
|
+
/** Failure reporter (default console.error). */
|
|
32
|
+
onError?: (context: string, error: unknown) => void;
|
|
33
|
+
}
|
|
34
|
+
export interface MlflowTraceExporter {
|
|
35
|
+
/** Wire into `createSubmissionRunner({ telemetry })`. */
|
|
36
|
+
sink: SubmissionTelemetrySink;
|
|
37
|
+
/** Fan in with the app's `onEvent` to capture per-turn/tool spans. */
|
|
38
|
+
onEvent: (event: FabricEvent) => void;
|
|
39
|
+
}
|
|
40
|
+
export declare function mlflowTraceExporter(options: MlflowTraceExporterOptions): MlflowTraceExporter;
|
|
41
|
+
export interface MlflowTraceInput {
|
|
42
|
+
submissionId: string;
|
|
43
|
+
agent: string;
|
|
44
|
+
instanceId: string;
|
|
45
|
+
session: string;
|
|
46
|
+
experimentId: string;
|
|
47
|
+
/** Epoch ms when the submission started executing. */
|
|
48
|
+
startedAtMs: number;
|
|
49
|
+
/** Epoch ms when the submission settled. */
|
|
50
|
+
settledAtMs: number;
|
|
51
|
+
state: 'OK' | 'ERROR';
|
|
52
|
+
/** Child spans (from `eventToTelemetrySpan`) buffered during execution. */
|
|
53
|
+
spans: TelemetrySpan[];
|
|
54
|
+
attemptCount?: number;
|
|
55
|
+
tenantId?: string;
|
|
56
|
+
error?: string;
|
|
57
|
+
}
|
|
58
|
+
interface OtlpAttribute {
|
|
59
|
+
key: string;
|
|
60
|
+
value: {
|
|
61
|
+
string_value: string;
|
|
62
|
+
} | {
|
|
63
|
+
double_value: number;
|
|
64
|
+
} | {
|
|
65
|
+
int_value: string;
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
interface MlflowSpan {
|
|
69
|
+
trace_id: string;
|
|
70
|
+
span_id: string;
|
|
71
|
+
parent_span_id?: string;
|
|
72
|
+
name: string;
|
|
73
|
+
start_time_unix_nano: string;
|
|
74
|
+
end_time_unix_nano: string;
|
|
75
|
+
attributes: OtlpAttribute[];
|
|
76
|
+
status: {
|
|
77
|
+
code: 'STATUS_CODE_OK' | 'STATUS_CODE_ERROR';
|
|
78
|
+
message?: string;
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
export interface MlflowTracePayload {
|
|
82
|
+
trace: {
|
|
83
|
+
trace_info: {
|
|
84
|
+
trace_id: string;
|
|
85
|
+
trace_location: {
|
|
86
|
+
type: 'MLFLOW_EXPERIMENT';
|
|
87
|
+
mlflow_experiment: {
|
|
88
|
+
experiment_id: string;
|
|
89
|
+
};
|
|
90
|
+
};
|
|
91
|
+
request_time: string;
|
|
92
|
+
execution_duration: string;
|
|
93
|
+
state: 'OK' | 'ERROR';
|
|
94
|
+
trace_metadata: Record<string, string>;
|
|
95
|
+
tags: Record<string, string>;
|
|
96
|
+
};
|
|
97
|
+
trace_data: {
|
|
98
|
+
spans: MlflowSpan[];
|
|
99
|
+
};
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Build the MLflow V3 `POST /api/3.0/mlflow/traces` payload for one settled
|
|
104
|
+
* submission. Pure and deterministic: trace/span ids derive from the
|
|
105
|
+
* submission id (+ span index) via SHA-256, so replaying the same settled
|
|
106
|
+
* submission produces byte-identical ids. The root span covers the whole
|
|
107
|
+
* submission; buffered {@link TelemetrySpan}s become its children.
|
|
108
|
+
*/
|
|
109
|
+
export declare function buildMlflowTrace(input: MlflowTraceInput): MlflowTracePayload;
|
|
110
|
+
export {};
|
|
111
|
+
//# sourceMappingURL=mlflow-tracing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mlflow-tracing.d.ts","sourceRoot":"","sources":["../src/mlflow-tracing.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,WAAW,EACX,uBAAuB,EACvB,aAAa,EACd,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAExD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,WAAW,0BAA0B;IACzC,MAAM,EAAE,oBAAoB,CAAC;IAC7B,8CAA8C;IAC9C,YAAY,EAAE,MAAM,CAAC;IACrB,gDAAgD;IAChD,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CACrD;AAED,MAAM,WAAW,mBAAmB;IAClC,yDAAyD;IACzD,IAAI,EAAE,uBAAuB,CAAC;IAC9B,sEAAsE;IACtE,OAAO,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;CACvC;AAaD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,0BAA0B,GAAG,mBAAmB,CAoE5F;AAID,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,sDAAsD;IACtD,WAAW,EAAE,MAAM,CAAC;IACpB,4CAA4C;IAC5C,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,IAAI,GAAG,OAAO,CAAC;IACtB,2EAA2E;IAC3E,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,aAAa;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;CACpF;AAED,UAAU,UAAU;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,oBAAoB,EAAE,MAAM,CAAC;IAC7B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B,MAAM,EAAE;QAAE,IAAI,EAAE,gBAAgB,GAAG,mBAAmB,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC5E;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE;QACL,UAAU,EAAE;YACV,QAAQ,EAAE,MAAM,CAAC;YACjB,cAAc,EAAE;gBACd,IAAI,EAAE,mBAAmB,CAAC;gBAC1B,iBAAiB,EAAE;oBAAE,aAAa,EAAE,MAAM,CAAA;iBAAE,CAAC;aAC9C,CAAC;YACF,YAAY,EAAE,MAAM,CAAC;YACrB,kBAAkB,EAAE,MAAM,CAAC;YAC3B,KAAK,EAAE,IAAI,GAAG,OAAO,CAAC;YACtB,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YACvC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;SAC9B,CAAC;QACF,UAAU,EAAE;YAAE,KAAK,EAAE,UAAU,EAAE,CAAA;SAAE,CAAC;KACrC,CAAC;CACH;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,gBAAgB,GAAG,kBAAkB,CAmE5E"}
|