@superbee/core 0.2.0-pre.16 → 0.2.0-pre.17

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 (109) hide show
  1. package/README.md +107 -4
  2. package/dist/bundle-health/index.d.ts +14 -0
  3. package/dist/bundle-health/index.d.ts.map +1 -0
  4. package/dist/bundle-health/index.js +12 -0
  5. package/dist/bundle-health/index.js.map +1 -0
  6. package/dist/bundle-health/kind-findings.d.ts +44 -0
  7. package/dist/bundle-health/kind-findings.d.ts.map +1 -0
  8. package/dist/bundle-health/kind-findings.js +68 -0
  9. package/dist/bundle-health/kind-findings.js.map +1 -0
  10. package/dist/bundle-health/legacy-page.d.ts +39 -0
  11. package/dist/bundle-health/legacy-page.d.ts.map +1 -0
  12. package/dist/bundle-health/legacy-page.js +50 -0
  13. package/dist/bundle-health/legacy-page.js.map +1 -0
  14. package/dist/bundle-health/report.d.ts +202 -0
  15. package/dist/bundle-health/report.d.ts.map +1 -0
  16. package/dist/bundle-health/report.js +438 -0
  17. package/dist/bundle-health/report.js.map +1 -0
  18. package/dist/hosted-client/write.d.ts +10 -1
  19. package/dist/hosted-client/write.d.ts.map +1 -1
  20. package/dist/hosted-client/write.js +9 -4
  21. package/dist/hosted-client/write.js.map +1 -1
  22. package/dist/hosted-transport/answer-rows.d.ts +3 -2
  23. package/dist/hosted-transport/answer-rows.d.ts.map +1 -1
  24. package/dist/hosted-transport/answer-rows.js +1 -1
  25. package/dist/hosted-transport/answer-rows.js.map +1 -1
  26. package/dist/hosted-transport/whole-document-transport.d.ts +1 -1
  27. package/dist/hosted-transport/whole-document-transport.d.ts.map +1 -1
  28. package/dist/hosted-transport/whole-document-transport.js +20 -12
  29. package/dist/hosted-transport/whole-document-transport.js.map +1 -1
  30. package/dist/index.d.ts +2 -1
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/index.js +1 -1
  33. package/dist/index.js.map +1 -1
  34. package/dist/kinds-load.js +4 -4
  35. package/dist/kinds-load.js.map +1 -1
  36. package/dist/kinds.d.ts.map +1 -1
  37. package/dist/kinds.js +3 -2
  38. package/dist/kinds.js.map +1 -1
  39. package/dist/paths.d.ts +16 -0
  40. package/dist/paths.d.ts.map +1 -1
  41. package/dist/paths.js +25 -0
  42. package/dist/paths.js.map +1 -1
  43. package/dist/query-filter.d.ts +9 -0
  44. package/dist/query-filter.d.ts.map +1 -1
  45. package/dist/query-filter.js +19 -3
  46. package/dist/query-filter.js.map +1 -1
  47. package/dist/record-overlay/apply.d.ts +43 -0
  48. package/dist/record-overlay/apply.d.ts.map +1 -0
  49. package/dist/record-overlay/apply.js +490 -0
  50. package/dist/record-overlay/apply.js.map +1 -0
  51. package/dist/record-overlay/canonical.d.ts +14 -0
  52. package/dist/record-overlay/canonical.d.ts.map +1 -0
  53. package/dist/record-overlay/canonical.js +31 -0
  54. package/dist/record-overlay/canonical.js.map +1 -0
  55. package/dist/record-overlay/digest.d.ts +4 -0
  56. package/dist/record-overlay/digest.d.ts.map +1 -0
  57. package/dist/record-overlay/digest.js +11 -0
  58. package/dist/record-overlay/digest.js.map +1 -0
  59. package/dist/record-overlay/errors.d.ts +40 -0
  60. package/dist/record-overlay/errors.d.ts.map +1 -0
  61. package/dist/record-overlay/errors.js +51 -0
  62. package/dist/record-overlay/errors.js.map +1 -0
  63. package/dist/record-overlay/findings.d.ts +5 -0
  64. package/dist/record-overlay/findings.d.ts.map +1 -0
  65. package/dist/record-overlay/findings.js +83 -0
  66. package/dist/record-overlay/findings.js.map +1 -0
  67. package/dist/record-overlay/index.d.ts +23 -0
  68. package/dist/record-overlay/index.d.ts.map +1 -0
  69. package/dist/record-overlay/index.js +21 -0
  70. package/dist/record-overlay/index.js.map +1 -0
  71. package/dist/record-overlay/plan.d.ts +12 -0
  72. package/dist/record-overlay/plan.d.ts.map +1 -0
  73. package/dist/record-overlay/plan.js +284 -0
  74. package/dist/record-overlay/plan.js.map +1 -0
  75. package/dist/record-overlay/policy.d.ts +60 -0
  76. package/dist/record-overlay/policy.d.ts.map +1 -0
  77. package/dist/record-overlay/policy.js +209 -0
  78. package/dist/record-overlay/policy.js.map +1 -0
  79. package/dist/record-overlay/redact.d.ts +3 -0
  80. package/dist/record-overlay/redact.d.ts.map +1 -0
  81. package/dist/record-overlay/redact.js +27 -0
  82. package/dist/record-overlay/redact.js.map +1 -0
  83. package/dist/record-overlay/signal-kind.d.ts +30 -0
  84. package/dist/record-overlay/signal-kind.d.ts.map +1 -0
  85. package/dist/record-overlay/signal-kind.js +38 -0
  86. package/dist/record-overlay/signal-kind.js.map +1 -0
  87. package/dist/record-overlay/signal-text.d.ts +45 -0
  88. package/dist/record-overlay/signal-text.d.ts.map +1 -0
  89. package/dist/record-overlay/signal-text.js +116 -0
  90. package/dist/record-overlay/signal-text.js.map +1 -0
  91. package/dist/record-overlay/source-index.d.ts +19 -0
  92. package/dist/record-overlay/source-index.d.ts.map +1 -0
  93. package/dist/record-overlay/source-index.js +102 -0
  94. package/dist/record-overlay/source-index.js.map +1 -0
  95. package/dist/record-overlay/types.d.ts +286 -0
  96. package/dist/record-overlay/types.d.ts.map +1 -0
  97. package/dist/record-overlay/types.js +2 -0
  98. package/dist/record-overlay/types.js.map +1 -0
  99. package/dist/remote-operations.js +5 -2
  100. package/dist/remote-operations.js.map +1 -1
  101. package/dist/storage.d.ts +2 -1
  102. package/dist/storage.d.ts.map +1 -1
  103. package/dist/storage.js +1 -1
  104. package/dist/storage.js.map +1 -1
  105. package/dist/uncertain-write.d.ts +39 -6
  106. package/dist/uncertain-write.d.ts.map +1 -1
  107. package/dist/uncertain-write.js +25 -3
  108. package/dist/uncertain-write.js.map +1 -1
  109. package/package.json +9 -1
