@macula-io/ts 0.19.0 → 0.21.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/README.md CHANGED
@@ -20,7 +20,8 @@
20
20
  ---
21
21
 
22
22
  > **Status, 2026-09-26:** on the **macula 12** wire (post-quantum: ML-DSA-87
23
- > identities, ML-KEM hybrid key exchange, signed requests), over macula-go's
23
+ > identities, as the ML-DSA-87 + RSA-PSS-4096 composite in `pq_hybrid`, the
24
+ > fleet's profile; ML-KEM hybrid key exchange; signed requests), over macula-go's
24
25
  > pool. Calls and streams by direct dial, serving (under an org or in a node's
25
26
  > own namespace), publish/subscribe, the DHT and node-served content are
26
27
  > tested against in-process macula 12 stations on every `npm test`.
@@ -60,7 +61,7 @@ that's actually usable for this today:
60
61
 
61
62
  macula-go, macula-rust, macula-dotnet, and macula-php have all already
62
63
  proven this protocol works and are actively maintained. Rather than
63
- reimplement QUIC, post-quantum TLS, deterministic CBOR and signed frames a fifth time in a
64
+ reimplement QUIC, TLS 1.3 with a hybrid post-quantum key exchange, deterministic CBOR and signed frames a fifth time in a
64
65
  language with no mature QUIC story of its own, macula-ts reuses macula-go's
65
66
  already-proven implementation through FFI — the same tradeoff
