@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.
- package/README.md +39 -0
- package/dist/attackSurfaces.d.ts +15 -0
- package/dist/attackSurfaces.d.ts.map +1 -0
- package/dist/attackSurfaces.js +287 -0
- package/dist/attackSurfaces.js.map +1 -0
- package/dist/bagCatalog.d.ts +62 -0
- package/dist/bagCatalog.d.ts.map +1 -0
- package/dist/bagCatalog.js +356 -0
- package/dist/bagCatalog.js.map +1 -0
- package/dist/bootstrap.d.ts +16 -0
- package/dist/bootstrap.d.ts.map +1 -0
- package/dist/bootstrap.js +98 -0
- package/dist/bootstrap.js.map +1 -0
- package/dist/census.d.ts +6 -0
- package/dist/census.d.ts.map +1 -0
- package/dist/census.js +41 -0
- package/dist/census.js.map +1 -0
- package/dist/config.d.ts +13 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +24 -0
- package/dist/config.js.map +1 -0
- package/dist/errors.d.ts +7 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +31 -0
- package/dist/errors.js.map +1 -0
- package/dist/fetch.d.ts +5 -0
- package/dist/fetch.d.ts.map +1 -0
- package/dist/fetch.js +61 -0
- package/dist/fetch.js.map +1 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/dist/objects.d.ts +12 -0
- package/dist/objects.d.ts.map +1 -0
- package/dist/objects.js +34 -0
- package/dist/objects.js.map +1 -0
- package/dist/packets.d.ts +31 -0
- package/dist/packets.d.ts.map +1 -0
- package/dist/packets.js +76 -0
- package/dist/packets.js.map +1 -0
- package/dist/paths.d.ts +2 -0
- package/dist/paths.d.ts.map +1 -0
- package/dist/paths.js +2 -0
- package/dist/paths.js.map +1 -0
- package/dist/products.d.ts +31 -0
- package/dist/products.d.ts.map +1 -0
- package/dist/products.js +30 -0
- package/dist/products.js.map +1 -0
- package/dist/types.d.ts +248 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +19 -0
- package/dist/types.js.map +1 -0
- package/dist/util.d.ts +6 -0
- package/dist/util.d.ts.map +1 -0
- package/dist/util.js +28 -0
- package/dist/util.js.map +1 -0
- package/dist/working.d.ts +48 -0
- package/dist/working.d.ts.map +1 -0
- package/dist/working.js +219 -0
- package/dist/working.js.map +1 -0
- package/package.json +61 -0
|
@@ -0,0 +1,356 @@
|
|
|
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 const SERVING_OBJECT_TYPE = 'security-map';
|
|
17
|
+
/**
|
|
18
|
+
* CTs that must not be requested for OT=security-map (Memorix 400).
|
|
19
|
+
* Kept here so UI never offers them as working products.
|
|
20
|
+
*/
|
|
21
|
+
export const DISALLOWED_SECURITY_MAP_CONTENT_TYPES = [
|
|
22
|
+
'summaries',
|
|
23
|
+
'established-narrative-overlay',
|
|
24
|
+
];
|
|
25
|
+
/**
|
|
26
|
+
* Canonical bag products for CLIENT-PULL / Tier-0 consume.
|
|
27
|
+
* `eager: walk` is reserved for small/critical sets; large page walks stay
|
|
28
|
+
* on-demand or alreadyLoaded to avoid slamming the station on every refresh.
|
|
29
|
+
*/
|
|
30
|
+
export const BAG_PRODUCTS = [
|
|
31
|
+
{
|
|
32
|
+
contentType: 'publication-manifest',
|
|
33
|
+
label: 'Publication manifest',
|
|
34
|
+
note: 'Expected product set / hashes for this covering pin',
|
|
35
|
+
kind: 'summary',
|
|
36
|
+
eager: 'index',
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
contentType: 'estate-object-inventory',
|
|
40
|
+
label: 'Estate object inventory',
|
|
41
|
+
note: 'Already walked for Entities / Findings — index alone is incomplete',
|
|
42
|
+
kind: 'paged',
|
|
43
|
+
objectScoped: true,
|
|
44
|
+
alreadyLoaded: true,
|
|
45
|
+
eager: 'skip',
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
contentType: 'dashboard-stats',
|
|
49
|
+
label: 'Dashboard stats',
|
|
50
|
+
note: 'Published dashboard rollup — empty-from-frozen-bag is honest empty',
|
|
51
|
+
kind: 'summary',
|
|
52
|
+
eager: 'index',
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
contentType: 'source-capability',
|
|
56
|
+
label: 'Source capability',
|
|
57
|
+
note: 'Honest source limitations (SAES / SOES / SEAP / NRTS / OM)',
|
|
58
|
+
kind: 'summary',
|
|
59
|
+
eager: 'index',
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
contentType: 'reachability-claims-summary',
|
|
63
|
+
label: 'Reachability claims summary',
|
|
64
|
+
note: 'Tier-0 reachability claims rollup — candidate ≠ REACHABLE',
|
|
65
|
+
kind: 'summary',
|
|
66
|
+
eager: 'index',
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
contentType: 'known-unknowns-summary',
|
|
70
|
+
label: 'Known unknowns summary',
|
|
71
|
+
note: 'Tier-0 unknowns census — prefer investigation-unknown for SoT rows',
|
|
72
|
+
kind: 'summary',
|
|
73
|
+
eager: 'index',
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
contentType: 'decision-projection',
|
|
77
|
+
label: 'Decision projection',
|
|
78
|
+
note: 'Tier-0 three-state projection + estate summary — walk pages on demand',
|
|
79
|
+
kind: 'paged',
|
|
80
|
+
eager: 'index',
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
contentType: 'open-questions',
|
|
84
|
+
label: 'Open questions',
|
|
85
|
+
note: 'Tier-0 grouped unknowns from the same projection',
|
|
86
|
+
kind: 'paged',
|
|
87
|
+
eager: 'walk',
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
contentType: 'verification-work',
|
|
91
|
+
label: 'Verification work',
|
|
92
|
+
note: 'Tier-0 verification packets — priority preserved',
|
|
93
|
+
kind: 'paged',
|
|
94
|
+
eager: 'index',
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
contentType: 'prospective-capability',
|
|
98
|
+
label: 'Prospective capability',
|
|
99
|
+
note: 'Authority plane under assumptions — activityClaim NONE; not “will happen”',
|
|
100
|
+
kind: 'paged',
|
|
101
|
+
mayBeMissing: true,
|
|
102
|
+
eager: 'index',
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
contentType: 'attack-path-assessments',
|
|
106
|
+
label: 'Attack-path assessments',
|
|
107
|
+
note: 'Path candidates — hypothesized ≠ REACHABLE; walk pages on demand',
|
|
108
|
+
kind: 'paged',
|
|
109
|
+
eager: 'index',
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
contentType: 'candidate-reachability',
|
|
113
|
+
label: 'Candidate reachability',
|
|
114
|
+
note: 'Already deep-walked for hypothesized paths — not NRTS REACHABLE',
|
|
115
|
+
kind: 'paged',
|
|
116
|
+
alreadyLoaded: true,
|
|
117
|
+
eager: 'skip',
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
contentType: 'graph',
|
|
121
|
+
label: 'Graph (network family)',
|
|
122
|
+
note: 'Bare working/graph is not a declared route — entry variant network + all pages',
|
|
123
|
+
kind: 'query-family',
|
|
124
|
+
entryVariant: 'network',
|
|
125
|
+
eager: 'walk',
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
contentType: 'findings-query',
|
|
129
|
+
label: 'Findings query (open-vuln)',
|
|
130
|
+
note: 'Bare findings-query index may be incomplete — entry open-vuln; may be truncated',
|
|
131
|
+
kind: 'query-family',
|
|
132
|
+
entryVariant: 'open-vuln',
|
|
133
|
+
mayBeMissing: true,
|
|
134
|
+
eager: 'index',
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
contentType: 'alerts-query',
|
|
138
|
+
label: 'Alerts query',
|
|
139
|
+
note: 'May be incomplete-publication on this land — use inventory alerts until published',
|
|
140
|
+
kind: 'query-family',
|
|
141
|
+
mayBeMissing: true,
|
|
142
|
+
eager: 'skip',
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
contentType: 'object-pre-ai-context',
|
|
146
|
+
label: 'Object pre-AI context',
|
|
147
|
+
note: 'Already deep-walked for planes / consequences',
|
|
148
|
+
kind: 'paged',
|
|
149
|
+
objectScoped: true,
|
|
150
|
+
alreadyLoaded: true,
|
|
151
|
+
eager: 'skip',
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
contentType: 'object-exploitability-assessments',
|
|
155
|
+
label: 'Object exploitability assessments',
|
|
156
|
+
note: 'Already deep-walked for EPA — Map localVerdict POSSIBLE is not EPA',
|
|
157
|
+
kind: 'paged',
|
|
158
|
+
objectScoped: true,
|
|
159
|
+
alreadyLoaded: true,
|
|
160
|
+
eager: 'skip',
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
contentType: 'object-classification-census',
|
|
164
|
+
label: 'Object classification census',
|
|
165
|
+
note: 'Plane-mix census companion to bootstrap objectCoverage',
|
|
166
|
+
kind: 'paged',
|
|
167
|
+
eager: 'walk',
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
contentType: 'object-context-index',
|
|
171
|
+
label: 'Object context index',
|
|
172
|
+
note: 'Companion to estate inventory — index alone is incomplete; walk pages',
|
|
173
|
+
kind: 'paged',
|
|
174
|
+
eager: 'index',
|
|
175
|
+
},
|
|
176
|
+
{
|
|
177
|
+
contentType: 'object-security-context',
|
|
178
|
+
label: 'Object security-context (working pages)',
|
|
179
|
+
note: 'Estate page-walk of OSC rows — prefer /objects/{id}/security-context for one object',
|
|
180
|
+
kind: 'paged',
|
|
181
|
+
objectScoped: true,
|
|
182
|
+
eager: 'index',
|
|
183
|
+
},
|
|
184
|
+
{
|
|
185
|
+
contentType: 'object-agent-context',
|
|
186
|
+
label: 'Object agent-context',
|
|
187
|
+
note: 'processingDiscovery READY / READY_WITH_GAPS / BLOCKED / NOT_APPLICABLE when published',
|
|
188
|
+
kind: 'paged',
|
|
189
|
+
objectScoped: true,
|
|
190
|
+
eager: 'index',
|
|
191
|
+
},
|
|
192
|
+
{
|
|
193
|
+
contentType: 'object-field-completeness',
|
|
194
|
+
label: 'Object field-completeness',
|
|
195
|
+
note: 'Field census only — not a safety verdict',
|
|
196
|
+
kind: 'paged',
|
|
197
|
+
objectScoped: true,
|
|
198
|
+
eager: 'index',
|
|
199
|
+
},
|
|
200
|
+
{
|
|
201
|
+
contentType: 'object-reachability-claims',
|
|
202
|
+
label: 'Object reachability-claims',
|
|
203
|
+
note: 'Published reachability claim rows',
|
|
204
|
+
kind: 'paged',
|
|
205
|
+
objectScoped: true,
|
|
206
|
+
eager: 'index',
|
|
207
|
+
},
|
|
208
|
+
{
|
|
209
|
+
contentType: 'object-reachability-paths',
|
|
210
|
+
label: 'Object reachability-paths',
|
|
211
|
+
note: 'Published reachability path rows (not the same as candidate-reachability)',
|
|
212
|
+
kind: 'paged',
|
|
213
|
+
objectScoped: true,
|
|
214
|
+
eager: 'index',
|
|
215
|
+
},
|
|
216
|
+
{
|
|
217
|
+
contentType: 'object-classification',
|
|
218
|
+
label: 'Object classification (working)',
|
|
219
|
+
note: 'May be missing/incomplete on current bags — shown honestly if 503',
|
|
220
|
+
kind: 'paged',
|
|
221
|
+
objectScoped: true,
|
|
222
|
+
mayBeMissing: true,
|
|
223
|
+
eager: 'index',
|
|
224
|
+
},
|
|
225
|
+
{
|
|
226
|
+
contentType: 'object-evidence-lineage',
|
|
227
|
+
label: 'Object evidence lineage',
|
|
228
|
+
note: 'Object-scoped lineage pages (also on object detail More Actions)',
|
|
229
|
+
kind: 'paged',
|
|
230
|
+
objectScoped: true,
|
|
231
|
+
eager: 'index',
|
|
232
|
+
},
|
|
233
|
+
{
|
|
234
|
+
contentType: 'evidence-lineage',
|
|
235
|
+
label: 'Estate evidence-lineage',
|
|
236
|
+
note: 'Estate rollup lineage product (not object-scoped)',
|
|
237
|
+
kind: 'summary',
|
|
238
|
+
eager: 'index',
|
|
239
|
+
},
|
|
240
|
+
{
|
|
241
|
+
contentType: 'investigation-context',
|
|
242
|
+
label: 'Investigation context',
|
|
243
|
+
note: 'Conditional possible-attack story roots — walk reconstruction.depRefs; not “attack happened”',
|
|
244
|
+
kind: 'paged',
|
|
245
|
+
eager: 'index',
|
|
246
|
+
},
|
|
247
|
+
{
|
|
248
|
+
contentType: 'investigation-assessment',
|
|
249
|
+
label: 'Investigation assessment',
|
|
250
|
+
note: 'Prefer this assessment plane over story prose reinterpretation',
|
|
251
|
+
kind: 'paged',
|
|
252
|
+
mayBeMissing: true,
|
|
253
|
+
eager: 'index',
|
|
254
|
+
},
|
|
255
|
+
{
|
|
256
|
+
contentType: 'investigation-unknown',
|
|
257
|
+
label: 'Investigation unknown',
|
|
258
|
+
note: 'Authoritative unknowns set for this pair',
|
|
259
|
+
kind: 'paged',
|
|
260
|
+
eager: 'index',
|
|
261
|
+
},
|
|
262
|
+
{
|
|
263
|
+
contentType: 'known-unknowns',
|
|
264
|
+
label: 'Known unknowns',
|
|
265
|
+
note: 'When sourceOfTruth is investigation-unknown, same set — not a second truth',
|
|
266
|
+
kind: 'paged',
|
|
267
|
+
eager: 'index',
|
|
268
|
+
},
|
|
269
|
+
{
|
|
270
|
+
contentType: 'investigation-membership',
|
|
271
|
+
label: 'Investigation membership',
|
|
272
|
+
note: 'Membership cursor — if expiresAt passed, reload full definition',
|
|
273
|
+
kind: 'paged',
|
|
274
|
+
mayBeMissing: true,
|
|
275
|
+
eager: 'index',
|
|
276
|
+
},
|
|
277
|
+
{
|
|
278
|
+
contentType: 'security-investigation-packet',
|
|
279
|
+
label: 'Security investigation packet',
|
|
280
|
+
note: 'Index + bodies — scenarioKind=possible-attack is a conditional seed, not activity claim',
|
|
281
|
+
kind: 'paged',
|
|
282
|
+
mayBeMissing: true,
|
|
283
|
+
eager: 'walk',
|
|
284
|
+
},
|
|
285
|
+
{
|
|
286
|
+
contentType: 'attack-surfaces',
|
|
287
|
+
label: 'Attack surfaces',
|
|
288
|
+
note: 'Entry-class dossiers — POLICY_CANDIDATE ≠ REACHABLE; prefer /attack-surfaces nav',
|
|
289
|
+
kind: 'paged',
|
|
290
|
+
eager: 'walk',
|
|
291
|
+
},
|
|
292
|
+
{
|
|
293
|
+
contentType: 'vpn-sites',
|
|
294
|
+
label: 'VPN sites',
|
|
295
|
+
note: 'Per-tunnel footholds — peer ≠ selectors ≠ endpoints; prefer /vpn-sites/:id',
|
|
296
|
+
kind: 'paged',
|
|
297
|
+
eager: 'walk',
|
|
298
|
+
},
|
|
299
|
+
{
|
|
300
|
+
contentType: 'attack-case-packets',
|
|
301
|
+
label: 'Attack case packets',
|
|
302
|
+
note: 'Bounded path evidence — keep policy / observation / reachability separate',
|
|
303
|
+
kind: 'paged',
|
|
304
|
+
eager: 'walk',
|
|
305
|
+
},
|
|
306
|
+
{
|
|
307
|
+
contentType: 'breach-method-catalogue',
|
|
308
|
+
label: 'Breach-method catalogue',
|
|
309
|
+
note: 'Stage 10 method catalogue view',
|
|
310
|
+
kind: 'paged',
|
|
311
|
+
mayBeMissing: true,
|
|
312
|
+
eager: 'walk',
|
|
313
|
+
},
|
|
314
|
+
{
|
|
315
|
+
contentType: 'site-method-assessment',
|
|
316
|
+
label: 'Site method assessment',
|
|
317
|
+
note: 'Stage 10 site-method assessment view',
|
|
318
|
+
kind: 'paged',
|
|
319
|
+
mayBeMissing: true,
|
|
320
|
+
eager: 'walk',
|
|
321
|
+
},
|
|
322
|
+
{
|
|
323
|
+
contentType: 'object-live-context',
|
|
324
|
+
label: 'Object live-context',
|
|
325
|
+
note: 'Live overlay per object — cite liveGenerationId only; observed ≠ REACHABLE',
|
|
326
|
+
kind: 'live',
|
|
327
|
+
objectScoped: true,
|
|
328
|
+
liveOverlay: true,
|
|
329
|
+
eager: 'skip',
|
|
330
|
+
},
|
|
331
|
+
{
|
|
332
|
+
contentType: 'live-observation-edges',
|
|
333
|
+
label: 'Live observation edges',
|
|
334
|
+
note: 'Full edge page walk — overlay only; observed ≠ REACHABLE; large',
|
|
335
|
+
kind: 'live',
|
|
336
|
+
liveOverlay: true,
|
|
337
|
+
eager: 'skip',
|
|
338
|
+
},
|
|
339
|
+
];
|
|
340
|
+
const BY_CT = new Map(BAG_PRODUCTS.map((p) => [p.contentType, p]));
|
|
341
|
+
export function bagProduct(contentType) {
|
|
342
|
+
return BY_CT.get(contentType);
|
|
343
|
+
}
|
|
344
|
+
export function isDisallowedSecurityMapContentType(contentType) {
|
|
345
|
+
return DISALLOWED_SECURITY_MAP_CONTENT_TYPES.includes(contentType);
|
|
346
|
+
}
|
|
347
|
+
/** Memorix record id for a bag product (+ optional variant). */
|
|
348
|
+
export function memorixRecordId(contentType, variant) {
|
|
349
|
+
return variant ? `working/${contentType}/${variant}` : `working/${contentType}`;
|
|
350
|
+
}
|
|
351
|
+
/** map-store path for a bag product (+ optional variant query). */
|
|
352
|
+
export function mapStoreWorkingPath(contentType, variant) {
|
|
353
|
+
const q = variant ? `?variant=${encodeURIComponent(variant)}` : '';
|
|
354
|
+
return `/working/${encodeURIComponent(contentType)}${q}`;
|
|
355
|
+
}
|
|
356
|
+
//# sourceMappingURL=bagCatalog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bagCatalog.js","sourceRoot":"","sources":["../src/bagCatalog.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type MapFetchOptions } from './fetch';
|
|
2
|
+
import type { CoveringPair, LiveAvailability, LiveBootstrap, MapStoreHealth, SessionBootstrap } from './types';
|
|
3
|
+
export declare function fetchHealth(opts?: MapFetchOptions): Promise<MapStoreHealth>;
|
|
4
|
+
/**
|
|
5
|
+
* Station bootstrap is an envelope: top-level pins + nested `bootstrap` body.
|
|
6
|
+
* Never treat missing/null liveAvailability as healthy.
|
|
7
|
+
*/
|
|
8
|
+
export declare function flattenBootstrap(payload: unknown): SessionBootstrap;
|
|
9
|
+
export declare function fetchBootstrap(opts?: MapFetchOptions): Promise<SessionBootstrap>;
|
|
10
|
+
export declare function unwrapWorkingProduct<T = unknown>(payload: unknown): T;
|
|
11
|
+
export declare function normalizeLiveBootstrap(payload: unknown): LiveBootstrap;
|
|
12
|
+
export declare function fetchLiveBootstrap(opts?: MapFetchOptions & {
|
|
13
|
+
expectedPair?: CoveringPair;
|
|
14
|
+
}): Promise<LiveBootstrap>;
|
|
15
|
+
export declare function isLiveHealthy(availability: LiveAvailability | null | undefined): boolean;
|
|
16
|
+
//# sourceMappingURL=bootstrap.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,eAAe,EAAE,MAAM,SAAS,CAAC;AAEzD,OAAO,KAAK,EACV,YAAY,EACZ,gBAAgB,EAChB,aAAa,EACb,cAAc,EAEd,gBAAgB,EAEjB,MAAM,SAAS,CAAC;AAIjB,wBAAsB,WAAW,CAAC,IAAI,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,CAajF;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,gBAAgB,CA2CnE;AAED,wBAAsB,cAAc,CAClC,IAAI,CAAC,EAAE,eAAe,GACrB,OAAO,CAAC,gBAAgB,CAAC,CAG3B;AAED,wBAAgB,oBAAoB,CAAC,CAAC,GAAG,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,CAAC,CAKrE;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,aAAa,CActE;AAED,wBAAsB,kBAAkB,CACtC,IAAI,CAAC,EAAE,eAAe,GAAG;IAAE,YAAY,CAAC,EAAE,YAAY,CAAA;CAAE,GACvD,OAAO,CAAC,aAAa,CAAC,CA0BxB;AAED,wBAAgB,aAAa,CAC3B,YAAY,EAAE,gBAAgB,GAAG,IAAI,GAAG,SAAS,GAChD,OAAO,CAET"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { mapFetch } from './fetch';
|
|
2
|
+
import { asRecord, firstString } from './util';
|
|
3
|
+
import { MapStoreError } from './types';
|
|
4
|
+
import { parseTypedRecordCensus } from './census';
|
|
5
|
+
export async function fetchHealth(opts) {
|
|
6
|
+
const body = await mapFetch('/health', opts);
|
|
7
|
+
return {
|
|
8
|
+
ok: body.ok === true,
|
|
9
|
+
service: firstString(body.service),
|
|
10
|
+
memorixReachable: body.memorixReachable === true,
|
|
11
|
+
estateReady: body.estateReady === true,
|
|
12
|
+
memorixOrgId: firstString(body.memorixOrgId),
|
|
13
|
+
memorixUrl: firstString(body.memorixUrl),
|
|
14
|
+
userMessage: firstString(body.userMessage) ?? null,
|
|
15
|
+
stationOk: body.stationOk === true,
|
|
16
|
+
estateFromMemorixOnly: body.estateFromMemorixOnly === true,
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Station bootstrap is an envelope: top-level pins + nested `bootstrap` body.
|
|
21
|
+
* Never treat missing/null liveAvailability as healthy.
|
|
22
|
+
*/
|
|
23
|
+
export function flattenBootstrap(payload) {
|
|
24
|
+
const top = asRecord(payload) ?? {};
|
|
25
|
+
const nested = asRecord(top.bootstrap) ?? {};
|
|
26
|
+
const snapshotSetId = firstString(top.snapshotSetId, nested.snapshotSetId, asRecord(nested.snapshotSet)?.snapshotSetId) ?? '';
|
|
27
|
+
const analysisSnapshotId = firstString(top.analysisSnapshotId, nested.analysisSnapshotId);
|
|
28
|
+
const liveGenerationId = firstString(top.liveGenerationId, nested.liveGenerationId) ?? null;
|
|
29
|
+
const liveRaw = firstString(top.liveAvailability, nested.liveAvailability);
|
|
30
|
+
const liveAvailability = liveRaw ?? null;
|
|
31
|
+
const producer = asRecord(nested.producerIdentity);
|
|
32
|
+
const coverage = asRecord(nested.assessmentCoverage);
|
|
33
|
+
const typedCensus = parseTypedRecordCensus({ assessmentCoverage: coverage }) ??
|
|
34
|
+
parseTypedRecordCensus(nested) ??
|
|
35
|
+
parseTypedRecordCensus(top);
|
|
36
|
+
const estate = asRecord(nested.estate);
|
|
37
|
+
return {
|
|
38
|
+
snapshotSetId,
|
|
39
|
+
analysisSnapshotId,
|
|
40
|
+
liveGenerationId,
|
|
41
|
+
liveAvailability,
|
|
42
|
+
liveUnavailableReason: firstString(top.liveUnavailableReason, nested.liveUnavailableReason),
|
|
43
|
+
typedCensus,
|
|
44
|
+
producerIdentity: producer,
|
|
45
|
+
assessmentCoverage: coverage,
|
|
46
|
+
estateReady: estate?.ready === true || coverage?.estateReady === true,
|
|
47
|
+
bootstrap: nested,
|
|
48
|
+
liveBootstrapInline: top.liveBootstrap ?? null,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
export async function fetchBootstrap(opts) {
|
|
52
|
+
const payload = await mapFetch('/bootstrap', opts);
|
|
53
|
+
return flattenBootstrap(payload);
|
|
54
|
+
}
|
|
55
|
+
export function unwrapWorkingProduct(payload) {
|
|
56
|
+
const rec = asRecord(payload);
|
|
57
|
+
if (!rec)
|
|
58
|
+
return payload;
|
|
59
|
+
if ('data' in rec && rec.data !== undefined)
|
|
60
|
+
return rec.data;
|
|
61
|
+
return payload;
|
|
62
|
+
}
|
|
63
|
+
export function normalizeLiveBootstrap(payload) {
|
|
64
|
+
const data = asRecord(unwrapWorkingProduct(payload)) ?? {};
|
|
65
|
+
return {
|
|
66
|
+
...data,
|
|
67
|
+
liveGenerationId: firstString(data.liveGenerationId),
|
|
68
|
+
relatedSnapshotSetId: firstString(data.relatedSnapshotSetId),
|
|
69
|
+
relatedAnalysisSnapshotId: firstString(data.relatedAnalysisSnapshotId),
|
|
70
|
+
admittedToServingAssessment: data.admittedToServingAssessment === true,
|
|
71
|
+
authority: firstString(data.authority),
|
|
72
|
+
disposition: firstString(data.disposition),
|
|
73
|
+
omStatus: asRecord(data.omStatus) ?? undefined,
|
|
74
|
+
observationUseLedger: asRecord(data.observationUseLedger) ?? undefined,
|
|
75
|
+
edgeAccounting: asRecord(data.edgeAccounting) ?? undefined,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
export async function fetchLiveBootstrap(opts) {
|
|
79
|
+
const payload = await mapFetch('/working/live-bootstrap', opts);
|
|
80
|
+
const live = normalizeLiveBootstrap(payload);
|
|
81
|
+
const expected = opts?.expectedPair;
|
|
82
|
+
if (expected?.snapshotSetId) {
|
|
83
|
+
if (live.relatedSnapshotSetId &&
|
|
84
|
+
live.relatedSnapshotSetId !== expected.snapshotSetId) {
|
|
85
|
+
throw new MapStoreError(`Live overlay relatedSnapshotSetId ${live.relatedSnapshotSetId} disagrees with covering pair ${expected.snapshotSetId}.`, { code: 'mixed-generation', status: 409 });
|
|
86
|
+
}
|
|
87
|
+
if (expected.analysisSnapshotId &&
|
|
88
|
+
live.relatedAnalysisSnapshotId &&
|
|
89
|
+
live.relatedAnalysisSnapshotId !== expected.analysisSnapshotId) {
|
|
90
|
+
throw new MapStoreError(`Live overlay relatedAnalysisSnapshotId ${live.relatedAnalysisSnapshotId} disagrees with covering pair ${expected.analysisSnapshotId}.`, { code: 'mixed-generation', status: 409 });
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return live;
|
|
94
|
+
}
|
|
95
|
+
export function isLiveHealthy(availability) {
|
|
96
|
+
return availability === 'available';
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=bootstrap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"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"}
|
package/dist/census.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"census.d.ts","sourceRoot":"","sources":["../src/census.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAEjD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,OAAO,GAAG,iBAAiB,GAAG,IAAI,CAmChF"}
|
package/dist/census.js
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Typed census parsing for bootstrap / assessmentCoverage payloads.
|
|
3
|
+
*/
|
|
4
|
+
import { asRecord, nonNegInt } from './util';
|
|
5
|
+
export function parseTypedRecordCensus(source) {
|
|
6
|
+
const rec = asRecord(source);
|
|
7
|
+
if (!rec)
|
|
8
|
+
return null;
|
|
9
|
+
const coverage = asRecord(rec.assessmentCoverage) ?? asRecord(asRecord(rec.data)?.assessmentCoverage);
|
|
10
|
+
const raw = asRecord(coverage?.typedRecordCensus) ?? asRecord(rec.typedRecordCensus);
|
|
11
|
+
if (!raw)
|
|
12
|
+
return null;
|
|
13
|
+
const confirmedAssets = nonNegInt(raw.confirmedAssets);
|
|
14
|
+
const unresolvedSubjects = nonNegInt(raw.unresolvedSubjects);
|
|
15
|
+
const findingsAndAlerts = nonNegInt(raw.findingsAndAlerts);
|
|
16
|
+
const findings = nonNegInt(raw.findings);
|
|
17
|
+
const alerts = nonNegInt(raw.alerts);
|
|
18
|
+
const aliases = nonNegInt(raw.relationshipOnlyAliases);
|
|
19
|
+
const combined = findingsAndAlerts ??
|
|
20
|
+
(findings != null || alerts != null ? (findings ?? 0) + (alerts ?? 0) : undefined);
|
|
21
|
+
if (confirmedAssets == null && unresolvedSubjects == null && combined == null) {
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
const census = {
|
|
25
|
+
confirmedAssets: confirmedAssets ?? 0,
|
|
26
|
+
unresolvedSubjects: unresolvedSubjects ?? 0,
|
|
27
|
+
findingsAndAlerts: combined ?? 0,
|
|
28
|
+
};
|
|
29
|
+
if (findings != null)
|
|
30
|
+
census.findings = findings;
|
|
31
|
+
if (alerts != null)
|
|
32
|
+
census.alerts = alerts;
|
|
33
|
+
if (aliases != null)
|
|
34
|
+
census.relationshipOnlyAliases = aliases;
|
|
35
|
+
const total = nonNegInt(raw.totalPublishedKnowledge);
|
|
36
|
+
census.totalPublishedKnowledge =
|
|
37
|
+
total ??
|
|
38
|
+
census.confirmedAssets + census.unresolvedSubjects + census.findingsAndAlerts;
|
|
39
|
+
return census;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=census.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"census.js","sourceRoot":"","sources":["../src/census.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAG7C,MAAM,UAAU,sBAAsB,CAAC,MAAe;IACpD,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC7B,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,MAAM,QAAQ,GACZ,QAAQ,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,kBAAkB,CAAC,CAAC;IACvF,MAAM,GAAG,GAAG,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IACrF,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IAEtB,MAAM,eAAe,GAAG,SAAS,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IACvD,MAAM,kBAAkB,GAAG,SAAS,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IAC7D,MAAM,iBAAiB,GAAG,SAAS,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAC3D,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACrC,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;IACvD,MAAM,QAAQ,GACZ,iBAAiB;QACjB,CAAC,QAAQ,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAErF,IAAI,eAAe,IAAI,IAAI,IAAI,kBAAkB,IAAI,IAAI,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;QAC9E,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,MAAM,GAAsB;QAChC,eAAe,EAAE,eAAe,IAAI,CAAC;QACrC,kBAAkB,EAAE,kBAAkB,IAAI,CAAC;QAC3C,iBAAiB,EAAE,QAAQ,IAAI,CAAC;KACjC,CAAC;IACF,IAAI,QAAQ,IAAI,IAAI;QAAE,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;IACjD,IAAI,MAAM,IAAI,IAAI;QAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;IAC3C,IAAI,OAAO,IAAI,IAAI;QAAE,MAAM,CAAC,uBAAuB,GAAG,OAAO,CAAC;IAC9D,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;IACrD,MAAM,CAAC,uBAAuB;QAC5B,KAAK;YACL,MAAM,CAAC,eAAe,GAAG,MAAM,CAAC,kBAAkB,GAAG,MAAM,CAAC,iBAAiB,CAAC;IAChF,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Map-store origin config. Browser must not call Memorix :5100, Map BFF :9222, or SEAP :7540.
|
|
3
|
+
* Callers inject how to resolve the origin (e.g. Vite env) via configureMapStore.
|
|
4
|
+
*/
|
|
5
|
+
export type MapStoreConfig = {
|
|
6
|
+
/** Return origin without trailing slash, or '' for same-origin. */
|
|
7
|
+
resolveOrigin: () => string;
|
|
8
|
+
};
|
|
9
|
+
export declare function configureMapStore(next: MapStoreConfig): void;
|
|
10
|
+
export declare function stripMapStoreOrigin(origin: string): string;
|
|
11
|
+
export declare function resolveMapStoreOrigin(): string;
|
|
12
|
+
export declare function mapStoreBasePath(): string;
|
|
13
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,MAAM,cAAc,GAAG;IAC3B,mEAAmE;IACnE,aAAa,EAAE,MAAM,MAAM,CAAC;CAC7B,CAAC;AAMF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI,CAE5D;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAK1D;AAED,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C;AAED,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC"}
|
package/dist/config.js
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Map-store origin config. Browser must not call Memorix :5100, Map BFF :9222, or SEAP :7540.
|
|
3
|
+
* Callers inject how to resolve the origin (e.g. Vite env) via configureMapStore.
|
|
4
|
+
*/
|
|
5
|
+
import { MAP_STORE_API_PREFIX } from './paths';
|
|
6
|
+
let config = {
|
|
7
|
+
resolveOrigin: () => '',
|
|
8
|
+
};
|
|
9
|
+
export function configureMapStore(next) {
|
|
10
|
+
config = next;
|
|
11
|
+
}
|
|
12
|
+
export function stripMapStoreOrigin(origin) {
|
|
13
|
+
return origin
|
|
14
|
+
.replace(/\/$/, '')
|
|
15
|
+
.replace(/\/map-store\/v1$/i, '')
|
|
16
|
+
.replace(/\/security-map\/v1$/i, '');
|
|
17
|
+
}
|
|
18
|
+
export function resolveMapStoreOrigin() {
|
|
19
|
+
return stripMapStoreOrigin(config.resolveOrigin() || '');
|
|
20
|
+
}
|
|
21
|
+
export function mapStoreBasePath() {
|
|
22
|
+
return `${resolveMapStoreOrigin()}${MAP_STORE_API_PREFIX}`;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAO/C,IAAI,MAAM,GAAmB;IAC3B,aAAa,EAAE,GAAG,EAAE,CAAC,EAAE;CACxB,CAAC;AAEF,MAAM,UAAU,iBAAiB,CAAC,IAAoB;IACpD,MAAM,GAAG,IAAI,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAAc;IAChD,OAAO,MAAM;SACV,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;SAClB,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC;SAChC,OAAO,CAAC,sBAAsB,EAAE,EAAE,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,qBAAqB;IACnC,OAAO,mBAAmB,CAAC,MAAM,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,OAAO,GAAG,qBAAqB,EAAE,GAAG,oBAAoB,EAAE,CAAC;AAC7D,CAAC"}
|
package/dist/errors.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* User-facing copy for map-store errors — especially bag generation gaps.
|
|
3
|
+
*/
|
|
4
|
+
/** Prefer station `reason` / `status` fields on mixed-pin responses. */
|
|
5
|
+
export declare function messageFromMapStoreBody(body: unknown, fallback: string): string;
|
|
6
|
+
export declare function formatMapStoreError(err: unknown): string;
|
|
7
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,wEAAwE;AACxE,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,OAAO,EACb,QAAQ,EAAE,MAAM,GACf,MAAM,CAWR;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAuBxD"}
|
package/dist/errors.js
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* User-facing copy for map-store errors — especially bag generation gaps.
|
|
3
|
+
*/
|
|
4
|
+
import { asRecord, firstString } from './util';
|
|
5
|
+
import { MapStoreError } from './types';
|
|
6
|
+
/** Prefer station `reason` / `status` fields on mixed-pin responses. */
|
|
7
|
+
export function messageFromMapStoreBody(body, fallback) {
|
|
8
|
+
const rec = asRecord(body);
|
|
9
|
+
return (firstString(rec?.userMessage, rec?.message, rec?.reason, typeof rec?.error === 'string' ? rec.error : undefined, typeof rec?.status === 'string' ? rec.status : undefined) ?? fallback);
|
|
10
|
+
}
|
|
11
|
+
export function formatMapStoreError(err) {
|
|
12
|
+
if (err instanceof MapStoreError) {
|
|
13
|
+
const reason = messageFromMapStoreBody(err.body, err.message);
|
|
14
|
+
if (err.code === 'mixed-generation') {
|
|
15
|
+
return (`Mixed covering pair — this product is still stamped for a prior generation ` +
|
|
16
|
+
`while bootstrap has advanced. Map-store correctly refuses it (409). ` +
|
|
17
|
+
`Synapix must re-land this bag on the current bootstrap pair. ` +
|
|
18
|
+
`(${reason})`);
|
|
19
|
+
}
|
|
20
|
+
if (err.code === 'incomplete-publication') {
|
|
21
|
+
return (`Incomplete publication — required bag product is missing for this covering. ` +
|
|
22
|
+
`Not an empty estate. (${reason})`);
|
|
23
|
+
}
|
|
24
|
+
if (err.code === 'memorix-unavailable') {
|
|
25
|
+
return reason || 'Map-store reports Memorix unavailable.';
|
|
26
|
+
}
|
|
27
|
+
return reason || err.message;
|
|
28
|
+
}
|
|
29
|
+
return err instanceof Error ? err.message : String(err);
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAExC,wEAAwE;AACxE,MAAM,UAAU,uBAAuB,CACrC,IAAa,EACb,QAAgB;IAEhB,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC3B,OAAO,CACL,WAAW,CACT,GAAG,EAAE,WAAW,EAChB,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,MAAM,EACX,OAAO,GAAG,EAAE,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,EACtD,OAAO,GAAG,EAAE,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CACzD,IAAI,QAAQ,CACd,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,GAAY;IAC9C,IAAI,GAAG,YAAY,aAAa,EAAE,CAAC;QACjC,MAAM,MAAM,GAAG,uBAAuB,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;QAC9D,IAAI,GAAG,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;YACpC,OAAO,CACL,6EAA6E;gBAC7E,sEAAsE;gBACtE,+DAA+D;gBAC/D,IAAI,MAAM,GAAG,CACd,CAAC;QACJ,CAAC;QACD,IAAI,GAAG,CAAC,IAAI,KAAK,wBAAwB,EAAE,CAAC;YAC1C,OAAO,CACL,8EAA8E;gBAC9E,yBAAyB,MAAM,GAAG,CACnC,CAAC;QACJ,CAAC;QACD,IAAI,GAAG,CAAC,IAAI,KAAK,qBAAqB,EAAE,CAAC;YACvC,OAAO,MAAM,IAAI,wCAAwC,CAAC;QAC5D,CAAC;QACD,OAAO,MAAM,IAAI,GAAG,CAAC,OAAO,CAAC;IAC/B,CAAC;IACD,OAAO,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAC1D,CAAC"}
|