@claw-network/core 0.2.0 → 0.2.1

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.
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Delivery-auth: point-to-point credential exchange over libp2p streams.
3
+ *
4
+ * Protocol: /clawnet/1.0.0/delivery-auth
5
+ *
6
+ * Encrypts access tokens via X25519 ECDH + HKDF-SHA-256 + AES-256-GCM
7
+ * so that credentials never appear on gossip. The recipient verifies
8
+ * BLAKE3(token) against the public tokenHash in the DeliverableEnvelope.
9
+ *
10
+ * Spec: docs/implementation/deliverable-spec.md §6.6
11
+ */
12
+ export interface DeliveryAuthRequest {
13
+ version: 1;
14
+ senderPublicKeyHex: string;
15
+ nonceHex: string;
16
+ ciphertextHex: string;
17
+ tagHex: string;
18
+ }
19
+ export interface DeliveryAuthPayload {
20
+ deliverableId: string;
21
+ token: string;
22
+ orderId: string;
23
+ providerDid: string;
24
+ expiresAt?: number;
25
+ }
26
+ export interface DeliveryAuthResponse {
27
+ accepted: boolean;
28
+ reason?: string;
29
+ }
30
+ /**
31
+ * Encrypt a `DeliveryAuthPayload` for the given recipient X25519 public key.
32
+ * Returns a `DeliveryAuthRequest` ready to be JSON-serialized onto the stream.
33
+ */
34
+ export declare function sealDeliveryAuth(payload: DeliveryAuthPayload, recipientPublicKey: Uint8Array): DeliveryAuthRequest;
35
+ /**
36
+ * Decrypt a `DeliveryAuthRequest` using the recipient's X25519 private key.
37
+ * Returns the plaintext `DeliveryAuthPayload`.
38
+ *
39
+ * @throws if decryption or JSON parsing fails.
40
+ */
41
+ export declare function openDeliveryAuth(request: DeliveryAuthRequest, recipientPrivateKey: Uint8Array): DeliveryAuthPayload;
42
+ /**
43
+ * Compute the token hash that should appear in the public envelope.
44
+ * `tokenHash = hex(BLAKE3(utf8(token)))`
45
+ */
46
+ export declare function deliveryTokenHash(token: string): string;
47
+ /**
48
+ * Verify that a received token matches the expected tokenHash from the envelope.
49
+ */
50
+ export declare function verifyDeliveryToken(token: string, expectedHash: string): boolean;
51
+ /**
52
+ * Encode a JSON message into length-prefixed bytes for stream transport.
53
+ * Format: 4-byte big-endian length + UTF-8 JSON body.
54
+ */
55
+ export declare function encodeStreamMessage(message: unknown): Uint8Array;
56
+ /**
57
+ * Decode a length-prefixed message from a buffer.
58
+ * Returns [parsed message, bytes consumed] or null if buffer is incomplete.
59
+ */
60
+ export declare function decodeStreamMessage<T = unknown>(buffer: Uint8Array): [T, number] | null;
61
+ /**
62
+ * Create an accepted response.
63
+ */
64
+ export declare function acceptResponse(): DeliveryAuthResponse;
65
+ /**
66
+ * Create a rejected response.
67
+ */
68
+ export declare function rejectResponse(reason: string): DeliveryAuthResponse;
69
+ //# sourceMappingURL=delivery-auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delivery-auth.d.ts","sourceRoot":"","sources":["../../src/p2p/delivery-auth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAYH,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,CAAC,CAAC;IACX,kBAAkB,EAAE,MAAM,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,mBAAmB;IAClC,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAOD;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,mBAAmB,EAC5B,kBAAkB,EAAE,UAAU,GAC7B,mBAAmB,CAarB;AAID;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,mBAAmB,EAC5B,mBAAmB,EAAE,UAAU,GAC9B,mBAAmB,CAUrB;AAID;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAEhF;AAID;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,UAAU,CAMhE;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,GAAG,OAAO,EAC7C,MAAM,EAAE,UAAU,GACjB,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,IAAI,CAMpB;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,oBAAoB,CAErD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,oBAAoB,CAEnE"}
@@ -0,0 +1,107 @@
1
+ /**
2
+ * Delivery-auth: point-to-point credential exchange over libp2p streams.
3
+ *
4
+ * Protocol: /clawnet/1.0.0/delivery-auth
5
+ *
6
+ * Encrypts access tokens via X25519 ECDH + HKDF-SHA-256 + AES-256-GCM
7
+ * so that credentials never appear on gossip. The recipient verifies
8
+ * BLAKE3(token) against the public tokenHash in the DeliverableEnvelope.
9
+ *
10
+ * Spec: docs/implementation/deliverable-spec.md §6.6
11
+ */
12
+ import { generateX25519Keypair, x25519SharedSecret } from '../crypto/x25519.js';
13
+ import { hkdfSha256 } from '../crypto/hkdf.js';
14
+ import { encryptAes256Gcm, decryptAes256Gcm } from '../crypto/aes.js';
15
+ import { blake3Hex } from '../crypto/hash.js';
16
+ import { utf8ToBytes, bytesToUtf8, bytesToHex, hexToBytes } from '../utils/bytes.js';
17
+ // HKDF info tag — domain-separated from info-store key sealing
18
+ const DELIVERY_AUTH_INFO = utf8ToBytes('clawnet:delivery-auth:v1');
19
+ // ── Sender (provider) side ─────────────────────────────────────────
20
+ /**
21
+ * Encrypt a `DeliveryAuthPayload` for the given recipient X25519 public key.
22
+ * Returns a `DeliveryAuthRequest` ready to be JSON-serialized onto the stream.
23
+ */
24
+ export function sealDeliveryAuth(payload, recipientPublicKey) {
25
+ const sender = generateX25519Keypair();
26
+ const shared = x25519SharedSecret(sender.privateKey, recipientPublicKey);
27
+ const derived = hkdfSha256(shared, undefined, DELIVERY_AUTH_INFO, 32);
28
+ const plaintext = utf8ToBytes(JSON.stringify(payload));
29
+ const encrypted = encryptAes256Gcm(derived, plaintext);
30
+ return {
31
+ version: 1,
32
+ senderPublicKeyHex: bytesToHex(sender.publicKey),
33
+ nonceHex: encrypted.nonceHex,
34
+ ciphertextHex: encrypted.ciphertextHex,
35
+ tagHex: encrypted.tagHex,
36
+ };
37
+ }
38
+ // ── Receiver (consumer) side ───────────────────────────────────────
39
+ /**
40
+ * Decrypt a `DeliveryAuthRequest` using the recipient's X25519 private key.
41
+ * Returns the plaintext `DeliveryAuthPayload`.
42
+ *
43
+ * @throws if decryption or JSON parsing fails.
44
+ */
45
+ export function openDeliveryAuth(request, recipientPrivateKey) {
46
+ const senderPublicKey = hexToBytes(request.senderPublicKeyHex);
47
+ const shared = x25519SharedSecret(recipientPrivateKey, senderPublicKey);
48
+ const derived = hkdfSha256(shared, undefined, DELIVERY_AUTH_INFO, 32);
49
+ const plaintext = decryptAes256Gcm(derived, {
50
+ nonceHex: request.nonceHex,
51
+ ciphertextHex: request.ciphertextHex,
52
+ tagHex: request.tagHex,
53
+ });
54
+ return JSON.parse(bytesToUtf8(plaintext));
55
+ }
56
+ // ── Token hash verification ────────────────────────────────────────
57
+ /**
58
+ * Compute the token hash that should appear in the public envelope.
59
+ * `tokenHash = hex(BLAKE3(utf8(token)))`
60
+ */
61
+ export function deliveryTokenHash(token) {
62
+ return blake3Hex(utf8ToBytes(token));
63
+ }
64
+ /**
65
+ * Verify that a received token matches the expected tokenHash from the envelope.
66
+ */
67
+ export function verifyDeliveryToken(token, expectedHash) {
68
+ return deliveryTokenHash(token) === expectedHash;
69
+ }
70
+ // ── Stream helpers ─────────────────────────────────────────────────
71
+ /**
72
+ * Encode a JSON message into length-prefixed bytes for stream transport.
73
+ * Format: 4-byte big-endian length + UTF-8 JSON body.
74
+ */
75
+ export function encodeStreamMessage(message) {
76
+ const json = utf8ToBytes(JSON.stringify(message));
77
+ const frame = new Uint8Array(4 + json.length);
78
+ new DataView(frame.buffer).setUint32(0, json.length, false);
79
+ frame.set(json, 4);
80
+ return frame;
81
+ }
82
+ /**
83
+ * Decode a length-prefixed message from a buffer.
84
+ * Returns [parsed message, bytes consumed] or null if buffer is incomplete.
85
+ */
86
+ export function decodeStreamMessage(buffer) {
87
+ if (buffer.length < 4)
88
+ return null;
89
+ const length = new DataView(buffer.buffer, buffer.byteOffset).getUint32(0, false);
90
+ if (buffer.length < 4 + length)
91
+ return null;
92
+ const json = bytesToUtf8(buffer.slice(4, 4 + length));
93
+ return [JSON.parse(json), 4 + length];
94
+ }
95
+ /**
96
+ * Create an accepted response.
97
+ */
98
+ export function acceptResponse() {
99
+ return { accepted: true };
100
+ }
101
+ /**
102
+ * Create a rejected response.
103
+ */
104
+ export function rejectResponse(reason) {
105
+ return { accepted: false, reason };
106
+ }
107
+ //# sourceMappingURL=delivery-auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delivery-auth.js","sourceRoot":"","sources":["../../src/p2p/delivery-auth.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  export * from './config.js';
2
2
  export * from './node.js';
