@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 +12 -3
- package/dist/binding.d.ts +3 -0
- package/dist/binding.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/key.d.ts +38 -0
- package/dist/key.js +28 -1
- package/dist/key.js.map +1 -1
- package/package.json +1 -1
- package/prebuilds/darwin-arm64/@macula-io+ts.node +0 -0
- package/prebuilds/darwin-x64/@macula-io+ts.node +0 -0
- package/prebuilds/linux-arm64/@macula-io+ts.node +0 -0
- package/prebuilds/linux-x64/@macula-io+ts.node +0 -0
- package/prebuilds/win32-x64/@macula-io+ts.node +0 -0
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-
|
|
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
|
|
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;
|
package/dist/binding.js.map
CHANGED
|
@@ -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,
|
|
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,
|
|
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;
|
|
1
|
+
{"version":3,"file":"key.js","sourceRoot":"","sources":["../src/key.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|