@dxos/shell 0.6.3-staging.9c1c979 → 0.6.3
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/bundle/shell.mjs +87927 -10
- package/dist/bundle/shell.mjs.map +1 -1
- package/dist/bundle/shell.umd.js +101 -133
- package/dist/bundle/shell.umd.js.map +1 -1
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/react.mjs +8 -11
- package/dist/lib/browser/react.mjs.map +3 -3
- package/dist/types/src/composites/Shell/Shell.d.ts +1 -1
- package/dist/types/src/composites/Shell/Shell.d.ts.map +1 -1
- package/dist/types/src/composites/Shell/Shell.js +28 -28
- package/dist/types/src/composites/Shell/Shell.js.map +1 -1
- package/dist/types/src/composites/Shell/ShellContext.d.ts +1 -2
- package/dist/types/src/composites/Shell/ShellContext.d.ts.map +1 -1
- package/dist/types/src/composites/Shell/ShellContext.js +12 -13
- package/dist/types/src/composites/Shell/ShellContext.js.map +1 -1
- package/dist/types/src/composites/Shell/memory-shell-runtime.d.ts +1 -2
- package/dist/types/src/composites/Shell/memory-shell-runtime.d.ts.map +1 -1
- package/dist/types/src/composites/Shell/memory-shell-runtime.js +2 -2
- package/dist/types/src/composites/Shell/memory-shell-runtime.js.map +1 -1
- package/dist/types/src/composites/Shell/run-shell.d.ts.map +1 -1
- package/dist/types/src/composites/Shell/run-shell.js +3 -4
- package/dist/types/src/composites/Shell/run-shell.js.map +1 -1
- package/dist/types/src/panels/IdentityPanel/useAgentHandlers.d.ts.map +1 -1
- package/dist/types/src/panels/IdentityPanel/useAgentHandlers.js +1 -2
- package/dist/types/src/panels/IdentityPanel/useAgentHandlers.js.map +1 -1
- package/package.json +23 -23
- package/src/composites/Shell/Shell.tsx +4 -4
- package/src/composites/Shell/ShellContext.tsx +1 -2
- package/src/composites/Shell/memory-shell-runtime.ts +2 -2
- package/src/composites/Shell/run-shell.tsx +9 -2
- package/src/panels/IdentityPanel/useAgentHandlers.ts +1 -2
- package/dist/bundle/browser-C2u-GX_T.mjs +0 -7
- package/dist/bundle/browser-C2u-GX_T.mjs.map +0 -1
- package/dist/bundle/index-2qvjtbyT.mjs +0 -112
- package/dist/bundle/index-2qvjtbyT.mjs.map +0 -1
- package/dist/bundle/index-Bxrp8rGc.mjs +0 -4593
- package/dist/bundle/index-Bxrp8rGc.mjs.map +0 -1
- package/dist/bundle/index-CLKnEc1H.mjs +0 -92930
- package/dist/bundle/index-CLKnEc1H.mjs.map +0 -1
- package/dist/bundle/index-ZweceImk.mjs +0 -1322
- package/dist/bundle/index-ZweceImk.mjs.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index-ZweceImk.mjs","sources":["../../../../core/protocols/dist/esm/src/proto/gen/dxos/mesh/signal.js","../../../../core/mesh/messaging/dist/lib/browser/index.mjs"],"sourcesContent":["/**\n * Defined in:\n * {@link file://./../../../dxos/mesh/signal.proto}\n */\nexport var SignalState;\n(function (SignalState) {\n SignalState[SignalState[\"CONNECTING\"] = 0] = \"CONNECTING\";\n SignalState[SignalState[\"RECONNECTING\"] = 1] = \"RECONNECTING\";\n SignalState[SignalState[\"CONNECTED\"] = 2] = \"CONNECTED\";\n SignalState[SignalState[\"DISCONNECTED\"] = 3] = \"DISCONNECTED\";\n SignalState[SignalState[\"ERROR\"] = 4] = \"ERROR\";\n SignalState[SignalState[\"CLOSED\"] = 5] = \"CLOSED\";\n})(SignalState || (SignalState = {}));\n//# sourceMappingURL=signal.js.map","import \"@dxos/node-std/globals\";\n\n// inject-globals:@inject-globals\nimport {\n global,\n Buffer,\n process\n} from \"@dxos/node-std/inject-globals\";\n\n// packages/core/mesh/messaging/src/messenger.ts\nimport { TimeoutError, scheduleExponentialBackoffTaskInterval, scheduleTask, scheduleTaskInterval } from \"@dxos/async\";\nimport { Context } from \"@dxos/context\";\nimport { invariant } from \"@dxos/invariant\";\nimport { PublicKey } from \"@dxos/keys\";\nimport { log } from \"@dxos/log\";\nimport { TimeoutError as ProtocolTimeoutError, schema, trace as trace2 } from \"@dxos/protocols\";\nimport { ComplexMap, ComplexSet } from \"@dxos/util\";\n\n// packages/core/mesh/messaging/src/messenger-monitor.ts\nimport { trace } from \"@dxos/tracing\";\nvar MessengerMonitor = class {\n recordMessageAckFailed() {\n trace.metrics.increment(\"dxos.mesh.signal.messenger.failed-ack\", 1);\n }\n recordReliableMessage(params) {\n trace.metrics.increment(\"dxos.mesh.signal.messenger.reliable-send\", 1, {\n tags: {\n success: params.sent,\n attempts: params.sendAttempts\n }\n });\n }\n};\n\n// packages/core/mesh/messaging/src/timeouts.ts\nvar MESSAGE_TIMEOUT = 1e4;\n\n// packages/core/mesh/messaging/src/messenger.ts\nvar __dxlog_file = \"/home/runner/work/dxos/dxos/packages/core/mesh/messaging/src/messenger.ts\";\nvar ReliablePayload = schema.getCodecForType(\"dxos.mesh.messaging.ReliablePayload\");\nvar Acknowledgement = schema.getCodecForType(\"dxos.mesh.messaging.Acknowledgement\");\nvar RECEIVED_MESSAGES_GC_INTERVAL = 12e4;\nvar Messenger = class {\n constructor({ signalManager, retryDelay = 300 }) {\n this._monitor = new MessengerMonitor();\n // { peerId, payloadType } => listeners set\n this._listeners = new ComplexMap(({ peerId, payloadType }) => peerId.toHex() + payloadType);\n // peerId => listeners set\n this._defaultListeners = new ComplexMap(PublicKey.hash);\n this._onAckCallbacks = new ComplexMap(PublicKey.hash);\n this._receivedMessages = new ComplexSet(PublicKey.hash);\n /**\n * Keys scheduled to be cleared from _receivedMessages on the next iteration.\n */\n this._toClear = new ComplexSet(PublicKey.hash);\n this._closed = true;\n this._signalManager = signalManager;\n this._retryDelay = retryDelay;\n this.open();\n }\n open() {\n if (!this._closed) {\n return;\n }\n const traceId = PublicKey.random().toHex();\n log.trace(\"dxos.mesh.messenger.open\", trace2.begin({\n id: traceId\n }), {\n F: __dxlog_file,\n L: 71,\n S: this,\n C: (f, a) => f(...a)\n });\n this._ctx = new Context({\n onError: (err) => log.catch(err, void 0, {\n F: __dxlog_file,\n L: 73,\n S: this,\n C: (f, a) => f(...a)\n })\n }, {\n F: __dxlog_file,\n L: 72\n });\n this._ctx.onDispose(this._signalManager.onMessage.on(async (message) => {\n log(\"received message\", {\n from: message.author\n }, {\n F: __dxlog_file,\n L: 77,\n S: this,\n C: (f, a) => f(...a)\n });\n await this._handleMessage(message);\n }));\n scheduleTaskInterval(this._ctx, async () => {\n this._performGc();\n }, RECEIVED_MESSAGES_GC_INTERVAL);\n this._closed = false;\n log.trace(\"dxos.mesh.messenger.open\", trace2.end({\n id: traceId\n }), {\n F: __dxlog_file,\n L: 92,\n S: this,\n C: (f, a) => f(...a)\n });\n }\n async close() {\n if (this._closed) {\n return;\n }\n this._closed = true;\n await this._ctx.dispose();\n }\n async sendMessage({ author, recipient, payload }) {\n invariant(!this._closed, \"Closed\", {\n F: __dxlog_file,\n L: 104,\n S: this,\n A: [\n \"!this._closed\",\n \"'Closed'\"\n ]\n });\n const messageContext = this._ctx.derive();\n const reliablePayload = {\n messageId: PublicKey.random(),\n payload\n };\n invariant(!this._onAckCallbacks.has(reliablePayload.messageId), void 0, {\n F: __dxlog_file,\n L: 111,\n S: this,\n A: [\n \"!this._onAckCallbacks.has(reliablePayload.messageId!)\",\n \"\"\n ]\n });\n log(\"send message\", {\n messageId: reliablePayload.messageId,\n author,\n recipient\n }, {\n F: __dxlog_file,\n L: 112,\n S: this,\n C: (f, a) => f(...a)\n });\n let messageReceived;\n let timeoutHit;\n let sendAttempts = 0;\n const promise = new Promise((resolve, reject) => {\n messageReceived = resolve;\n timeoutHit = reject;\n });\n scheduleExponentialBackoffTaskInterval(messageContext, async () => {\n log(\"retrying message\", {\n messageId: reliablePayload.messageId\n }, {\n F: __dxlog_file,\n L: 127,\n S: this,\n C: (f, a) => f(...a)\n });\n sendAttempts++;\n await this._encodeAndSend({\n author,\n recipient,\n reliablePayload\n }).catch((err) => log(\"failed to send message\", {\n err\n }, {\n F: __dxlog_file,\n L: 130,\n S: this,\n C: (f, a) => f(...a)\n }));\n }, this._retryDelay);\n scheduleTask(messageContext, () => {\n log(\"message not delivered\", {\n messageId: reliablePayload.messageId\n }, {\n F: __dxlog_file,\n L: 139,\n S: this,\n C: (f, a) => f(...a)\n });\n this._onAckCallbacks.delete(reliablePayload.messageId);\n timeoutHit(new ProtocolTimeoutError(\"signaling message not delivered\", new TimeoutError(MESSAGE_TIMEOUT, \"Message not delivered\")));\n void messageContext.dispose();\n this._monitor.recordReliableMessage({\n sendAttempts,\n sent: false\n });\n }, MESSAGE_TIMEOUT);\n this._onAckCallbacks.set(reliablePayload.messageId, () => {\n messageReceived();\n this._onAckCallbacks.delete(reliablePayload.messageId);\n void messageContext.dispose();\n this._monitor.recordReliableMessage({\n sendAttempts,\n sent: true\n });\n });\n await this._encodeAndSend({\n author,\n recipient,\n reliablePayload\n });\n return promise;\n }\n /**\n * Subscribes onMessage function to messages that contains payload with payloadType.\n * @param payloadType if not specified, onMessage will be subscribed to all types of messages.\n */\n async listen({ peerId, payloadType, onMessage }) {\n invariant(!this._closed, \"Closed\", {\n F: __dxlog_file,\n L: 177,\n S: this,\n A: [\n \"!this._closed\",\n \"'Closed'\"\n ]\n });\n await this._signalManager.subscribeMessages(peerId);\n let listeners;\n if (!payloadType) {\n listeners = this._defaultListeners.get(peerId);\n if (!listeners) {\n listeners = /* @__PURE__ */ new Set();\n this._defaultListeners.set(peerId, listeners);\n }\n } else {\n listeners = this._listeners.get({\n peerId,\n payloadType\n });\n if (!listeners) {\n listeners = /* @__PURE__ */ new Set();\n this._listeners.set({\n peerId,\n payloadType\n }, listeners);\n }\n }\n listeners.add(onMessage);\n return {\n unsubscribe: async () => {\n listeners.delete(onMessage);\n }\n };\n }\n async _encodeAndSend({ author, recipient, reliablePayload }) {\n await this._signalManager.sendMessage({\n author,\n recipient,\n payload: {\n type_url: \"dxos.mesh.messaging.ReliablePayload\",\n value: ReliablePayload.encode(reliablePayload, {\n preserveAny: true\n })\n }\n });\n }\n async _handleMessage(message) {\n switch (message.payload.type_url) {\n case \"dxos.mesh.messaging.ReliablePayload\": {\n await this._handleReliablePayload(message);\n break;\n }\n case \"dxos.mesh.messaging.Acknowledgement\": {\n await this._handleAcknowledgement({\n payload: message.payload\n });\n break;\n }\n }\n }\n async _handleReliablePayload({ author, recipient, payload }) {\n invariant(payload.type_url === \"dxos.mesh.messaging.ReliablePayload\", void 0, {\n F: __dxlog_file,\n L: 238,\n S: this,\n A: [\n \"payload.type_url === 'dxos.mesh.messaging.ReliablePayload'\",\n \"\"\n ]\n });\n const reliablePayload = ReliablePayload.decode(payload.value, {\n preserveAny: true\n });\n log(\"handling message\", {\n messageId: reliablePayload.messageId\n }, {\n F: __dxlog_file,\n L: 241,\n S: this,\n C: (f, a) => f(...a)\n });\n try {\n await this._sendAcknowledgement({\n author,\n recipient,\n messageId: reliablePayload.messageId\n });\n } catch (err) {\n this._monitor.recordMessageAckFailed();\n throw err;\n }\n if (this._receivedMessages.has(reliablePayload.messageId)) {\n return;\n }\n this._receivedMessages.add(reliablePayload.messageId);\n await this._callListeners({\n author,\n recipient,\n payload: reliablePayload.payload\n });\n }\n async _handleAcknowledgement({ payload }) {\n invariant(payload.type_url === \"dxos.mesh.messaging.Acknowledgement\", void 0, {\n F: __dxlog_file,\n L: 269,\n S: this,\n A: [\n \"payload.type_url === 'dxos.mesh.messaging.Acknowledgement'\",\n \"\"\n ]\n });\n this._onAckCallbacks.get(Acknowledgement.decode(payload.value).messageId)?.();\n }\n async _sendAcknowledgement({ author, recipient, messageId }) {\n log(\"sending ACK\", {\n messageId,\n from: recipient,\n to: author\n }, {\n F: __dxlog_file,\n L: 282,\n S: this,\n C: (f, a) => f(...a)\n });\n await this._signalManager.sendMessage({\n author: recipient,\n recipient: author,\n payload: {\n type_url: \"dxos.mesh.messaging.Acknowledgement\",\n value: Acknowledgement.encode({\n messageId\n })\n }\n });\n }\n async _callListeners(message) {\n {\n const defaultListenerMap = this._defaultListeners.get(message.recipient);\n if (defaultListenerMap) {\n for (const listener of defaultListenerMap) {\n await listener(message);\n }\n }\n }\n {\n const listenerMap = this._listeners.get({\n peerId: message.recipient,\n payloadType: message.payload.type_url\n });\n if (listenerMap) {\n for (const listener of listenerMap) {\n await listener(message);\n }\n }\n }\n }\n _performGc() {\n const start = performance.now();\n for (const key of this._toClear.keys()) {\n this._receivedMessages.delete(key);\n }\n this._toClear.clear();\n for (const key of this._receivedMessages.keys()) {\n this._toClear.add(key);\n }\n const elapsed = performance.now() - start;\n if (elapsed > 100) {\n log.warn(\"GC took too long\", {\n elapsed\n }, {\n F: __dxlog_file,\n L: 330,\n S: this,\n C: (f, a) => f(...a)\n });\n }\n }\n};\n\n// packages/core/mesh/messaging/src/signal-client/signal-client.ts\nimport { DeferredTask, Event as Event2, Trigger as Trigger2, scheduleTask as scheduleTask2, scheduleTaskInterval as scheduleTaskInterval3, sleep } from \"@dxos/async\";\nimport { cancelWithContext as cancelWithContext2, Resource } from \"@dxos/context\";\nimport { invariant as invariant3 } from \"@dxos/invariant\";\nimport { PublicKey as PublicKey4 } from \"@dxos/keys\";\nimport { log as log4 } from \"@dxos/log\";\nimport { trace as trace6 } from \"@dxos/protocols\";\nimport { SignalState } from \"@dxos/protocols/proto/dxos/mesh/signal\";\n\n// packages/core/mesh/messaging/src/signal-client/signal-client-monitor.ts\nimport { trace as trace3 } from \"@dxos/tracing\";\nvar SignalClientMonitor = class {\n constructor() {\n this._performance = {\n sentMessages: 0,\n receivedMessages: 0,\n reconnectCounter: 0,\n joinCounter: 0,\n leaveCounter: 0\n };\n /**\n * Timestamp of when the connection attempt was began.\n */\n this._connectionStarted = /* @__PURE__ */ new Date();\n /**\n * Timestamp of last state change.\n */\n this._lastStateChange = /* @__PURE__ */ new Date();\n }\n getRecordedTimestamps() {\n return {\n connectionStarted: this._connectionStarted,\n lastStateChange: this._lastStateChange\n };\n }\n recordStateChangeTime() {\n this._lastStateChange = /* @__PURE__ */ new Date();\n }\n recordConnectionStartTime() {\n this._connectionStarted = /* @__PURE__ */ new Date();\n }\n recordReconnect(params) {\n this._performance.reconnectCounter++;\n trace3.metrics.increment(\"dxos.mesh.signal.signal-client.reconnect\", 1, {\n tags: {\n success: params.success\n }\n });\n }\n recordJoin() {\n this._performance.joinCounter++;\n }\n recordLeave() {\n this._performance.leaveCounter++;\n }\n recordMessageReceived(message) {\n this._performance.receivedMessages++;\n trace3.metrics.increment(\"dxos.mesh.signal.signal-client.received-total\", 1, {\n tags: createIdentityTags(message)\n });\n trace3.metrics.distribution(\"dxos.mesh.signal.signal-client.bytes-in\", getByteCount(message), {\n tags: createIdentityTags(message)\n });\n }\n async recordMessageSending(message, sendMessage) {\n this._performance.sentMessages++;\n const tags = createIdentityTags(message);\n let success = true;\n try {\n const reqStart = Date.now();\n await sendMessage();\n const reqDuration = Date.now() - reqStart;\n trace3.metrics.distribution(\"dxos.mesh.signal.signal-client.send-duration\", reqDuration, {\n tags\n });\n trace3.metrics.distribution(\"dxos.mesh.signal.signal-client.bytes-out\", getByteCount(message), {\n tags\n });\n } catch (err) {\n success = false;\n }\n trace3.metrics.increment(\"dxos.mesh.signal.signal-client.sent-total\", 1, {\n tags: {\n ...tags,\n success\n }\n });\n }\n recordStreamCloseErrors(count) {\n trace3.metrics.increment(\"dxos.mesh.signal.signal-client.stream-close-errors\", count);\n }\n recordReconciliation(params) {\n trace3.metrics.increment(\"dxos.mesh.signal.signal-client.reconciliation\", 1, {\n tags: {\n success: params.success\n }\n });\n }\n};\nvar getByteCount = (message) => {\n return message.author.asUint8Array().length + message.recipient.asUint8Array().length + message.payload.type_url.length + message.payload.value.length;\n};\nvar createIdentityTags = (message) => {\n return {\n peer: message.author.toHex()\n };\n};\n\n// packages/core/mesh/messaging/src/signal-client/signal-local-state.ts\nimport { asyncTimeout, Event } from \"@dxos/async\";\nimport { cancelWithContext } from \"@dxos/context\";\nimport { PublicKey as PublicKey2 } from \"@dxos/keys\";\nimport { log as log2 } from \"@dxos/log\";\nimport { ComplexMap as ComplexMap2, ComplexSet as ComplexSet2, safeAwaitAll } from \"@dxos/util\";\nvar __dxlog_file2 = \"/home/runner/work/dxos/dxos/packages/core/mesh/messaging/src/signal-client/signal-local-state.ts\";\nvar SignalLocalState = class {\n constructor(_onMessage, _onSwarmEvent) {\n this._onMessage = _onMessage;\n this._onSwarmEvent = _onSwarmEvent;\n this._swarmStreams = new ComplexMap2(({ topic, peerId }) => topic.toHex() + peerId.toHex());\n this._joinedTopics = new ComplexSet2(({ topic, peerId }) => topic.toHex() + peerId.toHex());\n this._subscribedMessages = new ComplexSet2(({ peerId }) => peerId.toHex());\n this.messageStreams = new ComplexMap2((key) => key.toHex());\n this.reconciled = new Event();\n }\n async safeCloseStreams() {\n const streams = [\n ...this._swarmStreams.values()\n ].concat([\n ...this.messageStreams.values()\n ]);\n this._swarmStreams.clear();\n this.messageStreams.clear();\n const failureCount = (await safeAwaitAll(streams, (s) => s.close())).length;\n return {\n failureCount\n };\n }\n join({ topic, peerId }) {\n this._joinedTopics.add({\n topic,\n peerId\n });\n }\n leave({ topic, peerId }) {\n void this._swarmStreams.get({\n topic,\n peerId\n })?.close();\n this._swarmStreams.delete({\n topic,\n peerId\n });\n this._joinedTopics.delete({\n topic,\n peerId\n });\n }\n subscribeMessages(peerId) {\n this._subscribedMessages.add({\n peerId\n });\n }\n unsubscribeMessages(peerId) {\n log2(\"unsubscribing from messages\", {\n peerId\n }, {\n F: __dxlog_file2,\n L: 76,\n S: this,\n C: (f, a) => f(...a)\n });\n this._subscribedMessages.delete({\n peerId\n });\n void this.messageStreams.get(peerId)?.close();\n this.messageStreams.delete(peerId);\n }\n async reconcile(ctx, client) {\n await this._reconcileSwarmSubscriptions(ctx, client);\n await this._reconcileMessageSubscriptions(ctx, client);\n this.reconciled.emit();\n }\n async _reconcileSwarmSubscriptions(ctx, client) {\n for (const { topic, peerId } of this._swarmStreams.keys()) {\n if (this._joinedTopics.has({\n topic,\n peerId\n })) {\n continue;\n }\n void this._swarmStreams.get({\n topic,\n peerId\n })?.close();\n this._swarmStreams.delete({\n topic,\n peerId\n });\n }\n for (const { topic, peerId } of this._joinedTopics.values()) {\n if (this._swarmStreams.has({\n topic,\n peerId\n })) {\n continue;\n }\n const swarmStream = await asyncTimeout(cancelWithContext(ctx, client.join({\n topic,\n peerId\n })), 5e3);\n swarmStream.subscribe(async (swarmEvent) => {\n if (this._joinedTopics.has({\n topic,\n peerId\n })) {\n log2(\"swarm event\", {\n swarmEvent\n }, {\n F: __dxlog_file2,\n L: 112,\n S: this,\n C: (f, a) => f(...a)\n });\n await this._onSwarmEvent({\n topic,\n swarmEvent\n });\n }\n });\n this._swarmStreams.set({\n topic,\n peerId\n }, swarmStream);\n }\n }\n async _reconcileMessageSubscriptions(ctx, client) {\n for (const peerId of this.messageStreams.keys()) {\n if (this._subscribedMessages.has({\n peerId\n })) {\n continue;\n }\n void this.messageStreams.get(peerId)?.close();\n this.messageStreams.delete(peerId);\n }\n for (const { peerId } of this._subscribedMessages.values()) {\n if (this.messageStreams.has(peerId)) {\n continue;\n }\n const messageStream = await asyncTimeout(cancelWithContext(ctx, client.receiveMessages(peerId)), 5e3);\n messageStream.subscribe(async (signalMessage) => {\n if (this._subscribedMessages.has({\n peerId\n })) {\n const message = {\n author: PublicKey2.from(signalMessage.author),\n recipient: PublicKey2.from(signalMessage.recipient),\n payload: signalMessage.payload\n };\n await this._onMessage(message);\n }\n });\n this.messageStreams.set(peerId, messageStream);\n }\n }\n};\n\n// packages/core/mesh/messaging/src/signal-client/signal-rpc-client.ts\nimport WebSocket from \"isomorphic-ws\";\nimport { scheduleTaskInterval as scheduleTaskInterval2, TimeoutError as TimeoutError2, Trigger } from \"@dxos/async\";\nimport { Context as Context2 } from \"@dxos/context\";\nimport { invariant as invariant2 } from \"@dxos/invariant\";\nimport { PublicKey as PublicKey3 } from \"@dxos/keys\";\nimport { log as log3 } from \"@dxos/log\";\nimport { schema as schema2, trace as trace5 } from \"@dxos/protocols\";\nimport { createProtoRpcPeer } from \"@dxos/rpc\";\n\n// packages/core/mesh/messaging/src/signal-client/signal-rpc-client-monitor.ts\nimport { trace as trace4 } from \"@dxos/tracing\";\nvar SignalRpcClientMonitor = class {\n recordClientCloseFailure(params) {\n trace4.metrics.increment(\"dxos.mesh.signal.signal-rpc-client.close-failure\", 1, {\n tags: {\n reason: params.failureReason\n }\n });\n }\n};\n\n// packages/core/mesh/messaging/src/signal-client/signal-rpc-client.ts\nvar __dxlog_file3 = \"/home/runner/work/dxos/dxos/packages/core/mesh/messaging/src/signal-client/signal-rpc-client.ts\";\nvar SIGNAL_KEEPALIVE_INTERVAL = 1e4;\nvar SignalRPCClient = class {\n constructor({ url, callbacks = {} }) {\n this._connectTrigger = new Trigger();\n this._closed = false;\n this._closeComplete = new Trigger();\n this._monitor = new SignalRpcClientMonitor();\n const traceId = PublicKey3.random().toHex();\n log3.trace(\"dxos.mesh.signal-rpc-client.constructor\", trace5.begin({\n id: traceId\n }), {\n F: __dxlog_file3,\n L: 60,\n S: this,\n C: (f, a) => f(...a)\n });\n this._url = url;\n this._callbacks = callbacks;\n this._socket = new WebSocket(this._url);\n this._rpc = createProtoRpcPeer({\n requested: {\n Signal: schema2.getService(\"dxos.mesh.signal.Signal\")\n },\n noHandshake: true,\n port: {\n send: (msg) => {\n if (this._closed) {\n return;\n }\n try {\n this._socket.send(msg);\n } catch (err) {\n log3.warn(\"send error\", err, {\n F: __dxlog_file3,\n L: 79,\n S: this,\n C: (f, a) => f(...a)\n });\n }\n },\n subscribe: (cb) => {\n this._socket.onmessage = async (msg) => {\n if (typeof Blob !== \"undefined\" && msg.data instanceof Blob) {\n cb(Buffer.from(await msg.data.arrayBuffer()));\n } else {\n cb(msg.data);\n }\n };\n }\n },\n encodingOptions: {\n preserveAny: true\n }\n });\n this._socket.onopen = async () => {\n try {\n await this._rpc.open();\n if (this._closed) {\n await this._safeCloseRpc();\n return;\n }\n log3(`RPC open ${this._url}`, void 0, {\n F: __dxlog_file3,\n L: 104,\n S: this,\n C: (f, a) => f(...a)\n });\n this._callbacks.onConnected?.();\n this._connectTrigger.wake();\n this._keepaliveCtx = new Context2(void 0, {\n F: __dxlog_file3,\n L: 107\n });\n scheduleTaskInterval2(this._keepaliveCtx, async () => {\n this._socket?.send(\"__ping__\");\n }, SIGNAL_KEEPALIVE_INTERVAL);\n } catch (err) {\n this._callbacks.onError?.(err);\n this._socket.close();\n this._closed = true;\n }\n };\n this._socket.onclose = async () => {\n log3(`Disconnected ${this._url}`, void 0, {\n F: __dxlog_file3,\n L: 127,\n S: this,\n C: (f, a) => f(...a)\n });\n this._callbacks.onDisconnected?.();\n this._closeComplete.wake();\n await this.close();\n };\n this._socket.onerror = async (event) => {\n if (this._closed) {\n this._socket.close();\n return;\n }\n this._closed = true;\n this._callbacks.onError?.(event.error ?? new Error(event.message));\n await this._safeCloseRpc();\n log3.warn(`Socket ${event.type ?? \"unknown\"} error`, {\n message: event.message,\n url: this._url\n }, {\n F: __dxlog_file3,\n L: 143,\n S: this,\n C: (f, a) => f(...a)\n });\n };\n log3.trace(\"dxos.mesh.signal-rpc-client.constructor\", trace5.end({\n id: traceId\n }), {\n F: __dxlog_file3,\n L: 146,\n S: this,\n C: (f, a) => f(...a)\n });\n }\n async close() {\n if (this._closed) {\n return;\n }\n this._closed = true;\n await this._keepaliveCtx?.dispose();\n try {\n await this._safeCloseRpc();\n if (this._socket.readyState === WebSocket.OPEN || this._socket.readyState === WebSocket.CONNECTING) {\n this._socket.close();\n }\n await this._closeComplete.wait({\n timeout: 1e3\n });\n } catch (err) {\n const failureReason = err instanceof TimeoutError2 ? \"timeout\" : err?.constructor?.name ?? \"unknown\";\n this._monitor.recordClientCloseFailure({\n failureReason\n });\n }\n }\n async join({ topic, peerId }) {\n log3(\"join\", {\n topic,\n peerId,\n metadata: this._callbacks?.getMetadata?.()\n }, {\n F: __dxlog_file3,\n L: 172,\n S: this,\n C: (f, a) => f(...a)\n });\n invariant2(!this._closed, \"SignalRPCClient is closed\", {\n F: __dxlog_file3,\n L: 173,\n S: this,\n A: [\n \"!this._closed\",\n \"'SignalRPCClient is closed'\"\n ]\n });\n await this._connectTrigger.wait();\n const swarmStream = this._rpc.rpc.Signal.join({\n swarm: topic.asUint8Array(),\n peer: peerId.asUint8Array(),\n metadata: this._callbacks?.getMetadata?.()\n });\n await swarmStream.waitUntilReady();\n return swarmStream;\n }\n async receiveMessages(peerId) {\n log3(\"receiveMessages\", {\n peerId\n }, {\n F: __dxlog_file3,\n L: 185,\n S: this,\n C: (f, a) => f(...a)\n });\n invariant2(!this._closed, \"SignalRPCClient is closed\", {\n F: __dxlog_file3,\n L: 186,\n S: this,\n A: [\n \"!this._closed\",\n \"'SignalRPCClient is closed'\"\n ]\n });\n await this._connectTrigger.wait();\n const messageStream = this._rpc.rpc.Signal.receiveMessages({\n peer: peerId.asUint8Array()\n });\n await messageStream.waitUntilReady();\n return messageStream;\n }\n async sendMessage({ author, recipient, payload }) {\n log3(\"sendMessage\", {\n author,\n recipient,\n payload,\n metadata: this._callbacks?.getMetadata?.()\n }, {\n F: __dxlog_file3,\n L: 196,\n S: this,\n C: (f, a) => f(...a)\n });\n invariant2(!this._closed, \"SignalRPCClient is closed\", {\n F: __dxlog_file3,\n L: 197,\n S: this,\n A: [\n \"!this._closed\",\n \"'SignalRPCClient is closed'\"\n ]\n });\n await this._connectTrigger.wait();\n await this._rpc.rpc.Signal.sendMessage({\n author: author.asUint8Array(),\n recipient: recipient.asUint8Array(),\n payload,\n metadata: this._callbacks?.getMetadata?.()\n });\n }\n async _safeCloseRpc() {\n try {\n this._connectTrigger.reset();\n await this._rpc.close();\n } catch (err) {\n log3.catch(err, void 0, {\n F: __dxlog_file3,\n L: 212,\n S: this,\n C: (f, a) => f(...a)\n });\n }\n }\n};\n\n// packages/core/mesh/messaging/src/signal-client/signal-client.ts\nvar __dxlog_file4 = \"/home/runner/work/dxos/dxos/packages/core/mesh/messaging/src/signal-client/signal-client.ts\";\nvar DEFAULT_RECONNECT_TIMEOUT = 100;\nvar MAX_RECONNECT_TIMEOUT = 5e3;\nvar ERROR_RECONCILE_DELAY = 1e3;\nvar RECONCILE_INTERVAL = 5e3;\nvar SignalClient = class extends Resource {\n /**\n * @param _host Signal server websocket URL.\n * @param onMessage called when a new message is received.\n * @param onSwarmEvent called when a new swarm event is received.\n * @param _getMetadata signal-message metadata provider, called for every message.\n */\n constructor(_host, onMessage, onSwarmEvent, _getMetadata) {\n super();\n this._host = _host;\n this._getMetadata = _getMetadata;\n this._monitor = new SignalClientMonitor();\n this._state = SignalState.CLOSED;\n this._lastReconciliationFailed = false;\n this._clientReady = new Trigger2();\n this._reconnectAfter = DEFAULT_RECONNECT_TIMEOUT;\n this._instanceId = PublicKey4.random().toHex();\n this.statusChanged = new Event2();\n if (!this._host.startsWith(\"wss://\") && !this._host.startsWith(\"ws://\")) {\n throw new Error(`Signal server requires a websocket URL. Provided: ${this._host}`);\n }\n this.localState = new SignalLocalState((message) => {\n this._monitor.recordMessageReceived(message);\n return onMessage(message);\n }, onSwarmEvent);\n }\n async _open() {\n log4.trace(\"dxos.mesh.signal-client.open\", trace6.begin({\n id: this._instanceId\n }), {\n F: __dxlog_file4,\n L: 83,\n S: this,\n C: (f, a) => f(...a)\n });\n if ([\n SignalState.CONNECTED,\n SignalState.CONNECTING\n ].includes(this._state)) {\n return;\n }\n this._setState(SignalState.CONNECTING);\n this._reconcileTask = new DeferredTask(this._ctx, async () => {\n try {\n await cancelWithContext2(this._connectionCtx, this._clientReady.wait({\n timeout: 5e3\n }));\n invariant3(this._state === SignalState.CONNECTED, \"Not connected to Signal Server\", {\n F: __dxlog_file4,\n L: 93,\n S: this,\n A: [\n \"this._state === SignalState.CONNECTED\",\n \"'Not connected to Signal Server'\"\n ]\n });\n await this.localState.reconcile(this._connectionCtx, this._client);\n this._monitor.recordReconciliation({\n success: true\n });\n this._lastReconciliationFailed = false;\n } catch (err) {\n this._lastReconciliationFailed = true;\n this._monitor.recordReconciliation({\n success: false\n });\n throw err;\n }\n });\n scheduleTaskInterval3(this._ctx, async () => {\n if (this._state === SignalState.CONNECTED) {\n this._reconcileTask.schedule();\n }\n }, RECONCILE_INTERVAL);\n this._reconnectTask = new DeferredTask(this._ctx, async () => {\n try {\n await this._reconnect();\n this._monitor.recordReconnect({\n success: true\n });\n } catch (err) {\n this._monitor.recordReconnect({\n success: false\n });\n throw err;\n }\n });\n this._createClient();\n log4.trace(\"dxos.mesh.signal-client.open\", trace6.end({\n id: this._instanceId\n }), {\n F: __dxlog_file4,\n L: 126,\n S: this,\n C: (f, a) => f(...a)\n });\n }\n async _catch(err) {\n if (this._state === SignalState.CLOSED || this._ctx.disposed) {\n return;\n }\n if (this._state === SignalState.CONNECTED && !this._lastReconciliationFailed) {\n log4.warn(\"SignalClient error:\", err, {\n F: __dxlog_file4,\n L: 135,\n S: this,\n C: (f, a) => f(...a)\n });\n }\n this._scheduleReconcileAfterError();\n }\n async _close() {\n log4(\"closing...\", void 0, {\n F: __dxlog_file4,\n L: 141,\n S: this,\n C: (f, a) => f(...a)\n });\n if ([\n SignalState.CLOSED\n ].includes(this._state)) {\n return;\n }\n this._setState(SignalState.CLOSED);\n await this._safeResetClient();\n log4(\"closed\", void 0, {\n F: __dxlog_file4,\n L: 149,\n S: this,\n C: (f, a) => f(...a)\n });\n }\n getStatus() {\n return {\n host: this._host,\n state: this._state,\n error: this._lastError?.message,\n reconnectIn: this._reconnectAfter,\n ...this._monitor.getRecordedTimestamps()\n };\n }\n async join(args) {\n log4(\"joining\", {\n topic: args.topic,\n peerId: args.peerId\n }, {\n F: __dxlog_file4,\n L: 163,\n S: this,\n C: (f, a) => f(...a)\n });\n this._monitor.recordJoin();\n this.localState.join(args);\n this._reconcileTask?.schedule();\n }\n async leave(args) {\n log4(\"leaving\", {\n topic: args.topic,\n peerId: args.peerId\n }, {\n F: __dxlog_file4,\n L: 170,\n S: this,\n C: (f, a) => f(...a)\n });\n this._monitor.recordLeave();\n this.localState.leave(args);\n }\n async sendMessage(msg) {\n return this._monitor.recordMessageSending(msg, async () => {\n await this._clientReady.wait();\n invariant3(this._state === SignalState.CONNECTED, \"Not connected to Signal Server\", {\n F: __dxlog_file4,\n L: 178,\n S: this,\n A: [\n \"this._state === SignalState.CONNECTED\",\n \"'Not connected to Signal Server'\"\n ]\n });\n await this._client.sendMessage(msg);\n });\n }\n async subscribeMessages(peerId) {\n log4(\"subscribing to messages\", {\n peerId\n }, {\n F: __dxlog_file4,\n L: 184,\n S: this,\n C: (f, a) => f(...a)\n });\n this.localState.subscribeMessages(peerId);\n this._reconcileTask?.schedule();\n }\n async unsubscribeMessages(peerId) {\n log4(\"unsubscribing from messages\", {\n peerId\n }, {\n F: __dxlog_file4,\n L: 190,\n S: this,\n C: (f, a) => f(...a)\n });\n this.localState.unsubscribeMessages(peerId);\n }\n _scheduleReconcileAfterError() {\n scheduleTask2(this._ctx, () => this._reconcileTask.schedule(), ERROR_RECONCILE_DELAY);\n }\n _createClient() {\n log4(\"creating client\", {\n host: this._host,\n state: this._state\n }, {\n F: __dxlog_file4,\n L: 199,\n S: this,\n C: (f, a) => f(...a)\n });\n invariant3(!this._client, \"Client already created\", {\n F: __dxlog_file4,\n L: 200,\n S: this,\n A: [\n \"!this._client\",\n \"'Client already created'\"\n ]\n });\n this._monitor.recordConnectionStartTime();\n this._connectionCtx = this._ctx.derive();\n this._connectionCtx.onDispose(async () => {\n log4(\"connection context disposed\", void 0, {\n F: __dxlog_file4,\n L: 207,\n S: this,\n C: (f, a) => f(...a)\n });\n const { failureCount } = await this.localState.safeCloseStreams();\n this._monitor.recordStreamCloseErrors(failureCount);\n });\n try {\n const client = new SignalRPCClient({\n url: this._host,\n callbacks: {\n onConnected: () => {\n if (client === this._client) {\n log4(\"socket connected\", void 0, {\n F: __dxlog_file4,\n L: 218,\n S: this,\n C: (f, a) => f(...a)\n });\n this._onConnected();\n }\n },\n onDisconnected: () => {\n if (client !== this._client) {\n return;\n }\n log4(\"socket disconnected\", {\n state: this._state\n }, {\n F: __dxlog_file4,\n L: 227,\n S: this,\n C: (f, a) => f(...a)\n });\n if (this._state === SignalState.ERROR) {\n this._setState(SignalState.DISCONNECTED);\n } else {\n this._onDisconnected();\n }\n },\n onError: (error) => {\n if (client === this._client) {\n log4(\"socket error\", {\n error,\n state: this._state\n }, {\n F: __dxlog_file4,\n L: 239,\n S: this,\n C: (f, a) => f(...a)\n });\n this._onDisconnected({\n error\n });\n }\n },\n getMetadata: this._getMetadata\n }\n });\n this._client = client;\n } catch (error) {\n this._client = void 0;\n this._onDisconnected({\n error\n });\n }\n }\n async _reconnect() {\n log4(`reconnecting in ${this._reconnectAfter}ms`, {\n state: this._state\n }, {\n F: __dxlog_file4,\n L: 254,\n S: this,\n C: (f, a) => f(...a)\n });\n if (this._state === SignalState.RECONNECTING) {\n log4.info(\"Signal api already reconnecting.\", void 0, {\n F: __dxlog_file4,\n L: 257,\n S: this,\n C: (f, a) => f(...a)\n });\n return;\n }\n if (this._state === SignalState.CLOSED) {\n return;\n }\n this._setState(SignalState.RECONNECTING);\n await this._safeResetClient();\n await cancelWithContext2(this._ctx, sleep(this._reconnectAfter));\n this._createClient();\n }\n _onConnected() {\n this._lastError = void 0;\n this._lastReconciliationFailed = false;\n this._reconnectAfter = DEFAULT_RECONNECT_TIMEOUT;\n this._setState(SignalState.CONNECTED);\n this._clientReady.wake();\n this._reconcileTask.schedule();\n }\n _onDisconnected(options) {\n this._updateReconnectTimeout();\n if (this._state === SignalState.CLOSED) {\n return;\n }\n if (options?.error) {\n this._lastError = options.error;\n this._setState(SignalState.ERROR);\n } else {\n this._setState(SignalState.DISCONNECTED);\n }\n this._reconnectTask.schedule();\n }\n _setState(newState) {\n this._state = newState;\n this._monitor.recordStateChangeTime();\n log4(\"signal state changed\", {\n status: this.getStatus()\n }, {\n F: __dxlog_file4,\n L: 298,\n S: this,\n C: (f, a) => f(...a)\n });\n this.statusChanged.emit(this.getStatus());\n }\n _updateReconnectTimeout() {\n if (this._state !== SignalState.CONNECTED && this._state !== SignalState.CONNECTING) {\n this._reconnectAfter *= 2;\n this._reconnectAfter = Math.min(this._reconnectAfter, MAX_RECONNECT_TIMEOUT);\n }\n }\n async _safeResetClient() {\n await this._connectionCtx?.dispose();\n this._connectionCtx = void 0;\n this._clientReady.reset();\n await this._client?.close().catch(() => {\n });\n this._client = void 0;\n }\n};\n\n// packages/core/mesh/messaging/src/signal-manager/memory-signal-manager.ts\nimport { Event as Event3, Trigger as Trigger3 } from \"@dxos/async\";\nimport { Context as Context3 } from \"@dxos/context\";\nimport { invariant as invariant4 } from \"@dxos/invariant\";\nimport { PublicKey as PublicKey5 } from \"@dxos/keys\";\nimport { log as log5 } from \"@dxos/log\";\nimport { schema as schema3 } from \"@dxos/protocols\";\nimport { ComplexMap as ComplexMap3, ComplexSet as ComplexSet3 } from \"@dxos/util\";\nvar __dxlog_file5 = \"/home/runner/work/dxos/dxos/packages/core/mesh/messaging/src/signal-manager/memory-signal-manager.ts\";\nvar MemorySignalManagerContext = class {\n constructor() {\n // Swarm messages.\n this.swarmEvent = new Event3();\n // Mapping from topic to set of peers.\n this.swarms = new ComplexMap3(PublicKey5.hash);\n // Map of connections for each peer for signaling.\n this.connections = new ComplexMap3(PublicKey5.hash);\n }\n};\nvar MemorySignalManager = class {\n constructor(_context) {\n this._context = _context;\n this.statusChanged = new Event3();\n this.swarmEvent = new Event3();\n this.onMessage = new Event3();\n this._joinedSwarms = new ComplexSet3(({ topic, peerId }) => topic.toHex() + peerId.toHex());\n this._freezeTrigger = new Trigger3().wake();\n this._ctx = new Context3(void 0, {\n F: __dxlog_file5,\n L: 62\n });\n this._ctx.onDispose(this._context.swarmEvent.on((data) => this.swarmEvent.emit(data)));\n }\n async open() {\n if (!this._ctx.disposed) {\n return;\n }\n this._ctx = new Context3(void 0, {\n F: __dxlog_file5,\n L: 71\n });\n this._ctx.onDispose(this._context.swarmEvent.on((data) => this.swarmEvent.emit(data)));\n await Promise.all([\n ...this._joinedSwarms.values()\n ].map((value) => this.join(value)));\n }\n async close() {\n if (this._ctx.disposed) {\n return;\n }\n const joinedSwarmsCopy = new ComplexSet3(({ topic, peerId }) => topic.toHex() + peerId.toHex(), [\n ...this._joinedSwarms.values()\n ]);\n await Promise.all([\n ...this._joinedSwarms.values()\n ].map((value) => this.leave(value)));\n this._joinedSwarms = joinedSwarmsCopy;\n await this._ctx.dispose();\n }\n getStatus() {\n return [];\n }\n async join({ topic, peerId }) {\n invariant4(!this._ctx.disposed, \"Closed\", {\n F: __dxlog_file5,\n L: 100,\n S: this,\n A: [\n \"!this._ctx.disposed\",\n \"'Closed'\"\n ]\n });\n this._joinedSwarms.add({\n topic,\n peerId\n });\n if (!this._context.swarms.has(topic)) {\n this._context.swarms.set(topic, new ComplexSet3(PublicKey5.hash));\n }\n this._context.swarms.get(topic).add(peerId);\n this._context.swarmEvent.emit({\n topic,\n swarmEvent: {\n peerAvailable: {\n peer: peerId.asUint8Array(),\n since: /* @__PURE__ */ new Date()\n }\n }\n });\n for (const [topic2, peerIds] of this._context.swarms) {\n Array.from(peerIds).forEach((peerId2) => {\n this.swarmEvent.emit({\n topic: topic2,\n swarmEvent: {\n peerAvailable: {\n peer: peerId2.asUint8Array(),\n since: /* @__PURE__ */ new Date()\n }\n }\n });\n });\n }\n }\n async leave({ topic, peerId }) {\n invariant4(!this._ctx.disposed, \"Closed\", {\n F: __dxlog_file5,\n L: 136,\n S: this,\n A: [\n \"!this._ctx.disposed\",\n \"'Closed'\"\n ]\n });\n this._joinedSwarms.delete({\n topic,\n peerId\n });\n if (!this._context.swarms.has(topic)) {\n this._context.swarms.set(topic, new ComplexSet3(PublicKey5.hash));\n }\n this._context.swarms.get(topic).delete(peerId);\n const swarmEvent = {\n peerLeft: {\n peer: peerId.asUint8Array()\n }\n };\n this._context.swarmEvent.emit({\n topic,\n swarmEvent\n });\n }\n async sendMessage({ author, recipient, payload }) {\n log5(\"send message\", {\n author,\n recipient,\n ...dec(payload)\n }, {\n F: __dxlog_file5,\n L: 156,\n S: this,\n C: (f, a) => f(...a)\n });\n invariant4(recipient, void 0, {\n F: __dxlog_file5,\n L: 158,\n S: this,\n A: [\n \"recipient\",\n \"\"\n ]\n });\n invariant4(!this._ctx.disposed, \"Closed\", {\n F: __dxlog_file5,\n L: 159,\n S: this,\n A: [\n \"!this._ctx.disposed\",\n \"'Closed'\"\n ]\n });\n await this._freezeTrigger.wait();\n const remote = this._context.connections.get(recipient);\n if (!remote) {\n log5.warn(\"recipient is not subscribed for messages\", {\n author,\n recipient\n }, {\n F: __dxlog_file5,\n L: 165,\n S: this,\n C: (f, a) => f(...a)\n });\n return;\n }\n if (remote._ctx.disposed) {\n log5.warn(\"recipient is disposed\", {\n author,\n recipient\n }, {\n F: __dxlog_file5,\n L: 170,\n S: this,\n C: (f, a) => f(...a)\n });\n return;\n }\n remote._freezeTrigger.wait().then(() => {\n if (remote._ctx.disposed) {\n log5.warn(\"recipient is disposed\", {\n author,\n recipient\n }, {\n F: __dxlog_file5,\n L: 178,\n S: this,\n C: (f, a) => f(...a)\n });\n return;\n }\n log5(\"receive message\", {\n author,\n recipient,\n ...dec(payload)\n }, {\n F: __dxlog_file5,\n L: 182,\n S: this,\n C: (f, a) => f(...a)\n });\n remote.onMessage.emit({\n author,\n recipient,\n payload\n });\n }).catch((err) => {\n log5.error(\"error while waiting for freeze\", {\n err\n }, {\n F: __dxlog_file5,\n L: 187,\n S: this,\n C: (f, a) => f(...a)\n });\n });\n }\n async subscribeMessages(peerId) {\n log5(\"subscribing\", {\n peerId\n }, {\n F: __dxlog_file5,\n L: 192,\n S: this,\n C: (f, a) => f(...a)\n });\n this._context.connections.set(peerId, this);\n }\n async unsubscribeMessages(peerId) {\n log5(\"unsubscribing\", {\n peerId\n }, {\n F: __dxlog_file5,\n L: 197,\n S: this,\n C: (f, a) => f(...a)\n });\n this._context.connections.delete(peerId);\n }\n freeze() {\n this._freezeTrigger.reset();\n }\n unfreeze() {\n this._freezeTrigger.wake();\n }\n};\nvar dec = (payload) => {\n if (!payload.type_url.endsWith(\"ReliablePayload\")) {\n return {};\n }\n const relPayload = schema3.getCodecForType(\"dxos.mesh.messaging.ReliablePayload\").decode(payload.value);\n if (typeof relPayload?.payload?.data === \"object\") {\n return {\n payload: Object.keys(relPayload?.payload?.data)[0],\n sessionId: relPayload?.payload?.sessionId\n };\n }\n return {};\n};\n\n// packages/core/mesh/messaging/src/signal-manager/websocket-signal-manager.ts\nimport { Event as Event4, sleep as sleep2, synchronized } from \"@dxos/async\";\nimport { Context as Context4 } from \"@dxos/context\";\nimport { invariant as invariant5 } from \"@dxos/invariant\";\nimport { PublicKey as PublicKey6 } from \"@dxos/keys\";\nimport { log as log6 } from \"@dxos/log\";\nimport { RateLimitExceededError, TimeoutError as TimeoutError3, trace as trace8 } from \"@dxos/protocols\";\nimport { BitField, safeAwaitAll as safeAwaitAll2 } from \"@dxos/util\";\n\n// packages/core/mesh/messaging/src/signal-manager/websocket-signal-manager-monitor.ts\nimport { trace as trace7 } from \"@dxos/tracing\";\nvar WebsocketSignalManagerMonitor = class {\n recordRateLimitExceeded() {\n trace7.metrics.increment(\"dxos.mesh.signal.signal-manager.rate-limit-hit\", 1);\n }\n recordServerFailure(params) {\n trace7.metrics.increment(\"dxos.mesh.signal.signal-manager.server-failure\", 1, {\n tags: {\n server: params.serverName,\n restarted: params.willRestart\n }\n });\n }\n};\n\n// packages/core/mesh/messaging/src/signal-manager/websocket-signal-manager.ts\nfunction _ts_decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n r = Reflect.decorate(decorators, target, key, desc);\n else\n for (var i = decorators.length - 1; i >= 0; i--)\n if (d = decorators[i])\n r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\nvar __dxlog_file6 = \"/home/runner/work/dxos/dxos/packages/core/mesh/messaging/src/signal-manager/websocket-signal-manager.ts\";\nvar MAX_SERVER_FAILURES = 5;\nvar WSS_SIGNAL_SERVER_REBOOT_DELAY = 3e3;\nvar WebsocketSignalManager = class {\n constructor(_hosts, _getMetadata) {\n this._hosts = _hosts;\n this._getMetadata = _getMetadata;\n this._servers = /* @__PURE__ */ new Map();\n this._monitor = new WebsocketSignalManagerMonitor();\n this._opened = false;\n this.failureCount = /* @__PURE__ */ new Map();\n this.statusChanged = new Event4();\n this.swarmEvent = new Event4();\n this.onMessage = new Event4();\n this._instanceId = PublicKey6.random().toHex();\n log6(\"Created WebsocketSignalManager\", {\n hosts: this._hosts\n }, {\n F: __dxlog_file6,\n L: 58,\n S: this,\n C: (f, a) => f(...a)\n });\n for (const host of this._hosts) {\n if (this._servers.has(host.server)) {\n continue;\n }\n const server = new SignalClient(host.server, async (message) => this.onMessage.emit(message), async (data) => this.swarmEvent.emit(data), this._getMetadata);\n server.statusChanged.on(() => this.statusChanged.emit(this.getStatus()));\n this._servers.set(host.server, server);\n this.failureCount.set(host.server, 0);\n }\n this._failedServersBitfield = BitField.zeros(this._hosts.length);\n }\n async open() {\n if (this._opened) {\n return;\n }\n log6(\"open signal manager\", {\n hosts: this._hosts\n }, {\n F: __dxlog_file6,\n L: 85,\n S: this,\n C: (f, a) => f(...a)\n });\n log6.trace(\"dxos.mesh.websocket-signal-manager.open\", trace8.begin({\n id: this._instanceId\n }), {\n F: __dxlog_file6,\n L: 86,\n S: this,\n C: (f, a) => f(...a)\n });\n this._initContext();\n await safeAwaitAll2(this._servers.values(), (server) => server.open());\n this._opened = true;\n log6.trace(\"dxos.mesh.websocket-signal-manager.open\", trace8.end({\n id: this._instanceId\n }), {\n F: __dxlog_file6,\n L: 93,\n S: this,\n C: (f, a) => f(...a)\n });\n }\n async close() {\n if (!this._opened) {\n return;\n }\n this._opened = false;\n await this._ctx.dispose();\n await safeAwaitAll2(this._servers.values(), (server) => server.close());\n }\n async restartServer(serverName) {\n log6(\"restarting server\", {\n serverName\n }, {\n F: __dxlog_file6,\n L: 107,\n S: this,\n C: (f, a) => f(...a)\n });\n invariant5(this._opened, \"server already closed\", {\n F: __dxlog_file6,\n L: 108,\n S: this,\n A: [\n \"this._opened\",\n \"'server already closed'\"\n ]\n });\n const server = this._servers.get(serverName);\n invariant5(server, \"server not found\", {\n F: __dxlog_file6,\n L: 111,\n S: this,\n A: [\n \"server\",\n \"'server not found'\"\n ]\n });\n await server.close();\n await sleep2(WSS_SIGNAL_SERVER_REBOOT_DELAY);\n await server.open();\n }\n getStatus() {\n return Array.from(this._servers.values()).map((server) => server.getStatus());\n }\n async join({ topic, peerId }) {\n log6(\"join\", {\n topic,\n peerId\n }, {\n F: __dxlog_file6,\n L: 124,\n S: this,\n C: (f, a) => f(...a)\n });\n invariant5(this._opened, \"Closed\", {\n F: __dxlog_file6,\n L: 125,\n S: this,\n A: [\n \"this._opened\",\n \"'Closed'\"\n ]\n });\n await this._forEachServer((server) => server.join({\n topic,\n peerId\n }));\n }\n async leave({ topic, peerId }) {\n log6(\"leaving\", {\n topic,\n peerId\n }, {\n F: __dxlog_file6,\n L: 131,\n S: this,\n C: (f, a) => f(...a)\n });\n invariant5(this._opened, \"Closed\", {\n F: __dxlog_file6,\n L: 132,\n S: this,\n A: [\n \"this._opened\",\n \"'Closed'\"\n ]\n });\n await this._forEachServer((server) => server.leave({\n topic,\n peerId\n }));\n }\n async sendMessage({ author, recipient, payload }) {\n log6(\"signal\", {\n recipient\n }, {\n F: __dxlog_file6,\n L: 145,\n S: this,\n C: (f, a) => f(...a)\n });\n invariant5(this._opened, \"Closed\", {\n F: __dxlog_file6,\n L: 146,\n S: this,\n A: [\n \"this._opened\",\n \"'Closed'\"\n ]\n });\n void this._forEachServer(async (server, serverName, index) => {\n void server.sendMessage({\n author,\n recipient,\n payload\n }).then(() => this._clearServerFailedFlag(serverName, index)).catch((err) => {\n if (err instanceof RateLimitExceededError) {\n log6.info(\"WSS rate limit exceeded\", {\n err\n }, {\n F: __dxlog_file6,\n L: 154,\n S: this,\n C: (f, a) => f(...a)\n });\n this._monitor.recordRateLimitExceeded();\n } else if (err instanceof TimeoutError3 || err.constructor.name === \"TimeoutError\") {\n log6.info(\"WSS sendMessage timeout\", {\n err\n }, {\n F: __dxlog_file6,\n L: 157,\n S: this,\n C: (f, a) => f(...a)\n });\n void this.checkServerFailure(serverName, index);\n } else {\n log6.warn(`error sending to ${serverName}`, {\n err\n }, {\n F: __dxlog_file6,\n L: 160,\n S: this,\n C: (f, a) => f(...a)\n });\n void this.checkServerFailure(serverName, index);\n }\n });\n });\n }\n async checkServerFailure(serverName, index) {\n const failureCount = this.failureCount.get(serverName) ?? 0;\n const isRestartRequired = failureCount > MAX_SERVER_FAILURES;\n this._monitor.recordServerFailure({\n serverName,\n willRestart: isRestartRequired\n });\n if (isRestartRequired) {\n if (!BitField.get(this._failedServersBitfield, index)) {\n log6.warn(\"too many failures for ws-server, restarting\", {\n serverName,\n failureCount\n }, {\n F: __dxlog_file6,\n L: 174,\n S: this,\n C: (f, a) => f(...a)\n });\n BitField.set(this._failedServersBitfield, index, true);\n }\n await this.restartServer(serverName);\n this.failureCount.set(serverName, 0);\n return;\n }\n this.failureCount.set(serverName, (this.failureCount.get(serverName) ?? 0) + 1);\n }\n _clearServerFailedFlag(serverName, index) {\n if (BitField.get(this._failedServersBitfield, index)) {\n log6.info(\"server connection restored\", {\n serverName\n }, {\n F: __dxlog_file6,\n L: 187,\n S: this,\n C: (f, a) => f(...a)\n });\n BitField.set(this._failedServersBitfield, index, false);\n this.failureCount.set(serverName, 0);\n }\n }\n async subscribeMessages(peerId) {\n log6(\"subscribed for message stream\", {\n peerId\n }, {\n F: __dxlog_file6,\n L: 194,\n S: this,\n C: (f, a) => f(...a)\n });\n invariant5(this._opened, \"Closed\", {\n F: __dxlog_file6,\n L: 195,\n S: this,\n A: [\n \"this._opened\",\n \"'Closed'\"\n ]\n });\n await this._forEachServer(async (server) => server.subscribeMessages(peerId));\n }\n async unsubscribeMessages(peerId) {\n log6(\"subscribed for message stream\", {\n peerId\n }, {\n F: __dxlog_file6,\n L: 201,\n S: this,\n C: (f, a) => f(...a)\n });\n invariant5(this._opened, \"Closed\", {\n F: __dxlog_file6,\n L: 202,\n S: this,\n A: [\n \"this._opened\",\n \"'Closed'\"\n ]\n });\n await this._forEachServer(async (server) => server.unsubscribeMessages(peerId));\n }\n _initContext() {\n this._ctx = new Context4({\n onError: (err) => log6.catch(err, void 0, {\n F: __dxlog_file6,\n L: 209,\n S: this,\n C: (f, a) => f(...a)\n })\n }, {\n F: __dxlog_file6,\n L: 208\n });\n }\n async _forEachServer(fn) {\n return Promise.all(Array.from(this._servers.entries()).map(([serverName, server], idx) => fn(server, serverName, idx)));\n }\n};\n_ts_decorate([\n synchronized\n], WebsocketSignalManager.prototype, \"open\", null);\n_ts_decorate([\n synchronized\n], WebsocketSignalManager.prototype, \"close\", null);\n_ts_decorate([\n synchronized\n], WebsocketSignalManager.prototype, \"join\", null);\n_ts_decorate([\n synchronized\n], WebsocketSignalManager.prototype, \"leave\", null);\n_ts_decorate([\n synchronized\n], WebsocketSignalManager.prototype, \"checkServerFailure\", null);\n\n// packages/core/mesh/messaging/src/signal-manager/utils.ts\nimport { invariant as invariant6 } from \"@dxos/invariant\";\nimport { log as log7 } from \"@dxos/log\";\nimport { DeviceKind } from \"@dxos/protocols/proto/dxos/client/services\";\nvar __dxlog_file7 = \"/home/runner/work/dxos/dxos/packages/core/mesh/messaging/src/signal-manager/utils.ts\";\nvar setIdentityTags = ({ identityService, devicesService, setTag }) => {\n identityService.queryIdentity().subscribe((idqr) => {\n if (!idqr?.identity?.identityKey) {\n log7(\"empty response from identity service\", {\n idqr\n }, {\n F: __dxlog_file7,\n L: 21,\n S: void 0,\n C: (f, a) => f(...a)\n });\n return;\n }\n setTag(\"identityKey\", idqr.identity.identityKey.truncate());\n });\n devicesService.queryDevices().subscribe((dqr) => {\n if (!dqr || !dqr.devices || dqr.devices.length === 0) {\n log7(\"empty response from device service\", {\n device: dqr\n }, {\n F: __dxlog_file7,\n L: 30,\n S: void 0,\n C: (f, a) => f(...a)\n });\n return;\n }\n invariant6(dqr, \"empty response from device service\", {\n F: __dxlog_file7,\n L: 33,\n S: void 0,\n A: [\n \"dqr\",\n \"'empty response from device service'\"\n ]\n });\n const thisDevice = dqr.devices.find((device) => device.kind === DeviceKind.CURRENT);\n if (!thisDevice) {\n log7(\"no current device\", {\n device: dqr\n }, {\n F: __dxlog_file7,\n L: 37,\n S: void 0,\n C: (f, a) => f(...a)\n });\n return;\n }\n setTag(\"deviceKey\", thisDevice.deviceKey.truncate());\n });\n};\nexport {\n MemorySignalManager,\n MemorySignalManagerContext,\n Messenger,\n SignalClient,\n WebsocketSignalManager,\n setIdentityTags\n};\n//# sourceMappingURL=index.mjs.map\n"],"names":["SignalState","MessengerMonitor","trace","params","MESSAGE_TIMEOUT","__dxlog_file","ReliablePayload","schema","Acknowledgement","RECEIVED_MESSAGES_GC_INTERVAL","Messenger","signalManager","retryDelay","ComplexMap","peerId","payloadType","PublicKey","ComplexSet","traceId","log","trace2","f","a","Context","err","message","scheduleTaskInterval","author","recipient","payload","invariant","messageContext","reliablePayload","messageReceived","timeoutHit","sendAttempts","promise","resolve","reject","scheduleExponentialBackoffTaskInterval","scheduleTask","ProtocolTimeoutError","TimeoutError","onMessage","listeners","_a","messageId","defaultListenerMap","listener","listenerMap","start","key","elapsed","SignalClientMonitor","trace3","createIdentityTags","getByteCount","sendMessage","tags","success","reqStart","reqDuration","count","__dxlog_file2","SignalLocalState","_onMessage","_onSwarmEvent","ComplexMap2","topic","ComplexSet2","Event","streams","safeAwaitAll","s","log2","ctx","client","swarmStream","asyncTimeout","cancelWithContext","swarmEvent","messageStream","signalMessage","PublicKey2","SignalRpcClientMonitor","trace4","__dxlog_file3","SIGNAL_KEEPALIVE_INTERVAL","SignalRPCClient","url","callbacks","Trigger","PublicKey3","log3","trace5","WebSocket","createProtoRpcPeer","schema2","msg","cb","Buffer","_b","Context2","scheduleTaskInterval2","_d","_c","event","failureReason","TimeoutError2","invariant2","__dxlog_file4","DEFAULT_RECONNECT_TIMEOUT","MAX_RECONNECT_TIMEOUT","ERROR_RECONCILE_DELAY","RECONCILE_INTERVAL","SignalClient","Resource","_host","onSwarmEvent","_getMetadata","Trigger2","PublicKey4","Event2","log4","trace6","DeferredTask","cancelWithContext2","invariant3","scheduleTaskInterval3","args","scheduleTask2","failureCount","error","sleep","options","newState","WebsocketSignalManagerMonitor","trace7","_ts_decorate","decorators","target","desc","c","d","i","__dxlog_file6","MAX_SERVER_FAILURES","WSS_SIGNAL_SERVER_REBOOT_DELAY","WebsocketSignalManager","_hosts","Event4","PublicKey6","log6","host","server","data","BitField","trace8","safeAwaitAll2","serverName","invariant5","sleep2","index","RateLimitExceededError","TimeoutError3","isRestartRequired","Context4","fn","idx","synchronized","__dxlog_file7","setIdentityTags","identityService","devicesService","setTag","idqr","log7","dqr","invariant6","thisDevice","device","DeviceKind"],"mappings":"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"}
|