@x12i/catalox 3.3.0 → 3.4.5

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.
Files changed (65) hide show
  1. package/README.md +61 -0
  2. package/dist/src/catalox/ai-functions-loader.d.ts +6 -0
  3. package/dist/src/catalox/ai-functions-loader.d.ts.map +1 -0
  4. package/dist/src/catalox/ai-functions-loader.js +19 -0
  5. package/dist/src/catalox/ai-functions-loader.js.map +1 -0
  6. package/dist/src/catalox/authorization.d.ts +9 -0
  7. package/dist/src/catalox/authorization.d.ts.map +1 -1
  8. package/dist/src/catalox/authorization.js +18 -0
  9. package/dist/src/catalox/authorization.js.map +1 -1
  10. package/dist/src/catalox/catalog-discovery.d.ts +32 -0
  11. package/dist/src/catalox/catalog-discovery.d.ts.map +1 -0
  12. package/dist/src/catalox/catalog-discovery.js +150 -0
  13. package/dist/src/catalox/catalog-discovery.js.map +1 -0
  14. package/dist/src/catalox/catalox-bound.d.ts +12 -1
  15. package/dist/src/catalox/catalox-bound.d.ts.map +1 -1
  16. package/dist/src/catalox/catalox-bound.js +33 -0
  17. package/dist/src/catalox/catalox-bound.js.map +1 -1
  18. package/dist/src/catalox/catalox.d.ts +30 -2
  19. package/dist/src/catalox/catalox.d.ts.map +1 -1
  20. package/dist/src/catalox/catalox.js +387 -27
  21. package/dist/src/catalox/catalox.js.map +1 -1
  22. package/dist/src/catalox/create-catalox.d.ts.map +1 -1
  23. package/dist/src/catalox/create-catalox.js +3 -0
  24. package/dist/src/catalox/create-catalox.js.map +1 -1
  25. package/dist/src/catalox/native-catalog-merge.d.ts.map +1 -1
  26. package/dist/src/catalox/native-catalog-merge.js +21 -1
  27. package/dist/src/catalox/native-catalog-merge.js.map +1 -1
  28. package/dist/src/catalox/native-scope.d.ts +11 -10
  29. package/dist/src/catalox/native-scope.d.ts.map +1 -1
  30. package/dist/src/catalox/native-scope.js +154 -14
  31. package/dist/src/catalox/native-scope.js.map +1 -1
  32. package/dist/src/contracts/bindings.d.ts +26 -0
  33. package/dist/src/contracts/bindings.d.ts.map +1 -1
  34. package/dist/src/contracts/bootstrap.d.ts +26 -0
  35. package/dist/src/contracts/bootstrap.d.ts.map +1 -1
  36. package/dist/src/contracts/catalogs.d.ts +29 -5
  37. package/dist/src/contracts/catalogs.d.ts.map +1 -1
  38. package/dist/src/contracts/catalogs.js.map +1 -1
  39. package/dist/src/contracts/context.d.ts +17 -0
  40. package/dist/src/contracts/context.d.ts.map +1 -1
  41. package/dist/src/contracts/descriptor-rules.d.ts +76 -0
  42. package/dist/src/contracts/descriptor-rules.d.ts.map +1 -0
  43. package/dist/src/contracts/descriptor-rules.js +2 -0
  44. package/dist/src/contracts/descriptor-rules.js.map +1 -0
  45. package/dist/src/contracts/descriptors.d.ts +5 -0
  46. package/dist/src/contracts/descriptors.d.ts.map +1 -1
  47. package/dist/src/contracts/discovery.d.ts +105 -0
  48. package/dist/src/contracts/discovery.d.ts.map +1 -1
  49. package/dist/src/contracts/errors.d.ts +5 -0
  50. package/dist/src/contracts/errors.d.ts.map +1 -1
  51. package/dist/src/contracts/index.d.ts +8 -5
  52. package/dist/src/contracts/index.d.ts.map +1 -1
  53. package/dist/src/contracts/index.js.map +1 -1
  54. package/dist/src/contracts/items.d.ts +35 -2
  55. package/dist/src/contracts/items.d.ts.map +1 -1
  56. package/dist/src/contracts/search.d.ts +127 -0
  57. package/dist/src/contracts/search.d.ts.map +1 -0
  58. package/dist/src/contracts/search.js +2 -0
  59. package/dist/src/contracts/search.js.map +1 -0
  60. package/dist/src/firebase/identity-binding-store.d.ts +18 -0
  61. package/dist/src/firebase/identity-binding-store.d.ts.map +1 -0
  62. package/dist/src/firebase/identity-binding-store.js +34 -0
  63. package/dist/src/firebase/identity-binding-store.js.map +1 -0
  64. package/docs/catalox-ui-contract.md +127 -0
  65. package/package.json +3 -1
