@dxos/network-manager 2.33.8-dev.8609bc45 → 2.33.9-dev.002e8917

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.
Files changed (119) hide show
  1. package/dist/browser-mocha/bundle.js +19347 -15815
  2. package/dist/src/network-manager.d.ts +1 -0
  3. package/dist/src/network-manager.d.ts.map +1 -1
  4. package/dist/src/network-manager.js +15 -9
  5. package/dist/src/network-manager.js.map +1 -1
  6. package/dist/src/proto/gen/dxos/credentials.d.ts +26 -0
  7. package/dist/src/proto/gen/dxos/credentials.d.ts.map +1 -0
  8. package/dist/src/proto/gen/dxos/credentials.js +3 -0
  9. package/dist/src/proto/gen/dxos/credentials.js.map +1 -0
  10. package/dist/src/proto/gen/dxos/halo/keys.d.ts +60 -0
  11. package/dist/src/proto/gen/dxos/halo/keys.d.ts.map +1 -0
  12. package/dist/src/proto/gen/dxos/halo/keys.js +13 -0
  13. package/dist/src/proto/gen/dxos/halo/keys.js.map +1 -0
  14. package/dist/src/proto/gen/dxos/mesh/signal.d.ts +49 -0
  15. package/dist/src/proto/gen/dxos/mesh/signal.d.ts.map +1 -0
  16. package/dist/src/proto/gen/dxos/mesh/signal.js +3 -0
  17. package/dist/src/proto/gen/dxos/mesh/signal.js.map +1 -0
  18. package/dist/src/proto/gen/google/protobuf.d.ts +5 -0
  19. package/dist/src/proto/gen/google/protobuf.d.ts.map +1 -0
  20. package/dist/src/proto/gen/google/protobuf.js +3 -0
  21. package/dist/src/proto/gen/google/protobuf.js.map +1 -0
  22. package/dist/src/proto/gen/index.d.ts +29 -0
  23. package/dist/src/proto/gen/index.d.ts.map +1 -0
  24. package/dist/src/proto/gen/index.js +11 -0
  25. package/dist/src/proto/gen/index.js.map +1 -0
  26. package/dist/src/proto/substitutions.d.ts +17 -0
  27. package/dist/src/proto/substitutions.d.ts.map +1 -0
  28. package/dist/src/proto/substitutions.js +10 -0
  29. package/dist/src/proto/substitutions.js.map +1 -0
  30. package/dist/src/protocol-factory.js +7 -6
  31. package/dist/src/protocol-factory.js.map +1 -1
  32. package/dist/src/signal/in-memory-signal-manager.d.ts +5 -4
  33. package/dist/src/signal/in-memory-signal-manager.d.ts.map +1 -1
  34. package/dist/src/signal/in-memory-signal-manager.js +5 -3
  35. package/dist/src/signal/in-memory-signal-manager.js.map +1 -1
  36. package/dist/src/signal/message-router.d.ts +36 -0
  37. package/dist/src/signal/message-router.d.ts.map +1 -0
  38. package/dist/src/signal/message-router.js +145 -0
  39. package/dist/src/signal/message-router.js.map +1 -0
  40. package/dist/src/signal/message-router.test.d.ts +2 -0
  41. package/dist/src/signal/message-router.test.d.ts.map +1 -0
  42. package/dist/src/signal/message-router.test.js +265 -0
  43. package/dist/src/signal/message-router.test.js.map +1 -0
  44. package/dist/src/signal/signal-api.d.ts +6 -0
  45. package/dist/src/signal/signal-api.d.ts.map +1 -1
  46. package/dist/src/signal/signal-api.js.map +1 -1
  47. package/dist/src/signal/signal-client.d.ts +5 -3
  48. package/dist/src/signal/signal-client.d.ts.map +1 -1
  49. package/dist/src/signal/signal-client.js +33 -21
  50. package/dist/src/signal/signal-client.js.map +1 -1
  51. package/dist/src/signal/signal-client.test.js +25 -4
  52. package/dist/src/signal/signal-client.test.js.map +1 -1
  53. package/dist/src/signal/signal-manager.d.ts +22 -7
  54. package/dist/src/signal/signal-manager.d.ts.map +1 -1
  55. package/dist/src/signal/websocket-rpc.js +3 -3
  56. package/dist/src/signal/websocket-rpc.js.map +1 -1
  57. package/dist/src/signal/websocket-signal-manager.d.ts +5 -4
  58. package/dist/src/signal/websocket-signal-manager.d.ts.map +1 -1
  59. package/dist/src/signal/websocket-signal-manager.js +2 -2
  60. package/dist/src/signal/websocket-signal-manager.js.map +1 -1
  61. package/dist/src/swarm/connection.d.ts +3 -3
  62. package/dist/src/swarm/connection.d.ts.map +1 -1
  63. package/dist/src/swarm/connection.js +12 -9
  64. package/dist/src/swarm/connection.js.map +1 -1
  65. package/dist/src/swarm/swarm.d.ts +7 -5
  66. package/dist/src/swarm/swarm.d.ts.map +1 -1
  67. package/dist/src/swarm/swarm.js +19 -13
  68. package/dist/src/swarm/swarm.js.map +1 -1
  69. package/dist/src/swarm/swarm.test.js +44 -4
  70. package/dist/src/swarm/swarm.test.js.map +1 -1
  71. package/dist/src/testing/test-protocol.d.ts.map +1 -1
  72. package/dist/src/testing/test-protocol.js +10 -10
  73. package/dist/src/testing/test-protocol.js.map +1 -1
  74. package/dist/src/topology/fully-connected-topology.js +3 -3
  75. package/dist/src/topology/fully-connected-topology.js.map +1 -1
  76. package/dist/src/topology/mmst-topology.js +5 -5
  77. package/dist/src/topology/mmst-topology.js.map +1 -1
  78. package/dist/src/topology/star-topology.js +4 -4
  79. package/dist/src/topology/star-topology.js.map +1 -1
  80. package/dist/src/transport/in-memory-transport.d.ts +2 -2
  81. package/dist/src/transport/in-memory-transport.d.ts.map +1 -1
  82. package/dist/src/transport/in-memory-transport.js +2 -2
  83. package/dist/src/transport/in-memory-transport.js.map +1 -1
  84. package/dist/src/transport/transport.d.ts +3 -3
  85. package/dist/src/transport/transport.d.ts.map +1 -1
  86. package/dist/src/transport/webrtc-transport.d.ts +3 -3
  87. package/dist/src/transport/webrtc-transport.d.ts.map +1 -1
  88. package/dist/src/transport/webrtc-transport.js +6 -4
  89. package/dist/src/transport/webrtc-transport.js.map +1 -1
  90. package/dist/tsconfig.tsbuildinfo +1 -1
  91. package/package.json +17 -13
  92. package/src/network-manager.ts +18 -7
  93. package/src/proto/defs/dxos/mesh/signal.proto +51 -0
  94. package/src/proto/gen/dxos/credentials.ts +27 -0
  95. package/src/proto/gen/dxos/halo/keys.ts +62 -0
  96. package/src/proto/gen/dxos/mesh/signal.ts +52 -0
  97. package/src/proto/gen/google/protobuf.ts +9 -0
  98. package/src/proto/gen/index.ts +29 -0
  99. package/src/proto/substitutions.ts +9 -0
  100. package/src/protocol-factory.ts +5 -5
  101. package/src/signal/in-memory-signal-manager.ts +8 -5
  102. package/src/signal/message-router.test.ts +334 -0
  103. package/src/signal/message-router.ts +178 -0
  104. package/src/signal/signal-api.ts +6 -0
  105. package/src/signal/signal-client.test.ts +37 -12
  106. package/src/signal/signal-client.ts +51 -23
  107. package/src/signal/signal-manager.ts +24 -9
  108. package/src/signal/websocket-rpc.ts +1 -1
  109. package/src/signal/websocket-signal-manager.ts +6 -5
  110. package/src/swarm/connection.ts +12 -10
  111. package/src/swarm/swarm.test.ts +63 -11
  112. package/src/swarm/swarm.ts +19 -14
  113. package/src/testing/test-protocol.ts +8 -8
  114. package/src/topology/fully-connected-topology.ts +1 -1
  115. package/src/topology/mmst-topology.ts +1 -1
  116. package/src/topology/star-topology.ts +1 -1
  117. package/src/transport/in-memory-transport.ts +3 -3
  118. package/src/transport/transport.ts +3 -3
  119. package/src/transport/webrtc-transport.ts +7 -6