3
3
  export * from './topics.js';
4
+ export * from './delivery-auth.js';
4
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/p2p/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/p2p/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC"}
package/dist/p2p/index.js CHANGED
@@ -1,4 +1,5 @@
1
1
  export * from './config.js';
2
2
  export * from './node.js';
3
3
  export * from './topics.js';
4
+ export * from './delivery-auth.js';
4
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/p2p/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/p2p/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC"}
@@ -14,6 +14,23 @@ type PrivateKeyLike = {
14
14
  type: string;
15
15
  publicKey: unknown;
16
16
  };
17
+ /** Minimal duplex stream returned by dialProtocol / passed to handle callback. */
18
+ export interface StreamDuplex {
19
+ source: AsyncIterable<{
20
+ subarray: () => Uint8Array;
21
+ } | Uint8Array>;
22
+ sink: (source: AsyncIterable<Uint8Array>) => Promise<void>;
23
+ close: () => void | Promise<void>;
24
+ }
25
+ /** Callback invoked when a remote peer opens a stream for a registered protocol. */
26
+ export type StreamHandler = (data: {
27
+ stream: StreamDuplex;
28
+ connection: {
29
+ remotePeer?: {
30
+ toString: () => string;
31
+ };
32
+ };
33
+ }) => void;
17
34
  export declare class P2PNode {
18
35
  private node;
19
36
  private readonly config;
@@ -38,6 +55,30 @@ export declare class P2PNode {
38
55
  */
39
56
  amplifyMesh(): Promise<number>;
40
57
  getPeerPublicKey(peerId: string): Promise<Uint8Array | null>;
58
+ /**
59
+ * Register a stream protocol handler.
60
+ * When a remote peer opens a stream for the given protocol ID, `handler` is called.
61
+ */
62
+ handleProtocol(protocol: string, handler: StreamHandler): Promise<void>;
63
+ /**
64
+ * Remove a previously registered stream protocol handler.
65
+ */
66
+ unhandleProtocol(protocol: string): Promise<void>;
67
+ /**
68
+ * Open a new stream to a remote peer for the given protocol.
69
+ * The caller must have a connection to the peer (via `connect()`).
70
+ *
71
+ * @param peerId The remote peer's ID (string).
72
+ * @param protocol The protocol ID (e.g. '/clawnet/1.0.0/delivery-auth').
73
+ * @returns A duplex stream for reading/writing.
74
+ */
75
+ newStream(peerId: string, protocol: string): Promise<StreamDuplex>;
76
+ /**
77
+ * Re-dial all configured bootstrap multiaddrs.
78
+ * Useful when connections have been lost and the node needs to rejoin the mesh.
79
+ * Returns the number of successfully (re-)connected bootstrap peers.
80
+ */
81
+ reconnectBootstrap(): Promise<number>;
41
82
  private getPubsub;
42
83
  }
43
84
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../src/p2p/node.ts"],"names":[],"mappings":"AAAA,OAAO,kCAAkC,CAAC;AAgB1C,OAAO,EAAE,SAAS,EAAsB,MAAM,aAAa,CAAC;AAE5D,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,EAAE,aAAa,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE9E,KAAK,UAAU,GAAG;IAAE,QAAQ,EAAE,MAAM,MAAM,CAAA;CAAE,CAAC;AAE7C,KAAK,cAAc,GAAG;IAAE,GAAG,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAAC;AA6D5E,qBAAa,OAAO;IAClB,OAAO,CAAC,IAAI,CAA2B;IACvC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAY;IACnC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAiB;IACrD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAa;gBAEjC,MAAM,GAAE,OAAO,CAAC,SAAS,CAAM,EAAE,UAAU,CAAC,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,UAAU;IAMvF,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAmGtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ3B,SAAS,IAAI,MAAM,GAAG,IAAI;IAO1B,aAAa,IAAI,MAAM,EAAE;IAOnB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAS3D,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOvC,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC;IAuB5E,QAAQ,IAAI,MAAM,EAAE;IAKpB,cAAc,IAAI,MAAM,EAAE;IAS1B,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;IAQvC;;;;;OAKG;IACG,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC;IAqE9B,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IA4BlE,OAAO,CAAC,SAAS;CAOlB"}
1
+ {"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../src/p2p/node.ts"],"names":[],"mappings":"AAAA,OAAO,kCAAkC,CAAC;AAgB1C,OAAO,EAAE,SAAS,EAAsB,MAAM,aAAa,CAAC;AAE5D,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,EAAE,aAAa,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE9E,KAAK,UAAU,GAAG;IAAE,QAAQ,EAAE,MAAM,MAAM,CAAA;CAAE,CAAC;AAE7C,KAAK,cAAc,GAAG;IAAE,GAAG,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAAC;AA8C5E,kFAAkF;AAClF,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,aAAa,CAAC;QAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;KAAE,GAAG,UAAU,CAAC,CAAC;IACnE,IAAI,EAAE,CAAC,MAAM,EAAE,aAAa,CAAC,UAAU,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3D,KAAK,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACnC;AAED,oFAAoF;AACpF,MAAM,MAAM,aAAa,GAAG,CAAC,IAAI,EAAE;IACjC,MAAM,EAAE,YAAY,CAAC;IACrB,UAAU,EAAE;QAAE,UAAU,CAAC,EAAE;YAAE,QAAQ,EAAE,MAAM,MAAM,CAAA;SAAE,CAAA;KAAE,CAAC;CACzD,KAAK,IAAI,CAAC;AAoBX,qBAAa,OAAO;IAClB,OAAO,CAAC,IAAI,CAA2B;IACvC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAY;IACnC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAiB;IACrD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAa;gBAEjC,MAAM,GAAE,OAAO,CAAC,SAAS,CAAM,EAAE,UAAU,CAAC,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,UAAU;IAMvF,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAmGtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ3B,SAAS,IAAI,MAAM,GAAG,IAAI;IAO1B,aAAa,IAAI,MAAM,EAAE;IAOnB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAS3D,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOvC,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC;IAuB5E,QAAQ,IAAI,MAAM,EAAE;IAKpB,cAAc,IAAI,MAAM,EAAE;IAS1B,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;IAQvC;;;;;OAKG;IACG,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC;IAqE9B,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IA4BlE;;;OAGG;IACG,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAO7E;;OAEG;IACG,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOvD;;;;;;;OAOG;IACG,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAOxE;;;;OAIG;IACG,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC;IAsB3C,OAAO,CAAC,SAAS;CAOlB"}
package/dist/p2p/node.js CHANGED
@@ -288,6 +288,67 @@ export class P2PNode {
288
288
  return null;
289
289
  }
