@libp2p/pubsub 0.0.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +4 -0
- package/README.md +35 -0
- package/dist/src/errors.d.ts +39 -0
- package/dist/src/errors.d.ts.map +1 -0
- package/dist/src/errors.js +41 -0
- package/dist/src/errors.js.map +1 -0
- package/dist/src/index.d.ts +180 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +467 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/message/rpc.d.ts +258 -0
- package/dist/src/message/rpc.js +699 -0
- package/dist/src/message/sign.d.ts +17 -0
- package/dist/src/message/sign.d.ts.map +1 -0
- package/dist/src/message/sign.js +84 -0
- package/dist/src/message/sign.js.map +1 -0
- package/dist/src/message/topic-descriptor.d.ts +254 -0
- package/dist/src/message/topic-descriptor.js +647 -0
- package/dist/src/peer-streams.d.ts +67 -0
- package/dist/src/peer-streams.d.ts.map +1 -0
- package/dist/src/peer-streams.js +112 -0
- package/dist/src/peer-streams.js.map +1 -0
- package/dist/src/utils.d.ts +29 -0
- package/dist/src/utils.d.ts.map +1 -0
- package/dist/src/utils.js +80 -0
- package/dist/src/utils.js.map +1 -0
- package/dist/test/emit-self.spec.d.ts +2 -0
- package/dist/test/emit-self.spec.d.ts.map +1 -0
- package/dist/test/emit-self.spec.js +63 -0
- package/dist/test/emit-self.spec.js.map +1 -0
- package/dist/test/instance.spec.d.ts +2 -0
- package/dist/test/instance.spec.d.ts.map +1 -0
- package/dist/test/instance.spec.js +50 -0
- package/dist/test/instance.spec.js.map +1 -0
- package/dist/test/lifesycle.spec.d.ts +2 -0
- package/dist/test/lifesycle.spec.d.ts.map +1 -0
- package/dist/test/lifesycle.spec.js +192 -0
- package/dist/test/lifesycle.spec.js.map +1 -0
- package/dist/test/message.spec.d.ts +2 -0
- package/dist/test/message.spec.d.ts.map +1 -0
- package/dist/test/message.spec.js +83 -0
- package/dist/test/message.spec.js.map +1 -0
- package/dist/test/pubsub.spec.d.ts +2 -0
- package/dist/test/pubsub.spec.d.ts.map +1 -0
- package/dist/test/pubsub.spec.js +310 -0
- package/dist/test/pubsub.spec.js.map +1 -0
- package/dist/test/sign.spec.d.ts +2 -0
- package/dist/test/sign.spec.d.ts.map +1 -0
- package/dist/test/sign.spec.js +93 -0
- package/dist/test/sign.spec.js.map +1 -0
- package/dist/test/topic-validators.spec.d.ts +2 -0
- package/dist/test/topic-validators.spec.d.ts.map +1 -0
- package/dist/test/topic-validators.spec.js +86 -0
- package/dist/test/topic-validators.spec.js.map +1 -0
- package/dist/test/utils/index.d.ts +22 -0
- package/dist/test/utils/index.d.ts.map +1 -0
- package/dist/test/utils/index.js +86 -0
- package/dist/test/utils/index.js.map +1 -0
- package/dist/test/utils.spec.d.ts +2 -0
- package/dist/test/utils.spec.d.ts.map +1 -0
- package/dist/test/utils.spec.js +53 -0
- package/dist/test/utils.spec.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +109 -4
- package/src/README.md +251 -0
- package/src/errors.ts +45 -0
- package/src/index.ts +610 -0
- package/src/message/rpc.d.ts +258 -0
- package/src/message/rpc.js +699 -0
- package/src/message/rpc.proto +20 -0
- package/src/message/sign.ts +101 -0
- package/src/message/topic-descriptor.d.ts +254 -0
- package/src/message/topic-descriptor.js +647 -0
- package/src/message/topic-descriptor.proto +30 -0
- package/src/peer-streams.ts +169 -0
- package/src/utils.ts +93 -0
package/LICENSE
ADDED
package/README.md
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
# libp2p-pubsub <!-- omit in toc -->
|
2
|
+
|
3
|
+
> Contains an implementation of the [Pubsub](https://github.com/libp2p/js-libp2p-interfaces/blob/master/packages/libp2p-interfaces/src/pubsub/index.ts) interface
|
4
|
+
|
5
|
+
## Table of contents <!-- omit in toc -->
|
6
|
+
|
7
|
+
- [Usage](#usage)
|
8
|
+
- [Contribute](#contribute)
|
9
|
+
- [License](#license)
|
10
|
+
|
11
|
+
## Usage
|
12
|
+
|
13
|
+
```console
|
14
|
+
npm i libp2p-pubsub
|
15
|
+
```
|
16
|
+
|
17
|
+
```javascript
|
18
|
+
import { PubsubBaseProtocol } from '@libp2p/pubsub'
|
19
|
+
|
20
|
+
class MyPubsubImplementation extends PubsubBaseProtocol {
|
21
|
+
// .. extra methods here
|
22
|
+
}
|
23
|
+
```
|
24
|
+
|
25
|
+
## Contribute
|
26
|
+
|
27
|
+
The libp2p implementation in JavaScript is a work in progress. As such, there are a few things you can do right now to help out:
|
28
|
+
|
29
|
+
- Go through the modules and **check out existing issues**. This would be especially useful for modules in active development. Some knowledge of IPFS/libp2p may be required, as well as the infrastructure behind it - for instance, you may need to read up on p2p and more complex operations like muxing to be able to help technically.
|
30
|
+
- **Perform code reviews**. More eyes will help a) speed the project along b) ensure quality and c) reduce possible future bugs.
|
31
|
+
- **Add tests**. There can never be enough tests.
|
32
|
+
|
33
|
+
## License
|
34
|
+
|
35
|
+
[Apache-2.0](LICENSE-APACHE) or [MIT](LICENSE-MIT) © Protocol Labs
|
@@ -0,0 +1,39 @@
|
|
1
|
+
export declare const codes: {
|
2
|
+
/**
|
3
|
+
* Signature policy is invalid
|
4
|
+
*/
|
5
|
+
ERR_INVALID_SIGNATURE_POLICY: string;
|
6
|
+
/**
|
7
|
+
* Signature policy is unhandled
|
8
|
+
*/
|
9
|
+
ERR_UNHANDLED_SIGNATURE_POLICY: string;
|
10
|
+
/**
|
11
|
+
* Message expected to have a `signature`, but doesn't
|
12
|
+
*/
|
13
|
+
ERR_MISSING_SIGNATURE: string;
|
14
|
+
/**
|
15
|
+
* Message expected to have a `seqno`, but doesn't
|
16
|
+
*/
|
17
|
+
ERR_MISSING_SEQNO: string;
|
18
|
+
/**
|
19
|
+
* Message `signature` is invalid
|
20
|
+
*/
|
21
|
+
ERR_INVALID_SIGNATURE: string;
|
22
|
+
/**
|
23
|
+
* Message expected to not have a `from`, but does
|
24
|
+
*/
|
25
|
+
ERR_UNEXPECTED_FROM: string;
|
26
|
+
/**
|
27
|
+
* Message expected to not have a `signature`, but does
|
28
|
+
*/
|
29
|
+
ERR_UNEXPECTED_SIGNATURE: string;
|
30
|
+
/**
|
31
|
+
* Message expected to not have a `key`, but does
|
32
|
+
*/
|
33
|
+
ERR_UNEXPECTED_KEY: string;
|
34
|
+
/**
|
35
|
+
* Message expected to not have a `seqno`, but does
|
36
|
+
*/
|
37
|
+
ERR_UNEXPECTED_SEQNO: string;
|
38
|
+
};
|
39
|
+
//# sourceMappingURL=errors.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,KAAK;IAChB;;OAEG;;IAEH;;OAEG;;IAKH;;OAEG;;IAEH;;OAEG;;IAEH;;OAEG;;IAKH;;OAEG;;IAEH;;OAEG;;IAEH;;OAEG;;IAEH;;OAEG;;CAEJ,CAAA"}
|
@@ -0,0 +1,41 @@
|
|
1
|
+
export const codes = {
|
2
|
+
/**
|
3
|
+
* Signature policy is invalid
|
4
|
+
*/
|
5
|
+
ERR_INVALID_SIGNATURE_POLICY: 'ERR_INVALID_SIGNATURE_POLICY',
|
6
|
+
/**
|
7
|
+
* Signature policy is unhandled
|
8
|
+
*/
|
9
|
+
ERR_UNHANDLED_SIGNATURE_POLICY: 'ERR_UNHANDLED_SIGNATURE_POLICY',
|
10
|
+
// Strict signing codes
|
11
|
+
/**
|
12
|
+
* Message expected to have a `signature`, but doesn't
|
13
|
+
*/
|
14
|
+
ERR_MISSING_SIGNATURE: 'ERR_MISSING_SIGNATURE',
|
15
|
+
/**
|
16
|
+
* Message expected to have a `seqno`, but doesn't
|
17
|
+
*/
|
18
|
+
ERR_MISSING_SEQNO: 'ERR_MISSING_SEQNO',
|
19
|
+
/**
|
20
|
+
* Message `signature` is invalid
|
21
|
+
*/
|
22
|
+
ERR_INVALID_SIGNATURE: 'ERR_INVALID_SIGNATURE',
|
23
|
+
// Strict no-signing codes
|
24
|
+
/**
|
25
|
+
* Message expected to not have a `from`, but does
|
26
|
+
*/
|
27
|
+
ERR_UNEXPECTED_FROM: 'ERR_UNEXPECTED_FROM',
|
28
|
+
/**
|
29
|
+
* Message expected to not have a `signature`, but does
|
30
|
+
*/
|
31
|
+
ERR_UNEXPECTED_SIGNATURE: 'ERR_UNEXPECTED_SIGNATURE',
|
32
|
+
/**
|
33
|
+
* Message expected to not have a `key`, but does
|
34
|
+
*/
|
35
|
+
ERR_UNEXPECTED_KEY: 'ERR_UNEXPECTED_KEY',
|
36
|
+
/**
|
37
|
+
* Message expected to not have a `seqno`, but does
|
38
|
+
*/
|
39
|
+
ERR_UNEXPECTED_SEQNO: 'ERR_UNEXPECTED_SEQNO'
|
40
|
+
};
|
41
|
+
//# sourceMappingURL=errors.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"AACA,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB;;OAEG;IACH,4BAA4B,EAAE,8BAA8B;IAC5D;;OAEG;IACH,8BAA8B,EAAE,gCAAgC;IAEhE,uBAAuB;IAEvB;;OAEG;IACH,qBAAqB,EAAE,uBAAuB;IAC9C;;OAEG;IACH,iBAAiB,EAAE,mBAAmB;IACtC;;OAEG;IACH,qBAAqB,EAAE,uBAAuB;IAE9C,0BAA0B;IAE1B;;OAEG;IACH,mBAAmB,EAAE,qBAAqB;IAC1C;;OAEG;IACH,wBAAwB,EAAE,0BAA0B;IACpD;;OAEG;IACH,kBAAkB,EAAE,oBAAoB;IACxC;;OAEG;IACH,oBAAoB,EAAE,sBAAsB;CAC7C,CAAA"}
|
@@ -0,0 +1,180 @@
|
|
1
|
+
/// <reference types="node" />
|
2
|
+
import debug from 'debug';
|
3
|
+
import { EventEmitter } from 'events';
|
4
|
+
import Queue from 'p-queue';
|
5
|
+
import { RPC, IRPC } from './message/rpc.js';
|
6
|
+
import { PeerStreams } from './peer-streams.js';
|
7
|
+
import type { PeerId } from '@libp2p/interfaces/peer-id';
|
8
|
+
import type { Registrar, IncomingStreamEvent } from '@libp2p/interfaces/registrar';
|
9
|
+
import type { Connection } from '@libp2p/interfaces/connection';
|
10
|
+
import type BufferList from 'bl';
|
11
|
+
import type { PubSub, Message, StrictNoSign, StrictSign, PubsubOptions } from '@libp2p/interfaces/pubsub';
|
12
|
+
import type { Startable } from '@libp2p/interfaces';
|
13
|
+
export interface TopicValidator {
|
14
|
+
(topic: string, message: Message): Promise<void>;
|
15
|
+
}
|
16
|
+
/**
|
17
|
+
* PubsubBaseProtocol handles the peers and connections logic for pubsub routers
|
18
|
+
* and specifies the API that pubsub routers should have.
|
19
|
+
*/
|
20
|
+
export declare abstract class PubsubBaseProtocol extends EventEmitter implements PubSub, Startable {
|
21
|
+
peerId: PeerId;
|
22
|
+
started: boolean;
|
23
|
+
/**
|
24
|
+
* Map of topics to which peers are subscribed to
|
25
|
+
*/
|
26
|
+
topics: Map<string, Set<string>>;
|
27
|
+
/**
|
28
|
+
* List of our subscriptions
|
29
|
+
*/
|
30
|
+
subscriptions: Set<string>;
|
31
|
+
/**
|
32
|
+
* Map of peer streams
|
33
|
+
*/
|
34
|
+
peers: Map<string, PeerStreams>;
|
35
|
+
/**
|
36
|
+
* The signature policy to follow by default
|
37
|
+
*/
|
38
|
+
globalSignaturePolicy: StrictNoSign | StrictSign;
|
39
|
+
/**
|
40
|
+
* If router can relay received messages, even if not subscribed
|
41
|
+
*/
|
42
|
+
canRelayMessage: boolean;
|
43
|
+
/**
|
44
|
+
* if publish should emit to self, if subscribed
|
45
|
+
*/
|
46
|
+
emitSelf: boolean;
|
47
|
+
/**
|
48
|
+
* Topic validator map
|
49
|
+
*
|
50
|
+
* Keyed by topic
|
51
|
+
* Topic validators are functions with the following input:
|
52
|
+
*/
|
53
|
+
topicValidators: Map<string, TopicValidator>;
|
54
|
+
queue: Queue;
|
55
|
+
registrar: Registrar;
|
56
|
+
protected log: debug.Debugger & {
|
57
|
+
err: debug.Debugger;
|
58
|
+
};
|
59
|
+
protected multicodecs: string[];
|
60
|
+
protected _libp2p: any;
|
61
|
+
private _registrarId;
|
62
|
+
constructor(props: PubsubOptions);
|
63
|
+
/**
|
64
|
+
* Register the pubsub protocol onto the libp2p node.
|
65
|
+
*
|
66
|
+
* @returns {void}
|
67
|
+
*/
|
68
|
+
start(): void;
|
69
|
+
/**
|
70
|
+
* Unregister the pubsub protocol and the streams with other peers will be closed.
|
71
|
+
*
|
72
|
+
* @returns {void}
|
73
|
+
*/
|
74
|
+
stop(): void;
|
75
|
+
isStarted(): boolean;
|
76
|
+
/**
|
77
|
+
* On an inbound stream opened
|
78
|
+
*/
|
79
|
+
protected _onIncomingStream({ protocol, stream, connection }: IncomingStreamEvent): void;
|
80
|
+
/**
|
81
|
+
* Registrar notifies an established connection with pubsub protocol
|
82
|
+
*/
|
83
|
+
protected _onPeerConnected(peerId: PeerId, conn: Connection): Promise<void>;
|
84
|
+
/**
|
85
|
+
* Registrar notifies a closing connection with pubsub protocol
|
86
|
+
*/
|
87
|
+
protected _onPeerDisconnected(peerId: PeerId, conn?: Connection): void;
|
88
|
+
/**
|
89
|
+
* Notifies the router that a peer has been connected
|
90
|
+
*/
|
91
|
+
protected _addPeer(peerId: PeerId, protocol: string): PeerStreams;
|
92
|
+
/**
|
93
|
+
* Notifies the router that a peer has been disconnected
|
94
|
+
*/
|
95
|
+
protected _removePeer(peerId: PeerId): PeerStreams | undefined;
|
96
|
+
/**
|
97
|
+
* Responsible for processing each RPC message received by other peers.
|
98
|
+
*/
|
99
|
+
_processMessages(idB58Str: string, stream: AsyncIterable<Uint8Array | BufferList>, peerStreams: PeerStreams): Promise<void>;
|
100
|
+
/**
|
101
|
+
* Handles an rpc request from a peer
|
102
|
+
*/
|
103
|
+
_processRpc(idB58Str: string, peerStreams: PeerStreams, rpc: RPC): Promise<boolean>;
|
104
|
+
/**
|
105
|
+
* Handles a subscription change from a peer
|
106
|
+
*/
|
107
|
+
_processRpcSubOpt(id: string, subOpt: RPC.ISubOpts): void;
|
108
|
+
/**
|
109
|
+
* Handles an message from a peer
|
110
|
+
*/
|
111
|
+
_processRpcMessage(msg: Message): Promise<void>;
|
112
|
+
/**
|
113
|
+
* Emit a message from a peer
|
114
|
+
*/
|
115
|
+
_emitMessage(message: Message): void;
|
116
|
+
/**
|
117
|
+
* The default msgID implementation
|
118
|
+
* Child class can override this.
|
119
|
+
*/
|
120
|
+
getMsgId(msg: Message): import("multiformats/hashes/hasher").Await<Uint8Array>;
|
121
|
+
/**
|
122
|
+
* Whether to accept a message from a peer
|
123
|
+
* Override to create a graylist
|
124
|
+
*/
|
125
|
+
_acceptFrom(id: string): boolean;
|
126
|
+
/**
|
127
|
+
* Decode Uint8Array into an RPC object.
|
128
|
+
* This can be override to use a custom router protobuf.
|
129
|
+
*/
|
130
|
+
_decodeRpc(bytes: Uint8Array): RPC;
|
131
|
+
/**
|
132
|
+
* Encode RPC object into a Uint8Array.
|
133
|
+
* This can be override to use a custom router protobuf.
|
134
|
+
*/
|
135
|
+
_encodeRpc(rpc: IRPC): Uint8Array;
|
136
|
+
/**
|
137
|
+
* Send an rpc object to a peer
|
138
|
+
*/
|
139
|
+
_sendRpc(id: string, rpc: IRPC): void;
|
140
|
+
/**
|
141
|
+
* Send subscriptions to a peer
|
142
|
+
*/
|
143
|
+
_sendSubscriptions(id: string, topics: string[], subscribe: boolean): void;
|
144
|
+
/**
|
145
|
+
* Validates the given message. The signature will be checked for authenticity.
|
146
|
+
* Throws an error on invalid messages
|
147
|
+
*/
|
148
|
+
validate(message: Message): Promise<void>;
|
149
|
+
/**
|
150
|
+
* Normalizes the message and signs it, if signing is enabled.
|
151
|
+
* Should be used by the routers to create the message to send.
|
152
|
+
*/
|
153
|
+
protected _buildMessage(message: Message): Promise<Message>;
|
154
|
+
/**
|
155
|
+
* Get a list of the peer-ids that are subscribed to one topic.
|
156
|
+
*/
|
157
|
+
getSubscribers(topic: string): string[];
|
158
|
+
/**
|
159
|
+
* Publishes messages to all subscribed peers
|
160
|
+
*/
|
161
|
+
publish(topic: string, message: Uint8Array): Promise<void>;
|
162
|
+
/**
|
163
|
+
* Overriding the implementation of publish should handle the appropriate algorithms for the publish/subscriber implementation.
|
164
|
+
* For example, a Floodsub implementation might simply publish each message to each topic for every peer
|
165
|
+
*/
|
166
|
+
abstract _publish(message: Message): Promise<void>;
|
167
|
+
/**
|
168
|
+
* Subscribes to a given topic.
|
169
|
+
*/
|
170
|
+
subscribe(topic: string): void;
|
171
|
+
/**
|
172
|
+
* Unsubscribe from the given topic.
|
173
|
+
*/
|
174
|
+
unsubscribe(topic: string): void;
|
175
|
+
/**
|
176
|
+
* Get the list of topics which the peer is subscribed to.
|
177
|
+
*/
|
178
|
+
getTopics(): string[];
|
179
|
+
}
|
180
|
+
//# sourceMappingURL=index.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|