@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.
- package/README.md +61 -0
- package/dist/src/catalox/ai-functions-loader.d.ts +6 -0
- package/dist/src/catalox/ai-functions-loader.d.ts.map +1 -0
- package/dist/src/catalox/ai-functions-loader.js +19 -0
- package/dist/src/catalox/ai-functions-loader.js.map +1 -0
- package/dist/src/catalox/authorization.d.ts +9 -0
- package/dist/src/catalox/authorization.d.ts.map +1 -1
- package/dist/src/catalox/authorization.js +18 -0
- package/dist/src/catalox/authorization.js.map +1 -1
- package/dist/src/catalox/catalog-discovery.d.ts +32 -0
- package/dist/src/catalox/catalog-discovery.d.ts.map +1 -0
- package/dist/src/catalox/catalog-discovery.js +150 -0
- package/dist/src/catalox/catalog-discovery.js.map +1 -0
- package/dist/src/catalox/catalox-bound.d.ts +12 -1
- package/dist/src/catalox/catalox-bound.d.ts.map +1 -1
- package/dist/src/catalox/catalox-bound.js +33 -0
- package/dist/src/catalox/catalox-bound.js.map +1 -1
- package/dist/src/catalox/catalox.d.ts +30 -2
- package/dist/src/catalox/catalox.d.ts.map +1 -1
- package/dist/src/catalox/catalox.js +387 -27
- package/dist/src/catalox/catalox.js.map +1 -1
- package/dist/src/catalox/create-catalox.d.ts.map +1 -1
- package/dist/src/catalox/create-catalox.js +3 -0
- package/dist/src/catalox/create-catalox.js.map +1 -1
- package/dist/src/catalox/native-catalog-merge.d.ts.map +1 -1
- package/dist/src/catalox/native-catalog-merge.js +21 -1
- package/dist/src/catalox/native-catalog-merge.js.map +1 -1
- package/dist/src/catalox/native-scope.d.ts +11 -10
- package/dist/src/catalox/native-scope.d.ts.map +1 -1
- package/dist/src/catalox/native-scope.js +154 -14
- package/dist/src/catalox/native-scope.js.map +1 -1
- package/dist/src/contracts/bindings.d.ts +26 -0
- package/dist/src/contracts/bindings.d.ts.map +1 -1
- package/dist/src/contracts/bootstrap.d.ts +26 -0
- package/dist/src/contracts/bootstrap.d.ts.map +1 -1
- package/dist/src/contracts/catalogs.d.ts +29 -5
- package/dist/src/contracts/catalogs.d.ts.map +1 -1
- package/dist/src/contracts/catalogs.js.map +1 -1
- package/dist/src/contracts/context.d.ts +17 -0
- package/dist/src/contracts/context.d.ts.map +1 -1
- package/dist/src/contracts/descriptor-rules.d.ts +76 -0
- package/dist/src/contracts/descriptor-rules.d.ts.map +1 -0
- package/dist/src/contracts/descriptor-rules.js +2 -0
- package/dist/src/contracts/descriptor-rules.js.map +1 -0
- package/dist/src/contracts/descriptors.d.ts +5 -0
- package/dist/src/contracts/descriptors.d.ts.map +1 -1
- package/dist/src/contracts/discovery.d.ts +105 -0
- package/dist/src/contracts/discovery.d.ts.map +1 -1
- package/dist/src/contracts/errors.d.ts +5 -0
- package/dist/src/contracts/errors.d.ts.map +1 -1
- package/dist/src/contracts/index.d.ts +8 -5
- package/dist/src/contracts/index.d.ts.map +1 -1
- package/dist/src/contracts/index.js.map +1 -1
- package/dist/src/contracts/items.d.ts +35 -2
- package/dist/src/contracts/items.d.ts.map +1 -1
- package/dist/src/contracts/search.d.ts +127 -0
- package/dist/src/contracts/search.d.ts.map +1 -0
- package/dist/src/contracts/search.js +2 -0
- package/dist/src/contracts/search.js.map +1 -0
- package/dist/src/firebase/identity-binding-store.d.ts +18 -0
- package/dist/src/firebase/identity-binding-store.d.ts.map +1 -0
- package/dist/src/firebase/identity-binding-store.js +34 -0
- package/dist/src/firebase/identity-binding-store.js.map +1 -0
- package/docs/catalox-ui-contract.md +127 -0
- package/package.json +3 -1
|
@@ -5,6 +5,93 @@ export type ListAppCatalogsInput = {
|
|
|
5
5
|
includeDisabled?: boolean;
|
|
6
6
|
includeHidden?: boolean;
|
|
7
7
|
};
|
|
8
|
+
/**
|
|
9
|
+
* App-agnostic catalog listing/search (returns lists, not items).
|
|
10
|
+
* Visibility default: hide `visibility === "hidden"` unless caller is super-admin.
|
|
11
|
+
*/
|
|
12
|
+
export type ListAllCatalogsInput = {
|
|
13
|
+
includeDisabled?: boolean;
|
|
14
|
+
includeHidden?: boolean;
|
|
15
|
+
};
|
|
16
|
+
export type FindCatalogsInput = {
|
|
17
|
+
text: string;
|
|
18
|
+
/**
|
|
19
|
+
* Which fields are searched. Default: all.
|
|
20
|
+
* - `id`: catalogId
|
|
21
|
+
* - `label`: descriptor.label / catalog name
|
|
22
|
+
* - `description`: descriptor.description / catalog description
|
|
23
|
+
* - `itemLabel`: descriptor.itemLabel / catalog itemLabel
|
|
24
|
+
* - `metadata`: descriptor.metadata / catalog.metadata (stringified shallow values)
|
|
25
|
+
*/
|
|
26
|
+
fields?: Array<"id" | "label" | "description" | "itemLabel" | "metadata">;
|
|
27
|
+
limit?: number;
|
|
28
|
+
includeDisabled?: boolean;
|
|
29
|
+
includeHidden?: boolean;
|
|
30
|
+
};
|
|
31
|
+
export type FindCatalogsByAiInput = {
|
|
32
|
+
query: string;
|
|
33
|
+
guidance?: string;
|
|
34
|
+
maxResults?: number;
|
|
35
|
+
minScore?: number;
|
|
36
|
+
allowNoMatch?: boolean;
|
|
37
|
+
returnReasons?: boolean;
|
|
38
|
+
additionalInstructions?: string;
|
|
39
|
+
maxCandidates?: number;
|
|
40
|
+
mode?: "weak" | "normal" | "strong" | "ultra";
|
|
41
|
+
client?: unknown;
|
|
42
|
+
model?: string;
|
|
43
|
+
temperature?: number;
|
|
44
|
+
maxTokens?: number;
|
|
45
|
+
timeoutMs?: number;
|
|
46
|
+
vendor?: string | string[];
|
|
47
|
+
includeDisabled?: boolean;
|
|
48
|
+
includeHidden?: boolean;
|
|
49
|
+
};
|
|
50
|
+
export type CatalogSummary = {
|
|
51
|
+
catalogId: CatalogId;
|
|
52
|
+
/** Display label. Prefer descriptor.label when present. */
|
|
53
|
+
label: string;
|
|
54
|
+
/** Source record name (always present). */
|
|
55
|
+
name: string;
|
|
56
|
+
description?: string;
|
|
57
|
+
itemLabel?: string;
|
|
58
|
+
sourceMode: CatalogSourceMode;
|
|
59
|
+
mappedSourceType?: CatalogMappedSourceType;
|
|
60
|
+
status: "active" | "disabled" | "draft";
|
|
61
|
+
visibility?: "visible" | "hidden";
|
|
62
|
+
descriptorVersion?: string;
|
|
63
|
+
metadata?: Record<string, unknown>;
|
|
64
|
+
createdAt: string;
|
|
65
|
+
updatedAt: string;
|
|
66
|
+
};
|
|
67
|
+
export type AiCatalogMatchHit = {
|
|
68
|
+
catalogId: CatalogId;
|
|
69
|
+
score: number;
|
|
70
|
+
reason?: string;
|
|
71
|
+
catalog: CatalogSummary;
|
|
72
|
+
};
|
|
73
|
+
export type AiCatalogMatchResult = {
|
|
74
|
+
query: string;
|
|
75
|
+
hits: AiCatalogMatchHit[];
|
|
76
|
+
noMatch: boolean;
|
|
77
|
+
};
|
|
78
|
+
/**
|
|
79
|
+
* vNext: list catalogs visible to an identity (tenant/agent axes).
|
|
80
|
+
* Embedders may use this for identity-first discovery when appId is not the primary concern.
|
|
81
|
+
*/
|
|
82
|
+
export type ListCatalogsForIdentityInput = {
|
|
83
|
+
identity: {
|
|
84
|
+
accountId?: string;
|
|
85
|
+
groupId?: string;
|
|
86
|
+
userId?: string;
|
|
87
|
+
channelId?: string;
|
|
88
|
+
visitorId?: string;
|
|
89
|
+
domainId?: string;
|
|
90
|
+
agentId?: string;
|
|
91
|
+
};
|
|
92
|
+
includeDisabled?: boolean;
|
|
93
|
+
includeHidden?: boolean;
|
|
94
|
+
};
|
|
8
95
|
export type AppCatalogEntry = {
|
|
9
96
|
catalogId: CatalogId;
|
|
10
97
|
label: string;
|
|
@@ -22,4 +109,22 @@ export type AppCatalogEntry = {
|
|
|
22
109
|
descriptorVersion?: string;
|
|
23
110
|
metadata?: Record<string, unknown>;
|
|
24
111
|
};
|
|
112
|
+
/** vNext: catalog entry discovered via identity bindings (not app bindings). */
|
|
113
|
+
export type IdentityCatalogEntry = {
|
|
114
|
+
catalogId: CatalogId;
|
|
115
|
+
label: string;
|
|
116
|
+
description?: string;
|
|
117
|
+
itemLabel?: string;
|
|
118
|
+
sourceMode: CatalogSourceMode;
|
|
119
|
+
mappedSourceType?: CatalogMappedSourceType;
|
|
120
|
+
status: "active" | "disabled" | "draft";
|
|
121
|
+
visibility?: "visible" | "hidden";
|
|
122
|
+
access: {
|
|
123
|
+
canRead: boolean;
|
|
124
|
+
canWrite: boolean;
|
|
125
|
+
canAdmin?: boolean;
|
|
126
|
+
};
|
|
127
|
+
descriptorVersion?: string;
|
|
128
|
+
metadata?: Record<string, unknown>;
|
|
129
|
+
};
|
|
25
130
|
//# sourceMappingURL=discovery.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../../../src/contracts/discovery.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACjD,OAAO,KAAK,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAEhF,MAAM,MAAM,oBAAoB,GAAG;IACjC,KAAK,EAAE,KAAK,CAAC;IACb,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,SAAS,EAAE,SAAS,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,iBAAiB,CAAC;IAC9B,gBAAgB,CAAC,EAAE,uBAAuB,CAAC;IAC3C,MAAM,EAAE,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC;IACxC,UAAU,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC;IAClC,MAAM,EAAE;QACN,OAAO,EAAE,OAAO,CAAC;QACjB,QAAQ,EAAE,OAAO,CAAC;QAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;KACpB,CAAC;IACF,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC,CAAC"}
|
|
1
|
+
{"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../../../src/contracts/discovery.ts"],"names":[],"mappings":"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"}
|
|
@@ -29,4 +29,9 @@ export declare class AppNotFoundError extends CataloxError {
|
|
|
29
29
|
export declare class AppPrivilegeError extends CataloxError {
|
|
30
30
|
constructor(details?: Record<string, unknown>);
|
|
31
31
|
}
|
|
32
|
+
/**
|
|
33
|
+
* vNext: semantic outcomes for read/list/bootstrap operations.
|
|
34
|
+
* Representation is transport-dependent (errors, structured results, or both).
|
|
35
|
+
*/
|
|
36
|
+
export type CataloxOutcome = "ok" | "empty" | "denied" | "misconfigured" | "mapping_blocked";
|
|
32
37
|
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/contracts/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,YAAa,SAAQ,KAAK;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;gBAEjC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAK7E;AAGD,qBAAa,mBAAoB,SAAQ,YAAY;CAAG;AAExD,qBAAa,oBAAqB,SAAQ,YAAY;gBACxC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAG9C;AAED,qBAAa,wBAAyB,SAAQ,YAAY;gBAC5C,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAG9C;AAED,qBAAa,mBAAoB,SAAQ,YAAY;gBACvC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAG9C;AAED,qBAAa,sBAAuB,SAAQ,YAAY;gBAC1C,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAG9C;AAED,qBAAa,mBAAoB,SAAQ,YAAY;gBACvC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAG9C;AAED,qBAAa,gBAAiB,SAAQ,YAAY;gBACpC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAG9C;AAED,qBAAa,gBAAiB,SAAQ,YAAY;gBACpC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAG9C;AAED,qBAAa,iBAAkB,SAAQ,YAAY;gBACrC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAG9C"}
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/contracts/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,YAAa,SAAQ,KAAK;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;gBAEjC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAK7E;AAGD,qBAAa,mBAAoB,SAAQ,YAAY;CAAG;AAExD,qBAAa,oBAAqB,SAAQ,YAAY;gBACxC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAG9C;AAED,qBAAa,wBAAyB,SAAQ,YAAY;gBAC5C,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAG9C;AAED,qBAAa,mBAAoB,SAAQ,YAAY;gBACvC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAG9C;AAED,qBAAa,sBAAuB,SAAQ,YAAY;gBAC1C,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAG9C;AAED,qBAAa,mBAAoB,SAAQ,YAAY;gBACvC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAG9C;AAED,qBAAa,gBAAiB,SAAQ,YAAY;gBACpC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAG9C;AAED,qBAAa,gBAAiB,SAAQ,YAAY;gBACpC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAG9C;AAED,qBAAa,iBAAkB,SAAQ,YAAY;gBACrC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAG9C;AAED;;;GAGG;AACH,MAAM,MAAM,cAAc,GAAG,IAAI,GAAG,OAAO,GAAG,QAAQ,GAAG,eAAe,GAAG,iBAAiB,CAAC"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
export type { AppId, StoreId, CatalogId, BindingId, AdapterId, MappingId, ItemId } from "./ids.js";
|
|
2
|
-
export type { CatalogSourceMode, CatalogMappedSourceType, CatalogDefinition, CatalogQueryOptions, CatalogFetchScope, AppliedCatalogScope, CatalogNativeItemOptions, CatalogListOutcome, CatalogListResult, CatalogGetItemResult, } from "./catalogs.js";
|
|
2
|
+
export type { CatalogSourceMode, CatalogMappedSourceType, CatalogDefinition, CatalogQueryOptions, CatalogFetchScope, AppliedCatalogScope, CatalogNativeItemOptions, CatalogListOutcome, CatalogListResult, CatalogGetItemResult, CatalogListResultWithOutcome, CatalogGetItemResultWithOutcome, } from "./catalogs.js";
|
|
3
3
|
export type { AppRecord } from "./apps.js";
|
|
4
4
|
export type { CatalogRecord, NativeCatalogConfig } from "./catalogs.js";
|
|
5
5
|
export { compactCatalogFilter } from "./catalogs.js";
|
|
6
|
-
export type { CatalogBindingRecord, BindCatalogInput } from "./bindings.js";
|
|
6
|
+
export type { CatalogBindingRecord, BindCatalogInput, IdentityCatalogBindingRecord, } from "./bindings.js";
|
|
7
7
|
export type { MongoDatabaseResolution, MongoCatalogAdapterConfig, ApiCatalogAdapterConfig, } from "./adapters.js";
|
|
8
8
|
export type { CatalogFieldMappingSpec, MappingExecutionOptions, MappingExecutionResult, CatalogMappingIssue, CatalogMappingRecord, } from "./mappings.js";
|
|
9
|
-
export type { UnifiedCatalogItem, NativeCatalogItemRecord, NativeCatalogStoredScope, SnapshotCatalogItemRecord, } from "./items.js";
|
|
9
|
+
export type { UnifiedCatalogItem, NativeCatalogItemRecord, NativeCatalogStoredScope, NativeCatalogStoredScopeV1, NativeCatalogScopeCoordinates, SnapshotCatalogItemRecord, } from "./items.js";
|
|
10
10
|
export type { CatalogSyncState } from "./sync.js";
|
|
11
11
|
export type { CreateCatalogInput, UpdateCatalogInput, } from "./inputs.js";
|
|
12
12
|
export type { MoveNativeCatalogItemScopeInput } from "./catalogs.js";
|
|
@@ -14,6 +14,7 @@ export type { CatalogValidationIssue, CatalogValidationReport, CatalogValidation
|
|
|
14
14
|
export type { CataloxConfig, CatalogManagerConfig } from "./config.js";
|
|
15
15
|
export type { CataloxContext, CatalogManagerContext } from "./context.js";
|
|
16
16
|
export type { CatalogDescriptor, CatalogDescriptorRecord, CatalogFieldDescriptor, CatalogIdentityDescriptor, CatalogCapabilitiesDescriptor, } from "./descriptors.js";
|
|
17
|
+
export type { CatalogRuleEntry, CatalogCreationInput, CatalogCreationRules, CatalogModificationDependency, CatalogModificationRules, } from "./descriptor-rules.js";
|
|
17
18
|
export type { CatalogQueryCapabilities } from "./query.js";
|
|
18
19
|
export type { FieldSource, FieldSourceStaticValue } from "./field-source.js";
|
|
19
20
|
export type { CatalogFilterSpec, CatalogFilterGroup, CatalogFilterDefinition, CatalogFilterControlType, CatalogFilterOperator, CatalogFilterRange, } from "./filters.js";
|
|
@@ -23,8 +24,9 @@ export { resolveCustomRendererEntry } from "./custom-renderer-resolve.js";
|
|
|
23
24
|
export type { CatalogRendererRole, CatalogRendererMode, CatalogRendererSyntax, CatalogRendererEngine, CatalogRendererSnippetRecord, } from "./renderer-snippets.js";
|
|
24
25
|
export type { MarkdownBlock, CatalogListMarkdownMap, CatalogItemMarkdownMap, BuildCatalogListMarkdownMapOptions, BuildCatalogItemMarkdownMapOptions, CatalogListMarkdownMapBuilder, CatalogItemMarkdownMapBuilder, } from "./markdown-map.js";
|
|
25
26
|
export type { DiagramNode, DiagramEdge, CatalogRelationsDiagramMap, ItemRelationsDiagramMap, } from "./diagram-map.js";
|
|
26
|
-
export type { ListAppCatalogsInput, AppCatalogEntry, } from "./discovery.js";
|
|
27
|
-
export type {
|
|
27
|
+
export type { ListAppCatalogsInput, AppCatalogEntry, ListCatalogsForIdentityInput, IdentityCatalogEntry, ListAllCatalogsInput, FindCatalogsInput, FindCatalogsByAiInput, CatalogSummary, AiCatalogMatchHit, AiCatalogMatchResult, } from "./discovery.js";
|
|
28
|
+
export type { SearchCatalogItemsInput, FindCatalogItemsByAiInput, AiCatalogItemMatchHit, AiCatalogItemMatchResult, AiIssue, CreateCatalogItemByAiInput, CreateCatalogItemByAiResult, ModifyCatalogItemByAiInput, ModifyCatalogItemByAiDiff, ModifyCatalogItemByAiResult, DescriptorRulesFieldSchemaHint, } from "./search.js";
|
|
29
|
+
export type { AppCatalogBootstrap, StoreCatalogBootstrap, IdentityCatalogBootstrap, } from "./bootstrap.js";
|
|
28
30
|
export type { CatalogItemReference } from "./references.js";
|
|
29
31
|
export type { CatalogItemValidationIssue, CatalogItemValidationReport, } from "./item-validation.js";
|
|
30
32
|
export type { StoreRecord, StoreAppBindingRecord } from "./stores.js";
|
|
@@ -39,4 +41,5 @@ export type { CatalogDataIndexRecord, CatalogDataLeafIndex } from "./catalog-dat
|
|
|
39
41
|
export type { CatalogItemHistoryOp, CatalogItemHistoryEventV1, CatalogItemHistoryIndexRecord, ListCatalogItemHistoryInput, ListCatalogItemHistoryResult, RestoreCatalogItemFromHistoryInput, ReplayCatalogToPointInTimeInput, RecordHistoryRuntimeConfig, } from "./record-history.js";
|
|
40
42
|
export type { DeleteCatalogInput, DeleteCatalogResult, RestoreDeletedCatalogInput, RestoreDeletedCatalogResult, RenameCatalogInput, RenameCatalogResult, CataloxCatalogDeleteManifestV1, } from "./catalog-lifecycle.js";
|
|
41
43
|
export { CataloxError, CatalogManagerError, CatalogNotFoundError, CatalogAccessDeniedError, CatalogBindingError, CatalogValidationError, CatalogAdapterError, CatalogSyncError, AppNotFoundError, AppPrivilegeError, } from "./errors.js";
|
|
44
|
+
export type { CataloxOutcome } from "./errors.js";
|
|
42
45
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/contracts/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAEnG,YAAY,EACV,iBAAiB,EACjB,uBAAuB,EACvB,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,EACjB,mBAAmB,EACnB,wBAAwB,EACxB,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/contracts/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/contracts/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/contracts/index.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AA8GrD,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AA2I1E,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,oBAAoB,EACpB,wBAAwB,EACxB,mBAAmB,EACnB,sBAAsB,EACtB,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,aAAa,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { AppId, CatalogId, ItemId } from "./ids.js";
|
|
2
2
|
/** Persisted on native catalog item documents (Firestore). */
|
|
3
|
-
export type
|
|
3
|
+
export type NativeCatalogStoredScopeV1 = {
|
|
4
4
|
kind: "global";
|
|
5
5
|
} | {
|
|
6
6
|
kind: "account";
|
|
@@ -16,6 +16,39 @@ export type NativeCatalogStoredScope = {
|
|
|
16
16
|
accountId: string;
|
|
17
17
|
userId: string;
|
|
18
18
|
};
|
|
19
|
+
/**
|
|
20
|
+
* vNext: orthogonal scope coordinates for native items.
|
|
21
|
+
*
|
|
22
|
+
* - Tenant axis: account/group/user + channel/visitor
|
|
23
|
+
* - Agent axis: domain/agent (not under account)
|
|
24
|
+
*
|
|
25
|
+
* This type is **additive** in v3.x: runtime still persists `NativeCatalogStoredScope`.
|
|
26
|
+
* Phase 3 migrates storage+code to a coordinate-pair encoding with a legacy reader.
|
|
27
|
+
*/
|
|
28
|
+
export type NativeCatalogScopeCoordinates = {
|
|
29
|
+
tenant?: {
|
|
30
|
+
accountId?: string;
|
|
31
|
+
groupId?: string;
|
|
32
|
+
userId?: string;
|
|
33
|
+
channelId?: string;
|
|
34
|
+
visitorId?: string;
|
|
35
|
+
};
|
|
36
|
+
agent?: {
|
|
37
|
+
domainId?: string;
|
|
38
|
+
agentId?: string;
|
|
39
|
+
};
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* Persisted on native catalog item documents (Firestore) — vNext storage contract.
|
|
43
|
+
*
|
|
44
|
+
* - `global` is catalog-wide.
|
|
45
|
+
* - `scoped` constrains visibility to the provided coordinate subset.
|
|
46
|
+
*/
|
|
47
|
+
export type NativeCatalogStoredScope = {
|
|
48
|
+
kind: "global";
|
|
49
|
+
} | ({
|
|
50
|
+
kind: "scoped";
|
|
51
|
+
} & NativeCatalogScopeCoordinates);
|
|
19
52
|
export type UnifiedCatalogItem<TData = Record<string, unknown>> = {
|
|
20
53
|
itemId: ItemId;
|
|
21
54
|
catalogId: CatalogId;
|
|
@@ -45,7 +78,7 @@ export type NativeCatalogItemRecord = {
|
|
|
45
78
|
itemId: ItemId;
|
|
46
79
|
catalogId: CatalogId;
|
|
47
80
|
/** When set, describes tenant scope for this physical row. Omitted or global = catalog-wide defaults. */
|
|
48
|
-
scope?: NativeCatalogStoredScope;
|
|
81
|
+
scope?: NativeCatalogStoredScope | NativeCatalogStoredScopeV1;
|
|
49
82
|
appScopedOwnerId?: AppId;
|
|
50
83
|
version?: number;
|
|
51
84
|
createdBy?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"items.d.ts","sourceRoot":"","sources":["../../../src/contracts/items.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAEzD,8DAA8D;AAC9D,MAAM,MAAM,
|
|
1
|
+
{"version":3,"file":"items.d.ts","sourceRoot":"","sources":["../../../src/contracts/items.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import type { CatalogFetchScope, CatalogNativeItemOptions } from "./catalogs.js";
|
|
2
|
+
import type { CatalogFieldDescriptor } from "./descriptors.js";
|
|
3
|
+
import type { CatalogId, ItemId } from "./ids.js";
|
|
4
|
+
import type { UnifiedCatalogItem } from "./items.js";
|
|
5
|
+
export type SearchCatalogItemsInput = {
|
|
6
|
+
/** Case-insensitive substring match over title/subtitle and selected `data` fields. */
|
|
7
|
+
text: string;
|
|
8
|
+
/** Dot-paths into `item.data` to include in the searchable blob. */
|
|
9
|
+
textFields?: string[];
|
|
10
|
+
/** Pre-list query limit before local filter. Default: 200. */
|
|
11
|
+
poolLimit?: number;
|
|
12
|
+
/** Limit after local text filter. Default: 50. */
|
|
13
|
+
limit?: number;
|
|
14
|
+
/** Native catalogs: tenant filter + merge; forwarded to underlying list. */
|
|
15
|
+
scope?: CatalogFetchScope;
|
|
16
|
+
/** Underlying filter forwarded to `listCatalogItems` before local text search. */
|
|
17
|
+
filter?: Record<string, unknown>;
|
|
18
|
+
/** Underlying sort forwarded to `listCatalogItems` before local text search. */
|
|
19
|
+
sort?: Record<string, 1 | -1>;
|
|
20
|
+
};
|
|
21
|
+
export type FindCatalogItemsByAiInput = {
|
|
22
|
+
query: string;
|
|
23
|
+
guidance?: string;
|
|
24
|
+
maxResults?: number;
|
|
25
|
+
minScore?: number;
|
|
26
|
+
allowNoMatch?: boolean;
|
|
27
|
+
returnReasons?: boolean;
|
|
28
|
+
additionalInstructions?: string;
|
|
29
|
+
maxCandidates?: number;
|
|
30
|
+
/** Pre-list query limit (max items to send as candidates). Default: 300. */
|
|
31
|
+
poolLimit?: number;
|
|
32
|
+
/** Native catalogs: forwarded to underlying list. */
|
|
33
|
+
scope?: CatalogFetchScope;
|
|
34
|
+
/** Underlying filter forwarded to `listCatalogItems` before candidate pool selection. */
|
|
35
|
+
filter?: Record<string, unknown>;
|
|
36
|
+
sort?: Record<string, 1 | -1>;
|
|
37
|
+
mode?: "weak" | "normal" | "strong" | "ultra";
|
|
38
|
+
client?: unknown;
|
|
39
|
+
model?: string;
|
|
40
|
+
temperature?: number;
|
|
41
|
+
maxTokens?: number;
|
|
42
|
+
timeoutMs?: number;
|
|
43
|
+
vendor?: string | string[];
|
|
44
|
+
};
|
|
45
|
+
export type AiCatalogItemMatchHit = {
|
|
46
|
+
itemId: ItemId;
|
|
47
|
+
score: number;
|
|
48
|
+
reason?: string;
|
|
49
|
+
item: UnifiedCatalogItem;
|
|
50
|
+
};
|
|
51
|
+
export type AiCatalogItemMatchResult = {
|
|
52
|
+
query: string;
|
|
53
|
+
hits: AiCatalogItemMatchHit[];
|
|
54
|
+
noMatch: boolean;
|
|
55
|
+
};
|
|
56
|
+
export type AiIssue = {
|
|
57
|
+
path?: string;
|
|
58
|
+
code: string;
|
|
59
|
+
message: string;
|
|
60
|
+
severity: "error" | "warn" | "info";
|
|
61
|
+
};
|
|
62
|
+
export type CreateCatalogItemByAiInput = {
|
|
63
|
+
provided: Record<string, unknown>;
|
|
64
|
+
additionalInstructions?: string;
|
|
65
|
+
/** When > 0, passes a small sample of existing items to the skill. Default: 0. */
|
|
66
|
+
existingItemsSampleLimit?: number;
|
|
67
|
+
mode?: "weak" | "normal" | "strong" | "ultra";
|
|
68
|
+
client?: unknown;
|
|
69
|
+
model?: string;
|
|
70
|
+
temperature?: number;
|
|
71
|
+
maxTokens?: number;
|
|
72
|
+
timeoutMs?: number;
|
|
73
|
+
vendor?: string | string[];
|
|
74
|
+
/**
|
|
75
|
+
* When true and the AI result has no error-severity issues and `noCreate === false`,
|
|
76
|
+
* persists the item via `upsertNativeCatalogItem` (native catalogs only).
|
|
77
|
+
*/
|
|
78
|
+
autoPersist?: boolean;
|
|
79
|
+
/** When autoPersist, forwarded into `upsertNativeCatalogItem` as reserved `scope` field. */
|
|
80
|
+
scope?: CatalogFetchScope;
|
|
81
|
+
};
|
|
82
|
+
export type CreateCatalogItemByAiResult = {
|
|
83
|
+
catalogId: CatalogId;
|
|
84
|
+
proposed: Record<string, unknown>;
|
|
85
|
+
issues: AiIssue[];
|
|
86
|
+
missingInputs?: string[];
|
|
87
|
+
noCreate: boolean;
|
|
88
|
+
reason?: string;
|
|
89
|
+
item?: UnifiedCatalogItem;
|
|
90
|
+
};
|
|
91
|
+
export type ModifyCatalogItemByAiInput = {
|
|
92
|
+
patch: Record<string, unknown>;
|
|
93
|
+
additionalInstructions?: string;
|
|
94
|
+
mode?: "weak" | "normal" | "strong" | "ultra";
|
|
95
|
+
client?: unknown;
|
|
96
|
+
model?: string;
|
|
97
|
+
temperature?: number;
|
|
98
|
+
maxTokens?: number;
|
|
99
|
+
timeoutMs?: number;
|
|
100
|
+
vendor?: string | string[];
|
|
101
|
+
/**
|
|
102
|
+
* When true and the AI result has no error-severity issues and `noChange === false`,
|
|
103
|
+
* persists via `updateNativeCatalogItem` (native catalogs only).
|
|
104
|
+
*/
|
|
105
|
+
autoPersist?: boolean;
|
|
106
|
+
/** Forwarded into `getCatalogItem`/`updateNativeCatalogItem` to target a specific physical row. */
|
|
107
|
+
nativeItemOptions?: CatalogNativeItemOptions;
|
|
108
|
+
};
|
|
109
|
+
export type ModifyCatalogItemByAiDiff = {
|
|
110
|
+
path: string;
|
|
111
|
+
op: "add" | "replace" | "remove";
|
|
112
|
+
before?: unknown;
|
|
113
|
+
after?: unknown;
|
|
114
|
+
};
|
|
115
|
+
export type ModifyCatalogItemByAiResult = {
|
|
116
|
+
catalogId: CatalogId;
|
|
117
|
+
itemId: ItemId;
|
|
118
|
+
proposed: Record<string, unknown>;
|
|
119
|
+
diff: ModifyCatalogItemByAiDiff[];
|
|
120
|
+
issues: AiIssue[];
|
|
121
|
+
violatedRules?: string[];
|
|
122
|
+
noChange: boolean;
|
|
123
|
+
reason?: string;
|
|
124
|
+
item?: UnifiedCatalogItem;
|
|
125
|
+
};
|
|
126
|
+
export type DescriptorRulesFieldSchemaHint = CatalogFieldDescriptor[];
|
|
127
|
+
//# sourceMappingURL=search.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../../src/contracts/search.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AACjF,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC/D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAErD,MAAM,MAAM,uBAAuB,GAAG;IACpC,uFAAuF;IACvF,IAAI,EAAE,MAAM,CAAC;IACb,oEAAoE;IACpE,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,8DAA8D;IAC9D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kDAAkD;IAClD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4EAA4E;IAC5E,KAAK,CAAC,EAAE,iBAAiB,CAAC;IAC1B,kFAAkF;IAClF,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,gFAAgF;IAChF,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,4EAA4E;IAC5E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qDAAqD;IACrD,KAAK,CAAC,EAAE,iBAAiB,CAAC;IAC1B,yFAAyF;IACzF,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC9B,IAAI,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;IAC9C,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,kBAAkB,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,qBAAqB,EAAE,CAAC;IAC9B,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;CACrC,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,kFAAkF;IAClF,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,IAAI,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;IAC9C,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC3B;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,4FAA4F;IAC5F,KAAK,CAAC,EAAE,iBAAiB,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG;IACxC,SAAS,EAAE,SAAS,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,MAAM,EAAE,OAAO,EAAE,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,kBAAkB,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,IAAI,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;IAC9C,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC3B;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,mGAAmG;IACnG,iBAAiB,CAAC,EAAE,wBAAwB,CAAC;CAC9C,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,KAAK,GAAG,SAAS,GAAG,QAAQ,CAAC;IACjC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG;IACxC,SAAS,EAAE,SAAS,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,IAAI,EAAE,yBAAyB,EAAE,CAAC;IAClC,MAAM,EAAE,OAAO,EAAE,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,kBAAkB,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,8BAA8B,GAAG,sBAAsB,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../../src/contracts/search.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { CatalogId } from "../contracts/ids.js";
|
|
2
|
+
import type { IdentityCatalogBindingRecord } from "../contracts/bindings.js";
|
|
3
|
+
import { FirestoreStore } from "./firestore-store.js";
|
|
4
|
+
/**
|
|
5
|
+
* Store for catalog↔identity bindings (tenant/agent axes).
|
|
6
|
+
*
|
|
7
|
+
* Collection name is intentionally explicit and separate from `catalogBindings` (app↔catalog).
|
|
8
|
+
*/
|
|
9
|
+
export declare class IdentityBindingStore {
|
|
10
|
+
private readonly store;
|
|
11
|
+
constructor(store: FirestoreStore);
|
|
12
|
+
private docRef;
|
|
13
|
+
get(bindingId: string): Promise<IdentityCatalogBindingRecord | null>;
|
|
14
|
+
listAll(): Promise<IdentityCatalogBindingRecord[]>;
|
|
15
|
+
listByCatalog(catalogId: CatalogId): Promise<IdentityCatalogBindingRecord[]>;
|
|
16
|
+
upsert(record: IdentityCatalogBindingRecord): Promise<void>;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=identity-binding-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identity-binding-store.d.ts","sourceRoot":"","sources":["../../../src/firebase/identity-binding-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,0BAA0B,CAAC;AAC7E,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD;;;;GAIG;AACH,qBAAa,oBAAoB;IACnB,OAAO,CAAC,QAAQ,CAAC,KAAK;gBAAL,KAAK,EAAE,cAAc;IAElD,OAAO,CAAC,MAAM;IAIR,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,4BAA4B,GAAG,IAAI,CAAC;IAKpE,OAAO,IAAI,OAAO,CAAC,4BAA4B,EAAE,CAAC;IAKlD,aAAa,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,4BAA4B,EAAE,CAAC;IAQ5E,MAAM,CAAC,MAAM,EAAE,4BAA4B,GAAG,OAAO,CAAC,IAAI,CAAC;CAGlE"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { FirestoreStore } from "./firestore-store.js";
|
|
2
|
+
/**
|
|
3
|
+
* Store for catalog↔identity bindings (tenant/agent axes).
|
|
4
|
+
*
|
|
5
|
+
* Collection name is intentionally explicit and separate from `catalogBindings` (app↔catalog).
|
|
6
|
+
*/
|
|
7
|
+
export class IdentityBindingStore {
|
|
8
|
+
store;
|
|
9
|
+
constructor(store) {
|
|
10
|
+
this.store = store;
|
|
11
|
+
}
|
|
12
|
+
docRef(bindingId) {
|
|
13
|
+
return this.store.collection("catalogIdentityBindings").doc(bindingId);
|
|
14
|
+
}
|
|
15
|
+
async get(bindingId) {
|
|
16
|
+
const snap = await this.docRef(bindingId).get();
|
|
17
|
+
return snap.exists ? snap.data() : null;
|
|
18
|
+
}
|
|
19
|
+
async listAll() {
|
|
20
|
+
const snap = await this.store.collection("catalogIdentityBindings").get();
|
|
21
|
+
return snap.docs.map((d) => d.data());
|
|
22
|
+
}
|
|
23
|
+
async listByCatalog(catalogId) {
|
|
24
|
+
const snap = await this.store
|
|
25
|
+
.collection("catalogIdentityBindings")
|
|
26
|
+
.where("catalogId", "==", catalogId)
|
|
27
|
+
.get();
|
|
28
|
+
return snap.docs.map((d) => d.data());
|
|
29
|
+
}
|
|
30
|
+
async upsert(record) {
|
|
31
|
+
await this.docRef(record.bindingId).set(record, { merge: true });
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=identity-binding-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identity-binding-store.js","sourceRoot":"","sources":["../../../src/firebase/identity-binding-store.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD;;;;GAIG;AACH,MAAM,OAAO,oBAAoB;IACF;IAA7B,YAA6B,KAAqB;QAArB,UAAK,GAAL,KAAK,CAAgB;IAAG,CAAC;IAE9C,MAAM,CAAC,SAAiB;QAC9B,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,yBAAyB,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACzE,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,SAAiB;QACzB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,CAAC;QAChD,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAE,IAAI,CAAC,IAAI,EAAmC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC5E,CAAC;IAED,KAAK,CAAC,OAAO;QACX,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,yBAAyB,CAAC,CAAC,GAAG,EAAE,CAAC;QAC1E,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAkC,CAAC,CAAC;IACxE,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,SAAoB;QACtC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,KAAK;aAC1B,UAAU,CAAC,yBAAyB,CAAC;aACrC,KAAK,CAAC,WAAW,EAAE,IAAI,EAAE,SAAS,CAAC;aACnC,GAAG,EAAE,CAAC;QACT,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAkC,CAAC,CAAC;IACxE,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,MAAoC;QAC/C,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACnE,CAAC;CACF"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
# Catalox contract for catalox-ui (embedder + BFF)
|
|
2
|
+
|
|
3
|
+
This document is the **consumer-facing contract** catalox-ui (browser + embedded BFF) can rely on when embedding `@x12i/catalox`.
|
|
4
|
+
|
|
5
|
+
It is intentionally focused on:
|
|
6
|
+
|
|
7
|
+
- **Tenancy / identity axes**
|
|
8
|
+
- **Catalog discovery and bootstrap entrypoints**
|
|
9
|
+
- **Item visibility scoping (native catalogs)**
|
|
10
|
+
- **Outcome semantics** (empty vs denied vs misconfigured)
|
|
11
|
+
- **Operator elevation** (`superAdmin`) and audit identity (`actor`)
|
|
12
|
+
|
|
13
|
+
Related upstream docs:
|
|
14
|
+
|
|
15
|
+
- [`docs/identity-model.md`](docs/identity-model.md)
|
|
16
|
+
- [`docs/authorization.md`](docs/authorization.md)
|
|
17
|
+
- [`docs/outcomes.md`](docs/outcomes.md)
|
|
18
|
+
|
|
19
|
+
## 1) Identity model (axes)
|
|
20
|
+
|
|
21
|
+
Catalox treats identity as **three orthogonal axes**:
|
|
22
|
+
|
|
23
|
+
- **App axis**: `storeId` → `appId`
|
|
24
|
+
- **Tenant axis**: `accountId` → `groupId` → `userId` and `accountId` → `channelId` → `visitorId`
|
|
25
|
+
- **Agent axis**: `domainId` → `agentId` (**agent is NOT under account**)
|
|
26
|
+
|
|
27
|
+
### What catalox-ui should send
|
|
28
|
+
|
|
29
|
+
Your BFF constructs a `CataloxContext` and passes it to Catalox (or binds it once via `withContext`).
|
|
30
|
+
|
|
31
|
+
Key fields (current):
|
|
32
|
+
|
|
33
|
+
- **Required**: `appId`
|
|
34
|
+
- **Optional app/store**: `storeId`
|
|
35
|
+
- **Optional tenant coords**: `accountId`, `groupId`, `userId`, `channelId`, `visitorId`
|
|
36
|
+
- **Optional agent coords**: `domainId`, `agentId`
|
|
37
|
+
- **Operator/elevation**: `superAdmin` (host-controlled only)
|
|
38
|
+
- **Audit identity**: `actor` (preferred) and `userId` (legacy convenience)
|
|
39
|
+
- **Advisory**: `roles?: string[]`
|
|
40
|
+
|
|
41
|
+
## 2) Catalog discovery / bootstrap entrypoints
|
|
42
|
+
|
|
43
|
+
catalox-ui typically needs a first hop that answers: “what catalogs can I show, and how do I render/query them?”
|
|
44
|
+
|
|
45
|
+
### App-first (classic)
|
|
46
|
+
|
|
47
|
+
- **List catalogs**: `listAppCatalogs(context, { appId })`
|
|
48
|
+
- **Bootstrap descriptors**: `getAppCatalogBootstrap(context, appId)`
|
|
49
|
+
|
|
50
|
+
These are driven by **app↔catalog bindings** (`catalogBindings`).
|
|
51
|
+
|
|
52
|
+
### Store-first
|
|
53
|
+
|
|
54
|
+
- **List apps**: `listAppsForStore(context, storeId)`
|
|
55
|
+
- **Bootstrap store**: `getStoreCatalogBootstrap(context, storeId)`
|
|
56
|
+
|
|
57
|
+
Notes:
|
|
58
|
+
|
|
59
|
+
- Non-`superAdmin` callers may only see store memberships that include their own `context.appId`.
|
|
60
|
+
- Store membership is a discovery dimension; catalog visibility is still governed by binding/policy.
|
|
61
|
+
|
|
62
|
+
### Identity-first (tenant/agent axes)
|
|
63
|
+
|
|
64
|
+
- **List catalogs**: `listCatalogsForIdentity(context, { identity, includeDisabled?, includeHidden? })`
|
|
65
|
+
|
|
66
|
+
This is driven by **catalog↔identity bindings** (`catalogIdentityBindings`).
|
|
67
|
+
|
|
68
|
+
## 3) Item visibility (native catalogs)
|
|
69
|
+
|
|
70
|
+
Native catalogs may contain multiple physical rows per logical `itemId`. Visibility is controlled by a stored scope on each physical row.
|
|
71
|
+
|
|
72
|
+
### Stored scope (vNext)
|
|
73
|
+
|
|
74
|
+
Native rows may use:
|
|
75
|
+
|
|
76
|
+
- `scope.kind === "global"` (catalog-wide)
|
|
77
|
+
- `scope.kind === "scoped"` with optional coordinate constraints:
|
|
78
|
+
- `tenant`: `accountId`, `groupId`, `userId`, `channelId`, `visitorId`
|
|
79
|
+
- `agent`: `domainId`, `agentId`
|
|
80
|
+
|
|
81
|
+
### Legacy scope (v3 back-compat)
|
|
82
|
+
|
|
83
|
+
Existing rows may still use legacy v3 shapes (`account` / `agent` / `user`). Catalox reads those and continues to support them while the ecosystem migrates.
|
|
84
|
+
|
|
85
|
+
## 4) Empty vs denied vs misconfigured (BFF UX-critical)
|
|
86
|
+
|
|
87
|
+
The goal for catalox-ui is to avoid “empty list” ambiguity for operators.
|
|
88
|
+
|
|
89
|
+
### Preferred: use outcome-wrapper APIs
|
|
90
|
+
|
|
91
|
+
catalox-ui BFF should prefer these methods when it needs UX-relevant distinctions:
|
|
92
|
+
|
|
93
|
+
- `listCatalogItemsWithOutcome(context, catalogId, options?)`
|
|
94
|
+
- `getCatalogItemWithOutcome(context, catalogId, itemId, options?)`
|
|
95
|
+
|
|
96
|
+
They return:
|
|
97
|
+
|
|
98
|
+
- `outcome: "ok" | "empty" | "denied" | "misconfigured" | "mapping_blocked"`
|
|
99
|
+
- plus `result` when available, or `error` for denied/misconfigured cases
|
|
100
|
+
|
|
101
|
+
### Mapping-blocked is a distinct operator signal
|
|
102
|
+
|
|
103
|
+
Mapped catalogs can return `mapping_blocked` when the mapping spec fails validation. catalox-ui should surface issues to operators rather than treating it as “no data”.
|
|
104
|
+
|
|
105
|
+
## 5) Suggested HTTP mapping (BFF)
|
|
106
|
+
|
|
107
|
+
For a catalox-ui BFF, a practical mapping is:
|
|
108
|
+
|
|
109
|
+
- **denied** → HTTP 403
|
|
110
|
+
- **misconfigured** → HTTP 409 (or 500 if you treat it as server fault)
|
|
111
|
+
- **mapping_blocked** → HTTP 422 (or 409), include issues
|
|
112
|
+
- **empty** → HTTP 200 with empty payload
|
|
113
|
+
- **ok** → HTTP 200
|
|
114
|
+
|
|
115
|
+
This is a host choice; the important part is that catalox-ui can distinguish these outcomes.
|
|
116
|
+
|
|
117
|
+
## 6) Operator elevation and audit identity
|
|
118
|
+
|
|
119
|
+
- `superAdmin` is an explicit host-controlled elevation flag. Do not accept it directly from browser input.
|
|
120
|
+
- Prefer `actor: { type, id }` for audit overloading; `userId` exists as a legacy convenience.
|
|
121
|
+
|
|
122
|
+
## 7) Migration notes (from catalox-ui perspective)
|
|
123
|
+
|
|
124
|
+
- **Agent axis correction**: agent identity belongs under `domainId → agentId`, not under `accountId`.
|
|
125
|
+
- Native item scopes may exist in legacy v3 shapes; readers support them during migration.
|
|
126
|
+
- Adopt the outcome-wrapper APIs in the BFF when you need to show operators “why nothing is visible”.
|
|
127
|
+
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@x12i/catalox",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.4.5",
|
|
4
4
|
"description": "Catalox: Firebase-native catalog metadata + unification package.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"private": false,
|
|
@@ -49,6 +49,7 @@
|
|
|
49
49
|
"types": "./dist/src/index.d.ts",
|
|
50
50
|
"files": [
|
|
51
51
|
"dist",
|
|
52
|
+
"docs/catalox-ui-contract.md",
|
|
52
53
|
"README.md",
|
|
53
54
|
"LICENSE",
|
|
54
55
|
"firestore.indexes.json"
|
|
@@ -76,6 +77,7 @@
|
|
|
76
77
|
"mongodb": "^6.0.0"
|
|
77
78
|
},
|
|
78
79
|
"optionalDependencies": {
|
|
80
|
+
"aifunctions-js": "^2.9.1",
|
|
79
81
|
"react": "^19.0.0",
|
|
80
82
|
"react-dom": "^19.0.0",
|
|
81
83
|
"typescript": "^5.0.0"
|