@dbx-tools/appkit 0.6.69 → 0.6.71
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 +7 -8
- package/index.ts +1 -3
- package/lib/index.d.ts +1 -3
- package/lib/index.js +1 -2
- package/lib/src/_cache-storage.d.ts +24 -0
- package/lib/src/_cache-storage.js +106 -0
- package/lib/src/appkit.d.ts +92 -3
- package/lib/src/appkit.js +255 -8
- package/lib/src/interceptor.d.ts +10 -10
- package/lib/src/interceptor.js +7 -7
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -3
- package/src/_cache-storage.ts +129 -0
- package/src/appkit.ts +338 -7
- package/src/interceptor.ts +10 -10
- package/lib/src/create-app.d.ts +0 -96
- package/lib/src/create-app.js +0 -154
- package/src/create-app.ts +0 -230
package/README.md
CHANGED
|
@@ -50,16 +50,16 @@ Use this package when the friction is around bootstrapping and reuse:
|
|
|
50
50
|
|
|
51
51
|
## Create An Auto-Configured App
|
|
52
52
|
|
|
53
|
-
`
|
|
53
|
+
`appkit.createApp` is a drop-in wrapper around AppKit `createApp` with the
|
|
54
54
|
same config and the same typed plugin-export map. It runs
|
|
55
|
-
`
|
|
55
|
+
`appkit.autoConfigure()` first so enabled capabilities can populate
|
|
56
56
|
environment variables before plugin setup runs.
|
|
57
57
|
|
|
58
58
|
```ts
|
|
59
59
|
import { lakebase, server } from "@databricks/appkit";
|
|
60
|
-
import {
|
|
60
|
+
import { appkit } from "@dbx-tools/appkit";
|
|
61
61
|
|
|
62
|
-
await
|
|
62
|
+
await appkit.createApp({
|
|
63
63
|
plugins: [server(), lakebase()],
|
|
64
64
|
});
|
|
65
65
|
```
|
|
@@ -76,7 +76,7 @@ Databricks Asset Bundle validation, and deployed Apps.
|
|
|
76
76
|
|
|
77
77
|
Boot-time resolution runs as the service principal before any plugin exists, so
|
|
78
78
|
it sits outside AppKit's interceptor chain. It carries its own timeout, and
|
|
79
|
-
`
|
|
79
|
+
`appkit.autoConfigure()` accepts an `AbortSignal` when a caller wants to
|
|
80
80
|
cancel it earlier.
|
|
81
81
|
|
|
82
82
|
Use the lower-level functions when you need to inspect or customize the result:
|
|
@@ -110,7 +110,7 @@ reason.
|
|
|
110
110
|
|
|
111
111
|
## Configuration
|
|
112
112
|
|
|
113
|
-
`
|
|
113
|
+
`appkit.createApp()` accepts everything AppKit's `createApp` does, plus:
|
|
114
114
|
|
|
115
115
|
| Option | Type | Default | Description |
|
|
116
116
|
| --------------- | ------------------------------- | ------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
@@ -324,11 +324,10 @@ is shared. `@dbx-tools/appkit-mastra` exposes this as its `genieIdentity` option
|
|
|
324
324
|
|
|
325
325
|
| Module | Responsibility |
|
|
326
326
|
| ------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
327
|
-
| `
|
|
327
|
+
| `appkit` | `createApp()` / `autoConfigure()`, plus execution context lookup and initialization. |
|
|
328
328
|
| `lakebaseResolver` | Lakebase connection discovery, default picking, optional auto-create, and env application (`applyLakebaseEnv()` for the full set a pool needs). |
|
|
329
329
|
| `pgaddress` | Permissive Lakebase/Postgres address parser. |
|
|
330
330
|
| `config` | Local/env/bundle/app-yaml config lookup. |
|
|
331
|
-
| `appkit` | Execution context lookup and initialization. |
|
|
332
331
|
| `databricks` | App env detection and SDK context cancellation adapters. |
|
|
333
332
|
| `plugin` | Typed AppKit plugin data, instance, and required-instance lookup. |
|
|
334
333
|
| `provision` | Cache schema provisioning helpers. |
|
package/index.ts
CHANGED
|
@@ -4,7 +4,6 @@
|
|
|
4
4
|
|
|
5
5
|
export * as appkit from "./src/appkit.ts";
|
|
6
6
|
export * as config from "./src/config.ts";
|
|
7
|
-
export * as createApp from "./src/create-app.ts";
|
|
8
7
|
export * as databricks from "./src/databricks.ts";
|
|
9
8
|
export * as identity from "./src/identity.ts";
|
|
10
9
|
export * as interceptor from "./src/interceptor.ts";
|
|
@@ -12,9 +11,8 @@ export * as lakebaseResolver from "./src/lakebase-resolver.ts";
|
|
|
12
11
|
export * as pgaddress from "./src/pgaddress.ts";
|
|
13
12
|
export * as plugin from "./src/plugin.ts";
|
|
14
13
|
export * as provision from "./src/provision.ts";
|
|
15
|
-
export type { ExecutionContextLike, WorkspaceClientLike } from "./src/appkit.ts";
|
|
14
|
+
export type { AutoConfigureMode, CreateAppConfig, ExecutionContextLike, WorkspaceClientLike } from "./src/appkit.ts";
|
|
16
15
|
export type { BundleValidateJson, ConfigFile, ConfigSource, ConfigMapValue, ResolveConfigValueOptions } from "./src/config.ts";
|
|
17
|
-
export type { AutoConfigureMode, CreateAppConfig } from "./src/create-app.ts";
|
|
18
16
|
export { MAX_TCP_PORT } from "./src/databricks.ts";
|
|
19
17
|
export type { ContextLike } from "./src/databricks.ts";
|
|
20
18
|
export { ACCESS_TOKEN_HEADER, USER_ID_HEADER, USER_EMAIL_HEADER, IDENTITY_MODES, DEFAULT_IDENTITY_MODE } from "./src/identity.ts";
|
package/lib/index.d.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
export * as appkit from "./src/appkit.ts";
|
|
2
2
|
export * as config from "./src/config.ts";
|
|
3
|
-
export * as createApp from "./src/create-app.ts";
|
|
4
3
|
export * as databricks from "./src/databricks.ts";
|
|
5
4
|
export * as identity from "./src/identity.ts";
|
|
6
5
|
export * as interceptor from "./src/interceptor.ts";
|
|
@@ -8,9 +7,8 @@ export * as lakebaseResolver from "./src/lakebase-resolver.ts";
|
|
|
8
7
|
export * as pgaddress from "./src/pgaddress.ts";
|
|
9
8
|
export * as plugin from "./src/plugin.ts";
|
|
10
9
|
export * as provision from "./src/provision.ts";
|
|
11
|
-
export type { ExecutionContextLike, WorkspaceClientLike } from "./src/appkit.ts";
|
|
10
|
+
export type { AutoConfigureMode, CreateAppConfig, ExecutionContextLike, WorkspaceClientLike } from "./src/appkit.ts";
|
|
12
11
|
export type { BundleValidateJson, ConfigFile, ConfigSource, ConfigMapValue, ResolveConfigValueOptions } from "./src/config.ts";
|
|
13
|
-
export type { AutoConfigureMode, CreateAppConfig } from "./src/create-app.ts";
|
|
14
12
|
export { MAX_TCP_PORT } from "./src/databricks.ts";
|
|
15
13
|
export type { ContextLike } from "./src/databricks.ts";
|
|
16
14
|
export { ACCESS_TOKEN_HEADER, USER_ID_HEADER, USER_EMAIL_HEADER, IDENTITY_MODES, DEFAULT_IDENTITY_MODE } from "./src/identity.ts";
|
package/lib/index.js
CHANGED
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
// Hand edits are overwritten on the next watch; this file is read-only.
|
|
4
4
|
export * as appkit from "./src/appkit.js";
|
|
5
5
|
export * as config from "./src/config.js";
|
|
6
|
-
export * as createApp from "./src/create-app.js";
|
|
7
6
|
export * as databricks from "./src/databricks.js";
|
|
8
7
|
export * as identity from "./src/identity.js";
|
|
9
8
|
export * as interceptor from "./src/interceptor.js";
|
|
@@ -15,4 +14,4 @@ export { MAX_TCP_PORT } from "./src/databricks.js";
|
|
|
15
14
|
export { ACCESS_TOKEN_HEADER, USER_ID_HEADER, USER_EMAIL_HEADER, IDENTITY_MODES, DEFAULT_IDENTITY_MODE } from "./src/identity.js";
|
|
16
15
|
export { LifecycleBridgePlugin, lifecycleBridge } from "./src/interceptor.js";
|
|
17
16
|
export { SSL_MODES } from "./src/pgaddress.js";
|
|
18
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxPQUFPLEtBQUssTUFBTSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxNQUFNLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxLQUFLLFVBQVUsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRCxPQUFPLEtBQUssUUFBUSxNQUFNLG1CQUFtQixDQUFDO0FBQzlDLE9BQU8sS0FBSyxXQUFXLE1BQU0sc0JBQXNCLENBQUM7QUFDcEQsT0FBTyxLQUFLLGdCQUFnQixNQUFNLDRCQUE0QixDQUFDO0FBQy9ELE9BQU8sS0FBSyxTQUFTLE1BQU0sb0JBQW9CLENBQUM7QUFDaEQsT0FBTyxLQUFLLE1BQU0sTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEtBQUssU0FBUyxNQUFNLG9CQUFvQixDQUFDO0FBR2hELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVuRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsY0FBYyxFQUFFLGlCQUFpQixFQUFFLGNBQWMsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRWxJLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxlQUFlLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUc5RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0JBQW9CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBHRU5FUkFURUQgYnkgcHJvamVuIHdhdGNoIC0gRE8gTk9UIEVESVQuXG4vLyBSZWdlbmVyYXRlZCBmcm9tIHRoZSBleHBvcnRpbmcgbW9kdWxlcyBpbiAuL3NyYy5cbi8vIEhhbmQgZWRpdHMgYXJlIG92ZXJ3cml0dGVuIG9uIHRoZSBuZXh0IHdhdGNoOyB0aGlzIGZpbGUgaXMgcmVhZC1vbmx5LlxuXG5leHBvcnQgKiBhcyBhcHBraXQgZnJvbSBcIi4vc3JjL2FwcGtpdC50c1wiO1xuZXhwb3J0ICogYXMgY29uZmlnIGZyb20gXCIuL3NyYy9jb25maWcudHNcIjtcbmV4cG9ydCAqIGFzIGRhdGFicmlja3MgZnJvbSBcIi4vc3JjL2RhdGFicmlja3MudHNcIjtcbmV4cG9ydCAqIGFzIGlkZW50aXR5IGZyb20gXCIuL3NyYy9pZGVudGl0eS50c1wiO1xuZXhwb3J0ICogYXMgaW50ZXJjZXB0b3IgZnJvbSBcIi4vc3JjL2ludGVyY2VwdG9yLnRzXCI7XG5leHBvcnQgKiBhcyBsYWtlYmFzZVJlc29sdmVyIGZyb20gXCIuL3NyYy9sYWtlYmFzZS1yZXNvbHZlci50c1wiO1xuZXhwb3J0ICogYXMgcGdhZGRyZXNzIGZyb20gXCIuL3NyYy9wZ2FkZHJlc3MudHNcIjtcbmV4cG9ydCAqIGFzIHBsdWdpbiBmcm9tIFwiLi9zcmMvcGx1Z2luLnRzXCI7XG5leHBvcnQgKiBhcyBwcm92aXNpb24gZnJvbSBcIi4vc3JjL3Byb3Zpc2lvbi50c1wiO1xuZXhwb3J0IHR5cGUgeyBBdXRvQ29uZmlndXJlTW9kZSwgQ3JlYXRlQXBwQ29uZmlnLCBFeGVjdXRpb25Db250ZXh0TGlrZSwgV29ya3NwYWNlQ2xpZW50TGlrZSB9IGZyb20gXCIuL3NyYy9hcHBraXQudHNcIjtcbmV4cG9ydCB0eXBlIHsgQnVuZGxlVmFsaWRhdGVKc29uLCBDb25maWdGaWxlLCBDb25maWdTb3VyY2UsIENvbmZpZ01hcFZhbHVlLCBSZXNvbHZlQ29uZmlnVmFsdWVPcHRpb25zIH0gZnJvbSBcIi4vc3JjL2NvbmZpZy50c1wiO1xuZXhwb3J0IHsgTUFYX1RDUF9QT1JUIH0gZnJvbSBcIi4vc3JjL2RhdGFicmlja3MudHNcIjtcbmV4cG9ydCB0eXBlIHsgQ29udGV4dExpa2UgfSBmcm9tIFwiLi9zcmMvZGF0YWJyaWNrcy50c1wiO1xuZXhwb3J0IHsgQUNDRVNTX1RPS0VOX0hFQURFUiwgVVNFUl9JRF9IRUFERVIsIFVTRVJfRU1BSUxfSEVBREVSLCBJREVOVElUWV9NT0RFUywgREVGQVVMVF9JREVOVElUWV9NT0RFIH0gZnJvbSBcIi4vc3JjL2lkZW50aXR5LnRzXCI7XG5leHBvcnQgdHlwZSB7IElkZW50aXR5TW9kZSwgSGVhZGVyQmVhcmluZyB9IGZyb20gXCIuL3NyYy9pZGVudGl0eS50c1wiO1xuZXhwb3J0IHsgTGlmZWN5Y2xlQnJpZGdlUGx1Z2luLCBsaWZlY3ljbGVCcmlkZ2UgfSBmcm9tIFwiLi9zcmMvaW50ZXJjZXB0b3IudHNcIjtcbmV4cG9ydCB0eXBlIHsgTGlmZWN5Y2xlRXZlbnQsIExpZmVjeWNsZUhhbmRsZXIsIFJlc29sdmVkQXBwRW52LCBCaW5kYWJsZVByb2Nlc3MsIEludGVyY2VwdG9yQ29udGV4dCwgSW50ZXJjZXB0b3IsIEludGVyY2VwdG9yUnVudGltZSB9IGZyb20gXCIuL3NyYy9pbnRlcmNlcHRvci50c1wiO1xuZXhwb3J0IHR5cGUgeyBMYWtlYmFzZVJlc29sdmVySW5wdXRzLCBMYWtlYmFzZUNvbm5lY3Rpb24gfSBmcm9tIFwiLi9zcmMvbGFrZWJhc2UtcmVzb2x2ZXIudHNcIjtcbmV4cG9ydCB7IFNTTF9NT0RFUyB9IGZyb20gXCIuL3NyYy9wZ2FkZHJlc3MudHNcIjtcbmV4cG9ydCB0eXBlIHsgU3NsTW9kZSwgTGFrZWJhc2VDb25uZWN0aW9uSW5wdXRzLCBQYXJzZWRBZGRyZXNzIH0gZnJvbSBcIi4vc3JjL3BnYWRkcmVzcy50c1wiO1xuZXhwb3J0IHR5cGUgeyBQbHVnaW5Db250ZXh0TGlrZSB9IGZyb20gXCIuL3NyYy9wbHVnaW4udHNcIjtcbiJdfQ==
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Soft-fail Lakebase cache storage for AppKit's persistent cache.
|
|
3
|
+
*
|
|
4
|
+
* AppKit's `PersistentStorage.initialize()` runs DDL migrations and throws on
|
|
5
|
+
* any step failure. With `cache.strictPersistence: true` that throw makes
|
|
6
|
+
* `CacheManager` silently disable the cache. This wraps the same storage,
|
|
7
|
+
* still runs its migrations, but logs a failed step instead of throwing so a
|
|
8
|
+
* usable table keeps serving.
|
|
9
|
+
*
|
|
10
|
+
* `PersistentStorage` is not on AppKit's public export map. The deep load is
|
|
11
|
+
* lazy and best-effort: if the installed AppKit layout changes, this returns
|
|
12
|
+
* `undefined` and `createApp` leaves AppKit on its default cache path.
|
|
13
|
+
*
|
|
14
|
+
* @module
|
|
15
|
+
*/
|
|
16
|
+
import { type CacheConfig } from "@databricks/appkit";
|
|
17
|
+
type CacheStorage = NonNullable<CacheConfig["storage"]>;
|
|
18
|
+
/**
|
|
19
|
+
* Build a soft-fail Lakebase cache storage when a pool can be created and
|
|
20
|
+
* AppKit's PersistentStorage can be loaded. Returns `undefined` otherwise so
|
|
21
|
+
* AppKit can fall through to its normal cache path.
|
|
22
|
+
*/
|
|
23
|
+
export declare function createSoftPersistentStorage(cache: CacheConfig | undefined): Promise<CacheStorage | undefined>;
|
|
24
|
+
export {};
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Soft-fail Lakebase cache storage for AppKit's persistent cache.
|
|
3
|
+
*
|
|
4
|
+
* AppKit's `PersistentStorage.initialize()` runs DDL migrations and throws on
|
|
5
|
+
* any step failure. With `cache.strictPersistence: true` that throw makes
|
|
6
|
+
* `CacheManager` silently disable the cache. This wraps the same storage,
|
|
7
|
+
* still runs its migrations, but logs a failed step instead of throwing so a
|
|
8
|
+
* usable table keeps serving.
|
|
9
|
+
*
|
|
10
|
+
* `PersistentStorage` is not on AppKit's public export map. The deep load is
|
|
11
|
+
* lazy and best-effort: if the installed AppKit layout changes, this returns
|
|
12
|
+
* `undefined` and `createApp` leaves AppKit on its default cache path.
|
|
13
|
+
*
|
|
14
|
+
* @module
|
|
15
|
+
*/
|
|
16
|
+
import { createRequire } from "node:module";
|
|
17
|
+
import { dirname, join } from "node:path";
|
|
18
|
+
import { createLakebasePool, getWorkspaceClient } from "@databricks/appkit";
|
|
19
|
+
import { error, log } from "@dbx-tools/shared-core";
|
|
20
|
+
const logger = log.logger("cache-storage");
|
|
21
|
+
/** Whether `LOG_LEVEL` is currently at or below debug. */
|
|
22
|
+
function isDebugEnabled() {
|
|
23
|
+
return log.isLevelEnabled("debug");
|
|
24
|
+
}
|
|
25
|
+
let persistentStorageCtor = null;
|
|
26
|
+
/**
|
|
27
|
+
* Lazily resolve AppKit's internal `PersistentStorage` constructor. `null`
|
|
28
|
+
* means the lookup already failed; `undefined` means not attempted yet.
|
|
29
|
+
*/
|
|
30
|
+
function loadPersistentStorage() {
|
|
31
|
+
if (persistentStorageCtor !== null) {
|
|
32
|
+
return persistentStorageCtor;
|
|
33
|
+
}
|
|
34
|
+
try {
|
|
35
|
+
const require = createRequire(import.meta.url);
|
|
36
|
+
const modulePath = join(dirname(require.resolve("@databricks/appkit")), "cache/storage/persistent.js");
|
|
37
|
+
const loaded = require(modulePath).PersistentStorage;
|
|
38
|
+
if (typeof loaded !== "function") {
|
|
39
|
+
logger.debug("soft persistent cache skipped (PersistentStorage missing)");
|
|
40
|
+
persistentStorageCtor = undefined;
|
|
41
|
+
return undefined;
|
|
42
|
+
}
|
|
43
|
+
persistentStorageCtor = loaded;
|
|
44
|
+
return loaded;
|
|
45
|
+
}
|
|
46
|
+
catch (err) {
|
|
47
|
+
logger.debug("soft persistent cache skipped (PersistentStorage unavailable)", {
|
|
48
|
+
error: error.errorMessage(err),
|
|
49
|
+
});
|
|
50
|
+
persistentStorageCtor = undefined;
|
|
51
|
+
return undefined;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/** Soften `initialize()` so a migration failure is logged, not thrown. */
|
|
55
|
+
function softenInitialize(storage) {
|
|
56
|
+
const originalInitialize = storage.initialize.bind(storage);
|
|
57
|
+
storage.initialize = async () => {
|
|
58
|
+
try {
|
|
59
|
+
await originalInitialize();
|
|
60
|
+
}
|
|
61
|
+
catch (err) {
|
|
62
|
+
if (isDebugEnabled()) {
|
|
63
|
+
logger.error("persistent cache migration failed", err);
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
logger.warn("persistent cache migration failed", {
|
|
67
|
+
error: error.errorMessage(err),
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
storage.initialized = true;
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Build a soft-fail Lakebase cache storage when a pool can be created and
|
|
76
|
+
* AppKit's PersistentStorage can be loaded. Returns `undefined` otherwise so
|
|
77
|
+
* AppKit can fall through to its normal cache path.
|
|
78
|
+
*/
|
|
79
|
+
export async function createSoftPersistentStorage(cache) {
|
|
80
|
+
const PersistentStorage = loadPersistentStorage();
|
|
81
|
+
if (!PersistentStorage) {
|
|
82
|
+
return undefined;
|
|
83
|
+
}
|
|
84
|
+
let pool;
|
|
85
|
+
try {
|
|
86
|
+
pool = createLakebasePool({ workspaceClient: getWorkspaceClient({}) });
|
|
87
|
+
const storage = new PersistentStorage(cache ?? {}, pool);
|
|
88
|
+
softenInitialize(storage);
|
|
89
|
+
if (!(await storage.healthCheck())) {
|
|
90
|
+
await storage.close().catch(() => { });
|
|
91
|
+
return undefined;
|
|
92
|
+
}
|
|
93
|
+
await storage.initialize();
|
|
94
|
+
return storage;
|
|
95
|
+
}
|
|
96
|
+
catch (err) {
|
|
97
|
+
logger.debug("soft persistent cache unavailable", {
|
|
98
|
+
error: error.errorMessage(err),
|
|
99
|
+
});
|
|
100
|
+
if (pool) {
|
|
101
|
+
await pool.end().catch(() => { });
|
|
102
|
+
}
|
|
103
|
+
return undefined;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiX2NhY2hlLXN0b3JhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvX2NhY2hlLXN0b3JhZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFFSCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzFDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBb0IsTUFBTSxvQkFBb0IsQ0FBQztBQUM5RixPQUFPLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRXBELE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7QUFFM0MsMERBQTBEO0FBQzFELFNBQVMsY0FBYztJQUNyQixPQUFPLEdBQUcsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDckMsQ0FBQztBQWdCRCxJQUFJLHFCQUFxQixHQUFvRCxJQUFJLENBQUM7QUFFbEY7OztHQUdHO0FBQ0gsU0FBUyxxQkFBcUI7SUFDNUIsSUFBSSxxQkFBcUIsS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUNuQyxPQUFPLHFCQUFxQixDQUFDO0lBQy9CLENBQUM7SUFDRCxJQUFJLENBQUM7UUFDSCxNQUFNLE9BQU8sR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMvQyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQ3JCLE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLENBQUMsRUFDOUMsNkJBQTZCLENBQzlCLENBQUM7UUFDRixNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsaUJBQ08sQ0FBQztRQUMzQyxJQUFJLE9BQU8sTUFBTSxLQUFLLFVBQVUsRUFBRSxD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IFNvZnQtZmFpbCBMYWtlYmFzZSBjYWNoZSBzdG9yYWdlIGZvciBBcHBLaXQncyBwZXJzaXN0ZW50IGNhY2hlLlxuICpcbiAqIEFwcEtpdCdzIGBQZXJzaXN0ZW50U3RvcmFnZS5pbml0aWFsaXplKClgIHJ1bnMgRERMIG1pZ3JhdGlvbnMgYW5kIHRocm93cyBvblxuICogYW55IHN0ZXAgZmFpbHVyZS4gV2l0aCBgY2FjaGUuc3RyaWN0UGVyc2lzdGVuY2U6IHRydWVgIHRoYXQgdGhyb3cgbWFrZXNcbiAqIGBDYWNoZU1hbmFnZXJgIHNpbGVudGx5IGRpc2FibGUgdGhlIGNhY2hlLiBUaGlzIHdyYXBzIHRoZSBzYW1lIHN0b3JhZ2UsXG4gKiBzdGlsbCBydW5zIGl0cyBtaWdyYXRpb25zLCBidXQgbG9ncyBhIGZhaWxlZCBzdGVwIGluc3RlYWQgb2YgdGhyb3dpbmcgc28gYVxuICogdXNhYmxlIHRhYmxlIGtlZXBzIHNlcnZpbmcuXG4gKlxuICogYFBlcnNpc3RlbnRTdG9yYWdlYCBpcyBub3Qgb24gQXBwS2l0J3MgcHVibGljIGV4cG9ydCBtYXAuIFRoZSBkZWVwIGxvYWQgaXNcbiAqIGxhenkgYW5kIGJlc3QtZWZmb3J0OiBpZiB0aGUgaW5zdGFsbGVkIEFwcEtpdCBsYXlvdXQgY2hhbmdlcywgdGhpcyByZXR1cm5zXG4gKiBgdW5kZWZpbmVkYCBhbmQgYGNyZWF0ZUFwcGAgbGVhdmVzIEFwcEtpdCBvbiBpdHMgZGVmYXVsdCBjYWNoZSBwYXRoLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBjcmVhdGVSZXF1aXJlIH0gZnJvbSBcIm5vZGU6bW9kdWxlXCI7XG5pbXBvcnQgeyBkaXJuYW1lLCBqb2luIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgY3JlYXRlTGFrZWJhc2VQb29sLCBnZXRXb3Jrc3BhY2VDbGllbnQsIHR5cGUgQ2FjaGVDb25maWcgfSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0XCI7XG5pbXBvcnQgeyBlcnJvciwgbG9nIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcblxuY29uc3QgbG9nZ2VyID0gbG9nLmxvZ2dlcihcImNhY2hlLXN0b3JhZ2VcIik7XG5cbi8qKiBXaGV0aGVyIGBMT0dfTEVWRUxgIGlzIGN1cnJlbnRseSBhdCBvciBiZWxvdyBkZWJ1Zy4gKi9cbmZ1bmN0aW9uIGlzRGVidWdFbmFibGVkKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gbG9nLmlzTGV2ZWxFbmFibGVkKFwiZGVidWdcIik7XG59XG5cbnR5cGUgTGFrZWJhc2VQb29sID0gUmV0dXJuVHlwZTx0eXBlb2YgY3JlYXRlTGFrZWJhc2VQb29sPjtcbnR5cGUgQ2FjaGVTdG9yYWdlID0gTm9uTnVsbGFibGU8Q2FjaGVDb25maWdbXCJzdG9yYWdlXCJdPjtcblxuLyoqIEFwcEtpdCdzIGludGVybmFsIHBlcnNpc3RlbnQgc3RvcmFnZSBzdXJmYWNlLiAqL1xudHlwZSBQZXJzaXN0ZW50U3RvcmFnZUJhc2UgPSBDYWNoZVN0b3JhZ2UgJiB7XG4gIGluaXRpYWxpemUoKTogUHJvbWlzZTx2b2lkPjtcbiAgaW5pdGlhbGl6ZWQ6IGJvb2xlYW47XG59O1xuXG50eXBlIFBlcnNpc3RlbnRTdG9yYWdlQ29uc3RydWN0b3IgPSBuZXcgKFxuICBjb25maWc6IENhY2hlQ29uZmlnLFxuICBwb29sOiBMYWtlYmFzZVBvb2wsXG4pID0+IFBlcnNpc3RlbnRTdG9yYWdlQmFzZTtcblxubGV0IHBlcnNpc3RlbnRTdG9yYWdlQ3RvcjogUGVyc2lzdGVudFN0b3JhZ2VDb25zdHJ1Y3RvciB8IHVuZGVmaW5lZCB8IG51bGwgPSBudWxsO1xuXG4vKipcbiAqIExhemlseSByZXNvbHZlIEFwcEtpdCdzIGludGVybmFsIGBQZXJzaXN0ZW50U3RvcmFnZWAgY29uc3RydWN0b3IuIGBudWxsYFxuICogbWVhbnMgdGhlIGxvb2t1cCBhbHJlYWR5IGZhaWxlZDsgYHVuZGVmaW5lZGAgbWVhbnMgbm90IGF0dGVtcHRlZCB5ZXQuXG4gKi9cbmZ1bmN0aW9uIGxvYWRQZXJzaXN0ZW50U3RvcmFnZSgpOiBQZXJzaXN0ZW50U3RvcmFnZUNvbnN0cnVjdG9yIHwgdW5kZWZpbmVkIHtcbiAgaWYgKHBlcnNpc3RlbnRTdG9yYWdlQ3RvciAhPT0gbnVsbCkge1xuICAgIHJldHVybiBwZXJzaXN0ZW50U3RvcmFnZUN0b3I7XG4gIH1cbiAgdHJ5IHtcbiAgICBjb25zdCByZXF1aXJlID0gY3JlYXRlUmVxdWlyZShpbXBvcnQubWV0YS51cmwpO1xuICAgIGNvbnN0IG1vZHVsZVBhdGggPSBqb2luKFxuICAgICAgZGlybmFtZShyZXF1aXJlLnJlc29sdmUoXCJAZGF0YWJyaWNrcy9hcHBraXRcIikpLFxuICAgICAgXCJjYWNoZS9zdG9yYWdlL3BlcnNpc3RlbnQuanNcIixcbiAgICApO1xuICAgIGNvbnN0IGxvYWRlZCA9IHJlcXVpcmUobW9kdWxlUGF0aCkuUGVyc2lzdGVudFN0b3JhZ2UgYXNcbiAgICAgIFBlcnNpc3RlbnRTdG9yYWdlQ29uc3RydWN0b3IgfCB1bmRlZmluZWQ7XG4gICAgaWYgKHR5cGVvZiBsb2FkZWQgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgbG9nZ2VyLmRlYnVnKFwic29mdCBwZXJzaXN0ZW50IGNhY2hlIHNraXBwZWQgKFBlcnNpc3RlbnRTdG9yYWdlIG1pc3NpbmcpXCIpO1xuICAgICAgcGVyc2lzdGVudFN0b3JhZ2VDdG9yID0gdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcGVyc2lzdGVudFN0b3JhZ2VDdG9yID0gbG9hZGVkO1xuICAgIHJldHVybiBsb2FkZWQ7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZ2dlci5kZWJ1ZyhcInNvZnQgcGVyc2lzdGVudCBjYWNoZSBza2lwcGVkIChQZXJzaXN0ZW50U3RvcmFnZSB1bmF2YWlsYWJsZSlcIiwge1xuICAgICAgZXJyb3I6IGVycm9yLmVycm9yTWVzc2FnZShlcnIpLFxuICAgIH0pO1xuICAgIHBlcnNpc3RlbnRTdG9yYWdlQ3RvciA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbi8qKiBTb2Z0ZW4gYGluaXRpYWxpemUoKWAgc28gYSBtaWdyYXRpb24gZmFpbHVyZSBpcyBsb2dnZWQsIG5vdCB0aHJvd24uICovXG5mdW5jdGlvbiBzb2Z0ZW5Jbml0aWFsaXplKHN0b3JhZ2U6IFBlcnNpc3RlbnRTdG9yYWdlQmFzZSk6IHZvaWQge1xuICBjb25zdCBvcmlnaW5hbEluaXRpYWxpemUgPSBzdG9yYWdlLmluaXRpYWxpemUuYmluZChzdG9yYWdlKTtcbiAgc3RvcmFnZS5pbml0aWFsaXplID0gYXN5bmMgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBvcmlnaW5hbEluaXRpYWxpemUoKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmIChpc0RlYnVnRW5hYmxlZCgpKSB7XG4gICAgICAgIGxvZ2dlci5lcnJvcihcInBlcnNpc3RlbnQgY2FjaGUgbWlncmF0aW9uIGZhaWxlZFwiLCBlcnIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oXCJwZXJzaXN0ZW50IGNhY2hlIG1pZ3JhdGlvbiBmYWlsZWRcIiwge1xuICAgICAgICAgIGVycm9yOiBlcnJvci5lcnJvck1lc3NhZ2UoZXJyKSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBzdG9yYWdlLmluaXRpYWxpemVkID0gdHJ1ZTtcbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICogQnVpbGQgYSBzb2Z0LWZhaWwgTGFrZWJhc2UgY2FjaGUgc3RvcmFnZSB3aGVuIGEgcG9vbCBjYW4gYmUgY3JlYXRlZCBhbmRcbiAqIEFwcEtpdCdzIFBlcnNpc3RlbnRTdG9yYWdlIGNhbiBiZSBsb2FkZWQuIFJldHVybnMgYHVuZGVmaW5lZGAgb3RoZXJ3aXNlIHNvXG4gKiBBcHBLaXQgY2FuIGZhbGwgdGhyb3VnaCB0byBpdHMgbm9ybWFsIGNhY2hlIHBhdGguXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVTb2Z0UGVyc2lzdGVudFN0b3JhZ2UoXG4gIGNhY2hlOiBDYWNoZUNvbmZpZyB8IHVuZGVmaW5lZCxcbik6IFByb21pc2U8Q2FjaGVTdG9yYWdlIHwgdW5kZWZpbmVkPiB7XG4gIGNvbnN0IFBlcnNpc3RlbnRTdG9yYWdlID0gbG9hZFBlcnNpc3RlbnRTdG9yYWdlKCk7XG4gIGlmICghUGVyc2lzdGVudFN0b3JhZ2UpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgbGV0IHBvb2w6IExha2ViYXNlUG9vbCB8IHVuZGVmaW5lZDtcbiAgdHJ5IHtcbiAgICBwb29sID0gY3JlYXRlTGFrZWJhc2VQb29sKHsgd29ya3NwYWNlQ2xpZW50OiBnZXRXb3Jrc3BhY2VDbGllbnQoe30pIH0pO1xuICAgIGNvbnN0IHN0b3JhZ2UgPSBuZXcgUGVyc2lzdGVudFN0b3JhZ2UoY2FjaGUgPz8ge30sIHBvb2wpO1xuICAgIHNvZnRlbkluaXRpYWxpemUoc3RvcmFnZSk7XG4gICAgaWYgKCEoYXdhaXQgc3RvcmFnZS5oZWFsdGhDaGVjaygpKSkge1xuICAgICAgYXdhaXQgc3RvcmFnZS5jbG9zZSgpLmNhdGNoKCgpID0+IHt9KTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGF3YWl0IHN0b3JhZ2UuaW5pdGlhbGl6ZSgpO1xuICAgIHJldHVybiBzdG9yYWdlO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2dnZXIuZGVidWcoXCJzb2Z0IHBlcnNpc3RlbnQgY2FjaGUgdW5hdmFpbGFibGVcIiwge1xuICAgICAgZXJyb3I6IGVycm9yLmVycm9yTWVzc2FnZShlcnIpLFxuICAgIH0pO1xuICAgIGlmIChwb29sKSB7XG4gICAgICBhd2FpdCBwb29sLmVuZCgpLmNhdGNoKCgpID0+IHt9KTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuIl19
|
package/lib/src/appkit.d.ts
CHANGED
|
@@ -1,6 +1,22 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
2
|
+
* AppKit runtime glue: the auto-configuring `createApp` drop-in, plus the
|
|
3
|
+
* per-request execution context helpers and types derived from it.
|
|
4
|
+
*
|
|
5
|
+
* `createApp` runs dbx-tools auto-configuration, then delegates to AppKit's own
|
|
6
|
+
* `createApp` with the same arguments and the same typed plugin-export map.
|
|
7
|
+
* Drop it in as a one-for-one replacement:
|
|
8
|
+
*
|
|
9
|
+
* ```ts
|
|
10
|
+
* import { lakebase, server } from "@databricks/appkit";
|
|
11
|
+
* import { appkit } from "@dbx-tools/appkit";
|
|
12
|
+
*
|
|
13
|
+
* await appkit.createApp({ plugins: [server(), lakebase()] });
|
|
14
|
+
* ```
|
|
15
|
+
*
|
|
16
|
+
* Auto-configuration runs BEFORE delegating so plugins see a fully populated
|
|
17
|
+
* `process.env` during their synchronous `setup()`. Lakebase Postgres runs when
|
|
18
|
+
* a `lakebase` plugin is present, or when {@link AutoConfigureMode} is set
|
|
19
|
+
* explicitly on the config object.
|
|
4
20
|
*
|
|
5
21
|
* `getExecutionContext()` is AppKit's own accessor for the OBO-scoped workspace
|
|
6
22
|
* client + request metadata; the wrappers here make it safe to call outside a
|
|
@@ -10,7 +26,79 @@
|
|
|
10
26
|
*
|
|
11
27
|
* @module
|
|
12
28
|
*/
|
|
13
|
-
import { getExecutionContext } from "@databricks/appkit";
|
|
29
|
+
import { createApp as appkitCreateApp, getExecutionContext } from "@databricks/appkit";
|
|
30
|
+
import type { PluginMap } from "@databricks/appkit/dist/shared/src/plugin";
|
|
31
|
+
import { type Interceptor } from "./interceptor.ts";
|
|
32
|
+
import { type LakebaseConnection } from "./lakebase-resolver.ts";
|
|
33
|
+
type AppKitCreateAppConfig = NonNullable<Parameters<typeof appkitCreateApp>[0]>;
|
|
34
|
+
type AppKitPlugins = NonNullable<AppKitCreateAppConfig["plugins"]>;
|
|
35
|
+
/**
|
|
36
|
+
* What auto-configuration does before AppKit boots.
|
|
37
|
+
*
|
|
38
|
+
* - `"provision"`: resolve the Lakebase connection into `process.env`, then
|
|
39
|
+
* grant the AppKit cache schema to the connecting role.
|
|
40
|
+
* - `"env"`: resolve the Lakebase connection into `process.env` only.
|
|
41
|
+
*
|
|
42
|
+
* Omit it to get `"provision"` gated on a `lakebase` plugin being registered;
|
|
43
|
+
* set it explicitly to run regardless of the plugin list, or pass `false` to
|
|
44
|
+
* skip auto-configuration entirely.
|
|
45
|
+
*
|
|
46
|
+
* Set it EXPLICITLY on an app that has no `lakebase()` plugin but still wants
|
|
47
|
+
* AppKit's PERSISTENT cache. AppKit picks Lakebase for `CacheManager` only when
|
|
48
|
+
* `createLakebasePool()` can build a pool, and that reads `LAKEBASE_ENDPOINT` /
|
|
49
|
+
* `PGHOST` / `PGDATABASE` straight from `process.env` - so without this step the
|
|
50
|
+
* cache silently falls back to in-memory, and anything it holds (a session
|
|
51
|
+
* signing key, a one-time code) is lost on restart. `"env"` is the right mode
|
|
52
|
+
* there: the app SP cannot grant on the cache schema anyway.
|
|
53
|
+
*/
|
|
54
|
+
export type AutoConfigureMode = "env" | "provision";
|
|
55
|
+
/** AppKit's `createApp` config plus the dbx-tools auto-configuration switch. */
|
|
56
|
+
export type CreateAppConfig<T extends AppKitPlugins = AppKitPlugins> = Omit<AppKitCreateAppConfig, "plugins" | "onPluginsReady"> & {
|
|
57
|
+
plugins?: T;
|
|
58
|
+
onPluginsReady?: (appkit: PluginMap<T>) => void | Promise<void>;
|
|
59
|
+
/** Auto-configuration to run before AppKit boots. Defaults to `"provision"`. */
|
|
60
|
+
autoConfigure?: AutoConfigureMode | false;
|
|
61
|
+
/**
|
|
62
|
+
* One or many {@link Interceptor}s handed an {@link InterceptorContext} once
|
|
63
|
+
* auto-configuration has computed the env. Each receives the resolved env, an
|
|
64
|
+
* AppKit-lifecycle hook, and `bindProcess` for concurrently-style supervision -
|
|
65
|
+
* see `./interceptor`. The tunnel is the primary consumer.
|
|
66
|
+
*/
|
|
67
|
+
interceptor?: Interceptor | Interceptor[];
|
|
68
|
+
};
|
|
69
|
+
/**
|
|
70
|
+
* Run enabled auto-configuration steps without calling AppKit's `createApp`.
|
|
71
|
+
*
|
|
72
|
+
* Lakebase Postgres resolves when {@link CreateAppConfig.autoConfigure} is set
|
|
73
|
+
* explicitly or a `lakebase` plugin is listed in `config.plugins`. `signal`
|
|
74
|
+
* cancels the resolution; it is combined with an internal boot timeout either
|
|
75
|
+
* way.
|
|
76
|
+
*
|
|
77
|
+
* @example
|
|
78
|
+
* import { appkit } from "@dbx-tools/appkit";
|
|
79
|
+
*
|
|
80
|
+
* // Populate PGHOST / PGDATABASE / LAKEBASE_ENDPOINT without booting AppKit.
|
|
81
|
+
* await appkit.autoConfigure({ autoConfigure: "env" });
|
|
82
|
+
*/
|
|
83
|
+
export declare function autoConfigure<T extends AppKitPlugins>(config?: CreateAppConfig<T>, signal?: AbortSignal): Promise<LakebaseConnection | undefined>;
|
|
84
|
+
/**
|
|
85
|
+
* Auto-configuring drop-in for AppKit's `createApp`: same config, same typed
|
|
86
|
+
* plugin-export map, with {@link autoConfigure} run first.
|
|
87
|
+
*
|
|
88
|
+
* When {@link CreateAppConfig.interceptor}s are given, each is invoked with an
|
|
89
|
+
* {@link InterceptorContext} AFTER auto-configuration computes the env and BEFORE
|
|
90
|
+
* AppKit boots - so an interceptor can read the resolved connection, register
|
|
91
|
+
* lifecycle handlers, and `bindProcess` a child. A hidden {@link lifecycleBridge}
|
|
92
|
+
* plugin is injected so those `onLifecycle` handlers fire on the genuine AppKit
|
|
93
|
+
* events; it has no exports, so the returned {@link PluginMap} is unchanged.
|
|
94
|
+
*
|
|
95
|
+
* @example
|
|
96
|
+
* import { lakebase, server } from "@databricks/appkit";
|
|
97
|
+
* import { appkit } from "@dbx-tools/appkit";
|
|
98
|
+
*
|
|
99
|
+
* const app = await appkit.createApp({ plugins: [server(), lakebase()] });
|
|
100
|
+
*/
|
|
101
|
+
export declare function createApp<T extends AppKitPlugins>(config?: CreateAppConfig<T>): Promise<PluginMap<T>>;
|
|
14
102
|
/**
|
|
15
103
|
* The AppKit per-request execution context returned by `getExecutionContext()`
|
|
16
104
|
* - the OBO-scoped workspace client plus the surrounding request metadata.
|
|
@@ -49,3 +137,4 @@ export declare function tryGetExecutionContext(): ExecutionContextLike | undefin
|
|
|
49
137
|
* const client = appkit.tryGetExecutionContext()?.client;
|
|
50
138
|
*/
|
|
51
139
|
export declare function ensureInitialized(): Promise<void>;
|
|
140
|
+
export {};
|