@rhizomes/rhizomatic 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 (119) hide show
  1. package/LICENSE-APACHE +201 -0
  2. package/LICENSE-MIT +21 -0
  3. package/README.md +54 -0
  4. package/dist/alias.d.ts +4 -0
  5. package/dist/alias.d.ts.map +1 -0
  6. package/dist/alias.js +34 -0
  7. package/dist/alias.js.map +1 -0
  8. package/dist/cbor.d.ts +24 -0
  9. package/dist/cbor.d.ts.map +1 -0
  10. package/dist/cbor.js +267 -0
  11. package/dist/cbor.js.map +1 -0
  12. package/dist/delta.d.ts +8 -0
  13. package/dist/delta.d.ts.map +1 -0
  14. package/dist/delta.js +92 -0
  15. package/dist/delta.js.map +1 -0
  16. package/dist/derivation.d.ts +29 -0
  17. package/dist/derivation.d.ts.map +1 -0
  18. package/dist/derivation.js +183 -0
  19. package/dist/derivation.js.map +1 -0
  20. package/dist/eval.d.ts +91 -0
  21. package/dist/eval.d.ts.map +1 -0
  22. package/dist/eval.js +318 -0
  23. package/dist/eval.js.map +1 -0
  24. package/dist/hash.d.ts +4 -0
  25. package/dist/hash.d.ts.map +1 -0
  26. package/dist/hash.js +17 -0
  27. package/dist/hash.js.map +1 -0
  28. package/dist/http.d.ts +21 -0
  29. package/dist/http.d.ts.map +1 -0
  30. package/dist/http.js +110 -0
  31. package/dist/http.js.map +1 -0
  32. package/dist/hview.d.ts +15 -0
  33. package/dist/hview.d.ts.map +1 -0
  34. package/dist/hview.js +72 -0
  35. package/dist/hview.js.map +1 -0
  36. package/dist/index.d.ts +23 -0
  37. package/dist/index.d.ts.map +1 -0
  38. package/dist/index.js +22 -0
  39. package/dist/index.js.map +1 -0
  40. package/dist/json-profile.d.ts +4 -0
  41. package/dist/json-profile.d.ts.map +1 -0
  42. package/dist/json-profile.js +97 -0
  43. package/dist/json-profile.js.map +1 -0
  44. package/dist/pack.d.ts +5 -0
  45. package/dist/pack.d.ts.map +1 -0
  46. package/dist/pack.js +227 -0
  47. package/dist/pack.js.map +1 -0
  48. package/dist/peer.d.ts +26 -0
  49. package/dist/peer.d.ts.map +1 -0
  50. package/dist/peer.js +111 -0
  51. package/dist/peer.js.map +1 -0
  52. package/dist/policy.d.ts +46 -0
  53. package/dist/policy.d.ts.map +1 -0
  54. package/dist/policy.js +186 -0
  55. package/dist/policy.js.map +1 -0
  56. package/dist/pred.d.ts +78 -0
  57. package/dist/pred.d.ts.map +1 -0
  58. package/dist/pred.js +228 -0
  59. package/dist/pred.js.map +1 -0
  60. package/dist/reactor.d.ts +67 -0
  61. package/dist/reactor.d.ts.map +1 -0
  62. package/dist/reactor.js +433 -0
  63. package/dist/reactor.js.map +1 -0
  64. package/dist/schema-deltas.d.ts +14 -0
  65. package/dist/schema-deltas.d.ts.map +1 -0
  66. package/dist/schema-deltas.js +87 -0
  67. package/dist/schema-deltas.js.map +1 -0
  68. package/dist/schema.d.ts +17 -0
  69. package/dist/schema.d.ts.map +1 -0
  70. package/dist/schema.js +102 -0
  71. package/dist/schema.js.map +1 -0
  72. package/dist/set.d.ts +18 -0
  73. package/dist/set.d.ts.map +1 -0
  74. package/dist/set.js +83 -0
  75. package/dist/set.js.map +1 -0
  76. package/dist/sign.d.ts +8 -0
  77. package/dist/sign.d.ts.map +1 -0
  78. package/dist/sign.js +44 -0
  79. package/dist/sign.js.map +1 -0
  80. package/dist/term-io.d.ts +13 -0
  81. package/dist/term-io.d.ts.map +1 -0
  82. package/dist/term-io.js +216 -0
  83. package/dist/term-io.js.map +1 -0
  84. package/dist/term-json.d.ts +7 -0
  85. package/dist/term-json.d.ts.map +1 -0
  86. package/dist/term-json.js +362 -0
  87. package/dist/term-json.js.map +1 -0
  88. package/dist/types.d.ts +34 -0
  89. package/dist/types.d.ts.map +1 -0
  90. package/dist/types.js +4 -0
  91. package/dist/types.js.map +1 -0
  92. package/dist/vocab.d.ts +2 -0
  93. package/dist/vocab.d.ts.map +1 -0
  94. package/dist/vocab.js +4 -0
  95. package/dist/vocab.js.map +1 -0
  96. package/package.json +83 -0
  97. package/src/alias.ts +36 -0
  98. package/src/cbor.ts +280 -0
  99. package/src/delta.ts +89 -0
  100. package/src/derivation.ts +229 -0
  101. package/src/eval.ts +401 -0
  102. package/src/hash.ts +19 -0
  103. package/src/http.ts +124 -0
  104. package/src/hview.ts +91 -0
  105. package/src/index.ts +83 -0
  106. package/src/json-profile.ts +96 -0
  107. package/src/pack.ts +239 -0
  108. package/src/peer.ts +126 -0
  109. package/src/policy.ts +216 -0
  110. package/src/pred.ts +307 -0
  111. package/src/reactor.ts +490 -0
  112. package/src/schema-deltas.ts +100 -0
  113. package/src/schema.ts +111 -0
  114. package/src/set.ts +98 -0
  115. package/src/sign.ts +48 -0
  116. package/src/term-io.ts +228 -0
  117. package/src/term-json.ts +364 -0
  118. package/src/types.ts +38 -0
  119. package/src/vocab.ts +3 -0
