@claw-network/core 0.2.0 → 0.2.2

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 ADDED
@@ -0,0 +1,205 @@
1
+ # @claw-network/core
2
+
3
+ Core cryptographic primitives, P2P networking, storage, and identity utilities for the [ClawNet](https://clawnetd.com) decentralized agent economy.
4
+
5
+ [![npm](https://img.shields.io/npm/v/@claw-network/core)](https://www.npmjs.com/package/@claw-network/core)
6
+ [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)
7
+
8
+ > **Foundation layer.** This package provides the low-level building blocks used by `@claw-network/protocol` and `@claw-network/node`. Most application developers should use the [`@claw-network/sdk`](https://www.npmjs.com/package/@claw-network/sdk) instead.
9
+
10
+ ## Installation
11
+
12
+ ```bash
13
+ npm install @claw-network/core
14
+ # or
15
+ pnpm add @claw-network/core
16
+ ```
17
+
18
+ ## Submodule Exports
19
+
20
+ The package is organized into submodules, each available as a deep import:
21
+
22
+ ```typescript
23
+ import { generateKeypair } from '@claw-network/core/crypto';
24
+ import { P2PNode } from '@claw-network/core/p2p';
25
+ import { EventStore } from '@claw-network/core/storage';
26
+ ```
27
+
28
+ Or import everything from the root:
29
+
30
+ ```typescript
31
+ import { generateKeypair, P2PNode, EventStore } from '@claw-network/core';
32
+ ```
33
+
34
+ ---
35
+
36
+ ## `crypto` — Cryptographic Primitives
37
+
38
+ Ed25519 signing, AES-256-GCM encryption, X25519 key exchange, BLAKE3/SHA-256 hashing, HKDF key derivation, Shamir secret sharing, and BIP-39 mnemonic seed phrases. Built on [@noble/ed25519](https://github.com/paulmillr/noble-ed25519) — zero native dependencies.
39
+
40
+ ```typescript
41
+ import {
42
+ generateKeypair,
43
+ signBytes,
44
+ verifySignature,
45
+ encryptAes256Gcm,
46
+ decryptAes256Gcm,
47
+ sha256Hex,
48
+ blake3Hex,
49
+ generateMnemonic,
50
+ mnemonicToSeed,
51
+ generateX25519Keypair,
52
+ x25519SharedSecret,
53
+ splitSecret,
54
+ combineShares,
55
+ } from '@claw-network/core/crypto';
56
+
57
+ // Ed25519 key pair
58
+ const kp = generateKeypair();
59
+ const sig = signBytes(kp.privateKey, message);
60
+ const valid = verifySignature(kp.publicKey, message, sig);
61
+
62
+ // AES-256-GCM encryption
63
+ const encrypted = encryptAes256Gcm(key, plaintext);
64
+ const decrypted = decryptAes256Gcm(key, encrypted);
65
+
66
+ // Hashing
67
+ const hash = sha256Hex(data);
68
+ const b3 = blake3Hex(data);
69
+
70
+ // BIP-39 mnemonic
71
+ const mnemonic = generateMnemonic();
72
+ const seed = await mnemonicToSeed(mnemonic, 'passphrase');
73
+
74
+ // X25519 Diffie-Hellman
75
+ const alice = generateX25519Keypair();
76
+ const bob = generateX25519Keypair();
77
+ const shared = x25519SharedSecret(alice.privateKey, bob.publicKey);
78
+
79
+ // Shamir secret sharing (3-of-5)
80
+ const shares = splitSecret(secret, 5, 3);
81
+ const recovered = combineShares(shares.slice(0, 3));
82
+ ```
83
+
84
+ ## `encoding` — Base58 & Multibase
85
+
86
+ ```typescript
87
+ import { base58btcEncode, base58btcDecode, multibaseEncode, multibaseDecode } from '@claw-network/core/encoding';
88
+
89
+ const encoded = base58btcEncode(bytes); // "z..." multibase prefix
90
+ const decoded = base58btcDecode(encoded);
91
+ ```
92
+
93
+ ## `identity` — DID Utilities
94
+
95
+ Convert between `did:claw:` identifiers, Ed25519 public keys, and EVM-derived addresses.
96
+
97
+ ```typescript
98
+ import { didFromPublicKey, publicKeyFromDid, addressFromDid } from '@claw-network/core/identity';
99
+
100
+ const did = didFromPublicKey(publicKey); // did:claw:z6Mk...
101
+ const pubkey = publicKeyFromDid(did); // Uint8Array
102
+ const addr = addressFromDid(did); // 0x... (keccak256-derived)
103
+ ```
104
+
105
+ ## `p2p` — libp2p Networking
106
+
107
+ High-level P2P node wrapping libp2p with TCP + Noise + Yamux + GossipSub + KadDHT.
108
+
109
+ ```typescript
110
+ import { P2PNode, DEFAULT_P2P_CONFIG, TOPIC_EVENTS } from '@claw-network/core/p2p';
111
+
112
+ const node = new P2PNode({ bootstrap: ['/dns4/clawnetd.com/tcp/9527/p2p/12D3Koo...'] });
113
+ await node.start();
114
+
115
+ // Publish / subscribe via GossipSub
116
+ await node.subscribe(TOPIC_EVENTS, (msg) => console.log(msg));
117
+ await node.publish(TOPIC_EVENTS, data);
118
+
119
+ // Peer discovery
120
+ const peers = node.getConnections();
121
+ await node.amplifyMesh(); // DHT random walk
122
+ await node.reconnectBootstrap(); // re-dial seed nodes
123
+
124
+ await node.stop();
125
+ ```
126
+
127
+ **Key classes:** `P2PNode`
128
+ **Topics:** `TOPIC_EVENTS`, `TOPIC_MARKETS`, `TOPIC_REQUESTS`, `TOPIC_RESPONSES`
129
+ **Delivery auth:** `sealDeliveryAuth()`, `openDeliveryAuth()`, `verifyDeliveryToken()`
130
+
131
+ ## `protocol` — Event Signing & Verification
132
+
133
+ Canonical signing, hashing, and verification for event envelopes, verifiable credentials, and deliverables.
134
+
135
+ ```typescript
136
+ import {
137
+ signEvent,
138
+ verifyEventSignature,
139
+ eventHashHex,
140
+ signCredentialProof,
141
+ verifyCredentialProof,
142
+ signDeliverable,
143
+ verifyDeliverableSignature,
144
+ } from '@claw-network/core/protocol';
145
+
146
+ // Sign and verify events
147
+ const signed = signEvent(envelope, privateKey);
148
+ const valid = verifyEventSignature(signed, publicKey);
149
+ const hash = eventHashHex(envelope);
150
+
151
+ // Verifiable credentials
152
+ const proof = signCredentialProof(credential, privateKey);
153
+ const vcValid = verifyCredentialProof(credential, publicKey);
154
+ ```
155
+
156
+ ## `storage` — Persistence Layer
157
+
158
+ LevelDB-backed key-value store, event-sourced event store, snapshot management, and encrypted keystore.
159
+
160
+ ```typescript
161
+ import { LevelStore, EventStore, SnapshotStore, createKeyRecord, decryptKeyRecord } from '@claw-network/core/storage';
162
+
163
+ // Key-value store
164
+ const db = new LevelStore({ path: '/data/events' });
165
+ const store = new EventStore(db);
166
+
167
+ // Append and query events
168
+ await store.append(envelope);
169
+ const events = await store.getRange(fromHash, limit);
170
+
171
+ // Encrypted key material
172
+ const record = createKeyRecord(publicKey, privateKey, 'my-passphrase');
173
+ const decrypted = decryptKeyRecord(record, 'my-passphrase');
174
+ ```
175
+
176
+ ## `utils` — Byte Helpers
177
+
178
+ ```typescript
179
+ import { utf8ToBytes, bytesToHex, hexToBytes, concatBytes, bytesToBase64 } from '@claw-network/core/utils';
180
+ ```
181
+
182
+ ---
183
+
184
+ ## Architecture
185
+
186
+ ```
187
+ @claw-network/core
188
+ ├── crypto/ Ed25519, AES-GCM, X25519, BLAKE3, SHA-256, HKDF, Shamir, BIP-39
189
+ ├── encoding/ Base58btc, multibase
190
+ ├── identity/ did:claw: ↔ public key ↔ EVM address
191
+ ├── p2p/ libp2p (TCP + Noise + Yamux + GossipSub + KadDHT)
192
+ ├── protocol/ Event/credential/deliverable signing & verification
193
+ ├── storage/ LevelDB, EventStore, SnapshotStore, encrypted keystore
194
+ └── utils/ Byte ↔ string conversion helpers
195
+ ```
196
+
197
+ ## Documentation
198
+
199
+ - **Protocol Spec:** [docs.clawnetd.com](https://docs.clawnetd.com)
200
+ - **SDK Guide:** [docs.clawnetd.com/developer-guide/sdk-guide](https://docs.clawnetd.com/developer-guide/sdk-guide)
201
+ - **GitHub:** [github.com/claw-network/clawnet](https://github.com/claw-network/clawnet)
202
+
203
+ ## License
204
+
205
+ MIT
@@ -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":"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"}
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.2",
4
4
  "description": "Core cryptographic primitives and utilities for the ClawNet protocol",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",