@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.
- package/LICENSE-APACHE +201 -0
- package/LICENSE-MIT +21 -0
- package/README.md +54 -0
- package/dist/alias.d.ts +4 -0
- package/dist/alias.d.ts.map +1 -0
- package/dist/alias.js +34 -0
- package/dist/alias.js.map +1 -0
- package/dist/cbor.d.ts +24 -0
- package/dist/cbor.d.ts.map +1 -0
- package/dist/cbor.js +267 -0
- package/dist/cbor.js.map +1 -0
- package/dist/delta.d.ts +8 -0
- package/dist/delta.d.ts.map +1 -0
- package/dist/delta.js +92 -0
- package/dist/delta.js.map +1 -0
- package/dist/derivation.d.ts +29 -0
- package/dist/derivation.d.ts.map +1 -0
- package/dist/derivation.js +183 -0
- package/dist/derivation.js.map +1 -0
- package/dist/eval.d.ts +91 -0
- package/dist/eval.d.ts.map +1 -0
- package/dist/eval.js +318 -0
- package/dist/eval.js.map +1 -0
- package/dist/hash.d.ts +4 -0
- package/dist/hash.d.ts.map +1 -0
- package/dist/hash.js +17 -0
- package/dist/hash.js.map +1 -0
- package/dist/http.d.ts +21 -0
- package/dist/http.d.ts.map +1 -0
- package/dist/http.js +110 -0
- package/dist/http.js.map +1 -0
- package/dist/hview.d.ts +15 -0
- package/dist/hview.d.ts.map +1 -0
- package/dist/hview.js +72 -0
- package/dist/hview.js.map +1 -0
- package/dist/index.d.ts +23 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -0
- package/dist/json-profile.d.ts +4 -0
- package/dist/json-profile.d.ts.map +1 -0
- package/dist/json-profile.js +97 -0
- package/dist/json-profile.js.map +1 -0
- package/dist/pack.d.ts +5 -0
- package/dist/pack.d.ts.map +1 -0
- package/dist/pack.js +227 -0
- package/dist/pack.js.map +1 -0
- package/dist/peer.d.ts +26 -0
- package/dist/peer.d.ts.map +1 -0
- package/dist/peer.js +111 -0
- package/dist/peer.js.map +1 -0
- package/dist/policy.d.ts +46 -0
- package/dist/policy.d.ts.map +1 -0
- package/dist/policy.js +186 -0
- package/dist/policy.js.map +1 -0
- package/dist/pred.d.ts +78 -0
- package/dist/pred.d.ts.map +1 -0
- package/dist/pred.js +228 -0
- package/dist/pred.js.map +1 -0
- package/dist/reactor.d.ts +67 -0
- package/dist/reactor.d.ts.map +1 -0
- package/dist/reactor.js +433 -0
- package/dist/reactor.js.map +1 -0
- package/dist/schema-deltas.d.ts +14 -0
- package/dist/schema-deltas.d.ts.map +1 -0
- package/dist/schema-deltas.js +87 -0
- package/dist/schema-deltas.js.map +1 -0
- package/dist/schema.d.ts +17 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +102 -0
- package/dist/schema.js.map +1 -0
- package/dist/set.d.ts +18 -0
- package/dist/set.d.ts.map +1 -0
- package/dist/set.js +83 -0
- package/dist/set.js.map +1 -0
- package/dist/sign.d.ts +8 -0
- package/dist/sign.d.ts.map +1 -0
- package/dist/sign.js +44 -0
- package/dist/sign.js.map +1 -0
- package/dist/term-io.d.ts +13 -0
- package/dist/term-io.d.ts.map +1 -0
- package/dist/term-io.js +216 -0
- package/dist/term-io.js.map +1 -0
- package/dist/term-json.d.ts +7 -0
- package/dist/term-json.d.ts.map +1 -0
- package/dist/term-json.js +362 -0
- package/dist/term-json.js.map +1 -0
- package/dist/types.d.ts +34 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +4 -0
- package/dist/types.js.map +1 -0
- package/dist/vocab.d.ts +2 -0
- package/dist/vocab.d.ts.map +1 -0
- package/dist/vocab.js +4 -0
- package/dist/vocab.js.map +1 -0
- package/package.json +83 -0
- package/src/alias.ts +36 -0
- package/src/cbor.ts +280 -0
- package/src/delta.ts +89 -0
- package/src/derivation.ts +229 -0
- package/src/eval.ts +401 -0
- package/src/hash.ts +19 -0
- package/src/http.ts +124 -0
- package/src/hview.ts +91 -0
- package/src/index.ts +83 -0
- package/src/json-profile.ts +96 -0
- package/src/pack.ts +239 -0
- package/src/peer.ts +126 -0
- package/src/policy.ts +216 -0
- package/src/pred.ts +307 -0
- package/src/reactor.ts +490 -0
- package/src/schema-deltas.ts +100 -0
- package/src/schema.ts +111 -0
- package/src/set.ts +98 -0
- package/src/sign.ts +48 -0
- package/src/term-io.ts +228 -0
- package/src/term-json.ts +364 -0
- package/src/types.ts +38 -0
- package/src/vocab.ts +3 -0
package/dist/eval.js
ADDED
|
@@ -0,0 +1,318 @@
|
|
|
1
|
+
// Term evaluation: select/union/mask over DSet (SPEC-2 §4.1-4.3), group into HView (§4.4),
|
|
2
|
+
// prune over HView (§4.6). eval is a pure function; order-blind; deterministic (SPEC-2 §5).
|
|
3
|
+
// Sorts are checked at evaluation time in v0 (ERRATA-2 E9).
|
|
4
|
+
import { array, encode, map, tstr } from "./cbor.js";
|
|
5
|
+
import { bytesToHex } from "./hash.js";
|
|
6
|
+
import { hviewCanonicalHex } from "./hview.js";
|
|
7
|
+
import { resolveView, viewCanonicalHex } from "./policy.js";
|
|
8
|
+
import { comparePrimitives, evalPred, strMatch, substituteHoles, } from "./pred.js";
|
|
9
|
+
import { VOCAB_PREFIX } from "./vocab.js";
|
|
10
|
+
import { fork, merge } from "./set.js";
|
|
11
|
+
const dsetResult = (set) => ({
|
|
12
|
+
sort: "dset",
|
|
13
|
+
set,
|
|
14
|
+
negated: new Set(),
|
|
15
|
+
annotated: false,
|
|
16
|
+
});
|
|
17
|
+
function expectDSet(r, op) {
|
|
18
|
+
if (r.sort !== "dset")
|
|
19
|
+
throw new Error(`${op} requires a DSet operand (E9)`);
|
|
20
|
+
return r;
|
|
21
|
+
}
|
|
22
|
+
function expectHView(r, op) {
|
|
23
|
+
if (r.sort !== "hview")
|
|
24
|
+
throw new Error(`${op} requires an HView operand (E9)`);
|
|
25
|
+
return r;
|
|
26
|
+
}
|
|
27
|
+
// negated(d, D) per SPEC-2 §4.3, over candidate negations restricted by `trusted` (E4).
|
|
28
|
+
// Memoized with an in-progress default of "not negated" (E5 recursion guard).
|
|
29
|
+
function computeNegated(d, trusted) {
|
|
30
|
+
const negators = new Map(); // target delta id -> negation delta ids
|
|
31
|
+
for (const n of d) {
|
|
32
|
+
if (trusted !== undefined && !trusted(n))
|
|
33
|
+
continue;
|
|
34
|
+
for (const ptr of n.claims.pointers) {
|
|
35
|
+
if (ptr.role === "negates" && ptr.target.kind === "delta") {
|
|
36
|
+
const list = negators.get(ptr.target.deltaRef.delta);
|
|
37
|
+
if (list === undefined)
|
|
38
|
+
negators.set(ptr.target.deltaRef.delta, [n.id]);
|
|
39
|
+
else
|
|
40
|
+
list.push(n.id);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
const memo = new Map();
|
|
45
|
+
const isNegated = (id) => {
|
|
46
|
+
const cached = memo.get(id);
|
|
47
|
+
if (cached !== undefined)
|
|
48
|
+
return cached;
|
|
49
|
+
memo.set(id, false); // guard: cycles are impossible with verified ids, but degrade safely
|
|
50
|
+
const result = (negators.get(id) ?? []).some((nid) => !isNegated(nid));
|
|
51
|
+
memo.set(id, result);
|
|
52
|
+
return result;
|
|
53
|
+
};
|
|
54
|
+
const out = new Set();
|
|
55
|
+
for (const delta of d)
|
|
56
|
+
if (isNegated(delta.id))
|
|
57
|
+
out.add(delta.id);
|
|
58
|
+
return out;
|
|
59
|
+
}
|
|
60
|
+
// --- the aliased closure (SPEC-9 §4.1) -----------------------------------------------------------
|
|
61
|
+
const ALIAS_FRAGMENT = `${VOCAB_PREFIX}.alias.fragment`;
|
|
62
|
+
const ALIAS_SLOT = `${VOCAB_PREFIX}.alias.slot`;
|
|
63
|
+
const ALIAS_CONCEPT = `${VOCAB_PREFIX}.alias.concept`;
|
|
64
|
+
// closure(A, D): name → slots → fragments, one hop, computed against the AMBIENT evaluation
|
|
65
|
+
// input. The trust predicate restricts every participant — mappings, slot declarations, and the
|
|
66
|
+
// negations of both — and negation chains are walked within the trusted set only (mask(trust)
|
|
67
|
+
// semantics). Returns the closure sorted by the canonical string order; the name is always a
|
|
68
|
+
// member, so an aliased with no surviving mappings degrades to exact(name).
|
|
69
|
+
export function aliasClosure(input, spec, root) {
|
|
70
|
+
const trustPred = spec.trust;
|
|
71
|
+
const trusted = trustPred === undefined ? undefined : (n) => evalPred(trustPred, n, root);
|
|
72
|
+
const negated = computeNegated(input, trusted);
|
|
73
|
+
const mappings = [];
|
|
74
|
+
const slotConcepts = new Map();
|
|
75
|
+
for (const d of input) {
|
|
76
|
+
if (trusted !== undefined && !trusted(d))
|
|
77
|
+
continue;
|
|
78
|
+
if (negated.has(d.id))
|
|
79
|
+
continue;
|
|
80
|
+
const fragments = [];
|
|
81
|
+
const slots = [];
|
|
82
|
+
const concepts = [];
|
|
83
|
+
for (const ptr of d.claims.pointers) {
|
|
84
|
+
if (ptr.role === ALIAS_FRAGMENT && ptr.target.kind === "primitive") {
|
|
85
|
+
if (typeof ptr.target.value === "string")
|
|
86
|
+
fragments.push(ptr.target.value);
|
|
87
|
+
}
|
|
88
|
+
else if (ptr.role === ALIAS_SLOT && ptr.target.kind === "entity") {
|
|
89
|
+
slots.push(ptr.target.entity.id);
|
|
90
|
+
}
|
|
91
|
+
else if (ptr.role === ALIAS_CONCEPT && ptr.target.kind === "entity") {
|
|
92
|
+
concepts.push(ptr.target.entity.id);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
// Mapping claim: ≥1 fragment × ≥1 slot, cross product (SPEC-9 §3). Anything else with the
|
|
96
|
+
// alias roles is not a mapping and is ignored here (graceful degradation).
|
|
97
|
+
for (const fragment of fragments)
|
|
98
|
+
for (const slot of slots)
|
|
99
|
+
mappings.push({ fragment, slot });
|
|
100
|
+
// Slot declaration: ≥1 slot × ≥1 concept (SPEC-9 §2).
|
|
101
|
+
for (const slot of slots) {
|
|
102
|
+
for (const concept of concepts) {
|
|
103
|
+
let set = slotConcepts.get(slot);
|
|
104
|
+
if (set === undefined) {
|
|
105
|
+
set = new Set();
|
|
106
|
+
slotConcepts.set(slot, set);
|
|
107
|
+
}
|
|
108
|
+
set.add(concept);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
const eligible = spec.via === undefined
|
|
113
|
+
? mappings
|
|
114
|
+
: mappings.filter((m) => slotConcepts.get(m.slot)?.has(spec.via) ?? false);
|
|
115
|
+
const slotsOfName = new Set(eligible.filter((m) => m.fragment === spec.name).map((m) => m.slot));
|
|
116
|
+
const closure = new Set([spec.name]);
|
|
117
|
+
for (const m of eligible)
|
|
118
|
+
if (slotsOfName.has(m.slot))
|
|
119
|
+
closure.add(m.fragment);
|
|
120
|
+
return [...closure].sort(comparePrimitives);
|
|
121
|
+
}
|
|
122
|
+
// Expand an aliased StrMatch to its inSet form against the ambient input; other forms pass.
|
|
123
|
+
function expandStrMatch(m, input, root) {
|
|
124
|
+
if (m.kind !== "aliased")
|
|
125
|
+
return m;
|
|
126
|
+
return { kind: "inSet", values: aliasClosure(input, m, root) };
|
|
127
|
+
}
|
|
128
|
+
// Expand every aliased StrMatch in a predicate (ppred role/context) against the ambient input.
|
|
129
|
+
// Applied where predicates meet data (select / mask-trust), after hole substitution (SPEC-9 §4.1).
|
|
130
|
+
export function expandAliased(pred, input, root) {
|
|
131
|
+
switch (pred.kind) {
|
|
132
|
+
case "true":
|
|
133
|
+
case "false":
|
|
134
|
+
case "match":
|
|
135
|
+
return pred;
|
|
136
|
+
case "hasPointer": {
|
|
137
|
+
const p = pred.ppred;
|
|
138
|
+
const role = p.role === undefined ? undefined : expandStrMatch(p.role, input, root);
|
|
139
|
+
const context = p.context === undefined ? undefined : expandStrMatch(p.context, input, root);
|
|
140
|
+
if (role === p.role && context === p.context)
|
|
141
|
+
return pred;
|
|
142
|
+
return {
|
|
143
|
+
kind: "hasPointer",
|
|
144
|
+
ppred: {
|
|
145
|
+
...p,
|
|
146
|
+
...(role === undefined ? {} : { role }),
|
|
147
|
+
...(context === undefined ? {} : { context }),
|
|
148
|
+
},
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
case "and":
|
|
152
|
+
return {
|
|
153
|
+
kind: "and",
|
|
154
|
+
left: expandAliased(pred.left, input, root),
|
|
155
|
+
right: expandAliased(pred.right, input, root),
|
|
156
|
+
};
|
|
157
|
+
case "or":
|
|
158
|
+
return {
|
|
159
|
+
kind: "or",
|
|
160
|
+
left: expandAliased(pred.left, input, root),
|
|
161
|
+
right: expandAliased(pred.right, input, root),
|
|
162
|
+
};
|
|
163
|
+
case "not":
|
|
164
|
+
return { kind: "not", pred: expandAliased(pred.pred, input, root) };
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
// group(key, D) @ root — filing rules per ERRATA-2 E6; annotate tags thread into entries (E7).
|
|
168
|
+
function evalGroup(key, operand, root) {
|
|
169
|
+
const buckets = new Map(); // prop -> deltaId -> entry
|
|
170
|
+
const file = (prop, d) => {
|
|
171
|
+
let bucket = buckets.get(prop);
|
|
172
|
+
if (bucket === undefined) {
|
|
173
|
+
bucket = new Map();
|
|
174
|
+
buckets.set(prop, bucket);
|
|
175
|
+
}
|
|
176
|
+
if (!bucket.has(d.id))
|
|
177
|
+
bucket.set(d.id, { delta: d, negated: operand.negated.has(d.id) });
|
|
178
|
+
};
|
|
179
|
+
for (const d of operand.set) {
|
|
180
|
+
if (key.kind === "const") {
|
|
181
|
+
file(key.prop, d);
|
|
182
|
+
continue;
|
|
183
|
+
}
|
|
184
|
+
for (const ptr of d.claims.pointers) {
|
|
185
|
+
if (ptr.target.kind !== "entity" || ptr.target.entity.id !== root)
|
|
186
|
+
continue;
|
|
187
|
+
if (key.kind === "byTargetContext") {
|
|
188
|
+
const ctx = ptr.target.entity.context;
|
|
189
|
+
if (ctx !== undefined)
|
|
190
|
+
file(ctx, d);
|
|
191
|
+
}
|
|
192
|
+
else {
|
|
193
|
+
file(ptr.role, d);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
const props = new Map();
|
|
198
|
+
for (const [prop, bucket] of buckets) {
|
|
199
|
+
props.set(prop, [...bucket.values()].sort((a, b) => (a.delta.id < b.delta.id ? -1 : 1)));
|
|
200
|
+
}
|
|
201
|
+
return { id: root, props };
|
|
202
|
+
}
|
|
203
|
+
export function evalTerm(term, input, root, registry, bindings) {
|
|
204
|
+
switch (term.kind) {
|
|
205
|
+
case "input":
|
|
206
|
+
return dsetResult(input);
|
|
207
|
+
case "select": {
|
|
208
|
+
const of = expectDSet(evalTerm(term.of, input, root, registry, bindings), "select");
|
|
209
|
+
const pred = expandAliased(substituteHoles(term.pred, bindings), input, root);
|
|
210
|
+
return dsetResult(fork(of.set, (d) => evalPred(pred, d, root)));
|
|
211
|
+
}
|
|
212
|
+
case "union": {
|
|
213
|
+
const left = expectDSet(evalTerm(term.left, input, root, registry, bindings), "union");
|
|
214
|
+
const right = expectDSet(evalTerm(term.right, input, root, registry, bindings), "union");
|
|
215
|
+
return dsetResult(merge(left.set, right.set));
|
|
216
|
+
}
|
|
217
|
+
case "mask": {
|
|
218
|
+
const of = expectDSet(evalTerm(term.of, input, root, registry, bindings), "mask");
|
|
219
|
+
switch (term.policy.kind) {
|
|
220
|
+
case "drop": {
|
|
221
|
+
const negated = computeNegated(of.set);
|
|
222
|
+
return dsetResult(fork(of.set, (d) => !negated.has(d.id)));
|
|
223
|
+
}
|
|
224
|
+
case "annotate": {
|
|
225
|
+
const negated = computeNegated(of.set);
|
|
226
|
+
return { sort: "dset", set: of.set, negated, annotated: true };
|
|
227
|
+
}
|
|
228
|
+
case "trust": {
|
|
229
|
+
const pred = expandAliased(substituteHoles(term.policy.pred, bindings), input, root);
|
|
230
|
+
const negated = computeNegated(of.set, (n) => evalPred(pred, n, root));
|
|
231
|
+
return dsetResult(fork(of.set, (d) => !negated.has(d.id)));
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
break;
|
|
235
|
+
}
|
|
236
|
+
case "group": {
|
|
237
|
+
if (root === undefined)
|
|
238
|
+
throw new Error("group requires an ambient root entity (E9)");
|
|
239
|
+
const of = expectDSet(evalTerm(term.of, input, root, registry, bindings), "group");
|
|
240
|
+
return { sort: "hview", hview: evalGroup(term.key, of, root) };
|
|
241
|
+
}
|
|
242
|
+
case "prune": {
|
|
243
|
+
const of = expectHView(evalTerm(term.of, input, root, registry, bindings), "prune");
|
|
244
|
+
if (term.keep === "all")
|
|
245
|
+
return of;
|
|
246
|
+
const keep = expandStrMatch(term.keep, input, root);
|
|
247
|
+
const props = new Map();
|
|
248
|
+
for (const [prop, entries] of of.hview.props) {
|
|
249
|
+
if (strMatch(keep, prop))
|
|
250
|
+
props.set(prop, entries);
|
|
251
|
+
}
|
|
252
|
+
return { sort: "hview", hview: { id: of.hview.id, props } };
|
|
253
|
+
}
|
|
254
|
+
case "expand": {
|
|
255
|
+
const of = expectHView(evalTerm(term.of, input, root, registry, bindings), "expand");
|
|
256
|
+
const role = expandStrMatch(term.role, input, root);
|
|
257
|
+
const props = new Map();
|
|
258
|
+
for (const [prop, entries] of of.hview.props) {
|
|
259
|
+
props.set(prop, entries.map((e) => {
|
|
260
|
+
let expanded;
|
|
261
|
+
e.delta.claims.pointers.forEach((ptr, i) => {
|
|
262
|
+
// Only role-matching EntityRef pointers expand; everything else passes through
|
|
263
|
+
// as written (E11, SPEC-3 §7 graceful degradation).
|
|
264
|
+
if (ptr.target.kind !== "entity" || !strMatch(role, ptr.role))
|
|
265
|
+
return;
|
|
266
|
+
const nested = evalSchema(term.schema, input, ptr.target.entity.id, registry, bindings);
|
|
267
|
+
expanded = expanded ?? new Map(e.expanded ?? []);
|
|
268
|
+
expanded.set(i, nested);
|
|
269
|
+
});
|
|
270
|
+
return expanded === undefined ? e : { ...e, expanded };
|
|
271
|
+
}));
|
|
272
|
+
}
|
|
273
|
+
return { sort: "hview", hview: { id: of.hview.id, props } };
|
|
274
|
+
}
|
|
275
|
+
case "fix":
|
|
276
|
+
// The invocation instruction: ambient root is set explicitly (E10); bindings, when
|
|
277
|
+
// present, become the ambient hole environment for the invoked body (E15).
|
|
278
|
+
return {
|
|
279
|
+
sort: "hview",
|
|
280
|
+
hview: evalSchema(term.schema, input, term.entity, registry, term.bindings ?? bindings),
|
|
281
|
+
};
|
|
282
|
+
case "resolve": {
|
|
283
|
+
const of = expectHView(evalTerm(term.of, input, root, registry, bindings), "resolve");
|
|
284
|
+
return { sort: "view", view: resolveView(term.policy, of.hview) };
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
// Evaluate a named schema at a root over the SAME delta set the enclosing evaluation received
|
|
289
|
+
// (SPEC-2 §4.5). Termination is the schema DAG's, enforced at registry build (SPEC-3 §3).
|
|
290
|
+
function evalSchema(ref, input, root, registry, bindings) {
|
|
291
|
+
const label = ref.kind === "name" ? ref.name : `pinned:${ref.hash.slice(0, 12)}…`;
|
|
292
|
+
if (registry === undefined)
|
|
293
|
+
throw new Error(`schema ${label} referenced but no registry supplied (E10)`);
|
|
294
|
+
const schema = registry.resolve(ref);
|
|
295
|
+
if (schema === undefined)
|
|
296
|
+
throw new Error(`unknown schema: ${label} (E10/E13)`);
|
|
297
|
+
const result = evalTerm(schema.body, input, root, registry, bindings);
|
|
298
|
+
if (result.sort !== "hview") {
|
|
299
|
+
throw new Error(`schema ${label} body must be an HView-sort term (E10)`);
|
|
300
|
+
}
|
|
301
|
+
return result.hview;
|
|
302
|
+
}
|
|
303
|
+
// Canonical serialization of an evaluation result (ERRATA-2 E2, E7).
|
|
304
|
+
export function resultCanonicalHex(result) {
|
|
305
|
+
if (result.sort === "view")
|
|
306
|
+
return viewCanonicalHex(result.view);
|
|
307
|
+
if (result.sort === "hview")
|
|
308
|
+
return hviewCanonicalHex(result.hview);
|
|
309
|
+
const ids = result.set.ids().map(tstr);
|
|
310
|
+
if (!result.annotated)
|
|
311
|
+
return bytesToHex(encode(array(ids)));
|
|
312
|
+
const negated = [...result.negated].sort().map(tstr);
|
|
313
|
+
return bytesToHex(encode(map([
|
|
314
|
+
["ids", array(ids)],
|
|
315
|
+
["negated", array(negated)],
|
|
316
|
+
])));
|
|
317
|
+
}
|
|
318
|
+
//# sourceMappingURL=eval.js.map
|
package/dist/eval.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eval.js","sourceRoot":"","sources":["../src/eval.ts"],"names":[],"mappings":"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"}
|
package/dist/hash.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hash.d.ts","sourceRoot":"","sources":["../src/hash.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAQjD,wBAAgB,cAAc,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAOvD;AAED,OAAO,EAAE,UAAU,EAAE,CAAC"}
|
package/dist/hash.js
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { blake3 } from "@noble/hashes/blake3";
|
|
2
|
+
import { bytesToHex } from "@noble/hashes/utils";
|
|
3
|
+
// BLAKE3 multicodec code (https://github.com/multiformats/multicodec). Both it and the 32-byte
|
|
4
|
+
// length fit in a single-byte varint, so the multihash prefix is simply [0x1e, 0x20].
|
|
5
|
+
const BLAKE3_MULTICODEC = 0x1e;
|
|
6
|
+
const DIGEST_LEN = 32;
|
|
7
|
+
// id = multihash(BLAKE3-256(data)) as lowercase hex (SPEC-1 §4, ERRATA D7).
|
|
8
|
+
export function contentAddress(data) {
|
|
9
|
+
const digest = blake3(data, { dkLen: DIGEST_LEN });
|
|
10
|
+
const mh = new Uint8Array(2 + digest.length);
|
|
11
|
+
mh[0] = BLAKE3_MULTICODEC;
|
|
12
|
+
mh[1] = digest.length;
|
|
13
|
+
mh.set(digest, 2);
|
|
14
|
+
return bytesToHex(mh);
|
|
15
|
+
}
|
|
16
|
+
export { bytesToHex };
|
|
17
|
+
//# sourceMappingURL=hash.js.map
|
package/dist/hash.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hash.js","sourceRoot":"","sources":["../src/hash.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD,+FAA+F;AAC/F,sFAAsF;AACtF,MAAM,iBAAiB,GAAG,IAAI,CAAC;AAC/B,MAAM,UAAU,GAAG,EAAE,CAAC;AAEtB,4EAA4E;AAC5E,MAAM,UAAU,cAAc,CAAC,IAAgB;IAC7C,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;IACnD,MAAM,EAAE,GAAG,IAAI,UAAU,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IAC7C,EAAE,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC;IAC1B,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;IACtB,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAClB,OAAO,UAAU,CAAC,EAAE,CAAC,CAAC;AACxB,CAAC;AAED,OAAO,EAAE,UAAU,EAAE,CAAC"}
|
package/dist/http.d.ts
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { type Server } from "node:http";
|
|
2
|
+
import { Peer } from "./peer.js";
|
|
3
|
+
interface WireDelta {
|
|
4
|
+
claims: unknown;
|
|
5
|
+
sig?: string;
|
|
6
|
+
}
|
|
7
|
+
interface SyncResponse {
|
|
8
|
+
bundles: Array<{
|
|
9
|
+
manifest: WireDelta;
|
|
10
|
+
members: WireDelta[];
|
|
11
|
+
}>;
|
|
12
|
+
loose: WireDelta[];
|
|
13
|
+
}
|
|
14
|
+
export declare function offerFor(peer: Peer, have: ReadonlySet<string>): SyncResponse;
|
|
15
|
+
export declare function servePeer(peer: Peer, port: number): Promise<Server>;
|
|
16
|
+
export declare function pullFromUrl(peer: Peer, baseUrl: string): Promise<{
|
|
17
|
+
accepted: number;
|
|
18
|
+
rejected: number;
|
|
19
|
+
}>;
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=http.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AAGA,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,WAAW,CAAC;AAEtD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAMjC,UAAU,SAAS;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,UAAU,YAAY;IACpB,OAAO,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,SAAS,CAAC;QAAC,OAAO,EAAE,SAAS,EAAE,CAAA;KAAE,CAAC,CAAC;IAC9D,KAAK,EAAE,SAAS,EAAE,CAAC;CACpB;AAcD,wBAAgB,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,YAAY,CAoB5E;AAGD,wBAAgB,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAsBnE;AAGD,wBAAsB,WAAW,CAC/B,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,MAAM,GACd,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAuCjD"}
|
package/dist/http.js
ADDED
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
// The blessed HTTP federation binding (ERRATA-6 F5): POST /rhz/v0/sync over the Peer protocol.
|
|
2
|
+
// Transport only — partitioning, the signature boundary, and admission all live in Peer (F3/§5).
|
|
3
|
+
import { createServer } from "node:http";
|
|
4
|
+
import { claimsToJson, parseClaims } from "./json-profile.js";
|
|
5
|
+
import { manifestMemberIds } from "./reactor.js";
|
|
6
|
+
import { makeDelta } from "./set.js";
|
|
7
|
+
import { verifyDelta } from "./sign.js";
|
|
8
|
+
function toWire(d) {
|
|
9
|
+
// No id on the wire: the receiver recomputes content addresses (F5; never trust the wire).
|
|
10
|
+
return d.sig === undefined
|
|
11
|
+
? { claims: claimsToJson(d.claims) }
|
|
12
|
+
: { claims: claimsToJson(d.claims), sig: d.sig };
|
|
13
|
+
}
|
|
14
|
+
function fromWire(w) {
|
|
15
|
+
return makeDelta(parseClaims(w.claims), w.sig);
|
|
16
|
+
}
|
|
17
|
+
// Compute the OFFER for a WANT, partitioned per the signature boundary (F3).
|
|
18
|
+
export function offerFor(peer, have) {
|
|
19
|
+
const offered = peer.offeredSet().filter((d) => !have.has(d.id));
|
|
20
|
+
const offeredIds = new Set(offered.map((d) => d.id));
|
|
21
|
+
const isSignedManifest = (d) => d.sig !== undefined && verifyDelta(d) === "verified" && manifestMemberIds(d).length > 0;
|
|
22
|
+
const covered = new Set();
|
|
23
|
+
const bundles = [];
|
|
24
|
+
for (const m of offered.filter(isSignedManifest)) {
|
|
25
|
+
const members = manifestMemberIds(m)
|
|
26
|
+
.filter((id) => offeredIds.has(id))
|
|
27
|
+
.map((id) => offered.find((d) => d.id === id))
|
|
28
|
+
.filter((d) => !isSignedManifest(d));
|
|
29
|
+
bundles.push({ manifest: toWire(m), members: members.map(toWire) });
|
|
30
|
+
for (const mem of members)
|
|
31
|
+
covered.add(mem.id);
|
|
32
|
+
covered.add(m.id);
|
|
33
|
+
}
|
|
34
|
+
const loose = offered
|
|
35
|
+
.filter((d) => !covered.has(d.id) && d.sig !== undefined && verifyDelta(d) === "verified")
|
|
36
|
+
.map(toWire);
|
|
37
|
+
return { bundles, loose };
|
|
38
|
+
}
|
|
39
|
+
// Serve a peer's offered lens over HTTP. Returns the server; close it when done.
|
|
40
|
+
export function servePeer(peer, port) {
|
|
41
|
+
const server = createServer((req, res) => {
|
|
42
|
+
if (req.method !== "POST" || req.url !== "/rhz/v0/sync") {
|
|
43
|
+
res.writeHead(404).end();
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
const chunks = [];
|
|
47
|
+
req.on("data", (c) => chunks.push(c));
|
|
48
|
+
req.on("end", () => {
|
|
49
|
+
try {
|
|
50
|
+
const body = JSON.parse(Buffer.concat(chunks).toString("utf8"));
|
|
51
|
+
const have = new Set(Array.isArray(body.have) ? body.have : []);
|
|
52
|
+
const response = offerFor(peer, have);
|
|
53
|
+
res.writeHead(200, { "content-type": "application/json" });
|
|
54
|
+
res.end(JSON.stringify(response));
|
|
55
|
+
}
|
|
56
|
+
catch (e) {
|
|
57
|
+
res.writeHead(400, { "content-type": "application/json" });
|
|
58
|
+
res.end(JSON.stringify({ error: e instanceof Error ? e.message : String(e) }));
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
return new Promise((resolve) => server.listen(port, "127.0.0.1", () => resolve(server)));
|
|
63
|
+
}
|
|
64
|
+
// Pull from a remote peer over HTTP: WANT(my ids) -> verify -> admission -> ingest (§5).
|
|
65
|
+
export async function pullFromUrl(peer, baseUrl) {
|
|
66
|
+
const have = peer.reactor.arrivalLog().map((d) => d.id);
|
|
67
|
+
const res = await fetch(`${baseUrl}/rhz/v0/sync`, {
|
|
68
|
+
method: "POST",
|
|
69
|
+
headers: { "content-type": "application/json" },
|
|
70
|
+
body: JSON.stringify({ have }),
|
|
71
|
+
});
|
|
72
|
+
if (!res.ok)
|
|
73
|
+
throw new Error(`sync failed: HTTP ${res.status}`);
|
|
74
|
+
const offer = (await res.json());
|
|
75
|
+
let accepted = 0;
|
|
76
|
+
let rejected = 0;
|
|
77
|
+
// Reuse the local admission machinery by reconstructing deltas and handing them to the
|
|
78
|
+
// same ingest paths pullFrom uses: bundles atomically, loose individually.
|
|
79
|
+
for (const b of offer.bundles) {
|
|
80
|
+
const manifest = fromWire(b.manifest);
|
|
81
|
+
if (verifyDelta(manifest) !== "verified") {
|
|
82
|
+
rejected += 1 + b.members.length;
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
const members = b.members.map(fromWire);
|
|
86
|
+
if (!peer.admits(manifest) || !members.every((m) => peer.admits(m))) {
|
|
87
|
+
rejected += 1 + members.length;
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
const result = peer.reactor.ingestBundle(manifest, members);
|
|
91
|
+
if (result.status === "accepted")
|
|
92
|
+
accepted += 1;
|
|
93
|
+
else if (result.status === "rejected")
|
|
94
|
+
rejected += 1;
|
|
95
|
+
}
|
|
96
|
+
for (const w of offer.loose) {
|
|
97
|
+
const d = fromWire(w);
|
|
98
|
+
if (verifyDelta(d) !== "verified" || !peer.admits(d)) {
|
|
99
|
+
rejected += 1;
|
|
100
|
+
continue;
|
|
101
|
+
}
|
|
102
|
+
const result = peer.reactor.ingest(d);
|
|
103
|
+
if (result.status === "accepted")
|
|
104
|
+
accepted += 1;
|
|
105
|
+
else if (result.status === "rejected")
|
|
106
|
+
rejected += 1;
|
|
107
|
+
}
|
|
108
|
+
return { accepted, rejected };
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=http.js.map
|
package/dist/http.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"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"}
|
package/dist/hview.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { type CborValue } from "./cbor.js";
|
|
2
|
+
import type { Delta } from "./types.js";
|
|
3
|
+
export interface HVEntry {
|
|
4
|
+
readonly delta: Delta;
|
|
5
|
+
readonly negated: boolean;
|
|
6
|
+
readonly expanded?: ReadonlyMap<number, HView>;
|
|
7
|
+
}
|
|
8
|
+
export interface HView {
|
|
9
|
+
readonly id: string;
|
|
10
|
+
readonly props: ReadonlyMap<string, readonly HVEntry[]>;
|
|
11
|
+
}
|
|
12
|
+
export declare function hvEntryToCbor(e: HVEntry): CborValue;
|
|
13
|
+
export declare function hviewToCbor(h: HView): CborValue;
|
|
14
|
+
export declare function hviewCanonicalHex(h: HView): string;
|
|
15
|
+
//# sourceMappingURL=hview.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hview.d.ts","sourceRoot":"","sources":["../src/hview.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,SAAS,EAAyC,MAAM,WAAW,CAAC;AAElF,OAAO,KAAK,EAAU,KAAK,EAAU,MAAM,YAAY,CAAC;AAExD,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IAEtB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAE1B,QAAQ,CAAC,QAAQ,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;CAChD;AAED,MAAM,WAAW,KAAK;IACpB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,OAAO,EAAE,CAAC,CAAC;CACzD;AA+CD,wBAAgB,aAAa,CAAC,CAAC,EAAE,OAAO,GAAG,SAAS,CAQnD;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,KAAK,GAAG,SAAS,CAS/C;AAGD,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,KAAK,GAAG,MAAM,CAElD"}
|
package/dist/hview.js
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
// The HyperView: the output sort of group/expand/prune — SPEC-3 §4, encoded per ERRATA-2 E7/E11.
|
|
2
|
+
// Provenance-complete: every entry carries the full delta; expansion is view structure keyed by
|
|
3
|
+
// pointer index, never a mutation of the delta.
|
|
4
|
+
import { array, bool, encode, float, map, tstr } from "./cbor.js";
|
|
5
|
+
import { bytesToHex } from "./hash.js";
|
|
6
|
+
function targetToCborWithExpansion(t, expansion) {
|
|
7
|
+
if (expansion !== undefined)
|
|
8
|
+
return hviewToCbor(expansion);
|
|
9
|
+
switch (t.kind) {
|
|
10
|
+
case "primitive": {
|
|
11
|
+
const v = t.value;
|
|
12
|
+
if (typeof v === "string")
|
|
13
|
+
return tstr(v);
|
|
14
|
+
if (typeof v === "boolean")
|
|
15
|
+
return bool(v);
|
|
16
|
+
return float(v);
|
|
17
|
+
}
|
|
18
|
+
case "entity": {
|
|
19
|
+
const entries = [["id", tstr(t.entity.id)]];
|
|
20
|
+
if (t.entity.context !== undefined)
|
|
21
|
+
entries.push(["context", tstr(t.entity.context)]);
|
|
22
|
+
return map(entries);
|
|
23
|
+
}
|
|
24
|
+
case "delta": {
|
|
25
|
+
const entries = [["delta", tstr(t.deltaRef.delta)]];
|
|
26
|
+
if (t.deltaRef.context !== undefined)
|
|
27
|
+
entries.push(["context", tstr(t.deltaRef.context)]);
|
|
28
|
+
return map(entries);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
// Claims rendered for an HVEntry: identical to the L1 canonical claims encoding, except that
|
|
33
|
+
// expanded pointer targets are replaced by nested HView maps (E11). Never used for hashing.
|
|
34
|
+
function claimsToCborWithExpansions(claims, expanded) {
|
|
35
|
+
return map([
|
|
36
|
+
["author", tstr(claims.author)],
|
|
37
|
+
[
|
|
38
|
+
"pointers",
|
|
39
|
+
array(claims.pointers.map((p, i) => map([
|
|
40
|
+
["role", tstr(p.role)],
|
|
41
|
+
["target", targetToCborWithExpansion(p.target, expanded?.get(i))],
|
|
42
|
+
]))),
|
|
43
|
+
],
|
|
44
|
+
["timestamp", float(claims.timestamp)],
|
|
45
|
+
]);
|
|
46
|
+
}
|
|
47
|
+
export function hvEntryToCbor(e) {
|
|
48
|
+
const entries = [
|
|
49
|
+
["id", tstr(e.delta.id)],
|
|
50
|
+
["claims", claimsToCborWithExpansions(e.delta.claims, e.expanded)],
|
|
51
|
+
];
|
|
52
|
+
if (e.delta.sig !== undefined)
|
|
53
|
+
entries.push(["sig", tstr(e.delta.sig)]);
|
|
54
|
+
if (e.negated)
|
|
55
|
+
entries.push(["negated", bool(true)]);
|
|
56
|
+
return map(entries);
|
|
57
|
+
}
|
|
58
|
+
export function hviewToCbor(h) {
|
|
59
|
+
const props = [...h.props.entries()].map(([prop, entries]) => [
|
|
60
|
+
prop,
|
|
61
|
+
array(entries.map(hvEntryToCbor)),
|
|
62
|
+
]);
|
|
63
|
+
return map([
|
|
64
|
+
["id", tstr(h.id)],
|
|
65
|
+
["props", map(props)],
|
|
66
|
+
]);
|
|
67
|
+
}
|
|
68
|
+
// HyperViews are content-addressable (SPEC-3 §4): same (schema, DSet) => byte-identical form.
|
|
69
|
+
export function hviewCanonicalHex(h) {
|
|
70
|
+
return bytesToHex(encode(hviewToCbor(h)));
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=hview.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hview.js","sourceRoot":"","sources":["../src/hview.ts"],"names":[],"mappings":"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"}
|