@dxos/edge-client 0.6.12-main.78ddbdf → 0.6.12-main.89e9959
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/lib/browser/index.mjs +291 -29
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/node/index.cjs +293 -29
- package/dist/lib/node/index.cjs.map +4 -4
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node-esm/index.mjs +291 -29
- package/dist/lib/node-esm/index.mjs.map +4 -4
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/types/src/auth.d.ts +22 -0
- package/dist/types/src/auth.d.ts.map +1 -0
- package/dist/types/src/edge-client.d.ts +19 -11
- package/dist/types/src/edge-client.d.ts.map +1 -1
- package/dist/types/src/edge-http-client.d.ts +34 -0
- package/dist/types/src/edge-http-client.d.ts.map +1 -0
- package/dist/types/src/index.d.ts +2 -0
- package/dist/types/src/index.d.ts.map +1 -1
- package/package.json +14 -11
- package/src/auth.ts +135 -0
- package/src/edge-client.test.ts +40 -8
- package/src/edge-client.ts +56 -16
- package/src/edge-http-client.ts +153 -0
- package/src/index.ts +2 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"inputs":{"packages/core/mesh/edge-client/src/protocol.ts":{"bytes":10334,"imports":[{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/protocols/buf","kind":"import-statement","external":true},{"path":"@dxos/protocols/buf/dxos/edge/messenger_pb","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true}],"format":"esm"},"packages/core/mesh/edge-client/src/defs.ts":{"bytes":1607,"imports":[{"path":"@dxos/protocols/buf","kind":"import-statement","external":true},{"path":"@dxos/protocols/buf/dxos/edge/messenger_pb","kind":"import-statement","external":true},{"path":"packages/core/mesh/edge-client/src/protocol.ts","kind":"import-statement","original":"./protocol"}],"format":"esm"},"packages/core/mesh/edge-client/src/errors.ts":{"bytes":1265,"imports":[],"format":"esm"},"packages/core/mesh/edge-client/src/persistent-lifecycle.ts":{"bytes":10868,"imports":[{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true}],"format":"esm"},"packages/core/mesh/edge-client/src/edge-client.ts":{"bytes":
|
|
1
|
+
{"inputs":{"packages/core/mesh/edge-client/src/protocol.ts":{"bytes":10334,"imports":[{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/protocols/buf","kind":"import-statement","external":true},{"path":"@dxos/protocols/buf/dxos/edge/messenger_pb","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true}],"format":"esm"},"packages/core/mesh/edge-client/src/defs.ts":{"bytes":1607,"imports":[{"path":"@dxos/protocols/buf","kind":"import-statement","external":true},{"path":"@dxos/protocols/buf/dxos/edge/messenger_pb","kind":"import-statement","external":true},{"path":"packages/core/mesh/edge-client/src/protocol.ts","kind":"import-statement","original":"./protocol"}],"format":"esm"},"packages/core/mesh/edge-client/src/errors.ts":{"bytes":1265,"imports":[],"format":"esm"},"packages/core/mesh/edge-client/src/persistent-lifecycle.ts":{"bytes":10868,"imports":[{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true}],"format":"esm"},"packages/core/mesh/edge-client/src/edge-client.ts":{"bytes":32385,"imports":[{"path":"isomorphic-ws","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/crypto","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/protocols/buf","kind":"import-statement","external":true},{"path":"@dxos/protocols/buf/dxos/edge/messenger_pb","kind":"import-statement","external":true},{"path":"@dxos/protocols/proto","kind":"import-statement","external":true},{"path":"packages/core/mesh/edge-client/src/defs.ts","kind":"import-statement","original":"./defs"},{"path":"packages/core/mesh/edge-client/src/errors.ts","kind":"import-statement","original":"./errors"},{"path":"packages/core/mesh/edge-client/src/persistent-lifecycle.ts","kind":"import-statement","original":"./persistent-lifecycle"},{"path":"packages/core/mesh/edge-client/src/protocol.ts","kind":"import-statement","original":"./protocol"}],"format":"esm"},"packages/core/mesh/edge-client/src/auth.ts":{"bytes":11621,"imports":[{"path":"@dxos/credentials","kind":"import-statement","external":true},{"path":"@dxos/keyring","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true}],"format":"esm"},"packages/core/mesh/edge-client/src/edge-http-client.ts":{"bytes":15155,"imports":[{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/protocols","kind":"import-statement","external":true}],"format":"esm"},"packages/core/mesh/edge-client/src/index.ts":{"bytes":1127,"imports":[{"path":"@dxos/protocols/buf/dxos/edge/messenger_pb","kind":"import-statement","external":true},{"path":"packages/core/mesh/edge-client/src/edge-client.ts","kind":"import-statement","original":"./edge-client"},{"path":"packages/core/mesh/edge-client/src/defs.ts","kind":"import-statement","original":"./defs"},{"path":"packages/core/mesh/edge-client/src/protocol.ts","kind":"import-statement","original":"./protocol"},{"path":"packages/core/mesh/edge-client/src/errors.ts","kind":"import-statement","original":"./errors"},{"path":"packages/core/mesh/edge-client/src/auth.ts","kind":"import-statement","original":"./auth"},{"path":"packages/core/mesh/edge-client/src/edge-http-client.ts","kind":"import-statement","original":"./edge-http-client"}],"format":"esm"},"packages/core/mesh/edge-client/src/testing/test-utils.ts":{"bytes":12455,"imports":[{"path":"isomorphic-ws","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/protocols/buf","kind":"import-statement","external":true},{"path":"@dxos/protocols/buf/dxos/edge/messenger_pb","kind":"import-statement","external":true},{"path":"packages/core/mesh/edge-client/src/defs.ts","kind":"import-statement","original":"../defs"},{"path":"packages/core/mesh/edge-client/src/protocol.ts","kind":"import-statement","original":"../protocol"}],"format":"esm"},"packages/core/mesh/edge-client/src/testing/index.ts":{"bytes":516,"imports":[{"path":"packages/core/mesh/edge-client/src/testing/test-utils.ts","kind":"import-statement","original":"./test-utils"}],"format":"esm"}},"outputs":{"packages/core/mesh/edge-client/dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":34449},"packages/core/mesh/edge-client/dist/lib/browser/index.mjs":{"imports":[{"path":"packages/core/mesh/edge-client/dist/lib/browser/chunk-ZWJXA37R.mjs","kind":"import-statement"},{"path":"@dxos/protocols/buf/dxos/edge/messenger_pb","kind":"import-statement","external":true},{"path":"isomorphic-ws","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/crypto","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/protocols/buf","kind":"import-statement","external":true},{"path":"@dxos/protocols/buf/dxos/edge/messenger_pb","kind":"import-statement","external":true},{"path":"@dxos/protocols/proto","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/credentials","kind":"import-statement","external":true},{"path":"@dxos/keyring","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/protocols","kind":"import-statement","external":true}],"exports":["EdgeClient","EdgeConnectionClosedError","EdgeHttpClient","EdgeIdentityChangedError","Protocol","createChainEdgeIdentity","createDeviceEdgeIdentity","createEphemeralEdgeIdentity","createStubEdgeIdentity","createTestHaloEdgeIdentity","getTypename","protocol","toUint8Array"],"entryPoint":"packages/core/mesh/edge-client/src/index.ts","inputs":{"packages/core/mesh/edge-client/src/index.ts":{"bytesInOutput":60},"packages/core/mesh/edge-client/src/edge-client.ts":{"bytesInOutput":7977},"packages/core/mesh/edge-client/src/errors.ts":{"bytesInOutput":232},"packages/core/mesh/edge-client/src/persistent-lifecycle.ts":{"bytesInOutput":3015},"packages/core/mesh/edge-client/src/auth.ts":{"bytesInOutput":2681},"packages/core/mesh/edge-client/src/edge-http-client.ts":{"bytesInOutput":3649}},"bytes":18414},"packages/core/mesh/edge-client/dist/lib/browser/testing/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":6341},"packages/core/mesh/edge-client/dist/lib/browser/testing/index.mjs":{"imports":[{"path":"packages/core/mesh/edge-client/dist/lib/browser/chunk-ZWJXA37R.mjs","kind":"import-statement"},{"path":"isomorphic-ws","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/protocols/buf","kind":"import-statement","external":true},{"path":"@dxos/protocols/buf/dxos/edge/messenger_pb","kind":"import-statement","external":true}],"exports":["DEFAULT_PORT","createTestEdgeWsServer"],"entryPoint":"packages/core/mesh/edge-client/src/testing/index.ts","inputs":{"packages/core/mesh/edge-client/src/testing/test-utils.ts":{"bytesInOutput":3276},"packages/core/mesh/edge-client/src/testing/index.ts":{"bytesInOutput":0}},"bytes":3493},"packages/core/mesh/edge-client/dist/lib/browser/chunk-ZWJXA37R.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":5676},"packages/core/mesh/edge-client/dist/lib/browser/chunk-ZWJXA37R.mjs":{"imports":[{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/protocols/buf","kind":"import-statement","external":true},{"path":"@dxos/protocols/buf/dxos/edge/messenger_pb","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@dxos/protocols/buf","kind":"import-statement","external":true},{"path":"@dxos/protocols/buf/dxos/edge/messenger_pb","kind":"import-statement","external":true}],"exports":["Protocol","getTypename","protocol","toUint8Array"],"inputs":{"packages/core/mesh/edge-client/src/protocol.ts":{"bytesInOutput":2600},"packages/core/mesh/edge-client/src/defs.ts":{"bytesInOutput":298}},"bytes":3106}}}
|
package/dist/lib/node/index.cjs
CHANGED
|
@@ -31,8 +31,14 @@ var node_exports = {};
|
|
|
31
31
|
__export(node_exports, {
|
|
32
32
|
EdgeClient: () => EdgeClient,
|
|
33
33
|
EdgeConnectionClosedError: () => EdgeConnectionClosedError,
|
|
34
|
+
EdgeHttpClient: () => EdgeHttpClient,
|
|
34
35
|
EdgeIdentityChangedError: () => EdgeIdentityChangedError,
|
|
35
36
|
Protocol: () => import_chunk_ANV2HBEH.Protocol,
|
|
37
|
+
createChainEdgeIdentity: () => createChainEdgeIdentity,
|
|
38
|
+
createDeviceEdgeIdentity: () => createDeviceEdgeIdentity,
|
|
39
|
+
createEphemeralEdgeIdentity: () => createEphemeralEdgeIdentity,
|
|
40
|
+
createStubEdgeIdentity: () => createStubEdgeIdentity,
|
|
41
|
+
createTestHaloEdgeIdentity: () => createTestHaloEdgeIdentity,
|
|
36
42
|
getTypename: () => import_chunk_ANV2HBEH.getTypename,
|
|
37
43
|
protocol: () => import_chunk_ANV2HBEH.protocol,
|
|
38
44
|
toUint8Array: () => import_chunk_ANV2HBEH.toUint8Array
|
|
@@ -43,13 +49,22 @@ __reExport(node_exports, require("@dxos/protocols/buf/dxos/edge/messenger_pb"),
|
|
|
43
49
|
var import_isomorphic_ws = __toESM(require("isomorphic-ws"));
|
|
44
50
|
var import_async = require("@dxos/async");
|
|
45
51
|
var import_context = require("@dxos/context");
|
|
52
|
+
var import_crypto = require("@dxos/crypto");
|
|
46
53
|
var import_log = require("@dxos/log");
|
|
47
54
|
var import_buf = require("@dxos/protocols/buf");
|
|
48
55
|
var import_messenger_pb = require("@dxos/protocols/buf/dxos/edge/messenger_pb");
|
|
56
|
+
var import_proto = require("@dxos/protocols/proto");
|
|
49
57
|
var import_async2 = require("@dxos/async");
|
|
50
58
|
var import_context2 = require("@dxos/context");
|
|
51
59
|
var import_debug = require("@dxos/debug");
|
|
52
60
|
var import_log2 = require("@dxos/log");
|
|
61
|
+
var import_credentials = require("@dxos/credentials");
|
|
62
|
+
var import_keyring = require("@dxos/keyring");
|
|
63
|
+
var import_keys = require("@dxos/keys");
|
|
64
|
+
var import_async3 = require("@dxos/async");
|
|
65
|
+
var import_context3 = require("@dxos/context");
|
|
66
|
+
var import_log3 = require("@dxos/log");
|
|
67
|
+
var import_protocols = require("@dxos/protocols");
|
|
53
68
|
var EdgeConnectionClosedError = class extends Error {
|
|
54
69
|
constructor() {
|
|
55
70
|
super("Edge connection closed.");
|
|
@@ -150,11 +165,11 @@ _ts_decorate([
|
|
|
150
165
|
var __dxlog_file2 = "/home/runner/work/dxos/dxos/packages/core/mesh/edge-client/src/edge-client.ts";
|
|
151
166
|
var DEFAULT_TIMEOUT = 1e4;
|
|
152
167
|
var SIGNAL_KEEPALIVE_INTERVAL = 5e3;
|
|
168
|
+
var DISABLE_AUTH = true;
|
|
153
169
|
var EdgeClient = class extends import_context.Resource {
|
|
154
|
-
constructor(
|
|
170
|
+
constructor(_identity, _config) {
|
|
155
171
|
super();
|
|
156
|
-
this.
|
|
157
|
-
this._peerKey = _peerKey;
|
|
172
|
+
this._identity = _identity;
|
|
158
173
|
this._config = _config;
|
|
159
174
|
this.reconnect = new import_async.Event();
|
|
160
175
|
this.connected = new import_async.Event();
|
|
@@ -173,19 +188,21 @@ var EdgeClient = class extends import_context.Resource {
|
|
|
173
188
|
get info() {
|
|
174
189
|
return {
|
|
175
190
|
open: this.isOpen,
|
|
176
|
-
identity: this.
|
|
177
|
-
device: this.
|
|
191
|
+
identity: this._identity.identityKey,
|
|
192
|
+
device: this._identity.peerKey
|
|
178
193
|
};
|
|
179
194
|
}
|
|
195
|
+
get isConnected() {
|
|
196
|
+
return Boolean(this._ws) && this._ready.state === import_async.TriggerState.RESOLVED;
|
|
197
|
+
}
|
|
180
198
|
get identityKey() {
|
|
181
|
-
return this.
|
|
199
|
+
return this._identity.identityKey;
|
|
182
200
|
}
|
|
183
201
|
get peerKey() {
|
|
184
|
-
return this.
|
|
202
|
+
return this._identity.peerKey;
|
|
185
203
|
}
|
|
186
|
-
setIdentity(
|
|
187
|
-
this.
|
|
188
|
-
this._identityKey = identityKey;
|
|
204
|
+
setIdentity(identity) {
|
|
205
|
+
this._identity = identity;
|
|
189
206
|
this._persistentLifecycle.scheduleRestart();
|
|
190
207
|
}
|
|
191
208
|
addListener(listener) {
|
|
@@ -200,7 +217,7 @@ var EdgeClient = class extends import_context.Resource {
|
|
|
200
217
|
info: this.info
|
|
201
218
|
}, {
|
|
202
219
|
F: __dxlog_file2,
|
|
203
|
-
L:
|
|
220
|
+
L: 119,
|
|
204
221
|
S: this,
|
|
205
222
|
C: (f, a) => f(...a)
|
|
206
223
|
});
|
|
@@ -209,7 +226,7 @@ var EdgeClient = class extends import_context.Resource {
|
|
|
209
226
|
err
|
|
210
227
|
}, {
|
|
211
228
|
F: __dxlog_file2,
|
|
212
|
-
L:
|
|
229
|
+
L: 121,
|
|
213
230
|
S: this,
|
|
214
231
|
C: (f, a) => f(...a)
|
|
215
232
|
});
|
|
@@ -220,22 +237,41 @@ var EdgeClient = class extends import_context.Resource {
|
|
|
220
237
|
*/
|
|
221
238
|
async _close() {
|
|
222
239
|
(0, import_log.log)("closing...", {
|
|
223
|
-
peerKey: this.
|
|
240
|
+
peerKey: this._identity.peerKey
|
|
224
241
|
}, {
|
|
225
242
|
F: __dxlog_file2,
|
|
226
|
-
L:
|
|
243
|
+
L: 129,
|
|
227
244
|
S: this,
|
|
228
245
|
C: (f, a) => f(...a)
|
|
229
246
|
});
|
|
230
247
|
await this._persistentLifecycle.close();
|
|
231
248
|
}
|
|
232
249
|
async _openWebSocket() {
|
|
233
|
-
|
|
234
|
-
|
|
250
|
+
let protocolHeader;
|
|
251
|
+
if (!DISABLE_AUTH) {
|
|
252
|
+
const challenge = (0, import_crypto.randomBytes)(32);
|
|
253
|
+
const credential = await this._identity.presentCredentials({
|
|
254
|
+
challenge
|
|
255
|
+
});
|
|
256
|
+
protocolHeader = encodePresentationIntoAuthHeader(credential);
|
|
257
|
+
}
|
|
258
|
+
const url = new URL(`/ws/${this._identity.identityKey}/${this._identity.peerKey}`, this._config.socketEndpoint);
|
|
259
|
+
(0, import_log.log)("Opening websocket", {
|
|
260
|
+
url: url.toString(),
|
|
261
|
+
protocolHeader
|
|
262
|
+
}, {
|
|
263
|
+
F: __dxlog_file2,
|
|
264
|
+
L: 144,
|
|
265
|
+
S: this,
|
|
266
|
+
C: (f, a) => f(...a)
|
|
267
|
+
});
|
|
268
|
+
this._ws = new import_isomorphic_ws.default(url, protocolHeader ? [
|
|
269
|
+
protocolHeader
|
|
270
|
+
] : []);
|
|
235
271
|
this._ws.onopen = () => {
|
|
236
272
|
(0, import_log.log)("opened", this.info, {
|
|
237
273
|
F: __dxlog_file2,
|
|
238
|
-
L:
|
|
274
|
+
L: 148,
|
|
239
275
|
S: this,
|
|
240
276
|
C: (f, a) => f(...a)
|
|
241
277
|
});
|
|
@@ -245,7 +281,7 @@ var EdgeClient = class extends import_context.Resource {
|
|
|
245
281
|
this._ws.onclose = () => {
|
|
246
282
|
(0, import_log.log)("closed", this.info, {
|
|
247
283
|
F: __dxlog_file2,
|
|
248
|
-
L:
|
|
284
|
+
L: 153,
|
|
249
285
|
S: this,
|
|
250
286
|
C: (f, a) => f(...a)
|
|
251
287
|
});
|
|
@@ -257,7 +293,7 @@ var EdgeClient = class extends import_context.Resource {
|
|
|
257
293
|
info: event.message
|
|
258
294
|
}, {
|
|
259
295
|
F: __dxlog_file2,
|
|
260
|
-
L:
|
|
296
|
+
L: 157,
|
|
261
297
|
S: this,
|
|
262
298
|
C: (f, a) => f(...a)
|
|
263
299
|
});
|
|
@@ -271,11 +307,11 @@ var EdgeClient = class extends import_context.Resource {
|
|
|
271
307
|
const data = await (0, import_chunk_ANV2HBEH.toUint8Array)(event.data);
|
|
272
308
|
const message = import_buf.buf.fromBinary(import_messenger_pb.MessageSchema, data);
|
|
273
309
|
(0, import_log.log)("received", {
|
|
274
|
-
peerKey: this.
|
|
310
|
+
peerKey: this._identity.peerKey,
|
|
275
311
|
payload: import_chunk_ANV2HBEH.protocol.getPayloadType(message)
|
|
276
312
|
}, {
|
|
277
313
|
F: __dxlog_file2,
|
|
278
|
-
L:
|
|
314
|
+
L: 170,
|
|
279
315
|
S: this,
|
|
280
316
|
C: (f, a) => f(...a)
|
|
281
317
|
});
|
|
@@ -289,7 +325,7 @@ var EdgeClient = class extends import_context.Resource {
|
|
|
289
325
|
payload: import_chunk_ANV2HBEH.protocol.getPayloadType(message)
|
|
290
326
|
}, {
|
|
291
327
|
F: __dxlog_file2,
|
|
292
|
-
L:
|
|
328
|
+
L: 176,
|
|
293
329
|
S: this,
|
|
294
330
|
C: (f, a) => f(...a)
|
|
295
331
|
});
|
|
@@ -302,7 +338,7 @@ var EdgeClient = class extends import_context.Resource {
|
|
|
302
338
|
});
|
|
303
339
|
this._keepaliveCtx = new import_context.Context(void 0, {
|
|
304
340
|
F: __dxlog_file2,
|
|
305
|
-
L:
|
|
341
|
+
L: 186
|
|
306
342
|
});
|
|
307
343
|
(0, import_async.scheduleTaskInterval)(this._keepaliveCtx, async () => {
|
|
308
344
|
this._ws?.send("__ping__");
|
|
@@ -337,7 +373,7 @@ var EdgeClient = class extends import_context.Resource {
|
|
|
337
373
|
err
|
|
338
374
|
}, {
|
|
339
375
|
F: __dxlog_file2,
|
|
340
|
-
L:
|
|
376
|
+
L: 222,
|
|
341
377
|
S: this,
|
|
342
378
|
C: (f, a) => f(...a)
|
|
343
379
|
});
|
|
@@ -351,7 +387,7 @@ var EdgeClient = class extends import_context.Resource {
|
|
|
351
387
|
if (this._ready.state !== import_async.TriggerState.RESOLVED) {
|
|
352
388
|
(0, import_log.log)("waiting for websocket to become ready", void 0, {
|
|
353
389
|
F: __dxlog_file2,
|
|
354
|
-
L:
|
|
390
|
+
L: 232,
|
|
355
391
|
S: this,
|
|
356
392
|
C: (f, a) => f(...a)
|
|
357
393
|
});
|
|
@@ -362,15 +398,15 @@ var EdgeClient = class extends import_context.Resource {
|
|
|
362
398
|
if (!this._ws) {
|
|
363
399
|
throw new EdgeConnectionClosedError();
|
|
364
400
|
}
|
|
365
|
-
if (message.source && (message.source.peerKey !== this.
|
|
401
|
+
if (message.source && (message.source.peerKey !== this._identity.peerKey || message.source.identityKey !== this.identityKey)) {
|
|
366
402
|
throw new EdgeIdentityChangedError();
|
|
367
403
|
}
|
|
368
404
|
(0, import_log.log)("sending...", {
|
|
369
|
-
peerKey: this.
|
|
405
|
+
peerKey: this._identity.peerKey,
|
|
370
406
|
payload: import_chunk_ANV2HBEH.protocol.getPayloadType(message)
|
|
371
407
|
}, {
|
|
372
408
|
F: __dxlog_file2,
|
|
373
|
-
L:
|
|
409
|
+
L: 245,
|
|
374
410
|
S: this,
|
|
375
411
|
C: (f, a) => f(...a)
|
|
376
412
|
});
|
|
@@ -383,19 +419,247 @@ var EdgeClient = class extends import_context.Resource {
|
|
|
383
419
|
void this._heartBeatContext?.dispose();
|
|
384
420
|
this._heartBeatContext = new import_context.Context(void 0, {
|
|
385
421
|
F: __dxlog_file2,
|
|
386
|
-
L:
|
|
422
|
+
L: 254
|
|
387
423
|
});
|
|
388
424
|
(0, import_async.scheduleTask)(this._heartBeatContext, () => {
|
|
389
425
|
this._persistentLifecycle.scheduleRestart();
|
|
390
426
|
}, 2 * SIGNAL_KEEPALIVE_INTERVAL);
|
|
391
427
|
}
|
|
392
428
|
};
|
|
429
|
+
var encodePresentationIntoAuthHeader = (presentation) => {
|
|
430
|
+
const encoded = import_proto.schema.getCodecForType("dxos.halo.credentials.Presentation").encode(presentation);
|
|
431
|
+
const encodedToken = Buffer.from(encoded).toString("base64").replace(/=*$/, "").replaceAll("/", "|");
|
|
432
|
+
return `base64url.bearer.authorization.dxos.org.${encodedToken}`;
|
|
433
|
+
};
|
|
434
|
+
var createDeviceEdgeIdentity = async (signer, key) => {
|
|
435
|
+
return {
|
|
436
|
+
identityKey: key.toHex(),
|
|
437
|
+
peerKey: key.toHex(),
|
|
438
|
+
presentCredentials: async ({ challenge }) => {
|
|
439
|
+
return (0, import_credentials.signPresentation)({
|
|
440
|
+
presentation: {
|
|
441
|
+
credentials: [
|
|
442
|
+
// Verifier requires at least one credential in the presentation to establish the subject.
|
|
443
|
+
await (0, import_credentials.createCredential)({
|
|
444
|
+
assertion: {
|
|
445
|
+
"@type": "dxos.halo.credentials.Auth"
|
|
446
|
+
},
|
|
447
|
+
issuer: key,
|
|
448
|
+
subject: key,
|
|
449
|
+
signer
|
|
450
|
+
})
|
|
451
|
+
]
|
|
452
|
+
},
|
|
453
|
+
signer,
|
|
454
|
+
signerKey: key,
|
|
455
|
+
nonce: challenge
|
|
456
|
+
});
|
|
457
|
+
}
|
|
458
|
+
};
|
|
459
|
+
};
|
|
460
|
+
var createChainEdgeIdentity = async (signer, identityKey, peerKey, chain, credentials) => {
|
|
461
|
+
const credentialsToSign = credentials.length > 0 ? credentials : [
|
|
462
|
+
await (0, import_credentials.createCredential)({
|
|
463
|
+
assertion: {
|
|
464
|
+
"@type": "dxos.halo.credentials.Auth"
|
|
465
|
+
},
|
|
466
|
+
issuer: identityKey,
|
|
467
|
+
subject: identityKey,
|
|
468
|
+
signer,
|
|
469
|
+
chain,
|
|
470
|
+
signingKey: peerKey
|
|
471
|
+
})
|
|
472
|
+
];
|
|
473
|
+
return {
|
|
474
|
+
identityKey: identityKey.toHex(),
|
|
475
|
+
peerKey: peerKey.toHex(),
|
|
476
|
+
presentCredentials: async ({ challenge }) => {
|
|
477
|
+
return (0, import_credentials.signPresentation)({
|
|
478
|
+
presentation: {
|
|
479
|
+
credentials: credentialsToSign
|
|
480
|
+
},
|
|
481
|
+
signer,
|
|
482
|
+
nonce: challenge,
|
|
483
|
+
signerKey: peerKey,
|
|
484
|
+
chain
|
|
485
|
+
});
|
|
486
|
+
}
|
|
487
|
+
};
|
|
488
|
+
};
|
|
489
|
+
var createEphemeralEdgeIdentity = async () => {
|
|
490
|
+
const keyring = new import_keyring.Keyring();
|
|
491
|
+
const key = await keyring.createKey();
|
|
492
|
+
return createDeviceEdgeIdentity(keyring, key);
|
|
493
|
+
};
|
|
494
|
+
var createTestHaloEdgeIdentity = async (signer, identityKey, deviceKey) => {
|
|
495
|
+
const deviceAdmission = await (0, import_credentials.createCredential)({
|
|
496
|
+
assertion: {
|
|
497
|
+
"@type": "dxos.halo.credentials.AuthorizedDevice",
|
|
498
|
+
deviceKey,
|
|
499
|
+
identityKey
|
|
500
|
+
},
|
|
501
|
+
issuer: identityKey,
|
|
502
|
+
subject: deviceKey,
|
|
503
|
+
signer
|
|
504
|
+
});
|
|
505
|
+
return createChainEdgeIdentity(signer, identityKey, deviceKey, {
|
|
506
|
+
credential: deviceAdmission
|
|
507
|
+
}, [
|
|
508
|
+
await (0, import_credentials.createCredential)({
|
|
509
|
+
assertion: {
|
|
510
|
+
"@type": "dxos.halo.credentials.Auth"
|
|
511
|
+
},
|
|
512
|
+
issuer: identityKey,
|
|
513
|
+
subject: identityKey,
|
|
514
|
+
signer
|
|
515
|
+
})
|
|
516
|
+
]);
|
|
517
|
+
};
|
|
518
|
+
var createStubEdgeIdentity = () => {
|
|
519
|
+
const identityKey = import_keys.PublicKey.random();
|
|
520
|
+
const deviceKey = import_keys.PublicKey.random();
|
|
521
|
+
return {
|
|
522
|
+
identityKey: identityKey.toHex(),
|
|
523
|
+
peerKey: deviceKey.toHex(),
|
|
524
|
+
presentCredentials: async () => {
|
|
525
|
+
throw new Error("Stub identity does not support authentication.");
|
|
526
|
+
}
|
|
527
|
+
};
|
|
528
|
+
};
|
|
529
|
+
var __dxlog_file3 = "/home/runner/work/dxos/dxos/packages/core/mesh/edge-client/src/edge-http-client.ts";
|
|
530
|
+
var DEFAULT_RETRY_TIMEOUT = 1500;
|
|
531
|
+
var DEFAULT_RETRY_JITTER = 500;
|
|
532
|
+
var DEFAULT_MAX_RETRIES_COUNT = 3;
|
|
533
|
+
var EdgeHttpClient = class {
|
|
534
|
+
constructor(baseUrl) {
|
|
535
|
+
const url = new URL(baseUrl);
|
|
536
|
+
url.protocol = "https";
|
|
537
|
+
this._baseUrl = url.toString();
|
|
538
|
+
(0, import_log3.log)("created", {
|
|
539
|
+
url: this._baseUrl
|
|
540
|
+
}, {
|
|
541
|
+
F: __dxlog_file3,
|
|
542
|
+
L: 27,
|
|
543
|
+
S: this,
|
|
544
|
+
C: (f, a) => f(...a)
|
|
545
|
+
});
|
|
546
|
+
}
|
|
547
|
+
getCredentialsForNotarization(spaceId, args) {
|
|
548
|
+
return this._call(`/spaces/${spaceId}/notarization`, {
|
|
549
|
+
...args,
|
|
550
|
+
method: "GET"
|
|
551
|
+
});
|
|
552
|
+
}
|
|
553
|
+
async notarizeCredentials(spaceId, body, args) {
|
|
554
|
+
await this._call(`/spaces/${spaceId}/notarization`, {
|
|
555
|
+
...args,
|
|
556
|
+
body,
|
|
557
|
+
method: "POST"
|
|
558
|
+
});
|
|
559
|
+
}
|
|
560
|
+
async _call(path, args) {
|
|
561
|
+
const requestContext = args.context ?? new import_context3.Context(void 0, {
|
|
562
|
+
F: __dxlog_file3,
|
|
563
|
+
L: 43
|
|
564
|
+
});
|
|
565
|
+
const shouldRetry = createRetryHandler(args);
|
|
566
|
+
const request = createRequest(args);
|
|
567
|
+
const url = `${this._baseUrl}${path.startsWith("/") ? path.slice(1) : path}`;
|
|
568
|
+
import_log3.log.info("call", {
|
|
569
|
+
method: args.method,
|
|
570
|
+
path
|
|
571
|
+
}, {
|
|
572
|
+
F: __dxlog_file3,
|
|
573
|
+
L: 48,
|
|
574
|
+
S: this,
|
|
575
|
+
C: (f, a) => f(...a)
|
|
576
|
+
});
|
|
577
|
+
while (true) {
|
|
578
|
+
let processingError;
|
|
579
|
+
let retryAfterHeaderValue = Number.NaN;
|
|
580
|
+
try {
|
|
581
|
+
const response = await fetch(url, request);
|
|
582
|
+
retryAfterHeaderValue = Number(response.headers.get("Retry-After"));
|
|
583
|
+
if (response.ok) {
|
|
584
|
+
const body = await response.json();
|
|
585
|
+
if (body.success) {
|
|
586
|
+
return body.data;
|
|
587
|
+
}
|
|
588
|
+
const isNonRetryable = body.errorData != null;
|
|
589
|
+
if (isNonRetryable) {
|
|
590
|
+
throw new import_protocols.EdgeCallFailedError(body.reason, body.errorData);
|
|
591
|
+
}
|
|
592
|
+
processingError = new import_protocols.EdgeCallFailedError(body.reason);
|
|
593
|
+
} else {
|
|
594
|
+
processingError = import_protocols.EdgeCallFailedError.fromFailureResponse(response);
|
|
595
|
+
if (!isRetryable(response.status)) {
|
|
596
|
+
throw processingError;
|
|
597
|
+
}
|
|
598
|
+
}
|
|
599
|
+
} catch (error) {
|
|
600
|
+
processingError = import_protocols.EdgeCallFailedError.fromProcessingFailureCause(error);
|
|
601
|
+
}
|
|
602
|
+
if (await shouldRetry(requestContext, retryAfterHeaderValue)) {
|
|
603
|
+
import_log3.log.info("retrying edge request", {
|
|
604
|
+
path,
|
|
605
|
+
processingError
|
|
606
|
+
}, {
|
|
607
|
+
F: __dxlog_file3,
|
|
608
|
+
L: 81,
|
|
609
|
+
S: this,
|
|
610
|
+
C: (f, a) => f(...a)
|
|
611
|
+
});
|
|
612
|
+
} else {
|
|
613
|
+
throw processingError;
|
|
614
|
+
}
|
|
615
|
+
}
|
|
616
|
+
}
|
|
617
|
+
};
|
|
618
|
+
var createRequest = (args) => {
|
|
619
|
+
return {
|
|
620
|
+
method: args.method,
|
|
621
|
+
body: args.body && JSON.stringify(args.body)
|
|
622
|
+
};
|
|
623
|
+
};
|
|
624
|
+
var isRetryable = (status) => {
|
|
625
|
+
if (status === 501) {
|
|
626
|
+
return false;
|
|
627
|
+
}
|
|
628
|
+
return !(status >= 400 && status < 500);
|
|
629
|
+
};
|
|
630
|
+
var createRetryHandler = (args) => {
|
|
631
|
+
if (!args.retry || args.retry.count < 1) {
|
|
632
|
+
return async () => false;
|
|
633
|
+
}
|
|
634
|
+
let retries = 0;
|
|
635
|
+
const maxRetries = args.retry.count ?? DEFAULT_MAX_RETRIES_COUNT;
|
|
636
|
+
const baseTimeout = args.retry.timeout ?? DEFAULT_RETRY_TIMEOUT;
|
|
637
|
+
const jitter = args.retry.jitter ?? DEFAULT_RETRY_JITTER;
|
|
638
|
+
return async (ctx, retryAfter) => {
|
|
639
|
+
if (++retries > maxRetries || ctx.disposed) {
|
|
640
|
+
return false;
|
|
641
|
+
}
|
|
642
|
+
if (retryAfter) {
|
|
643
|
+
await (0, import_async3.sleep)(retryAfter);
|
|
644
|
+
} else {
|
|
645
|
+
const timeout = baseTimeout + Math.random() * jitter;
|
|
646
|
+
await (0, import_async3.sleep)(timeout);
|
|
647
|
+
}
|
|
648
|
+
return true;
|
|
649
|
+
};
|
|
650
|
+
};
|
|
393
651
|
// Annotate the CommonJS export names for ESM import in node:
|
|
394
652
|
0 && (module.exports = {
|
|
395
653
|
EdgeClient,
|
|
396
654
|
EdgeConnectionClosedError,
|
|
655
|
+
EdgeHttpClient,
|
|
397
656
|
EdgeIdentityChangedError,
|
|
398
657
|
Protocol,
|
|
658
|
+
createChainEdgeIdentity,
|
|
659
|
+
createDeviceEdgeIdentity,
|
|
660
|
+
createEphemeralEdgeIdentity,
|
|
661
|
+
createStubEdgeIdentity,
|
|
662
|
+
createTestHaloEdgeIdentity,
|
|
399
663
|
getTypename,
|
|
400
664
|
protocol,
|
|
401
665
|
toUint8Array,
|