@pegma/knowledge-base-application 0.0.0-stage → 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 (75) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +140 -2
  3. package/dist/articles.d.ts +10 -0
  4. package/dist/articles.d.ts.map +1 -0
  5. package/dist/articles.js +454 -0
  6. package/dist/articles.js.map +1 -0
  7. package/dist/errors.d.ts +18 -0
  8. package/dist/errors.d.ts.map +1 -0
  9. package/dist/errors.js +34 -0
  10. package/dist/errors.js.map +1 -0
  11. package/dist/governance.d.ts +14 -0
  12. package/dist/governance.d.ts.map +1 -0
  13. package/dist/governance.js +364 -0
  14. package/dist/governance.js.map +1 -0
  15. package/dist/index.d.ts +13 -0
  16. package/dist/index.d.ts.map +1 -0
  17. package/dist/index.js +46 -0
  18. package/dist/index.js.map +1 -0
  19. package/dist/lexical.d.ts +13 -0
  20. package/dist/lexical.d.ts.map +1 -0
  21. package/dist/lexical.js +105 -0
  22. package/dist/lexical.js.map +1 -0
  23. package/dist/publication.d.ts +42 -0
  24. package/dist/publication.d.ts.map +1 -0
  25. package/dist/publication.js +258 -0
  26. package/dist/publication.js.map +1 -0
  27. package/dist/reads.d.ts +5 -0
  28. package/dist/reads.d.ts.map +1 -0
  29. package/dist/reads.js +228 -0
  30. package/dist/reads.js.map +1 -0
  31. package/dist/records.d.ts +40 -0
  32. package/dist/records.d.ts.map +1 -0
  33. package/dist/records.js +122 -0
  34. package/dist/records.js.map +1 -0
  35. package/dist/repository.d.ts +74 -0
  36. package/dist/repository.d.ts.map +1 -0
  37. package/dist/repository.js +738 -0
  38. package/dist/repository.js.map +1 -0
  39. package/dist/retrieval-budget.d.ts +37 -0
  40. package/dist/retrieval-budget.d.ts.map +1 -0
  41. package/dist/retrieval-budget.js +111 -0
  42. package/dist/retrieval-budget.js.map +1 -0
  43. package/dist/retrieval-limits.d.ts +4 -0
  44. package/dist/retrieval-limits.d.ts.map +1 -0
  45. package/dist/retrieval-limits.js +21 -0
  46. package/dist/retrieval-limits.js.map +1 -0
  47. package/dist/retrieval-maintenance.d.ts +19 -0
  48. package/dist/retrieval-maintenance.d.ts.map +1 -0
  49. package/dist/retrieval-maintenance.js +359 -0
  50. package/dist/retrieval-maintenance.js.map +1 -0
  51. package/dist/retrieval-records.d.ts +55 -0
  52. package/dist/retrieval-records.d.ts.map +1 -0
  53. package/dist/retrieval-records.js +140 -0
  54. package/dist/retrieval-records.js.map +1 -0
  55. package/dist/retrieval-repository.d.ts +32 -0
  56. package/dist/retrieval-repository.d.ts.map +1 -0
  57. package/dist/retrieval-repository.js +750 -0
  58. package/dist/retrieval-repository.js.map +1 -0
  59. package/dist/retrieval-types.d.ts +185 -0
  60. package/dist/retrieval-types.d.ts.map +1 -0
  61. package/dist/retrieval-types.js +24 -0
  62. package/dist/retrieval-types.js.map +1 -0
  63. package/dist/retrieval.d.ts +12 -0
  64. package/dist/retrieval.d.ts.map +1 -0
  65. package/dist/retrieval.js +541 -0
  66. package/dist/retrieval.js.map +1 -0
  67. package/dist/storage-helpers.d.ts +23 -0
  68. package/dist/storage-helpers.d.ts.map +1 -0
  69. package/dist/storage-helpers.js +138 -0
  70. package/dist/storage-helpers.js.map +1 -0
  71. package/dist/types.d.ts +280 -0
  72. package/dist/types.d.ts.map +1 -0
  73. package/dist/types.js +2 -0
  74. package/dist/types.js.map +1 -0
  75. package/package.json +42 -4
