@dxos/network-manager 0.1.56-main.e47dfd1 → 0.1.56-main.ec96785

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.
@@ -1 +1 @@
1
- {"version":3,"file":"webrtc-transport-proxy.d.ts","sourceRoot":"","sources":["../../../../src/transport/webrtc-transport-proxy.ts"],"names":[],"mappings":";AAMA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAGpC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG1C,OAAO,EAAgC,aAAa,EAAE,MAAM,wCAAwC,CAAC;AACrG,OAAO,EAAE,MAAM,EAAE,MAAM,uCAAuC,CAAC;AAG/D,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE5E,MAAM,MAAM,0BAA0B,GAAG;IACvC,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC,eAAe,CAAC;IAC/B,aAAa,EAAE,aAAa,CAAC;IAC7B,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/C,CAAC;AAEF,qBAAa,oBAAqB,YAAW,SAAS;IAclD,OAAO,CAAC,QAAQ,CAAC,OAAO;IAb1B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAsB;IAC/C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAiB;IAEtC,QAAQ,CAAC,MAAM,cAAe;IAC9B,OAAO,CAAC,OAAO,CAAS;IACxB,QAAQ,CAAC,SAAS,cAAe;IAEjC,QAAQ,CAAC,MAAM,cAAqB;IAEpC,OAAO,CAAC,cAAc,CAAuB;gBAI1B,OAAO,EAAE,0BAA0B;YAqCxC,iBAAiB;IAiB/B,OAAO,CAAC,WAAW;YAKL,aAAa;IAI3B,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAUtB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAkB9B;;OAEG;IAEH,UAAU;CAKX;AAGD,qBAAa,2BAA4B,YAAW,gBAAgB;IAClE,OAAO,CAAC,cAAc,CAA4B;IAClD,OAAO,CAAC,YAAY,CAAmC;IAEvD;;;OAGG;IACH,gBAAgB,CAAC,aAAa,EAAE,aAAa,GAAG,SAAS,GAAG,IAAI;IAShE,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,SAAS;CAatD"}
1
+ {"version":3,"file":"webrtc-transport-proxy.d.ts","sourceRoot":"","sources":["../../../../src/transport/webrtc-transport-proxy.ts"],"names":[],"mappings":";AAOA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAGpC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG1C,OAAO,EAAgC,aAAa,EAAE,MAAM,wCAAwC,CAAC;AACrG,OAAO,EAAE,MAAM,EAAE,MAAM,uCAAuC,CAAC;AAG/D,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE5E,MAAM,MAAM,0BAA0B,GAAG;IACvC,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC,eAAe,CAAC;IAC/B,aAAa,EAAE,aAAa,CAAC;IAC7B,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/C,CAAC;AAEF,qBAAa,oBAAqB,YAAW,SAAS;IAclD,OAAO,CAAC,QAAQ,CAAC,OAAO;IAb1B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAsB;IAC/C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAiB;IAEtC,QAAQ,CAAC,MAAM,cAAe;IAC9B,OAAO,CAAC,OAAO,CAAS;IACxB,QAAQ,CAAC,SAAS,cAAe;IAEjC,QAAQ,CAAC,MAAM,cAAqB;IAEpC,OAAO,CAAC,cAAc,CAAuB;gBAI1B,OAAO,EAAE,0BAA0B;YAsCxC,iBAAiB;IAiB/B,OAAO,CAAC,WAAW;YAKL,aAAa;IAI3B,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAUtB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAkB9B;;OAEG;IAEH,UAAU;CAKX;AAGD,qBAAa,2BAA4B,YAAW,gBAAgB;IAClE,OAAO,CAAC,cAAc,CAA4B;IAClD,OAAO,CAAC,YAAY,CAAmC;IAEvD;;;OAGG;IACH,gBAAgB,CAAC,aAAa,EAAE,aAAa,GAAG,SAAS,GAAG,IAAI;IAShE,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,SAAS;CAatD"}
@@ -1 +1 @@
1
- {"version":3,"file":"webrtc-transport-service.d.ts","sourceRoot":"","sources":["../../../../src/transport/webrtc-transport-service.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAG9C,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,aAAa,EACb,WAAW,EACX,WAAW,EAEX,YAAY,EACb,MAAM,wCAAwC,CAAC;AAKhD,qBAAa,sBAAuB,YAAW,aAAa;IAOxD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC;IANjC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAEzB;gBAIiB,aAAa,CAAC,KAAK;IAGtC,IAAI,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM,CAAC,WAAW,CAAC;IA6D/C,UAAU,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAK7D,QAAQ,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAK1D,KAAK,CAAC,EAAE,OAAO,EAAE,EAAE,YAAY;CAMtC"}
1
+ {"version":3,"file":"webrtc-transport-service.d.ts","sourceRoot":"","sources":["../../../../src/transport/webrtc-transport-service.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAG9C,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,aAAa,EACb,WAAW,EACX,WAAW,EAEX,YAAY,EACb,MAAM,wCAAwC,CAAC;AAWhD,qBAAa,sBAAuB,YAAW,aAAa;IAKxD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC;IAJjC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA6D;gBAIrE,aAAa,CAAC,KAAK;IAGtC,IAAI,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM,CAAC,WAAW,CAAC;IA0E/C,UAAU,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAK7D,QAAQ,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAW1D,KAAK,CAAC,EAAE,OAAO,EAAE,EAAE,YAAY;CAMtC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dxos/network-manager",
3
- "version": "0.1.56-main.e47dfd1",
3
+ "version": "0.1.56-main.ec96785",
4
4
  "description": "Network Manager",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
@@ -26,21 +26,21 @@
26
26
  "tiny-invariant": "^1.3.1",
27
27
  "ws": "^7.4.4",
28
28
  "xor-distance": "^2.0.0",
29
- "@dxos/async": "0.1.56-main.e47dfd1",
30
- "@dxos/codec-protobuf": "0.1.56-main.e47dfd1",
31
- "@dxos/context": "0.1.56-main.e47dfd1",
32
- "@dxos/credentials": "0.1.56-main.e47dfd1",
33
- "@dxos/crypto": "0.1.56-main.e47dfd1",
34
- "@dxos/debug": "0.1.56-main.e47dfd1",
35
- "@dxos/errors": "0.1.56-main.e47dfd1",
36
- "@dxos/keys": "0.1.56-main.e47dfd1",
37
- "@dxos/log": "0.1.56-main.e47dfd1",
38
- "@dxos/messaging": "0.1.56-main.e47dfd1",
39
- "@dxos/node-std": "0.1.56-main.e47dfd1",
40
- "@dxos/protocols": "0.1.56-main.e47dfd1",
41
- "@dxos/rpc": "0.1.56-main.e47dfd1",
42
- "@dxos/teleport": "0.1.56-main.e47dfd1",
43
- "@dxos/util": "0.1.56-main.e47dfd1"
29
+ "@dxos/async": "0.1.56-main.ec96785",
30
+ "@dxos/codec-protobuf": "0.1.56-main.ec96785",
31
+ "@dxos/context": "0.1.56-main.ec96785",
32
+ "@dxos/credentials": "0.1.56-main.ec96785",
33
+ "@dxos/crypto": "0.1.56-main.ec96785",
34
+ "@dxos/debug": "0.1.56-main.ec96785",
35
+ "@dxos/errors": "0.1.56-main.ec96785",
36
+ "@dxos/keys": "0.1.56-main.ec96785",
37
+ "@dxos/log": "0.1.56-main.ec96785",
38
+ "@dxos/messaging": "0.1.56-main.ec96785",
39
+ "@dxos/node-std": "0.1.56-main.ec96785",
40
+ "@dxos/protocols": "0.1.56-main.ec96785",
41
+ "@dxos/rpc": "0.1.56-main.ec96785",
42
+ "@dxos/teleport": "0.1.56-main.ec96785",
43
+ "@dxos/util": "0.1.56-main.ec96785"
44
44
  },
45
45
  "devDependencies": {
46
46
  "@swc-node/register": "1.5.4",
@@ -50,7 +50,7 @@
50
50
  "earljs": "~0.1.10",
51
51
  "fast-check": "~3.3.0",
52
52
  "typescript": "^5.0.4",
53
- "@dxos/signal": "0.1.56-main.e47dfd1"
53
+ "@dxos/signal": "0.1.56-main.ec96785"
54
54
  },
55
55
  "publishConfig": {
56
56
  "access": "public"
@@ -2,6 +2,7 @@
2
2
  // Copyright 2022 DXOS.org
3
3
  //
4
4
 
5
+ import { Writable } from 'node:stream';
5
6
  import invariant from 'tiny-invariant';
6
7
 
7
8
  import { Event } from '@dxos/async';
@@ -57,18 +58,19 @@ export class WebRTCTransportProxy implements Transport {
57
58
  }
58
59
  });
59
60
 
60
- const dataListener = async (data: Uint8Array) => {
61
- try {
62
- await this._params.bridgeService.sendData({
61
+ this._params.stream.pipe(new Writable({
62
+ write: (chunk, _, callback) => {
63
+ this._params.bridgeService.sendData({
63
64
  proxyId: this._proxyId,
64
- payload: data
65
- });
66
- } catch (err: any) {
67
- log.catch(err);
68
- }
69
- };
70
- this._params.stream.on('data', dataListener);
71
- this._ctx.onDispose(() => { this._params.stream.off('data', dataListener); });
65
+ payload: chunk
66
+ }).then(
67
+ () => callback(),
68
+ (err: any) => {
69
+ log.catch(err);
70
+ }
71
+ );
72
+ },
73
+ }));
72
74
  },
