@libp2p/websockets 0.16.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.
- package/dist/src/index.d.ts +18 -16
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +14 -15
- package/dist/src/index.js.map +1 -1
- package/dist/src/listener.d.ts +3 -3
- package/dist/src/listener.d.ts.map +1 -1
- package/dist/src/listener.js +7 -8
- package/dist/src/listener.js.map +1 -1
- package/package.json +28 -10
- package/src/index.ts +28 -24
- package/src/listener.ts +11 -12
package/dist/src/index.d.ts
CHANGED
|
@@ -1,27 +1,29 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
1
2
|
import { WebSocketOptions } from 'it-ws/client';
|
|
2
|
-
import
|
|
3
|
+
import { Transport, MultiaddrFilter, symbol, CreateListenerOptions, DialOptions } from '@libp2p/interfaces/transport';
|
|
3
4
|
import type { AbortOptions } from '@libp2p/interfaces';
|
|
4
|
-
import type { WebSocketListenerOptions } from './listener.js';
|
|
5
5
|
import type { Multiaddr } from '@multiformats/multiaddr';
|
|
6
|
-
import type { DuplexWebSocket } from 'it-ws/
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
6
|
+
import type { DuplexWebSocket } from 'it-ws/duplex';
|
|
7
|
+
import type { ClientOptions } from 'ws';
|
|
8
|
+
import type { Server } from 'http';
|
|
9
|
+
export interface WebSocketsInit extends AbortOptions, WebSocketOptions {
|
|
10
|
+
filter?: MultiaddrFilter;
|
|
11
|
+
websocket?: ClientOptions;
|
|
12
|
+
server?: Server;
|
|
13
|
+
}
|
|
14
|
+
export declare class WebSockets implements Transport {
|
|
15
|
+
private readonly init?;
|
|
16
|
+
constructor(init?: WebSocketsInit);
|
|
17
|
+
get [Symbol.toStringTag](): string;
|
|
18
|
+
get [symbol](): true;
|
|
19
|
+
dial(ma: Multiaddr, options: DialOptions): Promise<import("@libp2p/interfaces/dist/src/connection").Connection>;
|
|
20
|
+
_connect(ma: Multiaddr, options: AbortOptions): Promise<DuplexWebSocket>;
|
|
19
21
|
/**
|
|
20
22
|
* Creates a Websockets listener. The provided `handler` function will be called
|
|
21
23
|
* anytime a new incoming Connection has been successfully upgraded via
|
|
22
24
|
* `upgrader.upgradeInbound`
|
|
23
25
|
*/
|
|
24
|
-
createListener(options
|
|
26
|
+
createListener(options: CreateListenerOptions): import("@libp2p/interfaces/transport").Listener;
|
|
25
27
|
/**
|
|
26
28
|
* Takes a list of `Multiaddr`s and returns only valid Websockets addresses.
|
|
27
29
|
* By default, in a browser environment only DNS+WSS multiaddr is accepted,
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,gBAAgB,EAAE,MAAM,cAAc,CAAA;AASxD,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA,OAAO,EAAW,gBAAgB,EAAE,MAAM,cAAc,CAAA;AASxD,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAA;AACrH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AACnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,IAAI,CAAA;AACvC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAA;AAIlC,MAAM,WAAW,cAAe,SAAQ,YAAY,EAAE,gBAAgB;IACpE,MAAM,CAAC,EAAE,eAAe,CAAA;IACxB,SAAS,CAAC,EAAE,aAAa,CAAA;IACzB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,qBAAa,UAAW,YAAW,SAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAgB;gBAEzB,IAAI,CAAC,EAAE,cAAc;IAIlC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,WAEvB;IAED,IAAI,CAAC,MAAM,CAAC,IAAK,IAAI,CAEpB;IAEK,IAAI,CAAE,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW;IAazC,QAAQ,CAAE,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,eAAe,CAAC;IA8D/E;;;;OAIG;IACH,cAAc,CAAE,OAAO,EAAE,qBAAqB;IAI9C;;;;OAIG;IACH,MAAM,CAAE,UAAU,EAAE,SAAS,EAAE;CAchC"}
|
package/dist/src/index.js
CHANGED
|
@@ -7,18 +7,17 @@ import env from 'wherearewe';
|
|
|
7
7
|
import { createListener } from './listener.js';
|
|
8
8
|
import { socketToMaConn } from './socket-to-conn.js';
|
|
9
9
|
import * as filters from './filters.js';
|
|
10
|
+
import { symbol } from '@libp2p/interfaces/transport';
|
|
10
11
|
const log = logger('libp2p:websockets');
|
|
11
|
-
/**
|
|
12
|
-
* @class WebSockets
|
|
13
|
-
*/
|
|
14
12
|
export class WebSockets {
|
|
15
|
-
constructor(
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
13
|
+
constructor(init) {
|
|
14
|
+
this.init = init;
|
|
15
|
+
}
|
|
16
|
+
get [Symbol.toStringTag]() {
|
|
17
|
+
return this.constructor.name;
|
|
18
|
+
}
|
|
19
|
+
get [symbol]() {
|
|
20
|
+
return true;
|
|
22
21
|
}
|
|
23
22
|
async dial(ma, options) {
|
|
24
23
|
log('dialing %s', ma);
|
|
@@ -26,7 +25,7 @@ export class WebSockets {
|
|
|
26
25
|
const socket = await this._connect(ma, options);
|
|
27
26
|
const maConn = socketToMaConn(socket, ma);
|
|
28
27
|
log('new outbound connection %s', maConn.remoteAddr);
|
|
29
|
-
const conn = await
|
|
28
|
+
const conn = await options.upgrader.upgradeOutbound(maConn);
|
|
30
29
|
log('outbound connection %s upgraded', maConn.remoteAddr);
|
|
31
30
|
return conn;
|
|
32
31
|
}
|
|
@@ -41,7 +40,7 @@ export class WebSockets {
|
|
|
41
40
|
log.error('connection error:', err);
|
|
42
41
|
errorPromise.reject(err);
|
|
43
42
|
};
|
|
44
|
-
const rawSocket = connect(toUri(ma),
|
|
43
|
+
const rawSocket = connect(toUri(ma), this.init);
|
|
45
44
|
if (rawSocket.socket.on != null) {
|
|
46
45
|
rawSocket.socket.on('error', errfn);
|
|
47
46
|
}
|
|
@@ -88,7 +87,7 @@ export class WebSockets {
|
|
|
88
87
|
* `upgrader.upgradeInbound`
|
|
89
88
|
*/
|
|
90
89
|
createListener(options) {
|
|
91
|
-
return createListener(this.
|
|
90
|
+
return createListener({ ...this.init, ...options });
|
|
92
91
|
}
|
|
93
92
|
/**
|
|
94
93
|
* Takes a list of `Multiaddr`s and returns only valid Websockets addresses.
|
|
@@ -97,8 +96,8 @@ export class WebSockets {
|
|
|
97
96
|
*/
|
|
98
97
|
filter(multiaddrs) {
|
|
99
98
|
multiaddrs = Array.isArray(multiaddrs) ? multiaddrs : [multiaddrs];
|
|
100
|
-
if (this.
|
|
101
|
-
return this.
|
|
99
|
+
if (this.init?.filter != null) {
|
|
100
|
+
return this.init?.filter(multiaddrs);
|
|
102
101
|
}
|
|
103
102
|
// Browser
|
|
104
103
|
if (env.isBrowser || env.isWebWorker) {
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAoB,MAAM,cAAc,CAAA;AACxD,OAAO,EAAE,cAAc,IAAI,KAAK,EAAE,MAAM,gCAAgC,CAAA;AACxE,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AACtD,OAAO,MAAM,MAAM,SAAS,CAAA;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AACvC,OAAO,GAAG,MAAM,YAAY,CAAA;AAC5B,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/src/listener.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
|
-
import type {
|
|
2
|
+
import type { Listener, CreateListenerOptions } from '@libp2p/interfaces/transport';
|
|
3
3
|
import type { Server } from 'http';
|
|
4
|
-
export interface
|
|
4
|
+
export interface WebSocketListenerInit extends CreateListenerOptions {
|
|
5
5
|
server?: Server;
|
|
6
6
|
}
|
|
7
|
-
export declare function createListener(
|
|
7
|
+
export declare function createListener(init: WebSocketListenerInit): Listener;
|
|
8
8
|
//# sourceMappingURL=listener.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"listener.d.ts","sourceRoot":"","sources":["../../src/listener.ts"],"names":[],"mappings":";AAMA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"listener.d.ts","sourceRoot":"","sources":["../../src/listener.ts"],"names":[],"mappings":";AAMA,OAAO,KAAK,EAAE,QAAQ,EAAkB,qBAAqB,EAAE,MAAM,8BAA8B,CAAA;AACnG,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAA;AAiJlC,MAAM,WAAW,qBAAsB,SAAQ,qBAAqB;IAClE,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,wBAAgB,cAAc,CAAE,IAAI,EAAE,qBAAqB,GAAG,QAAQ,CAErE"}
|
package/dist/src/listener.js
CHANGED
|
@@ -7,13 +7,13 @@ import { ipPortToMultiaddr as toMultiaddr } from '@libp2p/utils/ip-port-to-multi
|
|
|
7
7
|
import { EventEmitter, CustomEvent } from '@libp2p/interfaces';
|
|
8
8
|
const log = logger('libp2p:websockets:listener');
|
|
9
9
|
class WebSocketListener extends EventEmitter {
|
|
10
|
-
constructor(
|
|
10
|
+
constructor(init) {
|
|
11
11
|
super();
|
|
12
12
|
// Keep track of open connections to destroy when the listener is closed
|
|
13
13
|
this.connections = new Set();
|
|
14
14
|
const self = this; // eslint-disable-line @typescript-eslint/no-this-alias
|
|
15
15
|
this.server = createServer({
|
|
16
|
-
...
|
|
16
|
+
...init,
|
|
17
17
|
onConnection: (stream) => {
|
|
18
18
|
const maConn = socketToMaConn(stream, toMultiaddr(stream.remoteAddress ?? '', stream.remotePort ?? 0));
|
|
19
19
|
log('new inbound connection %s', maConn.remoteAddr);
|
|
@@ -22,11 +22,11 @@ class WebSocketListener extends EventEmitter {
|
|
|
22
22
|
self.connections.delete(stream);
|
|
23
23
|
});
|
|
24
24
|
try {
|
|
25
|
-
void upgrader.upgradeInbound(maConn)
|
|
25
|
+
void init.upgrader.upgradeInbound(maConn)
|
|
26
26
|
.then((conn) => {
|
|
27
27
|
log('inbound connection %s upgraded', maConn.remoteAddr);
|
|
28
|
-
if (
|
|
29
|
-
|
|
28
|
+
if (init?.handler != null) {
|
|
29
|
+
init?.handler(conn);
|
|
30
30
|
}
|
|
31
31
|
self.dispatchEvent(new CustomEvent('connection', {
|
|
32
32
|
detail: conn
|
|
@@ -114,8 +114,7 @@ class WebSocketListener extends EventEmitter {
|
|
|
114
114
|
return multiaddrs;
|
|
115
115
|
}
|
|
116
116
|
}
|
|
117
|
-
export function createListener(
|
|
118
|
-
|
|
119
|
-
return new WebSocketListener(upgrader, options);
|
|
117
|
+
export function createListener(init) {
|
|
118
|
+
return new WebSocketListener(init);
|
|
120
119
|
}
|
|
121
120
|
//# sourceMappingURL=listener.js.map
|
package/dist/src/listener.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"listener.js","sourceRoot":"","sources":["../../src/listener.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAA;AACnB,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,EAAE,iBAAiB,IAAI,WAAW,EAAE,MAAM,oCAAoC,CAAA;AAKrF,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"listener.js","sourceRoot":"","sources":["../../src/listener.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@libp2p/websockets",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "1.0.3",
|
|
4
4
|
"description": "JavaScript implementation of the WebSockets module that libp2p uses and that implements the interface-transport spec",
|
|
5
5
|
"license": "Apache-2.0 OR MIT",
|
|
6
6
|
"homepage": "https://github.com/libp2p/js-libp2p-websockets#readme",
|
|
@@ -20,6 +20,22 @@
|
|
|
20
20
|
},
|
|
21
21
|
"type": "module",
|
|
22
22
|
"types": "./dist/src/index.d.ts",
|
|
23
|
+
"typesVersions": {
|
|
24
|
+
"*": {
|
|
25
|
+
"*": [
|
|
26
|
+
"*",
|
|
27
|
+
"dist/*",
|
|
28
|
+
"dist/src/*",
|
|
29
|
+
"dist/src/*/index"
|
|
30
|
+
],
|
|
31
|
+
"src/*": [
|
|
32
|
+
"*",
|
|
33
|
+
"dist/*",
|
|
34
|
+
"dist/src/*",
|
|
35
|
+
"dist/src/*/index"
|
|
36
|
+
]
|
|
37
|
+
}
|
|
38
|
+
},
|
|
23
39
|
"files": [
|
|
24
40
|
"src",
|
|
25
41
|
"dist/src",
|
|
@@ -29,6 +45,9 @@
|
|
|
29
45
|
"exports": {
|
|
30
46
|
".": {
|
|
31
47
|
"import": "./dist/src/index.js"
|
|
48
|
+
},
|
|
49
|
+
"./filters": {
|
|
50
|
+
"import": "./dist/src/filters.js"
|
|
32
51
|
}
|
|
33
52
|
},
|
|
34
53
|
"eslintConfig": {
|
|
@@ -133,10 +152,10 @@
|
|
|
133
152
|
"release": "semantic-release"
|
|
134
153
|
},
|
|
135
154
|
"dependencies": {
|
|
136
|
-
"@libp2p/logger": "^1.
|
|
137
|
-
"@libp2p/utils": "^1.0.
|
|
138
|
-
"@multiformats/mafmt": "^11.0.
|
|
139
|
-
"@multiformats/multiaddr": "^10.
|
|
155
|
+
"@libp2p/logger": "^1.1.2",
|
|
156
|
+
"@libp2p/utils": "^1.0.9",
|
|
157
|
+
"@multiformats/mafmt": "^11.0.2",
|
|
158
|
+
"@multiformats/multiaddr": "^10.1.5",
|
|
140
159
|
"@multiformats/multiaddr-to-uri": "^9.0.0",
|
|
141
160
|
"abortable-iterator": "^4.0.2",
|
|
142
161
|
"err-code": "^3.0.1",
|
|
@@ -146,19 +165,18 @@
|
|
|
146
165
|
"wherearewe": "^1.0.0"
|
|
147
166
|
},
|
|
148
167
|
"devDependencies": {
|
|
149
|
-
"@libp2p/interface-compliance-tests": "^1.1.
|
|
150
|
-
"@libp2p/interfaces": "^1.3.
|
|
168
|
+
"@libp2p/interface-compliance-tests": "^1.1.17",
|
|
169
|
+
"@libp2p/interfaces": "^1.3.14",
|
|
151
170
|
"@types/ws": "^8.2.2",
|
|
152
171
|
"aegir": "^36.1.3",
|
|
153
172
|
"is-loopback-addr": "^2.0.1",
|
|
154
173
|
"it-all": "^1.0.6",
|
|
155
174
|
"it-drain": "^1.0.5",
|
|
156
175
|
"it-goodbye": "^4.0.1",
|
|
157
|
-
"it-pipe": "^2.0.
|
|
176
|
+
"it-pipe": "^2.0.3",
|
|
158
177
|
"it-take": "^1.0.2",
|
|
159
178
|
"p-wait-for": "^4.1.0",
|
|
160
|
-
"uint8arrays": "^3.0.0"
|
|
161
|
-
"util": "^0.12.3"
|
|
179
|
+
"uint8arrays": "^3.0.0"
|
|
162
180
|
},
|
|
163
181
|
"browser": {
|
|
164
182
|
"./dist/src/listener.js": "./dist/src/listener.browser.js"
|
package/src/index.ts
CHANGED
|
@@ -7,33 +7,37 @@ import env from 'wherearewe'
|
|
|
7
7
|
import { createListener } from './listener.js'
|
|
8
8
|
import { socketToMaConn } from './socket-to-conn.js'
|
|
9
9
|
import * as filters from './filters.js'
|
|
10
|
-
import
|
|
10
|
+
import { Transport, MultiaddrFilter, symbol, CreateListenerOptions, DialOptions } from '@libp2p/interfaces/transport'
|
|
11
11
|
import type { AbortOptions } from '@libp2p/interfaces'
|
|
12
|
-
import type { WebSocketListenerOptions } from './listener.js'
|
|
13
12
|
import type { Multiaddr } from '@multiformats/multiaddr'
|
|
14
|
-
import type { DuplexWebSocket } from 'it-ws/
|
|
13
|
+
import type { DuplexWebSocket } from 'it-ws/duplex'
|
|
14
|
+
import type { ClientOptions } from 'ws'
|
|
15
|
+
import type { Server } from 'http'
|
|
15
16
|
|
|
16
17
|
const log = logger('libp2p:websockets')
|
|
17
18
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
private readonly _filter?: MultiaddrFilter
|
|
19
|
+
export interface WebSocketsInit extends AbortOptions, WebSocketOptions {
|
|
20
|
+
filter?: MultiaddrFilter
|
|
21
|
+
websocket?: ClientOptions
|
|
22
|
+
server?: Server
|
|
23
|
+
}
|
|
24
24
|
|
|
25
|
-
|
|
26
|
-
|
|
25
|
+
export class WebSockets implements Transport {
|
|
26
|
+
private readonly init?: WebSocketsInit
|
|
27
27
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
28
|
+
constructor (init?: WebSocketsInit) {
|
|
29
|
+
this.init = init
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
get [Symbol.toStringTag] () {
|
|
33
|
+
return this.constructor.name
|
|
34
|
+
}
|
|
31
35
|
|
|
32
|
-
|
|
33
|
-
|
|
36
|
+
get [symbol] (): true {
|
|
37
|
+
return true
|
|
34
38
|
}
|
|
35
39
|
|
|
36
|
-
async dial (ma: Multiaddr, options
|
|
40
|
+
async dial (ma: Multiaddr, options: DialOptions) {
|
|
37
41
|
log('dialing %s', ma)
|
|
38
42
|
options = options ?? {}
|
|
39
43
|
|
|
@@ -41,12 +45,12 @@ export class WebSockets implements Transport<AbortOptions & WebSocketOptions, We
|
|
|
41
45
|
const maConn = socketToMaConn(socket, ma)
|
|
42
46
|
log('new outbound connection %s', maConn.remoteAddr)
|
|
43
47
|
|
|
44
|
-
const conn = await
|
|
48
|
+
const conn = await options.upgrader.upgradeOutbound(maConn)
|
|
45
49
|
log('outbound connection %s upgraded', maConn.remoteAddr)
|
|
46
50
|
return conn
|
|
47
51
|
}
|
|
48
52
|
|
|
49
|
-
async _connect (ma: Multiaddr, options: AbortOptions
|
|
53
|
+
async _connect (ma: Multiaddr, options: AbortOptions): Promise<DuplexWebSocket> {
|
|
50
54
|
if (options?.signal?.aborted === true) {
|
|
51
55
|
throw new AbortError()
|
|
52
56
|
}
|
|
@@ -60,7 +64,7 @@ export class WebSockets implements Transport<AbortOptions & WebSocketOptions, We
|
|
|
60
64
|
errorPromise.reject(err)
|
|
61
65
|
}
|
|
62
66
|
|
|
63
|
-
const rawSocket = connect(toUri(ma),
|
|
67
|
+
const rawSocket = connect(toUri(ma), this.init)
|
|
64
68
|
|
|
65
69
|
if (rawSocket.socket.on != null) {
|
|
66
70
|
rawSocket.socket.on('error', errfn)
|
|
@@ -113,8 +117,8 @@ export class WebSockets implements Transport<AbortOptions & WebSocketOptions, We
|
|
|
113
117
|
* anytime a new incoming Connection has been successfully upgraded via
|
|
114
118
|
* `upgrader.upgradeInbound`
|
|
115
119
|
*/
|
|
116
|
-
createListener (options
|
|
117
|
-
return createListener(this.
|
|
120
|
+
createListener (options: CreateListenerOptions) {
|
|
121
|
+
return createListener({ ...this.init, ...options })
|
|
118
122
|
}
|
|
119
123
|
|
|
120
124
|
/**
|
|
@@ -125,8 +129,8 @@ export class WebSockets implements Transport<AbortOptions & WebSocketOptions, We
|
|
|
125
129
|
filter (multiaddrs: Multiaddr[]) {
|
|
126
130
|
multiaddrs = Array.isArray(multiaddrs) ? multiaddrs : [multiaddrs]
|
|
127
131
|
|
|
128
|
-
if (this.
|
|
129
|
-
return this.
|
|
132
|
+
if (this.init?.filter != null) {
|
|
133
|
+
return this.init?.filter(multiaddrs)
|
|
130
134
|
}
|
|
131
135
|
|
|
132
136
|
// Browser
|
package/src/listener.ts
CHANGED
|
@@ -4,11 +4,12 @@ import { createServer } from 'it-ws/server'
|
|
|
4
4
|
import { logger } from '@libp2p/logger'
|
|
5
5
|
import { socketToMaConn } from './socket-to-conn.js'
|
|
6
6
|
import { ipPortToMultiaddr as toMultiaddr } from '@libp2p/utils/ip-port-to-multiaddr'
|
|
7
|
-
import type {
|
|
7
|
+
import type { Listener, ListenerEvents, CreateListenerOptions } from '@libp2p/interfaces/transport'
|
|
8
8
|
import type { Server } from 'http'
|
|
9
9
|
import type { WebSocketServer } from 'it-ws/server'
|
|
10
10
|
import type { DuplexWebSocket } from 'it-ws/duplex'
|
|
11
11
|
import { EventEmitter, CustomEvent } from '@libp2p/interfaces'
|
|
12
|
+
import type { Connection } from '@libp2p/interfaces/connection'
|
|
12
13
|
|
|
13
14
|
const log = logger('libp2p:websockets:listener')
|
|
14
15
|
|
|
@@ -17,7 +18,7 @@ class WebSocketListener extends EventEmitter<ListenerEvents> implements Listener
|
|
|
17
18
|
private listeningMultiaddr?: Multiaddr
|
|
18
19
|
private readonly server: WebSocketServer
|
|
19
20
|
|
|
20
|
-
constructor (
|
|
21
|
+
constructor (init: WebSocketListenerInit) {
|
|
21
22
|
super()
|
|
22
23
|
|
|
23
24
|
// Keep track of open connections to destroy when the listener is closed
|
|
@@ -26,7 +27,7 @@ class WebSocketListener extends EventEmitter<ListenerEvents> implements Listener
|
|
|
26
27
|
const self = this // eslint-disable-line @typescript-eslint/no-this-alias
|
|
27
28
|
|
|
28
29
|
this.server = createServer({
|
|
29
|
-
...
|
|
30
|
+
...init,
|
|
30
31
|
onConnection: (stream: DuplexWebSocket) => {
|
|
31
32
|
const maConn = socketToMaConn(stream, toMultiaddr(stream.remoteAddress ?? '', stream.remotePort ?? 0))
|
|
32
33
|
log('new inbound connection %s', maConn.remoteAddr)
|
|
@@ -38,15 +39,15 @@ class WebSocketListener extends EventEmitter<ListenerEvents> implements Listener
|
|
|
38
39
|
})
|
|
39
40
|
|
|
40
41
|
try {
|
|
41
|
-
void upgrader.upgradeInbound(maConn)
|
|
42
|
+
void init.upgrader.upgradeInbound(maConn)
|
|
42
43
|
.then((conn) => {
|
|
43
44
|
log('inbound connection %s upgraded', maConn.remoteAddr)
|
|
44
45
|
|
|
45
|
-
if (
|
|
46
|
-
|
|
46
|
+
if (init?.handler != null) {
|
|
47
|
+
init?.handler(conn)
|
|
47
48
|
}
|
|
48
49
|
|
|
49
|
-
self.dispatchEvent(new CustomEvent('connection', {
|
|
50
|
+
self.dispatchEvent(new CustomEvent<Connection>('connection', {
|
|
50
51
|
detail: conn
|
|
51
52
|
}))
|
|
52
53
|
})
|
|
@@ -149,12 +150,10 @@ class WebSocketListener extends EventEmitter<ListenerEvents> implements Listener
|
|
|
149
150
|
}
|
|
150
151
|
}
|
|
151
152
|
|
|
152
|
-
export interface
|
|
153
|
+
export interface WebSocketListenerInit extends CreateListenerOptions {
|
|
153
154
|
server?: Server
|
|
154
155
|
}
|
|
155
156
|
|
|
156
|
-
export function createListener (
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
return new WebSocketListener(upgrader, options)
|
|
157
|
+
export function createListener (init: WebSocketListenerInit): Listener {
|
|
158
|
+
return new WebSocketListener(init)
|
|
160
159
|
}
|