@libp2p/pubsub 3.0.2 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -6,6 +6,7 @@ import type { Connection } from '@libp2p/interface-connection';
6
6
  import type { PubSub, Message, StrictNoSign, StrictSign, PubSubInit, PubSubEvents, PeerStreams, PubSubRPCMessage, PubSubRPC, PubSubRPCSubscription, PublishResult } from '@libp2p/interface-pubsub';
7
7
  import { PeerMap, PeerSet } from '@libp2p/peer-collections';
8
8
  import { Components, Initializable } from '@libp2p/components';
9
+ import type { Uint8ArrayList } from 'uint8arraylist';
9
10
  export interface TopicValidator {
10
11
  (topic: string, message: Message): Promise<void>;
11
12
  }
@@ -89,7 +90,7 @@ export declare abstract class PubSubBaseProtocol<Events = PubSubEvents> extends
89
90
  /**
90
91
  * Responsible for processing each RPC message received by other peers.
91
92
  */
92
- processMessages(peerId: PeerId, stream: AsyncIterable<Uint8Array>, peerStreams: PeerStreams): Promise<void>;
93
+ processMessages(peerId: PeerId, stream: AsyncIterable<Uint8ArrayList>, peerStreams: PeerStreams): Promise<void>;
93
94
  /**
94
95
  * Handles an rpc request from a peer
95
96
  */
@@ -116,17 +117,17 @@ export declare abstract class PubSubBaseProtocol<Events = PubSubEvents> extends
116
117
  * Decode Uint8Array into an RPC object.
117
118
  * This can be override to use a custom router protobuf.
118
119
  */
119
- abstract decodeRpc(bytes: Uint8Array): PubSubRPC;
120
+ abstract decodeRpc(bytes: Uint8Array | Uint8ArrayList): PubSubRPC;
120
121
  /**
121
122
  * Encode RPC object into a Uint8Array.
122
123
  * This can be override to use a custom router protobuf.
123
124
  */
124
- abstract encodeRpc(rpc: PubSubRPC): Uint8Array;
125
+ abstract encodeRpc(rpc: PubSubRPC): Uint8ArrayList;
125
126
  /**
126
127
  * Encode RPC object into a Uint8Array.
127
128
  * This can be override to use a custom router protobuf.
128
129
  */
129
- abstract encodeMessage(rpc: PubSubRPCMessage): Uint8Array;
130
+ abstract encodeMessage(rpc: PubSubRPCMessage): Uint8ArrayList;
130
131
  /**
131
132
  * Send an rpc object to a peer
132
133
  */
@@ -148,7 +149,12 @@ export declare abstract class PubSubBaseProtocol<Events = PubSubEvents> extends
148
149
  * Normalizes the message and signs it, if signing is enabled.
149
150
  * Should be used by the routers to create the message to send.
150
151
  */
151
- buildMessage(message: Message): Promise<Message>;
152
+ buildMessage(message: {
153
+ from: PeerId;
154
+ topic: string;
155
+ data: Uint8Array;
156
+ sequenceNumber: bigint;
157
+ }): Promise<Message>;
152
158
  /**
153
159
  * Get a list of the peer-ids that are subscribed to one topic.
154
160
  */
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
package/dist/src/index.js CHANGED
@@ -6,7 +6,7 @@ import Queue from 'p-queue';
6
6
  import { createTopology } from '@libp2p/topology';
7
7
  import { codes } from './errors.js';
8
8
  import { PeerStreams as PeerStreamsImpl } from './peer-streams.js';
9
- import { toMessage, ensureArray, randomSeqno, noSignMsgId, msgId, toRpcMessage } from './utils.js';
9
+ import { toMessage, ensureArray, noSignMsgId, msgId, toRpcMessage, randomSeqno } from './utils.js';
10
10
  import { signMessage, verifySignature } from './sign.js';
11
11
  import { PeerMap, PeerSet } from '@libp2p/peer-collections';
12
12
  import { Components } from '@libp2p/components';