73
75
  (error) => log.catch(error)
74
76
  );
@@ -21,20 +21,30 @@ import { ComplexMap } from '@dxos/util';
21
21
 
22
22
  import { WebRTCTransport } from './webrtc-transport';
23
23
 
24
+ type TransportState = {
25
+ transport: WebRTCTransport;
26
+ stream: Duplex;
27
+ writeCallbacks: (() => void)[];
28
+ };
29
+
24
30
  export class WebRTCTransportService implements BridgeService {
25
- private readonly transports = new ComplexMap<PublicKey, { transport: WebRTCTransport; stream: Duplex }>(
26
- PublicKey.hash,
27
- );
31
+ private readonly transports = new ComplexMap<PublicKey, TransportState>(PublicKey.hash);
28
32
 
29
33
  // prettier-ignore
30
34
  constructor(
31
35
  private readonly _webrtcConfig?: any
32
- ) {}
36
+ ) { }
33
37
 
34
38
  open(request: ConnectionRequest): Stream<BridgeEvent> {
35
39
  const rpcStream: Stream<BridgeEvent> = new Stream(({ ready, next, close }) => {
36
40
  const duplex: Duplex = new Duplex({
37
- read: () => {},
41
+ read: () => {
42
+ const callbacks = [...transportState.writeCallbacks];
43
+ transportState.writeCallbacks.length = 0;
44
+ for (const cb of callbacks) {
45
+ cb();
46
+ }
47
+ },
38
48
  write: function (chunk, _, callback) {
39
49
  next({ data: { payload: chunk } });
40
50
  callback();
@@ -85,8 +95,15 @@ export class WebRTCTransportService implements BridgeService {
85
95
  close();
86
96
  });
87
97
 
98
+ const transportState: TransportState = {
99
+ transport,
100
+ stream: duplex,
101
+ writeCallbacks: [],
102
+ };
103
+
88
104
  ready();
89
- this.transports.set(request.proxyId, { transport, stream: duplex });
105
+
106
+ this.transports.set(request.proxyId, transportState);
90
107
  });
91
108
 
92
109
  return rpcStream;
@@ -99,7 +116,13 @@ export class WebRTCTransportService implements BridgeService {
99
116
 
100
117
  async sendData({ proxyId, payload }: DataRequest): Promise<void> {
101
118
  invariant(this.transports.has(proxyId));
102
- await this.transports.get(proxyId)!.stream.push(payload);
119
+ const state = this.transports.get(proxyId)!;
120
+ const bufferHasSpace = state.stream.push(payload);
121
+ if (!bufferHasSpace) {
122
+ await new Promise<void>((resolve) => {
123
+ state.writeCallbacks.push(resolve);
124
+ });
125
+ }
103
126
  }
104
127
 
105
128
  async close({ proxyId }: CloseRequest) {