@@ -0,0 +1,541 @@
1
+ import { hasPermission } from "@pegma/authorization-core";
2
+ import { knowledgePermissions, } from "@pegma/knowledge-base-contracts";
3
+ import { KnowledgeBaseNotFoundError } from "./errors.js";
4
+ import { normalizeQuery, scoreConfirmedArticle } from "./lexical.js";
5
+ import { createPublicationChecker, } from "./publication.js";
6
+ import { createKnowledgeRepository } from "./repository.js";
7
+ import { createRetrievalReadBudget, RetrievalBudgetError, } from "./retrieval-budget.js";
8
+ import { resolveRetrievalLimits } from "./retrieval-limits.js";
9
+ import { requireRetrievalHint, retrievalRecords, } from "./retrieval-records.js";
10
+ import { createRetrievalRepository } from "./retrieval-repository.js";
11
+ import { canonicalJson, fingerprint, requireGeneration, requireIdentifier, snapshotData, } from "./storage-helpers.js";
12
+ function ordinal(left, right) {
13
+ return left === right ? 0 : left < right ? -1 : 1;
14
+ }
15
+ function inputSnapshot(input, fields) {
16
+ const value = snapshotData(input);
17
+ if (value === null ||
18
+ typeof value !== "object" ||
19
+ Array.isArray(value) ||
20
+ Object.keys(value).some((key) => !fields.includes(key)))
21
+ throw new TypeError("Retrieval input contains unsupported fields");
22
+ return value;
23
+ }
24
+ function applicabilitySnapshot(value) {
25
+ const applicability = inputSnapshot(value, [
26
+ "productId",
27
+ "productVersion",
28
+ "buildId",
29
+ "locale",
30
+ ]);
31
+ requireIdentifier(applicability.productId, "applicability.productId");
32
+ requireIdentifier(applicability.productVersion, "applicability.productVersion");
33
+ if (Object.hasOwn(applicability, "buildId"))
34
+ requireIdentifier(applicability.buildId, "applicability.buildId");
35
+ if (Object.hasOwn(applicability, "locale"))
36
+ requireIdentifier(applicability.locale, "applicability.locale");
37
+ return applicability;
38
+ }
39
+ function requestedLimit(limit, maximum) {
40
+ if (limit === undefined)
41
+ return maximum;
42
+ if (!Number.isSafeInteger(limit) || limit < 1 || limit > maximum) {
43
+ throw new TypeError("Requested retrieval limit exceeds its ceiling");
44
+ }
45
+ return limit;
46
+ }
47
+ function allows(use, access) {
48
+ return (use.enabled &&
49
+ (use.audience.kind === "anonymous" ||
50
+ hasPermission(access, use.audience.permission)));
51
+ }
52
+ function mayRead(access, purpose) {
53
+ return (hasPermission(access, knowledgePermissions.articleRead) &&
54
+ (purpose === "portal" ||
55
+ hasPermission(access, knowledgePermissions.botRead)));
56
+ }
57
+ function noPortalResult() {
58
+ return { outcome: "no_result", articles: [] };
59
+ }
60
+ function noCollections() {
61
+ return { outcome: "no_result", collections: [] };
62
+ }
63
+ function noSources() {
64
+ return {
65
+ outcome: "no_result",
66
+ sources: [],
67
+ serializedSources: "",
68
+ sourceTokens: 0,
69
+ };
70
+ }
71
+ function referenceOf(checked) {
72
+ const binding = checked.binding;
73
+ return {
74
+ articleId: binding.articleId,
75
+ collectionId: binding.collectionId,
76
+ collectionPolicyVersion: binding.collectionPolicyVersion,
77
+ articleRevision: binding.revision,
78
+ contentHash: binding.contentHash,
79
+ applicationGeneration: binding.articleGeneration,
80
+ governanceGeneration: binding.governanceGeneration,
81
+ validationGeneration: binding.validationGeneration,
82
+ };
83
+ }
84
+ function validateReference(reference) {
85
+ inputSnapshot(reference, [
86
+ "articleId",
87
+ "collectionId",
88
+ "collectionPolicyVersion",
89
+ "articleRevision",
90
+ "contentHash",
91
+ "applicationGeneration",
92
+ "governanceGeneration",
93
+ "validationGeneration",
94
+ ]);
95
+ requireIdentifier(reference.articleId, "articleId");
96
+ requireIdentifier(reference.collectionId, "collectionId");
97
+ if (!/^[a-f0-9]{64}$/u.test(reference.contentHash))
98
+ throw new TypeError("Invalid source content hash");
99
+ for (const value of [
100
+ reference.collectionPolicyVersion,
101
+ reference.articleRevision,
102
+ reference.applicationGeneration,
103
+ reference.governanceGeneration,
104
+ reference.validationGeneration,
105
+ ])
106
+ requireGeneration(value, 1);
107
+ }
108
+ function sourceOf(checked) {
109
+ const article = checked.article;
110
+ return snapshotData({
111
+ reference: referenceOf(checked),
112
+ citation: {
113
+ label: article.title,
114
+ ...(checked.portalBrowseable
115
+ ? {
116
+ portalArticle: {
117
+ articleId: article.articleId,
118
+ revision: article.revision,
119
+ },
120
+ }
121
+ : {}),
122
+ },
123
+ title: article.title,
124
+ summary: article.summary,
125
+ content: article.content,
126
+ applicability: article.applicability,
127
+ });
128
+ }
129
+ function portalArticleOf(checked) {
130
+ const article = checked.article;
131
+ return snapshotData({
132
+ articleId: article.articleId,
133
+ collectionId: article.collectionId,
134
+ revision: article.revision,
135
+ kind: article.kind,
136
+ title: article.title,
137
+ summary: article.summary,
138
+ snippet: article.summary,
139
+ tags: article.tags,
140
+ applicability: article.applicability,
141
+ contentHash: article.contentHash,
142
+ });
143
+ }
144
+ /** Every call constructs a fresh request-scoped read budget and checker. */
145
+ export function createRetrievalServices(input) {
146
+ const limits = resolveRetrievalLimits(input.options?.limits);
147
+ const candidateAdapter = input.options?.candidateAdapter;
148
+ const tokenCounter = input.options?.tokenCounter;
149
+ function requestScope() {
150
+ const budget = createRetrievalReadBudget(input.store, {
151
+ maxPhysicalReads: limits.maxRequestPhysicalGets,
152
+ maxIndexReads: limits.maxIndexKeyReads,
153
+ maxPostingEntries: limits.maxPostingEntries,
154
+ maxCandidateHeads: limits.maxHeadProbes,
155
+ maxConfirmations: limits.maxConfirmations,
156
+ indexCollectionName: retrievalRecords.name,
157
+ });
158
+ const repository = createKnowledgeRepository(budget.store, input.services.limits);
159
+ const index = createRetrievalRepository(budget.store, limits);
160
+ const checker = createPublicationChecker(repository, input.services);
161
+ async function authorizeCollection(access, collectionId, purpose) {
162
+ if (!mayRead(access, purpose))
163
+ return null;
164
+ const loaded = await repository.readCollectionVersioned(collectionId);
165
+ if (loaded === null)
166
+ return null;
167
+ const collection = loaded.value.collection;
168
+ if (!allows(collection.policy[purpose], access))
169
+ return null;
170
+ if ([collection.policy.portal, collection.policy.bot].some((use) => use.enabled && use.audience.kind === "anonymous")) {
171
+ const approval = collection.publicApproval;
172
+ if (approval === undefined ||
173
+ approval.collectionId !== collection.id ||
174
+ approval.policyVersion !== collection.policy.version ||
175
+ approval.policyHash !== (await fingerprint(collection.policy)))
176
+ return null;
177
+ }
178
+ return {
179
+ scope: {
180
+ collectionId,
181
+ policyVersion: collection.policy.version,
182
+ use: purpose,
183
+ },
184
+ governanceGeneration: loaded.value.generation,
185
+ label: collection.name,
186
+ };
187
+ }
188
+ async function queryHints(scopes, terms) {
189
+ const candidates = new Map();
190
+ const add = (hint, scope, term) => {
191
+ requireRetrievalHint(hint);
192
+ if (hint.collectionId !== scope.collectionId ||
193
+ hint.policyVersion !== scope.policyVersion ||
194
+ hint.use !== scope.use)
195
+ return;
196
+ const candidate = candidates.get(hint.articleId) ?? {
197
+ articleId: hint.articleId,
198
+ firstSeen: candidates.size,
199
+ terms: new Set(),
200
+ hints: new Map(),
201
+ };
202
+ candidate.terms.add(term);
203
+ candidate.hints.set(canonicalJson(hint), hint);
204
+ candidates.set(candidate.articleId, candidate);
205
+ };
206
+ for (const authorized of scopes) {
207
+ const scope = authorized.scope;
208
+ if (candidateAdapter === undefined) {
209
+ for (const term of terms) {
210
+ const pages = await index.readPostingPages(scope, term);
211
+ for (const page of pages) {
212
+ budget.indexEntries(page.entries.length);
213
+ for (const hint of page.entries)
214
+ add(hint, scope, term);
215
+ }
216
+ }
217
+ continue;
218
+ }
219
+ if (typeof candidateAdapter.search !== "function")
220
+ throw new RetrievalBudgetError();
221
+ let cursor;
222
+ const seen = new Set();
223
+ for (;;) {
224
+ const allowance = budget.remainingCandidateWork();
225
+ // Every external page consumes at least one page/read allowance.
226
+ // Do not dispatch work that cannot fit, even with an empty response.
227
+ if (allowance.pagesRead < 1 ||
228
+ allowance.keyedReads < 1 ||
229
+ allowance.physicalRows < 1)
230
+ throw new RetrievalBudgetError();
231
+ const page = snapshotData(await candidateAdapter.search({
232
+ scope: snapshotData(scope),
233
+ terms: snapshotData(terms),
234
+ ...(cursor === undefined ? {} : { cursor }),
235
+ budget: allowance,
236
+ }));
237
+ inputSnapshot(page, ["hints", "nextCursor", "work"]);
238
+ if (!Array.isArray(page.hints))
239
+ throw new RetrievalBudgetError();
240
+ const work = inputSnapshot(page.work, [
241
+ "keyedReads",
242
+ "physicalRows",
243
+ "postingEntries",
244
+ "pagesRead",
245
+ ]);
246
+ for (const key of [
247
+ "keyedReads",
248
+ "physicalRows",
249
+ "postingEntries",
250
+ "pagesRead",
251
+ ]) {
252
+ if (!Number.isSafeInteger(work[key]) ||
253
+ work[key] < 0 ||
254
+ work[key] > allowance[key])
255
+ throw new RetrievalBudgetError();
256
+ }
257
+ if (work.pagesRead < 1 ||
258
+ work.postingEntries < page.hints.length ||
259
+ (page.hints.length > 0 && work.physicalRows < 1))
260
+ throw new RetrievalBudgetError();
261
+ budget.accountExternal(work);
262
+ for (const hint of page.hints)
263
+ add(hint, scope, "adapter");
264
+ if (page.nextCursor === null)
265
+ break;
266
+ requireIdentifier(page.nextCursor, "candidate cursor");
267
+ if (seen.has(page.nextCursor))
268
+ throw new RetrievalBudgetError();
269
+ seen.add(page.nextCursor);
270
+ cursor = page.nextCursor;
271
+ }
272
+ }
273
+ if (candidates.size > limits.maxHeadProbes)
274
+ throw new RetrievalBudgetError();
275
+ const current = [];
276
+ for (const candidate of candidates.values()) {
277
+ budget.candidateHead();
278
+ const generation = await repository.readResourceGeneration("article", candidate.articleId);
279
+ // Draft work can advance this head without changing its publication.
280
+ // Only the current checker establishes authority; hints identify it.
281
+ if (generation !== null)
282
+ current.push(candidate);
283
+ }
284
+ return current.sort((left, right) => candidateAdapter === undefined
285
+ ? right.terms.size - left.terms.size ||
286
+ ordinal(left.articleId, right.articleId)
287
+ : left.firstSeen - right.firstSeen);
288
+ }
289
+ async function search(access, collectionIds, terms, applicability, purpose, resultLimit) {
290
+ if (!mayRead(access, purpose) || terms.length === 0)
291
+ return [];
292
+ const scopes = [];
293
+ // Check every requested collection before any derived index lookup.
294
+ for (const collectionId of collectionIds) {
295
+ const authorized = await authorizeCollection(access, collectionId, purpose);
296
+ if (authorized === null)
297
+ return [];
298
+ scopes.push(authorized);
299
+ }
300
+ const candidates = await queryHints(scopes, terms);
301
+ const confirmed = [];
302
+ // Adapter order is a relevance hint for bounded preselection only.
303
+ // Every candidate still needs current publication confirmation.
304
+ for (const candidate of candidates.slice(0, limits.maxConfirmations)) {
305
+ budget.confirmation();
306
+ let checked;
307
+ try {
308
+ checked = await checker.check({
309
+ articleId: candidate.articleId,
310
+ purpose,
311
+ access,
312
+ applicability,
313
+ });
314
+ }
315
+ catch (error) {
316
+ if (error instanceof KnowledgeBaseNotFoundError)
317
+ continue;
318
+ throw error;
319
+ }
320
+ if (![...candidate.hints.values()].some((hint) => hint.articleId === checked.article.articleId &&
321
+ hint.collectionId === checked.article.collectionId &&
322
+ hint.policyVersion === checked.binding.collectionPolicyVersion &&
323
+ hint.articleRevision === checked.article.revision &&
324
+ hint.contentHash === checked.article.contentHash))
325
+ continue;
326
+ const score = scoreConfirmedArticle(checked.article, terms);
327
+ // An adapter may match approved body text or synonyms rather than the
328
+ // title/summary/tags used by the default lexical index.
329
+ if (score > 0 || candidateAdapter !== undefined)
330
+ confirmed.push({ checked, score, firstSeen: candidate.firstSeen });
331
+ }
332
+ confirmed.sort((left, right) => right.score - left.score ||
333
+ (candidateAdapter === undefined
334
+ ? ordinal(left.checked.article.articleId, right.checked.article.articleId)
335
+ : left.firstSeen - right.firstSeen));
336
+ return confirmed.slice(0, resultLimit).map(({ checked }) => checked);
337
+ }
338
+ async function sourceResult(checked, fitWholeArticles = false) {
339
+ if (checked.length === 0 || typeof tokenCounter?.count !== "function")
340
+ return noSources();
341
+ for (let count = checked.length; count > 0; count -= 1) {
342
+ const selected = checked.slice(0, count);
343
+ const sources = selected.map(sourceOf);
344
+ const serializedSources = canonicalJson(sources);
345
+ if (new TextEncoder().encode(serializedSources).byteLength <=
346
+ limits.maxContentBytes) {
347
+ let sourceTokens;
348
+ try {
349
+ sourceTokens = tokenCounter.count(serializedSources);
350
+ }
351
+ catch {
352
+ return noSources();
353
+ }
354
+ if (!Number.isSafeInteger(sourceTokens) || sourceTokens <= 0)
355
+ return noSources();
356
+ if (sourceTokens <= limits.maxSourceTokens) {
357
+ for (const source of selected)
358
+ await checker.recheck(source);
359
+ return {
360
+ outcome: "results",
361
+ sources,
362
+ serializedSources,
363
+ sourceTokens,
364
+ };
365
+ }
366
+ }
367
+ // Select only complete top-ranked articles; an exact citation list
368
+ // instead remains all-or-nothing during reconfirmation.
369
+ if (!fitWholeArticles)
370
+ return noSources();
371
+ }
372
+ return noSources();
373
+ }
374
+ return {
375
+ budget,
376
+ repository,
377
+ index,
378
+ checker,
379
+ authorizeCollection,
380
+ search,
381
+ sourceResult,
382
+ };
383
+ }
384
+ function queryTerms(query) {
385
+ if (typeof query !== "string" || query.length > limits.maxQueryCharacters) {
386
+ throw new TypeError("Query exceeds its configured character bound");
387
+ }
388
+ const terms = normalizeQuery(query);
389
+ if (terms.length > limits.maxQueryTerms)
390
+ throw new TypeError("Query exceeds its configured term bound");
391
+ return terms;
392
+ }
393
+ return {
394
+ async listPortalCollections(access, request) {
395
+ const caller = snapshotData(access);
396
+ const query = inputSnapshot(request, ["limit"]);
397
+ const limit = requestedLimit(query.limit, limits.maxDirectoryCollections);
398
+ if (!mayRead(caller, "portal"))
399
+ return noCollections();
400
+ try {
401
+ const scope = requestScope();
402
+ const ids = await scope.index.readDirectory();
403
+ if (ids.length > limits.maxDirectoryCollections)
404
+ return noCollections();
405
+ const authorized = [];
406
+ for (const id of ids) {
407
+ requireIdentifier(id, "collectionId");
408
+ const collection = await scope.authorizeCollection(caller, id, "portal");
409
+ if (collection !== null)
410
+ authorized.push(collection);
411
+ }
412
+ const selected = authorized
413
+ .sort((left, right) => ordinal(left.scope.collectionId, right.scope.collectionId))
414
+ .slice(0, limit);
415
+ for (const collection of selected) {
416
+ if ((await scope.repository.readResourceGeneration("collection", collection.scope.collectionId)) !== collection.governanceGeneration) {
417
+ return noCollections();
418
+ }
419
+ }
420
+ return selected.length === 0
421
+ ? noCollections()
422
+ : {
423
+ outcome: "results",
424
+ collections: selected.map((collection) => ({
425
+ collectionId: collection.scope.collectionId,
426
+ label: collection.label,
427
+ })),
428
+ };
429
+ }
430
+ catch {
431
+ return noCollections();
432
+ }
433
+ },
434
+ async searchPublishedArticles(access, request) {
435
+ const caller = snapshotData(access);
436
+ const query = inputSnapshot(request, [
437
+ "collectionId",
438
+ "query",
439
+ "applicability",
440
+ "limit",
441
+ ]);
442
+ requireIdentifier(query.collectionId, "collectionId");
443
+ const terms = queryTerms(query.query);
444
+ const applicability = applicabilitySnapshot(query.applicability);
445
+ const limit = requestedLimit(query.limit, limits.maxResults);
446
+ try {
447
+ const scope = requestScope();
448
+ const checked = await scope.search(caller, [query.collectionId], terms, applicability, "portal", limit);
449
+ const articles = checked.map(portalArticleOf);
450
+ if (articles.length === 0 ||
451
+ new TextEncoder().encode(canonicalJson(articles)).byteLength >
452
+ limits.maxContentBytes)
453
+ return noPortalResult();
454
+ for (const article of checked)
455
+ await scope.checker.recheck(article);
456
+ return { outcome: "results", articles };
457
+ }
458
+ catch {
459
+ return noPortalResult();
460
+ }
461
+ },
462
+ async retrieveAnswerSources(effectiveCustomerAccess, request) {
463
+ const caller = snapshotData(effectiveCustomerAccess);
464
+ const query = inputSnapshot(request, [
465
+ "collectionIds",
466
+ "query",
467
+ "applicability",
468
+ "limit",
469
+ ]);
470
+ if (!Array.isArray(query.collectionIds) ||
471
+ query.collectionIds.length === 0 ||
472
+ query.collectionIds.length > limits.maxBotCollections) {
473
+ throw new TypeError("Bot retrieval exceeds its collection bound");
474
+ }
475
+ for (const id of query.collectionIds)
476
+ requireIdentifier(id, "collectionId");
477
+ if (new Set(query.collectionIds).size !== query.collectionIds.length)
478
+ throw new TypeError("Collection ids must be unique");
479
+ const terms = queryTerms(query.query);
480
+ const applicability = applicabilitySnapshot(query.applicability);
481
+ const limit = requestedLimit(query.limit, limits.maxResults);
482
+ if (typeof tokenCounter?.count !== "function")
483
+ return noSources();
484
+ try {
485
+ const scope = requestScope();
486
+ return await scope.sourceResult(await scope.search(caller, query.collectionIds, terms, applicability, "bot", limit), true);
487
+ }
488
+ catch {
489
+ return noSources();
490
+ }
491
+ },
492
+ async confirmAnswerSources(effectiveCustomerAccess, request) {
493
+ const caller = snapshotData(effectiveCustomerAccess);
494
+ const query = inputSnapshot(request, ["references", "applicability"]);
495
+ const applicability = applicabilitySnapshot(query.applicability);
496
+ if (!Array.isArray(query.references) ||
497
+ query.references.length === 0 ||
498
+ query.references.length > limits.maxResults) {
499
+ throw new TypeError("Citation references exceed their result bound");
500
+ }
501
+ for (const reference of query.references)
502
+ validateReference(reference);
503
+ if (new Set(query.references.map((reference) => reference.articleId))
504
+ .size !== query.references.length ||
505
+ new Set(query.references.map((reference) => reference.collectionId))
506
+ .size > limits.maxBotCollections)
507
+ throw new TypeError("Citation references must have unique articles and bounded collections");
508
+ if (typeof tokenCounter?.count !== "function" || !mayRead(caller, "bot"))
509
+ return noSources();
510
+ try {
511
+ const scope = requestScope();
512
+ for (const collectionId of new Set(query.references.map((reference) => reference.collectionId))) {
513
+ if ((await scope.authorizeCollection(caller, collectionId, "bot")) ===
514
+ null)
515
+ return noSources();
516
+ }
517
+ const checked = [];
518
+ for (const reference of query.references) {
519
+ scope.budget.candidateHead();
520
+ if ((await scope.repository.readResourceGeneration("article", reference.articleId)) !== reference.applicationGeneration)
521
+ return noSources();
522
+ scope.budget.confirmation();
523
+ const confirmed = await scope.checker.check({
524
+ articleId: reference.articleId,
525
+ purpose: "bot",
526
+ access: caller,
527
+ applicability,
528
+ });
529
+ if (canonicalJson(referenceOf(confirmed)) !== canonicalJson(reference))
530
+ return noSources();
531
+ checked.push(confirmed);
532
+ }
533
+ return await scope.sourceResult(checked);
534
+ }
535
+ catch {
536
+ return noSources();
537
+ }
538
+ },
539
+ };
540
+ }
541
+ //# sourceMappingURL=retrieval.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retrieval.js","sourceRoot":"","sources":["../src/retrieval.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAsB,MAAM,2BAA2B,CAAC;AAC9E,OAAO,EACL,oBAAoB,GAGrB,MAAM,iCAAiC,CAAC;AAGzC,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACrE,OAAO,EACL,wBAAwB,GAEzB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EACL,yBAAyB,EACzB,oBAAoB,GACrB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EACL,oBAAoB,EACpB,gBAAgB,GAGjB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AAWtE,OAAO,EACL,aAAa,EACb,WAAW,EACX,iBAAiB,EACjB,iBAAiB,EACjB,YAAY,GACb,MAAM,sBAAsB,CAAC;AAyB9B,SAAS,OAAO,CAAC,IAAY,EAAE,KAAa;IAC1C,OAAO,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACpD,CAAC;AAED,SAAS,aAAa,CAAI,KAAQ,EAAE,MAAyB;IAC3D,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IAClC,IACE,KAAK,KAAK,IAAI;QACd,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACpB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAEvD,MAAM,IAAI,SAAS,CAAC,6CAA6C,CAAC,CAAC;IACrE,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAoB;IACjD,MAAM,aAAa,GAAG,aAAa,CAAC,KAAK,EAAE;QACzC,WAAW;QACX,gBAAgB;QAChB,SAAS;QACT,QAAQ;KACT,CAAC,CAAC;IACH,iBAAiB,CAAC,aAAa,CAAC,SAAS,EAAE,yBAAyB,CAAC,CAAC;IACtE,iBAAiB,CACf,aAAa,CAAC,cAAc,EAC5B,8BAA8B,CAC/B,CAAC;IACF,IAAI,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,SAAS,CAAC;QACzC,iBAAiB,CAAC,aAAa,CAAC,OAAQ,EAAE,uBAAuB,CAAC,CAAC;IACrE,IAAI,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,QAAQ,CAAC;QACxC,iBAAiB,CAAC,aAAa,CAAC,MAAO,EAAE,sBAAsB,CAAC,CAAC;IACnE,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,SAAS,cAAc,CAAC,KAAyB,EAAE,OAAe;IAChE,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,OAAO,CAAC;IACxC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,OAAO,EAAE,CAAC;QACjE,MAAM,IAAI,SAAS,CAAC,+CAA+C,CAAC,CAAC;IACvE,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,MAAM,CAAC,GAAkB,EAAE,MAAqB;IACvD,OAAO,CACL,GAAG,CAAC,OAAO;QACX,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,KAAK,WAAW;YAChC,aAAa,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAClD,CAAC;AACJ,CAAC;AAED,SAAS,OAAO,CAAC,MAAqB,EAAE,OAAgB;IACtD,OAAO,CACL,aAAa,CAAC,MAAM,EAAE,oBAAoB,CAAC,WAAW,CAAC;QACvD,CAAC,OAAO,KAAK,QAAQ;YACnB,aAAa,CAAC,MAAM,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC,CACvD,CAAC;AACJ,CAAC;AAED,SAAS,cAAc;IACrB,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;AAChD,CAAC;AAED,SAAS,aAAa;IACpB,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;AACnD,CAAC;AAED,SAAS,SAAS;IAChB,OAAO;QACL,OAAO,EAAE,WAAW;QACpB,OAAO,EAAE,EAAE;QACX,iBAAiB,EAAE,EAAE;QACrB,YAAY,EAAE,CAAC;KAChB,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,OAA2B;IAC9C,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAChC,OAAO;QACL,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,uBAAuB,EAAE,OAAO,CAAC,uBAAuB;QACxD,eAAe,EAAE,OAAO,CAAC,QAAQ;QACjC,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,qBAAqB,EAAE,OAAO,CAAC,iBAAiB;QAChD,oBAAoB,EAAE,OAAO,CAAC,oBAAoB;QAClD,oBAAoB,EAAE,OAAO,CAAC,oBAAoB;KACnD,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,SAAgC;IACzD,aAAa,CAAC,SAAS,EAAE;QACvB,WAAW;QACX,cAAc;QACd,yBAAyB;QACzB,iBAAiB;QACjB,aAAa;QACb,uBAAuB;QACvB,sBAAsB;QACtB,sBAAsB;KACvB,CAAC,CAAC;IACH,iBAAiB,CAAC,SAAS,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IACpD,iBAAiB,CAAC,SAAS,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;IAC1D,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;QAChD,MAAM,IAAI,SAAS,CAAC,6BAA6B,CAAC,CAAC;IACrD,KAAK,MAAM,KAAK,IAAI;QAClB,SAAS,CAAC,uBAAuB;QACjC,SAAS,CAAC,eAAe;QACzB,SAAS,CAAC,qBAAqB;QAC/B,SAAS,CAAC,oBAAoB;QAC9B,SAAS,CAAC,oBAAoB;KAC/B;QACC,iBAAiB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AAChC,CAAC;AAED,SAAS,QAAQ,CAAC,OAA2B;IAC3C,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAChC,OAAO,YAAY,CAAC;QAClB,SAAS,EAAE,WAAW,CAAC,OAAO,CAAC;QAC/B,QAAQ,EAAE;YACR,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,GAAG,CAAC,OAAO,CAAC,gBAAgB;gBAC1B,CAAC,CAAC;oBACE,aAAa,EAAE;wBACb,SAAS,EAAE,OAAO,CAAC,SAAS;wBAC5B,QAAQ,EAAE,OAAO,CAAC,QAAQ;qBAC3B;iBACF;gBACH,CAAC,CAAC,EAAE,CAAC;SACR;QACD,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,aAAa,EAAE,OAAO,CAAC,aAAa;KACrC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,eAAe,CAAC,OAA2B;IAClD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAChC,OAAO,YAAY,CAAC;QAClB,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,WAAW,EAAE,OAAO,CAAC,WAAW;KACjC,CAAC,CAAC;AACL,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,uBAAuB,CAAC,KAIvC;IACC,MAAM,MAAM,GAAG,sBAAsB,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC7D,MAAM,gBAAgB,GAAG,KAAK,CAAC,OAAO,EAAE,gBAAgB,CAAC;IACzD,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,EAAE,YAAY,CAAC;IAEjD,SAAS,YAAY;QACnB,MAAM,MAAM,GAAG,yBAAyB,CAAC,KAAK,CAAC,KAAK,EAAE;YACpD,gBAAgB,EAAE,MAAM,CAAC,sBAAsB;YAC/C,aAAa,EAAE,MAAM,CAAC,gBAAgB;YACtC,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;YAC3C,iBAAiB,EAAE,MAAM,CAAC,aAAa;YACvC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;YACzC,mBAAmB,EAAE,gBAAgB,CAAC,IAAI;SAC3C,CAAC,CAAC;QACH,MAAM,UAAU,GAAG,yBAAyB,CAC1C,MAAM,CAAC,KAAK,EACZ,KAAK,CAAC,QAAQ,CAAC,MAAM,CACtB,CAAC;QACF,MAAM,KAAK,GAAG,yBAAyB,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC9D,MAAM,OAAO,GAAG,wBAAwB,CAAC,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;QAErE,KAAK,UAAU,mBAAmB,CAChC,MAAqB,EACrB,YAAoB,EACpB,OAAgB;YAEhB,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC;gBAAE,OAAO,IAAI,CAAC;YAC3C,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,uBAAuB,CAAC,YAAY,CAAC,CAAC;YACtE,IAAI,MAAM,KAAK,IAAI;gBAAE,OAAO,IAAI,CAAC;YACjC,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC;YAC3C,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;gBAAE,OAAO,IAAI,CAAC;YAC7D,IACE,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CACpD,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,KAAK,WAAW,CAC1D,EACD,CAAC;gBACD,MAAM,QAAQ,GAAG,UAAU,CAAC,cAAc,CAAC;gBAC3C,IACE,QAAQ,KAAK,SAAS;oBACtB,QAAQ,CAAC,YAAY,KAAK,UAAU,CAAC,EAAE;oBACvC,QAAQ,CAAC,aAAa,KAAK,UAAU,CAAC,MAAM,CAAC,OAAO;oBACpD,QAAQ,CAAC,UAAU,KAAK,CAAC,MAAM,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;oBAE9D,OAAO,IAAI,CAAC;YAChB,CAAC;YACD,OAAO;gBACL,KAAK,EAAE;oBACL,YAAY;oBACZ,aAAa,EAAE,UAAU,CAAC,MAAM,CAAC,OAAO;oBACxC,GAAG,EAAE,OAAO;iBACb;gBACD,oBAAoB,EAAE,MAAM,CAAC,KAAK,CAAC,UAAU;gBAC7C,KAAK,EAAE,UAAU,CAAC,IAAI;aACvB,CAAC;QACJ,CAAC;QAED,KAAK,UAAU,UAAU,CACvB,MAAkC,EAClC,KAAwB;YAExB,MAAM,UAAU,GAAG,IAAI,GAAG,EAAqB,CAAC;YAChD,MAAM,GAAG,GAAG,CACV,IAAmB,EACnB,KAAqB,EACrB,IAAY,EACZ,EAAE;gBACF,oBAAoB,CAAC,IAAI,CAAC,CAAC;gBAC3B,IACE,IAAI,CAAC,YAAY,KAAK,KAAK,CAAC,YAAY;oBACxC,IAAI,CAAC,aAAa,KAAK,KAAK,CAAC,aAAa;oBAC1C,IAAI,CAAC,GAAG,KAAK,KAAK,CAAC,GAAG;oBAEtB,OAAO;gBACT,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI;oBAClD,SAAS,EAAE,IAAI,CAAC,SAAS;oBACzB,SAAS,EAAE,UAAU,CAAC,IAAI;oBAC1B,KAAK,EAAE,IAAI,GAAG,EAAU;oBACxB,KAAK,EAAE,IAAI,GAAG,EAAyB;iBACxC,CAAC;gBACF,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAC1B,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;gBAC/C,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YACjD,CAAC,CAAC;YAEF,KAAK,MAAM,UAAU,IAAI,MAAM,EAAE,CAAC;gBAChC,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC;gBAC/B,IAAI,gBAAgB,KAAK,SAAS,EAAE,CAAC;oBACnC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;wBACzB,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;wBACxD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;4BACzB,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;4BACzC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,OAAO;gCAAE,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;wBAC1D,CAAC;oBACH,CAAC;oBACD,SAAS;gBACX,CAAC;gBACD,IAAI,OAAO,gBAAgB,CAAC,MAAM,KAAK,UAAU;oBAC/C,MAAM,IAAI,oBAAoB,EAAE,CAAC;gBACnC,IAAI,MAA0B,CAAC;gBAC/B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;gBAC/B,SAAS,CAAC;oBACR,MAAM,SAAS,GAAG,MAAM,CAAC,sBAAsB,EAAE,CAAC;oBAClD,iEAAiE;oBACjE,qEAAqE;oBACrE,IACE,SAAS,CAAC,SAAS,GAAG,CAAC;wBACvB,SAAS,CAAC,UAAU,GAAG,CAAC;wBACxB,SAAS,CAAC,YAAY,GAAG,CAAC;wBAE1B,MAAM,IAAI,oBAAoB,EAAE,CAAC;oBACnC,MAAM,IAAI,GAAG,YAAY,CACvB,MAAM,gBAAgB,CAAC,MAAM,CAAC;wBAC5B,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC;wBAC1B,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC;wBAC1B,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC;wBAC3C,MAAM,EAAE,SAAS;qBAClB,CAAC,CACH,CAAC;oBACF,aAAa,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC;oBACrD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;wBAAE,MAAM,IAAI,oBAAoB,EAAE,CAAC;oBACjE,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE;wBACpC,YAAY;wBACZ,cAAc;wBACd,gBAAgB;wBAChB,WAAW;qBACZ,CAAC,CAAC;oBACH,KAAK,MAAM,GAAG,IAAI;wBAChB,YAAY;wBACZ,cAAc;wBACd,gBAAgB;wBAChB,WAAW;qBACH,EAAE,CAAC;wBACX,IACE,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;4BAChC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;4BACb,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC;4BAE1B,MAAM,IAAI,oBAAoB,EAAE,CAAC;oBACrC,CAAC;oBACD,IACE,IAAI,CAAC,SAAS,GAAG,CAAC;wBAClB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM;wBACvC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;wBAEhD,MAAM,IAAI,oBAAoB,EAAE,CAAC;oBACnC,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;oBAC7B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK;wBAAE,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;oBAC3D,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI;wBAAE,MAAM;oBACpC,iBAAiB,CAAC,IAAI,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAC;oBACvD,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC;wBAAE,MAAM,IAAI,oBAAoB,EAAE,CAAC;oBAChE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;oBAC1B,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC;gBAC3B,CAAC;YACH,CAAC;YACD,IAAI,UAAU,CAAC,IAAI,GAAG,MAAM,CAAC,aAAa;gBACxC,MAAM,IAAI,oBAAoB,EAAE,CAAC;YACnC,MAAM,OAAO,GAAgB,EAAE,CAAC;YAChC,KAAK,MAAM,SAAS,IAAI,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC;gBAC5C,MAAM,CAAC,aAAa,EAAE,CAAC;gBACvB,MAAM,UAAU,GAAG,MAAM,UAAU,CAAC,sBAAsB,CACxD,SAAS,EACT,SAAS,CAAC,SAAS,CACpB,CAAC;gBACF,qEAAqE;gBACrE,qEAAqE;gBACrE,IAAI,UAAU,KAAK,IAAI;oBAAE,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACnD,CAAC;YACD,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAClC,gBAAgB,KAAK,SAAS;gBAC5B,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI;oBAClC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC;gBAC1C,CAAC,CAAC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CACrC,CAAC;QACJ,CAAC;QAED,KAAK,UAAU,MAAM,CACnB,MAAqB,EACrB,aAAgC,EAChC,KAAwB,EACxB,aAA4B,EAC5B,OAAgB,EAChB,WAAmB;YAEnB,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,EAAE,CAAC;YAC/D,MAAM,MAAM,GAAsB,EAAE,CAAC;YACrC,oEAAoE;YACpE,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE,CAAC;gBACzC,MAAM,UAAU,GAAG,MAAM,mBAAmB,CAC1C,MAAM,EACN,YAAY,EACZ,OAAO,CACR,CAAC;gBACF,IAAI,UAAU,KAAK,IAAI;oBAAE,OAAO,EAAE,CAAC;gBACnC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC1B,CAAC;YACD,MAAM,UAAU,GAAG,MAAM,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YACnD,MAAM,SAAS,GAIT,EAAE,CAAC;YACT,mEAAmE;YACnE,gEAAgE;YAChE,KAAK,MAAM,SAAS,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAC;gBACrE,MAAM,CAAC,YAAY,EAAE,CAAC;gBACtB,IAAI,OAA2B,CAAC;gBAChC,IAAI,CAAC;oBACH,OAAO,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC;wBAC5B,SAAS,EAAE,SAAS,CAAC,SAAS;wBAC9B,OAAO;wBACP,MAAM;wBACN,aAAa;qBACd,CAAC,CAAC;gBACL,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,IAAI,KAAK,YAAY,0BAA0B;wBAAE,SAAS;oBAC1D,MAAM,KAAK,CAAC;gBACd,CAAC;gBACD,IACE,CAAC,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CACjC,CAAC,IAAI,EAAE,EAAE,CACP,IAAI,CAAC,SAAS,KAAK,OAAO,CAAC,OAAO,CAAC,SAAS;oBAC5C,IAAI,CAAC,YAAY,KAAK,OAAO,CAAC,OAAO,CAAC,YAAY;oBAClD,IAAI,CAAC,aAAa,KAAK,OAAO,CAAC,OAAO,CAAC,uBAAuB;oBAC9D,IAAI,CAAC,eAAe,KAAK,OAAO,CAAC,OAAO,CAAC,QAAQ;oBACjD,IAAI,CAAC,WAAW,KAAK,OAAO,CAAC,OAAO,CAAC,WAAW,CACnD;oBAED,SAAS;gBACX,MAAM,KAAK,GAAG,qBAAqB,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;gBAC5D,sEAAsE;gBACtE,wDAAwD;gBACxD,IAAI,KAAK,GAAG,CAAC,IAAI,gBAAgB,KAAK,SAAS;oBAC7C,SAAS,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,CAAC,SAAS,EAAE,CAAC,CAAC;YACvE,CAAC;YACD,SAAS,CAAC,IAAI,CACZ,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CACd,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK;gBACxB,CAAC,gBAAgB,KAAK,SAAS;oBAC7B,CAAC,CAAC,OAAO,CACL,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,EAC9B,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAChC;oBACH,CAAC,CAAC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,CACxC,CAAC;YACF,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC;QACvE,CAAC;QAED,KAAK,UAAU,YAAY,CACzB,OAAsC,EACtC,gBAAgB,GAAG,KAAK;YAExB,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,YAAY,EAAE,KAAK,KAAK,UAAU;gBACnE,OAAO,SAAS,EAAE,CAAC;YACrB,KAAK,IAAI,KAAK,GAAG,OAAO,CAAC,MAAM,EAAE,KAAK,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;gBACvD,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;gBACzC,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBACvC,MAAM,iBAAiB,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;gBACjD,IACE,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,UAAU;oBACtD,MAAM,CAAC,eAAe,EACtB,CAAC;oBACD,IAAI,YAAoB,CAAC;oBACzB,IAAI,CAAC;wBACH,YAAY,GAAG,YAAY,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;oBACvD,CAAC;oBAAC,MAAM,CAAC;wBACP,OAAO,SAAS,EAAE,CAAC;oBACrB,CAAC;oBACD,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,YAAY,CAAC,IAAI,YAAY,IAAI,CAAC;wBAC1D,OAAO,SAAS,EAAE,CAAC;oBACrB,IAAI,YAAY,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;wBAC3C,KAAK,MAAM,MAAM,IAAI,QAAQ;4BAAE,MAAM,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;wBAC7D,OAAO;4BACL,OAAO,EAAE,SAAS;4BAClB,OAAO;4BACP,iBAAiB;4BACjB,YAAY;yBACb,CAAC;oBACJ,CAAC;gBACH,CAAC;gBACD,mEAAmE;gBACnE,wDAAwD;gBACxD,IAAI,CAAC,gBAAgB;oBAAE,OAAO,SAAS,EAAE,CAAC;YAC5C,CAAC;YACD,OAAO,SAAS,EAAE,CAAC;QACrB,CAAC;QAED,OAAO;YACL,MAAM;YACN,UAAU;YACV,KAAK;YACL,OAAO;YACP,mBAAmB;YACnB,MAAM;YACN,YAAY;SACb,CAAC;IACJ,CAAC;IAED,SAAS,UAAU,CAAC,KAAa;QAC/B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,kBAAkB,EAAE,CAAC;YAC1E,MAAM,IAAI,SAAS,CAAC,8CAA8C,CAAC,CAAC;QACtE,CAAC;QACD,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;QACpC,IAAI,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,aAAa;YACrC,MAAM,IAAI,SAAS,CAAC,yCAAyC,CAAC,CAAC;QACjE,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO;QACL,KAAK,CAAC,qBAAqB,CAAC,MAAM,EAAE,OAAO;YACzC,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;YACpC,MAAM,KAAK,GAAG,aAAa,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;YAChD,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,uBAAuB,CAAC,CAAC;YAC1E,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC;gBAAE,OAAO,aAAa,EAAE,CAAC;YACvD,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,YAAY,EAAE,CAAC;gBAC7B,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;gBAC9C,IAAI,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,uBAAuB;oBAAE,OAAO,aAAa,EAAE,CAAC;gBACxE,MAAM,UAAU,GAAsB,EAAE,CAAC;gBACzC,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;oBACrB,iBAAiB,CAAC,EAAE,EAAE,cAAc,CAAC,CAAC;oBACtC,MAAM,UAAU,GAAG,MAAM,KAAK,CAAC,mBAAmB,CAChD,MAAM,EACN,EAAE,EACF,QAAQ,CACT,CAAC;oBACF,IAAI,UAAU,KAAK,IAAI;wBAAE,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBACvD,CAAC;gBACD,MAAM,QAAQ,GAAG,UAAU;qBACxB,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CACpB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,CAC3D;qBACA,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;gBACnB,KAAK,MAAM,UAAU,IAAI,QAAQ,EAAE,CAAC;oBAClC,IACE,CAAC,MAAM,KAAK,CAAC,UAAU,CAAC,sBAAsB,CAC5C,YAAY,EACZ,UAAU,CAAC,KAAK,CAAC,YAAY,CAC9B,CAAC,KAAK,UAAU,CAAC,oBAAoB,EACtC,CAAC;wBACD,OAAO,aAAa,EAAE,CAAC;oBACzB,CAAC;gBACH,CAAC;gBACD,OAAO,QAAQ,CAAC,MAAM,KAAK,CAAC;oBAC1B,CAAC,CAAC,aAAa,EAAE;oBACjB,CAAC,CAAC;wBACE,OAAO,EAAE,SAAS;wBAClB,WAAW,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;4BACzC,YAAY,EAAE,UAAU,CAAC,KAAK,CAAC,YAAY;4BAC3C,KAAK,EAAE,UAAU,CAAC,KAAK;yBACxB,CAAC,CAAC;qBACJ,CAAC;YACR,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,aAAa,EAAE,CAAC;YACzB,CAAC;QACH,CAAC;QAED,KAAK,CAAC,uBAAuB,CAAC,MAAM,EAAE,OAAO;YAC3C,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;YACpC,MAAM,KAAK,GAAG,aAAa,CAAC,OAAO,EAAE;gBACnC,cAAc;gBACd,OAAO;gBACP,eAAe;gBACf,OAAO;aACR,CAAC,CAAC;YACH,iBAAiB,CAAC,KAAK,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;YACtD,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACtC,MAAM,aAAa,GAAG,qBAAqB,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;YACjE,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;YAC7D,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,YAAY,EAAE,CAAC;gBAC7B,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,MAAM,CAChC,MAAM,EACN,CAAC,KAAK,CAAC,YAAY,CAAC,EACpB,KAAK,EACL,aAAa,EACb,QAAQ,EACR,KAAK,CACN,CAAC;gBACF,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;gBAC9C,IACE,QAAQ,CAAC,MAAM,KAAK,CAAC;oBACrB,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU;wBAC1D,MAAM,CAAC,eAAe;oBAExB,OAAO,cAAc,EAAE,CAAC;gBAC1B,KAAK,MAAM,OAAO,IAAI,OAAO;oBAAE,MAAM,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBACpE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;YAC1C,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,cAAc,EAAE,CAAC;YAC1B,CAAC;QACH,CAAC;QAED,KAAK,CAAC,qBAAqB,CAAC,uBAAuB,EAAE,OAAO;YAC1D,MAAM,MAAM,GAAG,YAAY,CAAC,uBAAuB,CAAC,CAAC;YACrD,MAAM,KAAK,GAAG,aAAa,CAAC,OAAO,EAAE;gBACnC,eAAe;gBACf,OAAO;gBACP,eAAe;gBACf,OAAO;aACR,CAAC,CAAC;YACH,IACE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC;gBACnC,KAAK,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC;gBAChC,KAAK,CAAC,aAAa,CAAC,MAAM,GAAG,MAAM,CAAC,iBAAiB,EACrD,CAAC;gBACD,MAAM,IAAI,SAAS,CAAC,4CAA4C,CAAC,CAAC;YACpE,CAAC;YACD,KAAK,MAAM,EAAE,IAAI,KAAK,CAAC,aAAa;gBAClC,iBAAiB,CAAC,EAAE,EAAE,cAAc,CAAC,CAAC;YACxC,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,aAAa,CAAC,MAAM;gBAClE,MAAM,IAAI,SAAS,CAAC,+BAA+B,CAAC,CAAC;YACvD,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACtC,MAAM,aAAa,GAAG,qBAAqB,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;YACjE,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;YAC7D,IAAI,OAAO,YAAY,EAAE,KAAK,KAAK,UAAU;gBAAE,OAAO,SAAS,EAAE,CAAC;YAClE,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,YAAY,EAAE,CAAC;gBAC7B,OAAO,MAAM,KAAK,CAAC,YAAY,CAC7B,MAAM,KAAK,CAAC,MAAM,CAChB,MAAM,EACN,KAAK,CAAC,aAAa,EACnB,KAAK,EACL,aAAa,EACb,KAAK,EACL,KAAK,CACN,EACD,IAAI,CACL,CAAC;YACJ,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,SAAS,EAAE,CAAC;YACrB,CAAC;QACH,CAAC;QAED,KAAK,CAAC,oBAAoB,CAAC,uBAAuB,EAAE,OAAO;YACzD,MAAM,MAAM,GAAG,YAAY,CAAC,uBAAuB,CAAC,CAAC;YACrD,MAAM,KAAK,GAAG,aAAa,CAAC,OAAO,EAAE,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC,CAAC;YACtE,MAAM,aAAa,GAAG,qBAAqB,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;YACjE,IACE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC;gBAChC,KAAK,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC;gBAC7B,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC,UAAU,EAC3C,CAAC;gBACD,MAAM,IAAI,SAAS,CAAC,+CAA+C,CAAC,CAAC;YACvE,CAAC;YACD,KAAK,MAAM,SAAS,IAAI,KAAK,CAAC,UAAU;gBAAE,iBAAiB,CAAC,SAAS,CAAC,CAAC;YACvE,IACE,IAAI,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;iBAC9D,IAAI,KAAK,KAAK,CAAC,UAAU,CAAC,MAAM;gBACnC,IAAI,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;qBACjE,IAAI,GAAG,MAAM,CAAC,iBAAiB;gBAElC,MAAM,IAAI,SAAS,CACjB,uEAAuE,CACxE,CAAC;YACJ,IAAI,OAAO,YAAY,EAAE,KAAK,KAAK,UAAU,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC;gBACtE,OAAO,SAAS,EAAE,CAAC;YACrB,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,YAAY,EAAE,CAAC;gBAC7B,KAAK,MAAM,YAAY,IAAI,IAAI,GAAG,CAChC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,YAAY,CAAC,CAC5D,EAAE,CAAC;oBACF,IACE,CAAC,MAAM,KAAK,CAAC,mBAAmB,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC;wBAC9D,IAAI;wBAEJ,OAAO,SAAS,EAAE,CAAC;gBACvB,CAAC;gBACD,MAAM,OAAO,GAAyB,EAAE,CAAC;gBACzC,KAAK,MAAM,SAAS,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;oBACzC,KAAK,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;oBAC7B,IACE,CAAC,MAAM,KAAK,CAAC,UAAU,CAAC,sBAAsB,CAC5C,SAAS,EACT,SAAS,CAAC,SAAS,CACpB,CAAC,KAAK,SAAS,CAAC,qBAAqB;wBAEtC,OAAO,SAAS,EAAE,CAAC;oBACrB,KAAK,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;oBAC5B,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;wBAC1C,SAAS,EAAE,SAAS,CAAC,SAAS;wBAC9B,OAAO,EAAE,KAAK;wBACd,MAAM,EAAE,MAAM;wBACd,aAAa;qBACd,CAAC,CAAC;oBACH,IACE,aAAa,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,KAAK,aAAa,CAAC,SAAS,CAAC;wBAElE,OAAO,SAAS,EAAE,CAAC;oBACrB,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAC1B,CAAC;gBACD,OAAO,MAAM,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;YAC3C,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,SAAS,EAAE,CAAC;YACrB,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,23 @@
1
+ import type { StoredRecord } from "@pegma/storage-core";
2
+ export declare class RepositoryConflictError extends Error {
3
+ readonly name = "RepositoryConflictError";
4
+ constructor();
5
+ }
6
+ export declare class RepositoryCapacityError extends Error {
7
+ readonly budget: string;
8
+ readonly name = "RepositoryCapacityError";
9
+ constructor(budget: string);
10
+ }
11
+ export declare class RepositoryIntegrityError extends Error {
12
+ readonly name = "RepositoryIntegrityError";
13
+ constructor();
14
+ }
15
+ /** Snapshots data properties only; no getters, sparse arrays, or JSON coercion. */
16
+ export declare function canonicalJson(value: unknown): string;
17
+ export declare function snapshotData<T>(value: T): T;
18
+ export declare function fingerprint(value: unknown): Promise<string>;
19
+ export declare const commandFingerprint: typeof fingerprint;
20
+ export declare function requireIdentifier(value: string, field?: string): void;
21
+ export declare function requireGeneration(value: number, minimum?: number): void;
22
+ export declare function encodedBytes(record: StoredRecord): number;
23
+ //# sourceMappingURL=storage-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage-helpers.d.ts","sourceRoot":"","sources":["../src/storage-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD,qBAAa,uBAAwB,SAAQ,KAAK;IAChD,SAAkB,IAAI,6BAA6B;IACnD,cAEC;CACF;AAED,qBAAa,uBAAwB,SAAQ,KAAK;IAEpC,QAAQ,CAAC,MAAM,EAAE,MAAM;IADnC,SAAkB,IAAI,6BAA6B;IACnD,YAAqB,MAAM,EAAE,MAAM,EAElC;CACF;AAED,qBAAa,wBAAyB,SAAQ,KAAK;IACjD,SAAkB,IAAI,8BAA8B;IACpD,cAEC;CACF;AAED,mFAAmF;AACnF,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAqFpD;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAE3C;AAED,wBAAsB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAMjE;AAED,eAAO,MAAM,kBAAkB,oBAAc,CAAC;AAE9C,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,SAAe,GAAG,IAAI,CAoB3E;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,SAAI,GAAG,IAAI,CAIlE;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAEzD"}