@dxos/edge-client 0.8.4-main.406dc2a → 0.8.4-main.548089c

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.
@@ -13,22 +13,13 @@ import { invariant } from "@dxos/invariant";
13
13
  import { buf, bufWkt } from "@dxos/protocols/buf";
14
14
  import { MessageSchema } from "@dxos/protocols/buf/dxos/edge/messenger_pb";
15
15
  import { bufferToArray } from "@dxos/util";
16
- function _define_property(obj, key, value) {
17
- if (key in obj) {
18
- Object.defineProperty(obj, key, {
19
- value,
20
- enumerable: true,
21
- configurable: true,
22
- writable: true
23
- });
24
- } else {
25
- obj[key] = value;
26
- }
27
- return obj;
28
- }
29
16
  var __dxlog_file = "/__w/dxos/dxos/packages/core/mesh/edge-client/src/protocol.ts";
30
17
  var getTypename = (typeName) => `type.googleapis.com/${typeName}`;
31
18
  var Protocol = class {
19
+ _typeRegistry;
20
+ constructor(types) {
21
+ this._typeRegistry = buf.createRegistry(...types);
22
+ }
32
23
  get typeRegistry() {
33
24
  return this._typeRegistry;
34
25
  }
@@ -103,10 +94,6 @@ var Protocol = class {
103
94
  payload: payload ? bufWkt.anyPack(type, buf.create(type, payload)) : void 0
104
95
  });
105
96
  }
106
- constructor(types) {
107
- _define_property(this, "_typeRegistry", void 0);
108
- this._typeRegistry = buf.createRegistry(...types);
109
- }
110
97
  };