@@ -1,4 +1,4 @@
1
- import type { AppCatalogBootstrap, AppCatalogEntry, CatalogDescriptor, CatalogItemReference, CatalogItemValidationReport, CatalogGetItemResult, CatalogListResult, CatalogNativeItemOptions, CatalogQueryOptions, MoveNativeCatalogItemScopeInput, CatalogValidationReport, CreateCatalogInput, ExportInventoryData, ExportInventoryInput, InventoryReportData, InventoryReportInput, ItemId, StoreId, StoreAppBindingRecord, ListAppCatalogsInput, UnifiedCatalogItem, UpdateCatalogInput } from "../contracts/index.js";
1
+ import type { AppCatalogBootstrap, AppCatalogEntry, IdentityCatalogEntry, CatalogDescriptor, CatalogItemReference, CatalogItemValidationReport, CatalogGetItemResult, CatalogListResult, CatalogListResultWithOutcome, CatalogGetItemResultWithOutcome, CatalogNativeItemOptions, CatalogQueryOptions, MoveNativeCatalogItemScopeInput, CatalogValidationReport, CreateCatalogInput, ExportInventoryData, ExportInventoryInput, InventoryReportData, InventoryReportInput, ItemId, StoreId, StoreAppBindingRecord, ListAppCatalogsInput, ListCatalogsForIdentityInput, UnifiedCatalogItem, UpdateCatalogInput, StoreCatalogBootstrap, ListAllCatalogsInput, FindCatalogsInput, FindCatalogsByAiInput, CatalogSummary, AiCatalogMatchResult, SearchCatalogItemsInput, FindCatalogItemsByAiInput, AiCatalogItemMatchResult, CreateCatalogItemByAiInput, CreateCatalogItemByAiResult, ModifyCatalogItemByAiInput, ModifyCatalogItemByAiResult } from "../contracts/index.js";
2
2
  import type { AppId, CatalogId } from "../contracts/ids.js";
3
3
  import { ApiCatalogAdapter } from "../adapters/api/api-adapter.js";
4
4
  import { MongoCatalogAdapter } from "../adapters/mongo/mongo-adapter.js";
@@ -19,6 +19,7 @@ import { ReferenceStore } from "../firebase/reference-store.js";
19
19
  import { RendererSnippetStore } from "../firebase/renderer-snippet-store.js";
20
20
  import { SnapshotStore } from "../firebase/snapshot-store.js";
21
21
  import { StoreAppBindingStore } from "../firebase/store-app-binding-store.js";
22
+ import { IdentityBindingStore } from "../firebase/identity-binding-store.js";
22
23
  import type { BackupDataInput, BackupDataResult } from "../contracts/backup.js";
23
24
  import type { ExportAllFirestoreCollectionsToGcsInput, ExportAllFirestoreCollectionsToGcsResult, ExportFirestoreCollectionToGcsInput, ExportFirestoreCollectionToGcsResult, RestoreAllFirestoreCollectionsFromGcsInput, RestoreAllFirestoreCollectionsFromGcsResult, RestoreFirestoreCollectionFromGcsInput, RestoreFirestoreCollectionFromGcsResult } from "../contracts/gcs-firestore-transfer.js";
24
25
  import type { CompareAllFirestoreCollectionsWithGcsManifestInput, CompareAllFirestoreCollectionsWithGcsResult, CompareFirestoreCollectionWithGcsInput, CompareFirestoreCollectionWithGcsResult } from "../contracts/gcs-firestore-compare.js";
