@libp2p/floodsub 1.0.2 → 1.0.3

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 @@
1
+ {"version":3,"file":"rpc.js","sourceRoot":"","sources":["../../../src/message/rpc.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@libp2p/floodsub",
3
- "version": "1.0.2",
3
+ "version": "1.0.3",
4
4
  "description": "libp2p-floodsub, also known as pubsub-flood or just dumbsub, this implementation of pubsub focused on delivering an API for Publish/Subscribe, but with no CastTree Forming (it just floods the network).",
5
5
  "license": "Apache-2.0 OR MIT",
6
6
  "homepage": "https://github.com/libp2p/js-libp2p-floodsub#readme",
@@ -127,38 +127,37 @@
127
127
  ]
128
128
  },
129
129
  "scripts": {
130
+ "clean": "aegir clean",
130
131
  "lint": "aegir lint",
131
- "dep-check": "aegir dep-check dist/src/**/*.js dist/test/**/*.js",
132
- "build": "tsc && npm run build:copy-proto-files",
133
- "build:copy-proto-files": "mkdirp dist/src/message && cp src/message/*.js src/message/*.d.ts dist/src/message",
134
- "generate": "npm run generate:proto && npm run generate:proto-types",
135
- "generate:proto": "pbjs -t static-module -w es6 -r libp2p-floodsub --force-number --no-verify --no-delimited --no-create --no-beautify --no-defaults --lint eslint-disable -o src/message/rpc.js ./src/message/rpc.proto",
136
- "generate:proto-types": "pbts -o src/message/rpc.d.ts src/message/rpc.js",
137
- "pretest": "npm run build",
132
+ "dep-check": "aegir dep-check",
133
+ "build": "aegir build",
134
+ "generate": "protons ./src/message/rpc.proto",
138
135
  "test": "aegir test -f dist/test",
139
- "test:chrome": "npm run test -- -t browser --cov",
140
- "test:chrome-webworker": "npm run test -- -t webworker",
141
- "test:firefox": "npm run test -- -t browser -- --browser firefox",
142
- "test:firefox-webworker": "npm run test -- -t webworker -- --browser firefox",
143
- "test:node": "npm run test -- -t node --cov",
144
- "test:electron-main": "npm run test -- -t electron-main",
145
- "release": "semantic-release"
136
+ "test:chrome": "aegir test -t browser --cov",
137
+ "test:chrome-webworker": "aegir test -t webworker",
138
+ "test:firefox": "aegir test -t browser -- --browser firefox",
139
+ "test:firefox-webworker": "aegir test -t webworker -- --browser firefox",
140
+ "test:node": "aegir test -t node --cov",
141
+ "test:electron-main": "aegir test -t electron-main",
142
+ "release": "aegir release"
146
143
  },
147
144
  "dependencies": {
148
- "@libp2p/interfaces": "^1.3.18",
149
- "@libp2p/logger": "^1.1.2",
150
- "@libp2p/pubsub": "^1.2.12",
151
- "protobufjs": "^6.11.2",
145
+ "@libp2p/interfaces": "^1.3.20",
146
+ "@libp2p/logger": "^1.1.3",
147
+ "@libp2p/pubsub": "^1.2.14",
148
+ "protons-runtime": "^1.0.2",
152
149
  "uint8arrays": "^3.0.0"
153
150
  },
154
151
  "devDependencies": {
155
- "@libp2p/interface-compliance-tests": "^1.1.19",
156
- "@libp2p/peer-id": "^1.1.8",
157
- "@libp2p/peer-id-factory": "^1.0.8",
152
+ "@libp2p/interface-compliance-tests": "^1.1.21",
153
+ "@libp2p/peer-collections": "^1.0.1",
154
+ "@libp2p/peer-id": "^1.1.9",
155
+ "@libp2p/peer-id-factory": "^1.0.9",
158
156
  "@multiformats/multiaddr": "^10.1.8",
159
- "aegir": "^36.1.3",
157
+ "aegir": "^37.0.7",
160
158
  "multiformats": "^9.4.5",
161
159
  "p-wait-for": "^4.1.0",
160
+ "protons": "^3.0.2",
162
161
  "sinon": "^13.0.1",
163
162
  "wherearewe": "^1.0.0"
164
163
  }