111
98
  var toUint8Array = async (data) => {
112
99
  if (data instanceof Buffer) {
@@ -127,19 +114,6 @@ var protocol = new Protocol([
127
114
  ]);
128
115
 
129
116
  // src/edge-ws-muxer.ts
130
- function _define_property2(obj, key, value) {
131
- if (key in obj) {
132
- Object.defineProperty(obj, key, {
133
- value,
134
- enumerable: true,
135
- configurable: true,
136
- writable: true
137
- });
138
- } else {
139
- obj[key] = value;
140
- }
141
- return obj;
142
- }
143
117
  var __dxlog_file2 = "/__w/dxos/dxos/packages/core/mesh/edge-client/src/edge-ws-muxer.ts";
144
118
  var FLAG_SEGMENT_SEQ = 1;
145
119
  var FLAG_SEGMENT_SEQ_TERMINATED = 1 << 1;
@@ -149,6 +123,16 @@ var MAX_CHUNK_LENGTH = 16384;
149
123
  var MAX_BUFFERED_AMOUNT = CLOUDFLARE_MESSAGE_MAX_BYTES;
150
124
  var BUFFER_FULL_BACKOFF_TIMEOUT = 100;
151
125
  var WebSocketMuxer = class {
126
+ _ws;
127
+ _inMessageAccumulator = /* @__PURE__ */ new Map();
128
+ _outMessageChunks = /* @__PURE__ */ new Map();
129
+ _outMessageChannelByService = /* @__PURE__ */ new Map();
130
+ _sendTimeout;
131
+ _maxChunkLength;
132
+ constructor(_ws, config) {
133
+ this._ws = _ws;
134
+ this._maxChunkLength = config?.maxChunkLength ?? MAX_CHUNK_LENGTH;
135
+ }
152
136
  /**
153
137
  * Resolves when all the message chunks get enqueued for sending.
154
138
  */
@@ -303,19 +287,6 @@ var WebSocketMuxer = class {
303
287
  }
304
288
  return id;
305
289
  }
306
- constructor(_ws, config) {
307
- _define_property2(this, "_ws", void 0);
308
- _define_property2(this, "_inMessageAccumulator", void 0);
309
- _define_property2(this, "_outMessageChunks", void 0);
310
- _define_property2(this, "_outMessageChannelByService", void 0);
311
- _define_property2(this, "_sendTimeout", void 0);
312
- _define_property2(this, "_maxChunkLength", void 0);
313
- this._ws = _ws;
314
- this._inMessageAccumulator = /* @__PURE__ */ new Map();
315
- this._outMessageChunks = /* @__PURE__ */ new Map();
316
- this._outMessageChannelByService = /* @__PURE__ */ new Map();
317
- this._maxChunkLength = config?.maxChunkLength ?? MAX_CHUNK_LENGTH;
318
- }
319
290
  };
320
291
 
321
292
  export {
@@ -327,4 +298,4 @@ export {
327
298
  CLOUDFLARE_RPC_MAX_BYTES,
328
299
  WebSocketMuxer
329
300
  };
330
- //# sourceMappingURL=chunk-IKP53CBQ.mjs.map
301
+ //# sourceMappingURL=chunk-VESGVCLQ.mjs.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../src/edge-ws-muxer.ts", "../../../src/defs.ts", "../../../src/protocol.ts"],
4
4
  "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Trigger } from '@dxos/async';\nimport { log } from '@dxos/log';\nimport { buf } from '@dxos/protocols/buf';\nimport { type Message, MessageSchema } from '@dxos/protocols/buf/dxos/edge/messenger_pb';\n\nimport { protocol } from './defs';\n\n/**\n * 0000 0001 - message contains a part of segmented message chunk sequence.\n * The next byte defines a channel id and the rest of the message contains a part of Message proto binary.\n * Messages from different channels might interleave.\n * When the flag is NOT set the rest of the message should be interpreted as the valid Message proto binary.\n */\nconst FLAG_SEGMENT_SEQ = 1;\n/**\n * 0000 0010 - message terminates a segmented message chunk sequence.\n * All the chunks accumulated for the channel specified by the second byte can be concatenated\n * and interpreted as a valid Message proto binary.\n */\nconst FLAG_SEGMENT_SEQ_TERMINATED = 1 << 1;\n\n/**\n * https://developers.cloudflare.com/durable-objects/platform/limits/\n */\nexport const CLOUDFLARE_MESSAGE_MAX_BYTES = 1000 * 1000; // 1MB\nexport const CLOUDFLARE_RPC_MAX_BYTES = 32 * 1000 * 1000; // 32MB\n\nconst MAX_CHUNK_LENGTH = 16384;\nconst MAX_BUFFERED_AMOUNT = CLOUDFLARE_MESSAGE_MAX_BYTES;\nconst BUFFER_FULL_BACKOFF_TIMEOUT = 100;\n\nexport class WebSocketMuxer {\n private readonly _inMessageAccumulator = new Map<number, Buffer[]>();\n private readonly _outMessageChunks = new Map<number, MessageChunk[]>();\n private readonly _outMessageChannelByService = new Map<string, number>();\n\n private _sendTimeout: any | undefined;\n\n private readonly _maxChunkLength: number;\n\n constructor(\n private readonly _ws: WebSocketCompat,\n config?: { maxChunkLength: number },\n ) {\n this._maxChunkLength = config?.maxChunkLength ?? MAX_CHUNK_LENGTH;\n }\n\n /**\n * Resolves when all the message chunks get enqueued for sending.\n */\n public async send(message: Message): Promise<void> {\n const binary = buf.toBinary(MessageSchema, message);\n const channelId = this._resolveChannel(message);\n if (\n (channelId == null && binary.byteLength > CLOUDFLARE_MESSAGE_MAX_BYTES) ||\n binary.byteLength > CLOUDFLARE_RPC_MAX_BYTES\n ) {\n log.error('Large message dropped', {\n byteLength: binary.byteLength,\n serviceId: message.serviceId,\n payload: protocol.getPayloadType(message),\n channelId,\n });\n return;\n }\n\n if (channelId == null || binary.length < this._maxChunkLength) {\n const flags = Buffer.from([0]);\n this._ws.send(Buffer.concat([flags, binary]));\n return;\n }\n\n const terminatorSentTrigger = new Trigger();\n const messageChunks: MessageChunk[] = [];\n for (let i = 0; i < binary.length; i += this._maxChunkLength) {\n const chunk = binary.slice(i, i + this._maxChunkLength);\n const isLastChunk = i + this._maxChunkLength >= binary.length;\n if (isLastChunk) {\n const flags = Buffer.from([FLAG_SEGMENT_SEQ | FLAG_SEGMENT_SEQ_TERMINATED, channelId]);\n messageChunks.push({ payload: Buffer.concat([flags, chunk]), trigger: terminatorSentTrigger });\n } else {\n const flags = Buffer.from([FLAG_SEGMENT_SEQ, channelId]);\n messageChunks.push({ payload: Buffer.concat([flags, chunk]) });\n }\n }\n\n const queuedMessages = this._outMessageChunks.get(channelId);\n if (queuedMessages) {\n queuedMessages.push(...messageChunks);\n } else {\n this._outMessageChunks.set(channelId, messageChunks);\n }\n\n this._sendChunkedMessages();\n\n return terminatorSentTrigger.wait();\n }\n\n public receiveData(data: Uint8Array): Message | undefined {\n if ((data[0] & FLAG_SEGMENT_SEQ) === 0) {\n return buf.fromBinary(MessageSchema, data.slice(1));\n }\n\n const [flags, channelId, ...payload] = data;\n let chunkAccumulator = this._inMessageAccumulator.get(channelId);\n if (chunkAccumulator) {\n chunkAccumulator.push(Buffer.from(payload));\n } else {\n chunkAccumulator = [Buffer.from(payload)];\n this._inMessageAccumulator.set(channelId, chunkAccumulator);\n }\n\n if ((flags & FLAG_SEGMENT_SEQ_TERMINATED) === 0) {\n return undefined;\n }\n\n const message = buf.fromBinary(MessageSchema, Buffer.concat(chunkAccumulator));\n this._inMessageAccumulator.delete(channelId);\n return message;\n }\n\n public destroy(): void {\n if (this._sendTimeout) {\n clearTimeout(this._sendTimeout);\n this._sendTimeout = undefined;\n }\n for (const channelChunks of this._outMessageChunks.values()) {\n channelChunks.forEach((chunk) => chunk.trigger?.wake());\n }\n this._outMessageChunks.clear();\n this._inMessageAccumulator.clear();\n this._outMessageChannelByService.clear();\n }\n\n private _sendChunkedMessages(): void {\n if (this._sendTimeout) {\n return;\n }\n\n const send = () => {\n if (this._ws.readyState === WebSocket.CLOSING || this._ws.readyState === WebSocket.CLOSED) {\n log.warn('send called for closed websocket');\n this._sendTimeout = undefined;\n return;\n }\n\n let timeout = 0;\n const emptyChannels: number[] = [];\n for (const [channelId, messages] of this._outMessageChunks.entries()) {\n if (this._ws.bufferedAmount != null) {\n if (this._ws.bufferedAmount + MAX_CHUNK_LENGTH > MAX_BUFFERED_AMOUNT) {\n timeout = BUFFER_FULL_BACKOFF_TIMEOUT;\n break;\n }\n }\n\n const nextMessage = messages.shift();\n if (nextMessage) {\n this._ws.send(nextMessage.payload);\n nextMessage.trigger?.wake();\n } else {\n emptyChannels.push(channelId);\n }\n }\n\n emptyChannels.forEach((channelId) => this._outMessageChunks.delete(channelId));\n\n if (this._outMessageChunks.size > 0) {\n this._sendTimeout = setTimeout(send, timeout);\n } else {\n this._sendTimeout = undefined;\n }\n };\n this._sendTimeout = setTimeout(send);\n }\n\n private _resolveChannel(message: Message): number | undefined {\n if (!message.serviceId) {\n return undefined;\n }\n let id = this._outMessageChannelByService.get(message.serviceId);\n if (!id) {\n id = this._outMessageChannelByService.size + 1;\n this._outMessageChannelByService.set(message.serviceId, id);\n }\n return id;\n }\n}\n\ntype WebSocketCompat = {\n readonly readyState: number;\n /**\n * Not available in workerd.\n */\n bufferedAmount?: number;\n send(message: (ArrayBuffer | ArrayBufferView) | string): void;\n};\n\ntype MessageChunk = {\n payload: Buffer;\n /**\n * Wakes when the payload is enqueued by WebSocket.\n */\n trigger?: Trigger;\n};\n\n/**\n * To avoid using isomorphic-ws on edge.\n */\nenum WebSocket {\n CLOSING = 2,\n CLOSED = 3,\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { bufWkt } from '@dxos/protocols/buf';\nimport { SwarmRequestSchema, SwarmResponseSchema, TextMessageSchema } from '@dxos/protocols/buf/dxos/edge/messenger_pb';\n\nimport { Protocol } from './protocol';\n\nexport const protocol = new Protocol([SwarmRequestSchema, SwarmResponseSchema, TextMessageSchema, bufWkt.AnySchema]);\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { invariant } from '@dxos/invariant';\nimport { buf, bufWkt } from '@dxos/protocols/buf';\nimport { type Message, MessageSchema, type PeerSchema } from '@dxos/protocols/buf/dxos/edge/messenger_pb';\nimport { bufferToArray } from '@dxos/util';\n\nexport type PeerData = buf.MessageInitShape<typeof PeerSchema>;\n\nexport const getTypename = (typeName: string) => `type.googleapis.com/${typeName}`;\n\n/**\n * NOTE: The type registry should be extended with all message types.\n */\nexport class Protocol {\n private readonly _typeRegistry: buf.Registry;\n\n constructor(types: buf.DescMessage[]) {\n this._typeRegistry = buf.createRegistry(...types);\n }\n\n get typeRegistry(): buf.Registry {\n return this._typeRegistry;\n }\n\n toJson(message: Message): any {\n try {\n return buf.toJson(MessageSchema, message, { registry: this.typeRegistry });\n } catch (err) {\n return { type: this.getPayloadType(message) };\n }\n }\n\n /**\n * Return the payload with the given type.\n */\n getPayload<Desc extends buf.DescMessage>(message: Message, type: Desc): buf.MessageShape<Desc> {\n invariant(message.payload);\n const payloadTypename = this.getPayloadType(message);\n if (type && type.typeName !== payloadTypename) {\n throw new Error(`Unexpected payload type: ${payloadTypename}; expected ${type.typeName}`);\n }\n\n invariant(bufWkt.anyIs(message.payload, type), `Unexpected payload type: ${payloadTypename}}`);\n const payload = bufWkt.anyUnpack(message.payload, this.typeRegistry) as buf.MessageShape<Desc>;\n invariant(payload, `Empty payload: ${payloadTypename}}`);\n return payload;\n }\n\n /**\n * Get the payload type.\n */\n getPayloadType(message: Message): string | undefined {\n if (!message.payload) {\n return undefined;\n }\n\n const [, type] = message.payload.typeUrl.split('/');\n return type;\n }\n\n /**\n * Create a packed message.\n */\n createMessage<Desc extends buf.DescMessage>(\n type: Desc,\n {\n source,\n target,\n payload,\n serviceId,\n }: {\n source?: PeerData;\n target?: PeerData[];\n payload?: buf.MessageInitShape<Desc>;\n serviceId?: string;\n },\n ): Message {\n return buf.create(MessageSchema, {\n timestamp: new Date().toISOString(),\n source,\n target,\n serviceId,\n payload: payload ? bufWkt.anyPack(type, buf.create(type, payload)) : undefined,\n });\n }\n}\n\n/**\n * Convert websocket data to Uint8Array.\n */\nexport const toUint8Array = async (data: any): Promise<Uint8Array> => {\n // Node.\n if (data instanceof Buffer) {\n return bufferToArray(data);\n }\n\n // Browser.\n if (data instanceof Blob) {\n return new Uint8Array(await (data as Blob).arrayBuffer());\n }\n\n throw new Error(`Unexpected datatype: ${data}`);\n};\n"],
5
- "mappings": "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",
6
- "names": ["Trigger", "log", "buf", "MessageSchema", "bufWkt", "SwarmRequestSchema", "SwarmResponseSchema", "TextMessageSchema", "invariant", "buf", "bufWkt", "MessageSchema", "bufferToArray", "getTypename", "typeName", "Protocol", "typeRegistry", "_typeRegistry", "toJson", "message", "registry", "err", "type", "getPayloadType", "getPayload", "payload", "payloadTypename", "Error", "anyIs", "anyUnpack", "undefined", "typeUrl", "split", "createMessage", "source", "target", "serviceId", "create", "timestamp", "Date", "toISOString", "anyPack", "types", "createRegistry", "toUint8Array", "data", "Buffer", "Blob", "Uint8Array", "arrayBuffer", "protocol", "Protocol", "SwarmRequestSchema", "SwarmResponseSchema", "TextMessageSchema", "bufWkt", "AnySchema", "FLAG_SEGMENT_SEQ", "FLAG_SEGMENT_SEQ_TERMINATED", "CLOUDFLARE_MESSAGE_MAX_BYTES", "CLOUDFLARE_RPC_MAX_BYTES", "MAX_CHUNK_LENGTH", "MAX_BUFFERED_AMOUNT", "BUFFER_FULL_BACKOFF_TIMEOUT", "WebSocketMuxer", "send", "message", "binary", "buf", "toBinary", "MessageSchema", "channelId", "_resolveChannel", "byteLength", "log", "error", "serviceId", "payload", "protocol", "getPayloadType", "length", "_maxChunkLength", "flags", "Buffer", "from", "_ws", "concat", "terminatorSentTrigger", "Trigger", "messageChunks", "i", "chunk", "slice", "isLastChunk", "push", "trigger", "queuedMessages", "_outMessageChunks", "get", "set", "_sendChunkedMessages", "wait", "receiveData", "data", "fromBinary", "chunkAccumulator", "_inMessageAccumulator", "undefined", "delete", "destroy", "_sendTimeout", "clearTimeout", "channelChunks", "values", "forEach", "wake", "clear", "_outMessageChannelByService", "readyState", "warn", "timeout", "emptyChannels", "messages", "entries", "bufferedAmount", "nextMessage", "shift", "size", "setTimeout", "id", "config", "_define_property", "Map", "maxChunkLength"]
5
+ "mappings": "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",
6
+ "names": ["Trigger", "log", "buf", "MessageSchema", "bufWkt", "SwarmRequestSchema", "SwarmResponseSchema", "TextMessageSchema", "invariant", "buf", "bufWkt", "MessageSchema", "bufferToArray", "getTypename", "typeName", "Protocol", "_typeRegistry", "types", "createRegistry", "typeRegistry", "toJson", "message", "registry", "err", "type", "getPayloadType", "getPayload", "payload", "payloadTypename", "Error", "anyIs", "anyUnpack", "undefined", "typeUrl", "split", "createMessage", "source", "target", "serviceId", "create", "timestamp", "Date", "toISOString", "anyPack", "toUint8Array", "data", "Buffer", "Blob", "Uint8Array", "arrayBuffer", "protocol", "Protocol", "SwarmRequestSchema", "SwarmResponseSchema", "TextMessageSchema", "bufWkt", "AnySchema", "FLAG_SEGMENT_SEQ", "FLAG_SEGMENT_SEQ_TERMINATED", "CLOUDFLARE_MESSAGE_MAX_BYTES", "CLOUDFLARE_RPC_MAX_BYTES", "MAX_CHUNK_LENGTH", "MAX_BUFFERED_AMOUNT", "BUFFER_FULL_BACKOFF_TIMEOUT", "WebSocketMuxer", "_inMessageAccumulator", "Map", "_outMessageChunks", "_outMessageChannelByService", "_sendTimeout", "_maxChunkLength", "_ws", "config", "maxChunkLength", "send", "message", "binary", "buf", "toBinary", "MessageSchema", "channelId", "_resolveChannel", "byteLength", "log", "error", "serviceId", "payload", "protocol", "getPayloadType", "length", "flags", "Buffer", "from", "concat", "terminatorSentTrigger", "Trigger", "messageChunks", "i", "chunk", "slice", "isLastChunk", "push", "trigger", "queuedMessages", "get", "set", "_sendChunkedMessages", "wait", "receiveData", "data", "fromBinary", "chunkAccumulator", "undefined", "delete", "destroy", "clearTimeout", "channelChunks", "values", "forEach", "wake", "clear", "readyState", "warn", "timeout", "emptyChannels", "messages", "entries", "bufferedAmount", "nextMessage", "shift", "size", "setTimeout", "id"]
7
7
  }