@@ -0,0 +1,23 @@
1
+ export type { Primitive, EntityRef, DeltaRef, Target, Pointer, Claims, Delta } from "./types.js";
2
+ export { encode, type CborValue, tstr, float, bool, array, map } from "./cbor.js";
3
+ export { contentAddress } from "./hash.js";
4
+ export { claimsToCbor, canonicalBytes, canonicalHex, computeId, assertValidClaims, } from "./delta.js";
5
+ export { claimsToJson, parseClaims } from "./json-profile.js";
6
+ export { AUTHOR_PREFIX, authorForSeed, publicKeyFromSeed, signClaims, verifyDelta, type Verification, } from "./sign.js";
7
+ export { DeltaSet, federate, fork, makeDelta, makeNegationClaims, merge } from "./set.js";
8
+ export { comparePrimitives, evalPred, strMatch, type Cmp, type PPred, type Pred, type StrMatch, type ValMatch, } from "./pred.js";
9
+ export { aliasClosure, evalTerm, expandAliased, resultCanonicalHex, type AliasedSpec, type EvalResult, type GroupKey, type MaskPolicy, type Term, } from "./eval.js";
10
+ export { relationSignature, relationSignatureCanonicalHex } from "./alias.js";
11
+ export { hviewCanonicalHex, type HVEntry, type HView } from "./hview.js";
12
+ export { SchemaRegistry, collectRefs, type HyperSchema } from "./schema.js";
13
+ export { resolveView, viewCanonicalHex, type MergeFn, type Order, type Policy, type PropPolicy, type View, } from "./policy.js";
14
+ export { parsePolicy, parsePred, parseTerm } from "./term-json.js";
15
+ export { cborToJson, jsonToCbor, policyToJson, predToJson, termCanonicalHex, termHash, termToJson, } from "./term-io.js";
16
+ export { SCHEMA_SCHEMA, VOCAB_PREFIX, loadSchema, publishSchemaClaims } from "./schema-deltas.js";
17
+ export { decode } from "./cbor.js";
18
+ export { packId, packSet, unpackSet } from "./pack.js";
19
+ export { Peer, syncBoth, type SyncReport } from "./peer.js";
20
+ export { offerFor, pullFromUrl, servePeer } from "./http.js";
21
+ export { DerivationHost, derivedClaims, verifyPureDerivation, type BindingSpec, type DerivedFn, } from "./derivation.js";
22
+ export { Reactor, isRootAnchored, makeManifestClaims, manifestMemberIds, type IngestResult, type MaterializationChange, } from "./reactor.js";
23
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACjG,OAAO,EAAE,MAAM,EAAE,KAAK,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAClF,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EACL,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,SAAS,EACT,iBAAiB,GAClB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EACL,aAAa,EACb,aAAa,EACb,iBAAiB,EACjB,UAAU,EACV,WAAW,EACX,KAAK,YAAY,GAClB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,kBAAkB,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAC1F,OAAO,EACL,iBAAiB,EACjB,QAAQ,EACR,QAAQ,EACR,KAAK,GAAG,EACR,KAAK,KAAK,EACV,KAAK,IAAI,EACT,KAAK,QAAQ,EACb,KAAK,QAAQ,GACd,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,YAAY,EACZ,QAAQ,EACR,aAAa,EACb,kBAAkB,EAClB,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,QAAQ,EACb,KAAK,UAAU,EACf,KAAK,IAAI,GACV,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,iBAAiB,EAAE,6BAA6B,EAAE,MAAM,YAAY,CAAC;AAC9E,OAAO,EAAE,iBAAiB,EAAE,KAAK,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,YAAY,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAC5E,OAAO,EACL,WAAW,EACX,gBAAgB,EAChB,KAAK,OAAO,EACZ,KAAK,KAAK,EACV,KAAK,MAAM,EACX,KAAK,UAAU,EACf,KAAK,IAAI,GACV,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACnE,OAAO,EACL,UAAU,EACV,UAAU,EACV,YAAY,EACZ,UAAU,EACV,gBAAgB,EAChB,QAAQ,EACR,UAAU,GACX,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAClG,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,UAAU,EAAE,MAAM,WAAW,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAC7D,OAAO,EACL,cAAc,EACd,aAAa,EACb,oBAAoB,EACpB,KAAK,WAAW,EAChB,KAAK,SAAS,GACf,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,OAAO,EACP,cAAc,EACd,kBAAkB,EAClB,iBAAiB,EACjB,KAAK,YAAY,EACjB,KAAK,qBAAqB,GAC3B,MAAM,cAAc,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,22 @@
1
+ export { encode, tstr, float, bool, array, map } from "./cbor.js";
2
+ export { contentAddress } from "./hash.js";
3
+ export { claimsToCbor, canonicalBytes, canonicalHex, computeId, assertValidClaims, } from "./delta.js";
4
+ export { claimsToJson, parseClaims } from "./json-profile.js";
5
+ export { AUTHOR_PREFIX, authorForSeed, publicKeyFromSeed, signClaims, verifyDelta, } from "./sign.js";
6
+ export { DeltaSet, federate, fork, makeDelta, makeNegationClaims, merge } from "./set.js";
7
+ export { comparePrimitives, evalPred, strMatch, } from "./pred.js";
8
+ export { aliasClosure, evalTerm, expandAliased, resultCanonicalHex, } from "./eval.js";
9
+ export { relationSignature, relationSignatureCanonicalHex } from "./alias.js";
10
+ export { hviewCanonicalHex } from "./hview.js";
11
+ export { SchemaRegistry, collectRefs } from "./schema.js";
12
+ export { resolveView, viewCanonicalHex, } from "./policy.js";
13
+ export { parsePolicy, parsePred, parseTerm } from "./term-json.js";
14
+ export { cborToJson, jsonToCbor, policyToJson, predToJson, termCanonicalHex, termHash, termToJson, } from "./term-io.js";
15
+ export { SCHEMA_SCHEMA, VOCAB_PREFIX, loadSchema, publishSchemaClaims } from "./schema-deltas.js";
16
+ export { decode } from "./cbor.js";
17
+ export { packId, packSet, unpackSet } from "./pack.js";
18
+ export { Peer, syncBoth } from "./peer.js";
19
+ export { offerFor, pullFromUrl, servePeer } from "./http.js";
20
+ export { DerivationHost, derivedClaims, verifyPureDerivation, } from "./derivation.js";
21
+ export { Reactor, isRootAnchored, makeManifestClaims, manifestMemberIds, } from "./reactor.js";
22
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAkB,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAClF,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EACL,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,SAAS,EACT,iBAAiB,GAClB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EACL,aAAa,EACb,aAAa,EACb,iBAAiB,EACjB,UAAU,EACV,WAAW,GAEZ,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,kBAAkB,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAC1F,OAAO,EACL,iBAAiB,EACjB,QAAQ,EACR,QAAQ,GAMT,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,YAAY,EACZ,QAAQ,EACR,aAAa,EACb,kBAAkB,GAMnB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,iBAAiB,EAAE,6BAA6B,EAAE,MAAM,YAAY,CAAC;AAC9E,OAAO,EAAE,iBAAiB,EAA4B,MAAM,YAAY,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,WAAW,EAAoB,MAAM,aAAa,CAAC;AAC5E,OAAO,EACL,WAAW,EACX,gBAAgB,GAMjB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACnE,OAAO,EACL,UAAU,EACV,UAAU,EACV,YAAY,EACZ,UAAU,EACV,gBAAgB,EAChB,QAAQ,EACR,UAAU,GACX,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAClG,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAmB,MAAM,WAAW,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAC7D,OAAO,EACL,cAAc,EACd,aAAa,EACb,oBAAoB,GAGrB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,OAAO,EACP,cAAc,EACd,kBAAkB,EAClB,iBAAiB,GAGlB,MAAM,cAAc,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { Claims } from "./types.js";
2
+ export declare function claimsToJson(claims: Claims): unknown;
3
+ export declare function parseClaims(raw: unknown): Claims;
4
+ //# sourceMappingURL=json-profile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-profile.d.ts","sourceRoot":"","sources":["../src/json-profile.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAA8B,MAAM,YAAY,CAAC;AAoDrE,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CA4BpD;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAUhD"}
@@ -0,0 +1,97 @@
1
+ // Parse the JSON debug profile used by the vectors (SPEC-1 §4.1, ERRATA "JSON debug profile")
2
+ // into the logical delta model. The CBOR form is normative; this is for authoring/inspection.
3
+ function asObject(x, what) {
4
+ if (typeof x !== "object" || x === null || Array.isArray(x)) {
5
+ throw new Error(`expected object for ${what}`);
6
+ }
7
+ return x;
8
+ }
9
+ function parsePrimitive(v) {
10
+ if (typeof v === "string" || typeof v === "boolean")
11
+ return v;
12
+ if (typeof v === "number") {
13
+ if (!Number.isFinite(v))
14
+ throw new Error("numeric primitive must be finite");
15
+ return v;
16
+ }
17
+ throw new Error("primitive must be string | number | boolean");
18
+ }
19
+ // The profile mirrors the canonical CBOR exactly: a primitive target is the bare value; an
20
+ // entity ref is {id, context?}; a delta ref is {delta, context?}. Discrimination is structural
21
+ // (SPEC-1 §2.1) — primitives are never objects, and the id/delta key names the ref kind.
22
+ function parseTarget(raw) {
23
+ if (typeof raw === "string" || typeof raw === "number" || typeof raw === "boolean") {
24
+ return { kind: "primitive", value: parsePrimitive(raw) };
25
+ }
26
+ const o = asObject(raw, "target");
27
+ if ("id" in o) {
28
+ const id = o["id"];
29
+ if (typeof id !== "string")
30
+ throw new Error("entity ref id must be a string");
31
+ const context = o["context"];
32
+ return context === undefined
33
+ ? { kind: "entity", entity: { id } }
34
+ : { kind: "entity", entity: { id, context: String(context) } };
35
+ }
36
+ if ("delta" in o) {
37
+ const delta = o["delta"];
38
+ if (typeof delta !== "string")
39
+ throw new Error("delta ref delta must be a string");
40
+ const context = o["context"];
41
+ return context === undefined
42
+ ? { kind: "delta", deltaRef: { delta } }
43
+ : { kind: "delta", deltaRef: { delta, context: String(context) } };
44
+ }
45
+ throw new Error("target must be a primitive, {id, context?}, or {delta, context?}");
46
+ }
47
+ function parsePointer(raw) {
48
+ const o = asObject(raw, "pointer");
49
+ if (typeof o["role"] !== "string")
50
+ throw new Error("pointer.role must be a string");
51
+ return { role: o["role"], target: parseTarget(o["target"]) };
52
+ }
53
+ // Serialize claims back to the JSON debug profile (the inverse of parseClaims).
54
+ export function claimsToJson(claims) {
55
+ return {
56
+ timestamp: claims.timestamp,
57
+ author: claims.author,
58
+ pointers: claims.pointers.map((p) => {
59
+ let target;
60
+ switch (p.target.kind) {
61
+ case "primitive":
62
+ target = p.target.value;
63
+ break;
64
+ case "entity":
65
+ target = {
66
+ id: p.target.entity.id,
67
+ ...(p.target.entity.context === undefined ? {} : { context: p.target.entity.context }),
68
+ };
69
+ break;
70
+ case "delta":
71
+ target = {
72
+ delta: p.target.deltaRef.delta,
73
+ ...(p.target.deltaRef.context === undefined
74
+ ? {}
75
+ : { context: p.target.deltaRef.context }),
76
+ };
77
+ break;
78
+ }
79
+ return { role: p.role, target };
80
+ }),
81
+ };
82
+ }
83
+ export function parseClaims(raw) {
84
+ const o = asObject(raw, "claims");
85
+ if (typeof o["timestamp"] !== "number")
86
+ throw new Error("claims.timestamp must be a number");
87
+ if (typeof o["author"] !== "string")
88
+ throw new Error("claims.author must be a string");
89
+ if (!Array.isArray(o["pointers"]))
90
+ throw new Error("claims.pointers must be an array");
91
+ return {
92
+ timestamp: o["timestamp"],
93
+ author: o["author"],
94
+ pointers: o["pointers"].map(parsePointer),
95
+ };
96
+ }
97
+ //# sourceMappingURL=json-profile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-profile.js","sourceRoot":"","sources":["../src/json-profile.ts"],"names":[],"mappings":"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"}
package/dist/pack.d.ts ADDED
@@ -0,0 +1,5 @@
1
+ import { DeltaSet } from "./set.js";
2
+ export declare function packSet(set: DeltaSet): Uint8Array;
3
+ export declare function packId(bytes: Uint8Array): string;
4
+ export declare function unpackSet(bytes: Uint8Array): DeltaSet;
5
+ //# sourceMappingURL=pack.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pack.d.ts","sourceRoot":"","sources":["../src/pack.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,QAAQ,EAAa,MAAM,UAAU,CAAC;AAqF/C,wBAAgB,OAAO,CAAC,GAAG,EAAE,QAAQ,GAAG,UAAU,CAyCjD;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAEhD;AAuED,wBAAgB,SAAS,CAAC,KAAK,EAAE,UAAU,GAAG,QAAQ,CA8BrD"}
package/dist/pack.js ADDED
@@ -0,0 +1,227 @@
1
+ // The pack format (SPEC-8, ERRATA-8): a content-addressed physical container whose logical form
2
+ // is invariant. Never hash the dehydrated form; rehydration is byte-exact by construction because
3
+ // unpacking rebuilds claims through the standard makeDelta path.
4
+ import { array, bool, decode, encode, float, map, tstr } from "./cbor.js";
5
+ import { contentAddress } from "./hash.js";
6
+ import { manifestMemberIds } from "./reactor.js";
7
+ import { DeltaSet, makeDelta } from "./set.js";
8
+ const PACK_VERSION = 1;
9
+ // --- string interning -------------------------------------------------------------------------------
10
+ function stringsOf(delta, out) {
11
+ out.add(delta.id); // stored ids make rehydration self-verifying (SPEC-8 §4)
12
+ out.add(delta.claims.author);
13
+ if (delta.sig !== undefined)
14
+ out.add(delta.sig);
15
+ for (const p of delta.claims.pointers) {
16
+ out.add(p.role);
17
+ switch (p.target.kind) {
18
+ case "entity":
19
+ out.add(p.target.entity.id);
20
+ if (p.target.entity.context !== undefined)
21
+ out.add(p.target.entity.context);
22
+ break;
23
+ case "delta":
24
+ out.add(p.target.deltaRef.delta);
25
+ if (p.target.deltaRef.context !== undefined)
26
+ out.add(p.target.deltaRef.context);
27
+ break;
28
+ case "primitive":
29
+ if (typeof p.target.value === "string")
30
+ out.add(p.target.value);
31
+ break;
32
+ }
33
+ }
34
+ }
35
+ // --- packing ----------------------------------------------------------------------------------------
36
+ function ptrToCbor(p, idx) {
37
+ const entries = [["r", float(idx(p.role))]];
38
+ let context;
39
+ switch (p.target.kind) {
40
+ case "entity":
41
+ entries.push(["e", float(idx(p.target.entity.id))]);
42
+ context = p.target.entity.context;
43
+ break;
44
+ case "delta":
45
+ entries.push(["d", float(idx(p.target.deltaRef.delta))]);
46
+ context = p.target.deltaRef.context;
47
+ break;
48
+ case "primitive": {
49
+ const v = p.target.value;
50
+ if (typeof v === "string")
51
+ entries.push(["s", float(idx(v))]);
52
+ else if (typeof v === "number")
53
+ entries.push(["n", float(v)]);
54
+ else
55
+ entries.push(["b", bool(v)]);
56
+ break;
57
+ }
58
+ }
59
+ if (context !== undefined)
60
+ entries.push(["c", float(idx(context))]);
61
+ return map(entries);
62
+ }
63
+ function hydratedRecord(d, idx) {
64
+ const entries = [
65
+ ["i", float(idx(d.id))],
66
+ ["a", float(idx(d.claims.author))],
67
+ ["t", float(d.claims.timestamp)],
68
+ ["p", array(d.claims.pointers.map((p) => ptrToCbor(p, idx)))],
69
+ ];
70
+ if (d.sig !== undefined)
71
+ entries.push(["s", float(idx(d.sig))]);
72
+ return map(entries);
73
+ }
74
+ function memberRecord(d, manifest, envelopeIdx, idx) {
75
+ const entries = [
76
+ ["i", float(idx(d.id))],
77
+ ["m", float(envelopeIdx)],
78
+ ["p", array(d.claims.pointers.map((p) => ptrToCbor(p, idx)))],
79
+ ];
80
+ // Dehydrate against the envelope (SPEC-8 §3.1); divergent fields stored explicitly (P2).
81
+ if (d.claims.author !== manifest.claims.author)
82
+ entries.push(["a", float(idx(d.claims.author))]);
83
+ const dt = d.claims.timestamp - manifest.claims.timestamp;
84
+ if (dt !== 0)
85
+ entries.push(["dt", float(dt)]);
86
+ if (d.sig !== undefined)
87
+ entries.push(["s", float(idx(d.sig))]);
88
+ return map(entries);
89
+ }
90
+ export function packSet(set) {
91
+ const deltas = [...set].sort((a, b) => (a.id < b.id ? -1 : 1));
92
+ // Manifests: deltas carrying rdb.txn.member pointers, sorted by id.
93
+ const manifests = deltas.filter((d) => manifestMemberIds(d).length > 0);
94
+ // Each member is dehydrated against the lexicographically FIRST claiming manifest (P1).
95
+ const memberToManifest = new Map();
96
+ manifests.forEach((m, i) => {
97
+ for (const id of manifestMemberIds(m)) {
98
+ if (set.has(id) && !memberToManifest.has(id))
99
+ memberToManifest.set(id, i);
100
+ }
101
+ });
102
+ const manifestIds = new Set(manifests.map((m) => m.id));
103
+ const members = deltas.filter((d) => memberToManifest.has(d.id) && !manifestIds.has(d.id));
104
+ const loose = deltas.filter((d) => !memberToManifest.has(d.id) && !manifestIds.has(d.id));
105
+ const stringSet = new Set();
106
+ for (const d of deltas)
107
+ stringsOf(d, stringSet);
108
+ const strings = [...stringSet].sort();
109
+ const indexOf = new Map(strings.map((s, i) => [s, i]));
110
+ const idx = (s) => indexOf.get(s);
111
+ const packed = map([
112
+ ["version", float(PACK_VERSION)],
113
+ ["strings", array(strings.map(tstr))],
114
+ ["envelopes", array(manifests.map((m) => hydratedRecord(m, idx)))],
115
+ [
116
+ "members",
117
+ array(members.map((d) => memberRecord(d, manifests[memberToManifest.get(d.id)], memberToManifest.get(d.id), idx))),
118
+ ],
119
+ ["loose", array(loose.map((d) => hydratedRecord(d, idx)))],
120
+ ]);
121
+ return encode(packed);
122
+ }
123
+ export function packId(bytes) {
124
+ return contentAddress(bytes);
125
+ }
126
+ function asMap(v, what) {
127
+ if (v.t !== "map")
128
+ throw new Error(`pack: expected map for ${what}`);
129
+ return new Map(v.v);
130
+ }
131
+ function asArray(v, what) {
132
+ if (v === undefined || v.t !== "array")
133
+ throw new Error(`pack: expected array for ${what}`);
134
+ return v.v;
135
+ }
136
+ function asNum(v, what) {
137
+ if (v === undefined || v.t !== "float")
138
+ throw new Error(`pack: expected number for ${what}`);
139
+ return v.v;
140
+ }
141
+ function ptrFromCbor(v, strings) {
142
+ const o = asMap(v, "pointer");
143
+ const str = (key) => strings[asNum(o.get(key), key)];
144
+ const role = str("r");
145
+ const context = o.has("c") ? str("c") : undefined;
146
+ let target;
147
+ if (o.has("e")) {
148
+ target = {
149
+ kind: "entity",
150
+ entity: context === undefined ? { id: str("e") } : { id: str("e"), context },
151
+ };
152
+ }
153
+ else if (o.has("d")) {
154
+ target = {
155
+ kind: "delta",
156
+ deltaRef: context === undefined ? { delta: str("d") } : { delta: str("d"), context },
157
+ };
158
+ }
159
+ else if (o.has("s")) {
160
+ target = { kind: "primitive", value: str("s") };
161
+ }
162
+ else if (o.has("n")) {
163
+ target = { kind: "primitive", value: asNum(o.get("n"), "n") };
164
+ }
165
+ else if (o.has("b")) {
166
+ const b = o.get("b");
167
+ if (b.t !== "bool")
168
+ throw new Error("pack: expected bool for b");
169
+ target = { kind: "primitive", value: b.v };
170
+ }
171
+ else {
172
+ throw new Error("pack: pointer record has no target");
173
+ }
174
+ return { role, target };
175
+ }
176
+ function hydrateRecord(v, strings) {
177
+ const o = asMap(v, "record");
178
+ const claims = {
179
+ author: strings[asNum(o.get("a"), "a")],
180
+ timestamp: asNum(o.get("t"), "t"),
181
+ pointers: asArray(o.get("p"), "p").map((p) => ptrFromCbor(p, strings)),
182
+ };
183
+ const sig = o.has("s") ? strings[asNum(o.get("s"), "s")] : undefined;
184
+ return verifiedDelta(claims, sig, strings[asNum(o.get("i"), "i")]);
185
+ }
186
+ // SPEC-8 §4: hydrate -> canonical CBOR -> multihash MUST equal the stored id. Free fsck.
187
+ function verifiedDelta(claims, sig, storedId) {
188
+ const d = makeDelta(claims, sig);
189
+ if (d.id !== storedId) {
190
+ throw new Error(`pack: rehydrated delta ${d.id} does not match stored id ${storedId}`);
191
+ }
192
+ return d;
193
+ }
194
+ export function unpackSet(bytes) {
195
+ const top = asMap(decode(bytes), "pack");
196
+ if (asNum(top.get("version"), "version") !== PACK_VERSION) {
197
+ throw new Error("pack: unsupported version");
198
+ }
199
+ const strings = asArray(top.get("strings"), "strings").map((s) => {
200
+ if (s.t !== "tstr")
201
+ throw new Error("pack: string table entries must be text");
202
+ return s.v;
203
+ });
204
+ const out = new DeltaSet();
205
+ const envelopes = asArray(top.get("envelopes"), "envelopes").map((e) => hydrateRecord(e, strings));
206
+ for (const m of envelopes)
207
+ out.add(m);
208
+ for (const rec of asArray(top.get("members"), "members")) {
209
+ const o = asMap(rec, "member");
210
+ const manifest = envelopes[asNum(o.get("m"), "m")];
211
+ if (manifest === undefined)
212
+ throw new Error("pack: member references missing envelope");
213
+ const author = o.has("a") ? strings[asNum(o.get("a"), "a")] : manifest.claims.author;
214
+ const timestamp = manifest.claims.timestamp + (o.has("dt") ? asNum(o.get("dt"), "dt") : 0);
215
+ const claims = {
216
+ author,
217
+ timestamp,
218
+ pointers: asArray(o.get("p"), "p").map((p) => ptrFromCbor(p, strings)),
219
+ };
220
+ const sig = o.has("s") ? strings[asNum(o.get("s"), "s")] : undefined;
221
+ out.add(verifiedDelta(claims, sig, strings[asNum(o.get("i"), "i")]));
222
+ }
223
+ for (const rec of asArray(top.get("loose"), "loose"))
224
+ out.add(hydrateRecord(rec, strings));
225
+ return out;
226
+ }
227
+ //# sourceMappingURL=pack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pack.js","sourceRoot":"","sources":["../src/pack.ts"],"names":[],"mappings":"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"}
package/dist/peer.d.ts ADDED
@@ -0,0 +1,26 @@
1
+ import { type Term } from "./eval.js";
2
+ import { type Pred } from "./pred.js";
3
+ import { Reactor } from "./reactor.js";
4
+ import type { Claims, Delta } from "./types.js";
5
+ export interface SyncReport {
6
+ readonly offered: number;
7
+ readonly bundles: number;
8
+ readonly loose: number;
9
+ readonly withheld: number;
10
+ readonly accepted: number;
11
+ readonly rejected: number;
12
+ }
13
+ export declare class Peer {
14
+ private readonly seedHex;
15
+ offeredLens: Term;
16
+ admission: Pred | undefined;
17
+ readonly reactor: Reactor;
18
+ readonly author: string;
19
+ constructor(seedHex: string, offeredLens?: Term, admission?: Pred | undefined);
20
+ authorClaims(claims: Omit<Claims, "author">): Delta;
21
+ admits(d: Delta): boolean;
22
+ offeredSet(): Delta[];
23
+ pullFrom(other: Peer): SyncReport;
24
+ }
25
+ export declare function syncBoth(a: Peer, b: Peer): void;
26
+ //# sourceMappingURL=peer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"peer.d.ts","sourceRoot":"","sources":["../src/peer.ts"],"names":[],"mappings":"AAGA,OAAO,EAAY,KAAK,IAAI,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAY,KAAK,IAAI,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,OAAO,EAAwC,MAAM,cAAc,CAAC;AAE7E,OAAO,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEhD,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAID,qBAAa,IAAI;IAKb,OAAO,CAAC,QAAQ,CAAC,OAAO;IAEjB,WAAW,EAAE,IAAI;IAEjB,SAAS,EAAE,IAAI,GAAG,SAAS;IARpC,QAAQ,CAAC,OAAO,UAAiB;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;gBAGL,OAAO,EAAE,MAAM,EAEzB,WAAW,GAAE,IAAU,EAEvB,SAAS,GAAE,IAAI,GAAG,SAAqB;IAMhD,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,KAAK;IAQnD,MAAM,CAAC,CAAC,EAAE,KAAK,GAAG,OAAO;IAKzB,UAAU,IAAI,KAAK,EAAE;IAOrB,QAAQ,CAAC,KAAK,EAAE,IAAI,GAAG,UAAU;CA4DlC;AAGD,wBAAgB,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,GAAG,IAAI,CAO/C"}
package/dist/peer.js ADDED
@@ -0,0 +1,111 @@
1
+ // Federation (SPEC-6, ERRATA-6): a peer is a reactor + keypair + offered lens + admission
2
+ // predicate. Merge is union; this layer is selection and trust. Coordination without conscription.
3
+ import { evalTerm } from "./eval.js";
4
+ import { evalPred } from "./pred.js";
5
+ import { Reactor, manifestMemberIds } from "./reactor.js";
6
+ import { authorForSeed, signClaims, verifyDelta } from "./sign.js";
7
+ const ALL = { kind: "input" };
8
+ export class Peer {
9
+ seedHex;
10
+ offeredLens;
11
+ admission;
12
+ reactor = new Reactor();
13
+ author;
14
+ constructor(seedHex,
15
+ // What this peer offers to others (F4). Default: everything.
16
+ offeredLens = ALL,
17
+ // What this peer accepts (SPEC-6 §5 step 3). Default: everything that verifies.
18
+ admission = undefined) {
19
+ this.seedHex = seedHex;
20
+ this.offeredLens = offeredLens;
21
+ this.admission = admission;
22
+ this.author = authorForSeed(seedHex);
23
+ }
24
+ // Author a claim as this peer: sign and ingest (read-your-writes).
25
+ authorClaims(claims) {
26
+ const signed = signClaims({ ...claims, author: this.author }, this.seedHex);
27
+ const result = this.reactor.ingest(signed);
28
+ if (result.status === "rejected")
29
+ throw new Error(`own claim rejected: ${result.reason}`);
30
+ return signed;
31
+ }
32
+ // The admission judgment (SPEC-6 §5 step 3), exposed for transport bindings (F5).
33
+ admits(d) {
34
+ return this.admission === undefined || evalPred(this.admission, d);
35
+ }
36
+ // The offered set: eval(lens, log) — lens fidelity is a tested invariant (F4).
37
+ offeredSet() {
38
+ const result = evalTerm(this.offeredLens, this.reactor.snapshot());
39
+ if (result.sort !== "dset")
40
+ throw new Error("a lens must be a DSet-sort term (F4)");
41
+ return [...result.set];
42
+ }
43
+ // Pull from another peer: WANT(my ids) -> OFFER/BUNDLE -> verify -> admission -> ingest (§5).
44
+ pullFrom(other) {
45
+ const have = new Set();
46
+ for (const d of this.reactor.arrivalLog())
47
+ have.add(d.id);
48
+ const offered = other.offeredSet().filter((d) => !have.has(d.id));
49
+ const offeredIds = new Set(offered.map((d) => d.id));
50
+ // Partition per the signature boundary (F3): signed manifests carry their present members
51
+ // as bundles; remaining signed deltas travel loose; unsigned uncovered are withheld.
52
+ const isSignedManifest = (d) => d.sig !== undefined && verifyDelta(d) === "verified" && manifestMemberIds(d).length > 0;
53
+ const bundles = [];
54
+ const covered = new Set();
55
+ for (const m of offered.filter(isSignedManifest)) {
56
+ const members = manifestMemberIds(m)
57
+ .filter((id) => offeredIds.has(id))
58
+ .map((id) => offered.find((d) => d.id === id))
59
+ .filter((d) => !isSignedManifest(d));
60
+ bundles.push({ manifest: m, members });
61
+ for (const mem of members)
62
+ covered.add(mem.id);
63
+ covered.add(m.id);
64
+ }
65
+ const loose = offered.filter((d) => !covered.has(d.id) && d.sig !== undefined && verifyDelta(d) === "verified");
66
+ const withheld = offered.length - covered.size - loose.length;
67
+ let accepted = 0;
68
+ let rejected = 0;
69
+ const admit = (d) => this.admits(d);
70
+ const count = (r) => {
71
+ if (r.status === "accepted")
72
+ accepted += 1;
73
+ else if (r.status === "rejected")
74
+ rejected += 1;
75
+ };
76
+ for (const { manifest, members } of bundles) {
77
+ // Admission applies to the act: if the manifest or any member fails, decline the bundle.
78
+ if (![manifest, ...members].every(admit)) {
79
+ rejected += 1 + members.length;
80
+ continue;
81
+ }
82
+ count(this.reactor.ingestBundle(manifest, members));
83
+ }
84
+ for (const d of loose) {
85
+ if (!admit(d)) {
86
+ rejected += 1;
87
+ continue;
88
+ }
89
+ count(this.reactor.ingest(d));
90
+ }
91
+ return {
92
+ offered: offered.length,
93
+ bundles: bundles.length,
94
+ loose: loose.length,
95
+ withheld,
96
+ accepted,
97
+ rejected,
98
+ };
99
+ }
100
+ }
101
+ // Anti-entropy both ways; repeat until quiescent (bounded — union is monotone).
102
+ export function syncBoth(a, b) {
103
+ for (let i = 0; i < 4; i++) {
104
+ const before = a.reactor.digest() + b.reactor.digest();
105
+ a.pullFrom(b);
106
+ b.pullFrom(a);
107
+ if (a.reactor.digest() + b.reactor.digest() === before)
108
+ return;
109
+ }
110
+ }
111
+ //# sourceMappingURL=peer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"peer.js","sourceRoot":"","sources":["../src/peer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ import { type CborValue } from "./cbor.js";
2
+ import type { HView } from "./hview.js";
3
+ import { type Pred } from "./pred.js";
4
+ import type { Primitive } from "./types.js";
5
+ export type View = Primitive | readonly View[] | {
6
+ readonly [key: string]: View;
7
+ };
8
+ export type MergeFn = "max" | "min" | "sum" | "count" | "and" | "or" | "concatSorted";
9
+ export type Order = {
10
+ readonly kind: "byTimestamp";
11
+ readonly dir: "desc" | "asc";
12
+ } | {
13
+ readonly kind: "byAuthorRank";
14
+ readonly authors: readonly string[];
15
+ } | {
16
+ readonly kind: "byPred";
17
+ readonly pred: Pred;
18
+ readonly then: Order;
19
+ } | {
20
+ readonly kind: "lexById";
21
+ };
22
+ export type PropPolicy = {
23
+ readonly kind: "pick";
24
+ readonly order: Order;
25
+ } | {
26
+ readonly kind: "all";
27
+ readonly order: Order;
28
+ } | {
29
+ readonly kind: "merge";
30
+ readonly fn: MergeFn;
31
+ } | {
32
+ readonly kind: "conflicts";
33
+ readonly order: Order;
34
+ } | {
35
+ readonly kind: "absentAs";
36
+ readonly constant: Primitive;
37
+ readonly then: PropPolicy;
38
+ };
39
+ export interface Policy {
40
+ readonly props: ReadonlyMap<string, PropPolicy>;
41
+ readonly default: PropPolicy;
42
+ }
43
+ export declare function viewToCbor(v: View): CborValue;
44
+ export declare function viewCanonicalHex(v: View): string;
45
+ export declare function resolveView(policy: Policy, hview: HView): View;
46
+ //# sourceMappingURL=policy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../src/policy.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,SAAS,EAAyC,MAAM,WAAW,CAAC;AAElF,OAAO,KAAK,EAAW,KAAK,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAA+B,KAAK,IAAI,EAAE,MAAM,WAAW,CAAC;AACnE,OAAO,KAAK,EAAE,SAAS,EAAU,MAAM,YAAY,CAAC;AAEpD,MAAM,MAAM,IAAI,GAAG,SAAS,GAAG,SAAS,IAAI,EAAE,GAAG;IAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC;AAElF,MAAM,MAAM,OAAO,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,OAAO,GAAG,KAAK,GAAG,IAAI,GAAG,cAAc,CAAC;AAEtF,MAAM,MAAM,KAAK,GACb;IAAE,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,KAAK,CAAA;CAAE,GAC9D;IAAE,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,GACtE;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAA;CAAE,GACtE;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;CAAE,CAAC;AAEjC,MAAM,MAAM,UAAU,GAClB;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAA;CAAE,GAChD;IAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAA;CAAE,GAC/C;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAA;CAAE,GAChD;IAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAA;CAAE,GACrD;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAA;CAAE,CAAC;AAE3F,MAAM,WAAW,MAAM;IACrB,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAChD,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;CAC9B;AAwED,wBAAgB,UAAU,CAAC,CAAC,EAAE,IAAI,GAAG,SAAS,CAS7C;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,IAAI,GAAG,MAAM,CAEhD;AA2FD,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI,CAU9D"}