@@ -36,6 +37,7 @@ export type CataloxDependencies = {
36
37
  catalogs: CatalogStore;
37
38
  bindings: BindingStore;
38
39
  storeAppBindings?: StoreAppBindingStore;
40
+ identityBindings?: IdentityBindingStore;
39
41
  definitions: DefinitionStore;
40
42
  mappings: MappingStore;
41
43
  descriptors: DescriptorStore;
@@ -81,14 +83,36 @@ export declare class Catalox {
81
83
  private normalizeListFetchScope;
82
84
  private buildAppliedScope;
83
85
  private fetchGlobalPhysicalRows;
84
- private fetchTenantPhysicalRows;
86
+ private fetchScopedPhysicalRows;
85
87
  private decorateItem;
86
88
  listAppCatalogs(context: CataloxContext, input?: ListAppCatalogsInput): Promise<AppCatalogEntry[]>;
89
+ private identityBindingMatches;
90
+ /**
91
+ * vNext: identity-first discovery, backed by `catalogIdentityBindings`.
92
+ * This does not replace app bindings; host policy may intersect/union them.
93
+ */
94
+ listCatalogsForIdentity(context: CataloxContext, input: ListCatalogsForIdentityInput): Promise<IdentityCatalogEntry[]>;
95
+ /**
96
+ * App-agnostic discovery: list catalog metadata across all apps.
97
+ * Visibility default: hide hidden catalogs unless `context.superAdmin`.
98
+ */
99
+ listAllCatalogs(context: CataloxContext, input?: ListAllCatalogsInput): Promise<CatalogSummary[]>;
100
+ findCatalogs(context: CataloxContext, input: FindCatalogsInput): Promise<CatalogSummary[]>;
101
+ findCatalogsByAi(context: CataloxContext, input: FindCatalogsByAiInput): Promise<AiCatalogMatchResult>;
87
102
  getCatalogDescriptor(context: CataloxContext, catalogId: CatalogId): Promise<CatalogDescriptor | null>;
88
103
  getCatalogRendererSnippet(context: CataloxContext, catalogId: CatalogId, role: "core" | "list" | "grid" | "item" | "report" | "dashboard", mode?: "readonly" | "editable"): Promise<import("../contracts/renderer-snippets.js").CatalogRendererSnippetRecord | null>;
89
104
  getAppCatalogBootstrap(context: CataloxContext, appId?: AppId): Promise<AppCatalogBootstrap>;
105
+ /** vNext: store-first bootstrap (store -> apps -> catalog descriptors). */
106
+ getStoreCatalogBootstrap(context: CataloxContext, storeId: StoreId): Promise<StoreCatalogBootstrap>;
90
107
  listCatalogItems(context: CataloxContext, catalogId: CatalogId, options?: CatalogQueryOptions): Promise<CatalogListResult>;
108
+ /**
109
+ * vNext: same as `listCatalogItems` but returns a semantic outcome wrapper instead of throwing for common cases.
110
+ * This is intended for embedders/BFFs that need to distinguish empty vs denied vs misconfigured.
111
+ */
112
+ listCatalogItemsWithOutcome(context: CataloxContext, catalogId: CatalogId, options?: CatalogQueryOptions): Promise<CatalogListResultWithOutcome>;
91
113
  getCatalogItem(context: CataloxContext, catalogId: CatalogId, itemId: ItemId, options?: CatalogNativeItemOptions): Promise<CatalogGetItemResult>;
114
+ /** vNext: `getCatalogItem` wrapper with `CataloxOutcome` semantics. */
115
+ getCatalogItemWithOutcome(context: CataloxContext, catalogId: CatalogId, itemId: ItemId, options?: CatalogNativeItemOptions): Promise<CatalogGetItemResultWithOutcome>;
92
116
  validateCatalog(_context: CataloxContext, _catalogId: CatalogId): Promise<CatalogValidationReport>;
93
117
  validateCatalogItem(_context: CataloxContext, _catalogId: CatalogId, _itemId: ItemId): Promise<CatalogItemValidationReport>;
94
118
  getCatalogItemReferences(context: CataloxContext, catalogId: CatalogId, itemId: ItemId): Promise<CatalogItemReference[]>;
@@ -98,6 +122,10 @@ export declare class Catalox {
98
122
  updateCatalog(_context: CataloxContext, _catalogId: CatalogId, _patch: UpdateCatalogInput): Promise<import("../contracts/catalogs.js").CatalogRecord>;
99
123
  getCatalog(_context: CataloxContext, catalogId: CatalogId): Promise<import("../contracts/catalogs.js").CatalogRecord | null>;
100
124
  listCatalogs(_context: CataloxContext, _options?: CatalogQueryOptions): Promise<import("../contracts/catalogs.js").CatalogRecord[]>;
125
+ searchCatalogItems(context: CataloxContext, catalogId: CatalogId, input: SearchCatalogItemsInput): Promise<CatalogListResult>;
126
+ findCatalogItemsByAi(context: CataloxContext, catalogId: CatalogId, input: FindCatalogItemsByAiInput): Promise<AiCatalogItemMatchResult>;
127
+ createCatalogItemByAi(context: CataloxContext, catalogId: CatalogId, input: CreateCatalogItemByAiInput): Promise<CreateCatalogItemByAiResult>;
128
+ modifyCatalogItemByAi(context: CataloxContext, catalogId: CatalogId, itemId: ItemId, input: ModifyCatalogItemByAiInput): Promise<ModifyCatalogItemByAiResult>;
101
129
  bindCatalogToApp(_context: CataloxContext, _input: import("../contracts/bindings.js").BindCatalogInput): Promise<any>;
102
130
  unbindCatalogFromApp(_context: CataloxContext, _appId: AppId, _catalogId: CatalogId): Promise<void>;
103
131
  bindAppToStore(context: CataloxContext, input: {
@@ -1 +1 @@
1
- {"version":3,"file":"catalox.d.ts","sourceRoot":"","sources":["../../../src/catalox/catalox.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"catalox.d.ts","sourceRoot":"","sources":["../../../src/catalox/catalox.ts"],"names":[],"mappings":"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"}
@@ -26,7 +26,10 @@ import { ReferenceStore } from "../firebase/reference-store.js";
26
26
  import { RendererSnippetStore } from "../firebase/renderer-snippet-store.js";
27
27
  import { SnapshotStore } from "../firebase/snapshot-store.js";
28
28
  import { StoreAppBindingStore } from "../firebase/store-app-binding-store.js";
29
+ import { IdentityBindingStore } from "../firebase/identity-binding-store.js";
29
30
  import { nativeItemsCollectionId } from "../firebase/catalog-data-paths.js";
31
+ import { applyCatalogVisibilityFilter, filterCatalogsByText, findCatalogsByAi as findCatalogsByAiHelper, summarizeCatalog, } from "./catalog-discovery.js";
32
+ import { loadAiFunctions } from "./ai-functions-loader.js";
30
33
  import { runBackupData, pruneGcsBackupRuns } from "./backup-data.js";
31
34
  import { runUndoFirestoreRestore } from "./restore-firestore-backup.js";
32
35
  import { runRestoreFirestoreBackupFromGcs, runDeleteCataloxGcsBackupRun } from "./restore-firestore-backup-from-gcs.js";
@@ -313,15 +316,26 @@ export class Catalox {
313
316
  normalizeListFetchScope(scope) {
314
317
  if (!scope)
315
318
  return undefined;
316
- if (!scope.accountId && !scope.agentId && !scope.userId && scope.superAdmin !== true)
319
+ const hasCoords = Boolean(scope.accountId) ||
320
+ Boolean(scope.groupId) ||
321
+ Boolean(scope.userId) ||
322
+ Boolean(scope.channelId) ||
323
+ Boolean(scope.visitorId) ||
324
+ Boolean(scope.domainId) ||
325
+ Boolean(scope.agentId);
326
+ if (!hasCoords && scope.superAdmin !== true)
317
327
  return undefined;
318
328
  return scope;
319
329
  }
320
330
  buildAppliedScope(scope, effectiveSuperList) {
321
331
  return {
322
332
  ...(scope?.accountId != null ? { accountId: scope.accountId } : {}),
333
+ ...(scope?.groupId != null ? { groupId: scope.groupId } : {}),
323
334
  ...(scope?.agentId != null ? { agentId: scope.agentId } : {}),
335
+ ...(scope?.domainId != null ? { domainId: scope.domainId } : {}),
324
336
  ...(scope?.userId != null ? { userId: scope.userId } : {}),
337
+ ...(scope?.channelId != null ? { channelId: scope.channelId } : {}),
338
+ ...(scope?.visitorId != null ? { visitorId: scope.visitorId } : {}),
325
339
  superAdmin: effectiveSuperList,
326
340
  };
327
341
  }
@@ -335,7 +349,7 @@ export class Catalox {
335
349
  }
336
350
  return recs;
337
351
  }
338
- async fetchTenantPhysicalRows(catalogId, fetch, listOpts) {
352
+ async fetchScopedPhysicalRows(catalogId, fetch, listOpts) {
339
353
  const userFe = { ...(listOpts.filterEq ?? {}) };
340
354
  const cap = { ...listOpts, limit: 500, offset: 0 };
341
355
  const seen = new Set();
@@ -350,34 +364,41 @@ export class Catalox {
350
364
  }
351
365
  };
352
366
  take(await this.deps.nativeItems.list(catalogId, { ...cap, filterEq: { ...userFe, scopeLayer: "global" } }));
367
+ // Legacy v1 scopes (still queried for back-compat)
353
368
  if (fetch.accountId) {
354
- take(await this.deps.nativeItems.list(catalogId, {
355
- ...cap,
356
- filterEq: { ...userFe, scopeLayer: "account", scopeAccountId: fetch.accountId },
357
- }));
369
+ take(await this.deps.nativeItems.list(catalogId, { ...cap, filterEq: { ...userFe, scopeLayer: "account", scopeAccountId: fetch.accountId } }));
358
370
  if (fetch.agentId) {
359
- take(await this.deps.nativeItems.list(catalogId, {
360
- ...cap,
361
- filterEq: {
362
- ...userFe,
363
- scopeLayer: "agent",
364
- scopeAccountId: fetch.accountId,
365
- scopeAgentId: fetch.agentId,
366
- },
367
- }));
371
+ take(await this.deps.nativeItems.list(catalogId, { ...cap, filterEq: { ...userFe, scopeLayer: "agent", scopeAccountId: fetch.accountId, scopeAgentId: fetch.agentId } }));
368
372
  }
369
373
  if (fetch.userId) {
370
- take(await this.deps.nativeItems.list(catalogId, {
371
- ...cap,
372
- filterEq: {
373
- ...userFe,
374
- scopeLayer: "user",
375
- scopeAccountId: fetch.accountId,
376
- scopeUserId: fetch.userId,
377
- },
378
- }));
374
+ take(await this.deps.nativeItems.list(catalogId, { ...cap, filterEq: { ...userFe, scopeLayer: "user", scopeAccountId: fetch.accountId, scopeUserId: fetch.userId } }));
379
375
  }
380
376
  }
377
+ // v2 scoped rows: best-effort prefilter by available indexed coordinates.
378
+ const scopedQueries = [];
379
+ if (fetch.accountId)
380
+ scopedQueries.push({ scopeLayer: "scoped", scopeAccountId: fetch.accountId });
381
+ if (fetch.userId)
382
+ scopedQueries.push({ scopeLayer: "scoped", scopeUserId: fetch.userId });
383
+ if (fetch.channelId)
384
+ scopedQueries.push({ scopeLayer: "scoped", scopeChannelId: fetch.channelId });
385
+ if (fetch.visitorId)
386
+ scopedQueries.push({ scopeLayer: "scoped", scopeVisitorId: fetch.visitorId });
387
+ if (fetch.domainId)
388
+ scopedQueries.push({ scopeLayer: "scoped", scopeDomainId: fetch.domainId });
389
+ if (fetch.agentId)
390
+ scopedQueries.push({ scopeLayer: "scoped", scopeAgentId: fetch.agentId });
391
+ if (fetch.groupId)
392
+ scopedQueries.push({ scopeLayer: "scoped", scopeGroupId: fetch.groupId });
393
+ if (scopedQueries.length) {
394
+ for (const q of scopedQueries) {
395
+ take(await this.deps.nativeItems.list(catalogId, { ...cap, filterEq: { ...userFe, ...q } }));
396
+ }
397
+ }
398
+ else {
399
+ // Fallback: if caller provided coordinates but none mapped to a queryable indexed field, list scoped broadly.
400
+ take(await this.deps.nativeItems.list(catalogId, { ...cap, filterEq: { ...userFe, scopeLayer: "scoped" } }));
401
+ }
381
402
  return filterPhysicalForTenantFetch(out, fetch);
382
403
  }
383
404
  async decorateItem(catalogId, item) {
@@ -432,6 +453,99 @@ export class Catalox {
432
453
  }
433
454
  return out.filter((e) => (input?.includeHidden ? true : e.visibility !== "hidden"));
434
455
  }
456
+ identityBindingMatches(bindingIdentity, query) {
457
+ const pairs = [
458
+ ["accountId", "accountId"],
459
+ ["groupId", "groupId"],
460
+ ["userId", "userId"],
461
+ ["channelId", "channelId"],
462
+ ["visitorId", "visitorId"],
463
+ ["domainId", "domainId"],
464
+ ["agentId", "agentId"],
465
+ ];
466
+ for (const [bk, qk] of pairs) {
467
+ const b = bindingIdentity[bk];
468
+ if (b == null)
469
+ continue;
470
+ const q = query[qk];
471
+ if (q == null)
472
+ return false;
473
+ if (String(q) !== String(b))
474
+ return false;
475
+ }
476
+ return true;
477
+ }
478
+ /**
479
+ * vNext: identity-first discovery, backed by `catalogIdentityBindings`.
480
+ * This does not replace app bindings; host policy may intersect/union them.
481
+ */
482
+ async listCatalogsForIdentity(context, input) {
483
+ if (!this.deps.identityBindings) {
484
+ throw new Error("identityBindings dependency is not configured");
485
+ }
486
+ const bindings = await this.deps.identityBindings.listAll();
487
+ const catalogs = await this.deps.catalogs.listAll();
488
+ const byId = new Map(catalogs.map((c) => [c.catalogId, c]));
489
+ const out = [];
490
+ for (const b of bindings) {
491
+ if (b.status !== "active")
492
+ continue;
493
+ if (!this.identityBindingMatches(b.identity, input.identity))
494
+ continue;
495
+ const cat = byId.get(b.catalogId);
496
+ if (!cat)
497
+ continue;
498
+ if (!input.includeDisabled && cat.status !== "active")
499
+ continue;
500
+ const descriptor = await this.deps.descriptors.get(cat.catalogId);
501
+ const description = descriptor?.descriptor.description ?? cat.description;
502
+ const itemLabel = descriptor?.descriptor.itemLabel ?? cat.itemLabel;
503
+ const visibility = descriptor?.descriptor.visibility;
504
+ const descriptorVersion = descriptor?.descriptorVersion;
505
+ const metadata = descriptor?.descriptor.metadata ?? cat.metadata;
506
+ out.push({
507
+ catalogId: cat.catalogId,
508
+ label: descriptor?.descriptor.label ?? cat.name,
509
+ ...(description != null ? { description } : {}),
510
+ ...(itemLabel != null ? { itemLabel } : {}),
511
+ sourceMode: cat.sourceMode,
512
+ ...(cat.mappedSourceType != null ? { mappedSourceType: cat.mappedSourceType } : {}),
513
+ status: cat.status,
514
+ ...(visibility != null ? { visibility } : {}),
515
+ access: b.access,
516
+ ...(descriptorVersion != null ? { descriptorVersion } : {}),
517
+ ...(metadata != null ? { metadata } : {}),
518
+ });
519
+ }
520
+ return out.filter((e) => (input.includeHidden ? true : e.visibility !== "hidden"));
521
+ }
522
+ /**
523
+ * App-agnostic discovery: list catalog metadata across all apps.
524
+ * Visibility default: hide hidden catalogs unless `context.superAdmin`.
525
+ */
526
+ async listAllCatalogs(context, input) {
527
+ const catalogs = await this.deps.catalogs.listAll();
528
+ const out = [];
529
+ for (const c of catalogs) {
530
+ const d = await this.deps.descriptors.get(c.catalogId);
531
+ out.push(summarizeCatalog(c, d));
532
+ }
533
+ return applyCatalogVisibilityFilter(out, context, input);
534
+ }
535
+ async findCatalogs(context, input) {
536
+ const all = await this.listAllCatalogs(context, {
537
+ ...(input.includeDisabled != null ? { includeDisabled: input.includeDisabled } : {}),
538
+ ...(input.includeHidden != null ? { includeHidden: input.includeHidden } : {}),
539
+ });
540
+ return filterCatalogsByText(all, input);
541
+ }
542
+ async findCatalogsByAi(context, input) {
543
+ const all = await this.listAllCatalogs(context, {
544
+ ...(input.includeDisabled != null ? { includeDisabled: input.includeDisabled } : {}),
545
+ ...(input.includeHidden != null ? { includeHidden: input.includeHidden } : {}),
546
+ });
547
+ return findCatalogsByAiHelper({ query: input.query, catalogs: all, input });
548
+ }
435
549
  async getCatalogDescriptor(context, catalogId) {
436
550
  await this.deps.authz.requireBindingAccess(context, context.appId, catalogId, "read");
437
551
  const rec = await this.deps.descriptors.get(catalogId);
@@ -455,6 +569,18 @@ export class Catalox {
455
569
  }
456
570
  return { appId: resolved, catalogs: descriptors };
457
571
  }
572
+ /** vNext: store-first bootstrap (store -> apps -> catalog descriptors). */
573
+ async getStoreCatalogBootstrap(context, storeId) {
574
+ const apps = await this.listAppsForStore(context, storeId);
575
+ const activeApps = apps.filter((a) => a.status === "active").map((a) => a.appId);
576
+ const out = { storeId: String(storeId), apps: [] };
577
+ for (const appId of activeApps) {
578
+ const appCtx = { ...context, appId };
579
+ const bootstrap = await this.getAppCatalogBootstrap(appCtx, appId);
580
+ out.apps.push({ appId, catalogs: bootstrap.catalogs });
581
+ }
582
+ return out;
583
+ }
458
584
  async listCatalogItems(context, catalogId, options) {
459
585
  await this.deps.authz.requireBindingAccess(context, context.appId, catalogId, "read");
460
586
  const catalog = await this.deps.catalogs.get(catalogId);
@@ -487,11 +613,11 @@ export class Catalox {
487
613
  if (wantsSuperList) {
488
614
  physical = await this.deps.nativeItems.list(catalogId, baseListOpts);
489
615
  }
490
- else if (!rawScope?.accountId && !rawScope?.agentId && !rawScope?.userId) {
616
+ else if (!rawScope || (!rawScope.accountId && !rawScope.groupId && !rawScope.userId && !rawScope.channelId && !rawScope.visitorId && !rawScope.domainId && !rawScope.agentId)) {
491
617
  physical = await this.fetchGlobalPhysicalRows(catalogId, baseListOpts);
492
618
  }
493
619
  else {
494
- physical = await this.fetchTenantPhysicalRows(catalogId, rawScope, baseListOpts);
620
+ physical = await this.fetchScopedPhysicalRows(catalogId, rawScope, baseListOpts);
495
621
  }
496
622
  const merged = mergeNativePhysicalRows(physical, descRec.descriptor.identity, String(context.appId), wantsSuperList);
497
623
  const off = listQueryOptions?.offset ?? 0;
@@ -547,6 +673,29 @@ export class Catalox {
547
673
  }
548
674
  throw new CatalogAdapterError({ catalogId, reason: "unknown_adapter_type" });
549
675
  }
676
+ /**
677
+ * vNext: same as `listCatalogItems` but returns a semantic outcome wrapper instead of throwing for common cases.
678
+ * This is intended for embedders/BFFs that need to distinguish empty vs denied vs misconfigured.
679
+ */
680
+ async listCatalogItemsWithOutcome(context, catalogId, options) {
681
+ try {
682
+ const result = await this.listCatalogItems(context, catalogId, options);
683
+ if (result.listOutcome === "mapping_blocked")
684
+ return { outcome: "mapping_blocked", result };
685
+ if (!result.items.length)
686
+ return { outcome: "empty", result };
687
+ return { outcome: "ok", result };
688
+ }
689
+ catch (e) {
690
+ if (e instanceof CatalogAccessDeniedError)
691
+ return { outcome: "denied", error: e };
692
+ if (e instanceof CatalogNotFoundError)
693
+ return { outcome: "misconfigured", error: e };
694
+ if (e instanceof CatalogAdapterError)
695
+ return { outcome: "misconfigured", error: e };
696
+ throw e;
697
+ }
698
+ }
550
699
  async getCatalogItem(context, catalogId, itemId, options) {
551
700
  await this.deps.authz.requireBindingAccess(context, context.appId, catalogId, "read");
552
701
  const catalog = await this.deps.catalogs.get(catalogId);
@@ -586,7 +735,7 @@ export class Catalox {
586
735
  if (!rows.length)
587
736
  return { outcome: "not_found" };
588
737
  const scope = options?.scope;
589
- const filtered = scope?.accountId || scope?.agentId || scope?.userId
738
+ const filtered = scope?.accountId || scope?.groupId || scope?.userId || scope?.channelId || scope?.visitorId || scope?.domainId || scope?.agentId
590
739
  ? filterPhysicalForTenantFetch(rows, scope)
591
740
  : rows.filter((r) => isGlobalPhysicalRow(r));
592
741
  const merged = mergeNativePhysicalRows(filtered, descRec.descriptor.identity, String(context.appId), false);
@@ -608,6 +757,26 @@ export class Catalox {
608
757
  return { outcome: "not_found" };
609
758
  return { outcome: "found", item: await this.decorateItem(catalogId, first) };
610
759
  }
760
+ /** vNext: `getCatalogItem` wrapper with `CataloxOutcome` semantics. */
761
+ async getCatalogItemWithOutcome(context, catalogId, itemId, options) {
762
+ try {
763
+ const result = await this.getCatalogItem(context, catalogId, itemId, options);
764
+ if (result.outcome === "mapping_blocked")
765
+ return { outcome: "mapping_blocked", result };
766
+ if (result.outcome === "not_found")
767
+ return { outcome: "empty", result };
768
+ return { outcome: "ok", result };
769
+ }
770
+ catch (e) {
771
+ if (e instanceof CatalogAccessDeniedError)
772
+ return { outcome: "denied", error: e };
773
+ if (e instanceof CatalogNotFoundError)
774
+ return { outcome: "misconfigured", error: e };
775
+ if (e instanceof CatalogAdapterError)
776
+ return { outcome: "misconfigured", error: e };
777
+ throw e;
778
+ }
779
+ }
611
780
  async validateCatalog(_context, _catalogId) {
612
781
  return { isValid: true, issues: [] };
613
782
  }
@@ -751,6 +920,197 @@ export class Catalox {
751
920
  async listCatalogs(_context, _options) {
752
921
  return this.deps.catalogs.listAll();
753
922
  }
923
+ async searchCatalogItems(context, catalogId, input) {
924
+ const poolLimit = input.poolLimit ?? 200;
925
+ const limit = input.limit ?? 50;
926
+ const base = await this.listCatalogItems(context, catalogId, {
927
+ limit: poolLimit,
928
+ ...(input.scope ? { scope: input.scope } : {}),
929
+ ...(input.filter ? { filter: input.filter } : {}),
930
+ ...(input.sort ? { sort: input.sort } : {}),
931
+ });
932
+ if (base.listOutcome !== "ok")
933
+ return base;
934
+ const q = String(input.text ?? "").toLowerCase().trim();
935
+ if (!q)
936
+ return { ...base, items: [] };
937
+ const textFields = input.textFields ?? [];
938
+ const filtered = base.items.filter((it) => {
939
+ const parts = [];
940
+ if (it.title)
941
+ parts.push(String(it.title));
942
+ if (it.subtitle)
943
+ parts.push(String(it.subtitle));
944
+ const data = it.data;
945
+ for (const p of textFields) {
946
+ const v = this.readPath(data, p);
947
+ if (v == null)
948
+ continue;
949
+ parts.push(typeof v === "string" || typeof v === "number" ? String(v) : JSON.stringify(v));
950
+ }
951
+ return parts.join(" ").toLowerCase().includes(q);
952
+ });
953
+ return { ...base, items: filtered.slice(0, limit) };
954
+ }
955
+ async findCatalogItemsByAi(context, catalogId, input) {
956
+ const poolLimit = input.poolLimit ?? 300;
957
+ const base = await this.listCatalogItems(context, catalogId, {
958
+ limit: poolLimit,
959
+ ...(input.scope ? { scope: input.scope } : {}),
960
+ ...(input.filter ? { filter: input.filter } : {}),
961
+ ...(input.sort ? { sort: input.sort } : {}),
962
+ });
963
+ if (base.listOutcome !== "ok")
964
+ return { query: input.query, hits: [], noMatch: true };
965
+ const items = base.items;
966
+ const candidates = items.map((it) => {
967
+ const title = it.title ? String(it.title) : "";
968
+ const subtitle = it.subtitle ? String(it.subtitle) : "";
969
+ const label = [title, subtitle].filter(Boolean).join(" — ") || String(it.itemId);
970
+ return {
971
+ id: String(it.itemId),
972
+ label,
973
+ metadata: { catalogId: String(catalogId) },
974
+ };
975
+ });
976
+ const { match } = await loadAiFunctions();
977
+ const res = await match({
978
+ query: input.query,
979
+ candidates,
980
+ ...(input.guidance ? { guidance: input.guidance } : {}),
981
+ ...(input.maxResults != null ? { maxResults: input.maxResults } : {}),
982
+ ...(input.minScore != null ? { minScore: input.minScore } : {}),
983
+ ...(input.allowNoMatch != null ? { allowNoMatch: input.allowNoMatch } : {}),
984
+ ...(input.returnReasons != null ? { returnReasons: input.returnReasons } : {}),
985
+ ...(input.additionalInstructions ? { additionalInstructions: input.additionalInstructions } : {}),
986
+ ...(input.maxCandidates != null ? { maxCandidates: input.maxCandidates } : {}),
987
+ ...(input.mode ? { mode: input.mode } : {}),
988
+ ...(input.client ? { client: input.client } : {}),
989
+ ...(input.model ? { model: input.model } : {}),
990
+ ...(input.temperature != null ? { temperature: input.temperature } : {}),
991
+ ...(input.maxTokens != null ? { maxTokens: input.maxTokens } : {}),
992
+ ...(input.timeoutMs != null ? { timeoutMs: input.timeoutMs } : {}),
993
+ ...(input.vendor != null ? { vendor: input.vendor } : {}),
994
+ });
995
+ const byId = new Map(items.map((it) => [String(it.itemId), it]));
996
+ const hits = res.matches
997
+ .map((m) => {
998
+ const it = byId.get(String(m.id));
999
+ if (!it)
1000
+ return null;
1001
+ return { itemId: it.itemId, score: m.score, ...(m.reason ? { reason: m.reason } : {}), item: it };
1002
+ })
1003
+ .filter(Boolean);
1004
+ return { query: input.query, hits, noMatch: Boolean(res.noMatch) };
1005
+ }
1006
+ async createCatalogItemByAi(context, catalogId, input) {
1007
+ await this.deps.authz.requireBindingAccess(context, context.appId, catalogId, "write");
1008
+ const descRec = await this.deps.descriptors.get(catalogId);
1009
+ if (!descRec)
1010
+ throw new CatalogAdapterError({ catalogId, reason: "missing_descriptor" });
1011
+ const rules = descRec.descriptor.creationRules;
1012
+ if (!rules)
1013
+ throw new CatalogAdapterError({ catalogId, reason: "creation_rules_missing" });
1014
+ if (rules.enabled === false)
1015
+ throw new CatalogAdapterError({ catalogId, reason: "creation_rules_disabled" });
1016
+ const catalog = await this.deps.catalogs.get(catalogId);
1017
+ if (!catalog)
1018
+ throw new CatalogNotFoundError({ catalogId });
1019
+ const existingLimit = input.existingItemsSampleLimit ?? 0;
1020
+ const existingItemsSample = existingLimit > 0
1021
+ ? (await this.listCatalogItems(context, catalogId, { limit: existingLimit })).items.map((i) => i.data)
1022
+ : undefined;
1023
+ const { createItem } = await loadAiFunctions();
1024
+ const result = await createItem({
1025
+ ...(descRec.descriptor.itemLabel ? { itemLabel: descRec.descriptor.itemLabel } : {}),
1026
+ creationRules: rules,
1027
+ provided: input.provided,
1028
+ fieldSchema: (descRec.descriptor.queryableFields ?? []),
1029
+ ...(existingItemsSample ? { existingItemsSample } : {}),
1030
+ ...(input.additionalInstructions ? { additionalInstructions: input.additionalInstructions } : {}),
1031
+ ...(input.mode ? { mode: input.mode } : {}),
1032
+ ...(input.model ? { model: input.model } : {}),
1033
+ ...(input.client ? { client: input.client } : {}),
1034
+ ...(input.temperature != null ? { temperature: input.temperature } : {}),
1035
+ ...(input.maxTokens != null ? { maxTokens: input.maxTokens } : {}),
1036
+ ...(input.timeoutMs != null ? { timeoutMs: input.timeoutMs } : {}),
1037
+ ...(input.vendor != null ? { vendor: input.vendor } : {}),
1038
+ }, undefined);
1039
+ const out = {
1040
+ catalogId,
1041
+ proposed: result.item ?? {},
1042
+ issues: (result.issues ?? []),
1043
+ ...(result.missingInputs ? { missingInputs: result.missingInputs } : {}),
1044
+ noCreate: Boolean(result.noCreate),
1045
+ ...(result.reason ? { reason: result.reason } : {}),
1046
+ };
1047
+ const autoPersist = input.autoPersist === true;
1048
+ const hasErrors = (result.issues ?? []).some((i) => i?.severity === "error");
1049
+ if (autoPersist && !out.noCreate && !hasErrors) {
1050
+ if (catalog.sourceMode !== "native") {
1051
+ throw new CatalogAdapterError({ catalogId, reason: "autopersist_mapped_unsupported" });
1052
+ }
1053
+ const writePayload = input.scope != null ? { ...out.proposed, scope: input.scope } : out.proposed;
1054
+ out.item = await this.upsertNativeCatalogItem(context, catalogId, writePayload);
1055
+ }
1056
+ return out;
1057
+ }
1058
+ async modifyCatalogItemByAi(context, catalogId, itemId, input) {
1059
+ await this.deps.authz.requireBindingAccess(context, context.appId, catalogId, "write");
1060
+ const descRec = await this.deps.descriptors.get(catalogId);
1061
+ if (!descRec)
1062
+ throw new CatalogAdapterError({ catalogId, reason: "missing_descriptor" });
1063
+ const rules = descRec.descriptor.modificationRules;
1064
+ if (!rules)
1065
+ throw new CatalogAdapterError({ catalogId, reason: "modification_rules_missing" });
1066
+ if (rules.enabled === false)
1067
+ throw new CatalogAdapterError({ catalogId, reason: "modification_rules_disabled" });
1068
+ const catalog = await this.deps.catalogs.get(catalogId);
1069
+ if (!catalog)
1070
+ throw new CatalogNotFoundError({ catalogId });
1071
+ const got = await this.getCatalogItem(context, catalogId, itemId, input.nativeItemOptions);
1072
+ if (got.outcome === "mapping_blocked") {
1073
+ throw new CatalogAdapterError({ catalogId, reason: "mapping_validation_failed", issues: got.issues });
1074
+ }
1075
+ if (got.outcome === "not_found")
1076
+ throw new CatalogNotFoundError({ catalogId, itemId });
1077
+ const currentItem = (got.item.data ?? {});
1078
+ const { modifyItem } = await loadAiFunctions();
1079
+ const result = await modifyItem({
1080
+ ...(descRec.descriptor.itemLabel ? { itemLabel: descRec.descriptor.itemLabel } : {}),
1081
+ currentItem: currentItem,
1082
+ modificationRules: rules,
1083
+ patch: input.patch,
1084
+ fieldSchema: (descRec.descriptor.queryableFields ?? []),
1085
+ ...(input.additionalInstructions ? { additionalInstructions: input.additionalInstructions } : {}),
1086
+ ...(input.mode ? { mode: input.mode } : {}),
1087
+ ...(input.model ? { model: input.model } : {}),
1088
+ ...(input.client ? { client: input.client } : {}),
1089
+ ...(input.temperature != null ? { temperature: input.temperature } : {}),
1090
+ ...(input.maxTokens != null ? { maxTokens: input.maxTokens } : {}),
1091
+ ...(input.timeoutMs != null ? { timeoutMs: input.timeoutMs } : {}),
1092
+ ...(input.vendor != null ? { vendor: input.vendor } : {}),
1093
+ }, undefined);
1094
+ const out = {
1095
+ catalogId,
1096
+ itemId,
1097
+ proposed: result.item ?? {},
1098
+ diff: (result.diff ?? []),
1099
+ issues: (result.issues ?? []),
1100
+ ...(result.violatedRules ? { violatedRules: result.violatedRules } : {}),
1101
+ noChange: Boolean(result.noChange),
1102
+ ...(result.reason ? { reason: result.reason } : {}),
1103
+ };
1104
+ const autoPersist = input.autoPersist === true;
1105
+ const hasErrors = (result.issues ?? []).some((i) => i?.severity === "error");
1106
+ if (autoPersist && !out.noChange && !hasErrors) {
1107
+ if (catalog.sourceMode !== "native") {
1108
+ throw new CatalogAdapterError({ catalogId, reason: "autopersist_mapped_unsupported" });
1109
+ }
1110
+ out.item = await this.updateNativeCatalogItem(context, catalogId, itemId, out.proposed, input.nativeItemOptions);
1111
+ }
1112
+ return out;
1113
+ }
754
1114
  async bindCatalogToApp(_context, _input) {
755
1115
  const existing = await this.deps.bindings.findByAppCatalog(_input.appId, _input.catalogId);
756
1116
  if (existing)