@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/schema.js
ADDED
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
// HyperSchemas and the schema registry (SPEC-3 §2-3 §6, ERRATA-2 E10/E13). The registry indexes
|
|
2
|
+
// schemas by name AND by term hash; pinned refs resolve by hash and are immutable by construction.
|
|
3
|
+
import { termHash } from "./term-io.js";
|
|
4
|
+
// refs are derived from the body — every expand/fix schema reference (E10).
|
|
5
|
+
export function collectRefs(term) {
|
|
6
|
+
const out = [];
|
|
7
|
+
const walk = (t) => {
|
|
8
|
+
switch (t.kind) {
|
|
9
|
+
case "input":
|
|
10
|
+
return;
|
|
11
|
+
case "select":
|
|
12
|
+
case "mask":
|
|
13
|
+
case "group":
|
|
14
|
+
case "prune":
|
|
15
|
+
case "resolve":
|
|
16
|
+
walk(t.of);
|
|
17
|
+
return;
|
|
18
|
+
case "union":
|
|
19
|
+
walk(t.left);
|
|
20
|
+
walk(t.right);
|
|
21
|
+
return;
|
|
22
|
+
case "expand":
|
|
23
|
+
out.push(t.schema);
|
|
24
|
+
walk(t.of);
|
|
25
|
+
return;
|
|
26
|
+
case "fix":
|
|
27
|
+
out.push(t.schema);
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
walk(term);
|
|
32
|
+
return out;
|
|
33
|
+
}
|
|
34
|
+
export class SchemaRegistry {
|
|
35
|
+
byName;
|
|
36
|
+
byHash;
|
|
37
|
+
constructor(byName, byHash) {
|
|
38
|
+
this.byName = byName;
|
|
39
|
+
this.byHash = byHash;
|
|
40
|
+
}
|
|
41
|
+
// Rejects duplicate names, unresolved refs, and reference cycles (SPEC-3 §3).
|
|
42
|
+
// Data cycles remain legal — the DAG constraint is on programs, not data.
|
|
43
|
+
static build(schemas) {
|
|
44
|
+
const byName = new Map();
|
|
45
|
+
const byHash = new Map();
|
|
46
|
+
const hashOf = new Map(); // name -> term hash
|
|
47
|
+
for (const s of schemas) {
|
|
48
|
+
if (byName.has(s.name))
|
|
49
|
+
throw new Error(`duplicate schema name: ${s.name}`);
|
|
50
|
+
byName.set(s.name, s);
|
|
51
|
+
const h = termHash(s.body);
|
|
52
|
+
hashOf.set(s.name, h);
|
|
53
|
+
// Two names MAY share a body hash; first registration wins the hash index.
|
|
54
|
+
if (!byHash.has(h))
|
|
55
|
+
byHash.set(h, s);
|
|
56
|
+
}
|
|
57
|
+
const resolveName = (ref, from) => {
|
|
58
|
+
if (ref.kind === "name") {
|
|
59
|
+
const s = byName.get(ref.name);
|
|
60
|
+
if (s === undefined)
|
|
61
|
+
throw new Error(`schema ${from} references unknown schema ${ref.name}`);
|
|
62
|
+
return s.name;
|
|
63
|
+
}
|
|
64
|
+
const s = byHash.get(ref.hash);
|
|
65
|
+
if (s === undefined) {
|
|
66
|
+
throw new Error(`schema ${from} references unknown pinned schema ${ref.hash} (E13)`);
|
|
67
|
+
}
|
|
68
|
+
return s.name;
|
|
69
|
+
};
|
|
70
|
+
const refs = new Map();
|
|
71
|
+
for (const s of schemas) {
|
|
72
|
+
refs.set(s.name, collectRefs(s.body).map((r) => resolveName(r, s.name)));
|
|
73
|
+
}
|
|
74
|
+
// DFS cycle detection over the resolved reference graph.
|
|
75
|
+
const state = new Map();
|
|
76
|
+
const visit = (name, path) => {
|
|
77
|
+
const st = state.get(name);
|
|
78
|
+
if (st === "done")
|
|
79
|
+
return;
|
|
80
|
+
if (st === "visiting") {
|
|
81
|
+
throw new Error(`schema reference cycle: ${[...path, name].join(" -> ")} (SPEC-3 §3)`);
|
|
82
|
+
}
|
|
83
|
+
state.set(name, "visiting");
|
|
84
|
+
for (const r of refs.get(name) ?? [])
|
|
85
|
+
visit(r, [...path, name]);
|
|
86
|
+
state.set(name, "done");
|
|
87
|
+
};
|
|
88
|
+
for (const s of schemas)
|
|
89
|
+
visit(s.name, []);
|
|
90
|
+
return new SchemaRegistry(byName, byHash);
|
|
91
|
+
}
|
|
92
|
+
get(name) {
|
|
93
|
+
return this.byName.get(name);
|
|
94
|
+
}
|
|
95
|
+
getByHash(hash) {
|
|
96
|
+
return this.byHash.get(hash);
|
|
97
|
+
}
|
|
98
|
+
resolve(ref) {
|
|
99
|
+
return ref.kind === "name" ? this.byName.get(ref.name) : this.byHash.get(ref.hash);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"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"}
|
package/dist/set.d.ts
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { Claims, Delta } from "./types.js";
|
|
2
|
+
export declare function makeDelta(claims: Claims, sig?: string): Delta;
|
|
3
|
+
export declare function makeNegationClaims(author: string, timestamp: number, targetDeltaId: string, reason?: string): Claims;
|
|
4
|
+
export declare class DeltaSet implements Iterable<Delta> {
|
|
5
|
+
private readonly byId;
|
|
6
|
+
static from(deltas: Iterable<Delta>): DeltaSet;
|
|
7
|
+
add(delta: Delta): boolean;
|
|
8
|
+
has(id: string): boolean;
|
|
9
|
+
get(id: string): Delta | undefined;
|
|
10
|
+
get size(): number;
|
|
11
|
+
[Symbol.iterator](): Iterator<Delta>;
|
|
12
|
+
ids(): string[];
|
|
13
|
+
digest(): string;
|
|
14
|
+
}
|
|
15
|
+
export declare function merge(a: DeltaSet, b: DeltaSet): DeltaSet;
|
|
16
|
+
export declare function fork(a: DeltaSet, p: (d: Delta) => boolean): DeltaSet;
|
|
17
|
+
export declare function federate(a: DeltaSet, b: DeltaSet, p: (d: Delta) => boolean): DeltaSet;
|
|
18
|
+
//# sourceMappingURL=set.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"set.d.ts","sourceRoot":"","sources":["../src/set.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,MAAM,EAAE,KAAK,EAAW,MAAM,YAAY,CAAC;AAGzD,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,KAAK,CAG7D;AAID,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,EACrB,MAAM,CAAC,EAAE,MAAM,GACd,MAAM,CAQR;AAED,qBAAa,QAAS,YAAW,QAAQ,CAAC,KAAK,CAAC;IAC9C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA4B;IAEjD,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,GAAG,QAAQ;IAS9C,GAAG,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO;IAS1B,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAIxB,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS;IAIlC,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC;IAKpC,GAAG,IAAI,MAAM,EAAE;IAKf,MAAM,IAAI,MAAM;CAGjB;AAGD,wBAAgB,KAAK,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAIxD;AAGD,wBAAgB,IAAI,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,KAAK,OAAO,GAAG,QAAQ,CAIpE;AAGD,wBAAgB,QAAQ,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,KAAK,OAAO,GAAG,QAAQ,CAErF"}
|
package/dist/set.js
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
// The delta set and its algebra (SPEC-1 §8): a mathematical set of deltas, deduplicated by id.
|
|
2
|
+
// merge is union (grow-only set CRDT), fork is filter, federate is merge of a filtered fork.
|
|
3
|
+
// There is no conflict at this layer — contradiction lives in superposition until evaluation.
|
|
4
|
+
import { array, encode, tstr } from "./cbor.js";
|
|
5
|
+
import { computeId } from "./delta.js";
|
|
6
|
+
import { contentAddress } from "./hash.js";
|
|
7
|
+
// Build a complete delta from claims (id computed, optional detached sig attached).
|
|
8
|
+
export function makeDelta(claims, sig) {
|
|
9
|
+
const id = computeId(claims);
|
|
10
|
+
return sig === undefined ? { id, claims } : { id, claims, sig };
|
|
11
|
+
}
|
|
12
|
+
// The negation vocabulary convention (SPEC-1 §7): an ordinary delta whose pointer targets the
|
|
13
|
+
// negated delta by content address under role "negates". Meaning is given at evaluation (mask).
|
|
14
|
+
export function makeNegationClaims(author, timestamp, targetDeltaId, reason) {
|
|
15
|
+
const pointers = [
|
|
16
|
+
{ role: "negates", target: { kind: "delta", deltaRef: { delta: targetDeltaId } } },
|
|
17
|
+
];
|
|
18
|
+
if (reason !== undefined) {
|
|
19
|
+
pointers.push({ role: "reason", target: { kind: "primitive", value: reason } });
|
|
20
|
+
}
|
|
21
|
+
return { timestamp, author, pointers };
|
|
22
|
+
}
|
|
23
|
+
export class DeltaSet {
|
|
24
|
+
byId = new Map();
|
|
25
|
+
static from(deltas) {
|
|
26
|
+
const s = new DeltaSet();
|
|
27
|
+
for (const d of deltas)
|
|
28
|
+
s.add(d);
|
|
29
|
+
return s;
|
|
30
|
+
}
|
|
31
|
+
// Idempotent insert; returns false when the id was already present. Verifies content
|
|
32
|
+
// addressing on the way in (P6): a delta whose id does not recompute is rejected, never
|
|
33
|
+
// repaired (SPEC-4 §2) — set semantics depend on true ids.
|
|
34
|
+
add(delta) {
|
|
35
|
+
if (this.byId.has(delta.id))
|
|
36
|
+
return false;
|
|
37
|
+
if (computeId(delta.claims) !== delta.id) {
|
|
38
|
+
throw new Error(`delta id ${delta.id} does not match its claims (content addressing, P6)`);
|
|
39
|
+
}
|
|
40
|
+
this.byId.set(delta.id, delta);
|
|
41
|
+
return true;
|
|
42
|
+
}
|
|
43
|
+
has(id) {
|
|
44
|
+
return this.byId.has(id);
|
|
45
|
+
}
|
|
46
|
+
get(id) {
|
|
47
|
+
return this.byId.get(id);
|
|
48
|
+
}
|
|
49
|
+
get size() {
|
|
50
|
+
return this.byId.size;
|
|
51
|
+
}
|
|
52
|
+
[Symbol.iterator]() {
|
|
53
|
+
return this.byId.values();
|
|
54
|
+
}
|
|
55
|
+
// Sorted lexicographically — the canonical enumeration order.
|
|
56
|
+
ids() {
|
|
57
|
+
return [...this.byId.keys()].sort();
|
|
58
|
+
}
|
|
59
|
+
// Canonical membership fingerprint (ERRATA D10, provisional helper — not the SPEC-6 digest).
|
|
60
|
+
digest() {
|
|
61
|
+
return contentAddress(encode(array(this.ids().map(tstr))));
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
// merge(A, B) = A ∪ B — commutative, associative, idempotent (SPEC-1 §8).
|
|
65
|
+
export function merge(a, b) {
|
|
66
|
+
const s = DeltaSet.from(a);
|
|
67
|
+
for (const d of b)
|
|
68
|
+
s.add(d);
|
|
69
|
+
return s;
|
|
70
|
+
}
|
|
71
|
+
// fork(A, p) = { d ∈ A : p(d) } — any filter yields a valid delta set (SPEC-1 §8).
|
|
72
|
+
export function fork(a, p) {
|
|
73
|
+
const s = new DeltaSet();
|
|
74
|
+
for (const d of a)
|
|
75
|
+
if (p(d))
|
|
76
|
+
s.add(d);
|
|
77
|
+
return s;
|
|
78
|
+
}
|
|
79
|
+
// federate(A, B, p) = A ∪ fork(B, p) — merge of a filtered fork (SPEC-1 §8).
|
|
80
|
+
export function federate(a, b, p) {
|
|
81
|
+
return merge(a, fork(b, p));
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=set.js.map
|
package/dist/set.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"set.js","sourceRoot":"","sources":["../src/set.ts"],"names":[],"mappings":"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"}
|
package/dist/sign.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Claims, Delta } from "./types.js";
|
|
2
|
+
export declare const AUTHOR_PREFIX = "ed25519:";
|
|
3
|
+
export declare function publicKeyFromSeed(seedHex: string): string;
|
|
4
|
+
export declare function authorForSeed(seedHex: string): string;
|
|
5
|
+
export declare function signClaims(claims: Claims, seedHex: string): Delta;
|
|
6
|
+
export type Verification = "verified" | "unsigned" | "invalid";
|
|
7
|
+
export declare function verifyDelta(delta: Delta): Verification;
|
|
8
|
+
//# sourceMappingURL=sign.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sign.d.ts","sourceRoot":"","sources":["../src/sign.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEhD,eAAO,MAAM,aAAa,aAAa,CAAC;AAExC,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEzD;AAGD,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAErD;AAID,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,KAAK,CAQjE;AAED,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,UAAU,GAAG,SAAS,CAAC;AAI/D,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,YAAY,CAYtD"}
|
package/dist/sign.js
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
// Ed25519 signing & verification (SPEC-1 §5, ERRATA D8-D9). Deterministic (RFC 8032), so
|
|
2
|
+
// signatures are reproducible across implementations and pinned in vectors.
|
|
3
|
+
import { ed25519 } from "@noble/curves/ed25519";
|
|
4
|
+
import { bytesToHex, hexToBytes } from "@noble/hashes/utils";
|
|
5
|
+
import { computeId } from "./delta.js";
|
|
6
|
+
export const AUTHOR_PREFIX = "ed25519:";
|
|
7
|
+
export function publicKeyFromSeed(seedHex) {
|
|
8
|
+
return bytesToHex(ed25519.getPublicKey(hexToBytes(seedHex)));
|
|
9
|
+
}
|
|
10
|
+
// The author string a signed delta MUST carry for this seed (ERRATA D8).
|
|
11
|
+
export function authorForSeed(seedHex) {
|
|
12
|
+
return AUTHOR_PREFIX + publicKeyFromSeed(seedHex);
|
|
13
|
+
}
|
|
14
|
+
// Sign claims, producing a complete delta. Refuses to sign claims whose author does not match
|
|
15
|
+
// the signing key — a signature contradicting its own author field is born broken (ERRATA D8).
|
|
16
|
+
export function signClaims(claims, seedHex) {
|
|
17
|
+
const expected = authorForSeed(seedHex);
|
|
18
|
+
if (claims.author !== expected) {
|
|
19
|
+
throw new Error(`author must be ${expected} for this signing key, got ${claims.author}`);
|
|
20
|
+
}
|
|
21
|
+
const id = computeId(claims);
|
|
22
|
+
const sig = bytesToHex(ed25519.sign(hexToBytes(id), hexToBytes(seedHex)));
|
|
23
|
+
return { id, claims, sig };
|
|
24
|
+
}
|
|
25
|
+
// Full verification per ERRATA D9: content addressing must hold, then the signature must verify
|
|
26
|
+
// over the raw id bytes against the key named in `author`.
|
|
27
|
+
export function verifyDelta(delta) {
|
|
28
|
+
if (computeId(delta.claims) !== delta.id)
|
|
29
|
+
return "invalid";
|
|
30
|
+
if (delta.sig === undefined)
|
|
31
|
+
return "unsigned";
|
|
32
|
+
if (!delta.claims.author.startsWith(AUTHOR_PREFIX))
|
|
33
|
+
return "invalid";
|
|
34
|
+
const pubHex = delta.claims.author.slice(AUTHOR_PREFIX.length);
|
|
35
|
+
try {
|
|
36
|
+
return ed25519.verify(hexToBytes(delta.sig), hexToBytes(delta.id), hexToBytes(pubHex))
|
|
37
|
+
? "verified"
|
|
38
|
+
: "invalid";
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
return "invalid";
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=sign.js.map
|
package/dist/sign.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sign.js","sourceRoot":"","sources":["../src/sign.ts"],"names":[],"mappings":"AAAA,yFAAyF;AACzF,4EAA4E;AAE5E,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAGvC,MAAM,CAAC,MAAM,aAAa,GAAG,UAAU,CAAC;AAExC,MAAM,UAAU,iBAAiB,CAAC,OAAe;IAC/C,OAAO,UAAU,CAAC,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAC/D,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,aAAa,CAAC,OAAe;IAC3C,OAAO,aAAa,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;AACpD,CAAC;AAED,8FAA8F;AAC9F,+FAA+F;AAC/F,MAAM,UAAU,UAAU,CAAC,MAAc,EAAE,OAAe;IACxD,MAAM,QAAQ,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IACxC,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,kBAAkB,QAAQ,8BAA8B,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAC3F,CAAC;IACD,MAAM,EAAE,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IAC7B,MAAM,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC1E,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AAC7B,CAAC;AAID,gGAAgG;AAChG,2DAA2D;AAC3D,MAAM,UAAU,WAAW,CAAC,KAAY;IACtC,IAAI,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,KAAK,CAAC,EAAE;QAAE,OAAO,SAAS,CAAC;IAC3D,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS;QAAE,OAAO,UAAU,CAAC;IAC/C,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,aAAa,CAAC;QAAE,OAAO,SAAS,CAAC;IACrE,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAC/D,IAAI,CAAC;QACH,OAAO,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;YACpF,CAAC,CAAC,UAAU;YACZ,CAAC,CAAC,SAAS,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type CborValue } from "./cbor.js";
|
|
2
|
+
import type { Term } from "./eval.js";
|
|
3
|
+
import type { Policy } from "./policy.js";
|
|
4
|
+
import type { Pred } from "./pred.js";
|
|
5
|
+
export declare function predToJson(pred: Pred): unknown;
|
|
6
|
+
export declare function policyToJson(p: Policy): unknown;
|
|
7
|
+
export declare function termToJson(term: Term): unknown;
|
|
8
|
+
export declare function jsonToCbor(v: unknown): CborValue;
|
|
9
|
+
export declare function cborToJson(v: CborValue): unknown;
|
|
10
|
+
export declare function termCanonicalBytes(term: Term): Uint8Array;
|
|
11
|
+
export declare function termCanonicalHex(term: Term): string;
|
|
12
|
+
export declare function termHash(term: Term): string;
|
|
13
|
+
//# sourceMappingURL=term-io.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"term-io.d.ts","sourceRoot":"","sources":["../src/term-io.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,SAAS,EAAyC,MAAM,WAAW,CAAC;AAClF,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,KAAK,EAAS,MAAM,EAAc,MAAM,aAAa,CAAC;AAC7D,OAAO,KAAK,EAAQ,IAAI,EAA6B,MAAM,WAAW,CAAC;AAyDvE,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAyB9C;AA8BD,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAI/C;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAgD9C;AAQD,wBAAgB,UAAU,CAAC,CAAC,EAAE,OAAO,GAAG,SAAS,CAchD;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,SAAS,GAAG,OAAO,CAchD;AAID,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,IAAI,GAAG,UAAU,CAEzD;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAEnD;AAGD,wBAAgB,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAE3C"}
|
package/dist/term-io.js
ADDED
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
// Term serialization back to the JSON profile, the generic JSON<->CBOR bridge, and term hashing
|
|
2
|
+
// (ERRATA-2 E12). parse(termToJson(t)) is identity on the AST, so semantically identical terms
|
|
3
|
+
// hash identically regardless of authored spelling.
|
|
4
|
+
import { array, bool, encode, float, map, tstr } from "./cbor.js";
|
|
5
|
+
import { bytesToHex, contentAddress } from "./hash.js";
|
|
6
|
+
// --- AST -> JSON profile ---------------------------------------------------------------------------
|
|
7
|
+
// Holes serialize to their profile spelling (E15); primitives pass through.
|
|
8
|
+
function paramToJson(v) {
|
|
9
|
+
return typeof v === "object" ? { hole: v.name } : v;
|
|
10
|
+
}
|
|
11
|
+
function strMatchToJson(m) {
|
|
12
|
+
switch (m.kind) {
|
|
13
|
+
case "exact":
|
|
14
|
+
return { exact: m.value };
|
|
15
|
+
case "prefix":
|
|
16
|
+
return { prefix: m.value };
|
|
17
|
+
case "inSet":
|
|
18
|
+
return { inSet: [...m.values] };
|
|
19
|
+
case "aliased": {
|
|
20
|
+
// Optional fields omitted when absent (SPEC-2 §7); the closure never enters the hash.
|
|
21
|
+
const a = { name: m.name };
|
|
22
|
+
if (m.via !== undefined)
|
|
23
|
+
a["via"] = m.via;
|
|
24
|
+
if (m.trust !== undefined)
|
|
25
|
+
a["trust"] = predToJson(m.trust);
|
|
26
|
+
return { aliased: a };
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
function valMatchToJson(m) {
|
|
31
|
+
switch (m.kind) {
|
|
32
|
+
case "vcmp":
|
|
33
|
+
return { vcmp: { cmp: m.cmp, value: paramToJson(m.value) } };
|
|
34
|
+
case "between":
|
|
35
|
+
return { between: [m.lo, m.hi] };
|
|
36
|
+
case "inSet":
|
|
37
|
+
return { inSet: [...m.values] };
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
function ppredToJson(p) {
|
|
41
|
+
const out = {};
|
|
42
|
+
if (p.role !== undefined)
|
|
43
|
+
out["role"] = strMatchToJson(p.role);
|
|
44
|
+
if (p.targetEntity !== undefined) {
|
|
45
|
+
out["targetEntity"] =
|
|
46
|
+
p.targetEntity.kind === "const"
|
|
47
|
+
? p.targetEntity.id
|
|
48
|
+
: p.targetEntity.kind === "hole"
|
|
49
|
+
? { hole: p.targetEntity.name }
|
|
50
|
+
: { var: "root" };
|
|
51
|
+
}
|
|
52
|
+
if (p.targetDelta !== undefined)
|
|
53
|
+
out["targetDelta"] = p.targetDelta;
|
|
54
|
+
if (p.context !== undefined)
|
|
55
|
+
out["context"] = strMatchToJson(p.context);
|
|
56
|
+
if (p.targetIsPrimitive !== undefined)
|
|
57
|
+
out["targetIsPrimitive"] = p.targetIsPrimitive;
|
|
58
|
+
if (p.targetValue !== undefined)
|
|
59
|
+
out["targetValue"] = valMatchToJson(p.targetValue);
|
|
60
|
+
return out;
|
|
61
|
+
}
|
|
62
|
+
export function predToJson(pred) {
|
|
63
|
+
switch (pred.kind) {
|
|
64
|
+
case "true":
|
|
65
|
+
return "true";
|
|
66
|
+
case "false":
|
|
67
|
+
return "false";
|
|
68
|
+
case "match":
|
|
69
|
+
return {
|
|
70
|
+
match: {
|
|
71
|
+
field: pred.field,
|
|
72
|
+
cmp: pred.cmp,
|
|
73
|
+
const: Array.isArray(pred.constant)
|
|
74
|
+
? [...pred.constant]
|
|
75
|
+
: paramToJson(pred.constant),
|
|
76
|
+
},
|
|
77
|
+
};
|
|
78
|
+
case "hasPointer":
|
|
79
|
+
return { hasPointer: ppredToJson(pred.ppred) };
|
|
80
|
+
case "and":
|
|
81
|
+
return { and: [predToJson(pred.left), predToJson(pred.right)] };
|
|
82
|
+
case "or":
|
|
83
|
+
return { or: [predToJson(pred.left), predToJson(pred.right)] };
|
|
84
|
+
case "not":
|
|
85
|
+
return { not: predToJson(pred.pred) };
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
function orderToJson(o) {
|
|
89
|
+
switch (o.kind) {
|
|
90
|
+
case "byTimestamp":
|
|
91
|
+
return { byTimestamp: o.dir };
|
|
92
|
+
case "byAuthorRank":
|
|
93
|
+
return { byAuthorRank: [...o.authors] };
|
|
94
|
+
case "byPred":
|
|
95
|
+
return { byPred: { pred: predToJson(o.pred), then: orderToJson(o.then) } };
|
|
96
|
+
case "lexById":
|
|
97
|
+
return "lexById";
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
function propPolicyToJson(pp) {
|
|
101
|
+
switch (pp.kind) {
|
|
102
|
+
case "pick":
|
|
103
|
+
return { pick: { order: orderToJson(pp.order) } };
|
|
104
|
+
case "all":
|
|
105
|
+
return { all: { order: orderToJson(pp.order) } };
|
|
106
|
+
case "merge":
|
|
107
|
+
return { merge: pp.fn };
|
|
108
|
+
case "conflicts":
|
|
109
|
+
return { conflicts: { order: orderToJson(pp.order) } };
|
|
110
|
+
case "absentAs":
|
|
111
|
+
return { absentAs: { const: pp.constant, then: propPolicyToJson(pp.then) } };
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
export function policyToJson(p) {
|
|
115
|
+
const props = {};
|
|
116
|
+
for (const [k, v] of p.props)
|
|
117
|
+
props[k] = propPolicyToJson(v);
|
|
118
|
+
return { props, default: propPolicyToJson(p.default) };
|
|
119
|
+
}
|
|
120
|
+
export function termToJson(term) {
|
|
121
|
+
switch (term.kind) {
|
|
122
|
+
case "input":
|
|
123
|
+
return "input";
|
|
124
|
+
case "select":
|
|
125
|
+
return { op: "select", pred: predToJson(term.pred), in: termToJson(term.of) };
|
|
126
|
+
case "union":
|
|
127
|
+
return { op: "union", left: termToJson(term.left), right: termToJson(term.right) };
|
|
128
|
+
case "mask": {
|
|
129
|
+
const policy = term.policy.kind === "trust" ? { trust: predToJson(term.policy.pred) } : term.policy.kind;
|
|
130
|
+
return { op: "mask", policy, in: termToJson(term.of) };
|
|
131
|
+
}
|
|
132
|
+
case "group": {
|
|
133
|
+
const key = term.key.kind === "const" ? { const: term.key.prop } : term.key.kind;
|
|
134
|
+
return { op: "group", key, in: termToJson(term.of) };
|
|
135
|
+
}
|
|
136
|
+
case "prune":
|
|
137
|
+
return {
|
|
138
|
+
op: "prune",
|
|
139
|
+
keep: term.keep === "all" ? "all" : strMatchToJson(term.keep),
|
|
140
|
+
in: termToJson(term.of),
|
|
141
|
+
};
|
|
142
|
+
case "expand":
|
|
143
|
+
return {
|
|
144
|
+
op: "expand",
|
|
145
|
+
role: strMatchToJson(term.role),
|
|
146
|
+
schema: schemaRefToJson(term.schema),
|
|
147
|
+
in: termToJson(term.of),
|
|
148
|
+
};
|
|
149
|
+
case "fix": {
|
|
150
|
+
const out = {
|
|
151
|
+
op: "fix",
|
|
152
|
+
schema: schemaRefToJson(term.schema),
|
|
153
|
+
entity: term.entity,
|
|
154
|
+
};
|
|
155
|
+
if (term.bindings !== undefined && term.bindings.size > 0) {
|
|
156
|
+
const bindings = {};
|
|
157
|
+
for (const key of [...term.bindings.keys()].sort()) {
|
|
158
|
+
bindings[key] = term.bindings.get(key);
|
|
159
|
+
}
|
|
160
|
+
out["bindings"] = bindings;
|
|
161
|
+
}
|
|
162
|
+
return out;
|
|
163
|
+
}
|
|
164
|
+
case "resolve":
|
|
165
|
+
return { op: "resolve", policy: policyToJson(term.policy), in: termToJson(term.of) };
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
function schemaRefToJson(ref) {
|
|
169
|
+
return ref.kind === "name" ? ref.name : { pinned: ref.hash };
|
|
170
|
+
}
|
|
171
|
+
// --- generic JSON <-> CBOR bridge ------------------------------------------------------------------
|
|
172
|
+
export function jsonToCbor(v) {
|
|
173
|
+
if (typeof v === "string")
|
|
174
|
+
return tstr(v);
|
|
175
|
+
if (typeof v === "number")
|
|
176
|
+
return float(v);
|
|
177
|
+
if (typeof v === "boolean")
|
|
178
|
+
return bool(v);
|
|
179
|
+
if (Array.isArray(v))
|
|
180
|
+
return array(v.map(jsonToCbor));
|
|
181
|
+
if (typeof v === "object" && v !== null) {
|
|
182
|
+
return map(Object.entries(v).map(([k, x]) => [
|
|
183
|
+
k,
|
|
184
|
+
jsonToCbor(x),
|
|
185
|
+
]));
|
|
186
|
+
}
|
|
187
|
+
throw new Error("json value outside the CBOR profile (null/undefined are not representable)");
|
|
188
|
+
}
|
|
189
|
+
export function cborToJson(v) {
|
|
190
|
+
switch (v.t) {
|
|
191
|
+
case "tstr":
|
|
192
|
+
case "float":
|
|
193
|
+
case "bool":
|
|
194
|
+
return v.v;
|
|
195
|
+
case "array":
|
|
196
|
+
return v.v.map(cborToJson);
|
|
197
|
+
case "map": {
|
|
198
|
+
const out = {};
|
|
199
|
+
for (const [k, x] of v.v)
|
|
200
|
+
out[k] = cborToJson(x);
|
|
201
|
+
return out;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
// --- term hashing (E12) ----------------------------------------------------------------------------
|
|
206
|
+
export function termCanonicalBytes(term) {
|
|
207
|
+
return encode(jsonToCbor(termToJson(term)));
|
|
208
|
+
}
|
|
209
|
+
export function termCanonicalHex(term) {
|
|
210
|
+
return bytesToHex(termCanonicalBytes(term));
|
|
211
|
+
}
|
|
212
|
+
// A term's content address: same multihash as deltas (E12).
|
|
213
|
+
export function termHash(term) {
|
|
214
|
+
return contentAddress(termCanonicalBytes(term));
|
|
215
|
+
}
|
|
216
|
+
//# sourceMappingURL=term-io.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"term-io.js","sourceRoot":"","sources":["../src/term-io.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Term } from "./eval.js";
|
|
2
|
+
import type { Policy } from "./policy.js";
|
|
3
|
+
import type { Pred } from "./pred.js";
|
|
4
|
+
export declare function parsePred(raw: unknown): Pred;
|
|
5
|
+
export declare function parsePolicy(raw: unknown): Policy;
|
|
6
|
+
export declare function parseTerm(raw: unknown): Term;
|
|
7
|
+
//# sourceMappingURL=term-json.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"term-json.d.ts","sourceRoot":"","sources":["../src/term-json.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAoC,IAAI,EAAE,MAAM,WAAW,CAAC;AACxE,OAAO,KAAK,EAAkB,MAAM,EAAc,MAAM,aAAa,CAAC;AACtE,OAAO,KAAK,EAAiC,IAAI,EAAsB,MAAM,WAAW,CAAC;AA0LzF,wBAAgB,SAAS,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAqC5C;AAiED,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAShD;AAiBD,wBAAgB,SAAS,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CA4C5C"}
|