@dbx-tools/search 0.6.226 → 0.6.227

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 CHANGED
@@ -27,8 +27,9 @@ search instead of Vector Search.
27
27
  (or set `DATABRICKS_VECTOR_SEARCH_INDEX`) and the columns, page size, mode,
28
28
  aliases, and route path all have defaults you can override when you need to go
29
29
  deeper.
30
- - OBO for Vector Search comes from native AppKit `aiSearch`. Lakebase full-text
31
- search uses the sibling `lakebase` plugin's service-principal pool.
30
+ - OBO for Vector Search comes from native AppKit `aiSearch`. Each Lakebase
31
+ full-text index selects `service-principal` or `on-behalf-of-user` through the
32
+ sibling native `lakebase` routing pool.
32
33
  - Filters use AppKit's scalar/array shape: `{ column: valueOrValues }`.
33
34
  - Embedding-model resolution for index creation reuses
34
35
  [`@dbx-tools/model`](../model): a loose name fuzzy-matches the live catalogue,
@@ -224,8 +225,11 @@ Sync index instead of a managed direct-access one.
224
225
  full-text index. It provisions one table per alias (a generated `tsvector`
225
226
  column with a GIN index), seeds configured documents, and answers queries with
226
227
  a prefix `to_tsquery` + `ts_rank`. The pool comes from the native `lakebase`
227
- plugin's service-principal config, so database authentication is not
228
- re-implemented.
228
+ plugin's routing pool, so database authentication is not re-implemented. HTTP
229
+ callers cannot widen configured projection columns; `columns` overrides remain
230
+ available only to trusted programmatic `query()` calls. Set an index's `auth`
231
+ to `on-behalf-of-user` for OBO query/write routes or leave it at
232
+ `service-principal`.
229
233
 
230
234
  Queries are compiled from the search box rather than handed to
231
235
  `websearch_to_tsquery`, which is too literal for type-ahead in two ways:
package/index.ts CHANGED
@@ -3,7 +3,7 @@
3
3
  // Hand edits are overwritten on the next watch; this file is read-only.
4
4
 
5
5
  export const PACKAGE_IDENTIFIER = "@dbx-tools/search";
6
- export const PACKAGE_VERSION = "0.6.226";
6
+ export const PACKAGE_VERSION = "0.6.227";
7
7
  export * as client from "./src/client.ts";
8
8
  export * as config from "./src/config.ts";
9
9
  export * as indexTools from "./src/index-tools.ts";
package/lib/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  export declare const PACKAGE_IDENTIFIER = "@dbx-tools/search";
2
- export declare const PACKAGE_VERSION = "0.6.226";
2
+ export declare const PACKAGE_VERSION = "0.6.227";
3
3
  export * as client from "./src/client.ts";
4
4
  export * as config from "./src/config.ts";
5
5
  export * as indexTools from "./src/index-tools.ts";
package/lib/index.js CHANGED
@@ -2,7 +2,7 @@
2
2
  // Regenerated from the exporting modules in ./src.
3
3
  // Hand edits are overwritten on the next watch; this file is read-only.
4
4
  export const PACKAGE_IDENTIFIER = "@dbx-tools/search";
5
- export const PACKAGE_VERSION = "0.6.226";
5
+ export const PACKAGE_VERSION = "0.6.227";
6
6
  export * as client from "./src/client.js";
7
7
  export * as config from "./src/config.js";
8
8
  export * as indexTools from "./src/index-tools.js";
@@ -20,4 +20,4 @@ export { LakebaseSearchBackend } from "./src/lakebase.js";
20
20
  export { LakebaseAiSearchPlugin, lakebaseAiSearch } from "./src/lakebase-plugin.js";
21
21
  export { SearchPlugin, search } from "./src/plugin.js";
22
22
  export { SEARCH_TOOL_DESCRIPTION, UNIVERSAL_SEARCH_TOOL_DESCRIPTION, ADD_DOCUMENTS_TOOL_DESCRIPTION, CREATE_INDEX_TOOL_DESCRIPTION, SYNC_INDEX_TOOL_DESCRIPTION, searchToolSchema, universalSearchToolSchema, searchResultSchema, createIndexToolSchema, indexInfoSchema, syncIndexToolSchema } from "./src/schema.js";