package/src/index.ts CHANGED
@@ -51,7 +51,7 @@ export class FloodSub extends PubSubBaseProtocol implements PubSub {
51
51
  * Encode an RPC object into a Uint8Array
52
52
  */
53
53
  encodeRpc (rpc: PubSubRPC): Uint8Array {
54
- return RPC.encode(rpc).finish()
54
+ return RPC.encode(rpc)
55
55
  }
56
56
 
57
57
  decodeMessage (bytes: Uint8Array): PubSubRPCMessage {
@@ -59,7 +59,7 @@ export class FloodSub extends PubSubBaseProtocol implements PubSub {
59
59
  }
60
60
 
61
61
  encodeMessage (rpc: PubSubRPCMessage): Uint8Array {
62
- return RPC.Message.encode(rpc).finish()
62
+ return RPC.Message.encode(rpc)
63
63
  }
64
64
 
65
65
  /**
@@ -0,0 +1,213 @@
1
+ /* eslint-disable import/export */
2
+ /* eslint-disable @typescript-eslint/no-namespace */
3
+
4
+ import { encodeMessage, decodeMessage, message, bool, string, bytes, uint64 } from 'protons-runtime'
5
+
6
+ export interface RPC {
7
+ subscriptions: RPC.SubOpts[]
8
+ messages: RPC.Message[]
9
+ control?: ControlMessage
10
+ }
11
+
12
+ export namespace RPC {
13
+ export interface SubOpts {
14
+ subscribe?: boolean
15
+ topic?: string
16
+ }
17
+
18
+ export namespace SubOpts {
19
+ export const codec = () => {
20
+ return message<SubOpts>({
21
+ 1: { name: 'subscribe', codec: bool, optional: true },
22
+ 2: { name: 'topic', codec: string, optional: true }
23
+ })
24
+ }
25
+
26
+ export const encode = (obj: SubOpts): Uint8Array => {
27
+ return encodeMessage(obj, SubOpts.codec())
28
+ }
29
+
30
+ export const decode = (buf: Uint8Array): SubOpts => {
31
+ return decodeMessage(buf, SubOpts.codec())
32
+ }
33
+ }
34
+ export interface Message {
35
+ from?: Uint8Array
36
+ data?: Uint8Array
37
+ sequenceNumber?: Uint8Array
38
+ topic?: string
39
+ signature?: Uint8Array
40
+ key?: Uint8Array
41
+ }
42
+
43
+ export namespace Message {
44
+ export const codec = () => {
45
+ return message<Message>({
46
+ 1: { name: 'from', codec: bytes, optional: true },
47
+ 2: { name: 'data', codec: bytes, optional: true },
48
+ 3: { name: 'sequenceNumber', codec: bytes, optional: true },
49
+ 4: { name: 'topic', codec: string, optional: true },
50
+ 5: { name: 'signature', codec: bytes, optional: true },
51
+ 6: { name: 'key', codec: bytes, optional: true }
52
+ })
53
+ }
54
+
55
+ export const encode = (obj: Message): Uint8Array => {
56
+ return encodeMessage(obj, Message.codec())
57
+ }
58
+
59
+ export const decode = (buf: Uint8Array): Message => {
60
+ return decodeMessage(buf, Message.codec())
61
+ }
62
+ }
63
+
64
+ export const codec = () => {
65
+ return message<RPC>({
66
+ 1: { name: 'subscriptions', codec: RPC.SubOpts.codec(), repeats: true },
67
+ 2: { name: 'messages', codec: RPC.Message.codec(), repeats: true },
68
+ 3: { name: 'control', codec: ControlMessage.codec(), optional: true }
69
+ })
70
+ }
71
+
72
+ export const encode = (obj: RPC): Uint8Array => {
73
+ return encodeMessage(obj, RPC.codec())
74
+ }
75
+
76
+ export const decode = (buf: Uint8Array): RPC => {
77
+ return decodeMessage(buf, RPC.codec())
78
+ }
79
+ }
80
+
81
+ export interface ControlMessage {
82
+ ihave: ControlIHave[]
83
+ iwant: ControlIWant[]
84
+ graft: ControlGraft[]
85
+ prune: ControlPrune[]
86
+ }
87
+
88
+ export namespace ControlMessage {
89
+ export const codec = () => {
90
+ return message<ControlMessage>({
91
+ 1: { name: 'ihave', codec: ControlIHave.codec(), repeats: true },
92
+ 2: { name: 'iwant', codec: ControlIWant.codec(), repeats: true },
93
+ 3: { name: 'graft', codec: ControlGraft.codec(), repeats: true },
94
+ 4: { name: 'prune', codec: ControlPrune.codec(), repeats: true }
95
+ })
96
+ }
97
+
98
+ export const encode = (obj: ControlMessage): Uint8Array => {
99
+ return encodeMessage(obj, ControlMessage.codec())
100
+ }
101
+
102
+ export const decode = (buf: Uint8Array): ControlMessage => {
103
+ return decodeMessage(buf, ControlMessage.codec())
104
+ }
105
+ }
106
+
107
+ export interface ControlIHave {
108
+ topic?: string
109
+ messageIDs: Uint8Array[]
110
+ }
111
+
112
+ export namespace ControlIHave {
113
+ export const codec = () => {
114
+ return message<ControlIHave>({
115
+ 1: { name: 'topic', codec: string, optional: true },
116
+ 2: { name: 'messageIDs', codec: bytes, repeats: true }
117
+ })
118
+ }
119
+
120
+ export const encode = (obj: ControlIHave): Uint8Array => {
121
+ return encodeMessage(obj, ControlIHave.codec())
122
+ }
123
+
124
+ export const decode = (buf: Uint8Array): ControlIHave => {
125
+ return decodeMessage(buf, ControlIHave.codec())
126
+ }
127
+ }
128
+
129
+ export interface ControlIWant {
130
+ messageIDs: Uint8Array[]
131
+ }
132
+
133
+ export namespace ControlIWant {
134
+ export const codec = () => {
135
+ return message<ControlIWant>({
136
+ 1: { name: 'messageIDs', codec: bytes, repeats: true }
137
+ })
138
+ }
139
+
140
+ export const encode = (obj: ControlIWant): Uint8Array => {
141
+ return encodeMessage(obj, ControlIWant.codec())
142
+ }
143
+
144
+ export const decode = (buf: Uint8Array): ControlIWant => {
145
+ return decodeMessage(buf, ControlIWant.codec())
146
+ }
147
+ }
148
+
149
+ export interface ControlGraft {
150
+ topic?: string
151
+ }
152
+
153
+ export namespace ControlGraft {
154
+ export const codec = () => {
155
+ return message<ControlGraft>({
156
+ 1: { name: 'topic', codec: string, optional: true }
157
+ })
158
+ }
159
+
160
+ export const encode = (obj: ControlGraft): Uint8Array => {
161
+ return encodeMessage(obj, ControlGraft.codec())
162
+ }
163
+
164
+ export const decode = (buf: Uint8Array): ControlGraft => {
165
+ return decodeMessage(buf, ControlGraft.codec())
166
+ }
167
+ }
168
+
169
+ export interface ControlPrune {
170
+ topic?: string
171
+ peers: PeerInfo[]
172
+ backoff?: bigint
173
+ }
174
+
175
+ export namespace ControlPrune {
176
+ export const codec = () => {
177
+ return message<ControlPrune>({
178
+ 1: { name: 'topic', codec: string, optional: true },
179
+ 2: { name: 'peers', codec: PeerInfo.codec(), repeats: true },
180
+ 3: { name: 'backoff', codec: uint64, optional: true }
181
+ })
182
+ }
183
+
184
+ export const encode = (obj: ControlPrune): Uint8Array => {
185
+ return encodeMessage(obj, ControlPrune.codec())
186
+ }
187
+
188
+ export const decode = (buf: Uint8Array): ControlPrune => {
189
+ return decodeMessage(buf, ControlPrune.codec())
190
+ }
191
+ }
192
+
193
+ export interface PeerInfo {
194
+ peerID?: Uint8Array
195
+ signedPeerRecord?: Uint8Array
196
+ }
197
+
198
+ export namespace PeerInfo {
199
+ export const codec = () => {
200
+ return message<PeerInfo>({
201
+ 1: { name: 'peerID', codec: bytes, optional: true },
202
+ 2: { name: 'signedPeerRecord', codec: bytes, optional: true }
203
+ })
204
+ }
205
+
206
+ export const encode = (obj: PeerInfo): Uint8Array => {
207
+ return encodeMessage(obj, PeerInfo.codec())
208
+ }
209
+
210
+ export const decode = (buf: Uint8Array): PeerInfo => {
211
+ return decodeMessage(buf, PeerInfo.codec())
212
+ }
213
+ }