@dbx-tools/appkit 0.3.44 → 0.4.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/lib/index.d.ts +23 -0
- package/lib/index.js +20 -0
- package/lib/src/appkit.d.ts +51 -0
- package/lib/src/appkit.js +57 -0
- package/lib/src/config.d.ts +89 -0
- package/lib/src/config.js +403 -0
- package/lib/src/create-app.d.ts +72 -0
- package/lib/src/create-app.js +120 -0
- package/lib/src/databricks.d.ts +60 -0
- package/lib/src/databricks.js +107 -0
- package/lib/src/lakebase-resolver.d.ts +122 -0
- package/lib/src/lakebase-resolver.js +679 -0
- package/lib/src/pgaddress.d.ts +104 -0
- package/lib/src/pgaddress.js +171 -0
- package/lib/src/plugin.d.ts +90 -0
- package/lib/src/plugin.js +97 -0
- package/lib/src/provision.d.ts +51 -0
- package/lib/src/provision.js +133 -0
- package/lib/tsconfig.tsbuildinfo +1 -0
- package/package.json +11 -7
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lakebase cache-schema grant fix-up.
|
|
3
|
+
*
|
|
4
|
+
* AppKit's persistent cache (`CacheManager` -> `PersistentStorage`) uses a
|
|
5
|
+
* schema `appkit` and a table `appkit.appkit_cache_entries`. When the connecting
|
|
6
|
+
* Databricks identity lacks privileges on that schema, the cache migration
|
|
7
|
+
* throws, and because AppKit is typically run with `cache.strictPersistence:
|
|
8
|
+
* true`, the cache is silently switched to a disabled in-memory stub - so every
|
|
9
|
+
* persistent read (chart long-poll, history, etc.) misses and 404s.
|
|
10
|
+
*
|
|
11
|
+
* This grants the connecting role full rights on the cache schema, but only when
|
|
12
|
+
* the schema ALREADY EXISTS - it never creates the schema itself. Run from a
|
|
13
|
+
* LOCAL identity that owns the schema (or holds grant option on it); it is
|
|
14
|
+
* skipped inside a Databricks App, where the app SP cannot grant and its
|
|
15
|
+
* Postgres role does not exist until its first connection.
|
|
16
|
+
*
|
|
17
|
+
* Must run AFTER {@link applyLakebaseToEnv} has written the resolved connection
|
|
18
|
+
* to `process.env` (so `createLakebasePool` picks up host / database / endpoint)
|
|
19
|
+
* and BEFORE `createApp` initializes the cache.
|
|
20
|
+
*
|
|
21
|
+
* @module
|
|
22
|
+
*/
|
|
23
|
+
import { createLakebasePool, getWorkspaceClient, ValidationError } from "@databricks/appkit";
|
|
24
|
+
import { error, log } from "@dbx-tools/shared-core";
|
|
25
|
+
import { isAppEnv } from "./databricks.js";
|
|
26
|
+
const defaultLogger = log.logger("provision");
|
|
27
|
+
/** AppKit persistent-cache schema (see AppKit's `PersistentStorage`). */
|
|
28
|
+
const CACHE_SCHEMA = "appkit";
|
|
29
|
+
/**
|
|
30
|
+
* Characters a Lakebase Postgres role can legitimately contain: workspace
|
|
31
|
+
* identities are emails, service principals are UUIDs.
|
|
32
|
+
*/
|
|
33
|
+
const ROLE_PATTERN = /^[A-Za-z0-9._@+-]{1,255}$/;
|
|
34
|
+
/**
|
|
35
|
+
* Provisioning runs at boot as the local developer identity, before any plugin
|
|
36
|
+
* exists, so it is outside AppKit's interceptor chain and inherits no timeout
|
|
37
|
+
* from it. Both bounds are explicit for that reason.
|
|
38
|
+
*/
|
|
39
|
+
const CONNECT_TIMEOUT_MS = 10_000;
|
|
40
|
+
const STATEMENT_TIMEOUT_MS = 15_000;
|
|
41
|
+
/**
|
|
42
|
+
* Quote a Postgres identifier: wrap in double quotes and double any embedded
|
|
43
|
+
* quote. Schema and role names are identifiers, and Postgres does not accept a
|
|
44
|
+
* bind parameter in an identifier position, so quoting is the only defense
|
|
45
|
+
* available for these statements. Lakebase role names are usually emails
|
|
46
|
+
* (`user@host`), which must be quoted to be a valid identifier at all.
|
|
47
|
+
*/
|
|
48
|
+
function quoteIdent(ident) {
|
|
49
|
+
return `"${ident.replace(/"/g, '""')}"`;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Idempotent grants that make the (already-existing) AppKit cache schema fully
|
|
53
|
+
* usable by `role`. The `ALTER DEFAULT PRIVILEGES` lines cover the cache table
|
|
54
|
+
* whenever the schema owner creates it later.
|
|
55
|
+
*
|
|
56
|
+
* Throws a {@link ValidationError} when `role` is not a plausible Postgres role
|
|
57
|
+
* name, since the value lands in an identifier position.
|
|
58
|
+
*/
|
|
59
|
+
export function cacheGrantStatements(role) {
|
|
60
|
+
if (!ROLE_PATTERN.test(role)) {
|
|
61
|
+
throw ValidationError.invalidValue("role", role, "a Postgres role name");
|
|
62
|
+
}
|
|
63
|
+
const schema = quoteIdent(CACHE_SCHEMA);
|
|
64
|
+
const target = quoteIdent(role);
|
|
65
|
+
return [
|
|
66
|
+
`GRANT USAGE, CREATE ON SCHEMA ${schema} TO ${target}`,
|
|
67
|
+
`GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA ${schema} TO ${target}`,
|
|
68
|
+
`GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA ${schema} TO ${target}`,
|
|
69
|
+
`ALTER DEFAULT PRIVILEGES IN SCHEMA ${schema} GRANT ALL ON TABLES TO ${target}`,
|
|
70
|
+
`ALTER DEFAULT PRIVILEGES IN SCHEMA ${schema} GRANT ALL ON SEQUENCES TO ${target}`,
|
|
71
|
+
];
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Grant `role` rights on the AppKit cache schema, but only when that schema
|
|
75
|
+
* already exists.
|
|
76
|
+
*
|
|
77
|
+
* No-ops inside a Databricks App env, when `role` is undefined, or when the
|
|
78
|
+
* schema is absent. Best-effort otherwise: any failure (e.g. the local identity
|
|
79
|
+
* doesn't own the schema) is logged and swallowed so it never blocks startup -
|
|
80
|
+
* a disabled cache is degraded, not fatal.
|
|
81
|
+
*
|
|
82
|
+
* @param role - Postgres role to grant to and connect as (the resolved
|
|
83
|
+
* workspace-client identity); skips when undefined.
|
|
84
|
+
* @param logger - Logger to report progress on. Defaults to this module's.
|
|
85
|
+
*
|
|
86
|
+
* @example
|
|
87
|
+
* import { provision } from "@dbx-tools/appkit";
|
|
88
|
+
*
|
|
89
|
+
* await provision.provisionCacheSchema("app-service-principal@databricks.com");
|
|
90
|
+
*/
|
|
91
|
+
export async function provisionCacheSchema(role, logger = defaultLogger) {
|
|
92
|
+
if (isAppEnv()) {
|
|
93
|
+
logger.debug("autopg: skip cache provisioning (inside a Databricks App)");
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
if (!role) {
|
|
97
|
+
logger.warn("autopg: skip cache provisioning (could not resolve connecting role)");
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
// Pass `user` explicitly: autopg resolves the connection target
|
|
101
|
+
// (host/database/endpoint) but not the identity, so `createLakebasePool`'s
|
|
102
|
+
// synchronous username lookup would otherwise throw. `getWorkspaceClient({})`
|
|
103
|
+
// returns a fresh default-auth client - literally `new WorkspaceClient({})`,
|
|
104
|
+
// but built against the SDK version AppKit's `createLakebasePool` expects
|
|
105
|
+
// (importing the SDK class directly here pulls a newer, type-incompatible copy).
|
|
106
|
+
const pool = createLakebasePool({
|
|
107
|
+
user: role,
|
|
108
|
+
workspaceClient: getWorkspaceClient({}),
|
|
109
|
+
connectionTimeoutMillis: CONNECT_TIMEOUT_MS,
|
|
110
|
+
statement_timeout: STATEMENT_TIMEOUT_MS,
|
|
111
|
+
});
|
|
112
|
+
try {
|
|
113
|
+
const found = await pool.query("SELECT 1 FROM information_schema.schemata WHERE schema_name = $1", [CACHE_SCHEMA]);
|
|
114
|
+
if (found.rowCount === 0) {
|
|
115
|
+
logger.debug("autopg: skip cache provisioning (schema absent)", { schema: CACHE_SCHEMA });
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
for (const sql of cacheGrantStatements(role)) {
|
|
119
|
+
await pool.query(sql);
|
|
120
|
+
}
|
|
121
|
+
logger.info("autopg: granted cache schema", { schema: CACHE_SCHEMA, role });
|
|
122
|
+
}
|
|
123
|
+
catch (err) {
|
|
124
|
+
logger.warn("autopg: cache provisioning failed (continuing)", {
|
|
125
|
+
schema: CACHE_SCHEMA,
|
|
126
|
+
error: error.errorMessage(err),
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
finally {
|
|
130
|
+
await pool.end().catch(() => { });
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlzaW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Byb3Zpc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUJHO0FBRUgsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzdGLE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFcEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUV4QyxNQUFNLGFBQWEsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBRTlDLHlFQUF5RTtBQUN6RSxNQUFNLFlBQVksR0FBRyxRQUFRLENBQUM7QUFFOUI7OztHQUdHO0FBQ0gsTUFBTSxZQUFZLEdBQUcsMkJBQTJCLENBQUM7QUFFakQ7Ozs7R0FJRztBQUNILE1BQU0sa0JBQWtCLEdBQUcsTUFBTSxDQUFDO0FBQ2xDLE1BQU0sb0JBQW9CLEdBQUcsTUFBTSxDQUFDO0FBRXBDOzs7Ozs7R0FNRztBQUNILFNBQVMsVUFBVSxDQUFDLEtBQWE7SUFDL0IsT0FBTyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDMUMsQ0FBQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsb0JBQW9CLENBQUMsSUFBWTtJQUMvQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQzdCLE1BQU0sZUFBZSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLHNCQUFzQixDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUNELE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUN4QyxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEMsT0FBTztRQUNMLGlDQUFpQyxNQUFNLE9BQU8sTUFBTSxFQUFFO1FBQ3RELGdEQUFnRCxNQUFNLE9BQU8sTUFBTSxFQUFFO1FBQ3JFLG1EQUFtRCxNQUFNLE9BQU8sTUFBTSxFQUFFO1FBQ3hFLHNDQUFzQyxNQUFNLDJCQUEyQixNQUFNLEVBQUU7UUFDL0Usc0NBQXNDLE1BQU0sOEJBQThCLE1BQU0sRUFBRTtLQUNuRixDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsb0JBQW9CLENBQ3hDLElBQXdCLEVBQ3hCLFNBQXFCLGFBQWE7SUFFbEMsSUFBSSxRQUFRLEVBQUUsRUFBRSxDQUFDO1FBQ2YsTUFBTSxDQUFDLEtBQUssQ0FBQywyREFBMkQsQ0FBQyxDQUFDO1FBQzFFLE9BQU87SUFDVCxDQUFDO0lBQ0QsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ1YsTUFBTSxDQUFDLElBQUksQ0FBQyxxRUFBcUUsQ0FBQyxDQUFDO1FBQ25GLE9BQU87SUFDVCxDQUFDO0lBQ0QsZ0VBQWdFO0lBQ2hFLDJFQUEyRTtJQUMzRSw4RUFBOEU7SUFDOUUsNkVBQTZFO0lBQzdFLDBFQUEwRTtJQUMxRSxpRkFBaUY7SUFDakYsTUFBTSxJQUFJLEdBQUcsa0JBQWtCLENBQUM7UUFDOUIsSUFBSSxFQUFFLElBQUk7UUFDVixlQUFlLEVBQUUsa0JBQWtCLENBQUMsRUFBRSxDQUFDO1FBQ3ZDLHVCQUF1QixFQUFFLGtCQUFrQjtRQUMzQyxpQkFBaUIsRUFBRSxvQkFBb0I7S0FDeEMsQ0FBQyxDQUFDO0lBQ0gsSUFBSSxDQUFDO1FBQ0gsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUM1QixrRUFBa0UsRUFDbEUsQ0FBQyxZQUFZLENBQUMsQ0FDZixDQUFDO1FBQ0YsSUFBSSxLQUFLLENBQUMsUUFBUSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3pCLE1BQU0sQ0FBQyxLQUFLLENBQUMsaURBQWlELEVBQUUsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQztZQUMxRixPQUFPO1FBQ1QsQ0FBQztRQUNELEtBQUssTUFBTSxHQUFHLElBQUksb0JBQW9CLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUM3QyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDeEIsQ0FBQztRQUNELE1BQU0sQ0FBQyxJQUFJLENBQUMsOEJBQThCLEVBQUUsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDYixNQUFNLENBQUMsSUFBSSxDQUFDLGdEQUFnRCxFQUFFO1lBQzVELE1BQU0sRUFBRSxZQUFZO1lBQ3BCLEtBQUssRUFBRSxLQUFLLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQztTQUMvQixDQUFDLENBQUM7SUFDTCxDQUFDO1lBQVMsQ0FBQztRQUNULE1BQU0sSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUMsQ0FBQztJQUNuQyxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTGFrZWJhc2UgY2FjaGUtc2NoZW1hIGdyYW50IGZpeC11cC5cbiAqXG4gKiBBcHBLaXQncyBwZXJzaXN0ZW50IGNhY2hlIChgQ2FjaGVNYW5hZ2VyYCAtPiBgUGVyc2lzdGVudFN0b3JhZ2VgKSB1c2VzIGFcbiAqIHNjaGVtYSBgYXBwa2l0YCBhbmQgYSB0YWJsZSBgYXBwa2l0LmFwcGtpdF9jYWNoZV9lbnRyaWVzYC4gV2hlbiB0aGUgY29ubmVjdGluZ1xuICogRGF0YWJyaWNrcyBpZGVudGl0eSBsYWNrcyBwcml2aWxlZ2VzIG9uIHRoYXQgc2NoZW1hLCB0aGUgY2FjaGUgbWlncmF0aW9uXG4gKiB0aHJvd3MsIGFuZCBiZWNhdXNlIEFwcEtpdCBpcyB0eXBpY2FsbHkgcnVuIHdpdGggYGNhY2hlLnN0cmljdFBlcnNpc3RlbmNlOlxuICogdHJ1ZWAsIHRoZSBjYWNoZSBpcyBzaWxlbnRseSBzd2l0Y2hlZCB0byBhIGRpc2FibGVkIGluLW1lbW9yeSBzdHViIC0gc28gZXZlcnlcbiAqIHBlcnNpc3RlbnQgcmVhZCAoY2hhcnQgbG9uZy1wb2xsLCBoaXN0b3J5LCBldGMuKSBtaXNzZXMgYW5kIDQwNHMuXG4gKlxuICogVGhpcyBncmFudHMgdGhlIGNvbm5lY3Rpbmcgcm9sZSBmdWxsIHJpZ2h0cyBvbiB0aGUgY2FjaGUgc2NoZW1hLCBidXQgb25seSB3aGVuXG4gKiB0aGUgc2NoZW1hIEFMUkVBRFkgRVhJU1RTIC0gaXQgbmV2ZXIgY3JlYXRlcyB0aGUgc2NoZW1hIGl0c2VsZi4gUnVuIGZyb20gYVxuICogTE9DQUwgaWRlbnRpdHkgdGhhdCBvd25zIHRoZSBzY2hlbWEgKG9yIGhvbGRzIGdyYW50IG9wdGlvbiBvbiBpdCk7IGl0IGlzXG4gKiBza2lwcGVkIGluc2lkZSBhIERhdGFicmlja3MgQXBwLCB3aGVyZSB0aGUgYXBwIFNQIGNhbm5vdCBncmFudCBhbmQgaXRzXG4gKiBQb3N0Z3JlcyByb2xlIGRvZXMgbm90IGV4aXN0IHVudGlsIGl0cyBmaXJzdCBjb25uZWN0aW9uLlxuICpcbiAqIE11c3QgcnVuIEFGVEVSIHtAbGluayBhcHBseUxha2ViYXNlVG9FbnZ9IGhhcyB3cml0dGVuIHRoZSByZXNvbHZlZCBjb25uZWN0aW9uXG4gKiB0byBgcHJvY2Vzcy5lbnZgIChzbyBgY3JlYXRlTGFrZWJhc2VQb29sYCBwaWNrcyB1cCBob3N0IC8gZGF0YWJhc2UgLyBlbmRwb2ludClcbiAqIGFuZCBCRUZPUkUgYGNyZWF0ZUFwcGAgaW5pdGlhbGl6ZXMgdGhlIGNhY2hlLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBjcmVhdGVMYWtlYmFzZVBvb2wsIGdldFdvcmtzcGFjZUNsaWVudCwgVmFsaWRhdGlvbkVycm9yIH0gZnJvbSBcIkBkYXRhYnJpY2tzL2FwcGtpdFwiO1xuaW1wb3J0IHsgZXJyb3IsIGxvZyB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5cbmltcG9ydCB7IGlzQXBwRW52IH0gZnJvbSBcIi4vZGF0YWJyaWNrc1wiO1xuXG5jb25zdCBkZWZhdWx0TG9nZ2VyID0gbG9nLmxvZ2dlcihcInByb3Zpc2lvblwiKTtcblxuLyoqIEFwcEtpdCBwZXJzaXN0ZW50LWNhY2hlIHNjaGVtYSAoc2VlIEFwcEtpdCdzIGBQZXJzaXN0ZW50U3RvcmFnZWApLiAqL1xuY29uc3QgQ0FDSEVfU0NIRU1BID0gXCJhcHBraXRcIjtcblxuLyoqXG4gKiBDaGFyYWN0ZXJzIGEgTGFrZWJhc2UgUG9zdGdyZXMgcm9sZSBjYW4gbGVnaXRpbWF0ZWx5IGNvbnRhaW46IHdvcmtzcGFjZVxuICogaWRlbnRpdGllcyBhcmUgZW1haWxzLCBzZXJ2aWNlIHByaW5jaXBhbHMgYXJlIFVVSURzLlxuICovXG5jb25zdCBST0xFX1BBVFRFUk4gPSAvXltBLVphLXowLTkuX0ArLV17MSwyNTV9JC87XG5cbi8qKlxuICogUHJvdmlzaW9uaW5nIHJ1bnMgYXQgYm9vdCBhcyB0aGUgbG9jYWwgZGV2ZWxvcGVyIGlkZW50aXR5LCBiZWZvcmUgYW55IHBsdWdpblxuICogZXhpc3RzLCBzbyBpdCBpcyBvdXRzaWRlIEFwcEtpdCdzIGludGVyY2VwdG9yIGNoYWluIGFuZCBpbmhlcml0cyBubyB0aW1lb3V0XG4gKiBmcm9tIGl0LiBCb3RoIGJvdW5kcyBhcmUgZXhwbGljaXQgZm9yIHRoYXQgcmVhc29uLlxuICovXG5jb25zdCBDT05ORUNUX1RJTUVPVVRfTVMgPSAxMF8wMDA7XG5jb25zdCBTVEFURU1FTlRfVElNRU9VVF9NUyA9IDE1XzAwMDtcblxuLyoqXG4gKiBRdW90ZSBhIFBvc3RncmVzIGlkZW50aWZpZXI6IHdyYXAgaW4gZG91YmxlIHF1b3RlcyBhbmQgZG91YmxlIGFueSBlbWJlZGRlZFxuICogcXVvdGUuIFNjaGVtYSBhbmQgcm9sZSBuYW1lcyBhcmUgaWRlbnRpZmllcnMsIGFuZCBQb3N0Z3JlcyBkb2VzIG5vdCBhY2NlcHQgYVxuICogYmluZCBwYXJhbWV0ZXIgaW4gYW4gaWRlbnRpZmllciBwb3NpdGlvbiwgc28gcXVvdGluZyBpcyB0aGUgb25seSBkZWZlbnNlXG4gKiBhdmFpbGFibGUgZm9yIHRoZXNlIHN0YXRlbWVudHMuIExha2ViYXNlIHJvbGUgbmFtZXMgYXJlIHVzdWFsbHkgZW1haWxzXG4gKiAoYHVzZXJAaG9zdGApLCB3aGljaCBtdXN0IGJlIHF1b3RlZCB0byBiZSBhIHZhbGlkIGlkZW50aWZpZXIgYXQgYWxsLlxuICovXG5mdW5jdGlvbiBxdW90ZUlkZW50KGlkZW50OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYFwiJHtpZGVudC5yZXBsYWNlKC9cIi9nLCAnXCJcIicpfVwiYDtcbn1cblxuLyoqXG4gKiBJZGVtcG90ZW50IGdyYW50cyB0aGF0IG1ha2UgdGhlIChhbHJlYWR5LWV4aXN0aW5nKSBBcHBLaXQgY2FjaGUgc2NoZW1hIGZ1bGx5XG4gKiB1c2FibGUgYnkgYHJvbGVgLiBUaGUgYEFMVEVSIERFRkFVTFQgUFJJVklMRUdFU2AgbGluZXMgY292ZXIgdGhlIGNhY2hlIHRhYmxlXG4gKiB3aGVuZXZlciB0aGUgc2NoZW1hIG93bmVyIGNyZWF0ZXMgaXQgbGF0ZXIuXG4gKlxuICogVGhyb3dzIGEge0BsaW5rIFZhbGlkYXRpb25FcnJvcn0gd2hlbiBgcm9sZWAgaXMgbm90IGEgcGxhdXNpYmxlIFBvc3RncmVzIHJvbGVcbiAqIG5hbWUsIHNpbmNlIHRoZSB2YWx1ZSBsYW5kcyBpbiBhbiBpZGVudGlmaWVyIHBvc2l0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FjaGVHcmFudFN0YXRlbWVudHMocm9sZTogc3RyaW5nKTogcmVhZG9ubHkgc3RyaW5nW10ge1xuICBpZiAoIVJPTEVfUEFUVEVSTi50ZXN0KHJvbGUpKSB7XG4gICAgdGhyb3cgVmFsaWRhdGlvbkVycm9yLmludmFsaWRWYWx1ZShcInJvbGVcIiwgcm9sZSwgXCJhIFBvc3RncmVzIHJvbGUgbmFtZVwiKTtcbiAgfVxuICBjb25zdCBzY2hlbWEgPSBxdW90ZUlkZW50KENBQ0hFX1NDSEVNQSk7XG4gIGNvbnN0IHRhcmdldCA9IHF1b3RlSWRlbnQocm9sZSk7XG4gIHJldHVybiBbXG4gICAgYEdSQU5UIFVTQUdFLCBDUkVBVEUgT04gU0NIRU1BICR7c2NoZW1hfSBUTyAke3RhcmdldH1gLFxuICAgIGBHUkFOVCBBTEwgUFJJVklMRUdFUyBPTiBBTEwgVEFCTEVTIElOIFNDSEVNQSAke3NjaGVtYX0gVE8gJHt0YXJnZXR9YCxcbiAgICBgR1JBTlQgQUxMIFBSSVZJTEVHRVMgT04gQUxMIFNFUVVFTkNFUyBJTiBTQ0hFTUEgJHtzY2hlbWF9IFRPICR7dGFyZ2V0fWAsXG4gICAgYEFMVEVSIERFRkFVTFQgUFJJVklMRUdFUyBJTiBTQ0hFTUEgJHtzY2hlbWF9IEdSQU5UIEFMTCBPTiBUQUJMRVMgVE8gJHt0YXJnZXR9YCxcbiAgICBgQUxURVIgREVGQVVMVCBQUklWSUxFR0VTIElOIFNDSEVNQSAke3NjaGVtYX0gR1JBTlQgQUxMIE9OIFNFUVVFTkNFUyBUTyAke3RhcmdldH1gLFxuICBdO1xufVxuXG4vKipcbiAqIEdyYW50IGByb2xlYCByaWdodHMgb24gdGhlIEFwcEtpdCBjYWNoZSBzY2hlbWEsIGJ1dCBvbmx5IHdoZW4gdGhhdCBzY2hlbWFcbiAqIGFscmVhZHkgZXhpc3RzLlxuICpcbiAqIE5vLW9wcyBpbnNpZGUgYSBEYXRhYnJpY2tzIEFwcCBlbnYsIHdoZW4gYHJvbGVgIGlzIHVuZGVmaW5lZCwgb3Igd2hlbiB0aGVcbiAqIHNjaGVtYSBpcyBhYnNlbnQuIEJlc3QtZWZmb3J0IG90aGVyd2lzZTogYW55IGZhaWx1cmUgKGUuZy4gdGhlIGxvY2FsIGlkZW50aXR5XG4gKiBkb2Vzbid0IG93biB0aGUgc2NoZW1hKSBpcyBsb2dnZWQgYW5kIHN3YWxsb3dlZCBzbyBpdCBuZXZlciBibG9ja3Mgc3RhcnR1cCAtXG4gKiBhIGRpc2FibGVkIGNhY2hlIGlzIGRlZ3JhZGVkLCBub3QgZmF0YWwuXG4gKlxuICogQHBhcmFtIHJvbGUgLSBQb3N0Z3JlcyByb2xlIHRvIGdyYW50IHRvIGFuZCBjb25uZWN0IGFzICh0aGUgcmVzb2x2ZWRcbiAqICAgd29ya3NwYWNlLWNsaWVudCBpZGVudGl0eSk7IHNraXBzIHdoZW4gdW5kZWZpbmVkLlxuICogQHBhcmFtIGxvZ2dlciAtIExvZ2dlciB0byByZXBvcnQgcHJvZ3Jlc3Mgb24uIERlZmF1bHRzIHRvIHRoaXMgbW9kdWxlJ3MuXG4gKlxuICogQGV4YW1wbGVcbiAqIGltcG9ydCB7IHByb3Zpc2lvbiB9IGZyb20gXCJAZGJ4LXRvb2xzL2FwcGtpdFwiO1xuICpcbiAqIGF3YWl0IHByb3Zpc2lvbi5wcm92aXNpb25DYWNoZVNjaGVtYShcImFwcC1zZXJ2aWNlLXByaW5jaXBhbEBkYXRhYnJpY2tzLmNvbVwiKTtcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb3Zpc2lvbkNhY2hlU2NoZW1hKFxuICByb2xlOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIGxvZ2dlcjogbG9nLkxvZ2dlciA9IGRlZmF1bHRMb2dnZXIsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKGlzQXBwRW52KCkpIHtcbiAgICBsb2dnZXIuZGVidWcoXCJhdXRvcGc6IHNraXAgY2FjaGUgcHJvdmlzaW9uaW5nIChpbnNpZGUgYSBEYXRhYnJpY2tzIEFwcClcIik7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmICghcm9sZSkge1xuICAgIGxvZ2dlci53YXJuKFwiYXV0b3BnOiBza2lwIGNhY2hlIHByb3Zpc2lvbmluZyAoY291bGQgbm90IHJlc29sdmUgY29ubmVjdGluZyByb2xlKVwiKTtcbiAgICByZXR1cm47XG4gIH1cbiAgLy8gUGFzcyBgdXNlcmAgZXhwbGljaXRseTogYXV0b3BnIHJlc29sdmVzIHRoZSBjb25uZWN0aW9uIHRhcmdldFxuICAvLyAoaG9zdC9kYXRhYmFzZS9lbmRwb2ludCkgYnV0IG5vdCB0aGUgaWRlbnRpdHksIHNvIGBjcmVhdGVMYWtlYmFzZVBvb2xgJ3NcbiAgLy8gc3luY2hyb25vdXMgdXNlcm5hbWUgbG9va3VwIHdvdWxkIG90aGVyd2lzZSB0aHJvdy4gYGdldFdvcmtzcGFjZUNsaWVudCh7fSlgXG4gIC8vIHJldHVybnMgYSBmcmVzaCBkZWZhdWx0LWF1dGggY2xpZW50IC0gbGl0ZXJhbGx5IGBuZXcgV29ya3NwYWNlQ2xpZW50KHt9KWAsXG4gIC8vIGJ1dCBidWlsdCBhZ2FpbnN0IHRoZSBTREsgdmVyc2lvbiBBcHBLaXQncyBgY3JlYXRlTGFrZWJhc2VQb29sYCBleHBlY3RzXG4gIC8vIChpbXBvcnRpbmcgdGhlIFNESyBjbGFzcyBkaXJlY3RseSBoZXJlIHB1bGxzIGEgbmV3ZXIsIHR5cGUtaW5jb21wYXRpYmxlIGNvcHkpLlxuICBjb25zdCBwb29sID0gY3JlYXRlTGFrZWJhc2VQb29sKHtcbiAgICB1c2VyOiByb2xlLFxuICAgIHdvcmtzcGFjZUNsaWVudDogZ2V0V29ya3NwYWNlQ2xpZW50KHt9KSxcbiAgICBjb25uZWN0aW9uVGltZW91dE1pbGxpczogQ09OTkVDVF9USU1FT1VUX01TLFxuICAgIHN0YXRlbWVudF90aW1lb3V0OiBTVEFURU1FTlRfVElNRU9VVF9NUyxcbiAgfSk7XG4gIHRyeSB7XG4gICAgY29uc3QgZm91bmQgPSBhd2FpdCBwb29sLnF1ZXJ5KFxuICAgICAgXCJTRUxFQ1QgMSBGUk9NIGluZm9ybWF0aW9uX3NjaGVtYS5zY2hlbWF0YSBXSEVSRSBzY2hlbWFfbmFtZSA9ICQxXCIsXG4gICAgICBbQ0FDSEVfU0NIRU1BXSxcbiAgICApO1xuICAgIGlmIChmb3VuZC5yb3dDb3VudCA9PT0gMCkge1xuICAgICAgbG9nZ2VyLmRlYnVnKFwiYXV0b3BnOiBza2lwIGNhY2hlIHByb3Zpc2lvbmluZyAoc2NoZW1hIGFic2VudClcIiwgeyBzY2hlbWE6IENBQ0hFX1NDSEVNQSB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZm9yIChjb25zdCBzcWwgb2YgY2FjaGVHcmFudFN0YXRlbWVudHMocm9sZSkpIHtcbiAgICAgIGF3YWl0IHBvb2wucXVlcnkoc3FsKTtcbiAgICB9XG4gICAgbG9nZ2VyLmluZm8oXCJhdXRvcGc6IGdyYW50ZWQgY2FjaGUgc2NoZW1hXCIsIHsgc2NoZW1hOiBDQUNIRV9TQ0hFTUEsIHJvbGUgfSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZ2dlci53YXJuKFwiYXV0b3BnOiBjYWNoZSBwcm92aXNpb25pbmcgZmFpbGVkIChjb250aW51aW5nKVwiLCB7XG4gICAgICBzY2hlbWE6IENBQ0hFX1NDSEVNQSxcbiAgICAgIGVycm9yOiBlcnJvci5lcnJvck1lc3NhZ2UoZXJyKSxcbiAgICB9KTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBwb29sLmVuZCgpLmNhdGNoKCgpID0+IHt9KTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"root":["../src/appkit.ts","../src/config.ts","../src/create-app.ts","../src/databricks.ts","../src/lakebase-resolver.ts","../src/pgaddress.ts","../src/plugin.ts","../src/provision.ts","../index.ts"],"version":"5.9.3"}
|
package/package.json
CHANGED
|
@@ -18,24 +18,28 @@
|
|
|
18
18
|
"@databricks/sdk-experimental": "^0.17.0",
|
|
19
19
|
"yaml": "^2.9.0",
|
|
20
20
|
"zod": "4.3.6",
|
|
21
|
-
"@dbx-tools/core": "0.
|
|
22
|
-
"@dbx-tools/shared-core": "0.
|
|
21
|
+
"@dbx-tools/core": "0.4.0",
|
|
22
|
+
"@dbx-tools/shared-core": "0.4.0"
|
|
23
23
|
},
|
|
24
|
-
"main": "index.
|
|
24
|
+
"main": "./lib/index.js",
|
|
25
25
|
"license": "UNLICENSED",
|
|
26
26
|
"publishConfig": {
|
|
27
27
|
"access": "public"
|
|
28
28
|
},
|
|
29
|
-
"version": "0.
|
|
30
|
-
"types": "index.ts",
|
|
29
|
+
"version": "0.4.0",
|
|
30
|
+
"types": "./lib/index.d.ts",
|
|
31
31
|
"type": "module",
|
|
32
32
|
"exports": {
|
|
33
|
-
".":
|
|
33
|
+
".": {
|
|
34
|
+
"types": "./lib/index.d.ts",
|
|
35
|
+
"default": "./lib/index.js"
|
|
36
|
+
},
|
|
34
37
|
"./package.json": "./package.json"
|
|
35
38
|
},
|
|
36
39
|
"files": [
|
|
37
40
|
"index.ts",
|
|
38
|
-
"src"
|
|
41
|
+
"src",
|
|
42
|
+
"lib"
|
|
39
43
|
],
|
|
40
44
|
"peerDependenciesMeta": {
|
|
41
45
|
"@databricks/appkit": {
|