@@ -2,7 +2,7 @@ import {
2
2
  CLOUDFLARE_MESSAGE_MAX_BYTES,
3
3
  CLOUDFLARE_RPC_MAX_BYTES,
4
4
  WebSocketMuxer
5
- } from "./chunk-IKP53CBQ.mjs";
5
+ } from "./chunk-VESGVCLQ.mjs";
6
6
  export {
7
7
  CLOUDFLARE_MESSAGE_MAX_BYTES,
8
8
  CLOUDFLARE_RPC_MAX_BYTES,
@@ -6,7 +6,7 @@ import {
6
6
  getTypename,
7
7
  protocol,
8
8
  toUint8Array
9
- } from "./chunk-IKP53CBQ.mjs";
9
+ } from "./chunk-VESGVCLQ.mjs";
10
10
 
11
11
  // src/index.ts
12
12
  export * from "@dxos/protocols/buf/dxos/edge/messenger_pb";
@@ -177,19 +177,6 @@ import { log, logInfo } from "@dxos/log";
177
177
  import { EdgeWebsocketProtocol } from "@dxos/protocols";
178
178
  import { buf } from "@dxos/protocols/buf";
179
179
  import { MessageSchema } from "@dxos/protocols/buf/dxos/edge/messenger_pb";
180
- function _define_property(obj, key, value) {
181
- if (key in obj) {
182
- Object.defineProperty(obj, key, {
183
- value,
184
- enumerable: true,
185
- configurable: true,
186
- writable: true
187
- });
188
- } else {
189
- obj[key] = value;
190
- }
191
- return obj;
192
- }
193
180
  function _ts_decorate(decorators, target, key, desc) {
194
181
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
195
182
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
@@ -200,6 +187,28 @@ var __dxlog_file3 = "/__w/dxos/dxos/packages/core/mesh/edge-client/src/edge-ws-c
200
187
  var SIGNAL_KEEPALIVE_INTERVAL = 4e3;
201
188
  var SIGNAL_KEEPALIVE_TIMEOUT = 12e3;
202
189
  var EdgeWsConnection = class extends Resource {
190
+ _identity;
191
+ _connectionInfo;
192
+ _callbacks;
193
+ _inactivityTimeoutCtx;
194
+ _ws;
195
+ _wsMuxer;
196
+ _lastReceivedMessageTimestamp = Date.now();
197
+ _openTimestamp;
198
+ // Latency tracking.
199
+ _pingTimestamp;
200
+ _rtt = 0;
201
+ // Rate tracking with sliding window.
202
+ _uploadRate = 0;
203
+ _downloadRate = 0;
204
+ _rateWindow = 1e4;
205
+ _rateUpdateInterval = 1e3;
206
+ _bytesSamples = [];
207
+ _messagesSent = 0;
208
+ _messagesReceived = 0;
209
+ constructor(_identity, _connectionInfo, _callbacks) {
210
+ super(), this._identity = _identity, this._connectionInfo = _connectionInfo, this._callbacks = _callbacks;
211
+ }
203
212
  get info() {
204
213
  return {
205
214
  open: this.isOpen,
@@ -505,21 +514,6 @@ var EdgeWsConnection = class extends Resource {
505
514
  this._uploadRate = timeSpan > 0 ? Math.round(totalSent / timeSpan) : 0;
506
515
  this._downloadRate = timeSpan > 0 ? Math.round(totalReceived / timeSpan) : 0;
507
516
  }
508
- constructor(_identity, _connectionInfo, _callbacks) {
509
- super(), _define_property(this, "_identity", void 0), _define_property(this, "_connectionInfo", void 0), _define_property(this, "_callbacks", void 0), _define_property(this, "_inactivityTimeoutCtx", void 0), _define_property(this, "_ws", void 0), _define_property(this, "_wsMuxer", void 0), _define_property(this, "_lastReceivedMessageTimestamp", void 0), _define_property(this, "_openTimestamp", void 0), // Latency tracking.
510
- _define_property(this, "_pingTimestamp", void 0), _define_property(this, "_rtt", void 0), // Rate tracking with sliding window.
511
- _define_property(this, "_uploadRate", void 0), _define_property(this, "_downloadRate", void 0), _define_property(
512
- this,
513
- "_rateWindow",
514
- void 0
515
- // 10 second sliding window.
516
- ), _define_property(
517
- this,
518
- "_rateUpdateInterval",
519
- void 0
520
- // Update rates every second.
521
- ), _define_property(this, "_bytesSamples", void 0), _define_property(this, "_messagesSent", void 0), _define_property(this, "_messagesReceived", void 0), this._identity = _identity, this._connectionInfo = _connectionInfo, this._callbacks = _callbacks, this._lastReceivedMessageTimestamp = Date.now(), this._rtt = 0, this._uploadRate = 0, this._downloadRate = 0, this._rateWindow = 1e4, this._rateUpdateInterval = 1e3, this._bytesSamples = [], this._messagesSent = 0, this._messagesReceived = 0;
522
- }
523
517
  };
524
518
  _ts_decorate([
525
519
  logInfo
@@ -546,19 +540,6 @@ var getEdgeUrlWithProtocol = (baseUrl, protocol2) => {
546
540
  };
547
541
 
548
542
  // src/edge-client.ts
549
- function _define_property2(obj, key, value) {
550
- if (key in obj) {
551
- Object.defineProperty(obj, key, {
552
- value,
553
- enumerable: true,
554
- configurable: true,
555
- writable: true
556
- });
557
- } else {
558
- obj[key] = value;
559
- }
560
- return obj;
561
- }
562
543
  function _ts_decorate2(decorators, target, key, desc) {
563
544
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
564
545
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
@@ -569,6 +550,24 @@ var __dxlog_file4 = "/__w/dxos/dxos/packages/core/mesh/edge-client/src/edge-clie
569
550
  var DEFAULT_TIMEOUT = 1e4;
570
551
  var STATUS_REFRESH_INTERVAL = 1e3;
571
552
  var EdgeClient = class extends Resource2 {
553
+ _identity;
554
+ _config;
555
+ statusChanged = new Event();
556
+ _persistentLifecycle = new PersistentLifecycle({
557
+ start: async () => this._connect(),
558
+ stop: async (state) => this._disconnect(state)
559
+ });
560
+ _messageListeners = /* @__PURE__ */ new Set();
561
+ _reconnectListeners = /* @__PURE__ */ new Set();
562
+ _baseWsUrl;
563
+ _baseHttpUrl;
564
+ _currentConnection = void 0;
565
+ _ready = new Trigger();
566
+ constructor(_identity, _config) {
567
+ super(), this._identity = _identity, this._config = _config;
568
+ this._baseWsUrl = getEdgeUrlWithProtocol(_config.socketEndpoint, "ws");
569
+ this._baseHttpUrl = getEdgeUrlWithProtocol(_config.socketEndpoint, "http");
570
+ }
572
571
  get info() {
573
572
  return {
574
573
  open: this.isOpen,
@@ -851,14 +850,7 @@ var EdgeClient = class extends Resource2 {
851
850
  return void 0;
852
851
  }
853
852
  }
854
- constructor(_identity, _config) {
855
- super(), _define_property2(this, "_identity", void 0), _define_property2(this, "_config", void 0), _define_property2(this, "statusChanged", void 0), _define_property2(this, "_persistentLifecycle", void 0), _define_property2(this, "_messageListeners", void 0), _define_property2(this, "_reconnectListeners", void 0), _define_property2(this, "_baseWsUrl", void 0), _define_property2(this, "_baseHttpUrl", void 0), _define_property2(this, "_currentConnection", void 0), _define_property2(this, "_ready", void 0), _define_property2(this, "_isActive", void 0), this._identity = _identity, this._config = _config, this.statusChanged = new Event(), this._persistentLifecycle = new PersistentLifecycle({
856
- start: async () => this._connect(),
857
- stop: async (state) => this._disconnect(state)
858
- }), this._messageListeners = /* @__PURE__ */ new Set(), this._reconnectListeners = /* @__PURE__ */ new Set(), this._currentConnection = void 0, this._ready = new Trigger(), this._isActive = (connection) => connection === this._currentConnection;
859
- this._baseWsUrl = getEdgeUrlWithProtocol(_config.socketEndpoint, "ws");
860
- this._baseHttpUrl = getEdgeUrlWithProtocol(_config.socketEndpoint, "http");
861
- }
853
+ _isActive = (connection) => connection === this._currentConnection;
862
854
  };
863
855
  _ts_decorate2([
864
856
  logInfo2
@@ -875,6 +867,7 @@ import * as Effect2 from "effect/Effect";
875
867
  import * as Function from "effect/Function";
876
868
  import { sleep } from "@dxos/async";
877
869
  import { Context as Context3 } from "@dxos/context";
870
+ import { invariant as invariant4 } from "@dxos/invariant";
878
871
  import { log as log4 } from "@dxos/log";
879
872
  import { EdgeAuthChallengeError, EdgeCallFailedError } from "@dxos/protocols";
880
873
  import { createUrl } from "@dxos/util";
@@ -886,28 +879,14 @@ import * as Effect from "effect/Effect";
886
879
  import * as Layer from "effect/Layer";
887
880
  import * as Schedule from "effect/Schedule";
888
881
  import { log as log3 } from "@dxos/log";
889
- function _define_property3(obj, key, value) {
890
- if (key in obj) {
891
- Object.defineProperty(obj, key, {
892
- value,
893
- enumerable: true,
894
- configurable: true,
895
- writable: true
896
- });
897
- } else {
898
- obj[key] = value;
899
- }
900
- return obj;
901
- }
902
882
  var __dxlog_file5 = "/__w/dxos/dxos/packages/core/mesh/edge-client/src/http-client.ts";
903
- var _Context_Tag;
904
- var HttpConfig = class extends (_Context_Tag = Context2.Tag("HttpConfig")()) {
883
+ var HttpConfig = class _HttpConfig extends Context2.Tag("HttpConfig")() {
884
+ static default = Layer.succeed(_HttpConfig, {
885
+ timeout: Duration.millis(1e3),
886
+ retryTimes: 3,
887
+ retryBaseDelay: Duration.millis(1e3)
888
+ });
905
889
  };
906
- _define_property3(HttpConfig, "default", Layer.succeed(HttpConfig, {
907
- timeout: Duration.millis(1e3),
908
- retryTimes: 3,
909
- retryBaseDelay: Duration.millis(1e3)
910
- }));
911
890
  var withRetry = (effect, { timeout: timeout2 = Duration.millis(1e3), retryBaseDelay = Duration.millis(1e3), retryTimes = 3 } = {}) => {
912
891
  return effect.pipe(Effect.flatMap((res) => (
913
892
  // Treat 500 errors as retryable?
@@ -935,25 +914,29 @@ var encodeAuthHeader = (challenge) => {
935
914
  };
936
915
 
937
916
  // src/edge-http-client.ts
938
- function _define_property4(obj, key, value) {
939
- if (key in obj) {
940
- Object.defineProperty(obj, key, {
941
- value,
942
- enumerable: true,
943
- configurable: true,
944
- writable: true
945
- });
946
- } else {
947
- obj[key] = value;
948
- }
949
- return obj;
950
- }
951
917
  var __dxlog_file6 = "/__w/dxos/dxos/packages/core/mesh/edge-client/src/edge-http-client.ts";
952
918
  var DEFAULT_RETRY_TIMEOUT = 1500;
953
919
  var DEFAULT_RETRY_JITTER = 500;
954
920
  var DEFAULT_MAX_RETRIES_COUNT = 3;
955
921
  var WARNING_BODY_SIZE = 10 * 1024 * 1024;
956
922
  var EdgeHttpClient = class {
923
+ _baseUrl;
924
+ _edgeIdentity;
925
+ /**
926
+ * Auth header is cached until receiving the next 401 from EDGE, at which point it gets refreshed.
927
+ */
928
+ _authHeader;
929
+ constructor(baseUrl) {
930
+ this._baseUrl = getEdgeUrlWithProtocol(baseUrl, "http");
931
+ log4("created", {
932
+ url: this._baseUrl
933
+ }, {
934
+ F: __dxlog_file6,
935
+ L: 100,
936
+ S: this,
937
+ C: (f, a) => f(...a)
938
+ });
939
+ }
957
940
  get baseUrl() {
958
941
  return this._baseUrl;
959
942
  }
@@ -1086,6 +1069,7 @@ var EdgeHttpClient = class {
1086
1069
  formData.append("version", body.version);
1087
1070
  formData.append("ownerPublicKey", body.ownerPublicKey);
1088
1071
  formData.append("entryPoint", body.entryPoint);
1072
+ body.runtime && formData.append("runtime", body.runtime);
1089
1073
  for (const [filename, content] of Object.entries(body.assets)) {
1090
1074
  formData.append("assets", new Blob([
1091
1075
  content
@@ -1177,69 +1161,86 @@ var EdgeHttpClient = class {
1177
1161
  // TODO(burdon): Refactor with effect (see edge-http-client.test.ts).
1178
1162
  async _call(url, args) {
1179
1163
  const shouldRetry = createRetryHandler(args);
1180
- const requestContext = args.context ?? new Context3(void 0, {
1164
+ const requestContext = args.context ?? Context3.default(void 0, {
1181
1165
  F: __dxlog_file6,
1182
- L: 391
1166
+ L: 393
1183
1167
  });
1184
1168
  log4("fetch", {
1185
1169
  url,
1186
1170
  request: args.body
1187
1171
  }, {
1188
1172
  F: __dxlog_file6,
1189
- L: 392,
1173
+ L: 394,
1190
1174
  S: this,
1191
1175
  C: (f, a) => f(...a)
1192
1176
  });
1193
1177
  let handledAuth = false;
1194
1178
  while (true) {
1195
1179
  let processingError = void 0;
1196
- let retryAfterHeaderValue = Number.NaN;
1197
1180
  try {
1198
1181
  const request = createRequest(args, this._authHeader);
1199
1182
  const response = await fetch(url, request);
1200
- retryAfterHeaderValue = Number(response.headers.get("Retry-After"));
1201
1183
  if (response.ok) {
1202
- const body = await response.json();
1184
+ const body2 = await response.clone().json();
1203
1185
  if (args.rawResponse) {
1204
- return body;
1205
- }
1206
- if (!("success" in body)) {
1207
- return body;
1186
+ return body2;
1208
1187
  }
1209
- if (body.success) {
1210
- return body.data;
1211
- }
1212
- log4.warn("unsuccessful edge response", {
1213
- url,
1214
- body
1215
- }, {
1188
+ invariant4(body2, "Expected body to be present", {
1216
1189
  F: __dxlog_file6,
1217
- L: 417,
1190
+ L: 408,
1218
1191
  S: this,
1219
- C: (f, a) => f(...a)
1192
+ A: [
1193
+ "body",
1194
+ "'Expected body to be present'"
1195
+ ]
1220
1196
  });
1221
- if (body.errorData?.type === "auth_challenge" && typeof body.errorData?.challenge === "string") {
1222
- processingError = new EdgeAuthChallengeError(body.errorData.challenge, body.errorData);
1223
- } else if (body.errorData) {
1224
- processingError = EdgeCallFailedError.fromUnsuccessfulResponse(response, body);
1197
+ if (!("success" in body2)) {
1198
+ return body2;
1199
+ }
1200
+ if (body2.success) {
1201
+ return body2.data;
1225
1202
  }
1226
1203
  } else if (response.status === 401 && !handledAuth) {
1227
1204
  this._authHeader = await this._handleUnauthorized(response);
1228
1205
  handledAuth = true;
1229
1206
  continue;
1207
+ }
1208
+ const body = response.headers.get("Content-Type") === "application/json" ? await response.clone().json() : void 0;
1209
+ invariant4(!body?.success, "Expected body to not be a failure response or undefined.", {
1210
+ F: __dxlog_file6,
1211
+ L: 424,
1212
+ S: this,
1213
+ A: [
1214
+ "!body?.success",
1215
+ "'Expected body to not be a failure response or undefined.'"
1216
+ ]
1217
+ });
1218
+ if (body?.errorData?.type === "auth_challenge" && typeof body?.errorData?.challenge === "string") {
1219
+ processingError = new EdgeAuthChallengeError(body.errorData.challenge, body.errorData);
1220
+ } else if (body?.success === false) {
1221
+ processingError = EdgeCallFailedError.fromUnsuccessfulResponse(response, body);
1230
1222
  } else {
1223
+ invariant4(!response.ok, "Expected response to not be ok.", {
1224
+ F: __dxlog_file6,
1225
+ L: 431,
1226
+ S: this,
1227
+ A: [
1228
+ "!response.ok",
1229
+ "'Expected response to not be ok.'"
1230
+ ]
1231
+ });
1231
1232
  processingError = await EdgeCallFailedError.fromHttpFailure(response);
1232
1233
  }
1233
1234
  } catch (error) {
1234
1235
  processingError = EdgeCallFailedError.fromProcessingFailureCause(error);
1235
1236
  }
1236
- if (processingError?.isRetryable && await shouldRetry(requestContext, retryAfterHeaderValue)) {
1237
+ if (processingError?.isRetryable && await shouldRetry(requestContext, processingError.retryAfterMs)) {
1237
1238
  log4("retrying edge request", {
1238
1239
  url,
1239
1240
  processingError
1240
1241
  }, {
1241
1242
  F: __dxlog_file6,
1242
- L: 435,
1243
+ L: 439,
1243
1244
  S: this,
1244
1245
  C: (f, a) => f(...a)
1245
1246
  });
@@ -1252,7 +1253,7 @@ var EdgeHttpClient = class {
1252
1253
  if (!this._edgeIdentity) {
1253
1254
  log4.warn("unauthorized response received before identity was set", void 0, {
1254
1255
  F: __dxlog_file6,
1255
- L: 444,
1256
+ L: 448,
1256
1257
  S: this,
1257
1258
  C: (f, a) => f(...a)
1258
1259
  });
@@ -1261,20 +1262,6 @@ var EdgeHttpClient = class {
1261
1262
  const challenge = await handleAuthChallenge(response, this._edgeIdentity);
1262
1263
  return encodeAuthHeader(challenge);
1263
1264
  }
1264
- constructor(baseUrl) {
1265
- _define_property4(this, "_baseUrl", void 0);
1266
- _define_property4(this, "_edgeIdentity", void 0);
1267
- _define_property4(this, "_authHeader", void 0);
1268
- this._baseUrl = getEdgeUrlWithProtocol(baseUrl, "http");
1269
- log4("created", {
1270
- url: this._baseUrl
1271
- }, {
1272
- F: __dxlog_file6,
1273
- L: 99,
1274
- S: this,
1275
- C: (f, a) => f(...a)
1276
- });
1277
- }
1278
1265
  };
1279
1266
  var createRequest = ({ method, body, json = true }, authHeader) => {
1280
1267
  let requestBody;
@@ -1290,7 +1277,7 @@ var createRequest = ({ method, body, json = true }, authHeader) => {
1290
1277
  bodySize: requestBody.length
1291
1278
  }, {
1292
1279
  F: __dxlog_file6,
1293
- L: 468,
1280
+ L: 472,
1294
1281
  S: void 0,
1295
1282
  C: (f, a) => f(...a)
1296
1283
  });