@@ -0,0 +1,102 @@
1
+ /**
2
+ * A per-run `sources[]` identity index built from one head read.
3
+ *
4
+ * Bounded to one run: build it after the run starts, pass it to every plan and apply of that run,
5
+ * and discard it. Overlay writes never create overlays, and the apply's `replace` keeps the
6
+ * versions it changes current, so the run's own writes cannot make it stale. An edited or deleted
7
+ * overlay is still caught at write time by the compare-and-swap and the identity guard. A second
8
+ * document given an indexed identity during the run is not seen: the write lands on the first
9
+ * claimant and the next run, with a fresh index, refuses both as ambiguous.
10
+ */
11
+ import { queryHeads } from "../bundle-ops.js";
12
+ import { sourceIdentityOf } from "../query-filter.js";
13
+ const byId = (a, b) => a.id.localeCompare(b.id);
14
+ /** The `(resource, id)` pairs a frontmatter carries, once per entry naming both, by core's identity rule. */
15
+ function identities(frontmatter) {
16
+ const sources = frontmatter.sources;
17
+ if (!Array.isArray(sources))
18
+ return [];
19
+ const out = [];
20
+ for (const entry of sources) {
21
+ const own = sourceIdentityOf(entry);
22
+ if (own?.resource !== undefined && own.id !== undefined)
23
+ out.push({ resource: own.resource, id: own.id });
24
+ }
25
+ return out;
26
+ }
27
+ export class SourceIndex {
28
+ #entries = new Map();
29
+ #documents = new Map();
30
+ static fromHeads(heads) {
31
+ const index = new SourceIndex();
32
+ for (const head of heads)
33
+ index.#add(head);
34
+ for (const ids of index.#entries.values())
35
+ for (const rows of ids.values())
36
+ rows.sort(byId);
37
+ return index;
38
+ }
39
+ /**
40
+ * Heads whose `sources` carry `(resource, id)`, in id order. A document carrying the identity
41
+ * twice is returned twice, so the caller sees it as ambiguous.
42
+ */
43
+ lookup(resource, id, opts = {}) {
44
+ const rows = this.#entries.get(resource)?.get(id) ?? [];
45
+ return opts.type === undefined ? [...rows] : rows.filter((head) => head.frontmatter.type === opts.type);
46
+ }
47
+ /** Re-derive one document's entries from a write's result. */
48
+ replace(doc, version) {
49
+ this.#remove(doc.id);
50
+ const head = { id: doc.id, frontmatter: doc.frontmatter, version };
51
+ this.#add(head);
52
+ for (const { resource, id } of identities(head.frontmatter)) {
53
+ this.#entries.get(resource)?.get(id)?.sort(byId);
54
+ }
55
+ }
56
+ /** Documents carrying at least one well-formed identity. */
57
+ get size() {
58
+ return this.#documents.size;
59
+ }
60
+ #add(head) {
61
+ const pairs = identities(head.frontmatter);
62
+ if (pairs.length === 0)
63
+ return;
64
+ this.#documents.set(head.id, head);
65
+ for (const { resource, id } of pairs) {
66
+ let ids = this.#entries.get(resource);
67
+ if (!ids)
68
+ this.#entries.set(resource, ids = new Map());
69
+ let rows = ids.get(id);
70
+ if (!rows)
71
+ ids.set(id, rows = []);
72
+ rows.push(head);
73
+ }
74
+ }
75
+ #remove(docId) {
76
+ const old = this.#documents.get(docId);
77
+ if (!old)
78
+ return;
79
+ this.#documents.delete(docId);
80
+ for (const { resource, id } of identities(old.frontmatter)) {
81
+ const ids = this.#entries.get(resource);
82
+ const rows = ids?.get(id);
83
+ if (!ids || !rows)
84
+ continue;
85
+ const kept = rows.filter((head) => head.id !== docId);
86
+ if (kept.length)
87
+ ids.set(id, kept);
88
+ else
89
+ ids.delete(id);
90
+ }
91
+ }
92
+ }
93
+ /** One head read of `bundle` (optionally narrowed by type or prefix), indexed by identity. */
94
+ export async function buildSourceIndex(bundle, filter = {}) {
95
+ const narrowed = {};
96
+ if (filter.type !== undefined)
97
+ narrowed.type = filter.type;
98
+ if (filter.prefix !== undefined)
99
+ narrowed.prefix = filter.prefix;
100
+ return SourceIndex.fromHeads(await queryHeads(bundle, narrowed));
101
+ }
102
+ //# sourceMappingURL=source-index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source-index.js","sourceRoot":"","sources":["../../src/record-overlay/source-index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,286 @@
1
+ /** Types of `@superbee/core/record-overlay`. Step and result rows keep the record-bridge keys. */
2
+ import type { DocumentMutationCandidate } from "../document-mutation.js";
3
+ import type { KindConvention, KindRegistry } from "../kinds.js";
4
+ import type { Bundle, ConceptId, Frontmatter, OkfDocument, Version } from "../types.js";
5
+ import type { RefusalCode } from "./errors.js";
6
+ import type { SourceIndex } from "./source-index.js";
7
+ /** One bundle as the overlay reads and writes it. */
8
+ export interface OverlayBundle {
9
+ bundle: Bundle;
10
+ registry: KindRegistry;
11
+ okfVersion: "0.1" | "0.2";
12
+ }
13
+ /** The generic Source Feed policy: which fields a feed owns and what each change kind may do. */
14
+ export interface OverlayPolicy {
15
+ feed: ConceptId;
16
+ /** The provider identity (`url`), as `sources[].resource` names it. */
17
+ provider: string;
18
+ /** The Kind of the overlay documents. Absent for a record-only or presentation-only feed. */
19
+ target_kind?: string;
20
+ owned_fields: string[];
21
+ auto_apply: string[];
22
+ needs_review: string[];
23
+ missing_threshold?: number;
24
+ completeness?: "complete" | "partial";
25
+ /** The feed's wall-time zone, validated by whoever owns the interval hook. */
26
+ time_zone?: string;
27
+ exclude?: RegExp | null;
28
+ exclude_ids?: ReadonlySet<string> | null;
29
+ }
30
+ /** Field checks for the reader: the target Kind's declared fields, or a presentation kind's fields. */
31
+ export type PolicyContext = {
32
+ targetKind?: KindConvention;
33
+ presentationFields?: never;
34
+ } | {
35
+ presentationFields: readonly string[];
36
+ targetKind?: never;
37
+ };
38
+ /** One change the caller's diff observed for one external record. */
39
+ export interface RecordChange {
40
+ external_id: string;
41
+ change_kind: string;
42
+ changed_fields: string[];
43
+ before: Record<string, unknown> | null;
44
+ after: Record<string, unknown> | null;
45
+ content_digest: string;
46
+ occurs_at?: string;
47
+ missing_count?: number;
48
+ first_missing_at?: string;
49
+ collapse_with?: string[];
50
+ signal_priority?: string;
51
+ }
52
+ export interface Tell {
53
+ code: string;
54
+ match: string;
55
+ [property: string]: unknown;
56
+ }
57
+ /** A publication text gate: the text as it may be written, and whether it may be written at all. */
58
+ export type TextGate = (text: string, context: {
59
+ field: string;
60
+ kind: string | undefined;
61
+ }) => {
62
+ text: string;
63
+ ok: boolean;
64
+ tells: Tell[];
65
+ changed?: boolean;
66
+ };
67
+ /** `[startMs, endMs)` of a record's last known occurrence, or null when its dates are unknown. */
68
+ export type IntervalHook = (fields: Record<string, unknown>, timeZone: string | undefined) => readonly [number, number] | null;
69
+ export type DisappearedPhase = "ended" | "before-start" | "ongoing" | null;
70
+ export interface CorrelateHook {
71
+ kind: string;
72
+ match: (fields: Record<string, unknown>, frontmatter: Frontmatter, externalId: string) => null | undefined | {
73
+ reason: string;
74
+ priority?: string;
75
+ };
76
+ }
77
+ /** Runs on every fresh candidate through `mutateDocument`, after the core-owned guards. */
78
+ export type AssertCandidate = (existing: OkfDocument | undefined, candidate: DocumentMutationCandidate) => void | Promise<void>;
79
+ export interface OverlayHooks {
80
+ textGate?: TextGate;
81
+ interval?: IntervalHook;
82
+ correlate?: CorrelateHook;
83
+ /** Scalar properties for the `sources` entry of an applied record; none means no upsert. */
84
+ sourceProperties?: (change: RecordChange) => Record<string, string | number | boolean> | undefined;
85
+ /** Site rules, run after the core-owned guards on the same fresh read. */
86
+ assertCandidate?: (existing: OkfDocument | undefined, candidate: DocumentMutationCandidate, context: {
87
+ step: OverlayStep["op"];
88
+ bundle: "content" | "ops";
89
+ }) => void | Promise<void>;
90
+ /** Fields derived in the same write as the owned fields (for example `updated_at`). */
91
+ deriveFields?: {
92
+ fields: readonly string[];
93
+ derive: (existing: OkfDocument, next: DocumentMutationCandidate) => Record<string, unknown>;
94
+ };
95
+ }
96
+ export interface ChangeDecision {
97
+ apply: Record<string, {
98
+ from: unknown;
99
+ to: unknown;
100
+ }>;
101
+ conflicts: Array<{
102
+ field: string;
103
+ doc_value: unknown;
104
+ feed_before: unknown;
105
+ feed_after: unknown;
106
+ }>;
107
+ editorFields: string[];
108
+ wording: Array<{
109
+ field: string;
110
+ text: string;
111
+ tells: Tell[];
112
+ }>;
113
+ signal: null | {
114
+ priority: string;
115
+ reasons: string[];
116
+ };
117
+ }
118
+ export interface PlanInput {
119
+ content: OverlayBundle;
120
+ ops: OverlayBundle;
121
+ policy: OverlayPolicy;
122
+ changes: readonly RecordChange[];
123
+ observedAt: string;
124
+ /** Next store records, for titles. */
125
+ records?: Record<string, {
126
+ fields?: Record<string, unknown>;
127
+ }>;
128
+ observation?: {
129
+ baseline?: boolean;
130
+ replay?: boolean;
131
+ stats?: Record<string, unknown>;
132
+ };
133
+ /** A per-run identity index; without one the plan builds its own for this provider and Kind. */
134
+ overlays?: SourceIndex;
135
+ timeZone?: string;
136
+ /** Ops and content are one bundle, so typed `about` links are possible. */
137
+ sameBundle?: boolean;
138
+ /** Attention and feed Kind names; default `Signal` and `Source Feed`. */
139
+ signals?: {
140
+ kind?: string;
141
+ feedKind?: string;
142
+ };
143
+ hooks?: OverlayHooks;
144
+ }
145
+ export interface Finding {
146
+ key: string;
147
+ title: string;
148
+ summary?: string;
149
+ priority?: string;
150
+ about_doc?: string;
151
+ related?: string[];
152
+ facts?: unknown;
153
+ sources?: Array<{
154
+ resource: string;
155
+ id?: string;
156
+ title?: string;
157
+ [property: string]: unknown;
158
+ }>;
159
+ external_id?: string;
160
+ expires_at?: string;
161
+ change_kind?: string;
162
+ }
163
+ export interface FindingsInput {
164
+ ops: OverlayBundle;
165
+ /** Signal `provider`: a feed URL or a tool name. */
166
+ provider: string;
167
+ /** Source Feed id for the `from feed` link; absent for tool-raised findings. */
168
+ feed?: ConceptId;
169
+ /** Signal id prefix after the attention Kind's path. */
170
+ slug: string;
171
+ findings: readonly Finding[] | null | undefined;
172
+ observedAt: string;
173
+ signals?: {
174
+ kind?: string;
175
+ feedKind?: string;
176
+ };
177
+ }
178
+ export interface ApplyContext {
179
+ content: OverlayBundle;
180
+ ops: OverlayBundle;
181
+ policy: Pick<OverlayPolicy, "owned_fields" | "provider" | "target_kind">;
182
+ actor: string;
183
+ overlays?: SourceIndex;
184
+ /** Attention and feed Kind names, as the plan was made with; default `Signal` and `Source Feed`. */
185
+ signals?: {
186
+ kind?: string;
187
+ feedKind?: string;
188
+ };
189
+ hooks?: Pick<OverlayHooks, "assertCandidate" | "deriveFields">;
190
+ }
191
+ export interface ApplyOwnedFieldsStep {
192
+ op: "apply-owned-fields";
193
+ target: ConceptId;
194
+ expected_version: Version;
195
+ external_id: string;
196
+ change_kind: string;
197
+ fields: Record<string, {
198
+ from: unknown;
199
+ to: unknown;
200
+ }>;
201
+ /** Grouped shape: properties upserted on the record's `sources` entry in the same write. */
202
+ sources?: Record<string, string | number | boolean>;
203
+ }
204
+ export interface CreateSignalStep {
205
+ op: "create-signal";
206
+ target: ConceptId;
207
+ external_id: string;
208
+ content_digest: string;
209
+ finding?: string;
210
+ reasons: string[];
211
+ candidate: {
212
+ frontmatter: Frontmatter;
213
+ body: string;
214
+ };
215
+ }
216
+ export interface CollapseSignalStep {
217
+ op: "collapse-signal";
218
+ target: ConceptId;
219
+ expected_version: Version;
220
+ external_id: string;
221
+ content_digest: string;
222
+ finding?: string;
223
+ progress_field: string;
224
+ observation_line: string;
225
+ set: Record<string, unknown>;
226
+ }
227
+ export interface SignalDuplicateStep {
228
+ op: "signal-duplicate";
229
+ target: ConceptId;
230
+ external_id: string;
231
+ content_digest: string;
232
+ finding?: string;
233
+ }
234
+ export interface RecordOnlyStep {
235
+ op: "record-only";
236
+ target?: undefined;
237
+ external_id: string;
238
+ change_kind?: string;
239
+ superseded?: true;
240
+ ended?: true;
241
+ reason?: string;
242
+ last_known_end?: string;
243
+ excluded?: true;
244
+ collapsed_into?: ConceptId;
245
+ }
246
+ export type OverlayStep = ApplyOwnedFieldsStep | CreateSignalStep | CollapseSignalStep | SignalDuplicateStep | RecordOnlyStep;
247
+ export interface RefusalRow {
248
+ code: RefusalCode;
249
+ external_id: string;
250
+ target?: ConceptId;
251
+ targets?: ConceptId[];
252
+ field?: string;
253
+ message: string;
254
+ }
255
+ export interface OverlayPlan {
256
+ feed: ConceptId | null;
257
+ provider: string;
258
+ observed_at: string;
259
+ baseline?: boolean;
260
+ replay?: boolean;
261
+ stats?: Record<string, unknown>;
262
+ steps: OverlayStep[];
263
+ refusals: RefusalRow[];
264
+ diagnostics?: unknown[];
265
+ }
266
+ export interface StepResult {
267
+ op: OverlayStep["op"];
268
+ target: ConceptId | null;
269
+ external_id: string;
270
+ outcome: "applied" | "unchanged" | "skipped" | "refused";
271
+ version?: Version;
272
+ code?: RefusalCode;
273
+ message?: string;
274
+ details?: Record<string, unknown>;
275
+ reason?: string;
276
+ last_known_end?: string;
277
+ }
278
+ export interface OverlayReceipt {
279
+ feed: ConceptId | null;
280
+ provider: string;
281
+ observed_at: string;
282
+ results: StepResult[];
283
+ refusals: RefusalRow[];
284
+ diagnostics: unknown[];
285
+ }
286
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/record-overlay/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/record-overlay/types.ts"],"names":[],"mappings":""}
@@ -83,14 +83,14 @@ function buildTransport(remote, options) {
83
83
  // Refused rather than thrown: the primitive classifies a throw as unknown, and an intent
84
84
  // that can never be sent would then stay pending as possibly delivered on every push.
85
85
  if (intent.kind !== "document.write") {
86
- return { kind: "refused", code: "USAGE", message: `remote operation transport: unsupported intent kind '${intent.kind}'` };
86
+ return { kind: "refused", code: "USAGE", message: `remote operation transport: unsupported intent kind '${intent.kind}'`, executed: false };
87
87
  }
88
88
  let parsed;
89
89
  try {
90
90
  parsed = parseMarkdown(intent.content, pathFromConceptId(intent.target));
91
91
  }
92
92
  catch (error) {
93
- return { kind: "refused", code: "USAGE", message: error instanceof Error ? error.message : String(error) };
93
+ return { kind: "refused", code: "USAGE", message: error instanceof Error ? error.message : String(error), executed: false };
94
94
  }
95
95
  const { frontmatter, body } = parsed;
96
96
  const writeOptions = {
@@ -110,6 +110,9 @@ function buildTransport(remote, options) {
110
110
  return { kind: "refused", code: "USAGE", message: error.message };
111
111
  if (error instanceof VersionConflict)
112
112
  return { kind: "conflict", actual: error.actual };
113
+ // The reference router authorizes before it claims a key: a 401 or 403 executed nothing.
114
+ if (error instanceof RemoteError && (error.status === 401 || error.status === 403))
115
+ return { kind: "refused", code: error.code, message: error.message, executed: false };
113
116
  if (error instanceof RemoteError && error.status < 500)
114
117
  return { kind: "refused", code: error.code, message: error.message };
115
118
  throw error;
@@ -1 +1 @@
1
- {"version":3,"file":"remote-operations.js","sourceRoot":"","sources":["../src/remote-operations.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"remote-operations.js","sourceRoot":"","sources":["../src/remote-operations.ts"],"names":[],"mappings":"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"}
package/dist/storage.d.ts CHANGED
@@ -2,7 +2,8 @@
2
2
  export type { BlobKey, ConceptId, DeleteOptions, Frontmatter, HeadResult, OkfDocument, QueryFilter, ReadBlobResult, ReadResult, ReservedFilename, ReservedReadResult, StorageBackend, StorageCapabilities, Version, VersionInfo, WriteOptions, } from "./types.js";
3
3
  export { InvalidInputError } from "./errors.js";
4
4
  export { MalformedDocumentError } from "./frontmatter-contract.js";
5
- export { RESERVED_FILENAMES, assertSafeBlobKey, assertSafeConceptId, assertSafeReservedDir, assertSafeReservedFilename, compareStorageKeys, conceptIdFromPath, isReservedFile, pathFromConceptId, toPosix, } from "./paths.js";
5
+ export { RESERVED_FILENAMES, assertSafeBlobKey, assertSafeConceptId, assertSafeReservedDir, assertSafeReservedFilename, compareStorageKeys, conceptIdFromPath, isReservedFile, nonCanonicalDocumentId, pathFromConceptId, toPosix, } from "./paths.js";
6
+ export type { NonCanonicalDocumentId } from "./paths.js";
6
7
  export { VersionConflict, isContentVersion, stripETagWrapper } from "./version-transport.js";
7
8
  export { IntentHoldConflict, IntentStateConflict } from "./journaled-backend.js";
8
9
  export type { IntentPatch, IntentRecord, JournaledBackend, JournaledDeleteOptions, JournaledDeleteResult, JournaledHead, JournaledHeadsOptions, JournaledReadResult, JournaledWriteOptions, MetaRecord, NewIntentRecord, } from "./journaled-backend.js";
@@ -1 +1 @@
1
- {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAAA,0FAA0F;AAE1F,YAAY,EACV,OAAO,EACP,SAAS,EACT,aAAa,EACb,WAAW,EACX,UAAU,EACV,WAAW,EACX,WAAW,EACX,cAAc,EACd,UAAU,EACV,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACd,mBAAmB,EACnB,OAAO,EACP,WAAW,EACX,YAAY,GACb,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,EACnB,qBAAqB,EACrB,0BAA0B,EAC1B,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EACd,iBAAiB,EACjB,OAAO,GACR,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAG7F,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AACjF,YAAY,EACV,WAAW,EACX,YAAY,EACZ,gBAAgB,EAChB,sBAAsB,EACtB,qBAAqB,EACrB,aAAa,EACb,qBAAqB,EACrB,mBAAmB,EACnB,qBAAqB,EACrB,UAAU,EACV,eAAe,GAChB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,YAAY,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAGpD,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC1E,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGtD,cAAc,mBAAmB,CAAC;AAElC,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACxE,YAAY,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAAA,0FAA0F;AAE1F,YAAY,EACV,OAAO,EACP,SAAS,EACT,aAAa,EACb,WAAW,EACX,UAAU,EACV,WAAW,EACX,WAAW,EACX,cAAc,EACd,UAAU,EACV,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACd,mBAAmB,EACnB,OAAO,EACP,WAAW,EACX,YAAY,GACb,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,EACnB,qBAAqB,EACrB,0BAA0B,EAC1B,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EACd,sBAAsB,EACtB,iBAAiB,EACjB,OAAO,GACR,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAG7F,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AACjF,YAAY,EACV,WAAW,EACX,YAAY,EACZ,gBAAgB,EAChB,sBAAsB,EACtB,qBAAqB,EACrB,aAAa,EACb,qBAAqB,EACrB,mBAAmB,EACnB,qBAAqB,EACrB,UAAU,EACV,eAAe,GAChB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,YAAY,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAGpD,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC1E,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGtD,cAAc,mBAAmB,CAAC;AAElC,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACxE,YAAY,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC"}
package/dist/storage.js CHANGED
@@ -1,7 +1,7 @@
1
1
  /** Runtime-neutral storage contract for Worker, browser, and custom backend consumers. */
2
2
  export { InvalidInputError } from "./errors.js";
3
3
  export { MalformedDocumentError } from "./frontmatter-contract.js";
4
- export { RESERVED_FILENAMES, assertSafeBlobKey, assertSafeConceptId, assertSafeReservedDir, assertSafeReservedFilename, compareStorageKeys, conceptIdFromPath, isReservedFile, pathFromConceptId, toPosix, } from "./paths.js";
4
+ export { RESERVED_FILENAMES, assertSafeBlobKey, assertSafeConceptId, assertSafeReservedDir, assertSafeReservedFilename, compareStorageKeys, conceptIdFromPath, isReservedFile, nonCanonicalDocumentId, pathFromConceptId, toPosix, } from "./paths.js";
5
5
  export { VersionConflict, isContentVersion, stripETagWrapper } from "./version-transport.js";
6
6
  // The journaled-backend seam: what an adapter adds to `StorageBackend` to host a browser-local
7
7
  // working copy's intent journal. Runtime-neutral, like the seam it extends.
@@ -1 +1 @@
1
- {"version":3,"file":"storage.js","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAAA,0FAA0F;AAqB1F,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,EACnB,qBAAqB,EACrB,0BAA0B,EAC1B,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EACd,iBAAiB,EACjB,OAAO,GACR,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC7F,+FAA+F;AAC/F,4EAA4E;AAC5E,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAcjF,kGAAkG;AAClG,yFAAyF;AACzF,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAEzD,4FAA4F;AAC5F,6EAA6E;AAC7E,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAG1E,mFAAmF;AACnF,cAAc,mBAAmB,CAAC;AAElC,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAAA,0FAA0F;AAqB1F,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,EACnB,qBAAqB,EACrB,0BAA0B,EAC1B,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EACd,sBAAsB,EACtB,iBAAiB,EACjB,OAAO,GACR,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC7F,+FAA+F;AAC/F,4EAA4E;AAC5E,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAcjF,kGAAkG;AAClG,yFAAyF;AACzF,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAEzD,4FAA4F;AAC5F,6EAA6E;AAC7E,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAG1E,mFAAmF;AACnF,cAAc,mBAAmB,CAAC;AAElC,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC"}
@@ -73,21 +73,52 @@ export type Outcome = {
73
73
  kind: "conflict";
74
74
  actual: Version | null;
75
75
  tombstone?: Version;
76
- } | {
76
+ }
77
+ /**
78
+ * `executed` is present only on a refusal that is not the identity's recorded answer: `false`
79
+ * when this attempt was refused before it could execute (nothing was sent, or the authority
80
+ * refused it before dispatch), `"unknown"` when the authority's answer does not say. Such a
81
+ * refusal is evidence about this attempt only, never about an earlier delivery of the identity.
82
+ */
83
+ | {
77
84
  kind: "refused";
78
85
  code: string;
79
86
  message: string;
80
- } | {
87
+ executed?: false | "unknown";
88
+ }
89
+ /**
90
+ * `refusal` names the attempt-only refusal that ended the call, when one did: a resend refused
91
+ * before execution while an earlier delivery may still be held. The identity stays unknown;
92
+ * the refusal says why it could not be settled now (for example, access withdrawn).
93
+ */
94
+ | {
81
95
  kind: "unknown";
96
+ refusal?: {
97
+ code: string;
98
+ message: string;
99
+ };
82
100
  };
101
+ /**
102
+ * A lookup's answer that the authority holds the identity without a result yet: a delivery of
103
+ * it was admitted and may still commit. Distinct from `null`, which says it was never admitted.
104
+ */
105
+ export interface LookupPending {
106
+ kind: "pending";
107
+ }
108
+ /** The one {@link LookupPending} answer. */
109
+ export declare const LOOKUP_PENDING: LookupPending;
83
110
  /** A transport to a shared authority that records outcomes by request identity. */
84
111
  export interface OperationTransport {
85
112
  /** Deliver the intent once; a repeated `requestId` must return the recorded outcome unchanged. */
86
113
  submit(intent: OperationIntent, options?: {
87
114
  signal?: AbortSignal;
88
115
  }): Promise<Outcome>;
89
- /** The recorded outcome for `requestId`, or `null` when the authority never recorded it. */
90
- lookup(requestId: string): Promise<Outcome | null>;
116
+ /**
117
+ * The recorded outcome for `requestId`; {@link LookupPending} when the authority holds it
118
+ * unanswered; or `null` when the authority never recorded it. A transport that cannot tell
119
+ * pending from absent answers `null` for both.
120
+ */
121
+ lookup(requestId: string): Promise<Outcome | LookupPending | null>;
91
122
  }
92
123
  /** Minimal classification for recorded-only delivery. A commit need not invent a new-head
93
124
  * version (for example, an identified blob delete can carry its complete absence receipt). */
@@ -233,8 +264,10 @@ export declare function settleAgainstIntent(outcome: Outcome, intent: OperationI
233
264
  *
234
265
  * A refusal before execution ({@link isAuthorizationRefusal}) of a resubmission that follows an
235
266
  * unclear submission (in this call, or an earlier one per `earlierDeliveryUnclear`) is `unknown`,
236
- * not settled: the lookup that allowed it cannot tell a request never received from one held but
237
- * not yet answered, and the held delivery can still commit.
267
+ * carrying that refusal, not settled: a `null` lookup cannot prove an earlier delivery will not
268
+ * still arrive, and the delivery can still commit. After a {@link LookupPending} answer, which
269
+ * says a delivery is held, the same holds for every refusal the transport marks `executed`
270
+ * (a gateway's `400` included). A pending lookup still permits the resubmission.
238
271
  *
239
272
  * By default every outcome passes through {@link settleAgainstIntent}, so a conflict naming the
240
273
  * intent's own version is committed. `recorded-only` preserves the recorded outcome instead.
@@ -1 +1 @@
1
- {"version":3,"file":"uncertain-write.d.ts","sourceRoot":"","sources":["../src/uncertain-write.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"uncertain-write.d.ts","sourceRoot":"","sources":["../src/uncertain-write.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG,gBAAgB,GAAG,iBAAiB,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAEjF;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,WAAW,GAAG,cAAc,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC;AAE3G,wDAAwD;AACxD,MAAM,WAAW,eAAe;IAC9B,4FAA4F;IAC5F,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,aAAa,CAAC;IACpB,8EAA8E;IAC9E,MAAM,EAAE,MAAM,CAAC;IACf;;;;;;;OAOG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,kFAAkF;IAClF,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;IACrB,kDAAkD;IAClD,KAAK,EAAE,OAAO,CAAC;IACf,kFAAkF;IAClF,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,cAAc,CAAC;CACvB;AAED,uDAAuD;AACvD,MAAM,MAAM,OAAO,GACf;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE;AACzC;;;;;GAKG;GACD;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE;AACnE;;;;;GAKG;GACD;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,KAAK,GAAG,SAAS,CAAA;CAAE;AAClF;;;;GAIG;GACD;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,OAAO,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC;AAErE;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,SAAS,CAAC;CACjB;AAED,4CAA4C;AAC5C,eAAO,MAAM,cAAc,EAAE,aAAkD,CAAC;AAEhF,mFAAmF;AACnF,MAAM,WAAW,kBAAkB;IACjC,kGAAkG;IAClG,MAAM,CAAC,MAAM,EAAE,eAAe,EAAE,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACtF;;;;OAIG;IACH,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,aAAa,GAAG,IAAI,CAAC,CAAC;CACpE;AAED;8FAC8F;AAC9F,MAAM,WAAW,kBAAkB;IAAG,IAAI,EAAE,cAAc,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE;AAChG,MAAM,MAAM,oBAAoB,GAC5B,kBAAkB,GAClB;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,GACrB;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,GACpB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAClD;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,CAAC;AACxB,MAAM,MAAM,mBAAmB,GAAG,IAAI,CAAC,eAAe,EAAE,WAAW,GAAG,MAAM,GAAG,QAAQ,GAAG,WAAW,GAAG,UAAU,GAAG,OAAO,CAAC,GAAG;IAC9H,kFAAkF;IAClF,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AACF,MAAM,WAAW,sBAAsB,CAAC,CAAC,SAAS,mBAAmB,EAAE,CAAC,SAAS,oBAAoB;IACnG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAClE,oFAAoF;IACpF,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;CAC9C;AACD;;;;;gGAKgG;AAChG,MAAM,MAAM,oBAAoB,GAAG,IAAI,CAAC,qBAAqB,EAAE,YAAY,GAAG,gBAAgB,GAAG,wBAAwB,CAAC,GAAG;IAC3H,UAAU,EAAE,eAAe,CAAC;IAC5B,KAAK,EAAE,gBAAgB,GAAG,QAAQ,CAAC;CACpC,CAAC;AACF,MAAM,WAAW,mBAAmB,CAAC,CAAC,SAAS,mBAAmB,EAAE,CAAC,SAAS,oBAAoB;IAChG,MAAM,EAAE,IAAI,CAAC,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC,mBAAmB,EAAE,UAAU,GAAG,OAAO,CAAC,CAAC;IACxF,OAAO,EAAE,CAAC,GAAG;QAAE,IAAI,EAAE,SAAS,CAAA;KAAE,CAAC;IACjC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,yFAAyF;AACzF,MAAM,MAAM,KAAK,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAExE,MAAM,WAAW,qBAAqB;IACpC,qGAAqG;IACrG,UAAU,CAAC,EAAE,eAAe,GAAG,eAAe,CAAC;IAC/C,iFAAiF;IACjF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kFAAkF;IAClF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4FAA4F;IAC5F,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,yEAAyE;IACzE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,+CAA+C;IAC/C,KAAK,CAAC,EAAE,KAAK,CAAC;IACd;;;;OAIG;IACH,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB;;;;;;OAMG;IACH,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAClC;AAED,MAAM,WAAW,oBAAoB;IACnC,4EAA4E;IAC5E,MAAM,EAAE,eAAe,CAAC;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,uDAAuD;IACvD,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;GAIG;AACH,eAAO,MAAM,2BAA2B,EAAE,WAAW,CAAC,MAAM,CAO1D,CAAC;AAEH,2FAA2F;AAC3F,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,oBAAoB,GAAG,OAAO,CAEvF;AAcD,2DAA2D;AAC3D,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,oBAAoB,GAAG,cAAc,CAavF;AAED,0EAA0E;AAC1E,eAAO,MAAM,qBAAqB,MAAM,CAAC;AAEzC;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAGxD;AAED,mGAAmG;AACnG,wBAAgB,aAAa,IAAI,MAAM,CAItC;AAqBD;;;;;;;;;;;;GAYG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,eAAe,GAAG,OAAO,CAKtF;AAwBD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,SAAS,mBAAmB,EAAE,CAAC,SAAS,oBAAoB,EACjG,SAAS,EAAE,sBAAsB,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,oBAAoB,GAChF,OAAO,CAAC,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACtC;sFACsF;AACtF,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,kBAAkB,EAAE,MAAM,EAAE,eAAe,EAAE,OAAO,CAAC,EAAE,qBAAqB,GACtF,OAAO,CAAC,oBAAoB,CAAC,CAAC"}