@x12i/map-store-client 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/README.md +39 -0
  2. package/dist/attackSurfaces.d.ts +15 -0
  3. package/dist/attackSurfaces.d.ts.map +1 -0
  4. package/dist/attackSurfaces.js +287 -0
  5. package/dist/attackSurfaces.js.map +1 -0
  6. package/dist/bagCatalog.d.ts +62 -0
  7. package/dist/bagCatalog.d.ts.map +1 -0
  8. package/dist/bagCatalog.js +356 -0
  9. package/dist/bagCatalog.js.map +1 -0
  10. package/dist/bootstrap.d.ts +16 -0
  11. package/dist/bootstrap.d.ts.map +1 -0
  12. package/dist/bootstrap.js +98 -0
  13. package/dist/bootstrap.js.map +1 -0
  14. package/dist/census.d.ts +6 -0
  15. package/dist/census.d.ts.map +1 -0
  16. package/dist/census.js +41 -0
  17. package/dist/census.js.map +1 -0
  18. package/dist/config.d.ts +13 -0
  19. package/dist/config.d.ts.map +1 -0
  20. package/dist/config.js +24 -0
  21. package/dist/config.js.map +1 -0
  22. package/dist/errors.d.ts +7 -0
  23. package/dist/errors.d.ts.map +1 -0
  24. package/dist/errors.js +31 -0
  25. package/dist/errors.js.map +1 -0
  26. package/dist/fetch.d.ts +5 -0
  27. package/dist/fetch.d.ts.map +1 -0
  28. package/dist/fetch.js +61 -0
  29. package/dist/fetch.js.map +1 -0
  30. package/dist/index.d.ts +21 -0
  31. package/dist/index.d.ts.map +1 -0
  32. package/dist/index.js +15 -0
  33. package/dist/index.js.map +1 -0
  34. package/dist/objects.d.ts +12 -0
  35. package/dist/objects.d.ts.map +1 -0
  36. package/dist/objects.js +34 -0
  37. package/dist/objects.js.map +1 -0
  38. package/dist/packets.d.ts +31 -0
  39. package/dist/packets.d.ts.map +1 -0
  40. package/dist/packets.js +76 -0
  41. package/dist/packets.js.map +1 -0
  42. package/dist/paths.d.ts +2 -0
  43. package/dist/paths.d.ts.map +1 -0
  44. package/dist/paths.js +2 -0
  45. package/dist/paths.js.map +1 -0
  46. package/dist/products.d.ts +31 -0
  47. package/dist/products.d.ts.map +1 -0
  48. package/dist/products.js +30 -0
  49. package/dist/products.js.map +1 -0
  50. package/dist/types.d.ts +248 -0
  51. package/dist/types.d.ts.map +1 -0
  52. package/dist/types.js +19 -0
  53. package/dist/types.js.map +1 -0
  54. package/dist/util.d.ts +6 -0
  55. package/dist/util.d.ts.map +1 -0
  56. package/dist/util.js +28 -0
  57. package/dist/util.js.map +1 -0
  58. package/dist/working.d.ts +48 -0
  59. package/dist/working.d.ts.map +1 -0
  60. package/dist/working.js +219 -0
  61. package/dist/working.js.map +1 -0
  62. package/package.json +61 -0