@@ -324,6 +324,9 @@ export class PubSubBaseProtocol extends EventEmitter {
324
324
  const signaturePolicy = this.globalSignaturePolicy;
325
325
  switch (signaturePolicy) {
326
326
  case 'StrictSign':
327
+ if (msg.type !== 'signed') {
328
+ throw errcode(new Error('Message type should be "signed" when signature policy is StrictSign but it was not'), codes.ERR_MISSING_SIGNATURE);
329
+ }
327
330
  if (msg.sequenceNumber == null) {
328
331
  throw errcode(new Error('Need seqno when signature policy is StrictSign but it was missing'), codes.ERR_MISSING_SEQNO);
329
332
  }
@@ -373,22 +376,31 @@ export class PubSubBaseProtocol extends EventEmitter {
373
376
  const signaturePolicy = this.globalSignaturePolicy;
374
377
  switch (signaturePolicy) {
375
378
  case 'StrictNoSign':
379
+ if (message.type !== 'unsigned') {
380
+ throw errcode(new Error('Message type should be "unsigned" when signature policy is StrictNoSign but it was not'), codes.ERR_MISSING_SIGNATURE);
381
+ }
382
+ // @ts-expect-error should not be present
376
383
  if (message.signature != null) {
377
384
  throw errcode(new Error('StrictNoSigning: signature should not be present'), codes.ERR_UNEXPECTED_SIGNATURE);
378
385
  }
386
+ // @ts-expect-error should not be present
379
387
  if (message.key != null) {
380
388
  throw errcode(new Error('StrictNoSigning: key should not be present'), codes.ERR_UNEXPECTED_KEY);
381
389
  }
390
+ // @ts-expect-error should not be present
382
391
  if (message.sequenceNumber != null) {
383
392
  throw errcode(new Error('StrictNoSigning: seqno should not be present'), codes.ERR_UNEXPECTED_SEQNO);
384
393
  }
385
394
  break;
386
395
  case 'StrictSign':
396
+ if (message.type !== 'signed') {
397
+ throw errcode(new Error('Message type should be "signed" when signature policy is StrictSign but it was not'), codes.ERR_MISSING_SIGNATURE);
398
+ }
387
399
  if (message.signature == null) {
388
400
  throw errcode(new Error('StrictSigning: Signing required and no signature was present'), codes.ERR_MISSING_SIGNATURE);
389
401
  }
390
402
  if (message.sequenceNumber == null) {
391
- throw errcode(new Error('StrictSigning: Signing required and no seqno was present'), codes.ERR_MISSING_SEQNO);
403
+ throw errcode(new Error('StrictSigning: Signing required and no sequenceNumber was present'), codes.ERR_MISSING_SEQNO);
392
404
  }
393
405
  if (!(await verifySignature(message, this.encodeMessage.bind(this)))) {
394
406
  throw errcode(new Error('StrictSigning: Invalid message signature'), codes.ERR_INVALID_SIGNATURE);
@@ -410,10 +422,12 @@ export class PubSubBaseProtocol extends EventEmitter {
410
422
  const signaturePolicy = this.globalSignaturePolicy;
411
423
  switch (signaturePolicy) {
412
424
  case 'StrictSign':
413
- message.sequenceNumber = randomSeqno();
414
425
  return await signMessage(this.components.getPeerId(), message, this.encodeMessage.bind(this));
415
426
  case 'StrictNoSign':
416
- return await Promise.resolve(message);
427
+ return await Promise.resolve({
428
+ type: 'unsigned',
429
+ ...message
430
+ });
417
431
  default:
418
432
  throw errcode(new Error('Cannot build message: unhandled signature policy'), codes.ERR_UNHANDLED_SIGNATURE_POLICY);
419
433
  }
@@ -445,7 +459,8 @@ export class PubSubBaseProtocol extends EventEmitter {
445
459
  const message = {
446
460
  from: this.components.getPeerId(),
447
461
  topic,
448
- data: data ?? new Uint8Array(0)
462
+ data: data ?? new Uint8Array(0),
463
+ sequenceNumber: randomSeqno()
449
464
  };
450
465
  log('publish topic: %s from: %p data: %m', topic, message.from, message.data);
451
466
  const rpcMessage = await this.buildMessage(message);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@ import type { PeerId } from '@libp2p/interface-peer-id';
3
3
  import type { Stream } from '@libp2p/interface-connection';
4
4
  import type { Pushable } from 'it-pushable';
5
5
  import type { PeerStreamEvents } from '@libp2p/interface-pubsub';
6
+ import { Uint8ArrayList } from 'uint8arraylist';
6
7
  export interface PeerStreamsInit {
7
8
  id: PeerId;
8
9
  protocol: string;
@@ -16,11 +17,11 @@ export declare class PeerStreams extends EventEmitter<PeerStreamEvents> {
16
17
  /**
17
18
  * Write stream - it's preferable to use the write method
18
19
  */
19
- outboundStream?: Pushable<Uint8Array>;
20
+ outboundStream?: Pushable<Uint8ArrayList>;
20
21
  /**
21
22
  * Read stream
22
23
  */
23
- inboundStream?: AsyncIterable<Uint8Array>;
24
+ inboundStream?: AsyncIterable<Uint8ArrayList>;
24
25
  /**
25
26
  * The raw outbound stream, as retrieved from conn.newStream
26
27
  */
@@ -47,15 +48,15 @@ export declare class PeerStreams extends EventEmitter<PeerStreamEvents> {
47
48
  * Send a message to this peer.
48
49
  * Throws if there is no `stream` to write to available.
49
50
  */
50
- write(data: Uint8Array): void;
51
+ write(data: Uint8Array | Uint8ArrayList): void;
51
52
  /**
52
53
  * Attach a raw inbound stream and setup a read stream
53
54
  */
54
- attachInboundStream(stream: Stream): AsyncIterable<Uint8Array>;
55
+ attachInboundStream(stream: Stream): AsyncIterable<Uint8ArrayList>;
55
56
  /**
56
57
  * Attach a raw outbound stream and setup a write stream
57
58
  */
58
- attachOutboundStream(stream: Stream): Promise<Pushable<Uint8Array>>;
59
+ attachOutboundStream(stream: Stream): Promise<Pushable<Uint8ArrayList>>;
59
60
  /**
60
61
  * Closes the open connection to peer
61
62
  */
@@ -1 +1 @@
1
- {"version":3,"file":"peer-streams.d.ts","sourceRoot":"","sources":["../../src/peer-streams.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAe,MAAM,2BAA2B,CAAA;AAKrE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AACvD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAA;AAC1D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAIhE,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAA;IACV,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED;;GAEG;AACH,qBAAa,WAAY,SAAQ,YAAY,CAAC,gBAAgB,CAAC;IAC7D,SAAgB,EAAE,EAAE,MAAM,CAAA;IAC1B,SAAgB,QAAQ,EAAE,MAAM,CAAA;IAChC;;OAEG;IACI,cAAc,CAAC,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAA;IAC5C;;OAEG;IACI,aAAa,CAAC,EAAE,aAAa,CAAC,UAAU,CAAC,CAAA;IAChD;;OAEG;IACH,OAAO,CAAC,kBAAkB,CAAC,CAAQ;IACnC;;OAEG;IACH,OAAO,CAAC,iBAAiB,CAAC,CAAQ;IAClC;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAiB;IACzD,OAAO,CAAC,MAAM,CAAS;gBAEV,IAAI,EAAE,eAAe;IAUlC;;OAEG;IACH,IAAI,UAAU,YAEb;IAED;;OAEG;IACH,IAAI,UAAU,YAEb;IAED;;;OAGG;IACH,KAAK,CAAE,IAAI,EAAE,UAAU;IASvB;;OAEG;IACH,mBAAmB,CAAE,MAAM,EAAE,MAAM;IAmBnC;;OAEG;IACG,oBAAoB,CAAE,MAAM,EAAE,MAAM;IAwC1C;;OAEG;IACH,KAAK;CAsBN"}
1
+ {"version":3,"file":"peer-streams.d.ts","sourceRoot":"","sources":["../../src/peer-streams.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAe,MAAM,2BAA2B,CAAA;AAKrE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AACvD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAA;AAC1D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAI/C,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAA;IACV,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED;;GAEG;AACH,qBAAa,WAAY,SAAQ,YAAY,CAAC,gBAAgB,CAAC;IAC7D,SAAgB,EAAE,EAAE,MAAM,CAAA;IAC1B,SAAgB,QAAQ,EAAE,MAAM,CAAA;IAChC;;OAEG;IACI,cAAc,CAAC,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAA;IAChD;;OAEG;IACI,aAAa,CAAC,EAAE,aAAa,CAAC,cAAc,CAAC,CAAA;IACpD;;OAEG;IACH,OAAO,CAAC,kBAAkB,CAAC,CAAQ;IACnC;;OAEG;IACH,OAAO,CAAC,iBAAiB,CAAC,CAAQ;IAClC;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAiB;IACzD,OAAO,CAAC,MAAM,CAAS;gBAEV,IAAI,EAAE,eAAe;IAUlC;;OAEG;IACH,IAAI,UAAU,YAEb;IAED;;OAEG;IACH,IAAI,UAAU,YAEb;IAED;;;OAGG;IACH,KAAK,CAAE,IAAI,EAAE,UAAU,GAAG,cAAc;IASxC;;OAEG;IACH,mBAAmB,CAAE,MAAM,EAAE,MAAM;IAmBnC;;OAEG;IACG,oBAAoB,CAAE,MAAM,EAAE,MAAM;IAyC1C;;OAEG;IACH,KAAK;CAsBN"}
@@ -4,6 +4,7 @@ import * as lp from 'it-length-prefixed';
4
4
  import { pushable } from 'it-pushable';
5
5
  import { pipe } from 'it-pipe';
6
6
  import { abortableSource } from 'abortable-iterator';
7
+ import { Uint8ArrayList } from 'uint8arraylist';
7
8
  const log = logger('libp2p-pubsub:peer-streams');
8
9
  /**
9
10
  * Thin wrapper around a peer's inbound / outbound pubsub streams
@@ -37,7 +38,7 @@ export class PeerStreams extends EventEmitter {
37
38
  const id = this.id.toString();
38
39
  throw new Error('No writable connection to ' + id);
39
40
  }
40
- this.outboundStream.push(data);
41
+ this.outboundStream.push(data instanceof Uint8Array ? new Uint8ArrayList(data) : data);
41
42
  }
42
43
  /**
43
44
  * Attach a raw inbound stream and setup a read stream
@@ -64,6 +65,7 @@ export class PeerStreams extends EventEmitter {
64
65
  }
65
66
  this._rawOutboundStream = stream;
66
67
  this.outboundStream = pushable({
68
+ objectMode: true,
67
69
  onEnd: (shouldEmit) => {
68
70
  // close writable side of the stream
69
71
  if (this._rawOutboundStream != null && this._rawOutboundStream.reset != null) { // eslint-disable-line @typescript-eslint/prefer-optional-chain
@@ -1 +1 @@
1
- {"version":3,"file":"peer-streams.js","sourceRoot":"","sources":["../../src/peer-streams.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"peer-streams.js","sourceRoot":"","sources":["../../src/peer-streams.ts"],"names":[],"mappings":"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"}
@@ -1,17 +1,23 @@
1
1
  import type { PeerId } from '@libp2p/interface-peer-id';
2
- import type { Message, PubSubRPCMessage } from '@libp2p/interface-pubsub';
2
+ import type { PubSubRPCMessage, SignedMessage } from '@libp2p/interface-pubsub';
3
+ import type { Uint8ArrayList } from 'uint8arraylist';
3
4
  export declare const SignPrefix: Uint8Array;
4
5
  /**
5
6
  * Signs the provided message with the given `peerId`
6
7
  */
7
- export declare function signMessage(peerId: PeerId, message: Message, encode: (rpc: PubSubRPCMessage) => Uint8Array): Promise<Message>;
8
+ export declare function signMessage(peerId: PeerId, message: {
9
+ from: PeerId;
10
+ topic: string;
11
+ data: Uint8Array;
12
+ sequenceNumber: bigint;
13
+ }, encode: (rpc: PubSubRPCMessage) => Uint8ArrayList): Promise<SignedMessage>;
8
14
  /**
9
15
  * Verifies the signature of the given message
10
16
  */
11
- export declare function verifySignature(message: Message, encode: (rpc: PubSubRPCMessage) => Uint8Array): Promise<boolean>;
17
+ export declare function verifySignature(message: SignedMessage, encode: (rpc: PubSubRPCMessage) => Uint8ArrayList): Promise<boolean>;
12
18
  /**
13
19
  * Returns the PublicKey associated with the given message.
14
20
  * If no valid PublicKey can be retrieved an error will be returned.
15
21
  */
16
- export declare function messagePublicKey(message: Message): Promise<Uint8Array>;
22
+ export declare function messagePublicKey(message: SignedMessage): Promise<Uint8Array>;
17
23
  //# sourceMappingURL=sign.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sign.d.ts","sourceRoot":"","sources":["../../src/sign.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AAEvD,OAAO,KAAK,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAGzE,eAAO,MAAM,UAAU,YAAyC,CAAA;AAEhE;;GAEG;AACH,wBAAsB,WAAW,CAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,GAAG,EAAE,gBAAgB,KAAK,UAAU,oBAyBjH;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,GAAG,EAAE,gBAAgB,KAAK,UAAU,oBAyBrG;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CAAE,OAAO,EAAE,OAAO,uBAoBvD"}
1
+ {"version":3,"file":"sign.d.ts","sourceRoot":"","sources":["../../src/sign.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AAEvD,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AAE/E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAEpD,eAAO,MAAM,UAAU,YAAyC,CAAA;AAEhE;;GAEG;AACH,wBAAsB,WAAW,CAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,UAAU,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,EAAE,MAAM,EAAE,CAAC,GAAG,EAAE,gBAAgB,KAAK,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CA6BhN;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAE,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,GAAG,EAAE,gBAAgB,KAAK,cAAc,oBA6B/G;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CAAE,OAAO,EAAE,aAAa,uBAwB7D"}
package/dist/src/sign.js CHANGED
@@ -8,30 +8,37 @@ export const SignPrefix = uint8ArrayFromString('libp2p-pubsub:');
8
8
  * Signs the provided message with the given `peerId`
9
9
  */
10
10
  export async function signMessage(peerId, message, encode) {
11
- // Get the message in bytes, and prepend with the pubsub prefix
12
- const bytes = uint8ArrayConcat([
13
- SignPrefix,
14
- encode(toRpcMessage(message))
15
- ]);
16
11
  if (peerId.privateKey == null) {
17
12
  throw new Error('Cannot sign message, no private key present');
18
13
  }
19
14
  if (peerId.publicKey == null) {
20
15
  throw new Error('Cannot sign message, no public key present');
21
16
  }
22
- const privateKey = await keys.unmarshalPrivateKey(peerId.privateKey);
23
- const signature = await privateKey.sign(bytes);
17
+ // @ts-expect-error signature field is missing, added below
24
18
  const outputMessage = {
25
- ...message,
26
- signature: signature,
27
- key: peerId.publicKey
19
+ type: 'signed',
20
+ topic: message.topic,
21
+ data: message.data,
22
+ sequenceNumber: message.sequenceNumber,
23
+ from: peerId
28
24
  };
25
+ // Get the message in bytes, and prepend with the pubsub prefix
26
+ const bytes = uint8ArrayConcat([
27
+ SignPrefix,
28
+ encode(toRpcMessage(outputMessage)).subarray()
29
+ ]);
30
+ const privateKey = await keys.unmarshalPrivateKey(peerId.privateKey);
31
+ outputMessage.signature = await privateKey.sign(bytes);
32
+ outputMessage.key = peerId.publicKey;
29
33
  return outputMessage;
30
34
  }
31
35
  /**
32
36
  * Verifies the signature of the given message
33
37
  */
34
38
  export async function verifySignature(message, encode) {
39
+ if (message.type !== 'signed') {
40
+ throw new Error('Message type must be "signed" to be verified');
41
+ }
35
42
  if (message.signature == null) {
36
43
  throw new Error('Message must contain a signature to be verified');
37
44
  }
@@ -45,7 +52,7 @@ export async function verifySignature(message, encode) {
45
52
  ...toRpcMessage(message),
46
53
  signature: undefined,
47
54
  key: undefined
48
- })
55
+ }).subarray()
49
56
  ]);
50
57
  // Get the public key
51
58
  const pubKeyBytes = await messagePublicKey(message);
@@ -58,6 +65,9 @@ export async function verifySignature(message, encode) {
58
65
  * If no valid PublicKey can be retrieved an error will be returned.
59
66
  */
60
67
  export async function messagePublicKey(message) {
68
+ if (message.type !== 'signed') {
69
+ throw new Error('Message type must be "signed" to have a public key');
70
+ }
61
71
  // should be available in the from property of the message (peer id)
62
72
  if (message.from == null) {
63
73
  throw new Error('Could not get the public key from the originator id');
@@ -1 +1 @@
1
- {"version":3,"file":"sign.js","sourceRoot":"","sources":["../../src/sign.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sign.js","sourceRoot":"","sources":["../../src/sign.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAKzE;;GAEG;AACH,wBAAgB,WAAW,IAAK,MAAM,CAErC;AAED;;GAEG;AACH,eAAO,MAAM,KAAK,QAAS,UAAU,SAAS,MAAM,eAQnD,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,WAAW,SAAU,UAAU,2DAE3C,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,QAAQ,MAAO,IAAI,MAAM,CAAC,GAAG,MAAM,EAAE,KAAK,IAAI,MAAM,CAAC,GAAG,MAAM,EAAE,YAe5E,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,WAAW,iCAMvB,CAAA;AAED,eAAO,MAAM,SAAS,YAAa,gBAAgB,KAAG,OAarD,CAAA;AAED,eAAO,MAAM,YAAY,YAAa,OAAO,KAAG,gBAS/C,CAAA;AAED,eAAO,MAAM,aAAa,QAAS,MAAM,KAAG,UAQ3C,CAAA;AAED,eAAO,MAAM,eAAe,QAAS,UAAU,KAAG,MAEjD,CAAA"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAKzE;;GAEG;AACH,wBAAgB,WAAW,IAAK,MAAM,CAErC;AAED;;GAEG;AACH,eAAO,MAAM,KAAK,QAAS,UAAU,SAAS,MAAM,eAQnD,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,WAAW,SAAU,UAAU,2DAE3C,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,QAAQ,MAAO,IAAI,MAAM,CAAC,GAAG,MAAM,EAAE,KAAK,IAAI,MAAM,CAAC,GAAG,MAAM,EAAE,YAe5E,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,WAAW,iCAMvB,CAAA;AAED,eAAO,MAAM,SAAS,YAAa,gBAAgB,KAAG,OAsBrD,CAAA;AAED,eAAO,MAAM,YAAY,YAAa,OAAO,KAAG,gBAgB/C,CAAA;AAED,eAAO,MAAM,aAAa,QAAS,MAAM,KAAG,UAQ3C,CAAA;AAED,eAAO,MAAM,eAAe,QAAS,UAAU,KAAG,MAEjD,CAAA"}
package/dist/src/utils.js CHANGED
@@ -1,4 +1,4 @@
1
- import { randomBytes } from 'iso-random-stream';
1
+ import { randomBytes } from '@libp2p/crypto';
2
2
  import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string';
3
3
  import { toString as uint8ArrayToString } from 'uint8arrays/to-string';
4
4
  import { sha256 } from 'multiformats/hashes/sha2';
@@ -59,23 +59,37 @@ export const toMessage = (message) => {
59
59
  if (message.from == null) {
60
60
  throw errcode(new Error('RPC message was missing from'), codes.ERR_MISSING_FROM);
61
61
  }
62
+ if (message.sequenceNumber == null || message.from == null || message.signature == null || message.key == null) {
63
+ return {
64
+ type: 'unsigned',
65
+ topic: message.topic ?? '',
66
+ data: message.data ?? new Uint8Array(0)
67
+ };
68
+ }
62
69
  return {
70
+ type: 'signed',
63
71
  from: peerIdFromBytes(message.from),
64
72
  topic: message.topic ?? '',
65
- sequenceNumber: message.sequenceNumber == null ? undefined : bigIntFromBytes(message.sequenceNumber),
73
+ sequenceNumber: bigIntFromBytes(message.sequenceNumber),
66
74
  data: message.data ?? new Uint8Array(0),
67
- signature: message.signature ?? undefined,
68
- key: message.key ?? undefined
75
+ signature: message.signature,
76
+ key: message.key
69
77
  };
70
78
  };
71
79
  export const toRpcMessage = (message) => {
80
+ if (message.type === 'signed') {
81
+ return {
82
+ from: message.from.multihash.bytes,
83
+ data: message.data,
84
+ sequenceNumber: bigIntToBytes(message.sequenceNumber),
85
+ topic: message.topic,
86
+ signature: message.signature,
87
+ key: message.key
88
+ };
89
+ }
72
90
  return {
73
- from: message.from.multihash.bytes,
74
91
  data: message.data,
75
- sequenceNumber: message.sequenceNumber == null ? undefined : bigIntToBytes(message.sequenceNumber),
76
- topic: message.topic,
77
- signature: message.signature,
78
- key: message.key
92
+ topic: message.topic
79
93
  };
80
94
  };
81
95
  export const bigIntToBytes = (num) => {
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@libp2p/pubsub",
3
- "version": "3.0.2",
3
+ "version": "3.1.0",
4
4
  "description": "libp2p pubsub base class",
5
5
  "license": "Apache-2.0 OR MIT",
6
6
  "homepage": "https://github.com/libp2p/js-libp2p-pubsub#readme",
@@ -102,15 +102,15 @@
102
102
  "release": "patch"
103
103
  },
104
104
  {
105
- "type": "chore",
105
+ "type": "docs",
106
106
  "release": "patch"
107
107
  },
108
108
  {
109
- "type": "docs",
109
+ "type": "test",
110
110
  "release": "patch"
111
111
  },
112
112
  {
113
- "type": "test",
113
+ "type": "deps",
114
114
  "release": "patch"
115
115
  },
116
116
  {
@@ -140,7 +140,11 @@
140
140
  },
141
141
  {
142
142
  "type": "docs",
143
- "section": "Trivial Changes"
143
+ "section": "Documentation"
144
+ },
145
+ {
146
+ "type": "deps",
147
+ "section": "Dependencies"
144
148
  },
145
149
  {
146
150
  "type": "test",
@@ -176,22 +180,22 @@
176
180
  "@libp2p/crypto": "^1.0.0",
177
181
  "@libp2p/interface-connection": "^2.0.0",
178
182
  "@libp2p/interface-peer-id": "^1.0.2",
179
- "@libp2p/interface-pubsub": "^1.0.3",
183
+ "@libp2p/interface-pubsub": "^2.0.0",
180
184
  "@libp2p/interface-registrar": "^2.0.0",
181
185
  "@libp2p/interfaces": "^3.0.2",
182
186
  "@libp2p/logger": "^2.0.0",
183
- "@libp2p/peer-collections": "^1.0.0",
187
+ "@libp2p/peer-collections": "^2.0.0",
184
188
  "@libp2p/peer-id": "^1.1.0",
185
189
  "@libp2p/topology": "^3.0.0",
186
190
  "@multiformats/multiaddr": "^10.2.0",
187
191
  "abortable-iterator": "^4.0.2",
188
192
  "err-code": "^3.0.1",
189
- "iso-random-stream": "^2.0.0",
190
- "it-length-prefixed": "^7.0.1",
193
+ "it-length-prefixed": "^8.0.2",
191
194
  "it-pipe": "^2.0.3",
192
195
  "it-pushable": "^3.0.0",
193
196
  "multiformats": "^9.6.3",
194
197
  "p-queue": "^7.2.0",
198
+ "uint8arraylist": "^2.0.0",
195
199
  "uint8arrays": "^3.0.0"
196
200
  },
197
201
  "devDependencies": {
@@ -200,9 +204,9 @@
200
204
  "delay": "^5.0.0",
201
205
  "it-pair": "^2.0.2",
202
206
  "p-defer": "^4.0.0",
203
- "p-wait-for": "^4.1.0",
204
- "protons": "^3.0.4",
205
- "protons-runtime": "^1.0.4",
207
+ "p-wait-for": "^5.0.0",
208
+ "protons": "^4.0.1",
209
+ "protons-runtime": "^2.0.2",
206
210
  "sinon": "^14.0.0",
207
211
  "util": "^0.12.4"
208
212
  }
package/src/index.ts CHANGED
@@ -6,7 +6,7 @@ import Queue from 'p-queue'
6
6
  import { createTopology } from '@libp2p/topology'
7
7
  import { codes } from './errors.js'
8
8
  import { PeerStreams as PeerStreamsImpl } from './peer-streams.js'
9
- import { toMessage, ensureArray, randomSeqno, noSignMsgId, msgId, toRpcMessage } from './utils.js'
9
+ import { toMessage, ensureArray, noSignMsgId, msgId, toRpcMessage, randomSeqno } from './utils.js'
10
10
  import {
11
11
  signMessage,
12
12
  verifySignature
@@ -17,6 +17,7 @@ import type { Connection } from '@libp2p/interface-connection'
17
17
  import type { PubSub, Message, StrictNoSign, StrictSign, PubSubInit, PubSubEvents, PeerStreams, PubSubRPCMessage, PubSubRPC, PubSubRPCSubscription, SubscriptionChangeData, PublishResult } from '@libp2p/interface-pubsub'
18
18
  import { PeerMap, PeerSet } from '@libp2p/peer-collections'
19
19
  import { Components, Initializable } from '@libp2p/components'
20
+ import type { Uint8ArrayList } from 'uint8arraylist'
20
21
 
21
22
  const log = logger('libp2p:pubsub')
22
23
 
@@ -284,7 +285,7 @@ export abstract class PubSubBaseProtocol<Events = PubSubEvents> extends EventEmi
284
285
  /**
285
286
  * Responsible for processing each RPC message received by other peers.
286
287
  */
287
- async processMessages (peerId: PeerId, stream: AsyncIterable<Uint8Array>, peerStreams: PeerStreams) {
288
+ async processMessages (peerId: PeerId, stream: AsyncIterable<Uint8ArrayList>, peerStreams: PeerStreams) {
288
289
  try {
289
290
  await pipe(
290
291
  stream,
@@ -446,6 +447,10 @@ export abstract class PubSubBaseProtocol<Events = PubSubEvents> extends EventEmi
446
447
  const signaturePolicy = this.globalSignaturePolicy
447
448
  switch (signaturePolicy) {
448
449
  case 'StrictSign':
450
+ if (msg.type !== 'signed') {
451
+ throw errcode(new Error('Message type should be "signed" when signature policy is StrictSign but it was not'), codes.ERR_MISSING_SIGNATURE)
452
+ }
453
+
449
454
  if (msg.sequenceNumber == null) {
450
455
  throw errcode(new Error('Need seqno when signature policy is StrictSign but it was missing'), codes.ERR_MISSING_SEQNO)
451
456
  }
@@ -474,19 +479,19 @@ export abstract class PubSubBaseProtocol<Events = PubSubEvents> extends EventEmi
474
479
  * Decode Uint8Array into an RPC object.
475
480
  * This can be override to use a custom router protobuf.
476
481
  */
477
- abstract decodeRpc (bytes: Uint8Array): PubSubRPC
482
+ abstract decodeRpc (bytes: Uint8Array | Uint8ArrayList): PubSubRPC
478
483
 
479
484
  /**
480
485
  * Encode RPC object into a Uint8Array.
481
486
  * This can be override to use a custom router protobuf.
482
487
  */
483
- abstract encodeRpc (rpc: PubSubRPC): Uint8Array
488
+ abstract encodeRpc (rpc: PubSubRPC): Uint8ArrayList
484
489
 
485
490
  /**
486
491
  * Encode RPC object into a Uint8Array.
487
492
  * This can be override to use a custom router protobuf.
488
493
  */
489
- abstract encodeMessage (rpc: PubSubRPCMessage): Uint8Array
494
+ abstract encodeMessage (rpc: PubSubRPCMessage): Uint8ArrayList
490
495
 
491
496
  /**
492
497
  * Send an rpc object to a peer
@@ -523,26 +528,42 @@ export abstract class PubSubBaseProtocol<Events = PubSubEvents> extends EventEmi
523
528
  const signaturePolicy = this.globalSignaturePolicy
524
529
  switch (signaturePolicy) {
525
530
  case 'StrictNoSign':
531
+ if (message.type !== 'unsigned') {
532
+ throw errcode(new Error('Message type should be "unsigned" when signature policy is StrictNoSign but it was not'), codes.ERR_MISSING_SIGNATURE)
533
+ }
534
+
535
+ // @ts-expect-error should not be present
526
536
  if (message.signature != null) {
527
537
  throw errcode(new Error('StrictNoSigning: signature should not be present'), codes.ERR_UNEXPECTED_SIGNATURE)
528
538
  }
539
+
540
+ // @ts-expect-error should not be present
529
541
  if (message.key != null) {
530
542
  throw errcode(new Error('StrictNoSigning: key should not be present'), codes.ERR_UNEXPECTED_KEY)
531
543
  }
544
+
545
+ // @ts-expect-error should not be present
532
546
  if (message.sequenceNumber != null) {
533
547
  throw errcode(new Error('StrictNoSigning: seqno should not be present'), codes.ERR_UNEXPECTED_SEQNO)
534
548
  }
535
549
  break
536
550
  case 'StrictSign':
551
+ if (message.type !== 'signed') {
552
+ throw errcode(new Error('Message type should be "signed" when signature policy is StrictSign but it was not'), codes.ERR_MISSING_SIGNATURE)
553
+ }
554
+
537
555
  if (message.signature == null) {
538
556
  throw errcode(new Error('StrictSigning: Signing required and no signature was present'), codes.ERR_MISSING_SIGNATURE)
539
557
  }
558
+
540
559
  if (message.sequenceNumber == null) {
541
- throw errcode(new Error('StrictSigning: Signing required and no seqno was present'), codes.ERR_MISSING_SEQNO)
560
+ throw errcode(new Error('StrictSigning: Signing required and no sequenceNumber was present'), codes.ERR_MISSING_SEQNO)
542
561
  }
562
+
543
563
  if (!(await verifySignature(message, this.encodeMessage.bind(this)))) {
544
564
  throw errcode(new Error('StrictSigning: Invalid message signature'), codes.ERR_INVALID_SIGNATURE)
545
565
  }
566
+
546
567
  break
547
568
  default:
548
569
  throw errcode(new Error('Cannot validate message: unhandled signature policy'), codes.ERR_UNHANDLED_SIGNATURE_POLICY)
@@ -559,14 +580,16 @@ export abstract class PubSubBaseProtocol<Events = PubSubEvents> extends EventEmi
559
580
  * Normalizes the message and signs it, if signing is enabled.
560
581
  * Should be used by the routers to create the message to send.
561
582
  */
562
- async buildMessage (message: Message) {
583
+ async buildMessage (message: { from: PeerId, topic: string, data: Uint8Array, sequenceNumber: bigint }): Promise<Message> {
563
584
  const signaturePolicy = this.globalSignaturePolicy
564
585
  switch (signaturePolicy) {
565
586
  case 'StrictSign':
566
- message.sequenceNumber = randomSeqno()
567
587
  return await signMessage(this.components.getPeerId(), message, this.encodeMessage.bind(this))
568
588
  case 'StrictNoSign':
569
- return await Promise.resolve(message)
589
+ return await Promise.resolve({
590
+ type: 'unsigned',
591
+ ...message
592
+ })
570
593
  default:
571
594
  throw errcode(new Error('Cannot build message: unhandled signature policy'), codes.ERR_UNHANDLED_SIGNATURE_POLICY)
572
595
  }
@@ -603,10 +626,11 @@ export abstract class PubSubBaseProtocol<Events = PubSubEvents> extends EventEmi
603
626
  throw new Error('Pubsub has not started')
604
627
  }
605
628
 
606
- const message: Message = {
629
+ const message = {
607
630
  from: this.components.getPeerId(),
608
631
  topic,
609
- data: data ?? new Uint8Array(0)
632
+ data: data ?? new Uint8Array(0),
633
+ sequenceNumber: randomSeqno()
610
634
  }
611
635
 
612
636
  log('publish topic: %s from: %p data: %m', topic, message.from, message.data)
@@ -8,6 +8,7 @@ import type { PeerId } from '@libp2p/interface-peer-id'
8
8
  import type { Stream } from '@libp2p/interface-connection'
9
9
  import type { Pushable } from 'it-pushable'
10
10
  import type { PeerStreamEvents } from '@libp2p/interface-pubsub'
11
+ import { Uint8ArrayList } from 'uint8arraylist'
11
12
 
12
13
  const log = logger('libp2p-pubsub:peer-streams')
13
14
 
@@ -25,11 +26,11 @@ export class PeerStreams extends EventEmitter<PeerStreamEvents> {
25
26
  /**
26
27
  * Write stream - it's preferable to use the write method
27
28
  */
28
- public outboundStream?: Pushable<Uint8Array>
29
+ public outboundStream?: Pushable<Uint8ArrayList>
29
30
  /**
30
31
  * Read stream
31
32
  */
32
- public inboundStream?: AsyncIterable<Uint8Array>
33
+ public inboundStream?: AsyncIterable<Uint8ArrayList>
33
34
  /**
34
35
  * The raw outbound stream, as retrieved from conn.newStream
35
36
  */
@@ -72,13 +73,13 @@ export class PeerStreams extends EventEmitter<PeerStreamEvents> {
72
73
  * Send a message to this peer.
73
74
  * Throws if there is no `stream` to write to available.
74
75
  */
75
- write (data: Uint8Array) {
76
+ write (data: Uint8Array | Uint8ArrayList) {
76
77
  if (this.outboundStream == null) {
77
78
  const id = this.id.toString()
78
79
  throw new Error('No writable connection to ' + id)
79
80
  }
80
81
 
81
- this.outboundStream.push(data)
82
+ this.outboundStream.push(data instanceof Uint8Array ? new Uint8ArrayList(data) : data)
82
83
  }
83
84
 
84
85
  /**
@@ -115,7 +116,8 @@ export class PeerStreams extends EventEmitter<PeerStreamEvents> {
115
116
  }
116
117
 
117
118
  this._rawOutboundStream = stream
118
- this.outboundStream = pushable({
119
+ this.outboundStream = pushable<Uint8ArrayList>({
120
+ objectMode: true,
119
121
  onEnd: (shouldEmit) => {
120
122
  // close writable side of the stream
121
123
  if (this._rawOutboundStream != null && this._rawOutboundStream.reset != null) { // eslint-disable-line @typescript-eslint/prefer-optional-chain
package/src/sign.ts CHANGED
@@ -3,21 +3,16 @@ import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'
3
3
  import { toRpcMessage } from './utils.js'
4
4
  import type { PeerId } from '@libp2p/interface-peer-id'
5
5
  import { keys } from '@libp2p/crypto'
6
- import type { Message, PubSubRPCMessage } from '@libp2p/interface-pubsub'
6
+ import type { PubSubRPCMessage, SignedMessage } from '@libp2p/interface-pubsub'
7
7
  import { peerIdFromKeys } from '@libp2p/peer-id'
8
+ import type { Uint8ArrayList } from 'uint8arraylist'
8
9
 
9
10
  export const SignPrefix = uint8ArrayFromString('libp2p-pubsub:')
10
11
 
11
12
  /**
12
13
  * Signs the provided message with the given `peerId`
13
14
  */
14
- export async function signMessage (peerId: PeerId, message: Message, encode: (rpc: PubSubRPCMessage) => Uint8Array) {
15
- // Get the message in bytes, and prepend with the pubsub prefix
16
- const bytes = uint8ArrayConcat([
17
- SignPrefix,
18
- encode(toRpcMessage(message))
19
- ])
20
-
15
+ export async function signMessage (peerId: PeerId, message: { from: PeerId, topic: string, data: Uint8Array, sequenceNumber: bigint }, encode: (rpc: PubSubRPCMessage) => Uint8ArrayList): Promise<SignedMessage> {
21
16
  if (peerId.privateKey == null) {
22
17
  throw new Error('Cannot sign message, no private key present')
23
18
  }
@@ -26,22 +21,36 @@ export async function signMessage (peerId: PeerId, message: Message, encode: (rp
26
21
  throw new Error('Cannot sign message, no public key present')
27
22
  }
28
23
 
29
- const privateKey = await keys.unmarshalPrivateKey(peerId.privateKey)
30
- const signature = await privateKey.sign(bytes)
31
-
32
- const outputMessage: Message = {
33
- ...message,
34
- signature: signature,
35
- key: peerId.publicKey
24
+ // @ts-expect-error signature field is missing, added below
25
+ const outputMessage: SignedMessage = {
26
+ type: 'signed',
27
+ topic: message.topic,
28
+ data: message.data,
29
+ sequenceNumber: message.sequenceNumber,
30
+ from: peerId
36
31
  }
37
32
 
33
+ // Get the message in bytes, and prepend with the pubsub prefix
34
+ const bytes = uint8ArrayConcat([
35
+ SignPrefix,
36
+ encode(toRpcMessage(outputMessage)).subarray()
37
+ ])
38
+
39
+ const privateKey = await keys.unmarshalPrivateKey(peerId.privateKey)
40
+ outputMessage.signature = await privateKey.sign(bytes)
41
+ outputMessage.key = peerId.publicKey
42
+
38
43
  return outputMessage
39
44
  }
40
45
 
41
46
  /**
42
47
  * Verifies the signature of the given message
43
48
  */
44
- export async function verifySignature (message: Message, encode: (rpc: PubSubRPCMessage) => Uint8Array) {
49
+ export async function verifySignature (message: SignedMessage, encode: (rpc: PubSubRPCMessage) => Uint8ArrayList) {
50
+ if (message.type !== 'signed') {
51
+ throw new Error('Message type must be "signed" to be verified')
52
+ }
53
+
45
54
  if (message.signature == null) {
46
55
  throw new Error('Message must contain a signature to be verified')
47
56
  }
@@ -57,7 +66,7 @@ export async function verifySignature (message: Message, encode: (rpc: PubSubRPC
57
66
  ...toRpcMessage(message),
58
67
  signature: undefined,
59
68
  key: undefined
60
- })
69
+ }).subarray()
61
70
  ])
62
71
 
63
72
  // Get the public key
@@ -72,7 +81,11 @@ export async function verifySignature (message: Message, encode: (rpc: PubSubRPC
72
81
  * Returns the PublicKey associated with the given message.
73
82
  * If no valid PublicKey can be retrieved an error will be returned.
74
83
  */
75
- export async function messagePublicKey (message: Message) {
84
+ export async function messagePublicKey (message: SignedMessage) {
85
+ if (message.type !== 'signed') {
86
+ throw new Error('Message type must be "signed" to have a public key')
87
+ }
88
+
76
89
  // should be available in the from property of the message (peer id)
77
90
  if (message.from == null) {
78
91
  throw new Error('Could not get the public key from the originator id')
package/src/utils.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { randomBytes } from 'iso-random-stream'
1
+ import { randomBytes } from '@libp2p/crypto'
2
2
  import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'
3
3
  import { toString as uint8ArrayToString } from 'uint8arrays/to-string'
4
4
  import { sha256 } from 'multiformats/hashes/sha2'
@@ -71,24 +71,40 @@ export const toMessage = (message: PubSubRPCMessage): Message => {
71
71
  throw errcode(new Error('RPC message was missing from'), codes.ERR_MISSING_FROM)
72
72
  }
73
73
 
74
+ if (message.sequenceNumber == null || message.from == null || message.signature == null || message.key == null) {
75
+ return {
76
+ type: 'unsigned',
77
+ topic: message.topic ?? '',
78
+ data: message.data ?? new Uint8Array(0)
79
+ }
80
+ }
81
+
74
82
  return {
83
+ type: 'signed',
75
84
  from: peerIdFromBytes(message.from),
76
85
  topic: message.topic ?? '',
77
- sequenceNumber: message.sequenceNumber == null ? undefined : bigIntFromBytes(message.sequenceNumber),
86
+ sequenceNumber: bigIntFromBytes(message.sequenceNumber),
78
87
  data: message.data ?? new Uint8Array(0),
79
- signature: message.signature ?? undefined,
80
- key: message.key ?? undefined
88
+ signature: message.signature,
89
+ key: message.key
81
90
  }
82
91
  }
83
92
 
84
93
  export const toRpcMessage = (message: Message): PubSubRPCMessage => {
94
+ if (message.type === 'signed') {
95
+ return {
96
+ from: message.from.multihash.bytes,
97
+ data: message.data,
98
+ sequenceNumber: bigIntToBytes(message.sequenceNumber),
99
+ topic: message.topic,
100
+ signature: message.signature,
101
+ key: message.key
102
+ }
103
+ }
104
+
85
105
  return {
86
- from: message.from.multihash.bytes,
87
106
  data: message.data,
88
- sequenceNumber: message.sequenceNumber == null ? undefined : bigIntToBytes(message.sequenceNumber),
89
- topic: message.topic,
90
- signature: message.signature,
91
- key: message.key
107
+ topic: message.topic
92
108
  }
93
109
  }
94
110