66
67
  [macula-php](https://github.com/macula-io/macula-php) already made
@@ -154,13 +155,14 @@ a Promise; events, served calls and served streams reach JavaScript through a
154
155
 
155
156
  | Primitive | Caller | Provider | Notes |
156
157
  |---|---|---|---|
157
- | Node keys (`NodeKey`) | ✅ | ✅ | `pq_hybrid` (the fleet's) or `pq_pure`; key files readable by the owner only |
158
+ | Node keys (`NodeKey`) | ✅ | ✅ | `pq_hybrid` (the fleet's) or `pq_pure`; key files readable by the owner only; `sign` and `NodeKey.verify`, pq_hybrid checked against the LAMPS draft's own vector and cross-verified with macula 12.7.0 |
158
159
  | Pool of station links (`Pool.connect`) | ✅ | ✅ | Seeds pinned by node_id; realm keys pinned; links redialed with subscriptions and served procedures replayed |
159
160
  | Calls by direct dial (`call`, `providers`) | ✅ | ✅ | `serve`: a thrown error goes back as `handler_error`; errors arrive as `ProviderError` / `RelayError` |
160
161
  | A node's own namespace (`ownProcedure`) | ✅ | ✅ | `~<node_id>/<name>`: served and called with no org and no realm key; the node's signature authorizes it |
161
162
  | Streams (`openStream`, `serveStream`) | ✅ | ✅ | Server, client and bidi; a QUIC stream per session, released on every path |
162
163
  | Publish/subscribe | ✅ | ✅ | Signed publications, delivered once across links |
163
164
  | DHT (`findRecord`, `findRecords`, `findRecordsByType`, `putRecord`) | ✅ | — | Records verified before they are handed on |
165
+ | Realm proof v2 (`NodeKey.deviceRequestProof`) | ✅ | — | macula-realm#29: a join session over HTTP (`"http"`, the realm's JSON rule) or a membership UCAN over the mesh (`"mesh"`), with its device_info and ttl_seconds, the realm and the procedure signed, and a nonce; the realm's own vector reproduced through macula-go's encoder |
164
166
  | Node-served content (`shareContent`, `unshareContent`, `getContent`) | ✅ | ✅ | macula 12.6.0 (D27): shared on the node's own `~<node_id>/content_v1` and announced; a fetch checks the block, the manifest and every chunk against the content id, bounded, with no realm key; `NotSharedError` / `ContentUnavailableError` |
165
167
 
166
168
  ## Not yet implemented
@@ -183,6 +185,13 @@ keys, calls by direct dial and their errors, providers, server and client
183
185
  streams (and that no stream is left unreleased), pubsub and the DHT, through
184
186
  the real addon. No network is needed.
185
187
 
188
+ `src/lamps.test.ts` holds pq_hybrid, the LAMPS composite
189
+ id-MLDSA87-RSA4096-PSS-SHA512, to `draft-ietf-lamps-pq-composite-sigs`' own
190
+ vector (the one macula and macula-go check), and to composites that crossed
191
+ both ways with macula 12.x. `scripts/cross-verify-macula.sh` renews those: this
192
+ SDK signs, macula (from hex, in the image macula's own CI runs in) verifies
193
+ and signs its own, and this SDK verifies it.
194
+
186
195
  `src/fleet.live.test.ts` runs against one real station and is not part of
187
196
  `npm test`. It needs `MACULA_TS_LIVE_SEED` (host:port), `MACULA_TS_LIVE_STATION_ID`
188
197
  (the station's node_id), `MACULA_TS_LIVE_REALM` and `MACULA_TS_LIVE_REALM_KEY`;
package/dist/binding.d.ts CHANGED
@@ -17,7 +17,10 @@ export declare const native: {
17
17
  keyPublicKey(key: Handle): Uint8Array;
18
18
  keyProfile(key: Handle): string;
19
19
  keySign(key: Handle, data: Uint8Array): Promise<Uint8Array>;
20
+ keyDeviceRequestProof(key: Handle, realm: Uint8Array, procedure: string, requestJson: string, rule: number): Promise<string>;
21
+ deviceRequestMessage(publicKey: Uint8Array, realm: Uint8Array, procedure: string, timestampMs: number, nonce: Uint8Array, requestJson: string, rule: number): Uint8Array;
20
22
  keyFree(key: Handle): void;
23
+ verify(data: Uint8Array, signature: Uint8Array, publicKey: Uint8Array, profile: string): boolean;
21
24
  poolConnect(key: Handle, seedsJson: string, optionsJson: string): Promise<Handle>;
22
25
  poolClose(pool: Handle): Promise<void>;
23
26
  poolNodeId(pool: Handle): Uint8Array;
@@ -1 +1 @@
1
- {"version":3,"file":"binding.js","sourceRoot":"","sources":["../src/binding.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,oEAAoE;AACpE,4EAA4E;AAC5E,2EAA2E;AAC3E,0EAA0E;AAC1E,yBAAyB;AACzB,EAAE;AACF,4EAA4E;AAC5E,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE1C,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AAgBrE,8DAA8D;AAC9D,MAAM,CAAC,MAAM,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC,QAAQ,CA+CvD,CAAC"}
1
+ {"version":3,"file":"binding.js","sourceRoot":"","sources":["../src/binding.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,oEAAoE;AACpE,4EAA4E;AAC5E,2EAA2E;AAC3E,0EAA0E;AAC1E,yBAAyB;AACzB,EAAE;AACF,4EAA4E;AAC5E,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE1C,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AAgBrE,8DAA8D;AAC9D,MAAM,CAAC,MAAM,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC,QAAQ,CAmDvD,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export { NodeKey, type Profile } from "./key.js";
1
+ export { NodeKey, JOIN_SESSION_PROCEDURE, MEMBERSHIP_UCAN_PROCEDURE, type Profile, type DeviceRequestRule, type DeviceRequestProof, } from "./key.js";
2
2
  export { Pool, Subscription, Served, RecordType, type Seed, type PoolOptions, type LinkStatus, type Provider, type Event, type Request, type DhtRecord, } from "./pool.js";
3
3
  export { NotSharedError, ContentUnavailableError, DEFAULT_CONTENT_TIMEOUT_MS, type ContentOptions, type Mcid, } from "./content.js";
4
4
  export { Stream, StreamMode, type StreamEvent, type StreamRequest } from "./stream.js";
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  // @macula-io/ts: the macula 12 mesh from TypeScript, over macula-go.
2
- export { NodeKey } from "./key.js";
2
+ export { NodeKey, JOIN_SESSION_PROCEDURE, MEMBERSHIP_UCAN_PROCEDURE, } from "./key.js";
3
3
  export { Pool, Subscription, Served, RecordType, } from "./pool.js";
4
4
  export { NotSharedError, ContentUnavailableError, DEFAULT_CONTENT_TIMEOUT_MS, } from "./content.js";
5
5
  export { Stream, StreamMode } from "./stream.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,OAAO,EAAE,OAAO,EAAgB,MAAM,UAAU,CAAC;AACjD,OAAO,EACL,IAAI,EACJ,YAAY,EACZ,MAAM,EACN,UAAU,GAQX,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,cAAc,EACd,uBAAuB,EACvB,0BAA0B,GAG3B,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,MAAM,EAAE,UAAU,EAAwC,MAAM,aAAa,CAAC;AACvF,OAAO,EACL,aAAa,EACb,UAAU,EACV,WAAW,EACX,uBAAuB,GAIxB,MAAM,WAAW,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,OAAO,EACL,OAAO,EACP,sBAAsB,EACtB,yBAAyB,GAI1B,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,IAAI,EACJ,YAAY,EACZ,MAAM,EACN,UAAU,GAQX,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,cAAc,EACd,uBAAuB,EACvB,0BAA0B,GAG3B,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,MAAM,EAAE,UAAU,EAAwC,MAAM,aAAa,CAAC;AACvF,OAAO,EACL,aAAa,EACb,UAAU,EACV,WAAW,EACX,uBAAuB,GAIxB,MAAM,WAAW,CAAC"}
package/dist/key.d.ts CHANGED
@@ -1,6 +1,25 @@
1
1
  import { type Handle } from "./binding.js";
2
+ import { type Id, type JsonValue } from "./wire.js";
2
3
  /** A crypto profile: "pq_hybrid" (the fleet's) or "pq_pure". */
3
4
  export type Profile = "pq_hybrid" | "pq_pure";
5
+ /**
6
+ * How a device request is signed (realm proof v2, macula-realm#29): "http" is a
7
+ * join-session body under the realm's JSON rule (an integral number is an
8
+ * integer, a boolean or an integer beyond 2^53 - 1 is refused); "mesh" is a
9
+ * call's payload as this library puts it on the wire.
10
+ */
11
+ export type DeviceRequestRule = "http" | "mesh";
12
+ /** The procedure a join session over HTTP is signed for. */
13
+ export declare const JOIN_SESSION_PROCEDURE = "macula_realm.join_session";
14
+ /** The procedure a membership UCAN asked for over the mesh is signed for. */
15
+ export declare const MEMBERSHIP_UCAN_PROCEDURE = "macula_realm.membership_ucan";
16
+ /** A realm proof v2, as it goes on the wire beside the request's public_key. */
17
+ export interface DeviceRequestProof {
18
+ v: 2;
19
+ timestamp: number;
20
+ nonce: string;
21
+ signature: string;
22
+ }
4
23
  export declare class NodeKey {
5
24
  private handle;
6
25
  private constructor();
@@ -24,6 +43,25 @@ export declare class NodeKey {
24
43
  profile(): Profile;
25
44
  /** Signs data as given. */
26
45
  sign(data: Uint8Array): Promise<Uint8Array>;
46
+ /**
47
+ * A realm proof v2 (macula-realm#29) that this key made request (every field
48
+ * of it except "proof") for procedure in realm, now and with a fresh nonce.
49
+ * The request's device_info and ttl_seconds, the realm and the procedure are
50
+ * all signed, so the realm refuses a request changed on the way.
51
+ */
52
+ deviceRequestProof(realm: Id, procedure: string, request: {
53
+ [field: string]: JsonValue;
54
+ }, rule: DeviceRequestRule): Promise<DeviceRequestProof>;
55
+ /** The exact bytes a realm proof v2 signs, for a given timestamp and 16-byte
56
+ * nonce: what the realm's vector is checked against. */
57
+ static deviceRequestMessage(publicKey: Uint8Array, realm: Id, procedure: string, timestampMs: number, nonce: Uint8Array, request: {
58
+ [field: string]: JsonValue;
59
+ }, rule: DeviceRequestRule): Uint8Array;
60
+ /** Whether signature is valid over data for a public key as carried on the
61
+ * wire (publicKey()), under profile: ML-DSA-87 in pq_pure, and in pq_hybrid
62
+ * the LAMPS composite id-MLDSA87-RSA4096-PSS-SHA512 with the empty context,
63
+ * both halves verified. Anything malformed is false. */
64
+ static verify(data: Uint8Array, signature: Uint8Array, publicKey: Uint8Array, profile?: Profile): boolean;
27
65
  /** Frees the native key. The NodeKey is unusable after. */
28
66
  free(): void;
29
67
  /** @internal */
package/dist/key.js CHANGED
@@ -4,7 +4,12 @@
4
4
  // owner only.
5
5
  import { access } from "node:fs/promises";
6
6
  import { native } from "./binding.js";
7
- import { hex } from "./wire.js";
7
+ import { hex, id32 } from "./wire.js";
8
+ /** The procedure a join session over HTTP is signed for. */
9
+ export const JOIN_SESSION_PROCEDURE = "macula_realm.join_session";
10
+ /** The procedure a membership UCAN asked for over the mesh is signed for. */
11
+ export const MEMBERSHIP_UCAN_PROCEDURE = "macula_realm.membership_ucan";
12
+ const ruleNumber = (rule) => (rule === "http" ? 0 : 1);
8
13
  export class NodeKey {
9
14
  handle;
10
15
  constructor(handle) {
@@ -56,6 +61,28 @@ export class NodeKey {
56
61
  async sign(data) {
57
62
  return native.keySign(this.live(), data);
58
63
  }
64
+ /**
65
+ * A realm proof v2 (macula-realm#29) that this key made request (every field
66
+ * of it except "proof") for procedure in realm, now and with a fresh nonce.
67
+ * The request's device_info and ttl_seconds, the realm and the procedure are
68
+ * all signed, so the realm refuses a request changed on the way.
69
+ */
70
+ async deviceRequestProof(realm, procedure, request, rule) {
71
+ const proof = await native.keyDeviceRequestProof(this.live(), id32(realm, "realm"), procedure, JSON.stringify(request), ruleNumber(rule));
72
+ return JSON.parse(proof);
73
+ }
74
+ /** The exact bytes a realm proof v2 signs, for a given timestamp and 16-byte
75
+ * nonce: what the realm's vector is checked against. */
76
+ static deviceRequestMessage(publicKey, realm, procedure, timestampMs, nonce, request, rule) {
77
+ return native.deviceRequestMessage(publicKey, id32(realm, "realm"), procedure, timestampMs, nonce, JSON.stringify(request), ruleNumber(rule));
78
+ }
79
+ /** Whether signature is valid over data for a public key as carried on the
80
+ * wire (publicKey()), under profile: ML-DSA-87 in pq_pure, and in pq_hybrid
81
+ * the LAMPS composite id-MLDSA87-RSA4096-PSS-SHA512 with the empty context,
82
+ * both halves verified. Anything malformed is false. */
83
+ static verify(data, signature, publicKey, profile = "pq_hybrid") {
84
+ return native.verify(data, signature, publicKey, profile);
85
+ }
59
86
  /** Frees the native key. The NodeKey is unusable after. */
60
87
  free() {
61
88
  if (this.handle !== null)
package/dist/key.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"key.js","sourceRoot":"","sources":["../src/key.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,6EAA6E;AAC7E,4EAA4E;AAC5E,cAAc;AACd,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAe,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAKhC,MAAM,OAAO,OAAO;IACU,MAAM;IAAlC,YAA4B,MAAqB;sBAArB,MAAM;IAAkB,CAAC;IAErD;iCAC6B;IAC7B,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,GAAY,WAAW;QAClD,OAAO,IAAI,OAAO,CAAC,MAAM,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;IACxD,CAAC;IAED;0DACsD;IACtD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAY,EAAE,OAAO,GAAY,WAAW;QAC5D,OAAO,IAAI,OAAO,CAAC,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IAC1D,CAAC;IAED,8EAA8E;IAC9E,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,IAAY,EAAE,OAAO,GAAY,WAAW;QACpE,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAC5C,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrB,OAAO,GAAG,CAAC;QACb,CAAC;QACD,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACrC,CAAC;IAED,0DAA0D;IAC1D,KAAK,CAAC,IAAI,CAAC,IAAY;QACrB,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC;IAC1C,CAAC;IAED,iCAAiC;IACjC,MAAM;QACJ,OAAO,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACvC,CAAC;IAED,oCAAoC;IACpC,SAAS;QACP,OAAO,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IAC5B,CAAC;IAED,6CAA6C;IAC7C,SAAS;QACP,OAAO,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED,yBAAyB;IACzB,OAAO;QACL,OAAO,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,CAAY,CAAC;IACnD,CAAC;IAED,2BAA2B;IAC3B,KAAK,CAAC,IAAI,CAAC,IAAgB;QACzB,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC;IAC3C,CAAC;IAED,2DAA2D;IAC3D,IAAI;QACF,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI;YAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACtD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;IACrB,CAAC;IAED,gBAAgB;IAChB,IAAI;QACF,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QAC/E,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;CACF"}
1
+ {"version":3,"file":"key.js","sourceRoot":"","sources":["../src/key.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@macula-io/ts",
3
- "version": "0.19.0",
3
+ "version": "0.21.0",
4
4
  "description": "TypeScript SDK for the Macula mesh (FFI over macula-go)",
5
5
  "license": "Apache-2.0",
6
6
  "keywords": [