23
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxtQkFBbUIsQ0FBQztBQUN0RCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDO0FBQ3pDLE9BQU8sS0FBSyxNQUFNLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxLQUFLLE1BQU0sTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEtBQUssVUFBVSxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sS0FBSyxRQUFRLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxLQUFLLGNBQWMsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEtBQUssTUFBTSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxNQUFNLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxLQUFLLEtBQUssTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEtBQUssT0FBTyxNQUFNLGtCQUFrQixDQUFDO0FBQzVDLE9BQU8sS0FBSyxNQUFNLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxLQUFLLElBQUksTUFBTSxlQUFlLENBQUM7QUFDdEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUU1RCxPQUFPLEVBQUUsU0FBUyxFQUFFLG9CQUFvQixFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUU5SyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUUxRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUdwRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXZELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxpQ0FBaUMsRUFBRSw4QkFBOEIsRUFBRSw2QkFBNkIsRUFBRSwyQkFBMkIsRUFBRSxnQkFBZ0IsRUFBRSx5QkFBeUIsRUFBRSxrQkFBa0IsRUFBRSxxQkFBcUIsRUFBRSxlQUFlLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEdFTkVSQVRFRCBieSBwcm9qZW4gd2F0Y2ggLSBETyBOT1QgRURJVC5cbi8vIFJlZ2VuZXJhdGVkIGZyb20gdGhlIGV4cG9ydGluZyBtb2R1bGVzIGluIC4vc3JjLlxuLy8gSGFuZCBlZGl0cyBhcmUgb3ZlcndyaXR0ZW4gb24gdGhlIG5leHQgd2F0Y2g7IHRoaXMgZmlsZSBpcyByZWFkLW9ubHkuXG5cbmV4cG9ydCBjb25zdCBQQUNLQUdFX0lERU5USUZJRVIgPSBcIkBkYngtdG9vbHMvc2VhcmNoXCI7XG5leHBvcnQgY29uc3QgUEFDS0FHRV9WRVJTSU9OID0gXCIwLjYuMjI2XCI7XG5leHBvcnQgKiBhcyBjbGllbnQgZnJvbSBcIi4vc3JjL2NsaWVudC50c1wiO1xuZXhwb3J0ICogYXMgY29uZmlnIGZyb20gXCIuL3NyYy9jb25maWcudHNcIjtcbmV4cG9ydCAqIGFzIGluZGV4VG9vbHMgZnJvbSBcIi4vc3JjL2luZGV4LXRvb2xzLnRzXCI7XG5leHBvcnQgKiBhcyBsYWtlYmFzZSBmcm9tIFwiLi9zcmMvbGFrZWJhc2UudHNcIjtcbmV4cG9ydCAqIGFzIGxha2ViYXNlUGx1Z2luIGZyb20gXCIuL3NyYy9sYWtlYmFzZS1wbHVnaW4udHNcIjtcbmV4cG9ydCAqIGFzIG5hdGl2ZSBmcm9tIFwiLi9zcmMvbmF0aXZlLnRzXCI7XG5leHBvcnQgKiBhcyBwbHVnaW4gZnJvbSBcIi4vc3JjL3BsdWdpbi50c1wiO1xuZXhwb3J0ICogYXMgcXVlcnkgZnJvbSBcIi4vc3JjL3F1ZXJ5LnRzXCI7XG5leHBvcnQgKiBhcyBydW50aW1lIGZyb20gXCIuL3NyYy9ydW50aW1lLnRzXCI7XG5leHBvcnQgKiBhcyBzY2hlbWEgZnJvbSBcIi4vc3JjL3NjaGVtYS50c1wiO1xuZXhwb3J0ICogYXMgdG9vbCBmcm9tIFwiLi9zcmMvdG9vbC50c1wiO1xuZXhwb3J0IHsgU2VhcmNoSW5kZXgsIFNlYXJjaENsaWVudCB9IGZyb20gXCIuL3NyYy9jbGllbnQudHNcIjtcbmV4cG9ydCB0eXBlIHsgU2VhcmNoUmVhZEJhY2tlbmQsIFNlYXJjaE9wdGlvbnMsIFVuaXZlcnNhbFNlYXJjaE9wdGlvbnMsIEluZGV4SW5mbywgQ3JlYXRlSW5kZXhPcHRpb25zLCBFbnN1cmVFbmRwb2ludE9wdGlvbnMsIFByb3Zpc2lvbk9wdGlvbnMgfSBmcm9tIFwiLi9zcmMvY2xpZW50LnRzXCI7XG5leHBvcnQgeyBJTkRFWF9FTlYsIERBVEFCUklDS1NfSU5ERVhfRU5WLCBFTkRQT0lOVF9FTlYsIERFRkFVTFRfTU9ERSwgREVGQVVMVF9QQUdFX1NJWkUsIERFRkFVTFRfVElNRU9VVF9NUywgREVGQVVMVF9CQVNFX1BBVEgsIFNFQVJDSF9DT05GSUdfU0NIRU1BIH0gZnJvbSBcIi4vc3JjL2NvbmZpZy50c1wiO1xuZXhwb3J0IHR5cGUgeyBTZWFyY2hJbmRleENvbmZpZywgU2VhcmNoUGx1Z2luQ29uZmlnLCBFbnN1cmVPblNldHVwQ29uZmlnLCBSZXNvbHZlZEluZGV4Q29uZmlnLCBSZXNvbHZlZFNlYXJjaENvbmZpZyB9IGZyb20gXCIuL3NyYy9jb25maWcudHNcIjtcbmV4cG9ydCB7IExha2ViYXNlU2VhcmNoQmFja2VuZCB9IGZyb20gXCIuL3NyYy9sYWtlYmFzZS50c1wiO1xuZXhwb3J0IHR5cGUgeyBMYWtlYmFzZVNlYXJjaE9wdGlvbnMsIExha2ViYXNlU2VhcmNoUG9vbCwgTGFrZWJhc2VQcm92aXNpb25PcHRpb25zIH0gZnJvbSBcIi4vc3JjL2xha2ViYXNlLnRzXCI7XG5leHBvcnQgeyBMYWtlYmFzZUFpU2VhcmNoUGx1Z2luLCBsYWtlYmFzZUFpU2VhcmNoIH0gZnJvbSBcIi4vc3JjL2xha2ViYXNlLXBsdWdpbi50c1wiO1xuZXhwb3J0IHR5cGUgeyBMYWtlYmFzZUFpU2VhcmNoSW5kZXhDb25maWcsIExha2ViYXNlQWlTZWFyY2hDb25maWcgfSBmcm9tIFwiLi9zcmMvbGFrZWJhc2UtcGx1Z2luLnRzXCI7XG5leHBvcnQgdHlwZSB7IEFpU2VhcmNoUHJvdmlkZXIgfSBmcm9tIFwiLi9zcmMvbmF0aXZlLnRzXCI7XG5leHBvcnQgeyBTZWFyY2hQbHVnaW4sIHNlYXJjaCB9IGZyb20gXCIuL3NyYy9wbHVnaW4udHNcIjtcbmV4cG9ydCB0eXBlIHsgU2VhcmNoUnVudGltZU9wdGlvbnMsIFNlYXJjaFJ1bnRpbWUgfSBmcm9tIFwiLi9zcmMvcnVudGltZS50c1wiO1xuZXhwb3J0IHsgU0VBUkNIX1RPT0xfREVTQ1JJUFRJT04sIFVOSVZFUlNBTF9TRUFSQ0hfVE9PTF9ERVNDUklQVElPTiwgQUREX0RPQ1VNRU5UU19UT09MX0RFU0NSSVBUSU9OLCBDUkVBVEVfSU5ERVhfVE9PTF9ERVNDUklQVElPTiwgU1lOQ19JTkRFWF9UT09MX0RFU0NSSVBUSU9OLCBzZWFyY2hUb29sU2NoZW1hLCB1bml2ZXJzYWxTZWFyY2hUb29sU2NoZW1hLCBzZWFyY2hSZXN1bHRTY2hlbWEsIGNyZWF0ZUluZGV4VG9vbFNjaGVtYSwgaW5kZXhJbmZvU2NoZW1hLCBzeW5jSW5kZXhUb29sU2NoZW1hIH0gZnJvbSBcIi4vc3JjL3NjaGVtYS50c1wiO1xuZXhwb3J0IHR5cGUgeyBTZWFyY2hUb29sT3B0aW9ucyB9IGZyb20gXCIuL3NyYy90b29sLnRzXCI7XG4iXX0=
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxtQkFBbUIsQ0FBQztBQUN0RCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDO0FBQ3pDLE9BQU8sS0FBSyxNQUFNLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxLQUFLLE1BQU0sTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEtBQUssVUFBVSxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sS0FBSyxRQUFRLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxLQUFLLGNBQWMsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEtBQUssTUFBTSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxNQUFNLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxLQUFLLEtBQUssTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEtBQUssT0FBTyxNQUFNLGtCQUFrQixDQUFDO0FBQzVDLE9BQU8sS0FBSyxNQUFNLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxLQUFLLElBQUksTUFBTSxlQUFlLENBQUM7QUFDdEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUU1RCxPQUFPLEVBQUUsU0FBUyxFQUFFLG9CQUFvQixFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUU5SyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUUxRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUdwRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXZELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxpQ0FBaUMsRUFBRSw4QkFBOEIsRUFBRSw2QkFBNkIsRUFBRSwyQkFBMkIsRUFBRSxnQkFBZ0IsRUFBRSx5QkFBeUIsRUFBRSxrQkFBa0IsRUFBRSxxQkFBcUIsRUFBRSxlQUFlLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEdFTkVSQVRFRCBieSBwcm9qZW4gd2F0Y2ggLSBETyBOT1QgRURJVC5cbi8vIFJlZ2VuZXJhdGVkIGZyb20gdGhlIGV4cG9ydGluZyBtb2R1bGVzIGluIC4vc3JjLlxuLy8gSGFuZCBlZGl0cyBhcmUgb3ZlcndyaXR0ZW4gb24gdGhlIG5leHQgd2F0Y2g7IHRoaXMgZmlsZSBpcyByZWFkLW9ubHkuXG5cbmV4cG9ydCBjb25zdCBQQUNLQUdFX0lERU5USUZJRVIgPSBcIkBkYngtdG9vbHMvc2VhcmNoXCI7XG5leHBvcnQgY29uc3QgUEFDS0FHRV9WRVJTSU9OID0gXCIwLjYuMjI3XCI7XG5leHBvcnQgKiBhcyBjbGllbnQgZnJvbSBcIi4vc3JjL2NsaWVudC50c1wiO1xuZXhwb3J0ICogYXMgY29uZmlnIGZyb20gXCIuL3NyYy9jb25maWcudHNcIjtcbmV4cG9ydCAqIGFzIGluZGV4VG9vbHMgZnJvbSBcIi4vc3JjL2luZGV4LXRvb2xzLnRzXCI7XG5leHBvcnQgKiBhcyBsYWtlYmFzZSBmcm9tIFwiLi9zcmMvbGFrZWJhc2UudHNcIjtcbmV4cG9ydCAqIGFzIGxha2ViYXNlUGx1Z2luIGZyb20gXCIuL3NyYy9sYWtlYmFzZS1wbHVnaW4udHNcIjtcbmV4cG9ydCAqIGFzIG5hdGl2ZSBmcm9tIFwiLi9zcmMvbmF0aXZlLnRzXCI7XG5leHBvcnQgKiBhcyBwbHVnaW4gZnJvbSBcIi4vc3JjL3BsdWdpbi50c1wiO1xuZXhwb3J0ICogYXMgcXVlcnkgZnJvbSBcIi4vc3JjL3F1ZXJ5LnRzXCI7XG5leHBvcnQgKiBhcyBydW50aW1lIGZyb20gXCIuL3NyYy9ydW50aW1lLnRzXCI7XG5leHBvcnQgKiBhcyBzY2hlbWEgZnJvbSBcIi4vc3JjL3NjaGVtYS50c1wiO1xuZXhwb3J0ICogYXMgdG9vbCBmcm9tIFwiLi9zcmMvdG9vbC50c1wiO1xuZXhwb3J0IHsgU2VhcmNoSW5kZXgsIFNlYXJjaENsaWVudCB9IGZyb20gXCIuL3NyYy9jbGllbnQudHNcIjtcbmV4cG9ydCB0eXBlIHsgU2VhcmNoUmVhZEJhY2tlbmQsIFNlYXJjaE9wdGlvbnMsIFVuaXZlcnNhbFNlYXJjaE9wdGlvbnMsIEluZGV4SW5mbywgQ3JlYXRlSW5kZXhPcHRpb25zLCBFbnN1cmVFbmRwb2ludE9wdGlvbnMsIFByb3Zpc2lvbk9wdGlvbnMgfSBmcm9tIFwiLi9zcmMvY2xpZW50LnRzXCI7XG5leHBvcnQgeyBJTkRFWF9FTlYsIERBVEFCUklDS1NfSU5ERVhfRU5WLCBFTkRQT0lOVF9FTlYsIERFRkFVTFRfTU9ERSwgREVGQVVMVF9QQUdFX1NJWkUsIERFRkFVTFRfVElNRU9VVF9NUywgREVGQVVMVF9CQVNFX1BBVEgsIFNFQVJDSF9DT05GSUdfU0NIRU1BIH0gZnJvbSBcIi4vc3JjL2NvbmZpZy50c1wiO1xuZXhwb3J0IHR5cGUgeyBTZWFyY2hJbmRleENvbmZpZywgU2VhcmNoUGx1Z2luQ29uZmlnLCBFbnN1cmVPblNldHVwQ29uZmlnLCBSZXNvbHZlZEluZGV4Q29uZmlnLCBSZXNvbHZlZFNlYXJjaENvbmZpZyB9IGZyb20gXCIuL3NyYy9jb25maWcudHNcIjtcbmV4cG9ydCB7IExha2ViYXNlU2VhcmNoQmFja2VuZCB9IGZyb20gXCIuL3NyYy9sYWtlYmFzZS50c1wiO1xuZXhwb3J0IHR5cGUgeyBMYWtlYmFzZVNlYXJjaE9wdGlvbnMsIExha2ViYXNlU2VhcmNoUG9vbCwgTGFrZWJhc2VQcm92aXNpb25PcHRpb25zIH0gZnJvbSBcIi4vc3JjL2xha2ViYXNlLnRzXCI7XG5leHBvcnQgeyBMYWtlYmFzZUFpU2VhcmNoUGx1Z2luLCBsYWtlYmFzZUFpU2VhcmNoIH0gZnJvbSBcIi4vc3JjL2xha2ViYXNlLXBsdWdpbi50c1wiO1xuZXhwb3J0IHR5cGUgeyBMYWtlYmFzZUFpU2VhcmNoSW5kZXhDb25maWcsIExha2ViYXNlQWlTZWFyY2hDb25maWcgfSBmcm9tIFwiLi9zcmMvbGFrZWJhc2UtcGx1Z2luLnRzXCI7XG5leHBvcnQgdHlwZSB7IEFpU2VhcmNoUHJvdmlkZXIgfSBmcm9tIFwiLi9zcmMvbmF0aXZlLnRzXCI7XG5leHBvcnQgeyBTZWFyY2hQbHVnaW4sIHNlYXJjaCB9IGZyb20gXCIuL3NyYy9wbHVnaW4udHNcIjtcbmV4cG9ydCB0eXBlIHsgU2VhcmNoUnVudGltZU9wdGlvbnMsIFNlYXJjaFJ1bnRpbWUgfSBmcm9tIFwiLi9zcmMvcnVudGltZS50c1wiO1xuZXhwb3J0IHsgU0VBUkNIX1RPT0xfREVTQ1JJUFRJT04sIFVOSVZFUlNBTF9TRUFSQ0hfVE9PTF9ERVNDUklQVElPTiwgQUREX0RPQ1VNRU5UU19UT09MX0RFU0NSSVBUSU9OLCBDUkVBVEVfSU5ERVhfVE9PTF9ERVNDUklQVElPTiwgU1lOQ19JTkRFWF9UT09MX0RFU0NSSVBUSU9OLCBzZWFyY2hUb29sU2NoZW1hLCB1bml2ZXJzYWxTZWFyY2hUb29sU2NoZW1hLCBzZWFyY2hSZXN1bHRTY2hlbWEsIGNyZWF0ZUluZGV4VG9vbFNjaGVtYSwgaW5kZXhJbmZvU2NoZW1hLCBzeW5jSW5kZXhUb29sU2NoZW1hIH0gZnJvbSBcIi4vc3JjL3NjaGVtYS50c1wiO1xuZXhwb3J0IHR5cGUgeyBTZWFyY2hUb29sT3B0aW9ucyB9IGZyb20gXCIuL3NyYy90b29sLnRzXCI7XG4iXX0=
@@ -66,6 +66,8 @@ export declare class LakebaseAiSearchPlugin extends Plugin<LakebaseAiSearchConfi
66
66
  shutdown(): Promise<void>;