@@ -2,8 +2,8 @@
2
2
  // Copyright 2020 DXOS.org
3
3
  //
4
4
 
5
- import assert from 'assert';
6
5
  import debug from 'debug';
6
+ import assert from 'node:assert';
7
7
 
8
8
  import { Event } from '@dxos/async';
9
9
  import { GreetingCommandPlugin, ERR_GREET_ALREADY_CONNECTED_TO_SWARM } from '@dxos/credentials';
@@ -12,7 +12,9 @@ import { PublicKey } from '@dxos/protocols';
12
12
  import { ComplexMap } from '@dxos/util';
13
13
 
14
14
  import { ConnectionLog } from './connection-log';
15
- import { InMemorySignalManager, SignalManager, SignalApi, WebsocketSignalManager } from './signal';
15
+ import { Message } from './proto/gen/dxos/mesh/signal';
16
+ import { InMemorySignalManager, SignalManager, WebsocketSignalManager } from './signal';
17
+ import { MessageRouter } from './signal/message-router';
16
18
  import { Swarm, SwarmMapper } from './swarm';
17
19
  import { Topology } from './topology';
18
20
  import { createWebRTCTransportFactory, inMemoryTransportFactory } from './transport';
@@ -38,6 +40,7 @@ export class NetworkManager {
38
40
  private readonly _swarms = new ComplexMap<PublicKey, Swarm>(key => key.toHex());
39
41
  private readonly _maps = new ComplexMap<PublicKey, SwarmMapper>(key => key.toHex());
40
42
  private readonly _signalManager: SignalManager;
43
+ private readonly _messageRouter: MessageRouter;
41
44
  private readonly _connectionLog?: ConnectionLog;
42
45
 
43
46
  public readonly topicsUpdated = new Event<void>();
@@ -45,8 +48,8 @@ export class NetworkManager {
45
48
  constructor (options: NetworkManagerOptions = {}) {
46
49
  this._ice = options.ice ?? [];
47
50
 
48
- const onOffer = async (message: SignalApi.SignalMessage) =>
49
- await this._swarms.get(message.topic)?.onOffer(message) ?? { accept: false };
51
+ const onOffer = async (message: Message) =>
52
+ await this._swarms.get(message.topic!)?.onOffer(message) ?? { accept: false };
50
53
 
51
54
  this._signalManager = options.signal
52
55
  ? new WebsocketSignalManager(options.signal, onOffer)
@@ -54,8 +57,14 @@ export class NetworkManager {
54
57
 
55
58
  this._signalManager.peerCandidatesChanged
56
59
  .on(([topic, candidates]) => this._swarms.get(topic)?.onPeerCandidatesChanged(candidates));
57
- this._signalManager.onSignal
58
- .on(msg => this._swarms.get(msg.topic)?.onSignal(msg));
60
+
61
+ this._signalManager.onSignal.on(msg => this._messageRouter.receiveMessage(msg));
62
+
63
+ this._messageRouter = new MessageRouter({
64
+ sendMessage: msg => this._signalManager.signal(msg),
65
+ onSignal: async (msg) => this._swarms.get(msg.topic!)?.onSignal(msg),
66
+ onOffer: msg => onOffer(msg)
67
+ });
59
68
 
60
69
  if (options.log) {
61
70
  this._connectionLog = new ConnectionLog();
@@ -108,7 +117,8 @@ export class NetworkManager {
108
117
  peerId,
109
118
  topology,
110
119
  protocol,
111
- this._signalManager,
120
+ this._messageRouter,
121
+ this._signalManager.lookup.bind(this._signalManager),
112
122
  transportFactory,
113
123
  options.label
114
124
  );
@@ -167,6 +177,7 @@ export class NetworkManager {
167
177
  });
168
178
  }
169
179
 
180
+ await this._messageRouter.destroy();
170
181
  await this._signalManager.destroy();
171
182
  }
172
183
  }
@@ -0,0 +1,51 @@
1
+ //
2
+ // Copyright 2020 DXOS.org
3
+ //
4
+
5
+ syntax = "proto3";
6
+
7
+ import "@dxos/protocols/src/proto/dxos/halo/keys.proto";
8
+
9
+ package dxos.mesh.signal;
10
+
11
+ message Message {
12
+ /// Sender's public key.
13
+ PubKey id = 1;
14
+ /// Receiver`s public key.
15
+ PubKey remoteId = 2;
16
+ /// Swarm identefier.
17
+ PubKey topic = 3;
18
+ /// Unique connection identifier.
19
+ PubKey sessionId = 4;
20
+ /// Message payload.
21
+ MessageData data = 5;
22
+ /// Unique message identifier. Used for Acknolegment and matching Anwers to Offers.
23
+ PubKey messageId = 6;
24
+ }
25
+
26
+ message MessageData {
27
+ oneof payload {
28
+ Offer offer = 1;
29
+ Answer answer = 2;
30
+ Signal signal = 3;
31
+ Acknowledgement ack = 4;
32
+ }
33
+ }
34
+
35
+ message Offer {
36
+ }
37
+
38
+ message Answer {
39
+ bool accept = 1;
40
+ /// MessageId of the Offer being answered.
41
+ PubKey offerMessageId = 2;
42
+ }
43
+
44
+ message Signal {
45
+ string json = 1;
46
+ }
47
+
48
+ message Acknowledgement {
49
+ // MessageId of the Message being acknowledged.
50
+ PubKey messageId = 1;
51
+ }
@@ -0,0 +1,27 @@
1
+ import type { Stream } from "@dxos/codec-protobuf";
2
+ import substitutions from "../../substitutions";
3
+ import * as dxos_halo_keys from "./halo/keys";
4
+ import * as dxos_mesh_signal from "./mesh/signal";
5
+ import * as google_protobuf from "../google/protobuf";
6
+ export interface Message {
7
+ payload: google_protobuf.Any;
8
+ }
9
+ /**
10
+ * A generic container message used whenever messages are signed (e.g. PartyCredential)
11
+ */
12
+ export interface SignedMessage {
13
+ signed: SignedMessage.Signed;
14
+ signatures?: SignedMessage.Signature[];
15
+ }
16
+ export namespace SignedMessage {
17
+ export interface Signed {
18
+ created: string;
19
+ nonce: Uint8Array;
20
+ payload: google_protobuf.Any;
21
+ }
22
+ export interface Signature {
23
+ key: ReturnType<(typeof substitutions)["dxos.halo.keys.PubKey"]["decode"]>;
24
+ signature: Uint8Array;
25
+ keyChain?: dxos_halo_keys.KeyChain;
26
+ }
27
+ }
@@ -0,0 +1,62 @@
1
+ import type { Stream } from "@dxos/codec-protobuf";
2
+ import substitutions from "../../../substitutions";
3
+ import * as dxos_credentials from "../credentials";
4
+ import * as dxos_mesh_signal from "../mesh/signal";
5
+ import * as google_protobuf from "../../google/protobuf";
6
+ export enum KeyType {
7
+ UNKNOWN = 0,
8
+ IDENTITY = 1,
9
+ DEVICE = 2,
10
+ PARTY = 3,
11
+ FEED = 4,
12
+ DXNS_ADDRESS = 5
13
+ }
14
+ export interface PubKey {
15
+ data?: Uint8Array;
16
+ }
17
+ export interface PrivKey {
18
+ data?: Uint8Array;
19
+ }
20
+ export interface KeyRecord {
21
+ /**
22
+ * The `KeyType` type of the key. This is often unknown for keys from other sources.
23
+ */
24
+ type: KeyType;
25
+ /**
26
+ * The public key as a Buffer (required).
27
+ */
28
+ publicKey: ReturnType<(typeof substitutions)["dxos.halo.keys.PubKey"]["decode"]>;
29
+ /**
30
+ * The secret key as a Buffer (this will never be visible outside the Keyring).
31
+ */
32
+ secretKey?: ReturnType<(typeof substitutions)["dxos.halo.keys.PrivKey"]["decode"]>;
33
+ /**
34
+ * Is this key from a Greeting "hint"?
35
+ */
36
+ hint?: boolean;
37
+ /**
38
+ * Determines if this is our key?
39
+ * Usually true if `secretKey` is present; may be false for "inception keys" such as the Party key.
40
+ */
41
+ own?: boolean;
42
+ /**
43
+ * Is this key to be trusted?
44
+ */
45
+ trusted?: boolean;
46
+ /**
47
+ * An RFC-3339 date/time string for when the key was added to the Keyring.
48
+ */
49
+ added?: string;
50
+ /**
51
+ * An RFC-3339 date/time string for when the key was created.
52
+ */
53
+ created?: string;
54
+ }
55
+ export interface KeyRecordList {
56
+ keys?: KeyRecord[];
57
+ }
58
+ export interface KeyChain {
59
+ publicKey: ReturnType<(typeof substitutions)["dxos.halo.keys.PubKey"]["decode"]>;
60
+ message: dxos_credentials.SignedMessage;
61
+ parents?: KeyChain[];
62
+ }
@@ -0,0 +1,52 @@
1
+ import type { Stream } from "@dxos/codec-protobuf";
2
+ import substitutions from "../../../substitutions";
3
+ import * as dxos_credentials from "../credentials";
4
+ import * as dxos_halo_keys from "../halo/keys";
5
+ import * as google_protobuf from "../../google/protobuf";
6
+ export interface Message {
7
+ /**
8
+ * Sender's public key.
9
+ */
10
+ id?: ReturnType<(typeof substitutions)["dxos.halo.keys.PubKey"]["decode"]>;
11
+ /**
12
+ * Receiver`s public key.
13
+ */
14
+ remoteId?: ReturnType<(typeof substitutions)["dxos.halo.keys.PubKey"]["decode"]>;
15
+ /**
16
+ * Swarm identefier.
17
+ */
18
+ topic?: ReturnType<(typeof substitutions)["dxos.halo.keys.PubKey"]["decode"]>;
19
+ /**
20
+ * Unique connection identifier.
21
+ */
22
+ sessionId?: ReturnType<(typeof substitutions)["dxos.halo.keys.PubKey"]["decode"]>;
23
+ /**
24
+ * Message payload.
25
+ */
26
+ data?: MessageData;
27
+ /**
28
+ * Unique message identifier. Used for Acknolegment and matching Anwers to Offers.
29
+ */
30
+ messageId?: ReturnType<(typeof substitutions)["dxos.halo.keys.PubKey"]["decode"]>;
31
+ }
32
+ export interface MessageData {
33
+ offer?: Offer;
34
+ answer?: Answer;
35
+ signal?: Signal;
36
+ ack?: Acknowledgement;
37
+ }
38
+ export interface Offer {
39
+ }
40
+ export interface Answer {
41
+ accept?: boolean;
42
+ /**
43
+ * MessageId of the Offer being answered.
44
+ */
45
+ offerMessageId?: ReturnType<(typeof substitutions)["dxos.halo.keys.PubKey"]["decode"]>;
46
+ }
47
+ export interface Signal {
48
+ json?: string;
49
+ }
50
+ export interface Acknowledgement {
51
+ messageId?: ReturnType<(typeof substitutions)["dxos.halo.keys.PubKey"]["decode"]>;
52
+ }
@@ -0,0 +1,9 @@
1
+ import type { Stream } from "@dxos/codec-protobuf";
2
+ import substitutions from "../../substitutions";
3
+ import * as dxos_credentials from "../dxos/credentials";
4
+ import * as dxos_halo_keys from "../dxos/halo/keys";
5
+ import * as dxos_mesh_signal from "../dxos/mesh/signal";
6
+ export interface Any {
7
+ type_url?: string;
8
+ value?: Uint8Array;
9
+ }
@@ -0,0 +1,29 @@
1
+ import { Schema } from "@dxos/codec-protobuf";
2
+ import * as dxos_credentials from "./dxos/credentials";
3
+ import * as dxos_halo_keys from "./dxos/halo/keys";
4
+ import * as dxos_mesh_signal from "./dxos/mesh/signal";
5
+ import * as google_protobuf from "./google/protobuf";
6
+ import substitutions from "../substitutions";
7
+ export interface TYPES {
8
+ "dxos.credentials.Message": dxos_credentials.Message;
9
+ "dxos.credentials.SignedMessage": dxos_credentials.SignedMessage;
10
+ "dxos.credentials.SignedMessage.Signature": dxos_credentials.SignedMessage.Signature;
11
+ "dxos.credentials.SignedMessage.Signed": dxos_credentials.SignedMessage.Signed;
12
+ "dxos.halo.keys.KeyChain": dxos_halo_keys.KeyChain;
13
+ "dxos.halo.keys.KeyRecord": dxos_halo_keys.KeyRecord;
14
+ "dxos.halo.keys.KeyRecordList": dxos_halo_keys.KeyRecordList;
15
+ "dxos.halo.keys.KeyType": dxos_halo_keys.KeyType;
16
+ "dxos.halo.keys.PrivKey": dxos_halo_keys.PrivKey;
17
+ "dxos.halo.keys.PubKey": dxos_halo_keys.PubKey;
18
+ "dxos.mesh.signal.Acknowledgement": dxos_mesh_signal.Acknowledgement;
19
+ "dxos.mesh.signal.Answer": dxos_mesh_signal.Answer;
20
+ "dxos.mesh.signal.Message": dxos_mesh_signal.Message;
21
+ "dxos.mesh.signal.MessageData": dxos_mesh_signal.MessageData;
22
+ "dxos.mesh.signal.Offer": dxos_mesh_signal.Offer;
23
+ "dxos.mesh.signal.Signal": dxos_mesh_signal.Signal;
24
+ "google.protobuf.Any": google_protobuf.Any;
25
+ }
26
+ export interface SERVICES {
27
+ }
28
+ export const schemaJson = JSON.parse("{\"nested\":{\"dxos\":{\"nested\":{\"credentials\":{\"nested\":{\"Message\":{\"fields\":{\"payload\":{\"rule\":\"required\",\"type\":\"google.protobuf.Any\",\"id\":1,\"comment\":null}},\"comment\":null},\"SignedMessage\":{\"fields\":{\"signed\":{\"rule\":\"required\",\"type\":\"Signed\",\"id\":1,\"comment\":null},\"signatures\":{\"rule\":\"repeated\",\"type\":\"Signature\",\"id\":2,\"comment\":null}},\"nested\":{\"Signature\":{\"fields\":{\"key\":{\"rule\":\"required\",\"type\":\"PubKey\",\"id\":1,\"comment\":null},\"signature\":{\"rule\":\"required\",\"type\":\"bytes\",\"id\":2,\"comment\":null},\"keyChain\":{\"type\":\"KeyChain\",\"id\":3,\"comment\":null}},\"comment\":null},\"Signed\":{\"fields\":{\"created\":{\"rule\":\"required\",\"type\":\"string\",\"id\":1,\"comment\":null},\"nonce\":{\"rule\":\"required\",\"type\":\"bytes\",\"id\":2,\"comment\":null},\"payload\":{\"rule\":\"required\",\"type\":\"google.protobuf.Any\",\"id\":10,\"comment\":null}},\"comment\":null}},\"comment\":\"A generic container message used whenever messages are signed (e.g. PartyCredential)\"}}},\"halo\":{\"nested\":{\"keys\":{\"nested\":{\"KeyChain\":{\"fields\":{\"publicKey\":{\"rule\":\"required\",\"type\":\"PubKey\",\"id\":1,\"comment\":null},\"message\":{\"rule\":\"required\",\"type\":\"SignedMessage\",\"id\":2,\"comment\":null},\"parents\":{\"rule\":\"repeated\",\"type\":\"KeyChain\",\"id\":3,\"comment\":null}},\"comment\":null},\"KeyRecord\":{\"fields\":{\"type\":{\"rule\":\"required\",\"type\":\"KeyType\",\"id\":1,\"comment\":\"The `KeyType` type of the key. This is often unknown for keys from other sources.\"},\"publicKey\":{\"rule\":\"required\",\"type\":\"PubKey\",\"id\":2,\"comment\":\"The public key as a Buffer (required).\"},\"secretKey\":{\"type\":\"PrivKey\",\"id\":3,\"comment\":\"The secret key as a Buffer (this will never be visible outside the Keyring).\"},\"hint\":{\"type\":\"bool\",\"id\":4,\"comment\":\"Is this key from a Greeting \\\"hint\\\"?\"},\"own\":{\"type\":\"bool\",\"id\":5,\"comment\":\"Determines if this is our key?\\nUsually true if `secretKey` is present; may be false for \\\"inception keys\\\" such as the Party key.\"},\"trusted\":{\"type\":\"bool\",\"id\":6,\"comment\":\"Is this key to be trusted?\"},\"added\":{\"type\":\"string\",\"id\":7,\"comment\":\"An RFC-3339 date/time string for when the key was added to the Keyring.\"},\"created\":{\"type\":\"string\",\"id\":8,\"comment\":\"An RFC-3339 date/time string for when the key was created.\"}},\"comment\":null},\"KeyRecordList\":{\"fields\":{\"keys\":{\"rule\":\"repeated\",\"type\":\"KeyRecord\",\"id\":1,\"comment\":null}},\"comment\":null},\"KeyType\":{\"values\":{\"UNKNOWN\":0,\"IDENTITY\":1,\"DEVICE\":2,\"PARTY\":3,\"FEED\":4,\"DXNS_ADDRESS\":5},\"comment\":null,\"comments\":{\"UNKNOWN\":null,\"IDENTITY\":null,\"DEVICE\":null,\"PARTY\":null,\"FEED\":null,\"DXNS_ADDRESS\":null}},\"PrivKey\":{\"fields\":{\"data\":{\"type\":\"bytes\",\"id\":1,\"comment\":null}},\"comment\":null},\"PubKey\":{\"fields\":{\"data\":{\"type\":\"bytes\",\"id\":1,\"comment\":null}},\"comment\":null}}}}},\"mesh\":{\"nested\":{\"signal\":{\"nested\":{\"Acknowledgement\":{\"fields\":{\"messageId\":{\"type\":\"PubKey\",\"id\":1,\"comment\":null}},\"comment\":null},\"Answer\":{\"fields\":{\"accept\":{\"type\":\"bool\",\"id\":1,\"comment\":null},\"offerMessageId\":{\"type\":\"PubKey\",\"id\":2,\"comment\":\"MessageId of the Offer being answered.\"}},\"comment\":null},\"Message\":{\"fields\":{\"id\":{\"type\":\"PubKey\",\"id\":1,\"comment\":\"Sender's public key.\"},\"remoteId\":{\"type\":\"PubKey\",\"id\":2,\"comment\":\"Receiver`s public key.\"},\"topic\":{\"type\":\"PubKey\",\"id\":3,\"comment\":\"Swarm identefier.\"},\"sessionId\":{\"type\":\"PubKey\",\"id\":4,\"comment\":\"Unique connection identifier.\"},\"data\":{\"type\":\"MessageData\",\"id\":5,\"comment\":\"Message payload.\"},\"messageId\":{\"type\":\"PubKey\",\"id\":6,\"comment\":\"Unique message identifier. Used for Acknolegment and matching Anwers to Offers.\"}},\"comment\":null},\"MessageData\":{\"oneofs\":{\"payload\":{\"oneof\":[\"offer\",\"answer\",\"signal\",\"ack\"],\"comment\":null}},\"fields\":{\"offer\":{\"type\":\"Offer\",\"id\":1,\"comment\":null},\"answer\":{\"type\":\"Answer\",\"id\":2,\"comment\":null},\"signal\":{\"type\":\"Signal\",\"id\":3,\"comment\":null},\"ack\":{\"type\":\"Acknowledgement\",\"id\":4,\"comment\":null}},\"comment\":null},\"Offer\":{\"fields\":{},\"comment\":null},\"Signal\":{\"fields\":{\"json\":{\"type\":\"string\",\"id\":1,\"comment\":null}},\"comment\":null}}}}}}},\"google\":{\"nested\":{\"protobuf\":{\"nested\":{\"Any\":{\"fields\":{\"type_url\":{\"type\":\"string\",\"id\":1},\"value\":{\"type\":\"bytes\",\"id\":2}},\"comment\":null}}}}}}}");
29
+ export const schema = Schema.fromJson<TYPES, SERVICES>(schemaJson, substitutions);
@@ -0,0 +1,9 @@
1
+ //
2
+ // Copyright 2021 DXOS.org
3
+ //
4
+
5
+ import { publicKeySubstitutions } from '@dxos/protocols';
6
+
7
+ export default {
8
+ ...publicKeySubstitutions
9
+ };
@@ -2,10 +2,10 @@
2
2
  // Copyright 2020 DXOS.org
3
3
  //
4
4
 
5
- import assert from 'assert';
6
5
  import debug from 'debug';
6
+ import assert from 'node:assert';
7
7
 
8
- import { discoveryKey, keyToString } from '@dxos/crypto';
8
+ import { discoveryKey } from '@dxos/crypto';
9
9
  import { Extension, Protocol } from '@dxos/mesh-protocol';
10
10
  import { PublicKey } from '@dxos/protocols';
11
11
 
@@ -37,7 +37,7 @@ export const protocolFactory = ({ session = {}, plugins = [], getTopics }: Proto
37
37
  discoveryToPublicKey: (dk) => {
38
38
  const publicKey = getTopics().find(topic => discoveryKey(topic).equals(dk));
39
39
  if (publicKey) {
40
- protocol.setContext({ topic: keyToString(publicKey) });
40
+ protocol.setContext({ topic: PublicKey.stringify(publicKey) });
41
41
  }
42
42
  assert(publicKey, 'PublicKey not found in discovery.');
43
43
  return publicKey;
@@ -62,7 +62,7 @@ export interface Plugin {
62
62
 
63
63
  export const createProtocolFactory = (topic: PublicKey, peerId: PublicKey, plugins: Plugin[]) => protocolFactory({
64
64
  getTopics: () => [topic.asBuffer()],
65
- session: { peerId: keyToString(peerId.asBuffer()) },
65
+ session: { peerId: PublicKey.stringify(peerId.asBuffer()) },
66
66
  plugins
67
67
  });
68
68
 
@@ -72,6 +72,6 @@ export const createProtocolFactory = (topic: PublicKey, peerId: PublicKey, plugi
72
72
  */
73
73
  export const transportProtocolProvider = (rendezvousKey: Buffer, peerId: Buffer, protocolPlugin: any): ProtocolProvider => protocolFactory({
74
74
  getTopics: () => [rendezvousKey],
75
- session: { peerId: keyToString(peerId) },
75
+ session: { peerId: PublicKey.stringify(peerId) },
76
76
  plugins: [protocolPlugin]
77
77
  });
@@ -2,12 +2,13 @@
2
2
  // Copyright 2020 DXOS.org
3
3
  //
4
4
 
5
- import assert from 'assert';
5
+ import assert from 'node:assert';
6
6
 
7
7
  import { Event } from '@dxos/async';
8
8
  import { PublicKey } from '@dxos/protocols';
9
9
  import { ComplexMap, ComplexSet } from '@dxos/util';
10
10
 
11
+ import { Answer, Message } from '../proto/gen/dxos/mesh/signal';
11
12
  import { SignalApi } from './signal-api';
12
13
  import { SignalManager } from './signal-manager';
13
14
 
@@ -15,10 +16,10 @@ export class InMemorySignalManager implements SignalManager {
15
16
  readonly statusChanged = new Event<SignalApi.Status[]>();
16
17
  readonly commandTrace = new Event<SignalApi.CommandTrace>();
17
18
  readonly peerCandidatesChanged = new Event<[topic: PublicKey, candidates: PublicKey[]]>()
18
- readonly onSignal = new Event<SignalApi.SignalMessage>();
19
+ readonly onSignal = new Event<Message>();
19
20
 
20
21
  constructor (
21
- private readonly _onOffer: (message: SignalApi.SignalMessage) => Promise<SignalApi.Answer>
22
+ private readonly _onOffer: (message: Message) => Promise<Answer>
22
23
  ) {}
23
24
 
24
25
  getStatus (): SignalApi.Status[] {
@@ -48,12 +49,14 @@ export class InMemorySignalManager implements SignalManager {
48
49
  setTimeout(() => this.peerCandidatesChanged.emit([topic, Array.from(state.swarms.get(topic)!.values())]), 0);
49
50
  }
50
51
 
51
- offer (msg: SignalApi.SignalMessage) {
52
+ offer (msg: Message) {
53
+ assert(msg.remoteId);
52
54
  assert(state.connections.has(msg.remoteId), 'Peer not connected');
53
55
  return state.connections.get(msg.remoteId)!._onOffer(msg);
54
56
  }
55
57
 
56
- async signal (msg: SignalApi.SignalMessage) {
58
+ async signal (msg: Message) {
59
+ assert(msg.remoteId);
57
60
  assert(state.connections.get(msg.remoteId), 'Peer not connected');
58
61
  state.connections.get(msg.remoteId)!.onSignal.emit(msg);
59
62
  }