290
290
  }
291
+ /**
292
+ * Register a stream protocol handler.
293
+ * When a remote peer opens a stream for the given protocol ID, `handler` is called.
294
+ */
295
+ async handleProtocol(protocol, handler) {
296
+ if (!this.node?.handle) {
297
+ throw new Error('node not started or does not support handle()');
298
+ }
299
+ await this.node.handle(protocol, handler);
300
+ }
301
+ /**
302
+ * Remove a previously registered stream protocol handler.
303
+ */
304
+ async unhandleProtocol(protocol) {
305
+ if (!this.node?.unhandle) {
306
+ throw new Error('node not started or does not support unhandle()');
307
+ }
308
+ await this.node.unhandle(protocol);
309
+ }
310
+ /**
311
+ * Open a new stream to a remote peer for the given protocol.
312
+ * The caller must have a connection to the peer (via `connect()`).
313
+ *
314
+ * @param peerId The remote peer's ID (string).
315
+ * @param protocol The protocol ID (e.g. '/clawnet/1.0.0/delivery-auth').
316
+ * @returns A duplex stream for reading/writing.
317
+ */
318
+ async newStream(peerId, protocol) {
319
+ if (!this.node?.dialProtocol) {
320
+ throw new Error('node not started or does not support dialProtocol()');
321
+ }
322
+ return this.node.dialProtocol(peerId, protocol);
323
+ }
324
+ /**
325
+ * Re-dial all configured bootstrap multiaddrs.
326
+ * Useful when connections have been lost and the node needs to rejoin the mesh.
327
+ * Returns the number of successfully (re-)connected bootstrap peers.
328
+ */
329
+ async reconnectBootstrap() {
330
+ if (!this.node?.dial)
331
+ return 0;
332
+ let connected = 0;
333
+ const currentPeers = new Set(this.getConnections());
334
+ for (const addr of this.config.bootstrap) {
335
+ try {
336
+ // Extract peerId from the /p2p/<id> component to skip already-connected peers
337
+ const p2pMatch = addr.match(/\/p2p\/([^/]+)$/);
338
+ const peerIdStr = p2pMatch?.[1];
339
+ if (peerIdStr && currentPeers.has(peerIdStr)) {
340
+ connected++; // already connected
341
+ continue;
342
+ }
343
+ await this.node.dial(multiaddr(addr));
344
+ connected++;
345
+ }
346
+ catch {
347
+ // bootstrap peer may be temporarily unreachable
348
+ }
349
+ }
350
+ return connected;
351
+ }
291
352
  getPubsub() {
292
353
  const pubsub = this.node?.services?.pubsub;
293
354
  if (!pubsub) {
@@ -1 +1 @@
1
- {"version":3,"file":"node.js","sourceRoot":"","sources":["../../src/p2p/node.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"node.js","sourceRoot":"","sources":["../../src/p2p/node.ts"],"names":[],"mappings":"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"}
@@ -2,5 +2,7 @@ export declare const TOPIC_EVENTS = "/clawnet/1.0.0/events";
2
2
  export declare const TOPIC_MARKETS = "/clawnet/1.0.0/markets";
3
3
  export declare const TOPIC_REQUESTS = "/clawnet/1.0.0/requests";
4
4
  export declare const TOPIC_RESPONSES = "/clawnet/1.0.0/responses";
5
+ /** Point-to-point stream protocol for credential delivery (not a gossip topic). */
6
+ export declare const PROTOCOL_DELIVERY_AUTH = "/clawnet/1.0.0/delivery-auth";
5
7
  export declare const ALL_TOPICS: string[];
6
8
  //# sourceMappingURL=topics.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"topics.d.ts","sourceRoot":"","sources":["../../src/p2p/topics.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY,0BAA0B,CAAC;AACpD,eAAO,MAAM,aAAa,2BAA2B,CAAC;AACtD,eAAO,MAAM,cAAc,4BAA4B,CAAC;AACxD,eAAO,MAAM,eAAe,6BAA6B,CAAC;AAE1D,eAAO,MAAM,UAAU,UAAiE,CAAC"}
1
+ {"version":3,"file":"topics.d.ts","sourceRoot":"","sources":["../../src/p2p/topics.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY,0BAA0B,CAAC;AACpD,eAAO,MAAM,aAAa,2BAA2B,CAAC;AACtD,eAAO,MAAM,cAAc,4BAA4B,CAAC;AACxD,eAAO,MAAM,eAAe,6BAA6B,CAAC;AAE1D,mFAAmF;AACnF,eAAO,MAAM,sBAAsB,iCAAiC,CAAC;AAErE,eAAO,MAAM,UAAU,UAAiE,CAAC"}
@@ -2,5 +2,7 @@ export const TOPIC_EVENTS = '/clawnet/1.0.0/events';
2
2
  export const TOPIC_MARKETS = '/clawnet/1.0.0/markets';
3
3
  export const TOPIC_REQUESTS = '/clawnet/1.0.0/requests';
4
4
  export const TOPIC_RESPONSES = '/clawnet/1.0.0/responses';
5
+ /** Point-to-point stream protocol for credential delivery (not a gossip topic). */
6
+ export const PROTOCOL_DELIVERY_AUTH = '/clawnet/1.0.0/delivery-auth';
5
7
  export const ALL_TOPICS = [TOPIC_EVENTS, TOPIC_MARKETS, TOPIC_REQUESTS, TOPIC_RESPONSES];
6
8
  //# sourceMappingURL=topics.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"topics.js","sourceRoot":"","sources":["../../src/p2p/topics.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,YAAY,GAAG,uBAAuB,CAAC;AACpD,MAAM,CAAC,MAAM,aAAa,GAAG,wBAAwB,CAAC;AACtD,MAAM,CAAC,MAAM,cAAc,GAAG,yBAAyB,CAAC;AACxD,MAAM,CAAC,MAAM,eAAe,GAAG,0BAA0B,CAAC;AAE1D,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,eAAe,CAAC,CAAC"}
1
+ {"version":3,"file":"topics.js","sourceRoot":"","sources":["../../src/p2p/topics.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,YAAY,GAAG,uBAAuB,CAAC;AACpD,MAAM,CAAC,MAAM,aAAa,GAAG,wBAAwB,CAAC;AACtD,MAAM,CAAC,MAAM,cAAc,GAAG,yBAAyB,CAAC;AACxD,MAAM,CAAC,MAAM,eAAe,GAAG,0BAA0B,CAAC;AAE1D,mFAAmF;AACnF,MAAM,CAAC,MAAM,sBAAsB,GAAG,8BAA8B,CAAC;AAErE,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,eAAe,CAAC,CAAC"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Deliverable envelope signing & verification.
3
+ * Domain prefix: "clawnet:deliverable:v1:" (distinct from event prefix).
4
+ * Spec: docs/implementation/deliverable-spec.md §4.2
5
+ */
6
+ export declare const DELIVERABLE_DOMAIN_PREFIX = "clawnet:deliverable:v1:";
7
+ export type DeliverableEnvelopeRecord = Record<string, unknown>;
8
+ /**
9
+ * Compute the canonical bytes of an envelope (without signature field).
10
+ */
11
+ export declare function canonicalDeliverableBytes(envelope: DeliverableEnvelopeRecord): Uint8Array;
12
+ /**
13
+ * signingBytes = utf8(DOMAIN_PREFIX) + JCS(envelope \ {signature})
14
+ */
15
+ export declare function deliverableSigningBytes(envelope: DeliverableEnvelopeRecord): Uint8Array;
16
+ /**
17
+ * Sign a deliverable envelope.
18
+ * Returns base58btc-encoded Ed25519 signature.
19
+ */
20
+ export declare function signDeliverable(envelope: DeliverableEnvelopeRecord, privateKey: Uint8Array): Promise<string>;
21
+ /**
22
+ * Verify an Ed25519 signature on a deliverable envelope.
23
+ */
24
+ export declare function verifyDeliverableSignature(envelope: DeliverableEnvelopeRecord, signatureBase58: string, publicKey: Uint8Array): Promise<boolean>;
25
+ /**
26
+ * BLAKE3(JCS(envelope)) — the value stored on-chain as `deliverableHash`.
27
+ * No double-hashing: this hex string is passed directly to the contract.
28
+ */
29
+ export declare function envelopeDigest(envelope: DeliverableEnvelopeRecord): string;
30
+ /**
31
+ * BLAKE3 hash of plaintext content bytes.
32
+ */
33
+ export declare function contentHash(data: Uint8Array): string;
34
+ /**
35
+ * id = hex(SHA-256(contextId + producer + nonce + createdAt))
36
+ */
37
+ export declare function computeEnvelopeId(contextId: string, producer: string, nonce: string, createdAt: string): string;
38
+ //# sourceMappingURL=deliverable-hash.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deliverable-hash.d.ts","sourceRoot":"","sources":["../../src/protocol/deliverable-hash.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAQH,eAAO,MAAM,yBAAyB,4BAA4B,CAAC;AAInE,MAAM,MAAM,yBAAyB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAUhE;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,yBAAyB,GAAG,UAAU,CAEzF;AAID;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,yBAAyB,GAAG,UAAU,CAIvF;AAID;;;GAGG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,yBAAyB,EACnC,UAAU,EAAE,UAAU,GACrB,OAAO,CAAC,MAAM,CAAC,CAEjB;AAID;;GAEG;AACH,wBAAsB,0BAA0B,CAC9C,QAAQ,EAAE,yBAAyB,EACnC,eAAe,EAAE,MAAM,EACvB,SAAS,EAAE,UAAU,GACpB,OAAO,CAAC,OAAO,CAAC,CAElB;AAID;;;GAGG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,yBAAyB,GAAG,MAAM,CAG1E;AAID;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAEpD;AAID;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,GAChB,MAAM,CAGR"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Deliverable envelope signing & verification.
3
+ * Domain prefix: "clawnet:deliverable:v1:" (distinct from event prefix).
4
+ * Spec: docs/implementation/deliverable-spec.md §4.2
5
+ */
6
+ import { canonicalizeBytes } from '../crypto/jcs.js';
7
+ import { blake3Hex } from '../crypto/hash.js';
8
+ import { sha256Hex } from '../crypto/hash.js';
9
+ import { concatBytes, utf8ToBytes } from '../utils/bytes.js';
10
+ import { signBase58, verifyBase58 } from '../crypto/ed25519.js';
11
+ export const DELIVERABLE_DOMAIN_PREFIX = 'clawnet:deliverable:v1:';
12
+ function stripSignature(envelope) {
13
+ const { signature, ...rest } = envelope;
14
+ void signature;
15
+ return rest;
16
+ }
17
+ // ── Canonical bytes ────────────────────────────────────────
18
+ /**
19
+ * Compute the canonical bytes of an envelope (without signature field).
20
+ */
21
+ export function canonicalDeliverableBytes(envelope) {
22
+ return canonicalizeBytes(stripSignature(envelope));
23
+ }
24
+ // ── Signing bytes (domain-prefixed) ────────────────────────
25
+ /**
26
+ * signingBytes = utf8(DOMAIN_PREFIX) + JCS(envelope \ {signature})
27
+ */
28
+ export function deliverableSigningBytes(envelope) {
29
+ const canonical = canonicalDeliverableBytes(envelope);
30
+ const prefix = utf8ToBytes(DELIVERABLE_DOMAIN_PREFIX);
31
+ return concatBytes(prefix, canonical);
32
+ }
33
+ // ── Sign ───────────────────────────────────────────────────
34
+ /**
35
+ * Sign a deliverable envelope.
36
+ * Returns base58btc-encoded Ed25519 signature.
37
+ */
38
+ export async function signDeliverable(envelope, privateKey) {
39
+ return signBase58(deliverableSigningBytes(envelope), privateKey);
40
+ }
41
+ // ── Verify ─────────────────────────────────────────────────
42
+ /**
43
+ * Verify an Ed25519 signature on a deliverable envelope.
44
+ */
45
+ export async function verifyDeliverableSignature(envelope, signatureBase58, publicKey) {
46
+ return verifyBase58(signatureBase58, deliverableSigningBytes(envelope), publicKey);
47
+ }
48
+ // ── Envelope digest (for on-chain anchoring) ───────────────
49
+ /**
50
+ * BLAKE3(JCS(envelope)) — the value stored on-chain as `deliverableHash`.
51
+ * No double-hashing: this hex string is passed directly to the contract.
52
+ */
53
+ export function envelopeDigest(envelope) {
54
+ const canonical = canonicalizeBytes(envelope);
55
+ return blake3Hex(canonical);
56
+ }
57
+ // ── Content hash ───────────────────────────────────────────
58
+ /**
59
+ * BLAKE3 hash of plaintext content bytes.
60
+ */
61
+ export function contentHash(data) {
62
+ return blake3Hex(data);
63
+ }
64
+ // ── Deterministic envelope ID ──────────────────────────────
65
+ /**
66
+ * id = hex(SHA-256(contextId + producer + nonce + createdAt))
67
+ */
68
+ export function computeEnvelopeId(contextId, producer, nonce, createdAt) {
69
+ const input = utf8ToBytes(contextId + producer + nonce + createdAt);
70
+ return sha256Hex(input);
71
+ }
72
+ //# sourceMappingURL=deliverable-hash.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deliverable-hash.js","sourceRoot":"","sources":["../../src/protocol/deliverable-hash.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEhE,MAAM,CAAC,MAAM,yBAAyB,GAAG,yBAAyB,CAAC;AAMnE,SAAS,cAAc,CAAC,QAAmC;IACzD,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,GAAG,QAAQ,CAAC;IACxC,KAAK,SAAS,CAAC;IACf,OAAO,IAAI,CAAC;AACd,CAAC;AAED,8DAA8D;AAE9D;;GAEG;AACH,MAAM,UAAU,yBAAyB,CAAC,QAAmC;IAC3E,OAAO,iBAAiB,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC;AACrD,CAAC;AAED,8DAA8D;AAE9D;;GAEG;AACH,MAAM,UAAU,uBAAuB,CAAC,QAAmC;IACzE,MAAM,SAAS,GAAG,yBAAyB,CAAC,QAAQ,CAAC,CAAC;IACtD,MAAM,MAAM,GAAG,WAAW,CAAC,yBAAyB,CAAC,CAAC;IACtD,OAAO,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AACxC,CAAC;AAED,8DAA8D;AAE9D;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,QAAmC,EACnC,UAAsB;IAEtB,OAAO,UAAU,CAAC,uBAAuB,CAAC,QAAQ,CAAC,EAAE,UAAU,CAAC,CAAC;AACnE,CAAC;AAED,8DAA8D;AAE9D;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,QAAmC,EACnC,eAAuB,EACvB,SAAqB;IAErB,OAAO,YAAY,CAAC,eAAe,EAAE,uBAAuB,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC,CAAC;AACrF,CAAC;AAED,8DAA8D;AAE9D;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,QAAmC;IAChE,MAAM,SAAS,GAAG,iBAAiB,CAAC,QAAmC,CAAC,CAAC;IACzE,OAAO,SAAS,CAAC,SAAS,CAAC,CAAC;AAC9B,CAAC;AAED,8DAA8D;AAE9D;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,IAAgB;IAC1C,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC;AACzB,CAAC;AAED,8DAA8D;AAE9D;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAC/B,SAAiB,EACjB,QAAgB,EAChB,KAAa,EACb,SAAiB;IAEjB,MAAM,KAAK,GAAG,WAAW,CAAC,SAAS,GAAG,QAAQ,GAAG,KAAK,GAAG,SAAS,CAAC,CAAC;IACpE,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC;AAC1B,CAAC"}
@@ -1,5 +1,6 @@
1
1
  export * from './constants.js';
2
2
  export * from './credentials.js';
3
+ export * from './deliverable-hash.js';
3
4
  export * from './event-hash.js';
4
5
  export * from './key-rotation.js';
5
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/protocol/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/protocol/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC"}
@@ -1,5 +1,6 @@
1
1
  export * from './constants.js';
2
2
  export * from './credentials.js';
3
+ export * from './deliverable-hash.js';
3
4
  export * from './event-hash.js';
4
5
  export * from './key-rotation.js';
5
6
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/protocol/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/protocol/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@claw-network/core",
3
- "version": "0.2.0",
3
+ "version": "0.2.1",
4
4
  "description": "Core cryptographic primitives and utilities for the ClawNet protocol",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",