67
67
  private indexes;
68
68
  private resolveIndex;
69
+ private validateAuth;
70
+ private routeRuntime;
69
71
  private requireBackend;
70
72
  private project;
71
73
  }
@@ -21,6 +21,7 @@ const CONFIG_SCHEMA = {
21
21
  columns: { type: "array", items: { type: "string" } },
22
22
  numResults: { type: "number" },
23
23
  queryType: { enum: ["full_text"] },
24
+ auth: { enum: ["service-principal", "on-behalf-of-user"] },
24
25
  textColumn: { type: "string" },
25
26
  documents: { type: "array", items: { type: "object" } },
26
27
  },
@@ -45,9 +46,12 @@ export class LakebaseAiSearchPlugin extends Plugin {
45
46
  };
46
47
  backend;
47
48
  async setup() {
49
+ const indexes = this.indexes();
50
+ for (const index of indexes)
51
+ this.validateAuth(index);
48
52
  const lake = appkitPlugin.require(this.context, lakebase, this);
49
53
  this.backend = new LakebaseSearchBackend({ managedPool: () => lake.exports().pool }, string.trimToNull(this.config.schema) ?? "public");
50
- for (const index of this.indexes()) {
54
+ for (const index of indexes) {
51
55
  await this.backend.provision(index.indexName, {
52
56
  textColumn: index.config.textColumn ?? "text",
53
57
  ...(index.config.documents ? { seed: index.config.documents } : {}),
@@ -65,7 +69,12 @@ export class LakebaseAiSearchPlugin extends Plugin {
65
69
  path: "/:alias/query",
66
70
  handler: async (req, res) => {
67
71
  try {
68
- res.json(await this.query(routeParam(req.params.alias), req.body));
72
+ const alias = routeParam(req.params.alias);
73
+ const index = this.resolveIndex(alias);
74
+ const { columns: _untrustedColumns, ...request } = object.isRecord(req.body)
75
+ ? req.body
76
+ : {};
77
+ res.json(await this.routeRuntime(index, req).query(alias, request));
69
78
  }
70
79
  catch (error) {
71
80
  res.status(400).json({
@@ -97,10 +106,12 @@ export class LakebaseAiSearchPlugin extends Plugin {
97
106
  method: "post",
98
107
  path: "/:alias/documents",
99
108
  handler: async (req, res) => {
109
+ const alias = routeParam(req.params.alias);
110
+ const index = this.resolveIndex(alias);
100
111
  const documents = Array.isArray(req.body?.documents)
101
112
  ? req.body.documents.filter(object.isRecord)
102
113
  : [];
103
- res.json(await this.addDocuments(routeParam(req.params.alias), documents));
114
+ res.json(await this.routeRuntime(index, req).addDocuments(alias, documents));
104
115
  },
105
116
  });
106
117
  }
@@ -175,6 +186,15 @@ export class LakebaseAiSearchPlugin extends Plugin {
175
186
  throw new ValidationError(`Unknown AI Search index alias "${alias}"`);
176
187
  return index;
177
188
  }
189
+ validateAuth(index) {
190
+ const auth = index.config.auth;
191
+ if (auth !== undefined && auth !== "service-principal" && auth !== "on-behalf-of-user") {
192
+ throw new ValidationError(`Unknown AI Search auth mode for "${index.alias}"`);
193
+ }
194
+ }
195
+ routeRuntime(index, req) {
196
+ return index.config.auth === "on-behalf-of-user" ? this.asUser(req) : this;
197
+ }
178
198
  requireBackend() {
179
199
  if (!this.backend)
180
200
  throw new ValidationError("Lakebase AI Search is not initialized");
@@ -188,4 +208,4 @@ export class LakebaseAiSearchPlugin extends Plugin {
188
208
  }
189
209
  /** AppKit-compatible Lakebase AI Search provider. */
190
210
  export const lakebaseAiSearch = toPlugin(LakebaseAiSearchPlugin);
191
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFrZWJhc2UtcGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xha2ViYXNlLXBsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBRUgsT0FBTyxFQUNMLFFBQVEsRUFDUixNQUFNLEVBQ04sUUFBUSxFQUNSLGVBQWUsR0FJaEIsTUFBTSxvQkFBb0IsQ0FBQztBQUU1QixPQUFPLEVBQUUsTUFBTSxJQUFJLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzNELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBSTdELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV0RCxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLHdCQUF3QixDQUFDLENBQUM7QUFzQnBELE1BQU0sYUFBYSxHQUFnQjtJQUNqQyxJQUFJLEVBQUUsUUFBUTtJQUNkLFFBQVEsRUFBRSxDQUFDLFNBQVMsQ0FBQztJQUNyQixVQUFVLEVBQUU7UUFDVixPQUFPLEVBQUU7WUFDUCxJQUFJLEVBQUUsUUFBUTtZQUNkLG9CQUFvQixFQUFFO2dCQUNwQixJQUFJLEVBQUUsUUFBUTtnQkFDZCxVQUFVLEVBQUU7b0JBQ1YsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRTtvQkFDN0IsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEVBQUU7b0JBQ3JELFVBQVUsRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7b0JBQzlCLFNBQVMsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLFdBQVcsQ0FBQyxFQUFFO29CQUNsQyxVQUFVLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO29CQUM5QixTQUFTLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FB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LENBQUMsSUFBSSxLQUFLO1lBQ3ZELE1BQU07U0FDUCxDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7SUFFTyxZQUFZLENBQUMsS0FBYTtRQUNoQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsS0FBSyxLQUFLLEtBQUssQ0FBQyxDQUFDO1FBQzVFLElBQUksQ0FBQyxLQUFLO1lBQUUsTUFBTSxJQUFJLGVBQWUsQ0FBQyxrQ0FBa0MsS0FBSyxHQUFHLENBQUMsQ0FBQztRQUNsRixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFTyxjQUFjO1FBQ3BCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTztZQUFFLE1BQU0sSUFBSSxlQUFlLENBQUMsdUNBQXVDLENBQUMsQ0FBQztRQUN0RixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQUVPLE9BQU8sQ0FDYixJQUE2QixFQUM3QixPQUE2QjtRQUU3QixJQUFJLENBQUMsT0FBTyxFQUFFLE1BQU07WUFBRSxPQUFPLElBQUksQ0FBQztRQUNsQyxPQUFPLE1BQU0sQ0FBQyxXQUFXLENBQ3ZCLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQ25GLENBQUM7SUFDSixDQUFDOztBQUdILHFEQUFxRDtBQUNyRCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxRQUFRLENBQUMsc0JBQXNCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQXBwS2l0LWNvbXBhdGlibGUgQUkgU2VhcmNoIHByb3ZpZGVyIGJhY2tlZCBieSBMYWtlYmFzZSBmdWxsLXRleHQgc2VhcmNoLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQge1xuICBsYWtlYmFzZSxcbiAgUGx1Z2luLFxuICB0b1BsdWdpbixcbiAgVmFsaWRhdGlvbkVycm9yLFxuICB0eXBlIEJhc2VQbHVnaW5Db25maWcsXG4gIHR5cGUgSUFwcFJvdXRlcixcbiAgdHlwZSBQbHVnaW5NYW5pZmVzdCxcbn0gZnJvbSBcIkBkYXRhYnJpY2tzL2FwcGtpdFwiO1xuaW1wb3J0IHR5cGUgeyBJbmRleENvbmZpZywgU2VhcmNoUmVxdWVzdCwgU2VhcmNoUmVzcG9uc2UgfSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0L2JldGFcIjtcbmltcG9ydCB7IHBsdWdpbiBhcyBhcHBraXRQbHVnaW4gfSBmcm9tIFwiQGRieC10b29scy9hcHBraXRcIjtcbmltcG9ydCB7IGxvZywgb2JqZWN0LCBzdHJpbmcgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHR5cGUgeyBTZWFyY2hEb2N1bWVudCB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1zZWFyY2hcIjtcbmltcG9ydCB0eXBlIGV4cHJlc3MgZnJvbSBcImV4cHJlc3NcIjtcbmltcG9ydCB0eXBlIHsgSlNPTlNjaGVtYTcgfSBmcm9tIFwianNvbi1zY2hlbWFcIjtcbmltcG9ydCB7IExha2ViYXNlU2VhcmNoQmFja2VuZCB9IGZyb20gXCIuL2xha2ViYXNlLnRzXCI7XG5cbmNvbnN0IGxvZ2dlciA9IGxvZy5sb2dnZXIoXCJzZWFyY2gvbGFrZWJhc2UtcGx1Z2luXCIpO1xuXG4vKiogUGVyLWFsaWFzIExha2ViYXNlIHNlYXJjaCBjb25maWd1cmF0aW9uLiAqL1xuZXhwb3J0IGludGVyZmFjZSBMYWtlYmFzZUFpU2VhcmNoSW5kZXhDb25maWcgZXh0ZW5kcyBPbWl0PFxuICBJbmRleENvbmZpZyxcbiAgXCJlbWJlZGRpbmdGblwiIHwgXCJlbmRwb2ludE5hbWVcIiB8IFwicGFnaW5hdGlvblwiIHwgXCJyZXJhbmtlclwiXG4+IHtcbiAgLyoqIERvY3VtZW50cyB1c2VkIHRvIHNlZWQgYW4gZW1wdHkgZnVsbC10ZXh0IHRhYmxlIGR1cmluZyBzZXR1cC4gKi9cbiAgZG9jdW1lbnRzPzogU2VhcmNoRG9jdW1lbnRbXTtcbiAgLyoqIERvY3VtZW50IGZpZWxkIGluZGV4ZWQgZmlyc3QuIERlZmF1bHRzIHRvIGB0ZXh0YC4gKi9cbiAgdGV4dENvbHVtbj86IHN0cmluZztcbn1cblxuLyoqIENvbmZpZ3VyYXRpb24gZm9yIHRoZSBMYWtlYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBBcHBLaXQgQUkgU2VhcmNoLiAqL1xuZXhwb3J0IGludGVyZmFjZSBMYWtlYmFzZUFpU2VhcmNoQ29uZmlnIGV4dGVuZHMgQmFzZVBsdWdpbkNvbmZpZyB7XG4gIGluZGV4ZXM/OiBSZWNvcmQ8c3RyaW5nLCBMYWtlYmFzZUFpU2VhcmNoSW5kZXhDb25maWc+O1xuICAvKiogUG9zdGdyZVNRTCBzY2hlbWEgdGhhdCBvd25zIHRoZSBnZW5lcmF0ZWQgZnVsbC10ZXh0IHRhYmxlcy4gKi9cbiAgc2NoZW1hPzogc3RyaW5nO1xuICAvKiogRW5hYmxlIHRoZSBkb2N1bWVudCB1cHNlcnQgcm91dGUgYW5kIGV4cG9ydGVkIG1ldGhvZC4gKi9cbiAgYWxsb3dXcml0ZT86IGJvb2xlYW47XG59XG5cbmNvbnN0IENPTkZJR19TQ0hFTUE6IEpTT05TY2hlbWE3ID0ge1xuICB0eXBlOiBcIm9iamVjdFwiLFxuICByZXF1aXJlZDogW1wiaW5kZXhlc1wiXSxcbiAgcHJvcGVydGllczoge1xuICAgIGluZGV4ZXM6IHtcbiAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICBhZGRpdGlvbmFsUHJvcGVydGllczoge1xuICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgaW5kZXhOYW1lOiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgICBjb2x1bW5zOiB7IHR5cGU6IFwiYXJyYXlcIiwgaXRlbXM6IHsgdHlwZTogXCJzdHJpbmdcIiB9IH0sXG4gICAgICAgICAgbnVtUmVzdWx0czogeyB0eXBlOiBcIm51bWJlclwiIH0sXG4gICAgICAgICAgcXVlcnlUeXBlOiB7IGVudW06IFtcImZ1bGxfdGV4dFwiXSB9LFxuICAgICAgICAgIHRleHRDb2x1bW46IHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgICAgIGRvY3VtZW50czogeyB0eXBlOiBcImFycmF5XCIsIGl0ZW1zOiB7IHR5cGU6IFwib2JqZWN0XCIgfSB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICAgIHNjaGVtYTogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgYWxsb3dXcml0ZTogeyB0eXBlOiBcImJvb2xlYW5cIiB9LFxuICB9LFxufTtcblxuaW50ZXJmYWNlIFJlc29sdmVkTGFrZWJhc2VJbmRleCB7XG4gIGFsaWFzOiBzdHJpbmc7XG4gIGluZGV4TmFtZTogc3RyaW5nO1xuICBjb25maWc6IExha2ViYXNlQWlTZWFyY2hJbmRleENvbmZpZztcbn1cblxuZnVuY3Rpb24gcm91dGVQYXJhbSh2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10pOiBzdHJpbmcge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyAodmFsdWVbMF0gPz8gXCJcIikgOiB2YWx1ZTtcbn1cblxuLyoqIExha2ViYXNlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBuYXRpdmUgQXBwS2l0IGBhaVNlYXJjaGAgY29udHJhY3QuICovXG5leHBvcnQgY2xhc3MgTGFrZWJhc2VBaVNlYXJjaFBsdWdpbiBleHRlbmRzIFBsdWdpbjxMYWtlYmFzZUFpU2VhcmNoQ29uZmlnPiB7XG4gIHN0YXRpYyBtYW5pZmVzdCA9IHtcbiAgICBuYW1lOiBcImFpU2VhcmNoXCIsXG4gICAgZGlzcGxheU5hbWU6IFwiTGFrZWJhc2UgQUkgU2VhcmNoXCIsXG4gICAgZGVzY3JpcHRpb246IFwiQXBwS2l0IEFJIFNlYXJjaCBjb250cmFjdCBiYWNrZWQgYnkgUG9zdGdyZVNRTCBmdWxsLXRleHQgc2VhcmNoXCIsXG4gICAgc3RhYmlsaXR5OiBcImJldGFcIixcbiAgICByZXNvdXJjZXM6IHsgcmVxdWlyZWQ6IFtdLCBvcHRpb25hbDogW10gfSxcbiAgICBjb25maWc6IHsgc2NoZW1hOiBDT05GSUdfU0NIRU1BIH0sXG4gIH0gc2F0aXNmaWVzIFBsdWdpbk1hbmlmZXN0PFwiYWlTZWFyY2hcIj47XG5cbiAgZGVjbGFyZSBwcm90ZWN0ZWQgY29uZmlnOiBMYWtlYmFzZUFpU2VhcmNoQ29uZmlnO1xuICBwcml2YXRlIGJhY2tlbmQ6IExha2ViYXNlU2VhcmNoQmFja2VuZCB8IHVuZGVmaW5lZDtcblxuICBvdmVycmlkZSBhc3luYyBzZXR1cCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBsYWtlID0gYXBwa2l0UGx1Z2luLnJlcXVpcmUodGhpcy5jb250ZXh0LCBsYWtlYmFzZSwgdGhpcyk7XG4gICAgdGhpcy5iYWNrZW5kID0gbmV3IExha2ViYXNlU2VhcmNoQmFja2VuZChcbiAgICAgIHsgbWFuYWdlZFBvb2w6ICgpID0+IGxha2UuZXhwb3J0cygpLnBvb2wgfSxcbiAgICAgIHN0cmluZy50cmltVG9OdWxsKHRoaXMuY29uZmlnLnNjaGVtYSkgPz8gXCJwdWJsaWNcIixcbiAgICApO1xuICAgIGZvciAoY29uc3QgaW5kZXggb2YgdGhpcy5pbmRleGVzKCkpIHtcbiAgICAgIGF3YWl0IHRoaXMuYmFja2VuZC5wcm92aXNpb24oaW5kZXguaW5kZXhOYW1lLCB7XG4gICAgICAgIHRleHRDb2x1bW46IGluZGV4LmNvbmZpZy50ZXh0Q29sdW1uID8/IFwidGV4dFwiLFxuICAgICAgICAuLi4oaW5kZXguY29uZmlnLmRvY3VtZW50cyA/IHsgc2VlZDogaW5kZXguY29uZmlnLmRvY3VtZW50cyB9IDoge30pLFxuICAgICAgfSk7XG4gICAgfVxuICAgIGxvZ2dlci5pbmZvKFwicmVhZHlcIiwge1xuICAgICAgaW5kZXhlczogdGhpcy5pbmRleGVzKCkubWFwKChpbmRleCkgPT4gaW5kZXguYWxpYXMpLFxuICAgICAgc2NoZW1hOiBzdHJpbmcudHJpbVRvTnVsbCh0aGlzLmNvbmZpZy5zY2hlbWEpID8/IFwicHVibGljXCIsXG4gICAgfSk7XG4gIH1cblxuICBvdmVycmlkZSBpbmplY3RSb3V0ZXMocm91dGVyOiBJQXBwUm91dGVyKTogdm9pZCB7XG4gICAgdGhpcy5yb3V0ZShyb3V0ZXIsIHtcbiAgICAgIG5hbWU6IFwicXVlcnlcIixcbiAgICAgIG1ldGhvZDogXCJwb3N0XCIsXG4gICAgICBwYXRoOiBcIi86YWxpYXMvcXVlcnlcIixcbiAgICAgIGhhbmRsZXI6IGFzeW5jIChyZXE6IGV4cHJlc3MuUmVxdWVzdCwgcmVzOiBleHByZXNzLlJlc3BvbnNlKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmVzLmpzb24oYXdhaXQgdGhpcy5xdWVyeShyb3V0ZVBhcmFtKHJlcS5wYXJhbXMuYWxpYXMpLCByZXEuYm9keSBhcyBTZWFyY2hSZXF1ZXN0KSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgcmVzLnN0YXR1cyg0MDApLmpzb24oe1xuICAgICAgICAgICAgZXJyb3I6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogXCJTZWFyY2ggZmFpbGVkXCIsXG4gICAgICAgICAgICBwbHVnaW46IHRoaXMubmFtZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9KTtcbiAgICB0aGlzLnJvdXRlKHJvdXRlciwge1xuICAgICAgbmFtZTogXCJnZXRDb25maWdcIixcbiAgICAgIG1ldGhvZDogXCJnZXRcIixcbiAgICAgIHBhdGg6IFwiLzphbGlhcy9jb25maWdcIixcbiAgICAgIGhhbmRsZXI6IGFzeW5jIChyZXE6IGV4cHJlc3MuUmVxdWVzdCwgcmVzOiBleHByZXNzLlJlc3BvbnNlKSA9PiB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5yZXNvbHZlSW5kZXgocm91dGVQYXJhbShyZXEucGFyYW1zLmFsaWFzKSk7XG4gICAgICAgIHJlcy5qc29uKHtcbiAgICAgICAgICBhbGlhczogaW5kZXguYWxpYXMsXG4gICAgICAgICAgY29sdW1uczogaW5kZXguY29uZmlnLmNvbHVtbnMsXG4gICAgICAgICAgcXVlcnlUeXBlOiBcImZ1bGxfdGV4dFwiLFxuICAgICAgICAgIG51bVJlc3VsdHM6IGluZGV4LmNvbmZpZy5udW1SZXN1bHRzID8/IDIwLFxuICAgICAgICAgIHJlcmFua2VyOiBmYWxzZSxcbiAgICAgICAgICBwYWdpbmF0aW9uOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgIH0pO1xuICAgIGlmICh0aGlzLmNvbmZpZy5hbGxvd1dyaXRlKSB7XG4gICAgICB0aGlzLnJvdXRlKHJvdXRlciwge1xuICAgICAgICBuYW1lOiBcImFkZERvY3VtZW50c1wiLFxuICAgICAgICBtZXRob2Q6IFwicG9zdFwiLFxuICAgICAgICBwYXRoOiBcIi86YWxpYXMvZG9jdW1lbnRzXCIsXG4gICAgICAgIGhhbmRsZXI6IGFzeW5jIChyZXE6IGV4cHJlc3MuUmVxdWVzdCwgcmVzOiBleHByZXNzLlJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgY29uc3QgZG9jdW1lbnRzID0gQXJyYXkuaXNBcnJheShyZXEuYm9keT8uZG9jdW1lbnRzKVxuICAgICAgICAgICAgPyByZXEuYm9keS5kb2N1bWVudHMuZmlsdGVyKG9iamVjdC5pc1JlY29yZClcbiAgICAgICAgICAgIDogW107XG4gICAgICAgICAgcmVzLmpzb24oYXdhaXQgdGhpcy5hZGREb2N1bWVudHMocm91dGVQYXJhbShyZXEucGFyYW1zLmFsaWFzKSwgZG9jdW1lbnRzKSk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKiogUXVlcnkgb25lIGNvbmZpZ3VyZWQgTGFrZWJhc2UgZnVsbC10ZXh0IGluZGV4IHVzaW5nIEFwcEtpdCdzIHJlc3BvbnNlIHNoYXBlLiAqL1xuICBhc3luYyBxdWVyeShcbiAgICBhbGlhczogc3RyaW5nLFxuICAgIHJlcXVlc3Q6IFNlYXJjaFJlcXVlc3QsXG4gICk6IFByb21pc2U8U2VhcmNoUmVzcG9uc2U8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+PiB7XG4gICAgaWYgKCFyZXF1ZXN0LnF1ZXJ5VGV4dCkge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcIkxha2ViYXNlIEFJIFNlYXJjaCByZXF1aXJlcyBxdWVyeVRleHRcIik7XG4gICAgfVxuICAgIGlmIChyZXF1ZXN0LnF1ZXJ5VmVjdG9yKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFwiTGFrZWJhc2UgQUkgU2VhcmNoIGRvZXMgbm90IGFjY2VwdCBxdWVyeVZlY3RvclwiKTtcbiAgICB9XG4gICAgaWYgKHJlcXVlc3QucXVlcnlUeXBlICYmIHJlcXVlc3QucXVlcnlUeXBlICE9PSBcImZ1bGxfdGV4dFwiKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFwiTGFrZWJhc2UgQUkgU2VhcmNoIHN1cHBvcnRzIG9ubHkgZnVsbF90ZXh0IHF1ZXJpZXNcIik7XG4gICAgfVxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5yZXNvbHZlSW5kZXgoYWxpYXMpO1xuICAgIGNvbnN0IHN0YXJ0ZWRBdCA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucmVxdWlyZUJhY2tlbmQoKS5zZWFyY2goaW5kZXguaW5kZXhOYW1lLCByZXF1ZXN0LnF1ZXJ5VGV4dCwge1xuICAgICAgbGltaXQ6IHJlcXVlc3QubnVtUmVzdWx0cyA/PyBpbmRleC5jb25maWcubnVtUmVzdWx0cyA/PyAyMCxcbiAgICAgIC4uLihyZXF1ZXN0LmZpbHRlcnMgPyB7IGZpbHRlcjogcmVxdWVzdC5maWx0ZXJzIH0gOiB7fSksXG4gICAgfSk7XG4gICAgY29uc3QgY29sdW1ucyA9IHJlcXVlc3QuY29sdW1ucyA/PyBpbmRleC5jb25maWcuY29sdW1ucztcbiAgICByZXR1cm4ge1xuICAgICAgcmVzdWx0czogcmVzdWx0LmhpdHMubWFwKChoaXQpID0+ICh7XG4gICAgICAgIHNjb3JlOiBoaXQuc2NvcmUsXG4gICAgICAgIGRhdGE6IHRoaXMucHJvamVjdCh7IGlkOiBoaXQuaWQsIC4uLmhpdC5maWVsZHMgfSwgY29sdW1ucyksXG4gICAgICB9KSksXG4gICAgICB0b3RhbENvdW50OiByZXN1bHQuY291bnQsXG4gICAgICBxdWVyeVRpbWVNczogTWF0aC5tYXgoMCwgcGVyZm9ybWFuY2Uubm93KCkgLSBzdGFydGVkQXQpLFxuICAgICAgcXVlcnlUeXBlOiBcImZ1bGxfdGV4dFwiLFxuICAgICAgbmV4dFBhZ2VUb2tlbjogbnVsbCxcbiAgICB9O1xuICB9XG5cbiAgLyoqIEFkZCBvciB1cGRhdGUgZG9jdW1lbnRzIGluIG9uZSBjb25maWd1cmVkIExha2ViYXNlIGZ1bGwtdGV4dCBpbmRleC4gKi9cbiAgYXN5bmMgYWRkRG9jdW1lbnRzKGFsaWFzOiBzdHJpbmcsIGRvY3VtZW50czogU2VhcmNoRG9jdW1lbnRbXSkge1xuICAgIGlmICghdGhpcy5jb25maWcuYWxsb3dXcml0ZSkge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcIkxha2ViYXNlIEFJIFNlYXJjaCB3cml0ZXMgYXJlIGRpc2FibGVkXCIpO1xuICAgIH1cbiAgICBjb25zdCBpbmRleCA9IHRoaXMucmVzb2x2ZUluZGV4KGFsaWFzKTtcbiAgICByZXR1cm4gdGhpcy5yZXF1aXJlQmFja2VuZCgpLmFkZERvY3VtZW50cyhcbiAgICAgIGluZGV4LmluZGV4TmFtZSxcbiAgICAgIGRvY3VtZW50cy5maWx0ZXIob2JqZWN0LmlzUmVjb3JkKSxcbiAgICAgIGluZGV4LmNvbmZpZy50ZXh0Q29sdW1uID8/IFwidGV4dFwiLFxuICAgICk7XG4gIH1cblxuICBvdmVycmlkZSBjbGllbnRDb25maWcoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGluZGV4ZXM6IHRoaXMuaW5kZXhlcygpLm1hcCgoaW5kZXgpID0+ICh7XG4gICAgICAgIGFsaWFzOiBpbmRleC5hbGlhcyxcbiAgICAgICAgcXVlcnlUeXBlOiBcImZ1bGxfdGV4dFwiIGFzIGNvbnN0LFxuICAgICAgICBwYWdpbmF0aW9uOiBmYWxzZSxcbiAgICAgIH0pKSxcbiAgICB9O1xuICB9XG5cbiAgZXhwb3J0cygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvdmlkZXJLaW5kOiBcImxha2ViYXNlXCIgYXMgY29uc3QsXG4gICAgICBxdWVyeTogdGhpcy5xdWVyeS5iaW5kKHRoaXMpLFxuICAgICAgYWRkRG9jdW1lbnRzOiB0aGlzLmFkZERvY3VtZW50cy5iaW5kKHRoaXMpLFxuICAgIH07XG4gIH1cblxuICBhc3luYyBzaHV0ZG93bigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmJhY2tlbmQ/LmNsb3NlKCk7XG4gICAgdGhpcy5iYWNrZW5kID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBpbmRleGVzKCk6IFJlc29sdmVkTGFrZWJhc2VJbmRleFtdIHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy5jb25maWcuaW5kZXhlcyA/PyB7fSkubWFwKChbYWxpYXMsIGNvbmZpZ10pID0+ICh7XG4gICAgICBhbGlhcyxcbiAgICAgIGluZGV4TmFtZTogc3RyaW5nLnRyaW1Ub051bGwoY29uZmlnLmluZGV4TmFtZSkgPz8gYWxpYXMsXG4gICAgICBjb25maWcsXG4gICAgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlSW5kZXgoYWxpYXM6IHN0cmluZyk6IFJlc29sdmVkTGFrZWJhc2VJbmRleCB7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmluZGV4ZXMoKS5maW5kKChjYW5kaWRhdGUpID0+IGNhbmRpZGF0ZS5hbGlhcyA9PT0gYWxpYXMpO1xuICAgIGlmICghaW5kZXgpIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoYFVua25vd24gQUkgU2VhcmNoIGluZGV4IGFsaWFzIFwiJHthbGlhc31cImApO1xuICAgIHJldHVybiBpbmRleDtcbiAgfVxuXG4gIHByaXZhdGUgcmVxdWlyZUJhY2tlbmQoKTogTGFrZWJhc2VTZWFyY2hCYWNrZW5kIHtcbiAgICBpZiAoIXRoaXMuYmFja2VuZCkgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcIkxha2ViYXNlIEFJIFNlYXJjaCBpcyBub3QgaW5pdGlhbGl6ZWRcIik7XG4gICAgcmV0dXJuIHRoaXMuYmFja2VuZDtcbiAgfVxuXG4gIHByaXZhdGUgcHJvamVjdChcbiAgICBkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICBjb2x1bW5zOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCxcbiAgKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAgIGlmICghY29sdW1ucz8ubGVuZ3RoKSByZXR1cm4gZGF0YTtcbiAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgY29sdW1ucy5maWx0ZXIoKGNvbHVtbikgPT4gY29sdW1uIGluIGRhdGEpLm1hcCgoY29sdW1uKSA9PiBbY29sdW1uLCBkYXRhW2NvbHVtbl1dKSxcbiAgICApO1xuICB9XG59XG5cbi8qKiBBcHBLaXQtY29tcGF0aWJsZSBMYWtlYmFzZSBBSSBTZWFyY2ggcHJvdmlkZXIuICovXG5leHBvcnQgY29uc3QgbGFrZWJhc2VBaVNlYXJjaCA9IHRvUGx1Z2luKExha2ViYXNlQWlTZWFyY2hQbHVnaW4pO1xuIl19
211
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFrZWJhc2UtcGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xha2ViYXNlLXBsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBRUgsT0FBTyxFQUNMLFFBQVEsRUFDUixNQUFNLEVBQ04sUUFBUSxFQUNSLGVBQWUsR0FJaEIsTUFBTSxvQkFBb0IsQ0FBQztBQUU1QixPQUFPLEVBQUUsTUFBTSxJQUFJLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzNELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBSTdELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV0RCxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLHdCQUF3QixDQUFDLENBQUM7QUFzQnBELE1BQU0sYUFBYSxHQUFnQjtJQUNqQyxJQUFJLEVBQUUsUUFBUTtJQUNkLFFBQVEsRUFBRSxDQUFDLFNBQVMsQ0FBQztJQUNyQixVQUFVLEVBQUU7UUFDVixPQUFPLEVBQUU7WUFDUCxJQUFJLEVBQUUsUUFBUTtZQUNkLG9CQUFvQixFQUFFO2dCQUNwQixJQUFJLEVBQUUsUUFBUTtnQkFDZCxVQUFVLEVBQUU7b0JBQ1YsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRTtvQkFDN0IsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEVBQUU7b0JBQ3JELFVBQVUsRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7b0JBQzlCLFNBQVMsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLFdBQVcsQ0FBQyxFQUFFO29CQUNsQyxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxtQkFBbUIsRUFBRSxtQkFBbUIsQ0FBQyxFQUFFO29CQUMxRCxVQUFV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b3ZpZGVyIGJhY2tlZCBieSBMYWtlYmFzZSBmdWxsLXRleHQgc2VhcmNoLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQge1xuICBsYWtlYmFzZSxcbiAgUGx1Z2luLFxuICB0b1BsdWdpbixcbiAgVmFsaWRhdGlvbkVycm9yLFxuICB0eXBlIEJhc2VQbHVnaW5Db25maWcsXG4gIHR5cGUgSUFwcFJvdXRlcixcbiAgdHlwZSBQbHVnaW5NYW5pZmVzdCxcbn0gZnJvbSBcIkBkYXRhYnJpY2tzL2FwcGtpdFwiO1xuaW1wb3J0IHR5cGUgeyBJbmRleENvbmZpZywgU2VhcmNoUmVxdWVzdCwgU2VhcmNoUmVzcG9uc2UgfSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0L2JldGFcIjtcbmltcG9ydCB7IHBsdWdpbiBhcyBhcHBraXRQbHVnaW4gfSBmcm9tIFwiQGRieC10b29scy9hcHBraXRcIjtcbmltcG9ydCB7IGxvZywgb2JqZWN0LCBzdHJpbmcgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHR5cGUgeyBTZWFyY2hEb2N1bWVudCB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1zZWFyY2hcIjtcbmltcG9ydCB0eXBlIGV4cHJlc3MgZnJvbSBcImV4cHJlc3NcIjtcbmltcG9ydCB0eXBlIHsgSlNPTlNjaGVtYTcgfSBmcm9tIFwianNvbi1zY2hlbWFcIjtcbmltcG9ydCB7IExha2ViYXNlU2VhcmNoQmFja2VuZCB9IGZyb20gXCIuL2xha2ViYXNlLnRzXCI7XG5cbmNvbnN0IGxvZ2dlciA9IGxvZy5sb2dnZXIoXCJzZWFyY2gvbGFrZWJhc2UtcGx1Z2luXCIpO1xuXG4vKiogUGVyLWFsaWFzIExha2ViYXNlIHNlYXJjaCBjb25maWd1cmF0aW9uLiAqL1xuZXhwb3J0IGludGVyZmFjZSBMYWtlYmFzZUFpU2VhcmNoSW5kZXhDb25maWcgZXh0ZW5kcyBPbWl0PFxuICBJbmRleENvbmZpZyxcbiAgXCJlbWJlZGRpbmdGblwiIHwgXCJlbmRwb2ludE5hbWVcIiB8IFwicGFnaW5hdGlvblwiIHwgXCJyZXJhbmtlclwiXG4+IHtcbiAgLyoqIERvY3VtZW50cyB1c2VkIHRvIHNlZWQgYW4gZW1wdHkgZnVsbC10ZXh0IHRhYmxlIGR1cmluZyBzZXR1cC4gKi9cbiAgZG9jdW1lbnRzPzogU2VhcmNoRG9jdW1lbnRbXTtcbiAgLyoqIERvY3VtZW50IGZpZWxkIGluZGV4ZWQgZmlyc3QuIERlZmF1bHRzIHRvIGB0ZXh0YC4gKi9cbiAgdGV4dENvbHVtbj86IHN0cmluZztcbn1cblxuLyoqIENvbmZpZ3VyYXRpb24gZm9yIHRoZSBMYWtlYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBBcHBLaXQgQUkgU2VhcmNoLiAqL1xuZXhwb3J0IGludGVyZmFjZSBMYWtlYmFzZUFpU2VhcmNoQ29uZmlnIGV4dGVuZHMgQmFzZVBsdWdpbkNvbmZpZyB7XG4gIGluZGV4ZXM/OiBSZWNvcmQ8c3RyaW5nLCBMYWtlYmFzZUFpU2VhcmNoSW5kZXhDb25maWc+O1xuICAvKiogUG9zdGdyZVNRTCBzY2hlbWEgdGhhdCBvd25zIHRoZSBnZW5lcmF0ZWQgZnVsbC10ZXh0IHRhYmxlcy4gKi9cbiAgc2NoZW1hPzogc3RyaW5nO1xuICAvKiogRW5hYmxlIHRoZSBkb2N1bWVudCB1cHNlcnQgcm91dGUgYW5kIGV4cG9ydGVkIG1ldGhvZC4gKi9cbiAgYWxsb3dXcml0ZT86IGJvb2xlYW47XG59XG5cbmNvbnN0IENPTkZJR19TQ0hFTUE6IEpTT05TY2hlbWE3ID0ge1xuICB0eXBlOiBcIm9iamVjdFwiLFxuICByZXF1aXJlZDogW1wiaW5kZXhlc1wiXSxcbiAgcHJvcGVydGllczoge1xuICAgIGluZGV4ZXM6IHtcbiAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICBhZGRpdGlvbmFsUHJvcGVydGllczoge1xuICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgaW5kZXhOYW1lOiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgICBjb2x1bW5zOiB7IHR5cGU6IFwiYXJyYXlcIiwgaXRlbXM6IHsgdHlwZTogXCJzdHJpbmdcIiB9IH0sXG4gICAgICAgICAgbnVtUmVzdWx0czogeyB0eXBlOiBcIm51bWJlclwiIH0sXG4gICAgICAgICAgcXVlcnlUeXBlOiB7IGVudW06IFtcImZ1bGxfdGV4dFwiXSB9LFxuICAgICAgICAgIGF1dGg6IHsgZW51bTogW1wic2VydmljZS1wcmluY2lwYWxcIiwgXCJvbi1iZWhhbGYtb2YtdXNlclwiXSB9LFxuICAgICAgICAgIHRleHRDb2x1bW46IHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgICAgIGRvY3VtZW50czogeyB0eXBlOiBcImFycmF5XCIsIGl0ZW1zOiB7IHR5cGU6IFwib2JqZWN0XCIgfSB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICAgIHNjaGVtYTogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgYWxsb3dXcml0ZTogeyB0eXBlOiBcImJvb2xlYW5cIiB9LFxuICB9LFxufTtcblxuaW50ZXJmYWNlIFJlc29sdmVkTGFrZWJhc2VJbmRleCB7XG4gIGFsaWFzOiBzdHJpbmc7XG4gIGluZGV4TmFtZTogc3RyaW5nO1xuICBjb25maWc6IExha2ViYXNlQWlTZWFyY2hJbmRleENvbmZpZztcbn1cblxuZnVuY3Rpb24gcm91dGVQYXJhbSh2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10pOiBzdHJpbmcge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyAodmFsdWVbMF0gPz8gXCJcIikgOiB2YWx1ZTtcbn1cblxuLyoqIExha2ViYXNlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBuYXRpdmUgQXBwS2l0IGBhaVNlYXJjaGAgY29udHJhY3QuICovXG5leHBvcnQgY2xhc3MgTGFrZWJhc2VBaVNlYXJjaFBsdWdpbiBleHRlbmRzIFBsdWdpbjxMYWtlYmFzZUFpU2VhcmNoQ29uZmlnPiB7XG4gIHN0YXRpYyBtYW5pZmVzdCA9IHtcbiAgICBuYW1lOiBcImFpU2VhcmNoXCIsXG4gICAgZGlzcGxheU5hbWU6IFwiTGFrZWJhc2UgQUkgU2VhcmNoXCIsXG4gICAgZGVzY3JpcHRpb246IFwiQXBwS2l0IEFJIFNlYXJjaCBjb250cmFjdCBiYWNrZWQgYnkgUG9zdGdyZVNRTCBmdWxsLXRleHQgc2VhcmNoXCIsXG4gICAgc3RhYmlsaXR5OiBcImJldGFcIixcbiAgICByZXNvdXJjZXM6IHsgcmVxdWlyZWQ6IFtdLCBvcHRpb25hbDogW10gfSxcbiAgICBjb25maWc6IHsgc2NoZW1hOiBDT05GSUdfU0NIRU1BIH0sXG4gIH0gc2F0aXNmaWVzIFBsdWdpbk1hbmlmZXN0PFwiYWlTZWFyY2hcIj47XG5cbiAgZGVjbGFyZSBwcm90ZWN0ZWQgY29uZmlnOiBMYWtlYmFzZUFpU2VhcmNoQ29uZmlnO1xuICBwcml2YXRlIGJhY2tlbmQ6IExha2ViYXNlU2VhcmNoQmFja2VuZCB8IHVuZGVmaW5lZDtcblxuICBvdmVycmlkZSBhc3luYyBzZXR1cCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBpbmRleGVzID0gdGhpcy5pbmRleGVzKCk7XG4gICAgZm9yIChjb25zdCBpbmRleCBvZiBpbmRleGVzKSB0aGlzLnZhbGlkYXRlQXV0aChpbmRleCk7XG4gICAgY29uc3QgbGFrZSA9IGFwcGtpdFBsdWdpbi5yZXF1aXJlKHRoaXMuY29udGV4dCwgbGFrZWJhc2UsIHRoaXMpO1xuICAgIHRoaXMuYmFja2VuZCA9IG5ldyBMYWtlYmFzZVNlYXJjaEJhY2tlbmQoXG4gICAgICB7IG1hbmFnZWRQb29sOiAoKSA9PiBsYWtlLmV4cG9ydHMoKS5wb29sIH0sXG4gICAgICBzdHJpbmcudHJpbVRvTnVsbCh0aGlzLmNvbmZpZy5zY2hlbWEpID8/IFwicHVibGljXCIsXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IGluZGV4IG9mIGluZGV4ZXMpIHtcbiAgICAgIGF3YWl0IHRoaXMuYmFja2VuZC5wcm92aXNpb24oaW5kZXguaW5kZXhOYW1lLCB7XG4gICAgICAgIHRleHRDb2x1bW46IGluZGV4LmNvbmZpZy50ZXh0Q29sdW1uID8/IFwidGV4dFwiLFxuICAgICAgICAuLi4oaW5kZXguY29uZmlnLmRvY3VtZW50cyA/IHsgc2VlZDogaW5kZXguY29uZmlnLmRvY3VtZW50cyB9IDoge30pLFxuICAgICAgfSk7XG4gICAgfVxuICAgIGxvZ2dlci5pbmZvKFwicmVhZHlcIiwge1xuICAgICAgaW5kZXhlczogdGhpcy5pbmRleGVzKCkubWFwKChpbmRleCkgPT4gaW5kZXguYWxpYXMpLFxuICAgICAgc2NoZW1hOiBzdHJpbmcudHJpbVRvTnVsbCh0aGlzLmNvbmZpZy5zY2hlbWEpID8/IFwicHVibGljXCIsXG4gICAgfSk7XG4gIH1cblxuICBvdmVycmlkZSBpbmplY3RSb3V0ZXMocm91dGVyOiBJQXBwUm91dGVyKTogdm9pZCB7XG4gICAgdGhpcy5yb3V0ZShyb3V0ZXIsIHtcbiAgICAgIG5hbWU6IFwicXVlcnlcIixcbiAgICAgIG1ldGhvZDogXCJwb3N0XCIsXG4gICAgICBwYXRoOiBcIi86YWxpYXMvcXVlcnlcIixcbiAgICAgIGhhbmRsZXI6IGFzeW5jIChyZXE6IGV4cHJlc3MuUmVxdWVzdCwgcmVzOiBleHByZXNzLlJlc3BvbnNlKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgYWxpYXMgPSByb3V0ZVBhcmFtKHJlcS5wYXJhbXMuYWxpYXMpO1xuICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5yZXNvbHZlSW5kZXgoYWxpYXMpO1xuICAgICAgICAgIGNvbnN0IHsgY29sdW1uczogX3VudHJ1c3RlZENvbHVtbnMsIC4uLnJlcXVlc3QgfSA9IG9iamVjdC5pc1JlY29yZChyZXEuYm9keSlcbiAgICAgICAgICAgID8gcmVxLmJvZHlcbiAgICAgICAgICAgIDoge307XG4gICAgICAgICAgcmVzLmpzb24oYXdhaXQgdGhpcy5yb3V0ZVJ1bnRpbWUoaW5kZXgsIHJlcSkucXVlcnkoYWxpYXMsIHJlcXVlc3QgYXMgU2VhcmNoUmVxdWVzdCkpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIHJlcy5zdGF0dXMoNDAwKS5qc29uKHtcbiAgICAgICAgICAgIGVycm9yOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFwiU2VhcmNoIGZhaWxlZFwiLFxuICAgICAgICAgICAgcGx1Z2luOiB0aGlzLm5hbWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSk7XG4gICAgdGhpcy5yb3V0ZShyb3V0ZXIsIHtcbiAgICAgIG5hbWU6IFwiZ2V0Q29uZmlnXCIsXG4gICAgICBtZXRob2Q6IFwiZ2V0XCIsXG4gICAgICBwYXRoOiBcIi86YWxpYXMvY29uZmlnXCIsXG4gICAgICBoYW5kbGVyOiBhc3luYyAocmVxOiBleHByZXNzLlJlcXVlc3QsIHJlczogZXhwcmVzcy5SZXNwb25zZSkgPT4ge1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMucmVzb2x2ZUluZGV4KHJvdXRlUGFyYW0ocmVxLnBhcmFtcy5hbGlhcykpO1xuICAgICAgICByZXMuanNvbih7XG4gICAgICAgICAgYWxpYXM6IGluZGV4LmFsaWFzLFxuICAgICAgICAgIGNvbHVtbnM6IGluZGV4LmNvbmZpZy5jb2x1bW5zLFxuICAgICAgICAgIHF1ZXJ5VHlwZTogXCJmdWxsX3RleHRcIixcbiAgICAgICAgICBudW1SZXN1bHRzOiBpbmRleC5jb25maWcubnVtUmVzdWx0cyA/PyAyMCxcbiAgICAgICAgICByZXJhbmtlcjogZmFsc2UsXG4gICAgICAgICAgcGFnaW5hdGlvbjogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICB9KTtcbiAgICBpZiAodGhpcy5jb25maWcuYWxsb3dXcml0ZSkge1xuICAgICAgdGhpcy5yb3V0ZShyb3V0ZXIsIHtcbiAgICAgICAgbmFtZTogXCJhZGREb2N1bWVudHNcIixcbiAgICAgICAgbWV0aG9kOiBcInBvc3RcIixcbiAgICAgICAgcGF0aDogXCIvOmFsaWFzL2RvY3VtZW50c1wiLFxuICAgICAgICBoYW5kbGVyOiBhc3luYyAocmVxOiBleHByZXNzLlJlcXVlc3QsIHJlczogZXhwcmVzcy5SZXNwb25zZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGFsaWFzID0gcm91dGVQYXJhbShyZXEucGFyYW1zLmFsaWFzKTtcbiAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMucmVzb2x2ZUluZGV4KGFsaWFzKTtcbiAgICAgICAgICBjb25zdCBkb2N1bWVudHMgPSBBcnJheS5pc0FycmF5KHJlcS5ib2R5Py5kb2N1bWVudHMpXG4gICAgICAgICAgICA/IHJlcS5ib2R5LmRvY3VtZW50cy5maWx0ZXIob2JqZWN0LmlzUmVjb3JkKVxuICAgICAgICAgICAgOiBbXTtcbiAgICAgICAgICByZXMuanNvbihhd2FpdCB0aGlzLnJvdXRlUnVudGltZShpbmRleCwgcmVxKS5hZGREb2N1bWVudHMoYWxpYXMsIGRvY3VtZW50cykpO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqIFF1ZXJ5IG9uZSBjb25maWd1cmVkIExha2ViYXNlIGZ1bGwtdGV4dCBpbmRleCB1c2luZyBBcHBLaXQncyByZXNwb25zZSBzaGFwZS4gKi9cbiAgYXN5bmMgcXVlcnkoXG4gICAgYWxpYXM6IHN0cmluZyxcbiAgICByZXF1ZXN0OiBTZWFyY2hSZXF1ZXN0LFxuICApOiBQcm9taXNlPFNlYXJjaFJlc3BvbnNlPFJlY29yZDxzdHJpbmcsIHVua25vd24+Pj4ge1xuICAgIGlmICghcmVxdWVzdC5xdWVyeVRleHQpIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXCJMYWtlYmFzZSBBSSBTZWFyY2ggcmVxdWlyZXMgcXVlcnlUZXh0XCIpO1xuICAgIH1cbiAgICBpZiAocmVxdWVzdC5xdWVyeVZlY3Rvcikge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcIkxha2ViYXNlIEFJIFNlYXJjaCBkb2VzIG5vdCBhY2NlcHQgcXVlcnlWZWN0b3JcIik7XG4gICAgfVxuICAgIGlmIChyZXF1ZXN0LnF1ZXJ5VHlwZSAmJiByZXF1ZXN0LnF1ZXJ5VHlwZSAhPT0gXCJmdWxsX3RleHRcIikge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcIkxha2ViYXNlIEFJIFNlYXJjaCBzdXBwb3J0cyBvbmx5IGZ1bGxfdGV4dCBxdWVyaWVzXCIpO1xuICAgIH1cbiAgICBjb25zdCBpbmRleCA9IHRoaXMucmVzb2x2ZUluZGV4KGFsaWFzKTtcbiAgICBjb25zdCBzdGFydGVkQXQgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnJlcXVpcmVCYWNrZW5kKCkuc2VhcmNoKGluZGV4LmluZGV4TmFtZSwgcmVxdWVzdC5xdWVyeVRleHQsIHtcbiAgICAgIGxpbWl0OiByZXF1ZXN0Lm51bVJlc3VsdHMgPz8gaW5kZXguY29uZmlnLm51bVJlc3VsdHMgPz8gMjAsXG4gICAgICAuLi4ocmVxdWVzdC5maWx0ZXJzID8geyBmaWx0ZXI6IHJlcXVlc3QuZmlsdGVycyB9IDoge30pLFxuICAgIH0pO1xuICAgIGNvbnN0IGNvbHVtbnMgPSByZXF1ZXN0LmNvbHVtbnMgPz8gaW5kZXguY29uZmlnLmNvbHVtbnM7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlc3VsdHM6IHJlc3VsdC5oaXRzLm1hcCgoaGl0KSA9PiAoe1xuICAgICAgICBzY29yZTogaGl0LnNjb3JlLFxuICAgICAgICBkYXRhOiB0aGlzLnByb2plY3QoeyBpZDogaGl0LmlkLCAuLi5oaXQuZmllbGRzIH0sIGNvbHVtbnMpLFxuICAgICAgfSkpLFxuICAgICAgdG90YWxDb3VudDogcmVzdWx0LmNvdW50LFxuICAgICAgcXVlcnlUaW1lTXM6IE1hdGgubWF4KDAsIHBlcmZvcm1hbmNlLm5vdygpIC0gc3RhcnRlZEF0KSxcbiAgICAgIHF1ZXJ5VHlwZTogXCJmdWxsX3RleHRcIixcbiAgICAgIG5leHRQYWdlVG9rZW46IG51bGwsXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBBZGQgb3IgdXBkYXRlIGRvY3VtZW50cyBpbiBvbmUgY29uZmlndXJlZCBMYWtlYmFzZSBmdWxsLXRleHQgaW5kZXguICovXG4gIGFzeW5jIGFkZERvY3VtZW50cyhhbGlhczogc3RyaW5nLCBkb2N1bWVudHM6IFNlYXJjaERvY3VtZW50W10pIHtcbiAgICBpZiAoIXRoaXMuY29uZmlnLmFsbG93V3JpdGUpIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXCJMYWtlYmFzZSBBSSBTZWFyY2ggd3JpdGVzIGFyZSBkaXNhYmxlZFwiKTtcbiAgICB9XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLnJlc29sdmVJbmRleChhbGlhcyk7XG4gICAgcmV0dXJuIHRoaXMucmVxdWlyZUJhY2tlbmQoKS5hZGREb2N1bWVudHMoXG4gICAgICBpbmRleC5pbmRleE5hbWUsXG4gICAgICBkb2N1bWVudHMuZmlsdGVyKG9iamVjdC5pc1JlY29yZCksXG4gICAgICBpbmRleC5jb25maWcudGV4dENvbHVtbiA/PyBcInRleHRcIixcbiAgICApO1xuICB9XG5cbiAgb3ZlcnJpZGUgY2xpZW50Q29uZmlnKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpbmRleGVzOiB0aGlzLmluZGV4ZXMoKS5tYXAoKGluZGV4KSA9PiAoe1xuICAgICAgICBhbGlhczogaW5kZXguYWxpYXMsXG4gICAgICAgIHF1ZXJ5VHlwZTogXCJmdWxsX3RleHRcIiBhcyBjb25zdCxcbiAgICAgICAgcGFnaW5hdGlvbjogZmFsc2UsXG4gICAgICB9KSksXG4gICAgfTtcbiAgfVxuXG4gIGV4cG9ydHMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb3ZpZGVyS2luZDogXCJsYWtlYmFzZVwiIGFzIGNvbnN0LFxuICAgICAgcXVlcnk6IHRoaXMucXVlcnkuYmluZCh0aGlzKSxcbiAgICAgIGFkZERvY3VtZW50czogdGhpcy5hZGREb2N1bWVudHMuYmluZCh0aGlzKSxcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgc2h1dGRvd24oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5iYWNrZW5kPy5jbG9zZSgpO1xuICAgIHRoaXMuYmFja2VuZCA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgaW5kZXhlcygpOiBSZXNvbHZlZExha2ViYXNlSW5kZXhbXSB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMuY29uZmlnLmluZGV4ZXMgPz8ge30pLm1hcCgoW2FsaWFzLCBjb25maWddKSA9PiAoe1xuICAgICAgYWxpYXMsXG4gICAgICBpbmRleE5hbWU6IHN0cmluZy50cmltVG9OdWxsKGNvbmZpZy5pbmRleE5hbWUpID8/IGFsaWFzLFxuICAgICAgY29uZmlnLFxuICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZUluZGV4KGFsaWFzOiBzdHJpbmcpOiBSZXNvbHZlZExha2ViYXNlSW5kZXgge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5pbmRleGVzKCkuZmluZCgoY2FuZGlkYXRlKSA9PiBjYW5kaWRhdGUuYWxpYXMgPT09IGFsaWFzKTtcbiAgICBpZiAoIWluZGV4KSB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGBVbmtub3duIEFJIFNlYXJjaCBpbmRleCBhbGlhcyBcIiR7YWxpYXN9XCJgKTtcbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cblxuICBwcml2YXRlIHZhbGlkYXRlQXV0aChpbmRleDogUmVzb2x2ZWRMYWtlYmFzZUluZGV4KTogdm9pZCB7XG4gICAgY29uc3QgYXV0aCA9IChpbmRleC5jb25maWcgYXMgeyBhdXRoPzogdW5rbm93biB9KS5hdXRoO1xuICAgIGlmIChhdXRoICE9PSB1bmRlZmluZWQgJiYgYXV0aCAhPT0gXCJzZXJ2aWNlLXByaW5jaXBhbFwiICYmIGF1dGggIT09IFwib24tYmVoYWxmLW9mLXVzZXJcIikge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihgVW5rbm93biBBSSBTZWFyY2ggYXV0aCBtb2RlIGZvciBcIiR7aW5kZXguYWxpYXN9XCJgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJvdXRlUnVudGltZShpbmRleDogUmVzb2x2ZWRMYWtlYmFzZUluZGV4LCByZXE6IGV4cHJlc3MuUmVxdWVzdCk6IHRoaXMge1xuICAgIHJldHVybiBpbmRleC5jb25maWcuYXV0aCA9PT0gXCJvbi1iZWhhbGYtb2YtdXNlclwiID8gdGhpcy5hc1VzZXIocmVxKSA6IHRoaXM7XG4gIH1cblxuICBwcml2YXRlIHJlcXVpcmVCYWNrZW5kKCk6IExha2ViYXNlU2VhcmNoQmFja2VuZCB7XG4gICAgaWYgKCF0aGlzLmJhY2tlbmQpIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXCJMYWtlYmFzZSBBSSBTZWFyY2ggaXMgbm90IGluaXRpYWxpemVkXCIpO1xuICAgIHJldHVybiB0aGlzLmJhY2tlbmQ7XG4gIH1cblxuICBwcml2YXRlIHByb2plY3QoXG4gICAgZGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgY29sdW1uczogc3RyaW5nW10gfCB1bmRlZmluZWQsXG4gICk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICBpZiAoIWNvbHVtbnM/Lmxlbmd0aCkgcmV0dXJuIGRhdGE7XG4gICAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgIGNvbHVtbnMuZmlsdGVyKChjb2x1bW4pID0+IGNvbHVtbiBpbiBkYXRhKS5tYXAoKGNvbHVtbikgPT4gW2NvbHVtbiwgZGF0YVtjb2x1bW5dXSksXG4gICAgKTtcbiAgfVxufVxuXG4vKiogQXBwS2l0LWNvbXBhdGlibGUgTGFrZWJhc2UgQUkgU2VhcmNoIHByb3ZpZGVyLiAqL1xuZXhwb3J0IGNvbnN0IGxha2ViYXNlQWlTZWFyY2ggPSB0b1BsdWdpbihMYWtlYmFzZUFpU2VhcmNoUGx1Z2luKTtcbiJdfQ==
package/package.json CHANGED
@@ -27,14 +27,14 @@
27
27
  "typescript": "^5.9.3"
28
28
  },
29
29
  "dependencies": {
30
- "@databricks/appkit": "^0.60.0",
30
+ "@databricks/appkit": "0.81.0",
31
31
  "@databricks/sdk-experimental": "^0.17.0",
32
- "@dbx-tools/appkit": "0.6.226",
33
- "@dbx-tools/core": "0.6.226",
34
- "@dbx-tools/model": "0.6.226",
35
- "@dbx-tools/shared-core": "0.6.226",
36
- "@dbx-tools/shared-model": "0.6.226",
37
- "@dbx-tools/shared-search": "0.6.226",
32
+ "@dbx-tools/appkit": "0.6.227",
33
+ "@dbx-tools/core": "0.6.227",
34
+ "@dbx-tools/model": "0.6.227",
35
+ "@dbx-tools/shared-core": "0.6.227",
36
+ "@dbx-tools/shared-model": "0.6.227",
37
+ "@dbx-tools/shared-search": "0.6.227",
38
38
  "@mastra/core": "1.71.0",
39
39
  "pg": "^8.22.0",
40
40
  "zod": "4.3.6"
@@ -53,7 +53,7 @@
53
53
  "./package.json": "./package.json"
54
54
  }
55
55
  },
56
- "version": "0.6.226",
56
+ "version": "0.6.227",
57
57
  "types": "./lib/index.d.ts",
58
58
  "type": "module",
59
59
  "exports": {
@@ -56,6 +56,7 @@ const CONFIG_SCHEMA: JSONSchema7 = {
56
56
  columns: { type: "array", items: { type: "string" } },
57
57
  numResults: { type: "number" },
58
58
  queryType: { enum: ["full_text"] },
59
+ auth: { enum: ["service-principal", "on-behalf-of-user"] },
59
60
  textColumn: { type: "string" },
60
61
  documents: { type: "array", items: { type: "object" } },
61
62
  },
@@ -91,12 +92,14 @@ export class LakebaseAiSearchPlugin extends Plugin<LakebaseAiSearchConfig> {
91
92
  private backend: LakebaseSearchBackend | undefined;
92
93
 
93
94
  override async setup(): Promise<void> {
95
+ const indexes = this.indexes();
96
+ for (const index of indexes) this.validateAuth(index);
94
97
  const lake = appkitPlugin.require(this.context, lakebase, this);
95
98
  this.backend = new LakebaseSearchBackend(
96
99
  { managedPool: () => lake.exports().pool },
97
100
  string.trimToNull(this.config.schema) ?? "public",
98
101
  );
99
- for (const index of this.indexes()) {
102
+ for (const index of indexes) {
100
103
  await this.backend.provision(index.indexName, {
101
104
  textColumn: index.config.textColumn ?? "text",
102
105
  ...(index.config.documents ? { seed: index.config.documents } : {}),
@@ -115,7 +118,12 @@ export class LakebaseAiSearchPlugin extends Plugin<LakebaseAiSearchConfig> {
115
118
  path: "/:alias/query",
116
119
  handler: async (req: express.Request, res: express.Response) => {
117
120
  try {
118
- res.json(await this.query(routeParam(req.params.alias), req.body as SearchRequest));
121
+ const alias = routeParam(req.params.alias);
122
+ const index = this.resolveIndex(alias);
123
+ const { columns: _untrustedColumns, ...request } = object.isRecord(req.body)
124
+ ? req.body
125
+ : {};
126
+ res.json(await this.routeRuntime(index, req).query(alias, request as SearchRequest));
119
127
  } catch (error) {
120
128
  res.status(400).json({
121
129
  error: error instanceof Error ? error.message : "Search failed",
@@ -146,10 +154,12 @@ export class LakebaseAiSearchPlugin extends Plugin<LakebaseAiSearchConfig> {
146
154
  method: "post",
147
155
  path: "/:alias/documents",
148
156
  handler: async (req: express.Request, res: express.Response) => {
157
+ const alias = routeParam(req.params.alias);
158
+ const index = this.resolveIndex(alias);
149
159
  const documents = Array.isArray(req.body?.documents)
150
160
  ? req.body.documents.filter(object.isRecord)
151
161
  : [];
152
- res.json(await this.addDocuments(routeParam(req.params.alias), documents));
162
+ res.json(await this.routeRuntime(index, req).addDocuments(alias, documents));
153
163
  },
154
164
  });
155
165
  }
@@ -238,6 +248,17 @@ export class LakebaseAiSearchPlugin extends Plugin<LakebaseAiSearchConfig> {
238
248
  return index;
239
249
  }
240
250
 
251
+ private validateAuth(index: ResolvedLakebaseIndex): void {
252
+ const auth = (index.config as { auth?: unknown }).auth;
253
+ if (auth !== undefined && auth !== "service-principal" && auth !== "on-behalf-of-user") {
254
+ throw new ValidationError(`Unknown AI Search auth mode for "${index.alias}"`);
255
+ }
256
+ }
257
+
258
+ private routeRuntime(index: ResolvedLakebaseIndex, req: express.Request): this {
259
+ return index.config.auth === "on-behalf-of-user" ? this.asUser(req) : this;
260
+ }
261
+
241
262
  private requireBackend(): LakebaseSearchBackend {
242
263
  if (!this.backend) throw new ValidationError("Lakebase AI Search is not initialized");
243
264
  return this.backend;