@libp2p/websockets 1.0.2 → 1.0.5
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 -17
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +14 -18
- 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 +20 -21
- package/src/index.ts +27 -25
- package/src/listener.ts +11 -12
package/dist/src/index.d.ts
CHANGED
|
@@ -1,28 +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
|
-
[Symbol.toStringTag]: string;
|
|
18
|
-
|
|
19
|
-
|
|
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>;
|
|
20
21
|
/**
|
|
21
22
|
* Creates a Websockets listener. The provided `handler` function will be called
|
|
22
23
|
* anytime a new incoming Connection has been successfully upgraded via
|
|
23
24
|
* `upgrader.upgradeInbound`
|
|
24
25
|
*/
|
|
25
|
-
createListener(options
|
|
26
|
+
createListener(options: CreateListenerOptions): import("@libp2p/interfaces/transport").Listener;
|
|
26
27
|
/**
|
|
27
28
|
* Takes a list of `Multiaddr`s and returns only valid Websockets addresses.
|
|
28
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
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
var _a;
|
|
2
1
|
import { connect } from 'it-ws/client';
|
|
3
2
|
import { multiaddrToUri as toUri } from '@multiformats/multiaddr-to-uri';
|
|
4
3
|
import { AbortError } from '@libp2p/interfaces/errors';
|
|
@@ -8,19 +7,17 @@ import env from 'wherearewe';
|
|
|
8
7
|
import { createListener } from './listener.js';
|
|
9
8
|
import { socketToMaConn } from './socket-to-conn.js';
|
|
10
9
|
import * as filters from './filters.js';
|
|
10
|
+
import { symbol } from '@libp2p/interfaces/transport';
|
|
11
11
|
const log = logger('libp2p:websockets');
|
|
12
|
-
/**
|
|
13
|
-
* @class WebSockets
|
|
14
|
-
*/
|
|
15
12
|
export class WebSockets {
|
|
16
|
-
constructor(
|
|
17
|
-
this
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
13
|
+
constructor(init) {
|
|
14
|
+
this.init = init;
|
|
15
|
+
}
|
|
16
|
+
get [Symbol.toStringTag]() {
|
|
17
|
+
return this.constructor.name;
|
|
18
|
+
}
|
|
19
|
+
get [symbol]() {
|
|
20
|
+
return true;
|
|
24
21
|
}
|
|
25
22
|
async dial(ma, options) {
|
|
26
23
|
log('dialing %s', ma);
|
|
@@ -28,7 +25,7 @@ export class WebSockets {
|
|
|
28
25
|
const socket = await this._connect(ma, options);
|
|
29
26
|
const maConn = socketToMaConn(socket, ma);
|
|
30
27
|
log('new outbound connection %s', maConn.remoteAddr);
|
|
31
|
-
const conn = await
|
|
28
|
+
const conn = await options.upgrader.upgradeOutbound(maConn);
|
|
32
29
|
log('outbound connection %s upgraded', maConn.remoteAddr);
|
|
33
30
|
return conn;
|
|
34
31
|
}
|
|
@@ -43,7 +40,7 @@ export class WebSockets {
|
|
|
43
40
|
log.error('connection error:', err);
|
|
44
41
|
errorPromise.reject(err);
|
|
45
42
|
};
|
|
46
|
-
const rawSocket = connect(toUri(ma),
|
|
43
|
+
const rawSocket = connect(toUri(ma), this.init);
|
|
47
44
|
if (rawSocket.socket.on != null) {
|
|
48
45
|
rawSocket.socket.on('error', errfn);
|
|
49
46
|
}
|
|
@@ -90,7 +87,7 @@ export class WebSockets {
|
|
|
90
87
|
* `upgrader.upgradeInbound`
|
|
91
88
|
*/
|
|
92
89
|
createListener(options) {
|
|
93
|
-
return createListener(this.
|
|
90
|
+
return createListener({ ...this.init, ...options });
|
|
94
91
|
}
|
|
95
92
|
/**
|
|
96
93
|
* Takes a list of `Multiaddr`s and returns only valid Websockets addresses.
|
|
@@ -99,8 +96,8 @@ export class WebSockets {
|
|
|
99
96
|
*/
|
|
100
97
|
filter(multiaddrs) {
|
|
101
98
|
multiaddrs = Array.isArray(multiaddrs) ? multiaddrs : [multiaddrs];
|
|
102
|
-
if (this.
|
|
103
|
-
return this.
|
|
99
|
+
if (this.init?.filter != null) {
|
|
100
|
+
return this.init?.filter(multiaddrs);
|
|
104
101
|
}
|
|
105
102
|
// Browser
|
|
106
103
|
if (env.isBrowser || env.isWebWorker) {
|
|
@@ -109,5 +106,4 @@ export class WebSockets {
|
|
|
109
106
|
return filters.all(multiaddrs);
|
|
110
107
|
}
|
|
111
108
|
}
|
|
112
|
-
_a = Symbol.toStringTag;
|
|
113
109
|
//# sourceMappingURL=index.js.map
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"
|
|
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": "1.0.
|
|
3
|
+
"version": "1.0.5",
|
|
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",
|
|
@@ -138,24 +138,24 @@
|
|
|
138
138
|
]
|
|
139
139
|
},
|
|
140
140
|
"scripts": {
|
|
141
|
+
"clean": "aegir clean",
|
|
141
142
|
"lint": "aegir lint",
|
|
142
|
-
"dep-check": "aegir dep-check
|
|
143
|
-
"build": "
|
|
144
|
-
"pretest": "npm run build",
|
|
143
|
+
"dep-check": "aegir dep-check",
|
|
144
|
+
"build": "aegir build",
|
|
145
145
|
"test": "aegir test",
|
|
146
|
-
"test:chrome": "
|
|
147
|
-
"test:chrome-webworker": "
|
|
148
|
-
"test:firefox": "
|
|
149
|
-
"test:firefox-webworker": "
|
|
150
|
-
"test:node": "
|
|
151
|
-
"test:electron-main": "
|
|
152
|
-
"release": "
|
|
146
|
+
"test:chrome": "aegir test -t browser -f ./dist/test/browser.js --cov",
|
|
147
|
+
"test:chrome-webworker": "aegir test -t webworker -f ./dist/test/browser.js",
|
|
148
|
+
"test:firefox": "aegir test -t browser -f ./dist/test/browser.js -- --browser firefox",
|
|
149
|
+
"test:firefox-webworker": "aegir test -t webworker -f ./dist/test/browser.js -- --browser firefox",
|
|
150
|
+
"test:node": "aegir test -t node -f ./dist/test/node.js --cov",
|
|
151
|
+
"test:electron-main": "aegir test -t electron-main -f ./dist/test/node.js --cov",
|
|
152
|
+
"release": "aegir release"
|
|
153
153
|
},
|
|
154
154
|
"dependencies": {
|
|
155
|
-
"@libp2p/logger": "^1.
|
|
156
|
-
"@libp2p/utils": "^1.0.
|
|
157
|
-
"@multiformats/mafmt": "^11.0.
|
|
158
|
-
"@multiformats/multiaddr": "^10.
|
|
155
|
+
"@libp2p/logger": "^1.1.3",
|
|
156
|
+
"@libp2p/utils": "^1.0.10",
|
|
157
|
+
"@multiformats/mafmt": "^11.0.2",
|
|
158
|
+
"@multiformats/multiaddr": "^10.1.5",
|
|
159
159
|
"@multiformats/multiaddr-to-uri": "^9.0.0",
|
|
160
160
|
"abortable-iterator": "^4.0.2",
|
|
161
161
|
"err-code": "^3.0.1",
|
|
@@ -165,19 +165,18 @@
|
|
|
165
165
|
"wherearewe": "^1.0.0"
|
|
166
166
|
},
|
|
167
167
|
"devDependencies": {
|
|
168
|
-
"@libp2p/interface-compliance-tests": "^1.1.
|
|
169
|
-
"@libp2p/interfaces": "^1.3.
|
|
168
|
+
"@libp2p/interface-compliance-tests": "^1.1.21",
|
|
169
|
+
"@libp2p/interfaces": "^1.3.20",
|
|
170
170
|
"@types/ws": "^8.2.2",
|
|
171
|
-
"aegir": "^
|
|
171
|
+
"aegir": "^37.0.7",
|
|
172
172
|
"is-loopback-addr": "^2.0.1",
|
|
173
173
|
"it-all": "^1.0.6",
|
|
174
174
|
"it-drain": "^1.0.5",
|
|
175
175
|
"it-goodbye": "^4.0.1",
|
|
176
|
-
"it-pipe": "^2.0.
|
|
176
|
+
"it-pipe": "^2.0.3",
|
|
177
177
|
"it-take": "^1.0.2",
|
|
178
178
|
"p-wait-for": "^4.1.0",
|
|
179
|
-
"uint8arrays": "^3.0.0"
|
|
180
|
-
"util": "^0.12.3"
|
|
179
|
+
"uint8arrays": "^3.0.0"
|
|
181
180
|
},
|
|
182
181
|
"browser": {
|
|
183
182
|
"./dist/src/listener.js": "./dist/src/listener.browser.js"
|
package/src/index.ts
CHANGED
|
@@ -7,35 +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
31
|
|
|
32
|
-
|
|
33
|
-
this.
|
|
32
|
+
get [Symbol.toStringTag] () {
|
|
33
|
+
return this.constructor.name
|
|
34
34
|
}
|
|
35
35
|
|
|
36
|
-
[
|
|
36
|
+
get [symbol] (): true {
|
|
37
|
+
return true
|
|
38
|
+
}
|
|
37
39
|
|
|
38
|
-
async dial (ma: Multiaddr, options
|
|
40
|
+
async dial (ma: Multiaddr, options: DialOptions) {
|
|
39
41
|
log('dialing %s', ma)
|
|
40
42
|
options = options ?? {}
|
|
41
43
|
|
|
@@ -43,12 +45,12 @@ export class WebSockets implements Transport<AbortOptions & WebSocketOptions, We
|
|
|
43
45
|
const maConn = socketToMaConn(socket, ma)
|
|
44
46
|
log('new outbound connection %s', maConn.remoteAddr)
|
|
45
47
|
|
|
46
|
-
const conn = await
|
|
48
|
+
const conn = await options.upgrader.upgradeOutbound(maConn)
|
|
47
49
|
log('outbound connection %s upgraded', maConn.remoteAddr)
|
|
48
50
|
return conn
|
|
49
51
|
}
|
|
50
52
|
|
|
51
|
-
async _connect (ma: Multiaddr, options: AbortOptions
|
|
53
|
+
async _connect (ma: Multiaddr, options: AbortOptions): Promise<DuplexWebSocket> {
|
|
52
54
|
if (options?.signal?.aborted === true) {
|
|
53
55
|
throw new AbortError()
|
|
54
56
|
}
|
|
@@ -62,7 +64,7 @@ export class WebSockets implements Transport<AbortOptions & WebSocketOptions, We
|
|
|
62
64
|
errorPromise.reject(err)
|
|
63
65
|
}
|
|
64
66
|
|
|
65
|
-
const rawSocket = connect(toUri(ma),
|
|
67
|
+
const rawSocket = connect(toUri(ma), this.init)
|
|
66
68
|
|
|
67
69
|
if (rawSocket.socket.on != null) {
|
|
68
70
|
rawSocket.socket.on('error', errfn)
|
|
@@ -115,8 +117,8 @@ export class WebSockets implements Transport<AbortOptions & WebSocketOptions, We
|
|
|
115
117
|
* anytime a new incoming Connection has been successfully upgraded via
|
|
116
118
|
* `upgrader.upgradeInbound`
|
|
117
119
|
*/
|
|
118
|
-
createListener (options
|
|
119
|
-
return createListener(this.
|
|
120
|
+
createListener (options: CreateListenerOptions) {
|
|
121
|
+
return createListener({ ...this.init, ...options })
|
|
120
122
|
}
|
|
121
123
|
|
|
122
124
|
/**
|
|
@@ -127,8 +129,8 @@ export class WebSockets implements Transport<AbortOptions & WebSocketOptions, We
|
|
|
127
129
|
filter (multiaddrs: Multiaddr[]) {
|
|
128
130
|
multiaddrs = Array.isArray(multiaddrs) ? multiaddrs : [multiaddrs]
|
|
129
131
|
|
|
130
|
-
if (this.
|
|
131
|
-
return this.
|
|
132
|
+
if (this.init?.filter != null) {
|
|
133
|
+
return this.init?.filter(multiaddrs)
|
|
132
134
|
}
|
|
133
135
|
|
|
134
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
|
}
|