package/README.md ADDED
@@ -0,0 +1,39 @@
1
+ # `@x12i/map-store-client`
2
+
3
+ Browser HTTP client for map-store `/map-store/v1`. Estate JSON is Memorix behind map-store — call map-store only (never Memorix `:5100`, Map BFF `:9222`, or SEAP `:7540` from the browser).
4
+
5
+ ## Setup
6
+
7
+ Inject how to resolve the map-store origin once at app startup:
8
+
9
+ ```ts
10
+ import { configureMapStore, stripMapStoreOrigin } from '@x12i/map-store-client';
11
+
12
+ const BLOCKED = new Set(['5100', '9222', '7540', '7541']);
13
+
14
+ configureMapStore({
15
+ resolveOrigin: () => {
16
+ const raw = (import.meta.env.VITE_MAP_STORE_URL as string | undefined)?.trim() ?? '';
17
+ if (!raw) return ''; // same-origin (dev proxy)
18
+ const origin = stripMapStoreOrigin(raw);
19
+ try {
20
+ const u = new URL(origin.includes('://') ? origin : `http://${origin}`);
21
+ if (BLOCKED.has(u.port)) {
22
+ throw new Error(`Map-store URL must not use port ${u.port}`);
23
+ }
24
+ } catch (err) {
25
+ if (err instanceof Error && err.message.includes('must not use')) throw err;
26
+ }
27
+ return origin;
28
+ },
29
+ });
30
+ ```
31
+
32
+ ## Usage
33
+
34
+ ```ts
35
+ import { fetchBootstrap, walkWorkingPages, mapFetch } from '@x12i/map-store-client';
36
+ import { asRecord } from '@x12i/map-store-client/util';
37
+ ```
38
+
39
+ Subpath exports: `/util`, `/types`, `/errors`, `/products`, `/bagCatalog`, `/attackSurfaces`, `/packets`.
@@ -0,0 +1,15 @@
1
+ import { type WorkingFetchOptions } from './working';
2
+ import type { AttackCasePacket, AttackCasePacketsIndex, AttackSurfaceDossier, AttackSurfacesIndex, EntrySurfaceLink, EpistemicBuckets, EpistemicLabel, VpnSiteDossier, VpnSitesIndex } from './types';
3
+ export declare function parseEpistemicBuckets(value: unknown): EpistemicBuckets | undefined;
4
+ export declare function defaultEpistemicChrome(published?: EpistemicLabel[] | null): EpistemicLabel[];
5
+ export declare function fetchAttackSurfacesIndex(opts?: WorkingFetchOptions): Promise<AttackSurfacesIndex>;
6
+ export declare function fetchAttackSurfaceDossier(surfaceId: string, opts?: WorkingFetchOptions): Promise<AttackSurfaceDossier | null>;
7
+ export declare function fetchVpnSitesIndex(opts?: WorkingFetchOptions): Promise<VpnSitesIndex>;
8
+ export declare function fetchVpnSiteDossier(siteId: string, opts?: WorkingFetchOptions): Promise<VpnSiteDossier | null>;
9
+ export declare function fetchAttackCasePacketsIndex(opts?: WorkingFetchOptions): Promise<AttackCasePacketsIndex>;
10
+ export declare function fetchAttackCasePacket(caseVariant: string, opts?: WorkingFetchOptions): Promise<AttackCasePacket | null>;
11
+ /** Extract optional entrySurfaces from an OSC join / context body. */
12
+ export declare function readEntrySurfaces(context: unknown): EntrySurfaceLink[] | null;
13
+ /** Map working/vpn-sites/FOO → FOO for UI routes. */
14
+ export declare function recordRefToRoute(recordRef: string | undefined): string | null;
15
+ //# sourceMappingURL=attackSurfaces.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attackSurfaces.d.ts","sourceRoot":"","sources":["../src/attackSurfaces.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,mBAAmB,EACzB,MAAM,WAAW,CAAC;AAGnB,OAAO,KAAK,EACV,gBAAgB,EAChB,sBAAsB,EACtB,oBAAoB,EACpB,mBAAmB,EAEnB,gBAAgB,EAEhB,gBAAgB,EAChB,cAAc,EACd,cAAc,EAEd,aAAa,EACd,MAAM,SAAS,CAAC;AAqBjB,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,gBAAgB,GAAG,SAAS,CASlF;AAED,wBAAgB,sBAAsB,CACpC,SAAS,CAAC,EAAE,cAAc,EAAE,GAAG,IAAI,GAClC,cAAc,EAAE,CAGlB;AA6BD,wBAAsB,wBAAwB,CAC5C,IAAI,CAAC,EAAE,mBAAmB,GACzB,OAAO,CAAC,mBAAmB,CAAC,CAiC9B;AAED,wBAAsB,yBAAyB,CAC7C,SAAS,EAAE,MAAM,EACjB,IAAI,CAAC,EAAE,mBAAmB,GACzB,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC,CAwBtC;AAED,wBAAsB,kBAAkB,CACtC,IAAI,CAAC,EAAE,mBAAmB,GACzB,OAAO,CAAC,aAAa,CAAC,CA+BxB;AAED,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,mBAAmB,GACzB,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAyBhC;AAED,wBAAsB,2BAA2B,CAC/C,IAAI,CAAC,EAAE,mBAAmB,GACzB,OAAO,CAAC,sBAAsB,CAAC,CAoCjC;AAED,wBAAsB,qBAAqB,CACzC,WAAW,EAAE,MAAM,EACnB,IAAI,CAAC,EAAE,mBAAmB,GACzB,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CA2BlC;AAED,sEAAsE;AACtE,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,gBAAgB,EAAE,GAAG,IAAI,CA2B7E;AAED,qDAAqD;AACrD,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAS7E"}
@@ -0,0 +1,287 @@
1
+ import { fetchWorkingProduct, } from './working';
2
+ import { unwrapWorkingProduct } from './bootstrap';
3
+ import { asRecord, asList, firstString } from './util';
4
+ const DEFAULT_EPISTEMIC_CHROME = [
5
+ 'REACHABLE',
6
+ 'OBSERVED',
7
+ 'POLICY_CANDIDATE',
8
+ 'NO_ALLOW',
9
+ 'UNKNOWN',
10
+ ];
11
+ function firstItem(page) {
12
+ const rows = page.items ?? page.objects ?? [];
13
+ return asRecord(rows[0]) ?? null;
14
+ }
15
+ function parseBucketItems(value) {
16
+ return asList(value)
17
+ .map((row) => asRecord(row))
18
+ .filter(Boolean);
19
+ }
20
+ export function parseEpistemicBuckets(value) {
21
+ const rec = asRecord(value);
22
+ if (!rec)
23
+ return undefined;
24
+ return {
25
+ knownCan: parseBucketItems(rec.knownCan ?? rec.known_can),
26
+ observed: parseBucketItems(rec.observed),
27
+ knownCant: parseBucketItems(rec.knownCant ?? rec.known_cant),
28
+ maybeWorry: parseBucketItems(rec.maybeWorry ?? rec.maybe_worry),
29
+ };
30
+ }
31
+ export function defaultEpistemicChrome(published) {
32
+ if (published && published.length > 0)
33
+ return published;
34
+ return DEFAULT_EPISTEMIC_CHROME;
35
+ }
36
+ function parseSurfaceIndexEntry(row) {
37
+ const rec = asRecord(row);
38
+ const surfaceId = firstString(rec?.surfaceId, rec?.id);
39
+ if (!surfaceId)
40
+ return null;
41
+ return {
42
+ surfaceId,
43
+ priority: firstString(rec?.priority),
44
+ summary: firstString(rec?.summary),
45
+ recordRef: firstString(rec?.recordRef),
46
+ };
47
+ }
48
+ function parseVpnSiteSummary(row) {
49
+ const rec = asRecord(row);
50
+ const siteId = firstString(rec?.siteId, rec?.id);
51
+ if (!siteId)
52
+ return null;
53
+ return {
54
+ siteId,
55
+ priority: firstString(rec?.priority),
56
+ peerPublicIp: firstString(rec?.peerPublicIp),
57
+ nativeAcceptDestZones: Array.isArray(rec?.nativeAcceptDestZones)
58
+ ? rec.nativeAcceptDestZones.filter((z) => typeof z === 'string')
59
+ : undefined,
60
+ recordRef: firstString(rec?.recordRef),
61
+ };
62
+ }
63
+ export async function fetchAttackSurfacesIndex(opts) {
64
+ const page = await fetchWorkingProduct('attack-surfaces', undefined, opts);
65
+ const data = asRecord(unwrapWorkingProduct(page)) ?? asRecord(page) ?? {};
66
+ let surfaces = (Array.isArray(data.surfaces) ? data.surfaces : [])
67
+ .map(parseSurfaceIndexEntry)
68
+ .filter(Boolean);
69
+ // Newer bags stamp pageVariants / advertisedRecordIds without a rich surfaces[] index.
70
+ const pageVariants = (Array.isArray(page.pageVariants)
71
+ ? page.pageVariants.filter((s) => typeof s === 'string')
72
+ : null) ??
73
+ (Array.isArray(data.pageVariants)
74
+ ? data.pageVariants.filter((s) => typeof s === 'string')
75
+ : []);
76
+ if (surfaces.length === 0 && pageVariants.length > 0) {
77
+ surfaces = pageVariants.map((surfaceId) => ({ surfaceId }));
78
+ }
79
+ const suggestedOrder = Array.isArray(data.suggestedOrder)
80
+ ? data.suggestedOrder.filter((s) => typeof s === 'string')
81
+ : surfaces.map((s) => s.surfaceId);
82
+ return {
83
+ schemaVersion: firstString(data.schemaVersion),
84
+ snapshotSetId: firstString(data.snapshotSetId, page.snapshotSetId),
85
+ analysisSnapshotId: firstString(data.analysisSnapshotId),
86
+ generatedAt: firstString(data.generatedAt),
87
+ suggestedOrder,
88
+ surfaces,
89
+ honesty: Array.isArray(data.honesty)
90
+ ? data.honesty.filter((h) => typeof h === 'string')
91
+ : undefined,
92
+ pageVariants: pageVariants.length > 0 ? pageVariants : page.pageVariants,
93
+ expectedItemCount: page.expectedItemCount ?? pageVariants.length,
94
+ };
95
+ }
96
+ export async function fetchAttackSurfaceDossier(surfaceId, opts) {
97
+ const page = await fetchWorkingProduct('attack-surfaces', surfaceId, opts);
98
+ const item = firstItem(page);
99
+ if (!item)
100
+ return null;
101
+ const chrome = Array.isArray(item.epistemicChrome)
102
+ ? item.epistemicChrome.filter((c) => typeof c === 'string')
103
+ : undefined;
104
+ return {
105
+ ...item,
106
+ surfaceId: firstString(item.surfaceId) ?? surfaceId,
107
+ summary: firstString(item.summary),
108
+ priority: firstString(item.priority),
109
+ epistemicBuckets: parseEpistemicBuckets(item.epistemicBuckets),
110
+ epistemicChrome: chrome,
111
+ honesty: Array.isArray(item.honesty)
112
+ ? item.honesty.filter((h) => typeof h === 'string')
113
+ : undefined,
114
+ destZones: Array.isArray(item.destZones)
115
+ ? item.destZones.filter((z) => typeof z === 'string')
116
+ : undefined,
117
+ instances: Array.isArray(item.instances)
118
+ ? item.instances.map(parseVpnSiteSummary).filter(Boolean)
119
+ : undefined,
120
+ };
121
+ }
122
+ export async function fetchVpnSitesIndex(opts) {
123
+ const page = await fetchWorkingProduct('vpn-sites', undefined, opts);
124
+ const data = asRecord(unwrapWorkingProduct(page)) ?? asRecord(page) ?? {};
125
+ let sites = (Array.isArray(data.sites) ? data.sites : [])
126
+ .map(parseVpnSiteSummary)
127
+ .filter(Boolean);
128
+ const pageVariants = (Array.isArray(page.pageVariants)
129
+ ? page.pageVariants.filter((s) => typeof s === 'string')
130
+ : null) ??
131
+ (Array.isArray(data.pageVariants)
132
+ ? data.pageVariants.filter((s) => typeof s === 'string')
133
+ : []);
134
+ if (sites.length === 0 && pageVariants.length > 0) {
135
+ sites = pageVariants.map((siteId) => ({ siteId }));
136
+ }
137
+ return {
138
+ schemaVersion: firstString(data.schemaVersion),
139
+ snapshotSetId: firstString(data.snapshotSetId),
140
+ analysisSnapshotId: firstString(data.analysisSnapshotId),
141
+ generatedAt: firstString(data.generatedAt),
142
+ siteCount: typeof data.siteCount === 'number'
143
+ ? data.siteCount
144
+ : sites.length || pageVariants.length,
145
+ sites,
146
+ pageVariants: pageVariants.length > 0 ? pageVariants : page.pageVariants,
147
+ honesty: Array.isArray(data.honesty)
148
+ ? data.honesty.filter((h) => typeof h === 'string')
149
+ : undefined,
150
+ };
151
+ }
152
+ export async function fetchVpnSiteDossier(siteId, opts) {
153
+ const page = await fetchWorkingProduct('vpn-sites', siteId, opts);
154
+ const item = firstItem(page);
155
+ if (!item)
156
+ return null;
157
+ return {
158
+ ...item,
159
+ siteId: firstString(item.siteId) ?? siteId,
160
+ peerPublicIp: firstString(item.peerPublicIp) ?? null,
161
+ peerUnresolved: item.peerUnresolved === true,
162
+ epistemicBuckets: parseEpistemicBuckets(item.epistemicBuckets),
163
+ honesty: Array.isArray(item.honesty)
164
+ ? item.honesty.filter((h) => typeof h === 'string')
165
+ : undefined,
166
+ remoteInnerOrigins: Array.isArray(item.remoteInnerOrigins)
167
+ ? item.remoteInnerOrigins.filter((z) => typeof z === 'string')
168
+ : undefined,
169
+ localInnerSelectors: Array.isArray(item.localInnerSelectors)
170
+ ? item.localInnerSelectors.filter((z) => typeof z === 'string')
171
+ : undefined,
172
+ nativeAcceptDestZones: Array.isArray(item.nativeAcceptDestZones)
173
+ ? item.nativeAcceptDestZones.filter((z) => typeof z === 'string')
174
+ : undefined,
175
+ deliveryNarrativeClarity: firstString(item.deliveryNarrativeClarity),
176
+ intrazoneDefault: firstString(item.intrazoneDefault),
177
+ };
178
+ }
179
+ export async function fetchAttackCasePacketsIndex(opts) {
180
+ const page = await fetchWorkingProduct('attack-case-packets', undefined, opts);
181
+ const data = asRecord(unwrapWorkingProduct(page)) ?? asRecord(page) ?? {};
182
+ let cases = asList(data.cases)
183
+ .map((row) => {
184
+ const rec = asRecord(row);
185
+ const caseId = firstString(rec?.caseId, rec?.id);
186
+ if (!caseId)
187
+ return null;
188
+ return { caseId, recordRef: firstString(rec?.recordRef) };
189
+ })
190
+ .filter(Boolean);
191
+ const pageVariants = (Array.isArray(page.pageVariants)
192
+ ? page.pageVariants.filter((s) => typeof s === 'string')
193
+ : null) ??
194
+ (Array.isArray(data.pageVariants)
195
+ ? data.pageVariants.filter((s) => typeof s === 'string')
196
+ : []);
197
+ if (cases.length === 0 && pageVariants.length > 0) {
198
+ cases = pageVariants.map((caseId) => ({ caseId }));
199
+ }
200
+ return {
201
+ schemaVersion: firstString(data.schemaVersion),
202
+ snapshotSetId: firstString(data.snapshotSetId),
203
+ analysisSnapshotId: firstString(data.analysisSnapshotId),
204
+ generatedAt: firstString(data.generatedAt),
205
+ caseCount: typeof data.caseCount === 'number'
206
+ ? data.caseCount
207
+ : cases.length || pageVariants.length,
208
+ cases,
209
+ pageVariants: pageVariants.length > 0 ? pageVariants : page.pageVariants,
210
+ honesty: Array.isArray(data.honesty)
211
+ ? data.honesty.filter((h) => typeof h === 'string')
212
+ : undefined,
213
+ };
214
+ }
215
+ export async function fetchAttackCasePacket(caseVariant, opts) {
216
+ const page = await fetchWorkingProduct('attack-case-packets', caseVariant, opts);
217
+ const item = firstItem(page);
218
+ if (!item)
219
+ return null;
220
+ const planes = asRecord(item.planes) ?? asRecord(asRecord(item.summary)?.verdict);
221
+ const bucketCounts = asRecord(item.bucketCounts) ?? asRecord(asRecord(item.summary)?.bucketCounts);
222
+ return {
223
+ ...item,
224
+ caseId: firstString(item.caseId) ?? caseVariant,
225
+ planes: planes
226
+ ? {
227
+ policy: firstString(planes.policy),
228
+ observation: firstString(planes.observation),
229
+ reachability: firstString(planes.reachability),
230
+ }
231
+ : undefined,
232
+ bucketCounts: bucketCounts
233
+ ? Object.fromEntries(Object.entries(bucketCounts).filter(([, v]) => typeof v === 'number'))
234
+ : undefined,
235
+ honesty: Array.isArray(item.honesty)
236
+ ? item.honesty.filter((h) => typeof h === 'string')
237
+ : undefined,
238
+ };
239
+ }
240
+ /** Extract optional entrySurfaces from an OSC join / context body. */
241
+ export function readEntrySurfaces(context) {
242
+ const top = asRecord(context);
243
+ if (!top)
244
+ return null;
245
+ const direct = top.entrySurfaces;
246
+ const nested = asRecord(top.context)?.entrySurfaces;
247
+ const raw = Array.isArray(direct)
248
+ ? direct
249
+ : Array.isArray(nested)
250
+ ? nested
251
+ : null;
252
+ if (!raw)
253
+ return null;
254
+ return raw
255
+ .map((row) => {
256
+ const rec = asRecord(row);
257
+ if (!rec)
258
+ return null;
259
+ return {
260
+ ...rec,
261
+ surfaceId: firstString(rec.surfaceId),
262
+ siteId: firstString(rec.siteId),
263
+ relation: firstString(rec.relation),
264
+ epistemic: firstString(rec.epistemic),
265
+ recordRefs: Array.isArray(rec.recordRefs)
266
+ ? rec.recordRefs.filter((r) => typeof r === 'string')
267
+ : undefined,
268
+ };
269
+ })
270
+ .filter(Boolean);
271
+ }
272
+ /** Map working/vpn-sites/FOO → FOO for UI routes. */
273
+ export function recordRefToRoute(recordRef) {
274
+ if (!recordRef)
275
+ return null;
276
+ const vpn = recordRef.match(/^working\/vpn-sites\/(.+)$/);
277
+ if (vpn)
278
+ return `/vpn-sites/${encodeURIComponent(vpn[1])}`;
279
+ const surf = recordRef.match(/^working\/attack-surfaces\/(.+)$/);
280
+ if (surf)
281
+ return `/attack-surfaces/${encodeURIComponent(surf[1])}`;
282
+ const cse = recordRef.match(/^working\/attack-case-packets\/(.+)$/);
283
+ if (cse)
284
+ return `/attack-case-packets/${encodeURIComponent(cse[1])}`;
285
+ return null;
286
+ }
287
+ //# sourceMappingURL=attackSurfaces.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attackSurfaces.js","sourceRoot":"","sources":["../src/attackSurfaces.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * BAGS_ONLY serving catalog — Memorix OT/CT alignment for this UI.
3
+ *
4
+ * Memorix addressing (station / BFF only):
5
+ * objectType = security-map
6
+ * contentType = {product}
7
+ * id = working/{product} | working/{product}/{variant}
8
+ *
9
+ * Browser path (this app):
10
+ * GET /map-store/v1/working/{product}?variant={variant}
11
+ * map-store injects org + agents + x-memorix-caller: map-store.
12
+ *
13
+ * Do not fetch subject OTs (endpoint-asset / finding / …) until Synapix signals
14
+ * SUBJECT_PARITY_TEST_READY. Do not call Memorix :5100 from the browser.
15
+ */
16
+ export declare const SERVING_OBJECT_TYPE: "security-map";
17
+ export type BagProductKind = 'pointer' | 'index' | 'paged' | 'summary' | 'live' | 'query-family';
18
+ export type BagProductDef = {
19
+ /** Memorix contentType and map-store working product id */
20
+ contentType: string;
21
+ label: string;
22
+ note: string;
23
+ kind: BagProductKind;
24
+ /**
25
+ * When the bare `working/{product}` index is incomplete/missing, start walks
26
+ * at this family variant (Memorix id working/{product}/{entryVariant}).
27
+ */
28
+ entryVariant?: string;
29
+ /** Prefer filtering loaded rows by objectId when present */
30
+ objectScoped?: boolean;
31
+ /** Live overlay — match liveGenerationId; never rewrite stable verdicts */
32
+ liveOverlay?: boolean;
33
+ /** May be absent / incomplete-publication on a given land */
34
+ mayBeMissing?: boolean;
35
+ /** Already walked elsewhere (inventory / ReportDeep) */
36
+ alreadyLoaded?: boolean;
37
+ /**
38
+ * Eager session pull:
39
+ * - index: fetch index/entry only
40
+ * - walk: fetch index + every pageVariants[] page
41
+ * - skip: browse-only / live-gated
42
+ */
43
+ eager: 'index' | 'walk' | 'skip';
44
+ };
45
+ /**
46
+ * CTs that must not be requested for OT=security-map (Memorix 400).
47
+ * Kept here so UI never offers them as working products.
48
+ */
49
+ export declare const DISALLOWED_SECURITY_MAP_CONTENT_TYPES: readonly ["summaries", "established-narrative-overlay"];
50
+ /**
51
+ * Canonical bag products for CLIENT-PULL / Tier-0 consume.
52
+ * `eager: walk` is reserved for small/critical sets; large page walks stay
53
+ * on-demand or alreadyLoaded to avoid slamming the station on every refresh.
54
+ */
55
+ export declare const BAG_PRODUCTS: readonly BagProductDef[];
56
+ export declare function bagProduct(contentType: string): BagProductDef | undefined;
57
+ export declare function isDisallowedSecurityMapContentType(contentType: string): boolean;
58
+ /** Memorix record id for a bag product (+ optional variant). */
59
+ export declare function memorixRecordId(contentType: string, variant?: string): string;
60
+ /** map-store path for a bag product (+ optional variant query). */
61
+ export declare function mapStoreWorkingPath(contentType: string, variant?: string): string;
62
+ //# sourceMappingURL=bagCatalog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bagCatalog.d.ts","sourceRoot":"","sources":["../src/bagCatalog.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,eAAO,MAAM,mBAAmB,EAAG,cAAuB,CAAC;AAE3D,MAAM,MAAM,cAAc,GACtB,SAAS,GACT,OAAO,GACP,OAAO,GACP,SAAS,GACT,MAAM,GACN,cAAc,CAAC;AAEnB,MAAM,MAAM,aAAa,GAAG;IAC1B,2DAA2D;IAC3D,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,cAAc,CAAC;IACrB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,4DAA4D;IAC5D,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,2EAA2E;IAC3E,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,6DAA6D;IAC7D,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,wDAAwD;IACxD,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;;;OAKG;IACH,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;CAClC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,qCAAqC,yDAGxC,CAAC;AAEX;;;;GAIG;AACH,eAAO,MAAM,YAAY,EAAE,SAAS,aAAa,EAqThD,CAAC;AAIF,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAEzE;AAED,wBAAgB,kCAAkC,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAI/E;AAED,gEAAgE;AAChE,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAE7E;AAED,mEAAmE;AACnE,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAGjF"}