@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.
Files changed (41) hide show
  1. package/dist/bundle/shell.mjs +87927 -10
  2. package/dist/bundle/shell.mjs.map +1 -1
  3. package/dist/bundle/shell.umd.js +101 -133
  4. package/dist/bundle/shell.umd.js.map +1 -1
  5. package/dist/lib/browser/meta.json +1 -1
  6. package/dist/lib/browser/react.mjs +8 -11
  7. package/dist/lib/browser/react.mjs.map +3 -3
  8. package/dist/types/src/composites/Shell/Shell.d.ts +1 -1
  9. package/dist/types/src/composites/Shell/Shell.d.ts.map +1 -1
  10. package/dist/types/src/composites/Shell/Shell.js +28 -28
  11. package/dist/types/src/composites/Shell/Shell.js.map +1 -1
  12. package/dist/types/src/composites/Shell/ShellContext.d.ts +1 -2
  13. package/dist/types/src/composites/Shell/ShellContext.d.ts.map +1 -1
  14. package/dist/types/src/composites/Shell/ShellContext.js +12 -13
  15. package/dist/types/src/composites/Shell/ShellContext.js.map +1 -1
  16. package/dist/types/src/composites/Shell/memory-shell-runtime.d.ts +1 -2
  17. package/dist/types/src/composites/Shell/memory-shell-runtime.d.ts.map +1 -1
  18. package/dist/types/src/composites/Shell/memory-shell-runtime.js +2 -2
  19. package/dist/types/src/composites/Shell/memory-shell-runtime.js.map +1 -1
  20. package/dist/types/src/composites/Shell/run-shell.d.ts.map +1 -1
  21. package/dist/types/src/composites/Shell/run-shell.js +3 -4
  22. package/dist/types/src/composites/Shell/run-shell.js.map +1 -1
  23. package/dist/types/src/panels/IdentityPanel/useAgentHandlers.d.ts.map +1 -1
  24. package/dist/types/src/panels/IdentityPanel/useAgentHandlers.js +1 -2
  25. package/dist/types/src/panels/IdentityPanel/useAgentHandlers.js.map +1 -1
  26. package/package.json +23 -23
  27. package/src/composites/Shell/Shell.tsx +4 -4
  28. package/src/composites/Shell/ShellContext.tsx +1 -2
  29. package/src/composites/Shell/memory-shell-runtime.ts +2 -2
  30. package/src/composites/Shell/run-shell.tsx +9 -2
  31. package/src/panels/IdentityPanel/useAgentHandlers.ts +1 -2
  32. package/dist/bundle/browser-C2u-GX_T.mjs +0 -7
  33. package/dist/bundle/browser-C2u-GX_T.mjs.map +0 -1
  34. package/dist/bundle/index-2qvjtbyT.mjs +0 -112
  35. package/dist/bundle/index-2qvjtbyT.mjs.map +0 -1
  36. package/dist/bundle/index-Bxrp8rGc.mjs +0 -4593
  37. package/dist/bundle/index-Bxrp8rGc.mjs.map +0 -1
  38. package/dist/bundle/index-CLKnEc1H.mjs +0 -92930
  39. package/dist/bundle/index-CLKnEc1H.mjs.map +0 -1
  40. package/dist/bundle/index-ZweceImk.mjs +0 -1322
  41. package/dist/bundle/index-ZweceImk.mjs.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-Bxrp8rGc.mjs","sources":["../../../../../node_modules/.pnpm/xor-distance@2.0.0/node_modules/xor-distance/index.js","../../../../../node_modules/.pnpm/ms@2.1.2/node_modules/ms/index.js","../../../../../node_modules/.pnpm/debug@4.3.4/node_modules/debug/src/common.js","../../../../../node_modules/.pnpm/debug@4.3.4/node_modules/debug/src/browser.js","../../../../../node_modules/.pnpm/get-browser-rtc@1.1.0/node_modules/get-browser-rtc/index.js","../../../../../node_modules/.pnpm/randombytes@2.1.0/node_modules/randombytes/browser.js","../../../../../node_modules/.pnpm/queue-microtask@1.2.3/node_modules/queue-microtask/index.js","../../../../../node_modules/.pnpm/err-code@3.0.1/node_modules/err-code/index.js","../../../../../node_modules/.pnpm/simple-peer@9.11.1/node_modules/simple-peer/index.js","../../../../../node_modules/.pnpm/tiny-invariant@1.3.1/node_modules/tiny-invariant/dist/esm/tiny-invariant.js","../../../../core/protocols/dist/esm/src/proto/gen/dxos/mesh/bridge.js","../../../../../node_modules/.pnpm/emitter-component@1.1.1/node_modules/emitter-component/index.js","../../../../../node_modules/.pnpm/stream@0.0.2/node_modules/stream/index.js","../../../../../node_modules/.pnpm/varint@6.0.0/node_modules/varint/encode.js","../../../../../node_modules/.pnpm/varint@6.0.0/node_modules/varint/decode.js","../../../../../node_modules/.pnpm/varint@6.0.0/node_modules/varint/length.js","../../../../../node_modules/.pnpm/varint@6.0.0/node_modules/varint/index.js","../../../../core/mesh/teleport/dist/lib/browser/chunk-GHYLNW23.mjs","../../../../core/mesh/network-manager/dist/lib/browser/chunk-3UBXH53L.mjs"],"sourcesContent":["module.exports = dist\n\nfunction dist (a, b) {\n if (a.length !== b.length) throw new Error('Inputs should have the same length')\n var result = Buffer.allocUnsafe(a.length)\n for (var i = 0; i < a.length; i++) result[i] = a[i] ^ b[i]\n return result\n}\n\ndist.compare = function compare (a, b) {\n if (a.length !== b.length) throw new Error('Inputs should have the same length')\n for (var i = 0; i < a.length; i++) {\n if (a[i] === b[i]) continue\n return a[i] < b[i] ? -1 : 1\n }\n return 0\n}\n\ndist.gt = function gt (a, b) {\n return dist.compare(a, b) === 1\n}\n\ndist.lt = function lt (a, b) {\n return dist.compare(a, b) === -1\n}\n\ndist.eq = function eq (a, b) {\n return dist.compare(a, b) === 0\n}\n","/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function(val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isFinite(val)) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'weeks':\n case 'week':\n case 'w':\n return n * w;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (msAbs >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (msAbs >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (msAbs >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return plural(ms, msAbs, d, 'day');\n }\n if (msAbs >= h) {\n return plural(ms, msAbs, h, 'hour');\n }\n if (msAbs >= m) {\n return plural(ms, msAbs, m, 'minute');\n }\n if (msAbs >= s) {\n return plural(ms, msAbs, s, 'second');\n }\n return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n var isPlural = msAbs >= n * 1.5;\n return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n","\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\n\nfunction setup(env) {\n\tcreateDebug.debug = createDebug;\n\tcreateDebug.default = createDebug;\n\tcreateDebug.coerce = coerce;\n\tcreateDebug.disable = disable;\n\tcreateDebug.enable = enable;\n\tcreateDebug.enabled = enabled;\n\tcreateDebug.humanize = require('ms');\n\tcreateDebug.destroy = destroy;\n\n\tObject.keys(env).forEach(key => {\n\t\tcreateDebug[key] = env[key];\n\t});\n\n\t/**\n\t* The currently active debug mode names, and names to skip.\n\t*/\n\n\tcreateDebug.names = [];\n\tcreateDebug.skips = [];\n\n\t/**\n\t* Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t*\n\t* Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t*/\n\tcreateDebug.formatters = {};\n\n\t/**\n\t* Selects a color for a debug namespace\n\t* @param {String} namespace The namespace string for the debug instance to be colored\n\t* @return {Number|String} An ANSI color code for the given namespace\n\t* @api private\n\t*/\n\tfunction selectColor(namespace) {\n\t\tlet hash = 0;\n\n\t\tfor (let i = 0; i < namespace.length; i++) {\n\t\t\thash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n\t\t\thash |= 0; // Convert to 32bit integer\n\t\t}\n\n\t\treturn createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n\t}\n\tcreateDebug.selectColor = selectColor;\n\n\t/**\n\t* Create a debugger with the given `namespace`.\n\t*\n\t* @param {String} namespace\n\t* @return {Function}\n\t* @api public\n\t*/\n\tfunction createDebug(namespace) {\n\t\tlet prevTime;\n\t\tlet enableOverride = null;\n\t\tlet namespacesCache;\n\t\tlet enabledCache;\n\n\t\tfunction debug(...args) {\n\t\t\t// Disabled?\n\t\t\tif (!debug.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst self = debug;\n\n\t\t\t// Set `diff` timestamp\n\t\t\tconst curr = Number(new Date());\n\t\t\tconst ms = curr - (prevTime || curr);\n\t\t\tself.diff = ms;\n\t\t\tself.prev = prevTime;\n\t\t\tself.curr = curr;\n\t\t\tprevTime = curr;\n\n\t\t\targs[0] = createDebug.coerce(args[0]);\n\n\t\t\tif (typeof args[0] !== 'string') {\n\t\t\t\t// Anything else let's inspect with %O\n\t\t\t\targs.unshift('%O');\n\t\t\t}\n\n\t\t\t// Apply any `formatters` transformations\n\t\t\tlet index = 0;\n\t\t\targs[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {\n\t\t\t\t// If we encounter an escaped % then don't increase the array index\n\t\t\t\tif (match === '%%') {\n\t\t\t\t\treturn '%';\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t\tconst formatter = createDebug.formatters[format];\n\t\t\t\tif (typeof formatter === 'function') {\n\t\t\t\t\tconst val = args[index];\n\t\t\t\t\tmatch = formatter.call(self, val);\n\n\t\t\t\t\t// Now we need to remove `args[index]` since it's inlined in the `format`\n\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t\tindex--;\n\t\t\t\t}\n\t\t\t\treturn match;\n\t\t\t});\n\n\t\t\t// Apply env-specific formatting (colors, etc.)\n\t\t\tcreateDebug.formatArgs.call(self, args);\n\n\t\t\tconst logFn = self.log || createDebug.log;\n\t\t\tlogFn.apply(self, args);\n\t\t}\n\n\t\tdebug.namespace = namespace;\n\t\tdebug.useColors = createDebug.useColors();\n\t\tdebug.color = createDebug.selectColor(namespace);\n\t\tdebug.extend = extend;\n\t\tdebug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release.\n\n\t\tObject.defineProperty(debug, 'enabled', {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: false,\n\t\t\tget: () => {\n\t\t\t\tif (enableOverride !== null) {\n\t\t\t\t\treturn enableOverride;\n\t\t\t\t}\n\t\t\t\tif (namespacesCache !== createDebug.namespaces) {\n\t\t\t\t\tnamespacesCache = createDebug.namespaces;\n\t\t\t\t\tenabledCache = createDebug.enabled(namespace);\n\t\t\t\t}\n\n\t\t\t\treturn enabledCache;\n\t\t\t},\n\t\t\tset: v => {\n\t\t\t\tenableOverride = v;\n\t\t\t}\n\t\t});\n\n\t\t// Env-specific initialization logic for debug instances\n\t\tif (typeof createDebug.init === 'function') {\n\t\t\tcreateDebug.init(debug);\n\t\t}\n\n\t\treturn debug;\n\t}\n\n\tfunction extend(namespace, delimiter) {\n\t\tconst newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n\t\tnewDebug.log = this.log;\n\t\treturn newDebug;\n\t}\n\n\t/**\n\t* Enables a debug mode by namespaces. This can include modes\n\t* separated by a colon and wildcards.\n\t*\n\t* @param {String} namespaces\n\t* @api public\n\t*/\n\tfunction enable(namespaces) {\n\t\tcreateDebug.save(namespaces);\n\t\tcreateDebug.namespaces = namespaces;\n\n\t\tcreateDebug.names = [];\n\t\tcreateDebug.skips = [];\n\n\t\tlet i;\n\t\tconst split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n\t\tconst len = split.length;\n\n\t\tfor (i = 0; i < len; i++) {\n\t\t\tif (!split[i]) {\n\t\t\t\t// ignore empty strings\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tnamespaces = split[i].replace(/\\*/g, '.*?');\n\n\t\t\tif (namespaces[0] === '-') {\n\t\t\t\tcreateDebug.skips.push(new RegExp('^' + namespaces.slice(1) + '$'));\n\t\t\t} else {\n\t\t\t\tcreateDebug.names.push(new RegExp('^' + namespaces + '$'));\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t* Disable debug output.\n\t*\n\t* @return {String} namespaces\n\t* @api public\n\t*/\n\tfunction disable() {\n\t\tconst namespaces = [\n\t\t\t...createDebug.names.map(toNamespace),\n\t\t\t...createDebug.skips.map(toNamespace).map(namespace => '-' + namespace)\n\t\t].join(',');\n\t\tcreateDebug.enable('');\n\t\treturn namespaces;\n\t}\n\n\t/**\n\t* Returns true if the given mode name is enabled, false otherwise.\n\t*\n\t* @param {String} name\n\t* @return {Boolean}\n\t* @api public\n\t*/\n\tfunction enabled(name) {\n\t\tif (name[name.length - 1] === '*') {\n\t\t\treturn true;\n\t\t}\n\n\t\tlet i;\n\t\tlet len;\n\n\t\tfor (i = 0, len = createDebug.skips.length; i < len; i++) {\n\t\t\tif (createDebug.skips[i].test(name)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (i = 0, len = createDebug.names.length; i < len; i++) {\n\t\t\tif (createDebug.names[i].test(name)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t* Convert regexp to namespace\n\t*\n\t* @param {RegExp} regxep\n\t* @return {String} namespace\n\t* @api private\n\t*/\n\tfunction toNamespace(regexp) {\n\t\treturn regexp.toString()\n\t\t\t.substring(2, regexp.toString().length - 2)\n\t\t\t.replace(/\\.\\*\\?$/, '*');\n\t}\n\n\t/**\n\t* Coerce `val`.\n\t*\n\t* @param {Mixed} val\n\t* @return {Mixed}\n\t* @api private\n\t*/\n\tfunction coerce(val) {\n\t\tif (val instanceof Error) {\n\t\t\treturn val.stack || val.message;\n\t\t}\n\t\treturn val;\n\t}\n\n\t/**\n\t* XXX DO NOT USE. This is a temporary stub function.\n\t* XXX It WILL be removed in the next major release.\n\t*/\n\tfunction destroy() {\n\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t}\n\n\tcreateDebug.enable(createDebug.load());\n\n\treturn createDebug;\n}\n\nmodule.exports = setup;\n","/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\nexports.destroy = (() => {\n\tlet warned = false;\n\n\treturn () => {\n\t\tif (!warned) {\n\t\t\twarned = true;\n\t\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t\t}\n\t};\n})();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n\t'#0000CC',\n\t'#0000FF',\n\t'#0033CC',\n\t'#0033FF',\n\t'#0066CC',\n\t'#0066FF',\n\t'#0099CC',\n\t'#0099FF',\n\t'#00CC00',\n\t'#00CC33',\n\t'#00CC66',\n\t'#00CC99',\n\t'#00CCCC',\n\t'#00CCFF',\n\t'#3300CC',\n\t'#3300FF',\n\t'#3333CC',\n\t'#3333FF',\n\t'#3366CC',\n\t'#3366FF',\n\t'#3399CC',\n\t'#3399FF',\n\t'#33CC00',\n\t'#33CC33',\n\t'#33CC66',\n\t'#33CC99',\n\t'#33CCCC',\n\t'#33CCFF',\n\t'#6600CC',\n\t'#6600FF',\n\t'#6633CC',\n\t'#6633FF',\n\t'#66CC00',\n\t'#66CC33',\n\t'#9900CC',\n\t'#9900FF',\n\t'#9933CC',\n\t'#9933FF',\n\t'#99CC00',\n\t'#99CC33',\n\t'#CC0000',\n\t'#CC0033',\n\t'#CC0066',\n\t'#CC0099',\n\t'#CC00CC',\n\t'#CC00FF',\n\t'#CC3300',\n\t'#CC3333',\n\t'#CC3366',\n\t'#CC3399',\n\t'#CC33CC',\n\t'#CC33FF',\n\t'#CC6600',\n\t'#CC6633',\n\t'#CC9900',\n\t'#CC9933',\n\t'#CCCC00',\n\t'#CCCC33',\n\t'#FF0000',\n\t'#FF0033',\n\t'#FF0066',\n\t'#FF0099',\n\t'#FF00CC',\n\t'#FF00FF',\n\t'#FF3300',\n\t'#FF3333',\n\t'#FF3366',\n\t'#FF3399',\n\t'#FF33CC',\n\t'#FF33FF',\n\t'#FF6600',\n\t'#FF6633',\n\t'#FF9900',\n\t'#FF9933',\n\t'#FFCC00',\n\t'#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\n// eslint-disable-next-line complexity\nfunction useColors() {\n\t// NB: In an Electron preload script, document will be defined but not fully\n\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t// explicitly\n\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\treturn true;\n\t}\n\n\t// Internet Explorer and Edge do not support colors.\n\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\treturn false;\n\t}\n\n\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\treturn (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\t(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\targs[0] = (this.useColors ? '%c' : '') +\n\t\tthis.namespace +\n\t\t(this.useColors ? ' %c' : ' ') +\n\t\targs[0] +\n\t\t(this.useColors ? '%c ' : ' ') +\n\t\t'+' + module.exports.humanize(this.diff);\n\n\tif (!this.useColors) {\n\t\treturn;\n\t}\n\n\tconst c = 'color: ' + this.color;\n\targs.splice(1, 0, c, 'color: inherit');\n\n\t// The final \"%c\" is somewhat tricky, because there could be other\n\t// arguments passed either before or after the %c, so we need to\n\t// figure out the correct index to insert the CSS into\n\tlet index = 0;\n\tlet lastC = 0;\n\targs[0].replace(/%[a-zA-Z%]/g, match => {\n\t\tif (match === '%%') {\n\t\t\treturn;\n\t\t}\n\t\tindex++;\n\t\tif (match === '%c') {\n\t\t\t// We only are interested in the *last* %c\n\t\t\t// (the user may have provided their own)\n\t\t\tlastC = index;\n\t\t}\n\t});\n\n\targs.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.debug()` when available.\n * No-op when `console.debug` is not a \"function\".\n * If `console.debug` is not available, falls back\n * to `console.log`.\n *\n * @api public\n */\nexports.log = console.debug || console.log || (() => {});\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\ttry {\n\t\tif (namespaces) {\n\t\t\texports.storage.setItem('debug', namespaces);\n\t\t} else {\n\t\t\texports.storage.removeItem('debug');\n\t\t}\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\nfunction load() {\n\tlet r;\n\ttry {\n\t\tr = exports.storage.getItem('debug');\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n\n\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\tr = process.env.DEBUG;\n\t}\n\n\treturn r;\n}\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n\ttry {\n\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t// The Browser also has localStorage in the global context.\n\t\treturn localStorage;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n\ttry {\n\t\treturn JSON.stringify(v);\n\t} catch (error) {\n\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t}\n};\n","// originally pulled out of simple-peer\n\nmodule.exports = function getBrowserRTC () {\n if (typeof globalThis === 'undefined') return null\n var wrtc = {\n RTCPeerConnection: globalThis.RTCPeerConnection || globalThis.mozRTCPeerConnection ||\n globalThis.webkitRTCPeerConnection,\n RTCSessionDescription: globalThis.RTCSessionDescription ||\n globalThis.mozRTCSessionDescription || globalThis.webkitRTCSessionDescription,\n RTCIceCandidate: globalThis.RTCIceCandidate || globalThis.mozRTCIceCandidate ||\n globalThis.webkitRTCIceCandidate\n }\n if (!wrtc.RTCPeerConnection) return null\n return wrtc\n}\n","'use strict'\n\n// limit of Crypto.getRandomValues()\n// https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues\nvar MAX_BYTES = 65536\n\n// Node supports requesting up to this number of bytes\n// https://github.com/nodejs/node/blob/master/lib/internal/crypto/random.js#L48\nvar MAX_UINT32 = 4294967295\n\nfunction oldBrowser () {\n throw new Error('Secure random number generation is not supported by this browser.\\nUse Chrome, Firefox or Internet Explorer 11')\n}\n\nvar Buffer = require('safe-buffer').Buffer\nvar crypto = global.crypto || global.msCrypto\n\nif (crypto && crypto.getRandomValues) {\n module.exports = randomBytes\n} else {\n module.exports = oldBrowser\n}\n\nfunction randomBytes (size, cb) {\n // phantomjs needs to throw\n if (size > MAX_UINT32) throw new RangeError('requested too many random bytes')\n\n var bytes = Buffer.allocUnsafe(size)\n\n if (size > 0) { // getRandomValues fails on IE if size == 0\n if (size > MAX_BYTES) { // this is the max bytes crypto.getRandomValues\n // can do at once see https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues\n for (var generated = 0; generated < size; generated += MAX_BYTES) {\n // buffer.slice automatically checks if the end is past the end of\n // the buffer so we don't have to here\n crypto.getRandomValues(bytes.slice(generated, generated + MAX_BYTES))\n }\n } else {\n crypto.getRandomValues(bytes)\n }\n }\n\n if (typeof cb === 'function') {\n return process.nextTick(function () {\n cb(null, bytes)\n })\n }\n\n return bytes\n}\n","/*! queue-microtask. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\nlet promise\n\nmodule.exports = typeof queueMicrotask === 'function'\n ? queueMicrotask.bind(typeof window !== 'undefined' ? window : global)\n // reuse resolved promise, and allocate it lazily\n : cb => (promise || (promise = Promise.resolve()))\n .then(cb)\n .catch(err => setTimeout(() => { throw err }, 0))\n","'use strict';\n\n/**\n * @typedef {{ [key: string]: any }} Extensions\n * @typedef {Error} Err\n * @property {string} message\n */\n\n/**\n *\n * @param {Error} obj\n * @param {Extensions} props\n * @returns {Error & Extensions}\n */\nfunction assign(obj, props) {\n for (const key in props) {\n Object.defineProperty(obj, key, {\n value: props[key],\n enumerable: true,\n configurable: true,\n });\n }\n\n return obj;\n}\n\n/**\n *\n * @param {any} err - An Error\n * @param {string|Extensions} code - A string code or props to set on the error\n * @param {Extensions} [props] - Props to set on the error\n * @returns {Error & Extensions}\n */\nfunction createError(err, code, props) {\n if (!err || typeof err === 'string') {\n throw new TypeError('Please pass an Error to err-code');\n }\n\n if (!props) {\n props = {};\n }\n\n if (typeof code === 'object') {\n props = code;\n code = '';\n }\n\n if (code) {\n props.code = code;\n }\n\n try {\n return assign(err, props);\n } catch (_) {\n props.message = err.message;\n props.stack = err.stack;\n\n const ErrClass = function () {};\n\n ErrClass.prototype = Object.create(Object.getPrototypeOf(err));\n\n // @ts-ignore\n const output = assign(new ErrClass(), props);\n\n return output;\n }\n}\n\nmodule.exports = createError;\n","/*! simple-peer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\nconst debug = require('debug')('simple-peer')\nconst getBrowserRTC = require('get-browser-rtc')\nconst randombytes = require('randombytes')\nconst stream = require('readable-stream')\nconst queueMicrotask = require('queue-microtask') // TODO: remove when Node 10 is not supported\nconst errCode = require('err-code')\nconst { Buffer } = require('buffer')\n\nconst MAX_BUFFERED_AMOUNT = 64 * 1024\nconst ICECOMPLETE_TIMEOUT = 5 * 1000\nconst CHANNEL_CLOSING_TIMEOUT = 5 * 1000\n\n// HACK: Filter trickle lines when trickle is disabled #354\nfunction filterTrickle (sdp) {\n return sdp.replace(/a=ice-options:trickle\\s\\n/g, '')\n}\n\nfunction warn (message) {\n console.warn(message)\n}\n\n/**\n * WebRTC peer connection. Same API as node core `net.Socket`, plus a few extra methods.\n * Duplex stream.\n * @param {Object} opts\n */\nclass Peer extends stream.Duplex {\n constructor (opts) {\n opts = Object.assign({\n allowHalfOpen: false\n }, opts)\n\n super(opts)\n\n this._id = randombytes(4).toString('hex').slice(0, 7)\n this._debug('new peer %o', opts)\n\n this.channelName = opts.initiator\n ? opts.channelName || randombytes(20).toString('hex')\n : null\n\n this.initiator = opts.initiator || false\n this.channelConfig = opts.channelConfig || Peer.channelConfig\n this.channelNegotiated = this.channelConfig.negotiated\n this.config = Object.assign({}, Peer.config, opts.config)\n this.offerOptions = opts.offerOptions || {}\n this.answerOptions = opts.answerOptions || {}\n this.sdpTransform = opts.sdpTransform || (sdp => sdp)\n this.streams = opts.streams || (opts.stream ? [opts.stream] : []) // support old \"stream\" option\n this.trickle = opts.trickle !== undefined ? opts.trickle : true\n this.allowHalfTrickle = opts.allowHalfTrickle !== undefined ? opts.allowHalfTrickle : false\n this.iceCompleteTimeout = opts.iceCompleteTimeout || ICECOMPLETE_TIMEOUT\n\n this.destroyed = false\n this.destroying = false\n this._connected = false\n\n this.remoteAddress = undefined\n this.remoteFamily = undefined\n this.remotePort = undefined\n this.localAddress = undefined\n this.localFamily = undefined\n this.localPort = undefined\n\n this._wrtc = (opts.wrtc && typeof opts.wrtc === 'object')\n ? opts.wrtc\n : getBrowserRTC()\n\n if (!this._wrtc) {\n if (typeof window === 'undefined') {\n throw errCode(new Error('No WebRTC support: Specify `opts.wrtc` option in this environment'), 'ERR_WEBRTC_SUPPORT')\n } else {\n throw errCode(new Error('No WebRTC support: Not a supported browser'), 'ERR_WEBRTC_SUPPORT')\n }\n }\n\n this._pcReady = false\n this._channelReady = false\n this._iceComplete = false // ice candidate trickle done (got null candidate)\n this._iceCompleteTimer = null // send an offer/answer anyway after some timeout\n this._channel = null\n this._pendingCandidates = []\n\n this._isNegotiating = false // is this peer waiting for negotiation to complete?\n this._firstNegotiation = true\n this._batchedNegotiation = false // batch synchronous negotiations\n this._queuedNegotiation = false // is there a queued negotiation request?\n this._sendersAwaitingStable = []\n this._senderMap = new Map()\n this._closingInterval = null\n\n this._remoteTracks = []\n this._remoteStreams = []\n\n this._chunk = null\n this._cb = null\n this._interval = null\n\n try {\n this._pc = new (this._wrtc.RTCPeerConnection)(this.config)\n } catch (err) {\n this.destroy(errCode(err, 'ERR_PC_CONSTRUCTOR'))\n return\n }\n\n // We prefer feature detection whenever possible, but sometimes that's not\n // possible for certain implementations.\n this._isReactNativeWebrtc = typeof this._pc._peerConnectionId === 'number'\n\n this._pc.oniceconnectionstatechange = () => {\n this._onIceStateChange()\n }\n this._pc.onicegatheringstatechange = () => {\n this._onIceStateChange()\n }\n this._pc.onconnectionstatechange = () => {\n this._onConnectionStateChange()\n }\n this._pc.onsignalingstatechange = () => {\n this._onSignalingStateChange()\n }\n this._pc.onicecandidate = event => {\n this._onIceCandidate(event)\n }\n\n // HACK: Fix for odd Firefox behavior, see: https://github.com/feross/simple-peer/pull/783\n if (typeof this._pc.peerIdentity === 'object') {\n this._pc.peerIdentity.catch(err => {\n this.destroy(errCode(err, 'ERR_PC_PEER_IDENTITY'))\n })\n }\n\n // Other spec events, unused by this implementation:\n // - onconnectionstatechange\n // - onicecandidateerror\n // - onfingerprintfailure\n // - onnegotiationneeded\n\n if (this.initiator || this.channelNegotiated) {\n this._setupData({\n channel: this._pc.createDataChannel(this.channelName, this.channelConfig)\n })\n } else {\n this._pc.ondatachannel = event => {\n this._setupData(event)\n }\n }\n\n if (this.streams) {\n this.streams.forEach(stream => {\n this.addStream(stream)\n })\n }\n this._pc.ontrack = event => {\n this._onTrack(event)\n }\n\n this._debug('initial negotiation')\n this._needsNegotiation()\n\n this._onFinishBound = () => {\n this._onFinish()\n }\n this.once('finish', this._onFinishBound)\n }\n\n get bufferSize () {\n return (this._channel && this._channel.bufferedAmount) || 0\n }\n\n // HACK: it's possible channel.readyState is \"closing\" before peer.destroy() fires\n // https://bugs.chromium.org/p/chromium/issues/detail?id=882743\n get connected () {\n return (this._connected && this._channel.readyState === 'open')\n }\n\n address () {\n return { port: this.localPort, family: this.localFamily, address: this.localAddress }\n }\n\n signal (data) {\n if (this.destroying) return\n if (this.destroyed) throw errCode(new Error('cannot signal after peer is destroyed'), 'ERR_DESTROYED')\n if (typeof data === 'string') {\n try {\n data = JSON.parse(data)\n } catch (err) {\n data = {}\n }\n }\n this._debug('signal()')\n\n if (data.renegotiate && this.initiator) {\n this._debug('got request to renegotiate')\n this._needsNegotiation()\n }\n if (data.transceiverRequest && this.initiator) {\n this._debug('got request for transceiver')\n this.addTransceiver(data.transceiverRequest.kind, data.transceiverRequest.init)\n }\n if (data.candidate) {\n if (this._pc.remoteDescription && this._pc.remoteDescription.type) {\n this._addIceCandidate(data.candidate)\n } else {\n this._pendingCandidates.push(data.candidate)\n }\n }\n if (data.sdp) {\n this._pc.setRemoteDescription(new (this._wrtc.RTCSessionDescription)(data))\n .then(() => {\n if (this.destroyed) return\n\n this._pendingCandidates.forEach(candidate => {\n this._addIceCandidate(candidate)\n })\n this._pendingCandidates = []\n\n if (this._pc.remoteDescription.type === 'offer') this._createAnswer()\n })\n .catch(err => {\n this.destroy(errCode(err, 'ERR_SET_REMOTE_DESCRIPTION'))\n })\n }\n if (!data.sdp && !data.candidate && !data.renegotiate && !data.transceiverRequest) {\n this.destroy(errCode(new Error('signal() called with invalid signal data'), 'ERR_SIGNALING'))\n }\n }\n\n _addIceCandidate (candidate) {\n const iceCandidateObj = new this._wrtc.RTCIceCandidate(candidate)\n this._pc.addIceCandidate(iceCandidateObj)\n .catch(err => {\n if (!iceCandidateObj.address || iceCandidateObj.address.endsWith('.local')) {\n warn('Ignoring unsupported ICE candidate.')\n } else {\n this.destroy(errCode(err, 'ERR_ADD_ICE_CANDIDATE'))\n }\n })\n }\n\n /**\n * Send text/binary data to the remote peer.\n * @param {ArrayBufferView|ArrayBuffer|Buffer|string|Blob} chunk\n */\n send (chunk) {\n if (this.destroying) return\n if (this.destroyed) throw errCode(new Error('cannot send after peer is destroyed'), 'ERR_DESTROYED')\n this._channel.send(chunk)\n }\n\n /**\n * Add a Transceiver to the connection.\n * @param {String} kind\n * @param {Object} init\n */\n addTransceiver (kind, init) {\n if (this.destroying) return\n if (this.destroyed) throw errCode(new Error('cannot addTransceiver after peer is destroyed'), 'ERR_DESTROYED')\n this._debug('addTransceiver()')\n\n if (this.initiator) {\n try {\n this._pc.addTransceiver(kind, init)\n this._needsNegotiation()\n } catch (err) {\n this.destroy(errCode(err, 'ERR_ADD_TRANSCEIVER'))\n }\n } else {\n this.emit('signal', { // request initiator to renegotiate\n type: 'transceiverRequest',\n transceiverRequest: { kind, init }\n })\n }\n }\n\n /**\n * Add a MediaStream to the connection.\n * @param {MediaStream} stream\n */\n addStream (stream) {\n if (this.destroying) return\n if (this.destroyed) throw errCode(new Error('cannot addStream after peer is destroyed'), 'ERR_DESTROYED')\n this._debug('addStream()')\n\n stream.getTracks().forEach(track => {\n this.addTrack(track, stream)\n })\n }\n\n /**\n * Add a MediaStreamTrack to the connection.\n * @param {MediaStreamTrack} track\n * @param {MediaStream} stream\n */\n addTrack (track, stream) {\n if (this.destroying) return\n if (this.destroyed) throw errCode(new Error('cannot addTrack after peer is destroyed'), 'ERR_DESTROYED')\n this._debug('addTrack()')\n\n const submap = this._senderMap.get(track) || new Map() // nested Maps map [track, stream] to sender\n let sender = submap.get(stream)\n if (!sender) {\n sender = this._pc.addTrack(track, stream)\n submap.set(stream, sender)\n this._senderMap.set(track, submap)\n this._needsNegotiation()\n } else if (sender.removed) {\n throw errCode(new Error('Track has been removed. You should enable/disable tracks that you want to re-add.'), 'ERR_SENDER_REMOVED')\n } else {\n throw errCode(new Error('Track has already been added to that stream.'), 'ERR_SENDER_ALREADY_ADDED')\n }\n }\n\n /**\n * Replace a MediaStreamTrack by another in the connection.\n * @param {MediaStreamTrack} oldTrack\n * @param {MediaStreamTrack} newTrack\n * @param {MediaStream} stream\n */\n replaceTrack (oldTrack, newTrack, stream) {\n if (this.destroying) return\n if (this.destroyed) throw errCode(new Error('cannot replaceTrack after peer is destroyed'), 'ERR_DESTROYED')\n this._debug('replaceTrack()')\n\n const submap = this._senderMap.get(oldTrack)\n const sender = submap ? submap.get(stream) : null\n if (!sender) {\n throw errCode(new Error('Cannot replace track that was never added.'), 'ERR_TRACK_NOT_ADDED')\n }\n if (newTrack) this._senderMap.set(newTrack, submap)\n\n if (sender.replaceTrack != null) {\n sender.replaceTrack(newTrack)\n } else {\n this.destroy(errCode(new Error('replaceTrack is not supported in this browser'), 'ERR_UNSUPPORTED_REPLACETRACK'))\n }\n }\n\n /**\n * Remove a MediaStreamTrack from the connection.\n * @param {MediaStreamTrack} track\n * @param {MediaStream} stream\n */\n removeTrack (track, stream) {\n if (this.destroying) return\n if (this.destroyed) throw errCode(new Error('cannot removeTrack after peer is destroyed'), 'ERR_DESTROYED')\n this._debug('removeSender()')\n\n const submap = this._senderMap.get(track)\n const sender = submap ? submap.get(stream) : null\n if (!sender) {\n throw errCode(new Error('Cannot remove track that was never added.'), 'ERR_TRACK_NOT_ADDED')\n }\n try {\n sender.removed = true\n this._pc.removeTrack(sender)\n } catch (err) {\n if (err.name === 'NS_ERROR_UNEXPECTED') {\n this._sendersAwaitingStable.push(sender) // HACK: Firefox must wait until (signalingState === stable) https://bugzilla.mozilla.org/show_bug.cgi?id=1133874\n } else {\n this.destroy(errCode(err, 'ERR_REMOVE_TRACK'))\n }\n }\n this._needsNegotiation()\n }\n\n /**\n * Remove a MediaStream from the connection.\n * @param {MediaStream} stream\n */\n removeStream (stream) {\n if (this.destroying) return\n if (this.destroyed) throw errCode(new Error('cannot removeStream after peer is destroyed'), 'ERR_DESTROYED')\n this._debug('removeSenders()')\n\n stream.getTracks().forEach(track => {\n this.removeTrack(track, stream)\n })\n }\n\n _needsNegotiation () {\n this._debug('_needsNegotiation')\n if (this._batchedNegotiation) return // batch synchronous renegotiations\n this._batchedNegotiation = true\n queueMicrotask(() => {\n this._batchedNegotiation = false\n if (this.initiator || !this._firstNegotiation) {\n this._debug('starting batched negotiation')\n this.negotiate()\n } else {\n this._debug('non-initiator initial negotiation request discarded')\n }\n this._firstNegotiation = false\n })\n }\n\n negotiate () {\n if (this.destroying) return\n if (this.destroyed) throw errCode(new Error('cannot negotiate after peer is destroyed'), 'ERR_DESTROYED')\n\n if (this.initiator) {\n if (this._isNegotiating) {\n this._queuedNegotiation = true\n this._debug('already negotiating, queueing')\n } else {\n this._debug('start negotiation')\n setTimeout(() => { // HACK: Chrome crashes if we immediately call createOffer\n this._createOffer()\n }, 0)\n }\n } else {\n if (this._isNegotiating) {\n this._queuedNegotiation = true\n this._debug('already negotiating, queueing')\n } else {\n this._debug('requesting negotiation from initiator')\n this.emit('signal', { // request initiator to renegotiate\n type: 'renegotiate',\n renegotiate: true\n })\n }\n }\n this._isNegotiating = true\n }\n\n // TODO: Delete this method once readable-stream is updated to contain a default\n // implementation of destroy() that automatically calls _destroy()\n // See: https://github.com/nodejs/readable-stream/issues/283\n destroy (err) {\n this._destroy(err, () => {})\n }\n\n _destroy (err, cb) {\n if (this.destroyed || this.destroying) return\n this.destroying = true\n\n this._debug('destroying (error: %s)', err && (err.message || err))\n\n queueMicrotask(() => { // allow events concurrent with the call to _destroy() to fire (see #692)\n this.destroyed = true\n this.destroying = false\n\n this._debug('destroy (error: %s)', err && (err.message || err))\n\n this.readable = this.writable = false\n\n if (!this._readableState.ended) this.push(null)\n if (!this._writableState.finished) this.end()\n\n this._connected = false\n this._pcReady = false\n this._channelReady = false\n this._remoteTracks = null\n this._remoteStreams = null\n this._senderMap = null\n\n clearInterval(this._closingInterval)\n this._closingInterval = null\n\n clearInterval(this._interval)\n this._interval = null\n this._chunk = null\n this._cb = null\n\n if (this._onFinishBound) this.removeListener('finish', this._onFinishBound)\n this._onFinishBound = null\n\n if (this._channel) {\n try {\n this._channel.close()\n } catch (err) {}\n\n // allow events concurrent with destruction to be handled\n this._channel.onmessage = null\n this._channel.onopen = null\n this._channel.onclose = null\n this._channel.onerror = null\n }\n if (this._pc) {\n try {\n this._pc.close()\n } catch (err) {}\n\n // allow events concurrent with destruction to be handled\n this._pc.oniceconnectionstatechange = null\n this._pc.onicegatheringstatechange = null\n this._pc.onsignalingstatechange = null\n this._pc.onicecandidate = null\n this._pc.ontrack = null\n this._pc.ondatachannel = null\n }\n this._pc = null\n this._channel = null\n\n if (err) this.emit('error', err)\n this.emit('close')\n cb()\n })\n }\n\n _setupData (event) {\n if (!event.channel) {\n // In some situations `pc.createDataChannel()` returns `undefined` (in wrtc),\n // which is invalid behavior. Handle it gracefully.\n // See: https://github.com/feross/simple-peer/issues/163\n return this.destroy(errCode(new Error('Data channel event is missing `channel` property'), 'ERR_DATA_CHANNEL'))\n }\n\n this._channel = event.channel\n this._channel.binaryType = 'arraybuffer'\n\n if (typeof this._channel.bufferedAmountLowThreshold === 'number') {\n this._channel.bufferedAmountLowThreshold = MAX_BUFFERED_AMOUNT\n }\n\n this.channelName = this._channel.label\n\n this._channel.onmessage = event => {\n this._onChannelMessage(event)\n }\n this._channel.onbufferedamountlow = () => {\n this._onChannelBufferedAmountLow()\n }\n this._channel.onopen = () => {\n this._onChannelOpen()\n }\n this._channel.onclose = () => {\n this._onChannelClose()\n }\n this._channel.onerror = event => {\n const err = event.error instanceof Error\n ? event.error\n : new Error(`Datachannel error: ${event.message} ${event.filename}:${event.lineno}:${event.colno}`)\n this.destroy(errCode(err, 'ERR_DATA_CHANNEL'))\n }\n\n // HACK: Chrome will sometimes get stuck in readyState \"closing\", let's check for this condition\n // https://bugs.chromium.org/p/chromium/issues/detail?id=882743\n let isClosing = false\n this._closingInterval = setInterval(() => { // No \"onclosing\" event\n if (this._channel && this._channel.readyState === 'closing') {\n if (isClosing) this._onChannelClose() // closing timed out: equivalent to onclose firing\n isClosing = true\n } else {\n isClosing = false\n }\n }, CHANNEL_CLOSING_TIMEOUT)\n }\n\n _read () {}\n\n _write (chunk, encoding, cb) {\n if (this.destroyed) return cb(errCode(new Error('cannot write after peer is destroyed'), 'ERR_DATA_CHANNEL'))\n\n if (this._connected) {\n try {\n this.send(chunk)\n } catch (err) {\n return this.destroy(errCode(err, 'ERR_DATA_CHANNEL'))\n }\n if (this._channel.bufferedAmount > MAX_BUFFERED_AMOUNT) {\n this._debug('start backpressure: bufferedAmount %d', this._channel.bufferedAmount)\n this._cb = cb\n } else {\n cb(null)\n }\n } else {\n this._debug('write before connect')\n this._chunk = chunk\n this._cb = cb\n }\n }\n\n // When stream finishes writing, close socket. Half open connections are not\n // supported.\n _onFinish () {\n if (this.destroyed) return\n\n // Wait a bit before destroying so the socket flushes.\n // TODO: is there a more reliable way to accomplish this?\n const destroySoon = () => {\n setTimeout(() => this.destroy(), 1000)\n }\n\n if (this._connected) {\n destroySoon()\n } else {\n this.once('connect', destroySoon)\n }\n }\n\n _startIceCompleteTimeout () {\n if (this.destroyed) return\n if (this._iceCompleteTimer) return\n this._debug('started iceComplete timeout')\n this._iceCompleteTimer = setTimeout(() => {\n if (!this._iceComplete) {\n this._iceComplete = true\n this._debug('iceComplete timeout completed')\n this.emit('iceTimeout')\n this.emit('_iceComplete')\n }\n }, this.iceCompleteTimeout)\n }\n\n _createOffer () {\n if (this.destroyed) return\n\n this._pc.createOffer(this.offerOptions)\n .then(offer => {\n if (this.destroyed) return\n if (!this.trickle && !this.allowHalfTrickle) offer.sdp = filterTrickle(offer.sdp)\n offer.sdp = this.sdpTransform(offer.sdp)\n\n const sendOffer = () => {\n if (this.destroyed) return\n const signal = this._pc.localDescription || offer\n this._debug('signal')\n this.emit('signal', {\n type: signal.type,\n sdp: signal.sdp\n })\n }\n\n const onSuccess = () => {\n this._debug('createOffer success')\n if (this.destroyed) return\n if (this.trickle || this._iceComplete) sendOffer()\n else this.once('_iceComplete', sendOffer) // wait for candidates\n }\n\n const onError = err => {\n this.destroy(errCode(err, 'ERR_SET_LOCAL_DESCRIPTION'))\n }\n\n this._pc.setLocalDescription(offer)\n .then(onSuccess)\n .catch(onError)\n })\n .catch(err => {\n this.destroy(errCode(err, 'ERR_CREATE_OFFER'))\n })\n }\n\n _requestMissingTransceivers () {\n if (this._pc.getTransceivers) {\n this._pc.getTransceivers().forEach(transceiver => {\n if (!transceiver.mid && transceiver.sender.track && !transceiver.requested) {\n transceiver.requested = true // HACK: Safari returns negotiated transceivers with a null mid\n this.addTransceiver(transceiver.sender.track.kind)\n }\n })\n }\n }\n\n _createAnswer () {\n if (this.destroyed) return\n\n this._pc.createAnswer(this.answerOptions)\n .then(answer => {\n if (this.destroyed) return\n if (!this.trickle && !this.allowHalfTrickle) answer.sdp = filterTrickle(answer.sdp)\n answer.sdp = this.sdpTransform(answer.sdp)\n\n const sendAnswer = () => {\n if (this.destroyed) return\n const signal = this._pc.localDescription || answer\n this._debug('signal')\n this.emit('signal', {\n type: signal.type,\n sdp: signal.sdp\n })\n if (!this.initiator) this._requestMissingTransceivers()\n }\n\n const onSuccess = () => {\n if (this.destroyed) return\n if (this.trickle || this._iceComplete) sendAnswer()\n else this.once('_iceComplete', sendAnswer)\n }\n\n const onError = err => {\n this.destroy(errCode(err, 'ERR_SET_LOCAL_DESCRIPTION'))\n }\n\n this._pc.setLocalDescription(answer)\n .then(onSuccess)\n .catch(onError)\n })\n .catch(err => {\n this.destroy(errCode(err, 'ERR_CREATE_ANSWER'))\n })\n }\n\n _onConnectionStateChange () {\n if (this.destroyed) return\n if (this._pc.connectionState === 'failed') {\n this.destroy(errCode(new Error('Connection failed.'), 'ERR_CONNECTION_FAILURE'))\n }\n }\n\n _onIceStateChange () {\n if (this.destroyed) return\n const iceConnectionState = this._pc.iceConnectionState\n const iceGatheringState = this._pc.iceGatheringState\n\n this._debug(\n 'iceStateChange (connection: %s) (gathering: %s)',\n iceConnectionState,\n iceGatheringState\n )\n this.emit('iceStateChange', iceConnectionState, iceGatheringState)\n\n if (iceConnectionState === 'connected' || iceConnectionState === 'completed') {\n this._pcReady = true\n this._maybeReady()\n }\n if (iceConnectionState === 'failed') {\n this.destroy(errCode(new Error('Ice connection failed.'), 'ERR_ICE_CONNECTION_FAILURE'))\n }\n if (iceConnectionState === 'closed') {\n this.destroy(errCode(new Error('Ice connection closed.'), 'ERR_ICE_CONNECTION_CLOSED'))\n }\n }\n\n getStats (cb) {\n // statreports can come with a value array instead of properties\n const flattenValues = report => {\n if (Object.prototype.toString.call(report.values) === '[object Array]') {\n report.values.forEach(value => {\n Object.assign(report, value)\n })\n }\n return report\n }\n\n // Promise-based getStats() (standard)\n if (this._pc.getStats.length === 0 || this._isReactNativeWebrtc) {\n this._pc.getStats()\n .then(res => {\n const reports = []\n res.forEach(report => {\n reports.push(flattenValues(report))\n })\n cb(null, reports)\n }, err => cb(err))\n\n // Single-parameter callback-based getStats() (non-standard)\n } else if (this._pc.getStats.length > 0) {\n this._pc.getStats(res => {\n // If we destroy connection in `connect` callback this code might happen to run when actual connection is already closed\n if (this.destroyed) return\n\n const reports = []\n res.result().forEach(result => {\n const report = {}\n result.names().forEach(name => {\n report[name] = result.stat(name)\n })\n report.id = result.id\n report.type = result.type\n report.timestamp = result.timestamp\n reports.push(flattenValues(report))\n })\n cb(null, reports)\n }, err => cb(err))\n\n // Unknown browser, skip getStats() since it's anyone's guess which style of\n // getStats() they implement.\n } else {\n cb(null, [])\n }\n }\n\n _maybeReady () {\n this._debug('maybeReady pc %s channel %s', this._pcReady, this._channelReady)\n if (this._connected || this._connecting || !this._pcReady || !this._channelReady) return\n\n this._connecting = true\n\n // HACK: We can't rely on order here, for details see https://github.com/js-platform/node-webrtc/issues/339\n const findCandidatePair = () => {\n if (this.destroyed) return\n\n this.getStats((err, items) => {\n if (this.destroyed) return\n\n // Treat getStats error as non-fatal. It's not essential.\n if (err) items = []\n\n const remoteCandidates = {}\n const localCandidates = {}\n const candidatePairs = {}\n let foundSelectedCandidatePair = false\n\n items.forEach(item => {\n // TODO: Once all browsers support the hyphenated stats report types, remove\n // the non-hypenated ones\n if (item.type === 'remotecandidate' || item.type === 'remote-candidate') {\n remoteCandidates[item.id] = item\n }\n if (item.type === 'localcandidate' || item.type === 'local-candidate') {\n localCandidates[item.id] = item\n }\n if (item.type === 'candidatepair' || item.type === 'candidate-pair') {\n candidatePairs[item.id] = item\n }\n })\n\n const setSelectedCandidatePair = selectedCandidatePair => {\n foundSelectedCandidatePair = true\n\n let local = localCandidates[selectedCandidatePair.localCandidateId]\n\n if (local && (local.ip || local.address)) {\n // Spec\n this.localAddress = local.ip || local.address\n this.localPort = Number(local.port)\n } else if (local && local.ipAddress) {\n // Firefox\n this.localAddress = local.ipAddress\n this.localPort = Number(local.portNumber)\n } else if (typeof selectedCandidatePair.googLocalAddress === 'string') {\n // TODO: remove this once Chrome 58 is released\n local = selectedCandidatePair.googLocalAddress.split(':')\n this.localAddress = local[0]\n this.localPort = Number(local[1])\n }\n if (this.localAddress) {\n this.localFamily = this.localAddress.includes(':') ? 'IPv6' : 'IPv4'\n }\n\n let remote = remoteCandidates[selectedCandidatePair.remoteCandidateId]\n\n if (remote && (remote.ip || remote.address)) {\n // Spec\n this.remoteAddress = remote.ip || remote.address\n this.remotePort = Number(remote.port)\n } else if (remote && remote.ipAddress) {\n // Firefox\n this.remoteAddress = remote.ipAddress\n this.remotePort = Number(remote.portNumber)\n } else if (typeof selectedCandidatePair.googRemoteAddress === 'string') {\n // TODO: remove this once Chrome 58 is released\n remote = selectedCandidatePair.googRemoteAddress.split(':')\n this.remoteAddress = remote[0]\n this.remotePort = Number(remote[1])\n }\n if (this.remoteAddress) {\n this.remoteFamily = this.remoteAddress.includes(':') ? 'IPv6' : 'IPv4'\n }\n\n this._debug(\n 'connect local: %s:%s remote: %s:%s',\n this.localAddress,\n this.localPort,\n this.remoteAddress,\n this.remotePort\n )\n }\n\n items.forEach(item => {\n // Spec-compliant\n if (item.type === 'transport' && item.selectedCandidatePairId) {\n setSelectedCandidatePair(candidatePairs[item.selectedCandidatePairId])\n }\n\n // Old implementations\n if (\n (item.type === 'googCandidatePair' && item.googActiveConnection === 'true') ||\n ((item.type === 'candidatepair' || item.type === 'candidate-pair') && item.selected)\n ) {\n setSelectedCandidatePair(item)\n }\n })\n\n // Ignore candidate pair selection in browsers like Safari 11 that do not have any local or remote candidates\n // But wait until at least 1 candidate pair is available\n if (!foundSelectedCandidatePair && (!Object.keys(candidatePairs).length || Object.keys(localCandidates).length)) {\n setTimeout(findCandidatePair, 100)\n return\n } else {\n this._connecting = false\n this._connected = true\n }\n\n if (this._chunk) {\n try {\n this.send(this._chunk)\n } catch (err) {\n return this.destroy(errCode(err, 'ERR_DATA_CHANNEL'))\n }\n this._chunk = null\n this._debug('sent chunk from \"write before connect\"')\n\n const cb = this._cb\n this._cb = null\n cb(null)\n }\n\n // If `bufferedAmountLowThreshold` and 'onbufferedamountlow' are unsupported,\n // fallback to using setInterval to implement backpressure.\n if (typeof this._channel.bufferedAmountLowThreshold !== 'number') {\n this._interval = setInterval(() => this._onInterval(), 150)\n if (this._interval.unref) this._interval.unref()\n }\n\n this._debug('connect')\n this.emit('connect')\n })\n }\n findCandidatePair()\n }\n\n _onInterval () {\n if (!this._cb || !this._channel || this._channel.bufferedAmount > MAX_BUFFERED_AMOUNT) {\n return\n }\n this._onChannelBufferedAmountLow()\n }\n\n _onSignalingStateChange () {\n if (this.destroyed) return\n\n if (this._pc.signalingState === 'stable') {\n this._isNegotiating = false\n\n // HACK: Firefox doesn't yet support removing tracks when signalingState !== 'stable'\n this._debug('flushing sender queue', this._sendersAwaitingStable)\n this._sendersAwaitingStable.forEach(sender => {\n this._pc.removeTrack(sender)\n this._queuedNegotiation = true\n })\n this._sendersAwaitingStable = []\n\n if (this._queuedNegotiation) {\n this._debug('flushing negotiation queue')\n this._queuedNegotiation = false\n this._needsNegotiation() // negotiate again\n } else {\n this._debug('negotiated')\n this.emit('negotiated')\n }\n }\n\n this._debug('signalingStateChange %s', this._pc.signalingState)\n this.emit('signalingStateChange', this._pc.signalingState)\n }\n\n _onIceCandidate (event) {\n if (this.destroyed) return\n if (event.candidate && this.trickle) {\n this.emit('signal', {\n type: 'candidate',\n candidate: {\n candidate: event.candidate.candidate,\n sdpMLineIndex: event.candidate.sdpMLineIndex,\n sdpMid: event.candidate.sdpMid\n }\n })\n } else if (!event.candidate && !this._iceComplete) {\n this._iceComplete = true\n this.emit('_iceComplete')\n }\n // as soon as we've received one valid candidate start timeout\n if (event.candidate) {\n this._startIceCompleteTimeout()\n }\n }\n\n _onChannelMessage (event) {\n if (this.destroyed) return\n let data = event.data\n if (data instanceof ArrayBuffer) data = Buffer.from(data)\n this.push(data)\n }\n\n _onChannelBufferedAmountLow () {\n if (this.destroyed || !this._cb) return\n this._debug('ending backpressure: bufferedAmount %d', this._channel.bufferedAmount)\n const cb = this._cb\n this._cb = null\n cb(null)\n }\n\n _onChannelOpen () {\n if (this._connected || this.destroyed) return\n this._debug('on channel open')\n this._channelReady = true\n this._maybeReady()\n }\n\n _onChannelClose () {\n if (this.destroyed) return\n this._debug('on channel close')\n this.destroy()\n }\n\n _onTrack (event) {\n if (this.destroyed) return\n\n event.streams.forEach(eventStream => {\n this._debug('on track')\n this.emit('track', event.track, eventStream)\n\n this._remoteTracks.push({\n track: event.track,\n stream: eventStream\n })\n\n if (this._remoteStreams.some(remoteStream => {\n return remoteStream.id === eventStream.id\n })) return // Only fire one 'stream' event, even though there may be multiple tracks per stream\n\n this._remoteStreams.push(eventStream)\n queueMicrotask(() => {\n this._debug('on stream')\n this.emit('stream', eventStream) // ensure all tracks have been added\n })\n })\n }\n\n _debug () {\n const args = [].slice.call(arguments)\n args[0] = '[' + this._id + '] ' + args[0]\n debug.apply(null, args)\n }\n}\n\nPeer.WEBRTC_SUPPORT = !!getBrowserRTC()\n\n/**\n * Expose peer and data channel config for overriding all Peer\n * instances. Otherwise, just set opts.config or opts.channelConfig\n * when constructing a Peer.\n */\nPeer.config = {\n iceServers: [\n {\n urls: [\n 'stun:stun.l.google.com:19302',\n 'stun:global.stun.twilio.com:3478'\n ]\n }\n ],\n sdpSemantics: 'unified-plan'\n}\n\nPeer.channelConfig = {}\n\nmodule.exports = Peer\n","var isProduction = process.env.NODE_ENV === 'production';\nvar prefix = 'Invariant failed';\nfunction invariant(condition, message) {\n if (condition) {\n return;\n }\n if (isProduction) {\n throw new Error(prefix);\n }\n var provided = typeof message === 'function' ? message() : message;\n var value = provided ? \"\".concat(prefix, \": \").concat(provided) : prefix;\n throw new Error(value);\n}\n\nexport { invariant as default };\n","/**\n * Defined in:\n * {@link file://./../../../dxos/mesh/bridge.proto}\n */\nexport var ConnectionState;\n(function (ConnectionState) {\n ConnectionState[ConnectionState[\"INVALID\"] = 0] = \"INVALID\";\n ConnectionState[ConnectionState[\"CONNECTING\"] = 1] = \"CONNECTING\";\n ConnectionState[ConnectionState[\"CONNECTED\"] = 2] = \"CONNECTED\";\n ConnectionState[ConnectionState[\"CLOSED\"] = 3] = \"CLOSED\";\n})(ConnectionState || (ConnectionState = {}));\n//# sourceMappingURL=bridge.js.map","\n/**\n * Expose `Emitter`.\n */\n\nmodule.exports = Emitter;\n\n/**\n * Initialize a new `Emitter`.\n *\n * @api public\n */\n\nfunction Emitter(obj) {\n if (obj) return mixin(obj);\n};\n\n/**\n * Mixin the emitter properties.\n *\n * @param {Object} obj\n * @return {Object}\n * @api private\n */\n\nfunction mixin(obj) {\n for (var key in Emitter.prototype) {\n obj[key] = Emitter.prototype[key];\n }\n return obj;\n}\n\n/**\n * Listen on the given `event` with `fn`.\n *\n * @param {String} event\n * @param {Function} fn\n * @return {Emitter}\n * @api public\n */\n\nEmitter.prototype.on =\nEmitter.prototype.addEventListener = function(event, fn){\n this._callbacks = this._callbacks || {};\n (this._callbacks[event] = this._callbacks[event] || [])\n .push(fn);\n return this;\n};\n\n/**\n * Adds an `event` listener that will be invoked a single\n * time then automatically removed.\n *\n * @param {String} event\n * @param {Function} fn\n * @return {Emitter}\n * @api public\n */\n\nEmitter.prototype.once = function(event, fn){\n var self = this;\n this._callbacks = this._callbacks || {};\n\n function on() {\n self.off(event, on);\n fn.apply(this, arguments);\n }\n\n on.fn = fn;\n this.on(event, on);\n return this;\n};\n\n/**\n * Remove the given callback for `event` or all\n * registered callbacks.\n *\n * @param {String} event\n * @param {Function} fn\n * @return {Emitter}\n * @api public\n */\n\nEmitter.prototype.off =\nEmitter.prototype.removeListener =\nEmitter.prototype.removeAllListeners =\nEmitter.prototype.removeEventListener = function(event, fn){\n this._callbacks = this._callbacks || {};\n\n // all\n if (0 == arguments.length) {\n this._callbacks = {};\n return this;\n }\n\n // specific event\n var callbacks = this._callbacks[event];\n if (!callbacks) return this;\n\n // remove all handlers\n if (1 == arguments.length) {\n delete this._callbacks[event];\n return this;\n }\n\n // remove specific handler\n var cb;\n for (var i = 0; i < callbacks.length; i++) {\n cb = callbacks[i];\n if (cb === fn || cb.fn === fn) {\n callbacks.splice(i, 1);\n break;\n }\n }\n return this;\n};\n\n/**\n * Emit `event` with the given args.\n *\n * @param {String} event\n * @param {Mixed} ...\n * @return {Emitter}\n */\n\nEmitter.prototype.emit = function(event){\n this._callbacks = this._callbacks || {};\n var args = [].slice.call(arguments, 1)\n , callbacks = this._callbacks[event];\n\n if (callbacks) {\n callbacks = callbacks.slice(0);\n for (var i = 0, len = callbacks.length; i < len; ++i) {\n callbacks[i].apply(this, args);\n }\n }\n\n return this;\n};\n\n/**\n * Return array of callbacks for `event`.\n *\n * @param {String} event\n * @return {Array}\n * @api public\n */\n\nEmitter.prototype.listeners = function(event){\n this._callbacks = this._callbacks || {};\n return this._callbacks[event] || [];\n};\n\n/**\n * Check if this emitter has `event` handlers.\n *\n * @param {String} event\n * @return {Boolean}\n * @api public\n */\n\nEmitter.prototype.hasListeners = function(event){\n return !! this.listeners(event).length;\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar Emitter = require('emitter');\n\nfunction Stream() {\n Emitter.call(this);\n}\nStream.prototype = new Emitter();\nmodule.exports = Stream;\n// Backwards-compat with node 0.4.x\nStream.Stream = Stream;\n\nStream.prototype.pipe = function(dest, options) {\n var source = this;\n\n function ondata(chunk) {\n if (dest.writable) {\n if (false === dest.write(chunk) && source.pause) {\n source.pause();\n }\n }\n }\n\n source.on('data', ondata);\n\n function ondrain() {\n if (source.readable && source.resume) {\n source.resume();\n }\n }\n\n dest.on('drain', ondrain);\n\n // If the 'end' option is not supplied, dest.end() will be called when\n // source gets the 'end' or 'close' events. Only dest.end() once.\n if (!dest._isStdio && (!options || options.end !== false)) {\n source.on('end', onend);\n source.on('close', onclose);\n }\n\n var didOnEnd = false;\n function onend() {\n if (didOnEnd) return;\n didOnEnd = true;\n\n dest.end();\n }\n\n\n function onclose() {\n if (didOnEnd) return;\n didOnEnd = true;\n\n if (typeof dest.destroy === 'function') dest.destroy();\n }\n\n // don't leave dangling pipes when there are errors.\n function onerror(er) {\n cleanup();\n if (!this.hasListeners('error')) {\n throw er; // Unhandled stream error in pipe.\n }\n }\n\n source.on('error', onerror);\n dest.on('error', onerror);\n\n // remove all the event listeners that were added.\n function cleanup() {\n source.off('data', ondata);\n dest.off('drain', ondrain);\n\n source.off('end', onend);\n source.off('close', onclose);\n\n source.off('error', onerror);\n dest.off('error', onerror);\n\n source.off('end', cleanup);\n source.off('close', cleanup);\n\n dest.off('end', cleanup);\n dest.off('close', cleanup);\n }\n\n source.on('end', cleanup);\n source.on('close', cleanup);\n\n dest.on('end', cleanup);\n dest.on('close', cleanup);\n\n dest.emit('pipe', source);\n\n // Allow for unix-like usage: A.pipe(B).pipe(C)\n return dest;\n}\n","module.exports = encode\n\nvar MSB = 0x80\n , REST = 0x7F\n , MSBALL = ~REST\n , INT = Math.pow(2, 31)\n\nfunction encode(num, out, offset) {\n if (Number.MAX_SAFE_INTEGER && num > Number.MAX_SAFE_INTEGER) {\n encode.bytes = 0\n throw new RangeError('Could not encode varint')\n }\n out = out || []\n offset = offset || 0\n var oldOffset = offset\n\n while(num >= INT) {\n out[offset++] = (num & 0xFF) | MSB\n num /= 128\n }\n while(num & MSBALL) {\n out[offset++] = (num & 0xFF) | MSB\n num >>>= 7\n }\n out[offset] = num | 0\n \n encode.bytes = offset - oldOffset + 1\n \n return out\n}\n","module.exports = read\n\nvar MSB = 0x80\n , REST = 0x7F\n\nfunction read(buf, offset) {\n var res = 0\n , offset = offset || 0\n , shift = 0\n , counter = offset\n , b\n , l = buf.length\n\n do {\n if (counter >= l || shift > 49) {\n read.bytes = 0\n throw new RangeError('Could not decode varint')\n }\n b = buf[counter++]\n res += shift < 28\n ? (b & REST) << shift\n : (b & REST) * Math.pow(2, shift)\n shift += 7\n } while (b >= MSB)\n\n read.bytes = counter - offset\n\n return res\n}\n","\nvar N1 = Math.pow(2, 7)\nvar N2 = Math.pow(2, 14)\nvar N3 = Math.pow(2, 21)\nvar N4 = Math.pow(2, 28)\nvar N5 = Math.pow(2, 35)\nvar N6 = Math.pow(2, 42)\nvar N7 = Math.pow(2, 49)\nvar N8 = Math.pow(2, 56)\nvar N9 = Math.pow(2, 63)\n\nmodule.exports = function (value) {\n return (\n value < N1 ? 1\n : value < N2 ? 2\n : value < N3 ? 3\n : value < N4 ? 4\n : value < N5 ? 5\n : value < N6 ? 6\n : value < N7 ? 7\n : value < N8 ? 8\n : value < N9 ? 9\n : 10\n )\n}\n","module.exports = {\n encode: require('./encode.js')\n , decode: require('./decode.js')\n , encodingLength: require('./length.js')\n}\n","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/teleport/src/testing/test-builder.ts\nimport { pipeline } from \"@dxos/node-std/stream\";\nimport { waitForCondition } from \"@dxos/async\";\nimport { invariant as invariant5 } from \"@dxos/invariant\";\nimport { PublicKey as PublicKey2 } from \"@dxos/keys\";\nimport { log as log6 } from \"@dxos/log\";\n\n// packages/core/mesh/teleport/src/teleport.ts\nimport { runInContextAsync, synchronized, scheduleTask } from \"@dxos/async\";\nimport { Context as Context3 } from \"@dxos/context\";\nimport { failUndefined as failUndefined2 } from \"@dxos/debug\";\nimport { invariant as invariant4 } from \"@dxos/invariant\";\nimport { PublicKey } from \"@dxos/keys\";\nimport { log as log5, logInfo as logInfo2 } from \"@dxos/log\";\nimport { RpcClosedError as RpcClosedError2, TimeoutError as TimeoutError2 } from \"@dxos/protocols\";\n\n// packages/core/mesh/teleport/src/control-extension.ts\nimport { asyncTimeout, scheduleTaskInterval, TimeoutError as AsyncTimeoutError } from \"@dxos/async\";\nimport { Context } from \"@dxos/context\";\nimport { log } from \"@dxos/log\";\nimport { schema, RpcClosedError } from \"@dxos/protocols\";\nimport { createProtoRpcPeer } from \"@dxos/rpc\";\nimport { Callback } from \"@dxos/util\";\nvar __dxlog_file = \"/home/runner/work/dxos/dxos/packages/core/mesh/teleport/src/control-extension.ts\";\nvar HEARTBEAT_RTT_WARN_THRESH = 1e4;\nvar DEBUG_PRINT_HEARTBEAT = false;\nvar ControlExtension = class {\n constructor(opts, localPeerId, remotePeerId) {\n this.opts = opts;\n this.localPeerId = localPeerId;\n this.remotePeerId = remotePeerId;\n this._ctx = new Context({\n onError: (err) => {\n this._extensionContext.close(err);\n }\n }, {\n F: __dxlog_file,\n L: 30\n });\n this.onExtensionRegistered = new Callback();\n }\n async registerExtension(name) {\n await this._rpc.rpc.Control.registerExtension({\n name\n });\n }\n async onOpen(extensionContext) {\n this._extensionContext = extensionContext;\n this._rpc = createProtoRpcPeer({\n requested: {\n Control: schema.getService(\"dxos.mesh.teleport.control.ControlService\")\n },\n exposed: {\n Control: schema.getService(\"dxos.mesh.teleport.control.ControlService\")\n },\n handlers: {\n Control: {\n registerExtension: async (request) => {\n this.onExtensionRegistered.call(request.name);\n },\n heartbeat: async (request) => {\n if (DEBUG_PRINT_HEARTBEAT) {\n log(\"received heartbeat request\", {\n ts: request.requestTimestamp,\n localPeerId: this.localPeerId.truncate(),\n remotePeerId: this.remotePeerId.truncate()\n }, {\n F: __dxlog_file,\n L: 68,\n S: this,\n C: (f, a) => f(...a)\n });\n }\n return {\n requestTimestamp: request.requestTimestamp\n };\n }\n }\n },\n port: await extensionContext.createPort(\"rpc\", {\n contentType: 'application/x-protobuf; messageType=\"dxos.rpc.Message\"'\n }),\n timeout: this.opts.heartbeatTimeout\n });\n await this._rpc.open();\n scheduleTaskInterval(this._ctx, async () => {\n const reqTS = /* @__PURE__ */ new Date();\n try {\n const resp = await asyncTimeout(this._rpc.rpc.Control.heartbeat({\n requestTimestamp: reqTS\n }), this.opts.heartbeatTimeout);\n const now = Date.now();\n if (resp.requestTimestamp instanceof Date) {\n if (now - resp.requestTimestamp.getTime() > (HEARTBEAT_RTT_WARN_THRESH < this.opts.heartbeatTimeout ? HEARTBEAT_RTT_WARN_THRESH : this.opts.heartbeatTimeout / 2)) {\n log.warn(`heartbeat RTT for Teleport > ${HEARTBEAT_RTT_WARN_THRESH / 1e3}s`, {\n rtt: now - resp.requestTimestamp.getTime(),\n localPeerId: this.localPeerId.truncate(),\n remotePeerId: this.remotePeerId.truncate()\n }, {\n F: __dxlog_file,\n L: 106,\n S: this,\n C: (f, a) => f(...a)\n });\n } else {\n if (DEBUG_PRINT_HEARTBEAT) {\n log(\"heartbeat RTT\", {\n rtt: now - resp.requestTimestamp.getTime(),\n localPeerId: this.localPeerId.truncate(),\n remotePeerId: this.remotePeerId.truncate()\n }, {\n F: __dxlog_file,\n L: 113,\n S: this,\n C: (f, a) => f(...a)\n });\n }\n }\n }\n } catch (err) {\n const now = Date.now();\n if (err instanceof RpcClosedError) {\n log(\"ignoring RpcClosedError in heartbeat\", void 0, {\n F: __dxlog_file,\n L: 125,\n S: this,\n C: (f, a) => f(...a)\n });\n this._extensionContext.close(err);\n return;\n }\n if (err instanceof AsyncTimeoutError) {\n log(\"timeout waiting for heartbeat response\", {\n err,\n delay: now - reqTS.getTime()\n }, {\n F: __dxlog_file,\n L: 130,\n S: this,\n C: (f, a) => f(...a)\n });\n this.opts.onTimeout(err);\n } else {\n log.info(\"other error waiting for heartbeat response\", {\n err,\n delay: now - reqTS.getTime()\n }, {\n F: __dxlog_file,\n L: 133,\n S: this,\n C: (f, a) => f(...a)\n });\n this.opts.onTimeout(err);\n }\n }\n }, this.opts.heartbeatInterval);\n }\n async onClose(err) {\n await this._ctx.dispose();\n await this._rpc.close();\n }\n async onAbort(err) {\n await this._ctx.dispose();\n await this._rpc.abort();\n }\n};\n\n// packages/core/mesh/teleport/src/muxing/framer.ts\nimport { Duplex } from \"@dxos/node-std/stream\";\nimport { Event } from \"@dxos/async\";\nimport { invariant } from \"@dxos/invariant\";\nimport { log as log2 } from \"@dxos/log\";\nvar __dxlog_file2 = \"/home/runner/work/dxos/dxos/packages/core/mesh/teleport/src/muxing/framer.ts\";\nvar FRAME_LENGTH_SIZE = 2;\nvar Framer = class {\n constructor() {\n // private readonly _tagBuffer = Buffer.alloc(4)\n this._messageCb = void 0;\n this._subscribeCb = void 0;\n this._buffer = void 0;\n this._sendCallbacks = [];\n this._bytesSent = 0;\n this._bytesReceived = 0;\n this._writable = true;\n this.drain = new Event();\n // TODO(egorgripasov): Consider using a Transform stream if it provides better backpressure handling.\n this._stream = new Duplex({\n objectMode: false,\n read: () => {\n this._processResponseQueue();\n },\n write: (chunk, encoding, callback) => {\n invariant(!this._subscribeCb, \"Internal Framer bug. Concurrent writes detected.\", {\n F: __dxlog_file2,\n L: 40,\n S: this,\n A: [\n \"!this._subscribeCb\",\n \"'Internal Framer bug. Concurrent writes detected.'\"\n ]\n });\n this._bytesReceived += chunk.length;\n if (this._buffer && this._buffer.length > 0) {\n this._buffer = Buffer.concat([\n this._buffer,\n chunk\n ]);\n } else {\n this._buffer = chunk;\n }\n if (this._messageCb) {\n this._popFrames();\n callback();\n } else {\n this._subscribeCb = () => {\n this._popFrames();\n this._subscribeCb = void 0;\n callback();\n };\n }\n }\n });\n this.port = {\n send: (message) => {\n return new Promise((resolve) => {\n const frame = encodeFrame(message);\n this._bytesSent += frame.length;\n this._writable = this._stream.push(frame);\n if (!this._writable) {\n this._sendCallbacks.push(resolve);\n } else {\n resolve();\n }\n });\n },\n subscribe: (callback) => {\n invariant(!this._messageCb, \"Rpc port already has a message listener.\", {\n F: __dxlog_file2,\n L: 79,\n S: this,\n A: [\n \"!this._messageCb\",\n \"'Rpc port already has a message listener.'\"\n ]\n });\n this._messageCb = callback;\n this._subscribeCb?.();\n return () => {\n this._messageCb = void 0;\n };\n }\n };\n }\n get stream() {\n return this._stream;\n }\n get bytesSent() {\n return this._bytesSent;\n }\n get bytesReceived() {\n return this._bytesReceived;\n }\n get writable() {\n return this._writable;\n }\n _processResponseQueue() {\n const responseQueue = this._sendCallbacks;\n this._sendCallbacks = [];\n this._writable = true;\n this.drain.emit();\n responseQueue.forEach((cb) => cb());\n }\n /**\n * Attempts to pop frames from the buffer and call the message callback.\n */\n _popFrames() {\n let offset = 0;\n while (offset < this._buffer.length) {\n const frame = decodeFrame(this._buffer, offset);\n if (!frame) {\n break;\n }\n offset += frame.bytesConsumed;\n this._messageCb(frame.payload);\n }\n if (offset < this._buffer.length) {\n this._buffer = this._buffer.subarray(offset);\n } else {\n this._buffer = void 0;\n }\n }\n destroy() {\n if (this._stream.readableLength > 0) {\n log2(\"framer destroyed while there are still read bytes in the buffer.\", void 0, {\n F: __dxlog_file2,\n L: 140,\n S: this,\n C: (f, a) => f(...a)\n });\n }\n if (this._stream.writableLength > 0) {\n log2.warn(\"framer destroyed while there are still write bytes in the buffer.\", void 0, {\n F: __dxlog_file2,\n L: 143,\n S: this,\n C: (f, a) => f(...a)\n });\n }\n this._stream.destroy();\n }\n};\nvar decodeFrame = (buffer, offset) => {\n if (buffer.length < offset + FRAME_LENGTH_SIZE) {\n return void 0;\n }\n const frameLength = buffer.readUInt16BE(offset);\n const bytesConsumed = FRAME_LENGTH_SIZE + frameLength;\n if (buffer.length < offset + bytesConsumed) {\n return void 0;\n }\n const payload = buffer.subarray(offset + FRAME_LENGTH_SIZE, offset + bytesConsumed);\n return {\n payload,\n bytesConsumed\n };\n};\nvar encodeFrame = (payload) => {\n const frame = Buffer.allocUnsafe(FRAME_LENGTH_SIZE + payload.length);\n frame.writeUInt16BE(payload.length, 0);\n frame.set(payload, FRAME_LENGTH_SIZE);\n return frame;\n};\n\n// packages/core/mesh/teleport/src/muxing/muxer.ts\nimport { Duplex as Duplex2 } from \"@dxos/node-std/stream\";\nimport { scheduleTaskInterval as scheduleTaskInterval2, Event as Event3, Trigger, asyncTimeout as asyncTimeout2 } from \"@dxos/async\";\nimport { Context as Context2 } from \"@dxos/context\";\nimport { failUndefined } from \"@dxos/debug\";\nimport { invariant as invariant3 } from \"@dxos/invariant\";\nimport { log as log4, logInfo } from \"@dxos/log\";\nimport { schema as schema2, TimeoutError } from \"@dxos/protocols\";\n\n// packages/core/mesh/teleport/src/muxing/balancer.ts\nimport * as varint from \"varint\";\nimport { Event as Event2 } from \"@dxos/async\";\nimport { invariant as invariant2 } from \"@dxos/invariant\";\nimport { log as log3 } from \"@dxos/log\";\nvar __dxlog_file3 = \"/home/runner/work/dxos/dxos/packages/core/mesh/teleport/src/muxing/balancer.ts\";\nvar MAX_CHUNK_SIZE = 8192;\nvar Balancer = class {\n constructor(_sysChannelId) {\n this._sysChannelId = _sysChannelId;\n this._lastCallerIndex = 0;\n this._channels = [];\n this._framer = new Framer();\n this._sendBuffers = /* @__PURE__ */ new Map();\n this._receiveBuffers = /* @__PURE__ */ new Map();\n this._sending = false;\n this.incomingData = new Event2();\n this.stream = this._framer.stream;\n this._channels.push(_sysChannelId);\n this._framer.port.subscribe(this._processIncomingMessage.bind(this));\n }\n get bytesSent() {\n return this._framer.bytesSent;\n }\n get bytesReceived() {\n return this._framer.bytesReceived;\n }\n get buffersCount() {\n return this._sendBuffers.size;\n }\n addChannel(channel) {\n this._channels.push(channel);\n }\n pushData(data, trigger, channelId) {\n this._enqueueChunk(data, trigger, channelId);\n this._sendChunks().catch((err) => log3.catch(err, void 0, {\n F: __dxlog_file3,\n L: 75,\n S: this,\n C: (f, a) => f(...a)\n }));\n }\n destroy() {\n if (this._sendBuffers.size !== 0) {\n log3.info(\"destroying balancer with pending calls\", void 0, {\n F: __dxlog_file3,\n L: 80,\n S: this,\n C: (f, a) => f(...a)\n });\n }\n this._sendBuffers.clear();\n this._framer.destroy();\n }\n _processIncomingMessage(msg) {\n const { channelId, dataLength, chunk } = decodeChunk(msg, (channelId2) => !this._receiveBuffers.has(channelId2));\n if (!this._receiveBuffers.has(channelId)) {\n if (chunk.length < dataLength) {\n this._receiveBuffers.set(channelId, {\n buffer: Buffer.from(chunk),\n msgLength: dataLength\n });\n } else {\n this.incomingData.emit(chunk);\n }\n } else {\n const channelBuffer = this._receiveBuffers.get(channelId);\n channelBuffer.buffer = Buffer.concat([\n channelBuffer.buffer,\n chunk\n ]);\n if (channelBuffer.buffer.length < channelBuffer.msgLength) {\n return;\n }\n const msg2 = channelBuffer.buffer;\n this._receiveBuffers.delete(channelId);\n this.incomingData.emit(msg2);\n }\n }\n _getNextCallerId() {\n if (this._sendBuffers.has(this._sysChannelId)) {\n return this._sysChannelId;\n }\n const index = this._lastCallerIndex;\n this._lastCallerIndex = (this._lastCallerIndex + 1) % this._channels.length;\n return this._channels[index];\n }\n _enqueueChunk(data, trigger, channelId) {\n if (!this._channels.includes(channelId)) {\n throw new Error(`Unknown channel ${channelId}`);\n }\n if (!this._sendBuffers.has(channelId)) {\n this._sendBuffers.set(channelId, []);\n }\n const sendBuffer = this._sendBuffers.get(channelId);\n const chunks = [];\n for (let idx = 0; idx < data.length; idx += MAX_CHUNK_SIZE) {\n chunks.push(data.subarray(idx, idx + MAX_CHUNK_SIZE));\n }\n chunks.forEach((chunk, index) => {\n const msg = encodeChunk({\n chunk,\n channelId,\n dataLength: index === 0 ? data.length : void 0\n });\n sendBuffer.push({\n msg,\n trigger: index === chunks.length - 1 ? trigger : void 0\n });\n });\n }\n // get the next chunk or null if there are no chunks remaining\n _getNextChunk() {\n let chunk;\n while (this._sendBuffers.size > 0) {\n const channelId = this._getNextCallerId();\n const sendBuffer = this._sendBuffers.get(channelId);\n if (!sendBuffer) {\n continue;\n }\n chunk = sendBuffer.shift();\n if (!chunk) {\n continue;\n }\n if (sendBuffer.length === 0) {\n this._sendBuffers.delete(channelId);\n }\n return chunk;\n }\n return null;\n }\n async _sendChunks() {\n if (this._sending) {\n return;\n }\n this._sending = true;\n let chunk;\n chunk = this._getNextChunk();\n while (chunk) {\n if (!this._framer.writable) {\n log3(\"PAUSE for drain\", void 0, {\n F: __dxlog_file3,\n L: 179,\n S: this,\n C: (f, a) => f(...a)\n });\n await this._framer.drain.waitForCount(1);\n log3(\"RESUME for drain\", void 0, {\n F: __dxlog_file3,\n L: 181,\n S: this,\n C: (f, a) => f(...a)\n });\n }\n try {\n await this._framer.port.send(chunk.msg);\n chunk.trigger?.wake();\n } catch (err) {\n log3(\"Error sending chunk\", {\n err\n }, {\n F: __dxlog_file3,\n L: 187,\n S: this,\n C: (f, a) => f(...a)\n });\n chunk.trigger?.throw(err);\n }\n chunk = this._getNextChunk();\n }\n invariant2(this._sendBuffers.size === 0, \"sendBuffers not empty\", {\n F: __dxlog_file3,\n L: 192,\n S: this,\n A: [\n \"this._sendBuffers.size === 0\",\n \"'sendBuffers not empty'\"\n ]\n });\n this._sending = false;\n }\n};\nvar encodeChunk = ({ channelId, dataLength, chunk }) => {\n const channelTagLength = varint.encodingLength(channelId);\n const dataLengthLength = dataLength ? varint.encodingLength(dataLength) : 0;\n const message = Buffer.allocUnsafe(channelTagLength + dataLengthLength + chunk.length);\n varint.encode(channelId, message);\n if (dataLength) {\n varint.encode(dataLength, message, channelTagLength);\n }\n message.set(chunk, channelTagLength + dataLengthLength);\n return message;\n};\nvar decodeChunk = (data, withLength) => {\n const channelId = varint.decode(data);\n let dataLength;\n let offset = varint.decode.bytes;\n if (withLength(channelId)) {\n dataLength = varint.decode(data, offset);\n offset += varint.decode.bytes;\n }\n const chunk = data.subarray(offset);\n return {\n channelId,\n dataLength,\n chunk\n };\n};\n\n// packages/core/mesh/teleport/src/muxing/muxer.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_file4 = \"/home/runner/work/dxos/dxos/packages/core/mesh/teleport/src/muxing/muxer.ts\";\nvar Command = schema2.getCodecForType(\"dxos.mesh.muxer.Command\");\nvar DEFAULT_SEND_COMMAND_TIMEOUT = 6e4;\nvar DESTROY_COMMAND_SEND_TIMEOUT = 5e3;\nvar STATS_INTERVAL = 1e3;\nvar MAX_SAFE_FRAME_SIZE = 1e6;\nvar SYSTEM_CHANNEL_ID = 0;\nvar GRACEFUL_CLOSE_TIMEOUT = 3e3;\nvar Muxer = class {\n constructor() {\n this._balancer = new Balancer(SYSTEM_CHANNEL_ID);\n this._channelsByLocalId = /* @__PURE__ */ new Map();\n this._channelsByTag = /* @__PURE__ */ new Map();\n this._ctx = new Context2(void 0, {\n F: __dxlog_file4,\n L: 107\n });\n this._nextId = 1;\n this._closing = false;\n this._destroying = false;\n this._disposed = false;\n this._lastStats = void 0;\n this._lastChannelStats = /* @__PURE__ */ new Map();\n this.afterClosed = new Event3();\n this.statsUpdated = new Event3();\n this.stream = this._balancer.stream;\n this._balancer.incomingData.on(async (msg) => {\n await this._handleCommand(Command.decode(msg));\n });\n }\n setSessionId(sessionId) {\n this._sessionId = sessionId;\n }\n get sessionIdString() {\n return this._sessionId ? this._sessionId.truncate() : \"none\";\n }\n /**\n * Creates a duplex Node.js-style stream.\n * The remote peer is expected to call `createStream` with the same tag.\n * The stream is immediately readable and writable.\n * NOTE: The data will be buffered until the stream is opened remotely with the same tag (may cause a memory leak).\n */\n async createStream(tag, opts = {}) {\n const channel = this._getOrCreateStream({\n tag,\n contentType: opts.contentType\n });\n invariant3(!channel.push, `Channel already open: ${tag}`, {\n F: __dxlog_file4,\n L: 151,\n S: this,\n A: [\n \"!channel.push\",\n \"`Channel already open: ${tag}`\"\n ]\n });\n const stream = new Duplex2({\n write: (data, encoding, callback) => {\n this._sendData(channel, data).then(() => callback()).catch(callback);\n },\n read: () => {\n }\n });\n channel.push = (data) => {\n channel.stats.bytesReceived += data.length;\n stream.push(data);\n };\n channel.destroy = (err) => {\n if (err) {\n if (stream.listeners(\"error\").length > 0) {\n stream.destroy(err);\n } else {\n stream.destroy();\n }\n } else {\n stream.destroy();\n }\n };\n try {\n await this._sendCommand({\n openChannel: {\n id: channel.id,\n tag: channel.tag,\n contentType: channel.contentType\n }\n }, SYSTEM_CHANNEL_ID);\n } catch (err) {\n this._destroyChannel(channel, err);\n throw err;\n }\n return stream;\n }\n /**\n * Creates an RPC port.\n * The remote peer is expected to call `createPort` with the same tag.\n * The port is immediately usable.\n * NOTE: The data will be buffered until the stream is opened remotely with the same tag (may cause a memory leak).\n */\n async createPort(tag, opts = {}) {\n const channel = this._getOrCreateStream({\n tag,\n contentType: opts.contentType\n });\n invariant3(!channel.push, `Channel already open: ${tag}`, {\n F: __dxlog_file4,\n L: 211,\n S: this,\n A: [\n \"!channel.push\",\n \"`Channel already open: ${tag}`\"\n ]\n });\n let inboundBuffer = [];\n let callback;\n channel.push = (data) => {\n channel.stats.bytesReceived += data.length;\n if (callback) {\n callback(data);\n } else {\n inboundBuffer.push(data);\n }\n };\n const port = {\n send: async (data, timeout) => {\n await this._sendData(channel, data, timeout);\n },\n subscribe: (cb) => {\n invariant3(!callback, \"Only one subscriber is allowed\", {\n F: __dxlog_file4,\n L: 233,\n S: this,\n A: [\n \"!callback\",\n \"'Only one subscriber is allowed'\"\n ]\n });\n callback = cb;\n for (const data of inboundBuffer) {\n cb(data);\n }\n inboundBuffer = [];\n }\n };\n try {\n await this._sendCommand({\n openChannel: {\n id: channel.id,\n tag: channel.tag,\n contentType: channel.contentType\n }\n }, SYSTEM_CHANNEL_ID);\n } catch (err) {\n this._destroyChannel(channel, err);\n throw err;\n }\n return port;\n }\n // initiate graceful close\n async close(err) {\n if (this._destroying) {\n log4(\"already destroying, ignoring graceful close request\", void 0, {\n F: __dxlog_file4,\n L: 266,\n S: this,\n C: (f, a) => f(...a)\n });\n return;\n }\n if (this._closing) {\n log4(\"already closing, ignoring graceful close request\", void 0, {\n F: __dxlog_file4,\n L: 270,\n S: this,\n C: (f, a) => f(...a)\n });\n return;\n }\n this._closing = true;\n await this._sendCommand({\n close: {\n error: err?.message\n }\n }, SYSTEM_CHANNEL_ID, DESTROY_COMMAND_SEND_TIMEOUT).catch(async (err2) => {\n log4(\"error sending close command\", {\n err: err2\n }, {\n F: __dxlog_file4,\n L: 285,\n S: this,\n C: (f, a) => f(...a)\n });\n await this._dispose(err2);\n });\n await asyncTimeout2(this._dispose(err), GRACEFUL_CLOSE_TIMEOUT, new TimeoutError(\"gracefully closing muxer\"));\n }\n // force close without confirmation\n async destroy(err) {\n if (this._destroying) {\n log4(\"already destroying, ignoring destroy request\", void 0, {\n F: __dxlog_file4,\n L: 298,\n S: this,\n C: (f, a) => f(...a)\n });\n return;\n }\n this._destroying = true;\n void this._ctx.dispose();\n if (this._closing) {\n log4(\"destroy cancelling graceful close\", void 0, {\n F: __dxlog_file4,\n L: 304,\n S: this,\n C: (f, a) => f(...a)\n });\n this._closing = false;\n } else {\n await this._sendCommand({\n close: {\n error: err?.message\n }\n }, SYSTEM_CHANNEL_ID).catch(async (err2) => {\n log4(\"error sending courtesy close command\", {\n err: err2\n }, {\n F: __dxlog_file4,\n L: 317,\n S: this,\n C: (f, a) => f(...a)\n });\n });\n }\n this._dispose(err).catch((err2) => {\n log4(\"error disposing after destroy\", {\n err: err2\n }, {\n F: __dxlog_file4,\n L: 322,\n S: this,\n C: (f, a) => f(...a)\n });\n });\n }\n // complete the termination, graceful or otherwise\n async _dispose(err) {\n if (this._disposed) {\n log4(\"already destroyed, ignoring dispose request\", void 0, {\n F: __dxlog_file4,\n L: 330,\n S: this,\n C: (f, a) => f(...a)\n });\n return;\n }\n void this._ctx.dispose();\n await this._balancer.destroy();\n for (const channel of this._channelsByTag.values()) {\n channel.destroy?.(err);\n }\n this._disposed = true;\n await this._emitStats();\n this.afterClosed.emit(err);\n this._channelsByLocalId.clear();\n this._channelsByTag.clear();\n }\n async _handleCommand(cmd) {\n if (this._disposed) {\n log4.warn(\"Received command after disposed\", {\n cmd\n }, {\n F: __dxlog_file4,\n L: 353,\n S: this,\n C: (f, a) => f(...a)\n });\n return;\n }\n if (cmd.close) {\n if (!this._closing) {\n log4(\"received peer close, initiating my own graceful close\", void 0, {\n F: __dxlog_file4,\n L: 359,\n S: this,\n C: (f, a) => f(...a)\n });\n await this.close(new Error(\"received peer close\"));\n } else {\n log4(\"received close from peer, already closing\", void 0, {\n F: __dxlog_file4,\n L: 362,\n S: this,\n C: (f, a) => f(...a)\n });\n }\n return;\n }\n if (cmd.openChannel) {\n const channel = this._getOrCreateStream({\n tag: cmd.openChannel.tag,\n contentType: cmd.openChannel.contentType\n });\n channel.remoteId = cmd.openChannel.id;\n for (const data of channel.buffer) {\n await this._sendCommand({\n data: {\n channelId: channel.remoteId,\n data\n }\n }, channel.id);\n }\n channel.buffer = [];\n } else if (cmd.data) {\n const stream = this._channelsByLocalId.get(cmd.data.channelId) ?? failUndefined();\n if (!stream.push) {\n log4.warn(\"Received data for channel before it was opened\", {\n tag: stream.tag\n }, {\n F: __dxlog_file4,\n L: 391,\n S: this,\n C: (f, a) => f(...a)\n });\n return;\n }\n stream.push(cmd.data.data);\n }\n }\n async _sendCommand(cmd, channelId = -1, timeout = DEFAULT_SEND_COMMAND_TIMEOUT) {\n if (this._disposed) {\n return;\n }\n try {\n const trigger = new Trigger();\n this._balancer.pushData(Command.encode(cmd), trigger, channelId);\n await trigger.wait({\n timeout\n });\n } catch (err) {\n await this.destroy(err);\n }\n }\n _getOrCreateStream(params) {\n if (this._channelsByTag.size === 0) {\n scheduleTaskInterval2(this._ctx, async () => this._emitStats(), STATS_INTERVAL);\n }\n let channel = this._channelsByTag.get(params.tag);\n if (!channel) {\n channel = {\n id: this._nextId++,\n remoteId: null,\n tag: params.tag,\n contentType: params.contentType,\n buffer: [],\n push: null,\n destroy: null,\n stats: {\n bytesSent: 0,\n bytesReceived: 0\n }\n };\n this._channelsByTag.set(channel.tag, channel);\n this._channelsByLocalId.set(channel.id, channel);\n this._balancer.addChannel(channel.id);\n }\n return channel;\n }\n async _sendData(channel, data, timeout) {\n if (data.length > MAX_SAFE_FRAME_SIZE) {\n log4.warn(\"frame size exceeds maximum safe value\", {\n size: data.length,\n threshold: MAX_SAFE_FRAME_SIZE\n }, {\n F: __dxlog_file4,\n L: 441,\n S: this,\n C: (f, a) => f(...a)\n });\n }\n channel.stats.bytesSent += data.length;\n if (channel.remoteId === null) {\n channel.buffer.push(data);\n return;\n }\n await this._sendCommand({\n data: {\n channelId: channel.remoteId,\n data\n }\n }, channel.id, timeout);\n }\n _destroyChannel(channel, err) {\n if (channel.destroy) {\n channel.destroy(err);\n }\n this._channelsByLocalId.delete(channel.id);\n this._channelsByTag.delete(channel.tag);\n }\n async _emitStats() {\n if (this._disposed || this._destroying) {\n if (!this._lastStats) {\n return;\n }\n const lastStats = this._lastStats;\n this._lastStats = void 0;\n lastStats.readBufferSize = 0;\n lastStats.writeBufferSize = 0;\n for (const c of lastStats.channels) {\n c.writeBufferSize = 0;\n }\n this.statsUpdated.emit(lastStats);\n this._lastChannelStats.clear();\n return;\n }\n const bytesSent = this._balancer.bytesSent;\n const bytesReceived = this._balancer.bytesReceived;\n const now = Date.now();\n const interval = this._lastStats ? (now - this._lastStats.timestamp) / 1e3 : 0;\n const calculateThroughput = (current, last) => last ? {\n bytesSentRate: interval ? (current.bytesSent - last.bytesSent) / interval : void 0,\n bytesReceivedRate: interval ? (current.bytesReceived - last.bytesReceived) / interval : void 0\n } : {};\n this._lastStats = {\n timestamp: now,\n channels: Array.from(this._channelsByTag.values()).map((channel) => {\n const stats = {\n id: channel.id,\n tag: channel.tag,\n contentType: channel.contentType,\n writeBufferSize: channel.buffer.length,\n bytesSent: channel.stats.bytesSent,\n bytesReceived: channel.stats.bytesReceived,\n ...calculateThroughput(channel.stats, this._lastChannelStats.get(channel.id))\n };\n this._lastChannelStats.set(channel.id, stats);\n return stats;\n }),\n bytesSent,\n bytesReceived,\n ...calculateThroughput({\n bytesSent,\n bytesReceived\n }, this._lastStats),\n readBufferSize: this._balancer.stream.readableLength,\n writeBufferSize: this._balancer.stream.writableLength\n };\n this.statsUpdated.emit(this._lastStats);\n }\n};\n_ts_decorate([\n logInfo\n], Muxer.prototype, \"sessionIdString\", null);\n\n// packages/core/mesh/teleport/src/teleport.ts\nfunction _ts_decorate2(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_file5 = \"/home/runner/work/dxos/dxos/packages/core/mesh/teleport/src/teleport.ts\";\nvar CONTROL_HEARTBEAT_INTERVAL = 1e4;\nvar CONTROL_HEARTBEAT_TIMEOUT = 6e4;\nvar Teleport = class {\n constructor({ initiator, localPeerId, remotePeerId, ...rest }) {\n this._ctx = new Context3({\n onError: (err) => {\n void this.destroy(err).catch(() => {\n log5.error(\"Error during destroy\", err, {\n F: __dxlog_file5,\n L: 41,\n S: this,\n C: (f, a) => f(...a)\n });\n });\n }\n }, {\n F: __dxlog_file5,\n L: 38\n });\n this._muxer = new Muxer();\n this._extensions = /* @__PURE__ */ new Map();\n this._remoteExtensions = /* @__PURE__ */ new Set();\n this._open = false;\n this._destroying = false;\n this._aborting = false;\n invariant4(typeof initiator === \"boolean\", void 0, {\n F: __dxlog_file5,\n L: 62,\n S: this,\n A: [\n \"typeof initiator === 'boolean'\",\n \"\"\n ]\n });\n invariant4(PublicKey.isPublicKey(localPeerId), void 0, {\n F: __dxlog_file5,\n L: 63,\n S: this,\n A: [\n \"PublicKey.isPublicKey(localPeerId)\",\n \"\"\n ]\n });\n invariant4(PublicKey.isPublicKey(remotePeerId), void 0, {\n F: __dxlog_file5,\n L: 64,\n S: this,\n A: [\n \"PublicKey.isPublicKey(remotePeerId)\",\n \"\"\n ]\n });\n this.initiator = initiator;\n this.localPeerId = localPeerId;\n this.remotePeerId = remotePeerId;\n this._control = new ControlExtension({\n heartbeatInterval: rest.controlHeartbeatInterval ?? CONTROL_HEARTBEAT_INTERVAL,\n heartbeatTimeout: rest.controlHeartbeatTimeout ?? CONTROL_HEARTBEAT_TIMEOUT,\n onTimeout: () => {\n if (this._destroying || this._aborting) {\n return;\n }\n log5.info(\"abort teleport due to onTimeout in ControlExtension\", void 0, {\n F: __dxlog_file5,\n L: 77,\n S: this,\n C: (f, a) => f(...a)\n });\n this.abort(new TimeoutError2(\"control extension\")).catch((err) => log5.catch(err, void 0, {\n F: __dxlog_file5,\n L: 78,\n S: this,\n C: (f, a) => f(...a)\n }));\n }\n }, this.localPeerId, this.remotePeerId);\n this._control.onExtensionRegistered.set(async (name) => {\n log5(\"remote extension\", {\n name\n }, {\n F: __dxlog_file5,\n L: 86,\n S: this,\n C: (f, a) => f(...a)\n });\n invariant4(!this._remoteExtensions.has(name), \"Remote extension already exists\", {\n F: __dxlog_file5,\n L: 87,\n S: this,\n A: [\n \"!this._remoteExtensions.has(name)\",\n \"'Remote extension already exists'\"\n ]\n });\n this._remoteExtensions.add(name);\n if (this._extensions.has(name)) {\n try {\n await this._openExtension(name);\n } catch (err) {\n await this.destroy(err);\n }\n }\n });\n {\n this._muxer.stream.on(\"close\", async () => {\n if (this._destroying || this._aborting) {\n log5(\"destroy teleport due to muxer stream close, skipping due to already destroying/aborting\", void 0, {\n F: __dxlog_file5,\n L: 103,\n S: this,\n C: (f, a) => f(...a)\n });\n return;\n }\n await this.destroy();\n });\n this._muxer.stream.on(\"error\", async (err) => {\n await this.destroy(err);\n });\n }\n this._muxer.statsUpdated.on((stats) => {\n log5.trace(\"dxos.mesh.teleport.stats\", {\n localPeerId,\n remotePeerId,\n bytesSent: stats.bytesSent,\n bytesSentRate: stats.bytesSentRate,\n bytesReceived: stats.bytesReceived,\n bytesReceivedRate: stats.bytesReceivedRate,\n channels: stats.channels\n }, {\n F: __dxlog_file5,\n L: 116,\n S: this,\n C: (f, a) => f(...a)\n });\n });\n }\n get isOpen() {\n return this._open;\n }\n get sessionIdString() {\n return this._sessionId ? this._sessionId.truncate() : \"none\";\n }\n get stream() {\n return this._muxer.stream;\n }\n get stats() {\n return this._muxer.statsUpdated;\n }\n /**\n * Blocks until the handshake is complete.\n */\n async open(sessionId = PublicKey.random()) {\n this._sessionId = sessionId;\n log5(\"open\", void 0, {\n F: __dxlog_file5,\n L: 150,\n S: this,\n C: (f, a) => f(...a)\n });\n this._setExtension(\"dxos.mesh.teleport.control\", this._control);\n await this._openExtension(\"dxos.mesh.teleport.control\");\n this._open = true;\n this._muxer.setSessionId(sessionId);\n }\n async close(err) {\n await this.destroy(err);\n }\n async abort(err) {\n if (this._aborting || this._destroying) {\n return;\n }\n this._aborting = true;\n this._open = false;\n if (this._ctx.disposed) {\n return;\n }\n await this._ctx.dispose();\n for (const extension of this._extensions.values()) {\n try {\n await extension.onAbort(err);\n } catch (err2) {\n log5.catch(err2, void 0, {\n F: __dxlog_file5,\n L: 180,\n S: this,\n C: (f, a) => f(...a)\n });\n }\n }\n await this._muxer.destroy(err);\n }\n async destroy(err) {\n if (this._destroying || this._aborting) {\n return;\n }\n log5(\"destroying teleport...\", {\n extensionsCount: this._extensions.size\n }, {\n F: __dxlog_file5,\n L: 193,\n S: this,\n C: (f, a) => f(...a)\n });\n this._destroying = true;\n this._open = false;\n if (this._ctx.disposed) {\n return;\n }\n await this._ctx.dispose();\n for (const extension of this._extensions.values()) {\n try {\n log5(\"destroying extension\", {\n name: extension.constructor.name\n }, {\n F: __dxlog_file5,\n L: 205,\n S: this,\n C: (f, a) => f(...a)\n });\n await extension.onClose(err);\n log5(\"destroyed extension\", {\n name: extension.constructor.name\n }, {\n F: __dxlog_file5,\n L: 207,\n S: this,\n C: (f, a) => f(...a)\n });\n } catch (err2) {\n log5.catch(err2, void 0, {\n F: __dxlog_file5,\n L: 209,\n S: this,\n C: (f, a) => f(...a)\n });\n }\n }\n await this._muxer.close();\n log5(\"teleport destroyed\", void 0, {\n F: __dxlog_file5,\n L: 214,\n S: this,\n C: (f, a) => f(...a)\n });\n }\n addExtension(name, extension) {\n if (!this._open) {\n throw new Error(\"Not open\");\n }\n log5(\"addExtension\", {\n name\n }, {\n F: __dxlog_file5,\n L: 222,\n S: this,\n C: (f, a) => f(...a)\n });\n this._setExtension(name, extension);\n scheduleTask(this._ctx, async () => {\n try {\n await this._control.registerExtension(name);\n } catch (err) {\n if (err instanceof RpcClosedError2) {\n return;\n }\n throw err;\n }\n });\n if (this._remoteExtensions.has(name)) {\n scheduleTask(this._ctx, async () => {\n await this._openExtension(name);\n });\n }\n }\n _setExtension(extensionName, extension) {\n invariant4(!extensionName.includes(\"/\"), \"Invalid extension name\", {\n F: __dxlog_file5,\n L: 246,\n S: this,\n A: [\n \"!extensionName.includes('/')\",\n \"'Invalid extension name'\"\n ]\n });\n invariant4(!this._extensions.has(extensionName), \"Extension already exists\", {\n F: __dxlog_file5,\n L: 247,\n S: this,\n A: [\n \"!this._extensions.has(extensionName)\",\n \"'Extension already exists'\"\n ]\n });\n this._extensions.set(extensionName, extension);\n }\n async _openExtension(extensionName) {\n log5(\"open extension\", {\n extensionName\n }, {\n F: __dxlog_file5,\n L: 252,\n S: this,\n C: (f, a) => f(...a)\n });\n const extension = this._extensions.get(extensionName) ?? failUndefined2();\n const context = {\n initiator: this.initiator,\n localPeerId: this.localPeerId,\n remotePeerId: this.remotePeerId,\n createPort: async (channelName, opts) => {\n invariant4(!channelName.includes(\"/\"), \"Invalid channel name\", {\n F: __dxlog_file5,\n L: 260,\n S: this,\n A: [\n \"!channelName.includes('/')\",\n \"'Invalid channel name'\"\n ]\n });\n return this._muxer.createPort(`${extensionName}/${channelName}`, opts);\n },\n createStream: async (channelName, opts) => {\n invariant4(!channelName.includes(\"/\"), \"Invalid channel name\", {\n F: __dxlog_file5,\n L: 264,\n S: this,\n A: [\n \"!channelName.includes('/')\",\n \"'Invalid channel name'\"\n ]\n });\n return this._muxer.createStream(`${extensionName}/${channelName}`, opts);\n },\n close: (err) => {\n void runInContextAsync(this._ctx, async () => {\n await this.close(err);\n });\n }\n };\n await extension.onOpen(context);\n log5(\"extension opened\", {\n extensionName\n }, {\n F: __dxlog_file5,\n L: 275,\n S: this,\n C: (f, a) => f(...a)\n });\n }\n};\n_ts_decorate2([\n logInfo2\n], Teleport.prototype, \"sessionIdString\", null);\n_ts_decorate2([\n synchronized\n], Teleport.prototype, \"abort\", null);\n_ts_decorate2([\n synchronized\n], Teleport.prototype, \"destroy\", null);\n\n// packages/core/mesh/teleport/src/testing/test-builder.ts\nvar __dxlog_file6 = \"/home/runner/work/dxos/dxos/packages/core/mesh/teleport/src/testing/test-builder.ts\";\nvar TestBuilder = class {\n constructor() {\n this._peers = /* @__PURE__ */ new Set();\n }\n createPeer(opts) {\n const peer = opts.factory();\n this._peers.add(peer);\n return peer;\n }\n *createPeers(opts) {\n while (true) {\n yield this.createPeer(opts);\n }\n }\n async destroy() {\n await Promise.all(Array.from(this._peers).map((agent) => agent.destroy()));\n }\n async connect(peer1, peer2) {\n invariant5(peer1 !== peer2, void 0, {\n F: __dxlog_file6,\n L: 38,\n S: this,\n A: [\n \"peer1 !== peer2\",\n \"\"\n ]\n });\n invariant5(this._peers.has(peer1), void 0, {\n F: __dxlog_file6,\n L: 39,\n S: this,\n A: [\n \"this._peers.has(peer1)\",\n \"\"\n ]\n });\n invariant5(this._peers.has(peer1), void 0, {\n F: __dxlog_file6,\n L: 40,\n S: this,\n A: [\n \"this._peers.has(peer1)\",\n \"\"\n ]\n });\n const connection1 = peer1.createConnection({\n initiator: true,\n remotePeerId: peer2.peerId\n });\n const connection2 = peer2.createConnection({\n initiator: false,\n remotePeerId: peer1.peerId\n });\n pipeStreams(connection1.teleport.stream, connection2.teleport.stream);\n await Promise.all([\n peer1.openConnection(connection1),\n peer2.openConnection(connection2)\n ]);\n return [\n connection1,\n connection2\n ];\n }\n async disconnect(peer1, peer2) {\n invariant5(peer1 !== peer2, void 0, {\n F: __dxlog_file6,\n L: 52,\n S: this,\n A: [\n \"peer1 !== peer2\",\n \"\"\n ]\n });\n invariant5(this._peers.has(peer1), void 0, {\n F: __dxlog_file6,\n L: 53,\n S: this,\n A: [\n \"this._peers.has(peer1)\",\n \"\"\n ]\n });\n invariant5(this._peers.has(peer1), void 0, {\n F: __dxlog_file6,\n L: 54,\n S: this,\n A: [\n \"this._peers.has(peer1)\",\n \"\"\n ]\n });\n const connection1 = Array.from(peer1.connections).find((connection) => connection.remotePeerId.equals(peer2.peerId));\n const connection2 = Array.from(peer2.connections).find((connection) => connection.remotePeerId.equals(peer1.peerId));\n invariant5(connection1, void 0, {\n F: __dxlog_file6,\n L: 63,\n S: this,\n A: [\n \"connection1\",\n \"\"\n ]\n });\n invariant5(connection2, void 0, {\n F: __dxlog_file6,\n L: 64,\n S: this,\n A: [\n \"connection2\",\n \"\"\n ]\n });\n await Promise.all([\n peer1.closeConnection(connection1),\n peer2.closeConnection(connection2)\n ]);\n }\n};\nvar TestPeer = class {\n constructor(peerId = PublicKey2.random()) {\n this.peerId = peerId;\n this.connections = /* @__PURE__ */ new Set();\n }\n async onOpen(connection) {\n }\n async onClose(connection) {\n }\n createConnection({ initiator, remotePeerId }) {\n const connection = new TestConnection(this.peerId, remotePeerId, initiator);\n this.connections.add(connection);\n return connection;\n }\n async openConnection(connection) {\n invariant5(this.connections.has(connection), void 0, {\n F: __dxlog_file6,\n L: 85,\n S: this,\n A: [\n \"this.connections.has(connection)\",\n \"\"\n ]\n });\n await connection.teleport.open(PublicKey2.random());\n await this.onOpen(connection);\n }\n async closeConnection(connection) {\n invariant5(this.connections.has(connection), void 0, {\n F: __dxlog_file6,\n L: 91,\n S: this,\n A: [\n \"this.connections.has(connection)\",\n \"\"\n ]\n });\n await this.onClose(connection);\n await connection.teleport.close();\n this.connections.delete(connection);\n }\n async destroy() {\n for (const teleport of this.connections) {\n await this.closeConnection(teleport);\n }\n }\n};\nvar pipeStreams = (stream1, stream2) => {\n pipeline(stream1, stream2, (err) => {\n if (err && err.code !== \"ERR_STREAM_PREMATURE_CLOSE\") {\n log6.catch(err, void 0, {\n F: __dxlog_file6,\n L: 107,\n S: void 0,\n C: (f, a) => f(...a)\n });\n }\n });\n pipeline(stream2, stream1, (err) => {\n if (err && err.code !== \"ERR_STREAM_PREMATURE_CLOSE\") {\n log6.catch(err, void 0, {\n F: __dxlog_file6,\n L: 112,\n S: void 0,\n C: (f, a) => f(...a)\n });\n }\n });\n};\nvar TestConnection = class {\n constructor(localPeerId, remotePeerId, initiator) {\n this.localPeerId = localPeerId;\n this.remotePeerId = remotePeerId;\n this.initiator = initiator;\n this.teleport = new Teleport({\n initiator,\n localPeerId,\n remotePeerId\n });\n }\n whenOpen(open) {\n return waitForCondition({\n condition: () => this.teleport.isOpen === open\n });\n }\n};\n\n// packages/core/mesh/teleport/src/testing/test-extension.ts\nimport { asyncTimeout as asyncTimeout3, Trigger as Trigger2 } from \"@dxos/async\";\nimport { invariant as invariant6 } from \"@dxos/invariant\";\nimport { log as log7 } from \"@dxos/log\";\nimport { schema as schema3 } from \"@dxos/protocols\";\nimport { createProtoRpcPeer as createProtoRpcPeer2 } from \"@dxos/rpc\";\nvar __dxlog_file7 = \"/home/runner/work/dxos/dxos/packages/core/mesh/teleport/src/testing/test-extension.ts\";\nvar TestExtension = class {\n constructor(callbacks = {}) {\n this.callbacks = callbacks;\n this.open = new Trigger2();\n this.closed = new Trigger2();\n this.aborted = new Trigger2();\n }\n get remotePeerId() {\n return this.extensionContext?.remotePeerId;\n }\n async onOpen(context) {\n log7(\"onOpen\", {\n localPeerId: context.localPeerId,\n remotePeerId: context.remotePeerId\n }, {\n F: __dxlog_file7,\n L: 34,\n S: this,\n C: (f, a) => f(...a)\n });\n this.extensionContext = context;\n this._rpc = createProtoRpcPeer2({\n port: await context.createPort(\"rpc\", {\n contentType: 'application/x-protobuf; messageType=\"dxos.rpc.Message\"'\n }),\n requested: {\n TestService: schema3.getService(\"example.testing.rpc.TestService\")\n },\n exposed: {\n TestService: schema3.getService(\"example.testing.rpc.TestService\")\n },\n handlers: {\n TestService: {\n voidCall: async (request) => {\n },\n testCall: async (request) => {\n return {\n data: request.data\n };\n }\n }\n },\n timeout: 2e3\n });\n await this._rpc.open();\n await this.callbacks.onOpen?.();\n this.open.wake();\n }\n async onClose(err) {\n log7(\"onClose\", {\n err\n }, {\n F: __dxlog_file7,\n L: 68,\n S: this,\n C: (f, a) => f(...a)\n });\n await this.callbacks.onClose?.();\n this.closed.wake();\n await this._rpc?.close();\n }\n async onAbort(err) {\n log7(\"onAbort\", {\n err\n }, {\n F: __dxlog_file7,\n L: 75,\n S: this,\n C: (f, a) => f(...a)\n });\n await this.callbacks.onAbort?.();\n this.aborted.wake();\n await this._rpc?.abort();\n }\n async test(message = \"test\") {\n await this.open.wait({\n timeout: 1500\n });\n const res = await asyncTimeout3(this._rpc.rpc.TestService.testCall({\n data: message\n }), 1500);\n invariant6(res.data === message, void 0, {\n F: __dxlog_file7,\n L: 84,\n S: this,\n A: [\n \"res.data === message\",\n \"\"\n ]\n });\n }\n /**\n * Force-close the connection.\n */\n async closeConnection(err) {\n this.extensionContext?.close(err);\n }\n};\n\n// packages/core/mesh/teleport/src/testing/test-extension-with-streams.ts\nimport { randomBytes } from \"@dxos/node-std/crypto\";\nimport { Trigger as Trigger3 } from \"@dxos/async\";\nimport { invariant as invariant7 } from \"@dxos/invariant\";\nimport { log as log8 } from \"@dxos/log\";\nimport { schema as schema4 } from \"@dxos/protocols\";\nimport { createProtoRpcPeer as createProtoRpcPeer3 } from \"@dxos/rpc\";\nvar __dxlog_file8 = \"/home/runner/work/dxos/dxos/packages/core/mesh/teleport/src/testing/test-extension-with-streams.ts\";\nvar TestExtensionWithStreams = class {\n constructor(callbacks = {}) {\n this.callbacks = callbacks;\n this.open = new Trigger3();\n this.closed = new Trigger3();\n this.aborted = new Trigger3();\n this._streams = /* @__PURE__ */ new Map();\n }\n get remotePeerId() {\n return this.extensionContext?.remotePeerId;\n }\n async _openStream(streamTag, interval = 5, chunkSize = 2048) {\n invariant7(!this._streams.has(streamTag), `Stream already exists: ${streamTag}`, {\n F: __dxlog_file8,\n L: 39,\n S: this,\n A: [\n \"!this._streams.has(streamTag)\",\n \"`Stream already exists: ${streamTag}`\"\n ]\n });\n const networkStream = await this.extensionContext.createStream(streamTag, {\n contentType: \"application/x-test-stream\"\n });\n const streamEntry = {\n networkStream,\n bytesSent: 0,\n bytesReceived: 0,\n sendErrors: 0,\n receiveErrors: 0,\n startTimestamp: Date.now()\n };\n const pushChunk = () => {\n streamEntry.timer = setTimeout(() => {\n const chunk = randomBytes(chunkSize);\n if (!networkStream.write(chunk, \"binary\", (err) => {\n if (!err) {\n streamEntry.bytesSent += chunk.length;\n } else {\n streamEntry.sendErrors += 1;\n }\n })) {\n networkStream.once(\"drain\", pushChunk);\n } else {\n process.nextTick(pushChunk);\n }\n }, interval);\n };\n pushChunk();\n this._streams.set(streamTag, streamEntry);\n networkStream.on(\"data\", (data) => {\n streamEntry.bytesReceived += data.length;\n });\n networkStream.on(\"error\", (err) => {\n streamEntry.receiveErrors += 1;\n });\n networkStream.on(\"close\", () => {\n networkStream.removeAllListeners();\n });\n streamEntry.reportingTimer = setInterval(() => {\n const { bytesSent, bytesReceived, sendErrors, receiveErrors } = streamEntry;\n log8.trace(\"dxos.test.stream-stats\", {\n streamTag,\n bytesSent,\n bytesReceived,\n sendErrors,\n receiveErrors,\n from: this.extensionContext?.localPeerId,\n to: this.extensionContext?.remotePeerId\n }, {\n F: __dxlog_file8,\n L: 93,\n S: this,\n C: (f, a) => f(...a)\n });\n }, 100);\n }\n _closeStream(streamTag) {\n invariant7(this._streams.has(streamTag), `Stream does not exist: ${streamTag}`, {\n F: __dxlog_file8,\n L: 106,\n S: this,\n A: [\n \"this._streams.has(streamTag)\",\n \"`Stream does not exist: ${streamTag}`\"\n ]\n });\n const stream = this._streams.get(streamTag);\n clearTimeout(stream.timer);\n clearTimeout(stream.reportingTimer);\n const { bytesSent, bytesReceived, sendErrors, receiveErrors, startTimestamp } = stream;\n stream.networkStream.destroy();\n this._streams.delete(streamTag);\n return {\n bytesSent,\n bytesReceived,\n sendErrors,\n receiveErrors,\n runningTime: Date.now() - (startTimestamp ?? 0)\n };\n }\n async onOpen(context) {\n log8(\"onOpen\", {\n localPeerId: context.localPeerId,\n remotePeerId: context.remotePeerId\n }, {\n F: __dxlog_file8,\n L: 128,\n S: this,\n C: (f, a) => f(...a)\n });\n this.extensionContext = context;\n this._rpc = createProtoRpcPeer3({\n port: await context.createPort(\"rpc\", {\n contentType: 'application/x-protobuf; messageType=\"dxos.rpc.Message\"'\n }),\n requested: {\n TestServiceWithStreams: schema4.getService(\"example.testing.rpc.TestServiceWithStreams\")\n },\n exposed: {\n TestServiceWithStreams: schema4.getService(\"example.testing.rpc.TestServiceWithStreams\")\n },\n handlers: {\n TestServiceWithStreams: {\n requestTestStream: async (request) => {\n const { data: streamTag, streamLoadInterval, streamLoadChunkSize } = request;\n await this._openStream(streamTag, streamLoadInterval, streamLoadChunkSize);\n return {\n data: streamTag\n };\n },\n closeTestStream: async (request) => {\n const streamTag = request.data;\n const { bytesSent, bytesReceived, sendErrors, receiveErrors, runningTime } = this._closeStream(streamTag);\n return {\n data: streamTag,\n bytesSent,\n bytesReceived,\n sendErrors,\n receiveErrors,\n runningTime\n };\n }\n }\n },\n timeout: 2e3\n });\n await this._rpc.open();\n await this.callbacks.onOpen?.();\n this.open.wake();\n }\n async onClose(err) {\n log8(\"onClose\", {\n err\n }, {\n F: __dxlog_file8,\n L: 179,\n S: this,\n C: (f, a) => f(...a)\n });\n await this.callbacks.onClose?.();\n this.closed.wake();\n for (const [streamTag, stream] of Object.entries(this._streams)) {\n log8(\"closing stream\", {\n streamTag\n }, {\n F: __dxlog_file8,\n L: 183,\n S: this,\n C: (f, a) => f(...a)\n });\n clearTimeout(stream.interval);\n stream.networkStream.destroy();\n }\n await this._rpc?.close();\n }\n async onAbort(err) {\n log8(\"onAbort\", {\n err\n }, {\n F: __dxlog_file8,\n L: 191,\n S: this,\n C: (f, a) => f(...a)\n });\n await this.callbacks.onAbort?.();\n this.aborted.wake();\n await this._rpc?.abort();\n }\n async addNewStream(streamLoadInterval, streamLoadChunkSize, streamTag) {\n await this.open.wait({\n timeout: 1500\n });\n if (!streamTag) {\n streamTag = `stream-${randomBytes(4).toString(\"hex\")}`;\n }\n const { data } = await this._rpc.rpc.TestServiceWithStreams.requestTestStream({\n data: streamTag,\n streamLoadInterval,\n streamLoadChunkSize\n });\n invariant7(data === streamTag, void 0, {\n F: __dxlog_file8,\n L: 207,\n S: this,\n A: [\n \"data === streamTag\",\n \"\"\n ]\n });\n await this._openStream(streamTag, streamLoadInterval, streamLoadChunkSize);\n return streamTag;\n }\n async closeStream(streamTag) {\n await this.open.wait({\n timeout: 1500\n });\n const { data, bytesSent, bytesReceived, sendErrors, receiveErrors, runningTime } = await this._rpc.rpc.TestServiceWithStreams.closeTestStream({\n data: streamTag\n });\n invariant7(data === streamTag, void 0, {\n F: __dxlog_file8,\n L: 220,\n S: this,\n A: [\n \"data === streamTag\",\n \"\"\n ]\n });\n const local = this._closeStream(streamTag);\n return {\n streamTag,\n stats: {\n local,\n remote: {\n bytesSent,\n bytesReceived,\n sendErrors,\n receiveErrors,\n runningTime\n }\n }\n };\n }\n /**\n * Force-close the connection.\n */\n async closeConnection(err) {\n this.extensionContext?.close(err);\n }\n};\n\nexport {\n Framer,\n decodeFrame,\n encodeFrame,\n Muxer,\n Teleport,\n TestBuilder,\n TestPeer,\n TestConnection,\n TestExtension,\n TestExtensionWithStreams\n};\n//# sourceMappingURL=chunk-GHYLNW23.mjs.map\n","import \"@dxos/node-std/globals\";\nvar __require = /* @__PURE__ */ ((x) => typeof require !== \"undefined\" ? require : typeof Proxy !== \"undefined\" ? new Proxy(x, {\n get: (a, b) => (typeof require !== \"undefined\" ? require : a)[b]\n}) : x)(function(x) {\n if (typeof require !== \"undefined\")\n return require.apply(this, arguments);\n throw Error('Dynamic require of \"' + x + '\" is not supported');\n});\n\n// inject-globals:@inject-globals\nimport {\n global,\n Buffer as Buffer2,\n process\n} from \"@dxos/node-std/inject-globals\";\n\n// packages/core/mesh/network-manager/src/swarm/connection.ts\nimport { DeferredTask, Event, sleep, scheduleTask, scheduleTaskInterval, synchronized, Trigger } from \"@dxos/async\";\nimport { Context, cancelWithContext } from \"@dxos/context\";\nimport { ErrorStream } from \"@dxos/debug\";\nimport { invariant } from \"@dxos/invariant\";\nimport { PublicKey } from \"@dxos/keys\";\nimport { log, logInfo } from \"@dxos/log\";\nimport { CancelledError, ProtocolError, ConnectionResetError, ConnectivityError, TimeoutError, UnknownProtocolError, trace } from \"@dxos/protocols\";\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_file = \"/home/runner/work/dxos/dxos/packages/core/mesh/network-manager/src/swarm/connection.ts\";\nvar STARTING_SIGNALLING_DELAY = 10;\nvar TRANSPORT_CONNECTION_TIMEOUT = 1e4;\nvar TRANSPORT_STATS_INTERVAL = 5e3;\nvar MAX_SIGNALLING_DELAY = 300;\nvar ConnectionState;\n(function(ConnectionState5) {\n ConnectionState5[\"CREATED\"] = \"CREATED\";\n ConnectionState5[\"INITIAL\"] = \"INITIAL\";\n ConnectionState5[\"CONNECTING\"] = \"CONNECTING\";\n ConnectionState5[\"CONNECTED\"] = \"CONNECTED\";\n ConnectionState5[\"CLOSING\"] = \"CLOSING\";\n ConnectionState5[\"CLOSED\"] = \"CLOSED\";\n ConnectionState5[\"ABORTING\"] = \"ABORTING\";\n ConnectionState5[\"ABORTED\"] = \"ABORTED\";\n})(ConnectionState || (ConnectionState = {}));\nvar Connection = class {\n constructor(topic, ownId, remoteId, sessionId, initiator, _signalMessaging, _protocol, _transportFactory, _callbacks) {\n this.topic = topic;\n this.ownId = ownId;\n this.remoteId = remoteId;\n this.sessionId = sessionId;\n this.initiator = initiator;\n this._signalMessaging = _signalMessaging;\n this._protocol = _protocol;\n this._transportFactory = _transportFactory;\n this._callbacks = _callbacks;\n this._ctx = new Context(void 0, {\n F: __dxlog_file,\n L: 100\n });\n this.connectedTimeoutContext = new Context(void 0, {\n F: __dxlog_file,\n L: 101\n });\n this._protocolClosed = new Trigger();\n this._transportClosed = new Trigger();\n this._state = \"CREATED\";\n this._incomingSignalBuffer = [];\n this._outgoingSignalBuffer = [];\n this.stateChanged = new Event();\n this.errors = new ErrorStream();\n this._instanceId = PublicKey.random().toHex();\n this.transportStats = new Event();\n this._signalSendTask = new DeferredTask(this._ctx, async () => {\n await this._flushSignalBuffer();\n });\n this._signallingDelay = STARTING_SIGNALLING_DELAY;\n log.trace(\"dxos.mesh.connection.construct\", {\n sessionId: this.sessionId,\n topic: this.topic,\n localPeerId: this.ownId,\n remotePeerId: this.remoteId,\n initiator: this.initiator\n }, {\n F: __dxlog_file,\n L: 137,\n S: this,\n C: (f, a) => f(...a)\n });\n }\n get sessionIdString() {\n return this.sessionId.truncate();\n }\n get state() {\n return this._state;\n }\n get transport() {\n return this._transport;\n }\n get protocol() {\n return this._protocol;\n }\n /**\n * Create an underlying transport and prepares it for the connection.\n */\n async openConnection() {\n invariant(this._state === \"INITIAL\", \"Invalid state.\", {\n F: __dxlog_file,\n L: 167,\n S: this,\n A: [\n \"this._state === ConnectionState.INITIAL\",\n \"'Invalid state.'\"\n ]\n });\n log.trace(\"dxos.mesh.connection.open-connection\", trace.begin({\n id: this._instanceId\n }), {\n F: __dxlog_file,\n L: 168,\n S: this,\n C: (f, a) => f(...a)\n });\n log.trace(\"dxos.mesh.connection.open\", {\n sessionId: this.sessionId,\n topic: this.topic,\n localPeerId: this.ownId,\n remotePeerId: this.remoteId,\n initiator: this.initiator\n }, {\n F: __dxlog_file,\n L: 169,\n S: this,\n C: (f, a) => f(...a)\n });\n this._changeState(\"CONNECTING\");\n this._protocol.open(this.sessionId).catch((err) => {\n this.errors.raise(err);\n });\n this._protocol.stream.on(\"close\", () => {\n log(\"protocol stream closed\", void 0, {\n F: __dxlog_file,\n L: 186,\n S: this,\n C: (f, a) => f(...a)\n });\n this._protocolClosed.wake();\n this.close(new ProtocolError(\"protocol stream closed\")).catch((err) => this.errors.raise(err));\n });\n scheduleTask(this.connectedTimeoutContext, async () => {\n log.info(`timeout waiting ${TRANSPORT_CONNECTION_TIMEOUT / 1e3}s for transport to connect, aborting`, void 0, {\n F: __dxlog_file,\n L: 194,\n S: this,\n C: (f, a) => f(...a)\n });\n await this.abort(new TimeoutError(`${TRANSPORT_CONNECTION_TIMEOUT / 1e3}s for transport to connect`)).catch((err) => this.errors.raise(err));\n }, TRANSPORT_CONNECTION_TIMEOUT);\n invariant(!this._transport, void 0, {\n F: __dxlog_file,\n L: 202,\n S: this,\n A: [\n \"!this._transport\",\n \"\"\n ]\n });\n this._transport = this._transportFactory.createTransport({\n initiator: this.initiator,\n stream: this._protocol.stream,\n sendSignal: async (signal) => this._sendSignal(signal),\n sessionId: this.sessionId\n });\n await this._transport.open();\n this._transport.connected.once(async () => {\n this._changeState(\"CONNECTED\");\n await this.connectedTimeoutContext.dispose();\n this._callbacks?.onConnected?.();\n scheduleTaskInterval(this._ctx, async () => this._emitTransportStats(), TRANSPORT_STATS_INTERVAL);\n });\n this._transport.closed.once(() => {\n this._transport = void 0;\n this._transportClosed.wake();\n log(\"abort triggered by transport close\", void 0, {\n F: __dxlog_file,\n L: 223,\n S: this,\n C: (f, a) => f(...a)\n });\n this.abort().catch((err) => this.errors.raise(err));\n });\n this._transport.errors.handle(async (err) => {\n log(\"transport error:\", {\n err\n }, {\n F: __dxlog_file,\n L: 228,\n S: this,\n C: (f, a) => f(...a)\n });\n if (!this.closeReason) {\n this.closeReason = err?.message;\n }\n if (err instanceof ConnectionResetError) {\n log.info(\"aborting due to transport ConnectionResetError\", void 0, {\n F: __dxlog_file,\n L: 235,\n S: this,\n C: (f, a) => f(...a)\n });\n this.abort().catch((err2) => this.errors.raise(err2));\n } else if (err instanceof ConnectivityError) {\n log.info(\"aborting due to transport ConnectivityError\", void 0, {\n F: __dxlog_file,\n L: 238,\n S: this,\n C: (f, a) => f(...a)\n });\n this.abort().catch((err2) => this.errors.raise(err2));\n } else if (err instanceof UnknownProtocolError) {\n log.warn(\"unsure what to do with UnknownProtocolError, will keep on truckin\", {\n err\n }, {\n F: __dxlog_file,\n L: 241,\n S: this,\n C: (f, a) => f(...a)\n });\n }\n if (this._state !== \"CLOSED\" && this._state !== \"CLOSING\") {\n await this.connectedTimeoutContext.dispose();\n this.errors.raise(err);\n }\n });\n for (const signal of this._incomingSignalBuffer) {\n void this._transport.onSignal(signal);\n }\n this._incomingSignalBuffer = [];\n log.trace(\"dxos.mesh.connection.open-connection\", trace.end({\n id: this._instanceId\n }), {\n F: __dxlog_file,\n L: 257,\n S: this,\n C: (f, a) => f(...a)\n });\n }\n async abort(err) {\n log(\"aborting...\", {\n err\n }, {\n F: __dxlog_file,\n L: 264,\n S: this,\n C: (f, a) => f(...a)\n });\n if (this._state === \"CLOSED\" || this._state === \"ABORTED\") {\n log(`abort ignored: already ${this._state}`, this.closeReason, {\n F: __dxlog_file,\n L: 266,\n S: this,\n C: (f, a) => f(...a)\n });\n return;\n }\n await this.connectedTimeoutContext.dispose();\n this._changeState(\"ABORTING\");\n if (!this.closeReason) {\n this.closeReason = err?.message;\n }\n await this._ctx.dispose();\n try {\n await this._closeProtocol({\n abort: true\n });\n } catch (err2) {\n log.catch(err2, void 0, {\n F: __dxlog_file,\n L: 282,\n S: this,\n C: (f, a) => f(...a)\n });\n }\n try {\n await this._closeTransport();\n } catch (err2) {\n log.catch(err2, void 0, {\n F: __dxlog_file,\n L: 289,\n S: this,\n C: (f, a) => f(...a)\n });\n }\n try {\n this._callbacks?.onClosed?.(err);\n } catch (err2) {\n log.catch(err2, void 0, {\n F: __dxlog_file,\n L: 295,\n S: this,\n C: (f, a) => f(...a)\n });\n }\n this._changeState(\"ABORTED\");\n }\n async close(err) {\n if (!this.closeReason) {\n this.closeReason = err?.message;\n } else {\n this.closeReason += `; ${err?.message}`;\n }\n if (this._state === \"CLOSED\" || this._state === \"ABORTING\" || this._state === \"ABORTED\") {\n return;\n }\n const lastState = this._state;\n this._changeState(\"CLOSING\");\n await this.connectedTimeoutContext.dispose();\n await this._ctx.dispose();\n log(\"closing...\", {\n peerId: this.ownId\n }, {\n F: __dxlog_file,\n L: 320,\n S: this,\n C: (f, a) => f(...a)\n });\n let abortProtocol = false;\n if (lastState !== \"CONNECTED\") {\n log(`graceful close requested when we were in ${lastState} state? aborting`, void 0, {\n F: __dxlog_file,\n L: 324,\n S: this,\n C: (f, a) => f(...a)\n });\n abortProtocol = true;\n }\n try {\n await this._closeProtocol({\n abort: abortProtocol\n });\n } catch (err2) {\n log.catch(err2, void 0, {\n F: __dxlog_file,\n L: 330,\n S: this,\n C: (f, a) => f(...a)\n });\n }\n try {\n await this._closeTransport();\n } catch (err2) {\n log.catch(err2, void 0, {\n F: __dxlog_file,\n L: 336,\n S: this,\n C: (f, a) => f(...a)\n });\n }\n log(\"closed\", {\n peerId: this.ownId\n }, {\n F: __dxlog_file,\n L: 339,\n S: this,\n C: (f, a) => f(...a)\n });\n this._changeState(\"CLOSED\");\n this._callbacks?.onClosed?.(err);\n }\n async _closeProtocol(options) {\n log(\"closing protocol\", options, {\n F: __dxlog_file,\n L: 345,\n S: this,\n C: (f, a) => f(...a)\n });\n await Promise.race([\n options?.abort ? this._protocol.abort() : this._protocol.close(),\n this._protocolClosed.wait()\n ]);\n log(\"protocol closed\", options, {\n F: __dxlog_file,\n L: 347,\n S: this,\n C: (f, a) => f(...a)\n });\n }\n async _closeTransport() {\n log(\"closing transport\", void 0, {\n F: __dxlog_file,\n L: 351,\n S: this,\n C: (f, a) => f(...a)\n });\n await Promise.race([\n this._transport?.close(),\n this._transportClosed.wait()\n ]);\n log(\"transport closed\", void 0, {\n F: __dxlog_file,\n L: 353,\n S: this,\n C: (f, a) => f(...a)\n });\n }\n _sendSignal(signal) {\n this._outgoingSignalBuffer.push(signal);\n this._signalSendTask.schedule();\n }\n async _flushSignalBuffer() {\n if (this._outgoingSignalBuffer.length === 0) {\n return;\n }\n try {\n if (true) {\n await cancelWithContext(this._ctx, sleep(this._signallingDelay));\n this._signallingDelay = Math.min(this._signallingDelay * 2, MAX_SIGNALLING_DELAY);\n }\n const signals = [\n ...this._outgoingSignalBuffer\n ];\n this._outgoingSignalBuffer.length = 0;\n await this._signalMessaging.signal({\n author: this.ownId,\n recipient: this.remoteId,\n sessionId: this.sessionId,\n topic: this.topic,\n data: {\n signalBatch: {\n signals\n }\n }\n });\n } catch (err) {\n if (err instanceof CancelledError || err instanceof Error && err.message?.includes(\"CANCELLED\")) {\n return;\n }\n log.info(\"signal message failed to deliver\", {\n err\n }, {\n F: __dxlog_file,\n L: 389,\n S: this,\n C: (f, a) => f(...a)\n });\n await this.close(new ConnectivityError(\"signal message failed to deliver\", err));\n }\n }\n /**\n * Receive a signal from the remote peer.\n */\n async signal(msg) {\n invariant(msg.sessionId, void 0, {\n F: __dxlog_file,\n L: 398,\n S: this,\n A: [\n \"msg.sessionId\",\n \"\"\n ]\n });\n if (!msg.sessionId.equals(this.sessionId)) {\n log(\"dropping signal for incorrect session id\", void 0, {\n F: __dxlog_file,\n L: 400,\n S: this,\n C: (f, a) => f(...a)\n });\n return;\n }\n invariant(msg.data.signal || msg.data.signalBatch, void 0, {\n F: __dxlog_file,\n L: 403,\n S: this,\n A: [\n \"msg.data.signal || msg.data.signalBatch\",\n \"\"\n ]\n });\n invariant(msg.author?.equals(this.remoteId), void 0, {\n F: __dxlog_file,\n L: 404,\n S: this,\n A: [\n \"msg.author?.equals(this.remoteId)\",\n \"\"\n ]\n });\n invariant(msg.recipient?.equals(this.ownId), void 0, {\n F: __dxlog_file,\n L: 405,\n S: this,\n A: [\n \"msg.recipient?.equals(this.ownId)\",\n \"\"\n ]\n });\n const signals = msg.data.signalBatch ? msg.data.signalBatch.signals ?? [] : [\n msg.data.signal\n ];\n for (const signal of signals) {\n if (!signal) {\n continue;\n }\n if ([\n \"CREATED\",\n \"INITIAL\"\n ].includes(this.state)) {\n log(\"buffered signal\", {\n peerId: this.ownId,\n remoteId: this.remoteId,\n msg: msg.data\n }, {\n F: __dxlog_file,\n L: 414,\n S: this,\n C: (f, a) => f(...a)\n });\n this._incomingSignalBuffer.push(signal);\n } else {\n invariant(this._transport, \"Connection not ready to accept signals.\", {\n F: __dxlog_file,\n L: 417,\n S: this,\n A: [\n \"this._transport\",\n \"'Connection not ready to accept signals.'\"\n ]\n });\n log(\"received signal\", {\n peerId: this.ownId,\n remoteId: this.remoteId,\n msg: msg.data\n }, {\n F: __dxlog_file,\n L: 418,\n S: this,\n C: (f, a) => f(...a)\n });\n await this._transport.onSignal(signal);\n }\n }\n }\n initiate() {\n this._changeState(\"INITIAL\");\n }\n _changeState(state) {\n log(\"stateChanged\", {\n from: this._state,\n to: state,\n peerId: this.ownId\n }, {\n F: __dxlog_file,\n L: 429,\n S: this,\n C: (f, a) => f(...a)\n });\n invariant(state !== this._state, \"Already in this state.\", {\n F: __dxlog_file,\n L: 430,\n S: this,\n A: [\n \"state !== this._state\",\n \"'Already in this state.'\"\n ]\n });\n this._state = state;\n this.stateChanged.emit(state);\n }\n async _emitTransportStats() {\n const stats = await this.transport?.getStats();\n if (stats) {\n this.transportStats.emit(stats);\n }\n }\n};\n_ts_decorate([\n logInfo\n], Connection.prototype, \"sessionIdString\", null);\n_ts_decorate([\n synchronized\n], Connection.prototype, \"abort\", null);\n_ts_decorate([\n synchronized\n], Connection.prototype, \"close\", null);\n\n// packages/core/mesh/network-manager/src/signal/swarm-messenger.ts\nimport { Context as Context2 } from \"@dxos/context\";\nimport { invariant as invariant2 } from \"@dxos/invariant\";\nimport { PublicKey as PublicKey2 } from \"@dxos/keys\";\nimport { log as log2 } from \"@dxos/log\";\nimport { schema, TimeoutError as TimeoutError2 } from \"@dxos/protocols\";\nimport { ComplexMap } from \"@dxos/util\";\nvar __dxlog_file2 = \"/home/runner/work/dxos/dxos/packages/core/mesh/network-manager/src/signal/swarm-messenger.ts\";\nvar SwarmMessage = schema.getCodecForType(\"dxos.mesh.swarm.SwarmMessage\");\nvar SwarmMessenger = class {\n constructor({ sendMessage, onSignal, onOffer, topic }) {\n this._ctx = new Context2(void 0, {\n F: __dxlog_file2,\n L: 33\n });\n this._offerRecords = new ComplexMap((key) => key.toHex());\n this._sendMessage = sendMessage;\n this._onSignal = onSignal;\n this._onOffer = onOffer;\n this._topic = topic;\n }\n async receiveMessage({ author, recipient, payload }) {\n if (payload.type_url !== \"dxos.mesh.swarm.SwarmMessage\") {\n return;\n }\n const message = SwarmMessage.decode(payload.value);\n if (!this._topic.equals(message.topic)) {\n return;\n }\n log2(\"received\", {\n from: author,\n to: recipient,\n msg: message\n }, {\n F: __dxlog_file2,\n L: 69,\n S: this,\n C: (f, a) => f(...a)\n });\n if (message.data?.offer) {\n await this._handleOffer({\n author,\n recipient,\n message\n });\n } else if (message.data?.answer) {\n await this._resolveAnswers(message);\n } else if (message.data?.signal) {\n await this._handleSignal({\n author,\n recipient,\n message\n });\n } else if (message.data?.signalBatch) {\n await this._handleSignal({\n author,\n recipient,\n message\n });\n } else {\n log2.warn(\"unknown message\", {\n message\n }, {\n F: __dxlog_file2,\n L: 80,\n S: this,\n C: (f, a) => f(...a)\n });\n }\n }\n async signal(message) {\n invariant2(message.data?.signal || message.data?.signalBatch, \"Invalid message\", {\n F: __dxlog_file2,\n L: 85,\n S: this,\n A: [\n \"message.data?.signal || message.data?.signalBatch\",\n \"'Invalid message'\"\n ]\n });\n await this._sendReliableMessage({\n author: message.author,\n recipient: message.recipient,\n message\n });\n }\n async offer(message) {\n const networkMessage = {\n ...message,\n messageId: PublicKey2.random()\n };\n return new Promise((resolve, reject) => {\n this._offerRecords.set(networkMessage.messageId, {\n resolve\n });\n this._sendReliableMessage({\n author: message.author,\n recipient: message.recipient,\n message: networkMessage\n }).catch((err) => reject(err));\n });\n }\n async _sendReliableMessage({ author, recipient, message }) {\n const networkMessage = {\n ...message,\n // Setting unique message_id if it not specified yet.\n messageId: message.messageId ?? PublicKey2.random()\n };\n log2(\"sending\", {\n from: author,\n to: recipient,\n msg: networkMessage\n }, {\n F: __dxlog_file2,\n L: 123,\n S: this,\n C: (f, a) => f(...a)\n });\n await this._sendMessage({\n author,\n recipient,\n payload: {\n type_url: \"dxos.mesh.swarm.SwarmMessage\",\n value: SwarmMessage.encode(networkMessage)\n }\n });\n }\n async _resolveAnswers(message) {\n invariant2(message.data?.answer?.offerMessageId, \"No offerMessageId\", {\n F: __dxlog_file2,\n L: 135,\n S: this,\n A: [\n \"message.data?.answer?.offerMessageId\",\n \"'No offerMessageId'\"\n ]\n });\n const offerRecord = this._offerRecords.get(message.data.answer.offerMessageId);\n if (offerRecord) {\n this._offerRecords.delete(message.data.answer.offerMessageId);\n invariant2(message.data?.answer, \"No answer\", {\n F: __dxlog_file2,\n L: 139,\n S: this,\n A: [\n \"message.data?.answer\",\n \"'No answer'\"\n ]\n });\n log2(\"resolving\", {\n answer: message.data.answer\n }, {\n F: __dxlog_file2,\n L: 140,\n S: this,\n C: (f, a) => f(...a)\n });\n offerRecord.resolve(message.data.answer);\n }\n }\n async _handleOffer({ author, recipient, message }) {\n invariant2(message.data.offer, \"No offer\", {\n F: __dxlog_file2,\n L: 154,\n S: this,\n A: [\n \"message.data.offer\",\n \"'No offer'\"\n ]\n });\n const offerMessage = {\n author,\n recipient,\n ...message,\n data: {\n offer: message.data.offer\n }\n };\n const answer = await this._onOffer(offerMessage);\n answer.offerMessageId = message.messageId;\n try {\n await this._sendReliableMessage({\n author: recipient,\n recipient: author,\n message: {\n topic: message.topic,\n sessionId: message.sessionId,\n data: {\n answer\n }\n }\n });\n } catch (err) {\n if (err instanceof TimeoutError2) {\n log2.info(\"timeout sending answer to offer\", {\n err\n }, {\n F: __dxlog_file2,\n L: 175,\n S: this,\n C: (f, a) => f(...a)\n });\n } else {\n log2.info(\"error sending answer to offer\", {\n err\n }, {\n F: __dxlog_file2,\n L: 177,\n S: this,\n C: (f, a) => f(...a)\n });\n }\n }\n }\n async _handleSignal({ author, recipient, message }) {\n invariant2(message.messageId, void 0, {\n F: __dxlog_file2,\n L: 191,\n S: this,\n A: [\n \"message.messageId\",\n \"\"\n ]\n });\n invariant2(message.data.signal || message.data.signalBatch, \"Invalid message\", {\n F: __dxlog_file2,\n L: 192,\n S: this,\n A: [\n \"message.data.signal || message.data.signalBatch\",\n \"'Invalid message'\"\n ]\n });\n const signalMessage = {\n author,\n recipient,\n ...message,\n data: {\n signal: message.data.signal,\n signalBatch: message.data.signalBatch\n }\n };\n await this._onSignal(signalMessage);\n }\n};\n\n// packages/core/mesh/network-manager/src/swarm/swarm.ts\nimport { Event as Event3, scheduleTask as scheduleTask3, sleep as sleep2, synchronized as synchronized3 } from \"@dxos/async\";\nimport { Context as Context4 } from \"@dxos/context\";\nimport { ErrorStream as ErrorStream2 } from \"@dxos/debug\";\nimport { invariant as invariant4 } from \"@dxos/invariant\";\nimport { PublicKey as PublicKey4 } from \"@dxos/keys\";\nimport { log as log4, logInfo as logInfo2 } from \"@dxos/log\";\nimport { trace as trace2 } from \"@dxos/protocols\";\nimport { ComplexMap as ComplexMap2, isNotNullOrUndefined } from \"@dxos/util\";\n\n// packages/core/mesh/network-manager/src/swarm/peer.ts\nimport { Event as Event2, scheduleTask as scheduleTask2, synchronized as synchronized2 } from \"@dxos/async\";\nimport { Context as Context3 } from \"@dxos/context\";\nimport { invariant as invariant3 } from \"@dxos/invariant\";\nimport { PublicKey as PublicKey3 } from \"@dxos/keys\";\nimport { log as log3 } from \"@dxos/log\";\nimport { CancelledError as CancelledError2, SystemError } from \"@dxos/protocols\";\nfunction _ts_decorate2(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_file3 = \"/home/runner/work/dxos/dxos/packages/core/mesh/network-manager/src/swarm/peer.ts\";\nvar ConnectionDisplacedError = class extends SystemError {\n constructor() {\n super(\"Connection displaced by remote initiator.\");\n }\n};\nvar CONNECTION_COUNTS_STABLE_AFTER = 5e3;\nvar Peer = class {\n constructor(id, topic, localPeerId, _signalMessaging, _protocolProvider, _transportFactory, _connectionLimiter, _callbacks) {\n this.id = id;\n this.topic = topic;\n this.localPeerId = localPeerId;\n this._signalMessaging = _signalMessaging;\n this._protocolProvider = _protocolProvider;\n this._transportFactory = _transportFactory;\n this._connectionLimiter = _connectionLimiter;\n this._callbacks = _callbacks;\n this._availableAfter = 0;\n this.availableToConnect = true;\n this._ctx = new Context3(void 0, {\n F: __dxlog_file3,\n L: 79\n });\n this.advertizing = false;\n this.initiating = false;\n this.connectionDisplaced = new Event2();\n }\n /**\n * Respond to remote offer.\n */\n async onOffer(message) {\n const remoteId = message.author;\n if (this.connection && ![\n ConnectionState.CREATED,\n ConnectionState.INITIAL,\n ConnectionState.CONNECTING\n ].includes(this.connection.state)) {\n log3.info(`received offer when connection already in ${this.connection.state} state`, void 0, {\n F: __dxlog_file3,\n L: 114,\n S: this,\n C: (f, a) => f(...a)\n });\n return {\n accept: false\n };\n }\n if (this.connection || this.initiating) {\n if (remoteId.toHex() < this.localPeerId.toHex()) {\n log3(\"close local connection\", {\n localPeerId: this.id,\n topic: this.topic,\n remotePeerId: this.localPeerId,\n sessionId: this.connection?.sessionId\n }, {\n F: __dxlog_file3,\n L: 123,\n S: this,\n C: (f, a) => f(...a)\n });\n if (this.connection) {\n await this.closeConnection(new ConnectionDisplacedError());\n }\n } else {\n return {\n accept: false\n };\n }\n }\n if (await this._callbacks.onOffer(remoteId)) {\n if (!this.connection) {\n invariant3(message.sessionId, void 0, {\n F: __dxlog_file3,\n L: 143,\n S: this,\n A: [\n \"message.sessionId\",\n \"\"\n ]\n });\n const connection = this._createConnection(false, message.sessionId);\n try {\n await this._connectionLimiter.connecting(message.sessionId);\n connection.initiate();\n await connection.openConnection();\n } catch (err) {\n if (!(err instanceof CancelledError2)) {\n log3.info(\"connection error\", {\n topic: this.topic,\n peerId: this.localPeerId,\n remoteId: this.id,\n err\n }, {\n F: __dxlog_file3,\n L: 153,\n S: this,\n C: (f, a) => f(...a)\n });\n }\n await this.closeConnection(err);\n }\n return {\n accept: true\n };\n }\n }\n return {\n accept: false\n };\n }\n /**\n * Initiate a connection to the remote peer.\n */\n async initiateConnection() {\n invariant3(!this.initiating, \"Initiation in progress.\", {\n F: __dxlog_file3,\n L: 170,\n S: this,\n A: [\n \"!this.initiating\",\n \"'Initiation in progress.'\"\n ]\n });\n invariant3(!this.connection, \"Already connected.\", {\n F: __dxlog_file3,\n L: 171,\n S: this,\n A: [\n \"!this.connection\",\n \"'Already connected.'\"\n ]\n });\n const sessionId = PublicKey3.random();\n log3(\"initiating...\", {\n ownPeerId: this.localPeerId,\n topic: this.topic,\n remotePeerId: this.id,\n sessionId\n }, {\n F: __dxlog_file3,\n L: 173,\n S: this,\n C: (f, a) => f(...a)\n });\n const connection = this._createConnection(true, sessionId);\n this.initiating = true;\n let answer;\n try {\n await this._connectionLimiter.connecting(sessionId);\n connection.initiate();\n answer = await this._signalMessaging.offer({\n author: this.localPeerId,\n recipient: this.id,\n sessionId,\n topic: this.topic,\n data: {\n offer: {}\n }\n });\n log3(\"received\", {\n answer,\n topic: this.topic,\n ownId: this.localPeerId,\n remoteId: this.id\n }, {\n F: __dxlog_file3,\n L: 190,\n S: this,\n C: (f, a) => f(...a)\n });\n if (connection.state !== ConnectionState.INITIAL) {\n log3(\"ignoring response\", void 0, {\n F: __dxlog_file3,\n L: 192,\n S: this,\n C: (f, a) => f(...a)\n });\n return;\n }\n } catch (err) {\n log3(\"initiation error: send offer\", {\n err,\n topic: this.topic,\n peerId: this.localPeerId,\n remoteId: this.id\n }, {\n F: __dxlog_file3,\n L: 196,\n S: this,\n C: (f, a) => f(...a)\n });\n await connection.abort(err);\n throw err;\n } finally {\n this.initiating = false;\n }\n try {\n if (!answer.accept) {\n this._callbacks.onRejected();\n return;\n }\n } catch (err) {\n log3(\"initiation error: accept answer\", {\n err,\n topic: this.topic,\n peerId: this.localPeerId,\n remoteId: this.id\n }, {\n F: __dxlog_file3,\n L: 209,\n S: this,\n C: (f, a) => f(...a)\n });\n await connection.abort(err);\n throw err;\n } finally {\n this.initiating = false;\n }\n try {\n log3(\"opening connection as initiator\", void 0, {\n F: __dxlog_file3,\n L: 222,\n S: this,\n C: (f, a) => f(...a)\n });\n await connection.openConnection();\n this._callbacks.onAccepted();\n } catch (err) {\n log3(\"initiation error: open connection\", {\n err,\n topic: this.topic,\n peerId: this.localPeerId,\n remoteId: this.id\n }, {\n F: __dxlog_file3,\n L: 226,\n S: this,\n C: (f, a) => f(...a)\n });\n log3.warn(\"closing connection due to unhandled error on openConnection\", {\n err\n }, {\n F: __dxlog_file3,\n L: 233,\n S: this,\n C: (f, a) => f(...a)\n });\n await this.closeConnection(err);\n throw err;\n } finally {\n this.initiating = false;\n }\n }\n /**\n * Create new connection.\n * Either we're initiating a connection or creating one in response to an offer from the other peer.\n */\n _createConnection(initiator, sessionId) {\n log3(\"creating connection\", {\n topic: this.topic,\n peerId: this.localPeerId,\n remoteId: this.id,\n initiator,\n sessionId\n }, {\n F: __dxlog_file3,\n L: 247,\n S: this,\n C: (f, a) => f(...a)\n });\n invariant3(!this.connection, \"Already connected.\", {\n F: __dxlog_file3,\n L: 254,\n S: this,\n A: [\n \"!this.connection\",\n \"'Already connected.'\"\n ]\n });\n const connection = new Connection(\n this.topic,\n this.localPeerId,\n this.id,\n sessionId,\n initiator,\n this._signalMessaging,\n // TODO(dmaretskyi): Init only when connection is established.\n this._protocolProvider({\n initiator,\n localPeerId: this.localPeerId,\n remotePeerId: this.id,\n topic: this.topic\n }),\n this._transportFactory,\n {\n onConnected: () => {\n this.availableToConnect = true;\n this._lastConnectionTime = Date.now();\n this._callbacks.onConnected();\n this._connectionLimiter.doneConnecting(sessionId);\n log3.trace(\"dxos.mesh.connection.connected\", {\n topic: this.topic,\n localPeerId: this.localPeerId,\n remotePeerId: this.id,\n sessionId,\n initiator\n }, {\n F: __dxlog_file3,\n L: 273,\n S: this,\n C: (f, a) => f(...a)\n });\n },\n onClosed: (err) => {\n log3(\"connection closed\", {\n topic: this.topic,\n peerId: this.localPeerId,\n remoteId: this.id,\n initiator\n }, {\n F: __dxlog_file3,\n L: 282,\n S: this,\n C: (f, a) => f(...a)\n });\n this._connectionLimiter.doneConnecting(sessionId);\n invariant3(this.connection === connection, \"Connection mismatch (race condition).\", {\n F: __dxlog_file3,\n L: 287,\n S: this,\n A: [\n \"this.connection === connection\",\n \"'Connection mismatch (race condition).'\"\n ]\n });\n log3.trace(\"dxos.mesh.connection.closed\", {\n topic: this.topic,\n localPeerId: this.localPeerId,\n remotePeerId: this.id,\n sessionId,\n initiator\n }, {\n F: __dxlog_file3,\n L: 289,\n S: this,\n C: (f, a) => f(...a)\n });\n if (err instanceof ConnectionDisplacedError) {\n this.connectionDisplaced.emit(this.connection);\n } else {\n if (this._lastConnectionTime && this._lastConnectionTime + CONNECTION_COUNTS_STABLE_AFTER < Date.now()) {\n this._availableAfter = 0;\n } else {\n this.availableToConnect = false;\n this._availableAfter = increaseInterval(this._availableAfter);\n }\n this._callbacks.onDisconnected();\n scheduleTask2(this._connectionCtx, () => {\n this.availableToConnect = true;\n this._callbacks.onPeerAvailable();\n }, this._availableAfter);\n }\n this.connection = void 0;\n }\n }\n );\n this._callbacks.onInitiated(connection);\n void this._connectionCtx?.dispose();\n this._connectionCtx = this._ctx.derive();\n connection.errors.handle((err) => {\n log3.info(\"connection error, closing\", {\n topic: this.topic,\n peerId: this.localPeerId,\n remoteId: this.id,\n initiator,\n err\n }, {\n F: __dxlog_file3,\n L: 329,\n S: this,\n C: (f, a) => f(...a)\n });\n log3.trace(\"dxos.mesh.connection.error\", {\n topic: this.topic,\n localPeerId: this.localPeerId,\n remotePeerId: this.id,\n sessionId,\n initiator,\n err\n }, {\n F: __dxlog_file3,\n L: 336,\n S: this,\n C: (f, a) => f(...a)\n });\n void this.closeConnection(err);\n });\n this.connection = connection;\n return connection;\n }\n async closeConnection(err) {\n if (!this.connection) {\n return;\n }\n const connection = this.connection;\n log3(\"closing...\", {\n peerId: this.id,\n sessionId: connection.sessionId\n }, {\n F: __dxlog_file3,\n L: 361,\n S: this,\n C: (f, a) => f(...a)\n });\n await connection.close(err);\n log3(\"closed\", {\n peerId: this.id,\n sessionId: connection.sessionId\n }, {\n F: __dxlog_file3,\n L: 367,\n S: this,\n C: (f, a) => f(...a)\n });\n }\n async onSignal(message) {\n if (!this.connection) {\n log3(\"dropping signal message for non-existent connection\", {\n message\n }, {\n F: __dxlog_file3,\n L: 372,\n S: this,\n C: (f, a) => f(...a)\n });\n return;\n }\n await this.connection.signal(message);\n }\n async safeDestroy(reason) {\n await this._ctx.dispose();\n log3(\"Destroying peer\", {\n peerId: this.id,\n topic: this.topic\n }, {\n F: __dxlog_file3,\n L: 382,\n S: this,\n C: (f, a) => f(...a)\n });\n await this?.connection?.close(reason);\n }\n};\n_ts_decorate2([\n synchronized2\n], Peer.prototype, \"safeDestroy\", null);\nvar increaseInterval = (interval) => {\n if (interval === 0) {\n return 50;\n } else if (interval < 500) {\n return 500;\n } else if (interval < 1e3) {\n return 1e3;\n } else if (interval < 5e3) {\n return 5e3;\n }\n return 1e4;\n};\n\n// packages/core/mesh/network-manager/src/swarm/swarm.ts\nfunction _ts_decorate3(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_file4 = \"/home/runner/work/dxos/dxos/packages/core/mesh/network-manager/src/swarm/swarm.ts\";\nvar INITIATION_DELAY = 100;\nvar getClassName = (obj) => Object.getPrototypeOf(obj).constructor.name;\nvar Swarm = class {\n // TODO(burdon): Swarm => Peer.create/destroy =< Connection.open/close\n // TODO(burdon): Pass in object.\n constructor(_topic, _ownPeerId, _topology, _protocolProvider, _messenger, _transportFactory, _label, _connectionLimiter, _initiationDelay = INITIATION_DELAY) {\n this._topic = _topic;\n this._ownPeerId = _ownPeerId;\n this._topology = _topology;\n this._protocolProvider = _protocolProvider;\n this._messenger = _messenger;\n this._transportFactory = _transportFactory;\n this._label = _label;\n this._connectionLimiter = _connectionLimiter;\n this._initiationDelay = _initiationDelay;\n this._ctx = new Context4(void 0, {\n F: __dxlog_file4,\n L: 39\n });\n this._listeningHandle = void 0;\n this._peers = new ComplexMap2(PublicKey4.hash);\n this._instanceId = PublicKey4.random().toHex();\n this.connectionAdded = new Event3();\n this.disconnected = new Event3();\n this.connected = new Event3();\n this.errors = new ErrorStream2();\n log4.trace(\"dxos.mesh.swarm.constructor\", trace2.begin({\n id: this._instanceId,\n data: {\n topic: this._topic.toHex(),\n peerId: this._ownPeerId.toHex()\n }\n }), {\n F: __dxlog_file4,\n L: 89,\n S: this,\n C: (f, a) => f(...a)\n });\n log4(\"creating swarm\", {\n peerId: _ownPeerId\n }, {\n F: __dxlog_file4,\n L: 93,\n S: this,\n C: (f, a) => f(...a)\n });\n _topology.init(this._getSwarmController());\n this._swarmMessenger = new SwarmMessenger({\n sendMessage: async (msg) => await this._messenger.sendMessage(msg),\n onSignal: async (msg) => await this.onSignal(msg),\n onOffer: async (msg) => await this.onOffer(msg),\n topic: this._topic\n });\n log4.trace(\"dxos.mesh.swarm.constructor\", trace2.end({\n id: this._instanceId\n }), {\n F: __dxlog_file4,\n L: 102,\n S: this,\n C: (f, a) => f(...a)\n });\n }\n get connections() {\n return Array.from(this._peers.values()).map((peer) => peer.connection).filter(isNotNullOrUndefined);\n }\n get ownPeerId() {\n return this._ownPeerId;\n }\n /**\n * Custom label assigned to this swarm. Used in devtools to display human-readable names for swarms.\n */\n get label() {\n return this._label;\n }\n get topic() {\n return this._topic;\n }\n async open() {\n invariant4(!this._listeningHandle, void 0, {\n F: __dxlog_file4,\n L: 129,\n S: this,\n A: [\n \"!this._listeningHandle\",\n \"\"\n ]\n });\n this._listeningHandle = await this._messenger.listen({\n peerId: this._ownPeerId,\n payloadType: \"dxos.mesh.swarm.SwarmMessage\",\n onMessage: async (message) => {\n await this._swarmMessenger.receiveMessage(message).catch((err) => log4.info(\"Error while receiving message\", {\n err\n }, {\n F: __dxlog_file4,\n L: 137,\n S: this,\n C: (f, a) => f(...a)\n }));\n }\n });\n }\n async destroy() {\n log4(\"destroying...\", void 0, {\n F: __dxlog_file4,\n L: 143,\n S: this,\n C: (f, a) => f(...a)\n });\n await this._listeningHandle?.unsubscribe();\n this._listeningHandle = void 0;\n await this._ctx.dispose();\n await this._topology.destroy();\n await Promise.all(Array.from(this._peers.keys()).map((key) => this._destroyPeer(key, \"swarm destroyed\")));\n log4(\"destroyed\", void 0, {\n F: __dxlog_file4,\n L: 150,\n S: this,\n C: (f, a) => f(...a)\n });\n }\n async setTopology(topology) {\n invariant4(!this._ctx.disposed, \"Swarm is offline\", {\n F: __dxlog_file4,\n L: 154,\n S: this,\n A: [\n \"!this._ctx.disposed\",\n \"'Swarm is offline'\"\n ]\n });\n if (topology === this._topology) {\n return;\n }\n log4(\"setting topology\", {\n previous: getClassName(this._topology),\n topology: getClassName(topology)\n }, {\n F: __dxlog_file4,\n L: 158,\n S: this,\n C: (f, a) => f(...a)\n });\n await this._topology.destroy();\n this._topology = topology;\n this._topology.init(this._getSwarmController());\n this._topology.update();\n }\n onSwarmEvent(swarmEvent) {\n log4(\"swarm event\", {\n swarmEvent\n }, {\n F: __dxlog_file4,\n L: 171,\n S: this,\n C: (f, a) => f(...a)\n });\n if (this._ctx.disposed) {\n log4(\"swarm event ignored for disposed swarm\", void 0, {\n F: __dxlog_file4,\n L: 174,\n S: this,\n C: (f, a) => f(...a)\n });\n return;\n }\n if (swarmEvent.peerAvailable) {\n const peerId = PublicKey4.from(swarmEvent.peerAvailable.peer);\n if (!peerId.equals(this._ownPeerId)) {\n log4(\"new peer\", {\n peerId\n }, {\n F: __dxlog_file4,\n L: 181,\n S: this,\n C: (f, a) => f(...a)\n });\n const peer = this._getOrCreatePeer(peerId);\n peer.advertizing = true;\n }\n } else if (swarmEvent.peerLeft) {\n const peer = this._peers.get(PublicKey4.from(swarmEvent.peerLeft.peer));\n if (peer) {\n peer.advertizing = false;\n if (peer.connection?.state !== ConnectionState.CONNECTED) {\n void this._destroyPeer(peer.id, \"peer left\").catch((err) => log4.catch(err, void 0, {\n F: __dxlog_file4,\n L: 191,\n S: this,\n C: (f, a) => f(...a)\n }));\n }\n } else {\n log4(\"received peerLeft but no peer found\", {\n peer: swarmEvent.peerLeft.peer\n }, {\n F: __dxlog_file4,\n L: 194,\n S: this,\n C: (f, a) => f(...a)\n });\n }\n }\n this._topology.update();\n }\n async onOffer(message) {\n log4(\"offer\", {\n message\n }, {\n F: __dxlog_file4,\n L: 203,\n S: this,\n C: (f, a) => f(...a)\n });\n if (this._ctx.disposed) {\n log4(\"ignored for disposed swarm\", void 0, {\n F: __dxlog_file4,\n L: 205,\n S: this,\n C: (f, a) => f(...a)\n });\n return {\n accept: false\n };\n }\n invariant4(message.author, void 0, {\n F: __dxlog_file4,\n L: 210,\n S: this,\n A: [\n \"message.author\",\n \"\"\n ]\n });\n if (!message.recipient?.equals(this._ownPeerId)) {\n log4(\"rejecting offer with incorrect peerId\", {\n message\n }, {\n F: __dxlog_file4,\n L: 212,\n S: this,\n C: (f, a) => f(...a)\n });\n return {\n accept: false\n };\n }\n if (!message.topic?.equals(this._topic)) {\n log4(\"rejecting offer with incorrect topic\", {\n message\n }, {\n F: __dxlog_file4,\n L: 216,\n S: this,\n C: (f, a) => f(...a)\n });\n return {\n accept: false\n };\n }\n const peer = this._getOrCreatePeer(message.author);\n const answer = await peer.onOffer(message);\n this._topology.update();\n return answer;\n }\n async onSignal(message) {\n log4(\"signal\", {\n message\n }, {\n F: __dxlog_file4,\n L: 227,\n S: this,\n C: (f, a) => f(...a)\n });\n if (this._ctx.disposed) {\n log4.info(\"ignored for offline swarm\", void 0, {\n F: __dxlog_file4,\n L: 229,\n S: this,\n C: (f, a) => f(...a)\n });\n return;\n }\n invariant4(message.recipient?.equals(this._ownPeerId), `Invalid signal peer id expected=${this.ownPeerId}, actual=${message.recipient}`, {\n F: __dxlog_file4,\n L: 232,\n S: this,\n A: [\n \"message.recipient?.equals(this._ownPeerId)\",\n \"`Invalid signal peer id expected=${this.ownPeerId}, actual=${message.recipient}`\"\n ]\n });\n invariant4(message.topic?.equals(this._topic), void 0, {\n F: __dxlog_file4,\n L: 236,\n S: this,\n A: [\n \"message.topic?.equals(this._topic)\",\n \"\"\n ]\n });\n invariant4(message.author, void 0, {\n F: __dxlog_file4,\n L: 237,\n S: this,\n A: [\n \"message.author\",\n \"\"\n ]\n });\n const peer = this._getOrCreatePeer(message.author);\n await peer.onSignal(message);\n }\n // For debug purposes\n async goOffline() {\n await this._ctx.dispose();\n await Promise.all([\n ...this._peers.keys()\n ].map((peerId) => this._destroyPeer(peerId, \"goOffline\")));\n }\n // For debug purposes\n async goOnline() {\n this._ctx = new Context4(void 0, {\n F: __dxlog_file4,\n L: 253\n });\n }\n _getOrCreatePeer(peerId) {\n let peer = this._peers.get(peerId);\n if (!peer) {\n peer = new Peer(peerId, this._topic, this._ownPeerId, this._swarmMessenger, this._protocolProvider, this._transportFactory, this._connectionLimiter, {\n onInitiated: (connection) => {\n this.connectionAdded.emit(connection);\n },\n onConnected: () => {\n this.connected.emit(peerId);\n },\n onDisconnected: async () => {\n if (this._isUnregistered(peer)) {\n return;\n }\n if (!peer.advertizing) {\n await this._destroyPeer(peer.id, \"peer disconnected\");\n }\n this.disconnected.emit(peerId);\n this._topology.update();\n },\n onRejected: () => {\n if (!this._isUnregistered(peer)) {\n log4(\"peer rejected connection\", {\n peerId\n }, {\n F: __dxlog_file4,\n L: 289,\n S: this,\n C: (f, a) => f(...a)\n });\n void this._destroyPeer(peerId, \"peer rejected connection\");\n }\n },\n onAccepted: () => {\n this._topology.update();\n },\n onOffer: (remoteId) => {\n return this._topology.onOffer(remoteId);\n },\n onPeerAvailable: () => {\n this._topology.update();\n }\n });\n this._peers.set(peerId, peer);\n }\n return peer;\n }\n async _destroyPeer(peerId, reason) {\n const peer = this._peers.get(peerId);\n invariant4(peer, void 0, {\n F: __dxlog_file4,\n L: 312,\n S: this,\n A: [\n \"peer\",\n \"\"\n ]\n });\n this._peers.delete(peerId);\n await peer.safeDestroy(new Error(reason));\n }\n _getSwarmController() {\n return {\n getState: () => ({\n ownPeerId: this._ownPeerId,\n connected: Array.from(this._peers.values()).filter((peer) => peer.connection).map((peer) => peer.id),\n candidates: Array.from(this._peers.values()).filter((peer) => !peer.connection && peer.advertizing && peer.availableToConnect).map((peer) => peer.id),\n allPeers: Array.from(this._peers.values()).map((peer) => peer.id)\n }),\n connect: (peer) => {\n if (this._ctx.disposed) {\n return;\n }\n scheduleTask3(this._ctx, async () => {\n try {\n await this._initiateConnection(peer);\n } catch (err) {\n log4(\"initiation error\", err, {\n F: __dxlog_file4,\n L: 339,\n S: this,\n C: (f, a) => f(...a)\n });\n }\n });\n },\n disconnect: async (peer) => {\n if (this._ctx.disposed) {\n return;\n }\n scheduleTask3(this._ctx, async () => {\n await this._closeConnection(peer);\n this._topology.update();\n });\n }\n };\n }\n /**\n * Creates a connection then sends message over signal network.\n */\n async _initiateConnection(remoteId) {\n const ctx = this._ctx;\n const peer = this._getOrCreatePeer(remoteId);\n if (remoteId.toHex() < this._ownPeerId.toHex()) {\n log4(\"initiation delay\", {\n remoteId\n }, {\n F: __dxlog_file4,\n L: 367,\n S: this,\n C: (f, a) => f(...a)\n });\n await sleep2(this._initiationDelay);\n }\n if (ctx.disposed) {\n return;\n }\n if (this._isUnregistered(peer)) {\n throw new Error(\"Peer left during initiation delay\");\n }\n if (peer.connection) {\n return;\n }\n log4(\"initiating connection...\", {\n remoteId\n }, {\n F: __dxlog_file4,\n L: 383,\n S: this,\n C: (f, a) => f(...a)\n });\n await peer.initiateConnection();\n this._topology.update();\n log4(\"initiated\", {\n remoteId\n }, {\n F: __dxlog_file4,\n L: 386,\n S: this,\n C: (f, a) => f(...a)\n });\n }\n async _closeConnection(peerId) {\n const peer = this._peers.get(peerId);\n if (!peer) {\n return;\n }\n await peer.closeConnection();\n }\n _isUnregistered(peer) {\n return !peer || this._peers.get(peer.id) !== peer;\n }\n};\n_ts_decorate3([\n logInfo2\n], Swarm.prototype, \"_instanceId\", void 0);\n_ts_decorate3([\n logInfo2\n], Swarm.prototype, \"ownPeerId\", null);\n_ts_decorate3([\n logInfo2\n], Swarm.prototype, \"topic\", null);\n_ts_decorate3([\n synchronized3\n], Swarm.prototype, \"onSwarmEvent\", null);\n_ts_decorate3([\n synchronized3\n], Swarm.prototype, \"onOffer\", null);\n_ts_decorate3([\n synchronized3\n], Swarm.prototype, \"goOffline\", null);\n_ts_decorate3([\n synchronized3\n], Swarm.prototype, \"goOnline\", null);\n\n// packages/core/mesh/network-manager/src/swarm/swarm-mapper.ts\nimport { Event as Event4, EventSubscriptions } from \"@dxos/async\";\nimport { PublicKey as PublicKey5 } from \"@dxos/keys\";\nimport { log as log5 } from \"@dxos/log\";\nimport { ComplexMap as ComplexMap3 } from \"@dxos/util\";\nvar __dxlog_file5 = \"/home/runner/work/dxos/dxos/packages/core/mesh/network-manager/src/swarm/swarm-mapper.ts\";\nvar SwarmMapper = class {\n get peers() {\n return Array.from(this._peers.values());\n }\n constructor(_swarm) {\n this._swarm = _swarm;\n this._subscriptions = new EventSubscriptions();\n this._connectionSubscriptions = new ComplexMap3(PublicKey5.hash);\n this._peers = new ComplexMap3(PublicKey5.hash);\n this.mapUpdated = new Event4();\n this._subscriptions.add(_swarm.connectionAdded.on((connection) => {\n this._update();\n this._connectionSubscriptions.set(connection.remoteId, connection.stateChanged.on(() => {\n this._update();\n }));\n }));\n this._subscriptions.add(_swarm.disconnected.on((peerId) => {\n this._connectionSubscriptions.get(peerId)?.();\n this._connectionSubscriptions.delete(peerId);\n this._update();\n }));\n this._update();\n }\n _update() {\n log5(\"updating swarm\", void 0, {\n F: __dxlog_file5,\n L: 72,\n S: this,\n C: (f, a) => f(...a)\n });\n this._peers.clear();\n this._peers.set(this._swarm.ownPeerId, {\n id: this._swarm.ownPeerId,\n state: \"ME\",\n connections: []\n });\n for (const connection of this._swarm.connections) {\n this._peers.set(connection.remoteId, {\n id: connection.remoteId,\n state: connection.state,\n connections: [\n this._swarm.ownPeerId\n ]\n });\n }\n log5(\"graph changed\", {\n directConnections: this._swarm.connections.length,\n totalPeersInSwarm: this._peers.size\n }, {\n F: __dxlog_file5,\n L: 113,\n S: this,\n C: (f, a) => f(...a)\n });\n this.mapUpdated.emit(Array.from(this._peers.values()));\n }\n // TODO(burdon): Async open/close.\n destroy() {\n Array.from(this._connectionSubscriptions.values()).forEach((cb) => cb());\n this._subscriptions.clear();\n }\n};\n\n// packages/core/mesh/network-manager/src/swarm/connection-limiter.ts\nimport { DeferredTask as DeferredTask2 } from \"@dxos/async\";\nimport { Context as Context5 } 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 { CancelledError as CancelledError3 } from \"@dxos/protocols\";\nimport { ComplexMap as ComplexMap4 } from \"@dxos/util\";\nvar __dxlog_file6 = \"/home/runner/work/dxos/dxos/packages/core/mesh/network-manager/src/swarm/connection-limiter.ts\";\nvar MAX_CONCURRENT_INITIATING_CONNECTIONS = 50;\nvar ConnectionLimiter = class {\n constructor({ maxConcurrentInitConnections = MAX_CONCURRENT_INITIATING_CONNECTIONS } = {}) {\n this._ctx = new Context5(void 0, {\n F: __dxlog_file6,\n L: 23\n });\n /**\n * Queue of promises to resolve when initiating connections amount is below the limit.\n */\n this._waitingPromises = new ComplexMap4(PublicKey6.hash);\n this.resolveWaitingPromises = new DeferredTask2(this._ctx, async () => {\n Array.from(this._waitingPromises.values()).slice(0, this._maxConcurrentInitConnections).forEach(({ resolve }) => {\n resolve();\n });\n });\n this._maxConcurrentInitConnections = maxConcurrentInitConnections;\n }\n /**\n * @returns Promise that resolves in queue when connections amount with 'CONNECTING' state is below the limit.\n */\n async connecting(sessionId) {\n invariant5(!this._waitingPromises.has(sessionId), \"Peer is already waiting for connection\", {\n F: __dxlog_file6,\n L: 48,\n S: this,\n A: [\n \"!this._waitingPromises.has(sessionId)\",\n \"'Peer is already waiting for connection'\"\n ]\n });\n log6(\"waiting\", {\n sessionId\n }, {\n F: __dxlog_file6,\n L: 49,\n S: this,\n C: (f, a) => f(...a)\n });\n await new Promise((resolve, reject) => {\n this._waitingPromises.set(sessionId, {\n resolve,\n reject\n });\n this.resolveWaitingPromises.schedule();\n });\n log6(\"allow\", {\n sessionId\n }, {\n F: __dxlog_file6,\n L: 57,\n S: this,\n C: (f, a) => f(...a)\n });\n }\n /**\n * Rejects promise returned by `connecting` method.\n */\n doneConnecting(sessionId) {\n log6(\"done\", {\n sessionId\n }, {\n F: __dxlog_file6,\n L: 64,\n S: this,\n C: (f, a) => f(...a)\n });\n if (!this._waitingPromises.has(sessionId)) {\n return;\n }\n this._waitingPromises.get(sessionId).reject(new CancelledError3());\n this._waitingPromises.delete(sessionId);\n this.resolveWaitingPromises.schedule();\n }\n};\n\n// packages/core/mesh/network-manager/src/connection-log.ts\nimport { Event as Event5 } from \"@dxos/async\";\nimport { raise } from \"@dxos/debug\";\nimport { PublicKey as PublicKey7 } from \"@dxos/keys\";\nimport { ComplexMap as ComplexMap5 } from \"@dxos/util\";\nvar CONNECTION_GC_THRESHOLD = 1e3 * 60 * 15;\nvar EventType;\n(function(EventType2) {\n EventType2[\"CONNECTION_STATE_CHANGED\"] = \"CONNECTION_STATE_CHANGED\";\n EventType2[\"PROTOCOL_ERROR\"] = \"PROTOCOL_ERROR\";\n EventType2[\"PROTOCOL_EXTENSIONS_INITIALIZED\"] = \"PROTOCOL_EXTENSIONS_INITIALIZED\";\n EventType2[\"PROTOCOL_EXTENSIONS_HANDSHAKE\"] = \"PROTOCOL_EXTENSIONS_HANDSHAKE\";\n EventType2[\"PROTOCOL_HANDSHAKE\"] = \"PROTOCOL_HANDSHAKE\";\n})(EventType || (EventType = {}));\nvar ConnectionLog = class {\n constructor() {\n /**\n * SwarmId => info\n */\n this._swarms = new ComplexMap5(PublicKey7.hash);\n this.update = new Event5();\n }\n getSwarmInfo(swarmId) {\n return this._swarms.get(swarmId) ?? raise(new Error(`Swarm not found: ${swarmId}`));\n }\n get swarms() {\n return Array.from(this._swarms.values());\n }\n joinedSwarm(swarm) {\n const info = {\n id: PublicKey7.from(swarm._instanceId),\n topic: swarm.topic,\n isActive: true,\n label: swarm.label,\n connections: []\n };\n this._swarms.set(PublicKey7.from(swarm._instanceId), info);\n this.update.emit();\n swarm.connectionAdded.on((connection) => {\n const connectionInfo = {\n state: ConnectionState.CREATED,\n closeReason: connection.closeReason,\n remotePeerId: connection.remoteId,\n sessionId: connection.sessionId,\n transport: connection.transport && Object.getPrototypeOf(connection.transport).constructor.name,\n protocolExtensions: [],\n events: [],\n lastUpdate: /* @__PURE__ */ new Date()\n };\n info.connections.push(connectionInfo);\n this.update.emit();\n connection.stateChanged.on(async (state) => {\n connectionInfo.state = state;\n connectionInfo.closeReason = connection.closeReason;\n connectionInfo.lastUpdate = /* @__PURE__ */ new Date();\n connectionInfo.events.push({\n type: \"CONNECTION_STATE_CHANGED\",\n newState: state\n });\n if (state === ConnectionState.CONNECTED) {\n const details = await connection.transport?.getDetails();\n connectionInfo.transportDetails = details;\n }\n this.update.emit();\n });\n connection.protocol?.stats?.on((stats) => {\n connectionInfo.readBufferSize = stats.readBufferSize;\n connectionInfo.writeBufferSize = stats.writeBufferSize;\n connectionInfo.streams = stats.channels;\n connectionInfo.lastUpdate = /* @__PURE__ */ new Date();\n this.update.emit();\n });\n connection.transportStats?.on((stats) => {\n connectionInfo.transportBytesSent = stats.bytesSent;\n connectionInfo.transportBytesReceived = stats.bytesReceived;\n connectionInfo.transportPacketsSent = stats.packetsSent;\n connectionInfo.transportPacketsReceived = stats.packetsReceived;\n });\n gcSwarm(info);\n });\n }\n leftSwarm(swarm) {\n this.getSwarmInfo(PublicKey7.from(swarm._instanceId)).isActive = false;\n this.update.emit();\n }\n};\nvar gcSwarm = (swarm) => {\n swarm.connections = swarm.connections?.filter((connection) => {\n return connection.lastUpdate ? Date.now() - connection.lastUpdate.getTime() < CONNECTION_GC_THRESHOLD : true;\n });\n};\n\n// packages/core/mesh/network-manager/src/network-manager.ts\nimport { Event as Event6, synchronized as synchronized4 } from \"@dxos/async\";\nimport { invariant as invariant6 } from \"@dxos/invariant\";\nimport { PublicKey as PublicKey8 } from \"@dxos/keys\";\nimport { log as log7 } from \"@dxos/log\";\nimport { Messenger } from \"@dxos/messaging\";\nimport { trace as trace3 } from \"@dxos/protocols\";\nimport { ConnectionState as ConnectionState2 } from \"@dxos/protocols/proto/dxos/client/services\";\nimport { ComplexMap as ComplexMap6 } from \"@dxos/util\";\nfunction _ts_decorate4(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_file7 = \"/home/runner/work/dxos/dxos/packages/core/mesh/network-manager/src/network-manager.ts\";\nvar SwarmNetworkManager = class {\n constructor({ transportFactory, signalManager, log: log15 }) {\n /**\n * @internal\n */\n this._swarms = new ComplexMap6(PublicKey8.hash);\n this._mappers = new ComplexMap6(PublicKey8.hash);\n this._instanceId = PublicKey8.random().toHex();\n this._connectionState = ConnectionState2.ONLINE;\n this.connectionStateChanged = new Event6();\n this.topicsUpdated = new Event6();\n this._transportFactory = transportFactory;\n this._signalManager = signalManager;\n this._signalManager.swarmEvent.on(({ topic, swarmEvent: event }) => this._swarms.get(topic)?.onSwarmEvent(event));\n this._messenger = new Messenger({\n signalManager: this._signalManager\n });\n this._signalConnection = {\n join: (opts) => this._signalManager.join(opts),\n leave: (opts) => this._signalManager.leave(opts)\n };\n this._connectionLimiter = new ConnectionLimiter();\n if (log15) {\n this._connectionLog = new ConnectionLog();\n }\n }\n // TODO(burdon): Remove access (Devtools only).\n get connectionLog() {\n return this._connectionLog;\n }\n get connectionState() {\n return this._connectionState;\n }\n // TODO(burdon): Reconcile with \"discovery_key\".\n get topics() {\n return Array.from(this._swarms.keys());\n }\n getSwarmMap(topic) {\n return this._mappers.get(topic);\n }\n getSwarm(topic) {\n return this._swarms.get(topic);\n }\n async open() {\n log7.trace(\"dxos.mesh.network-manager.open\", trace3.begin({\n id: this._instanceId\n }), {\n F: __dxlog_file7,\n L: 126,\n S: this,\n C: (f, a) => f(...a)\n });\n await this._messenger.open();\n await this._signalManager.open();\n log7.trace(\"dxos.mesh.network-manager.open\", trace3.end({\n id: this._instanceId\n }), {\n F: __dxlog_file7,\n L: 129,\n S: this,\n C: (f, a) => f(...a)\n });\n }\n async close() {\n for (const topic of this._swarms.keys()) {\n await this.leaveSwarm(topic).catch((err) => {\n log7(err, void 0, {\n F: __dxlog_file7,\n L: 135,\n S: this,\n C: (f, a) => f(...a)\n });\n });\n }\n await this._messenger.close();\n await this._signalManager.close();\n }\n /**\n * Join the swarm.\n */\n async joinSwarm({ topic, peerId, topology, protocolProvider: protocol, label }) {\n invariant6(PublicKey8.isPublicKey(topic), void 0, {\n F: __dxlog_file7,\n L: 154,\n S: this,\n A: [\n \"PublicKey.isPublicKey(topic)\",\n \"\"\n ]\n });\n invariant6(PublicKey8.isPublicKey(peerId), void 0, {\n F: __dxlog_file7,\n L: 155,\n S: this,\n A: [\n \"PublicKey.isPublicKey(peerId)\",\n \"\"\n ]\n });\n invariant6(topology, void 0, {\n F: __dxlog_file7,\n L: 156,\n S: this,\n A: [\n \"topology\",\n \"\"\n ]\n });\n invariant6(typeof protocol === \"function\", void 0, {\n F: __dxlog_file7,\n L: 157,\n S: this,\n A: [\n \"typeof protocol === 'function'\",\n \"\"\n ]\n });\n if (this._swarms.has(topic)) {\n throw new Error(`Already connected to swarm: ${PublicKey8.from(topic)}`);\n }\n log7(\"joining\", {\n topic: PublicKey8.from(topic),\n peerId,\n topology: topology.toString()\n }, {\n F: __dxlog_file7,\n L: 162,\n S: this,\n C: (f, a) => f(...a)\n });\n const swarm = new Swarm(topic, peerId, topology, protocol, this._messenger, this._transportFactory, label, this._connectionLimiter);\n swarm.errors.handle((error) => {\n log7(\"swarm error\", {\n error\n }, {\n F: __dxlog_file7,\n L: 175,\n S: this,\n C: (f, a) => f(...a)\n });\n });\n this._swarms.set(topic, swarm);\n this._mappers.set(topic, new SwarmMapper(swarm));\n await swarm.open();\n this._signalConnection.join({\n topic,\n peerId\n }).catch((error) => log7.catch(error, void 0, {\n F: __dxlog_file7,\n L: 184,\n S: this,\n C: (f, a) => f(...a)\n }));\n this.topicsUpdated.emit();\n this._connectionLog?.joinedSwarm(swarm);\n log7(\"joined\", {\n topic: PublicKey8.from(topic),\n count: this._swarms.size\n }, {\n F: __dxlog_file7,\n L: 188,\n S: this,\n C: (f, a) => f(...a)\n });\n return {\n close: () => this.leaveSwarm(topic)\n };\n }\n /**\n * Close the connection.\n */\n async leaveSwarm(topic) {\n if (!this._swarms.has(topic)) {\n return;\n }\n log7(\"leaving\", {\n topic: PublicKey8.from(topic)\n }, {\n F: __dxlog_file7,\n L: 205,\n S: this,\n C: (f, a) => f(...a)\n });\n const swarm = this._swarms.get(topic);\n await this._signalConnection.leave({\n topic,\n peerId: swarm.ownPeerId\n });\n const map = this._mappers.get(topic);\n map.destroy();\n this._mappers.delete(topic);\n this._connectionLog?.leftSwarm(swarm);\n await swarm.destroy();\n this._swarms.delete(topic);\n this.topicsUpdated.emit();\n log7(\"left\", {\n topic: PublicKey8.from(topic),\n count: this._swarms.size\n }, {\n F: __dxlog_file7,\n L: 219,\n S: this,\n C: (f, a) => f(...a)\n });\n }\n async setConnectionState(state) {\n if (state === this._connectionState) {\n return;\n }\n switch (state) {\n case ConnectionState2.OFFLINE: {\n this._connectionState = state;\n await Promise.all([\n ...this._swarms.values()\n ].map((swarm) => swarm.goOffline()));\n await this._messenger.close();\n await this._signalManager.close();\n break;\n }\n case ConnectionState2.ONLINE: {\n this._connectionState = state;\n this._messenger.open();\n await Promise.all([\n ...this._swarms.values()\n ].map((swarm) => swarm.goOnline()));\n await this._signalManager.open();\n break;\n }\n }\n this.connectionStateChanged.emit(this._connectionState);\n }\n};\n_ts_decorate4([\n synchronized4\n], SwarmNetworkManager.prototype, \"joinSwarm\", null);\n_ts_decorate4([\n synchronized4\n], SwarmNetworkManager.prototype, \"leaveSwarm\", null);\n\n// packages/core/mesh/network-manager/src/topology/fully-connected-topology.ts\nimport { invariant as invariant7 } from \"@dxos/invariant\";\nvar __dxlog_file8 = \"/home/runner/work/dxos/dxos/packages/core/mesh/network-manager/src/topology/fully-connected-topology.ts\";\nvar FullyConnectedTopology = class {\n toString() {\n return \"FullyConnectedTopology\";\n }\n init(controller) {\n invariant7(!this._controller, \"Already initialized\", {\n F: __dxlog_file8,\n L: 18,\n S: this,\n A: [\n \"!this._controller\",\n \"'Already initialized'\"\n ]\n });\n this._controller = controller;\n }\n update() {\n invariant7(this._controller, \"Not initialized\", {\n F: __dxlog_file8,\n L: 23,\n S: this,\n A: [\n \"this._controller\",\n \"'Not initialized'\"\n ]\n });\n const { candidates: discovered } = this._controller.getState();\n for (const peer of discovered) {\n this._controller.connect(peer);\n }\n }\n async onOffer(peer) {\n return true;\n }\n async destroy() {\n }\n};\n\n// packages/core/mesh/network-manager/src/topology/mmst-topology.ts\nimport distance from \"xor-distance\";\nimport { invariant as invariant8 } from \"@dxos/invariant\";\nimport { log as log8 } from \"@dxos/log\";\nvar __dxlog_file9 = \"/home/runner/work/dxos/dxos/packages/core/mesh/network-manager/src/topology/mmst-topology.ts\";\nvar MIN_UPDATE_INTERVAL = 1e3 * 10;\nvar MAX_CHANGES_PER_UPDATE = 1;\nvar MMSTTopology = class {\n constructor({ originateConnections = 2, maxPeers = 4, sampleSize = 10 } = {}) {\n this._sampleCollected = false;\n this._lastAction = /* @__PURE__ */ new Date(0);\n this._originateConnections = originateConnections;\n this._maxPeers = maxPeers;\n this._sampleSize = sampleSize;\n }\n init(controller) {\n invariant8(!this._controller, \"Already initialized\", {\n F: __dxlog_file9,\n L: 51,\n S: this,\n A: [\n \"!this._controller\",\n \"'Already initialized'\"\n ]\n });\n this._controller = controller;\n }\n update() {\n invariant8(this._controller, \"Not initialized\", {\n F: __dxlog_file9,\n L: 56,\n S: this,\n A: [\n \"this._controller\",\n \"'Not initialized'\"\n ]\n });\n const { connected, candidates } = this._controller.getState();\n if (this._sampleCollected || connected.length > this._maxPeers || candidates.length > 0) {\n log8(\"Running the algorithm.\", void 0, {\n F: __dxlog_file9,\n L: 60,\n S: this,\n C: (f, a) => f(...a)\n });\n this._sampleCollected = true;\n this._runAlgorithm();\n }\n }\n forceUpdate() {\n this._lastAction = /* @__PURE__ */ new Date(0);\n this.update();\n }\n async onOffer(peer) {\n invariant8(this._controller, \"Not initialized\", {\n F: __dxlog_file9,\n L: 72,\n S: this,\n A: [\n \"this._controller\",\n \"'Not initialized'\"\n ]\n });\n const { connected } = this._controller.getState();\n const accept = connected.length < this._maxPeers;\n log8(`Offer ${peer} accept=${accept}`, void 0, {\n F: __dxlog_file9,\n L: 75,\n S: this,\n C: (f, a) => f(...a)\n });\n return accept;\n }\n async destroy() {\n }\n _runAlgorithm() {\n invariant8(this._controller, \"Not initialized\", {\n F: __dxlog_file9,\n L: 84,\n S: this,\n A: [\n \"this._controller\",\n \"'Not initialized'\"\n ]\n });\n const { connected, candidates, ownPeerId } = this._controller.getState();\n if (connected.length > this._maxPeers) {\n log8(`disconnect ${connected.length - this._maxPeers} peers.`, void 0, {\n F: __dxlog_file9,\n L: 90,\n S: this,\n C: (f, a) => f(...a)\n });\n const sorted = sortByXorDistance(connected, ownPeerId).reverse().slice(0, this._maxPeers - connected.length);\n invariant8(sorted.length === 0, void 0, {\n F: __dxlog_file9,\n L: 94,\n S: this,\n A: [\n \"sorted.length === 0\",\n \"\"\n ]\n });\n if (sorted.length > MAX_CHANGES_PER_UPDATE) {\n log8(`want to disconnect ${sorted.length} peers but limited to ${MAX_CHANGES_PER_UPDATE}`, void 0, {\n F: __dxlog_file9,\n L: 97,\n S: this,\n C: (f, a) => f(...a)\n });\n }\n if (Date.now() - this._lastAction.getTime() > MIN_UPDATE_INTERVAL) {\n for (const peer of sorted.slice(0, MAX_CHANGES_PER_UPDATE)) {\n log8(`Disconnect ${peer}.`, void 0, {\n F: __dxlog_file9,\n L: 102,\n S: this,\n C: (f, a) => f(...a)\n });\n this._controller.disconnect(peer);\n }\n this._lastAction = /* @__PURE__ */ new Date();\n } else {\n log8(\"rate limited disconnect\", void 0, {\n F: __dxlog_file9,\n L: 107,\n S: this,\n C: (f, a) => f(...a)\n });\n }\n } else if (connected.length < this._originateConnections) {\n log8(`connect ${this._originateConnections - connected.length} peers.`, void 0, {\n F: __dxlog_file9,\n L: 111,\n S: this,\n C: (f, a) => f(...a)\n });\n const sample = candidates.sort(() => Math.random() - 0.5).slice(0, this._sampleSize);\n const sorted = sortByXorDistance(sample, ownPeerId).slice(0, this._originateConnections - connected.length);\n if (sorted.length > MAX_CHANGES_PER_UPDATE) {\n log8(`want to connect ${sorted.length} peers but limited to ${MAX_CHANGES_PER_UPDATE}`, void 0, {\n F: __dxlog_file9,\n L: 116,\n S: this,\n C: (f, a) => f(...a)\n });\n }\n if (Date.now() - this._lastAction.getTime() > MIN_UPDATE_INTERVAL) {\n for (const peer of sorted.slice(0, MAX_CHANGES_PER_UPDATE)) {\n log8(`Connect ${peer}.`, void 0, {\n F: __dxlog_file9,\n L: 120,\n S: this,\n C: (f, a) => f(...a)\n });\n this._controller.connect(peer);\n }\n this._lastAction = /* @__PURE__ */ new Date();\n } else {\n log8(\"rate limited connect\", void 0, {\n F: __dxlog_file9,\n L: 125,\n S: this,\n C: (f, a) => f(...a)\n });\n }\n }\n }\n toString() {\n return \"MMSTTopology\";\n }\n};\nvar sortByXorDistance = (keys, reference) => keys.sort((a, b) => distance.gt(distance(a.asBuffer(), reference.asBuffer()), distance(b.asBuffer(), reference.asBuffer())));\n\n// packages/core/mesh/network-manager/src/topology/star-topology.ts\nimport { invariant as invariant9 } from \"@dxos/invariant\";\nimport { log as log9 } from \"@dxos/log\";\nvar __dxlog_file10 = \"/home/runner/work/dxos/dxos/packages/core/mesh/network-manager/src/topology/star-topology.ts\";\nvar StarTopology = class {\n constructor(_centralPeer) {\n this._centralPeer = _centralPeer;\n }\n toString() {\n return `StarTopology(${this._centralPeer.truncate()})`;\n }\n init(controller) {\n invariant9(!this._controller, \"Already initialized.\", {\n F: __dxlog_file10,\n L: 21,\n S: this,\n A: [\n \"!this._controller\",\n \"'Already initialized.'\"\n ]\n });\n this._controller = controller;\n }\n update() {\n invariant9(this._controller, \"Not initialized.\", {\n F: __dxlog_file10,\n L: 26,\n S: this,\n A: [\n \"this._controller\",\n \"'Not initialized.'\"\n ]\n });\n const { candidates, connected, ownPeerId } = this._controller.getState();\n if (!ownPeerId.equals(this._centralPeer)) {\n log9(\"leaf peer dropping all connections apart from central peer.\", void 0, {\n F: __dxlog_file10,\n L: 29,\n S: this,\n C: (f, a) => f(...a)\n });\n for (const peer of connected) {\n if (!peer.equals(this._centralPeer)) {\n log9(\"dropping connection\", {\n peer\n }, {\n F: __dxlog_file10,\n L: 34,\n S: this,\n C: (f, a) => f(...a)\n });\n this._controller.disconnect(peer);\n }\n }\n }\n for (const peer of candidates) {\n if (peer.equals(this._centralPeer) || ownPeerId.equals(this._centralPeer)) {\n log9(\"connecting to peer\", {\n peer\n }, {\n F: __dxlog_file10,\n L: 43,\n S: this,\n C: (f, a) => f(...a)\n });\n this._controller.connect(peer);\n }\n }\n }\n async onOffer(peer) {\n invariant9(this._controller, \"Not initialized.\", {\n F: __dxlog_file10,\n L: 50,\n S: this,\n A: [\n \"this._controller\",\n \"'Not initialized.'\"\n ]\n });\n const { ownPeerId } = this._controller.getState();\n log9(\"offer\", {\n peer,\n isCentral: peer.equals(this._centralPeer),\n isSelfCentral: ownPeerId.equals(this._centralPeer)\n }, {\n F: __dxlog_file10,\n L: 52,\n S: this,\n C: (f, a) => f(...a)\n });\n return ownPeerId.equals(this._centralPeer) || peer.equals(this._centralPeer);\n }\n async destroy() {\n }\n};\n\n// packages/core/mesh/network-manager/src/transport/memory-transport.ts\nimport { Transform } from \"@dxos/node-std/stream\";\nimport { Event as Event7, Trigger as Trigger2 } from \"@dxos/async\";\nimport { ErrorStream as ErrorStream3 } from \"@dxos/debug\";\nimport { invariant as invariant10 } from \"@dxos/invariant\";\nimport { PublicKey as PublicKey9 } from \"@dxos/keys\";\nimport { log as log10, logInfo as logInfo3 } from \"@dxos/log\";\nimport { ComplexMap as ComplexMap7 } from \"@dxos/util\";\nfunction _ts_decorate5(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_file11 = \"/home/runner/work/dxos/dxos/packages/core/mesh/network-manager/src/transport/memory-transport.ts\";\nvar MEMORY_TRANSPORT_DELAY = 1;\nvar createStreamDelay = (delay) => {\n return new Transform({\n objectMode: true,\n transform: (chunk, _, cb) => {\n setTimeout(() => cb(null, chunk), delay);\n }\n });\n};\nvar MemoryTransportFactory = {\n createTransport: (options) => new MemoryTransport(options)\n};\nvar MemoryTransport = class _MemoryTransport {\n static {\n // TODO(burdon): Remove static properties (inject context into constructor).\n this._connections = new ComplexMap7(PublicKey9.hash);\n }\n constructor(_options) {\n this._options = _options;\n this._instanceId = PublicKey9.random();\n this._remote = new Trigger2();\n this._outgoingDelay = createStreamDelay(MEMORY_TRANSPORT_DELAY);\n this._incomingDelay = createStreamDelay(MEMORY_TRANSPORT_DELAY);\n this._closed = false;\n this.closed = new Event7();\n this.connected = new Event7();\n this.errors = new ErrorStream3();\n invariant10(!_MemoryTransport._connections.has(this._instanceId), \"Duplicate memory connection\", {\n F: __dxlog_file11,\n L: 64,\n S: this,\n A: [\n \"!MemoryTransport._connections.has(this._instanceId)\",\n \"'Duplicate memory connection'\"\n ]\n });\n _MemoryTransport._connections.set(this._instanceId, this);\n }\n get isOpen() {\n return !this._closed;\n }\n async open() {\n log10(\"opening...\", void 0, {\n F: __dxlog_file11,\n L: 74,\n S: this,\n C: (f, a) => f(...a)\n });\n if (this._options.initiator) {\n log10(\"sending signal\", void 0, {\n F: __dxlog_file11,\n L: 78,\n S: this,\n C: (f, a) => f(...a)\n });\n try {\n await this._options.sendSignal({\n payload: {\n transportId: this._instanceId.toHex()\n }\n });\n } catch (err) {\n if (!this._closed) {\n this.errors.raise(toError(err));\n }\n }\n } else {\n this._remote.wait({\n timeout: this._options.timeout ?? 1e3\n }).then((remoteId) => {\n if (this._closed) {\n return;\n }\n this._remoteInstanceId = remoteId;\n this._remoteConnection = _MemoryTransport._connections.get(this._remoteInstanceId);\n if (!this._remoteConnection) {\n this._closed = true;\n this.closed.emit();\n return;\n }\n invariant10(!this._remoteConnection._remoteConnection, `Remote already connected: ${this._remoteInstanceId}`, {\n F: __dxlog_file11,\n L: 104,\n S: this,\n A: [\n \"!this._remoteConnection._remoteConnection\",\n \"`Remote already connected: ${this._remoteInstanceId}`\"\n ]\n });\n this._remoteConnection._remoteConnection = this;\n this._remoteConnection._remoteInstanceId = this._instanceId;\n log10(\"connected\", void 0, {\n F: __dxlog_file11,\n L: 108,\n S: this,\n C: (f, a) => f(...a)\n });\n this._options.stream.pipe(this._outgoingDelay).pipe(this._remoteConnection._options.stream).pipe(this._incomingDelay).pipe(this._options.stream);\n this.connected.emit();\n this._remoteConnection.connected.emit();\n }).catch((err) => {\n if (this._closed) {\n return;\n }\n this.errors.raise(err);\n });\n }\n }\n async close() {\n log10(\"closing...\", void 0, {\n F: __dxlog_file11,\n L: 129,\n S: this,\n C: (f, a) => f(...a)\n });\n this._closed = true;\n _MemoryTransport._connections.delete(this._instanceId);\n if (this._remoteConnection) {\n this._remoteConnection._closed = true;\n _MemoryTransport._connections.delete(this._remoteInstanceId);\n this._options.stream.unpipe(this._incomingDelay);\n this._incomingDelay.unpipe(this._remoteConnection._options.stream);\n this._remoteConnection._options.stream.unpipe(this._outgoingDelay);\n this._outgoingDelay.unpipe(this._options.stream);\n this._options.stream.unpipe(this._outgoingDelay);\n this._remoteConnection.closed.emit();\n this._remoteConnection._remoteConnection = void 0;\n this._remoteConnection = void 0;\n }\n this.closed.emit();\n log10(\"closed\", void 0, {\n F: __dxlog_file11,\n L: 157,\n S: this,\n C: (f, a) => f(...a)\n });\n }\n async onSignal({ payload }) {\n log10(\"received signal\", {\n payload\n }, {\n F: __dxlog_file11,\n L: 161,\n S: this,\n C: (f, a) => f(...a)\n });\n if (!payload?.transportId) {\n return;\n }\n const transportId = payload.transportId;\n if (transportId) {\n const remoteId = PublicKey9.fromHex(transportId);\n this._remote.wake(remoteId);\n }\n }\n async getDetails() {\n return this._instanceId.toHex();\n }\n async getStats() {\n return {\n bytesSent: 0,\n bytesReceived: 0,\n packetsSent: 0,\n packetsReceived: 0\n };\n }\n};\n_ts_decorate5([\n logInfo3\n], MemoryTransport.prototype, \"_instanceId\", void 0);\n_ts_decorate5([\n logInfo3\n], MemoryTransport.prototype, \"_remoteInstanceId\", void 0);\nvar toError = (err) => err instanceof Error ? err : new Error(String(err));\n\n// packages/core/mesh/network-manager/src/transport/transport.ts\nvar TransportKind;\n(function(TransportKind2) {\n TransportKind2[\"SIMPLE_PEER\"] = \"SIMPLE_PEER\";\n TransportKind2[\"SIMPLE_PEER_PROXY\"] = \"SIMPLE_PEER_PROXY\";\n TransportKind2[\"LIBDATACHANNEL\"] = \"LIBDATACHANNEL\";\n TransportKind2[\"MEMORY\"] = \"MEMORY\";\n TransportKind2[\"TCP\"] = \"TCP\";\n})(TransportKind || (TransportKind = {}));\n\n// packages/core/mesh/network-manager/src/transport/simplepeer-transport.ts\nimport SimplePeerConstructor from \"simple-peer\";\nimport invariant11 from \"tiny-invariant\";\nimport { Event as Event8 } from \"@dxos/async\";\nimport { ErrorStream as ErrorStream4, raise as raise2 } from \"@dxos/debug\";\nimport { PublicKey as PublicKey10 } from \"@dxos/keys\";\nimport { log as log11 } from \"@dxos/log\";\nimport { ConnectionResetError as ConnectionResetError2, ConnectivityError as ConnectivityError2, ProtocolError as ProtocolError2, UnknownProtocolError as UnknownProtocolError2, trace as trace4 } from \"@dxos/protocols\";\n\n// packages/core/mesh/network-manager/src/transport/webrtc.ts\nvar wrtc = null;\ntry {\n wrtc = __require(\"@koush/wrtc\");\n} catch {\n}\n\n// packages/core/mesh/network-manager/src/transport/simplepeer-transport.ts\nvar __dxlog_file12 = \"/home/runner/work/dxos/dxos/packages/core/mesh/network-manager/src/transport/simplepeer-transport.ts\";\nvar createSimplePeerTransportFactory = (webrtcConfig) => ({\n createTransport: (options) => new SimplePeerTransport({\n ...options,\n webrtcConfig\n })\n});\nvar SimplePeerTransport = class {\n get isOpen() {\n return this._piped && !this._closed;\n }\n /**\n * @params opts.config formatted as per https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection/RTCPeerConnection\n */\n constructor(_params) {\n this._params = _params;\n this._closed = false;\n this._piped = false;\n this.closed = new Event8();\n this.connected = new Event8();\n this.errors = new ErrorStream4();\n this._instanceId = PublicKey10.random().toHex();\n log11.trace(\"dxos.mesh.webrtc-transport.constructor\", trace4.begin({\n id: this._instanceId\n }), {\n F: __dxlog_file12,\n L: 50,\n S: this,\n C: (f, a) => f(...a)\n });\n log11(\"created connection\", _params, {\n F: __dxlog_file12,\n L: 51,\n S: this,\n C: (f, a) => f(...a)\n });\n this._peer = new SimplePeerConstructor({\n channelName: \"dxos.mesh.transport\",\n initiator: this._params.initiator,\n wrtc: SimplePeerConstructor.WEBRTC_SUPPORT ? void 0 : wrtc ?? raise2(new Error(\"wrtc not available\")),\n config: this._params.webrtcConfig\n });\n this._peer.on(\"signal\", async (data) => {\n log11(\"signal\", data, {\n F: __dxlog_file12,\n L: 60,\n S: this,\n C: (f, a) => f(...a)\n });\n await this._params.sendSignal({\n payload: {\n data\n }\n });\n });\n this._peer.on(\"connect\", () => {\n log11(\"connected\", void 0, {\n F: __dxlog_file12,\n L: 65,\n S: this,\n C: (f, a) => f(...a)\n });\n this._params.stream.pipe(this._peer).pipe(this._params.stream);\n this._piped = true;\n this.connected.emit();\n });\n this._peer.on(\"close\", async () => {\n log11(\"closed\", void 0, {\n F: __dxlog_file12,\n L: 72,\n S: this,\n C: (f, a) => f(...a)\n });\n await this.close();\n });\n this._peer.on(\"error\", async (err) => {\n if (typeof RTCError !== \"undefined\" && err instanceof RTCError) {\n if (err.errorDetail === \"sctp-failure\") {\n this.errors.raise(new ConnectionResetError2(\"sctp-failure from RTCError\", err));\n } else {\n log11.info(\"unknown RTCError\", {\n err\n }, {\n F: __dxlog_file12,\n L: 83,\n S: this,\n C: (f, a) => f(...a)\n });\n this.errors.raise(new UnknownProtocolError2(\"unknown RTCError\", err));\n }\n } else if (\"code\" in err) {\n log11.info(\"simple-peer error\", err, {\n F: __dxlog_file12,\n L: 88,\n S: this,\n C: (f, a) => f(...a)\n });\n switch (err.code) {\n case \"ERR_WEBRTC_SUPPORT\":\n this.errors.raise(new ProtocolError2(\"WebRTC not supported\", err));\n break;\n case \"ERR_SIGNALING\":\n this.errors.raise(new ConnectivityError2(\"signaling failure\", err));\n break;\n case \"ERR_ICE_CONNECTION_FAILURE\":\n case \"ERR_DATA_CHANNEL\":\n case \"ERR_CONNECTION_FAILURE\":\n this.errors.raise(new ConnectivityError2(\"unknown communication failure\", err));\n break;\n case \"ERR_CREATE_OFFER\":\n case \"ERR_CREATE_ANSWER\":\n case \"ERR_SET_LOCAL_DESCRIPTION\":\n case \"ERR_SET_REMOTE_DESCRIPTION\":\n case \"ERR_ADD_ICE_CANDIDATE\":\n this.errors.raise(new UnknownProtocolError2(\"unknown simple-peer library failure\", err));\n break;\n default:\n this.errors.raise(new Error(\"unknown simple-peer error\"));\n break;\n }\n } else {\n log11.info(\"unknown peer connection error\", err, {\n F: __dxlog_file12,\n L: 114,\n S: this,\n C: (f, a) => f(...a)\n });\n this.errors.raise(err);\n }\n try {\n if (typeof this._peer?._pc?.getStats === \"function\") {\n this._peer._pc.getStats().then((stats) => {\n log11.info(\"report after webrtc error\", {\n config: this._params.webrtcConfig,\n stats: Object.fromEntries(stats.entries())\n }, {\n F: __dxlog_file12,\n L: 122,\n S: this,\n C: (f, a) => f(...a)\n });\n });\n }\n } catch (err2) {\n log11.catch(err2, void 0, {\n F: __dxlog_file12,\n L: 129,\n S: this,\n C: (f, a) => f(...a)\n });\n }\n await this.close();\n });\n log11.trace(\"dxos.mesh.webrtc-transport.constructor\", trace4.end({\n id: this._instanceId\n }), {\n F: __dxlog_file12,\n L: 135,\n S: this,\n C: (f, a) => f(...a)\n });\n }\n async getStats() {\n const stats = await this._getStats();\n if (!stats) {\n return {\n bytesSent: 0,\n bytesReceived: 0,\n packetsSent: 0,\n packetsReceived: 0,\n rawStats: {}\n };\n }\n return {\n bytesSent: stats.transport.bytesSent,\n bytesReceived: stats.transport.bytesReceived,\n packetsSent: stats.transport.packetsSent,\n packetsReceived: stats.transport.packetsReceived,\n rawStats: stats.raw\n };\n }\n async _getStats() {\n if (typeof this._peer?._pc?.getStats !== \"function\") {\n return null;\n }\n return await this._peer._pc.getStats().then((stats) => {\n const statsEntries = Array.from(stats.entries());\n const transport = statsEntries.filter((s) => s[1].type === \"transport\")[0][1];\n const candidatePair = statsEntries.filter((s) => s[0] === transport.selectedCandidatePairId);\n let selectedCandidatePair;\n let remoteCandidate;\n if (candidatePair.length > 0) {\n selectedCandidatePair = candidatePair[0][1];\n remoteCandidate = statsEntries.filter((s) => s[0] === selectedCandidatePair.remoteCandidateId)[0][1];\n }\n return {\n datachannel: statsEntries.filter((s) => s[1].type === \"data-channel\")[0][1],\n transport,\n selectedCandidatePair,\n remoteCandidate,\n raw: Object.fromEntries(stats.entries())\n };\n });\n }\n async getDetails() {\n const stats = await this._getStats();\n const rc = stats?.remoteCandidate;\n if (!rc) {\n return \"unavailable\";\n }\n if (rc.candidateType === \"relay\") {\n return `${rc.ip}:${rc.port}/${rc.protocol} relay for ${rc.relatedAddress}:${rc.relatedPort}`;\n }\n return `${rc.ip}:${rc.port}/${rc.protocol} ${rc.candidateType}`;\n }\n async open() {\n }\n async close() {\n log11(\"closing...\", void 0, {\n F: __dxlog_file12,\n L: 200,\n S: this,\n C: (f, a) => f(...a)\n });\n if (this._closed) {\n return;\n }\n this._disconnectStreams();\n this._peer.destroy();\n this._closed = true;\n this.closed.emit();\n log11(\"closed\", void 0, {\n F: __dxlog_file12,\n L: 208,\n S: this,\n C: (f, a) => f(...a)\n });\n }\n async onSignal(signal) {\n if (this._closed) {\n return;\n }\n invariant11(signal.payload.data, \"Signal message must contain signal data.\");\n this._peer.signal(signal.payload.data);\n }\n _disconnectStreams() {\n if (this._piped) {\n this._params.stream.unpipe?.(this._peer)?.unpipe?.(this._params.stream);\n }\n }\n};\n\n// packages/core/mesh/network-manager/src/transport/simplepeer-transport-service.ts\nimport { Duplex } from \"@dxos/node-std/stream\";\nimport { Stream } from \"@dxos/codec-protobuf\";\nimport { invariant as invariant12 } from \"@dxos/invariant\";\nimport { PublicKey as PublicKey11 } from \"@dxos/keys\";\nimport { log as log12 } from \"@dxos/log\";\nimport { ConnectionState as ConnectionState3 } from \"@dxos/protocols/proto/dxos/mesh/bridge\";\nimport { ComplexMap as ComplexMap8 } from \"@dxos/util\";\nvar __dxlog_file13 = \"/home/runner/work/dxos/dxos/packages/core/mesh/network-manager/src/transport/simplepeer-transport-service.ts\";\nvar SimplePeerTransportService = class {\n constructor(_webrtcConfig) {\n this._webrtcConfig = _webrtcConfig;\n this.transports = new ComplexMap8(PublicKey11.hash);\n }\n open(request) {\n const rpcStream = new Stream(({ ready, next, close }) => {\n const duplex = new Duplex({\n read: () => {\n const callbacks = [\n ...transportState.writeCallbacks\n ];\n transportState.writeCallbacks.length = 0;\n for (const cb of callbacks) {\n cb();\n }\n },\n write: function(chunk, _, callback) {\n next({\n data: {\n payload: chunk\n }\n });\n callback();\n }\n });\n const transport = new SimplePeerTransport({\n initiator: request.initiator,\n stream: duplex,\n webrtcConfig: this._webrtcConfig,\n sendSignal: async (signal) => {\n next({\n signal: {\n payload: signal\n }\n });\n }\n });\n void transport.open();\n next({\n connection: {\n state: ConnectionState3.CONNECTING\n }\n });\n transport.connected.on(() => {\n next({\n connection: {\n state: ConnectionState3.CONNECTED\n }\n });\n });\n transport.errors.handle((err) => {\n next({\n connection: {\n state: ConnectionState3.CLOSED,\n error: err.toString()\n }\n });\n close(err);\n });\n transport.closed.on(() => {\n next({\n connection: {\n state: ConnectionState3.CLOSED\n }\n });\n close();\n });\n const transportState = {\n transport,\n stream: duplex,\n writeCallbacks: [],\n state: \"OPEN\"\n };\n ready();\n this.transports.set(request.proxyId, transportState);\n });\n return rpcStream;\n }\n async sendSignal({ proxyId, signal }) {\n invariant12(this.transports.has(proxyId), void 0, {\n F: __dxlog_file13,\n L: 119,\n S: this,\n A: [\n \"this.transports.has(proxyId)\",\n \"\"\n ]\n });\n await this.transports.get(proxyId).transport.onSignal(signal);\n }\n async getDetails({ proxyId }) {\n invariant12(this.transports.has(proxyId), void 0, {\n F: __dxlog_file13,\n L: 124,\n S: this,\n A: [\n \"this.transports.has(proxyId)\",\n \"\"\n ]\n });\n return {\n details: await this.transports.get(proxyId).transport.getDetails()\n };\n }\n async getStats({ proxyId }) {\n invariant12(this.transports.has(proxyId), void 0, {\n F: __dxlog_file13,\n L: 129,\n S: this,\n A: [\n \"this.transports.has(proxyId)\",\n \"\"\n ]\n });\n return {\n stats: await this.transports.get(proxyId).transport.getStats()\n };\n }\n async sendData({ proxyId, payload }) {\n if (this.transports.get(proxyId)?.state !== \"OPEN\") {\n log12.debug(\"transport is closed\", void 0, {\n F: __dxlog_file13,\n L: 135,\n S: this,\n C: (f, a) => f(...a)\n });\n }\n invariant12(this.transports.has(proxyId), void 0, {\n F: __dxlog_file13,\n L: 137,\n S: this,\n A: [\n \"this.transports.has(proxyId)\",\n \"\"\n ]\n });\n const state = this.transports.get(proxyId);\n const bufferHasSpace = state.stream.push(payload);\n if (!bufferHasSpace) {\n await new Promise((resolve) => {\n state.writeCallbacks.push(resolve);\n });\n }\n }\n async close({ proxyId }) {\n await this.transports.get(proxyId)?.transport.close();\n await this.transports.get(proxyId)?.stream.end();\n if (this.transports.get(proxyId)) {\n this.transports.get(proxyId).state = \"CLOSED\";\n }\n log12(\"Closed.\", void 0, {\n F: __dxlog_file13,\n L: 153,\n S: this,\n C: (f, a) => f(...a)\n });\n }\n};\n\n// packages/core/mesh/network-manager/src/transport/simplepeer-transport-proxy.ts\nimport { Writable } from \"@dxos/node-std/stream\";\nimport { Event as Event9, scheduleTask as scheduleTask4 } from \"@dxos/async\";\nimport { Context as Context6 } from \"@dxos/context\";\nimport { ErrorStream as ErrorStream5 } from \"@dxos/debug\";\nimport { invariant as invariant13 } from \"@dxos/invariant\";\nimport { PublicKey as PublicKey12 } from \"@dxos/keys\";\nimport { log as log13 } from \"@dxos/log\";\nimport { ConnectionResetError as ConnectionResetError3, TimeoutError as TimeoutError3, ProtocolError as ProtocolError3, ConnectivityError as ConnectivityError3, UnknownProtocolError as UnknownProtocolError3 } from \"@dxos/protocols\";\nimport { ConnectionState as ConnectionState4 } from \"@dxos/protocols/proto/dxos/mesh/bridge\";\nimport { arrayToBuffer } from \"@dxos/util\";\nvar __dxlog_file14 = \"/home/runner/work/dxos/dxos/packages/core/mesh/network-manager/src/transport/simplepeer-transport-proxy.ts\";\nvar RPC_TIMEOUT = 1e4;\nvar RESP_MIN_THRESHOLD = 500;\nvar TIMEOUT_THRESHOLD = 10;\nvar SimplePeerTransportProxy = class {\n constructor(_options) {\n this._options = _options;\n this._proxyId = PublicKey12.random();\n this._ctx = new Context6(void 0, {\n F: __dxlog_file14,\n L: 37\n });\n this._timeoutCount = 0;\n this.closed = new Event9();\n this.connected = new Event9();\n this.errors = new ErrorStream5();\n this._closed = false;\n }\n get isOpen() {\n return !this._closed;\n }\n async open() {\n this._serviceStream = this._options.bridgeService.open({\n proxyId: this._proxyId,\n initiator: this._options.initiator\n }, {\n timeout: RPC_TIMEOUT\n });\n this._serviceStream.waitUntilReady().then(() => {\n this._serviceStream.subscribe(async (event) => {\n log13(\"SimplePeerTransportProxy: event\", event, {\n F: __dxlog_file14,\n L: 66,\n S: this,\n C: (f, a) => f(...a)\n });\n if (event.connection) {\n await this._handleConnection(event.connection);\n } else if (event.data) {\n this._handleData(event.data);\n } else if (event.signal) {\n await this._handleSignal(event.signal);\n }\n });\n const proxyStream = new Writable({\n write: (chunk, _, callback) => {\n const then = performance.now();\n this._options.bridgeService.sendData({\n proxyId: this._proxyId,\n payload: chunk\n }, {\n timeout: RPC_TIMEOUT\n }).then(() => {\n if (performance.now() - then > RESP_MIN_THRESHOLD) {\n log13(\"slow response, delaying callback\", void 0, {\n F: __dxlog_file14,\n L: 90,\n S: this,\n C: (f, a) => f(...a)\n });\n scheduleTask4(this._ctx, () => callback(), RESP_MIN_THRESHOLD);\n } else {\n callback();\n }\n this._timeoutCount = 0;\n }, (err) => {\n if (err instanceof TimeoutError3 || err.constructor.name === \"TimeoutError\") {\n if (this._timeoutCount++ > TIMEOUT_THRESHOLD) {\n throw new TimeoutError3(`too many timeouts (${this._timeoutCount} > ${TIMEOUT_THRESHOLD}`);\n } else {\n log13(\"timeout error, but still invoking callback\", void 0, {\n F: __dxlog_file14,\n L: 102,\n S: this,\n C: (f, a) => f(...a)\n });\n callback();\n }\n } else {\n log13.catch(err, void 0, {\n F: __dxlog_file14,\n L: 106,\n S: this,\n C: (f, a) => f(...a)\n });\n }\n });\n }\n });\n proxyStream.on(\"error\", (err) => {\n log13(\"proxystream error\", {\n err\n }, {\n F: __dxlog_file14,\n L: 114,\n S: this,\n C: (f, a) => f(...a)\n });\n });\n this._options.stream.pipe(proxyStream);\n }, (error) => log13.catch(error, void 0, {\n F: __dxlog_file14,\n L: 119,\n S: this,\n C: (f, a) => f(...a)\n }));\n }\n async close() {\n await this._ctx.dispose();\n if (this._closed) {\n return;\n }\n await this._serviceStream.close();\n try {\n await this._options.bridgeService.close({\n proxyId: this._proxyId\n }, {\n timeout: RPC_TIMEOUT\n });\n } catch (err) {\n log13.catch(err, void 0, {\n F: __dxlog_file14,\n L: 134,\n S: this,\n C: (f, a) => f(...a)\n });\n }\n this.closed.emit();\n this._closed = true;\n }\n async onSignal(signal) {\n this._options.bridgeService.sendSignal({\n proxyId: this._proxyId,\n signal\n }, {\n timeout: RPC_TIMEOUT\n }).catch((err) => this.errors.raise(decodeError(err)));\n }\n async _handleConnection(connectionEvent) {\n if (connectionEvent.error) {\n this.errors.raise(decodeError(connectionEvent.error));\n }\n switch (connectionEvent.state) {\n case ConnectionState4.CONNECTED: {\n this.connected.emit();\n break;\n }\n case ConnectionState4.CLOSED: {\n await this.close();\n break;\n }\n }\n }\n _handleData(dataEvent) {\n this._options.stream.write(arrayToBuffer(dataEvent.payload));\n }\n async _handleSignal(signalEvent) {\n await this._options.sendSignal(signalEvent.payload);\n }\n async getDetails() {\n return (await this._options.bridgeService.getDetails({\n proxyId: this._proxyId\n }, {\n timeout: RPC_TIMEOUT\n })).details;\n }\n async getStats() {\n return (await this._options.bridgeService.getStats({\n proxyId: this._proxyId\n }, {\n timeout: RPC_TIMEOUT\n })).stats;\n }\n /**\n * Called when underlying proxy service becomes unavailable.\n */\n // TODO(burdon): Option on close method.\n forceClose() {\n void this._serviceStream.close();\n this.closed.emit();\n this._closed = true;\n }\n};\nvar SimplePeerTransportProxyFactory = class {\n constructor() {\n this._connections = /* @__PURE__ */ new Set();\n }\n /**\n * Sets the current BridgeService to be used to open connections.\n * Calling this method will close any existing connections.\n */\n setBridgeService(bridgeService) {\n this._bridgeService = bridgeService;\n for (const connection of this._connections) {\n connection.forceClose();\n }\n return this;\n }\n createTransport(options) {\n invariant13(this._bridgeService, \"SimplePeerTransportProxyFactory is not ready to open connections\", {\n F: __dxlog_file14,\n L: 218,\n S: this,\n A: [\n \"this._bridgeService\",\n \"'SimplePeerTransportProxyFactory is not ready to open connections'\"\n ]\n });\n const transport = new SimplePeerTransportProxy({\n ...options,\n bridgeService: this._bridgeService\n });\n this._connections.add(transport);\n transport.closed.on(() => this._connections.delete(transport));\n return transport;\n }\n};\nvar decodeError = (err) => {\n const message = typeof err === \"string\" ? err : err.message;\n if (message.includes(\"CONNECTION_RESET\")) {\n return new ConnectionResetError3(message);\n } else if (message.includes(\"TIMEOUT\")) {\n return new TimeoutError3(message);\n } else if (message.includes(\"PROTOCOL_ERROR\")) {\n return new ProtocolError3(message);\n } else if (message.includes(\"CONNECTIVITY_ERROR\")) {\n return new ConnectivityError3(message);\n } else if (message.includes(\"UNKNOWN_PROTOCOL_ERROR\")) {\n return new UnknownProtocolError3(message);\n } else {\n return typeof err === \"string\" ? new Error(err) : err;\n }\n};\n\n// packages/core/mesh/network-manager/src/transport/libdatachannel-transport.ts\nimport { Duplex as Duplex2 } from \"stream\";\nimport { Event as Event10, Trigger as Trigger3, synchronized as synchronized5 } from \"@dxos/async\";\nimport { ErrorStream as ErrorStream6 } from \"@dxos/debug\";\nimport { invariant as invariant14 } from \"@dxos/invariant\";\nimport { log as log14 } from \"@dxos/log\";\nfunction _ts_decorate6(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_file15 = \"/home/runner/work/dxos/dxos/packages/core/mesh/network-manager/src/transport/libdatachannel-transport.ts\";\nvar DATACHANNEL_LABEL = \"dxos.mesh.transport\";\nvar MAX_BUFFERED_AMOUNT = 64 * 1024;\nvar MAX_MESSAGE_SIZE = 64 * 1024;\nvar createLibDataChannelTransportFactory = (webrtcConfig) => ({\n createTransport: (options) => new LibDataChannelTransport({\n ...options,\n webrtcConfig\n })\n});\nvar LibDataChannelTransport = class _LibDataChannelTransport {\n static {\n this._instanceCount = 0;\n }\n constructor(_options) {\n this._options = _options;\n this._closed = false;\n this._connected = false;\n this._writeCallback = null;\n this._readyForCandidates = new Trigger3();\n this.closed = new Event10();\n this.connected = new Event10();\n this.errors = new ErrorStream6();\n }\n get isOpen() {\n return !!this._peer && !this._closed;\n }\n async open() {\n if (this._closed) {\n this.errors.raise(new Error(\"connection already closed\"));\n }\n const { RTCPeerConnection } = (await importESM(\"node-datachannel/polyfill\")).default;\n if (this._options.webrtcConfig) {\n this._options.webrtcConfig.iceServers = this._options.webrtcConfig.iceServers ?? [];\n } else {\n this._options.webrtcConfig = {\n iceServers: []\n };\n }\n this._peer = new RTCPeerConnection(this._options.webrtcConfig);\n this._peer.onicecandidateerror = (event) => {\n log14.error(\"peer.onicecandidateerror\", {\n event\n }, {\n F: __dxlog_file15,\n L: 77,\n S: this,\n C: (f, a) => f(...a)\n });\n };\n this._peer.onconnectionstatechange = (event) => {\n log14.debug(\"peer.onconnectionstatechange\", {\n event,\n peerConnectionState: this._peer?.connectionState,\n transportConnectionState: this._connected\n }, {\n F: __dxlog_file15,\n L: 81,\n S: this,\n C: (f, a) => f(...a)\n });\n };\n this._peer.onicecandidate = async (event) => {\n log14.debug(\"peer.onicecandidate\", {\n event\n }, {\n F: __dxlog_file15,\n L: 91,\n S: this,\n C: (f, a) => f(...a)\n });\n if (event.candidate) {\n try {\n await this._options.sendSignal({\n payload: {\n data: {\n type: \"candidate\",\n candidate: {\n candidate: event.candidate.candidate,\n // These fields never seem to be not null, but connecting to Chrome doesn't work if they are.\n sdpMLineIndex: event.candidate.sdpMLineIndex ?? 0,\n sdpMid: event.candidate.sdpMid ?? 0\n }\n }\n }\n });\n } catch (err) {\n log14.info(\"signaling error\", {\n err\n }, {\n F: __dxlog_file15,\n L: 108,\n S: this,\n C: (f, a) => f(...a)\n });\n }\n }\n };\n if (this._options.initiator) {\n invariant14(this._peer, \"not open\", {\n F: __dxlog_file15,\n L: 114,\n S: this,\n A: [\n \"this._peer\",\n \"'not open'\"\n ]\n });\n this._peer.createOffer().then(async (offer) => {\n if (this._closed) {\n return;\n }\n if (this._peer?.connectionState !== \"connecting\") {\n log14.error(\"peer not connecting\", {\n peer: this._peer\n }, {\n F: __dxlog_file15,\n L: 125,\n S: this,\n C: (f, a) => f(...a)\n });\n this.errors.raise(new Error(\"invalid state: peer is initiator, but other peer not in state connecting\"));\n }\n log14.debug(\"creating offer\", {\n peer: this._peer,\n offer\n }, {\n F: __dxlog_file15,\n L: 129,\n S: this,\n C: (f, a) => f(...a)\n });\n await this._peer.setLocalDescription(offer);\n await this._options.sendSignal({\n payload: {\n data: {\n type: offer.type,\n sdp: offer.sdp\n }\n }\n });\n }).catch((err) => {\n this.errors.raise(err);\n });\n this._handleChannel(this._peer.createDataChannel(DATACHANNEL_LABEL));\n log14.debug(\"created data channel\", void 0, {\n F: __dxlog_file15,\n L: 139,\n S: this,\n C: (f, a) => f(...a)\n });\n this._peer.ondatachannel = () => {\n this.errors.raise(new Error(\"unexpected ondatachannel event for initiator\"));\n };\n } else {\n this._peer.ondatachannel = (event) => {\n log14.debug(\"peer.ondatachannel (non-initiator)\", {\n event\n }, {\n F: __dxlog_file15,\n L: 145,\n S: this,\n C: (f, a) => f(...a)\n });\n if (event.channel.label !== DATACHANNEL_LABEL) {\n this.errors.raise(new Error(`unexpected channel label ${event.channel.label}`));\n }\n this._handleChannel(event.channel);\n };\n }\n _LibDataChannelTransport._instanceCount++;\n }\n async close() {\n await this._close();\n if (--_LibDataChannelTransport._instanceCount === 0) {\n (await importESM(\"node-datachannel\")).cleanup();\n }\n }\n async _close() {\n if (this._closed) {\n return;\n }\n await this._disconnectStreams();\n try {\n this._peer?.close();\n } catch (err) {\n this.errors.raise(err);\n }\n this._peer = void 0;\n this._closed = true;\n this.closed.emit();\n }\n /**\n * Handle data channel events.\n */\n _handleChannel(dataChannel) {\n this._channel = dataChannel;\n this._channel.onopen = () => {\n log14.debug(\"channel.onopen\", void 0, {\n F: __dxlog_file15,\n L: 190,\n S: this,\n C: (f, a) => f(...a)\n });\n const duplex = new Duplex2({\n read: () => {\n },\n write: async (chunk, encoding, callback) => {\n if (chunk.length > MAX_MESSAGE_SIZE) {\n this.errors.raise(new Error(`message too large: ${chunk.length} > ${MAX_MESSAGE_SIZE}`));\n }\n try {\n dataChannel.send(chunk);\n } catch (err) {\n this.errors.raise(err);\n await this._close();\n }\n if (this._channel.bufferedAmount > MAX_BUFFERED_AMOUNT) {\n if (this._writeCallback !== null) {\n log14.error(\"consumer trying to write before we are ready for more data\", void 0, {\n F: __dxlog_file15,\n L: 207,\n S: this,\n C: (f, a) => f(...a)\n });\n }\n this._writeCallback = callback;\n } else {\n callback();\n }\n }\n });\n duplex.pipe(this._options.stream).pipe(duplex);\n this._stream = duplex;\n this._connected = true;\n this.connected.emit();\n };\n this._channel.onclose = async (err) => {\n log14.info(\"channel.onclose\", {\n err\n }, {\n F: __dxlog_file15,\n L: 223,\n S: this,\n C: (f, a) => f(...a)\n });\n await this._close();\n };\n this._channel.onerror = async (err) => {\n this.errors.raise(new Error(\"channel error: \" + err.toString()));\n await this._close();\n };\n this._channel.onbufferedamountlow = () => {\n const cb = this._writeCallback;\n this._writeCallback = null;\n cb?.();\n };\n this._channel.onmessage = (event) => {\n let data = event.data;\n if (data instanceof ArrayBuffer) {\n data = Buffer2.from(data);\n }\n this._stream.push(data);\n };\n }\n async onSignal(signal) {\n invariant14(this._peer, \"not open\", {\n F: __dxlog_file15,\n L: 249,\n S: this,\n A: [\n \"this._peer\",\n \"'not open'\"\n ]\n });\n try {\n const data = signal.payload.data;\n switch (data.type) {\n case \"offer\": {\n if (this._peer.connectionState !== \"new\") {\n log14.error(\"received offer but peer not in state new\", {\n peer: this._peer\n }, {\n F: __dxlog_file15,\n L: 256,\n S: this,\n C: (f, a) => f(...a)\n });\n this.errors.raise(new Error(\"invalid signalling state: received offer when peer is not in state new\"));\n break;\n }\n try {\n await this._peer.setRemoteDescription({\n type: data.type,\n sdp: data.sdp\n });\n const answer = await this._peer.createAnswer();\n await this._peer.setLocalDescription(answer);\n await this._options.sendSignal({\n payload: {\n data: {\n type: answer.type,\n sdp: answer.sdp\n }\n }\n });\n this._readyForCandidates.wake();\n } catch (err) {\n log14.error(\"cannot handle offer from signalling server\", {\n err\n }, {\n F: __dxlog_file15,\n L: 268,\n S: this,\n C: (f, a) => f(...a)\n });\n this.errors.raise(new Error(\"error handling offer\"));\n }\n break;\n }\n case \"answer\":\n try {\n await this._peer.setRemoteDescription({\n type: data.type,\n sdp: data.sdp\n });\n this._readyForCandidates.wake();\n } catch (err) {\n log14.error(\"cannot handle answer from signalling server\", {\n err\n }, {\n F: __dxlog_file15,\n L: 279,\n S: this,\n C: (f, a) => f(...a)\n });\n this.errors.raise(new Error(\"error handling answer\"));\n }\n break;\n case \"candidate\":\n await this._readyForCandidates.wait();\n await this._peer.addIceCandidate({\n candidate: data.candidate.candidate\n });\n break;\n default:\n log14.error(\"unhandled signal type\", {\n type: data.type,\n signal\n }, {\n F: __dxlog_file15,\n L: 290,\n S: this,\n C: (f, a) => f(...a)\n });\n this.errors.raise(new Error(`unhandled signal type ${data.type}`));\n }\n } catch (err) {\n log14.catch(err, void 0, {\n F: __dxlog_file15,\n L: 294,\n S: this,\n C: (f, a) => f(...a)\n });\n }\n }\n async getDetails() {\n const stats = await this._getStats();\n const rc = stats?.remoteCandidate;\n if (!rc) {\n return \"unavailable\";\n }\n if (rc.candidateType === \"relay\") {\n return `${rc.ip}:${rc.port} relay for ${rc.relatedAddress}:${rc.relatedPort}`;\n }\n return `${rc.ip}:${rc.port} ${rc.candidateType}`;\n }\n async getStats() {\n const stats = await this._getStats();\n if (!stats) {\n return {\n bytesSent: 0,\n bytesReceived: 0,\n packetsSent: 0,\n packetsReceived: 0,\n rawStats: {}\n };\n }\n return {\n bytesSent: stats.transport.bytesSent,\n bytesReceived: stats.transport.bytesReceived,\n packetsSent: 0,\n packetsReceived: 0,\n rawStats: stats.raw\n };\n }\n async _getStats() {\n invariant14(this._peer, \"not open\", {\n F: __dxlog_file15,\n L: 334,\n S: this,\n A: [\n \"this._peer\",\n \"'not open'\"\n ]\n });\n const stats = await this._peer.getStats();\n const statsEntries = Array.from(stats.entries());\n const transport = statsEntries.filter((s) => s[1].type === \"transport\")[0][1];\n const candidatePair = statsEntries.filter((s) => s[0] === transport.selectedCandidatePairId);\n let selectedCandidatePair;\n let remoteCandidate;\n if (candidatePair.length > 0) {\n selectedCandidatePair = candidatePair[0][1];\n remoteCandidate = statsEntries.filter((s) => s[0] === selectedCandidatePair.remoteCandidateId)[0][1];\n }\n return {\n transport,\n selectedCandidatePair,\n remoteCandidate,\n raw: Object.fromEntries(stats)\n };\n }\n async _disconnectStreams() {\n this._options.stream.unpipe?.(this._stream)?.unpipe?.(this._options.stream);\n }\n};\n_ts_decorate6([\n synchronized5\n], LibDataChannelTransport.prototype, \"_close\", null);\nvar importESM = Function(\"path\", \"return import(path)\");\n\n// packages/core/mesh/network-manager/src/transport/tcp-transport.browser.ts\nimport { Event as Event11 } from \"@dxos/async\";\nimport { ErrorStream as ErrorStream7 } from \"@dxos/debug\";\nvar TcpTransportFactory = {\n createTransport: () => new TcpTransport()\n};\nvar TcpTransport = class {\n constructor() {\n this.closed = new Event11();\n this.connected = new Event11();\n this.errors = new ErrorStream7();\n }\n get isOpen() {\n return true;\n }\n async open() {\n }\n async close() {\n }\n async onSignal() {\n throw new Error(\"Method not implemented.\");\n }\n async getStats() {\n throw new Error(\"Method not implemented.\");\n }\n async getDetails() {\n throw new Error(\"Method not implemented.\");\n }\n};\n\n// packages/core/mesh/network-manager/src/wire-protocol.ts\nimport { Teleport } from \"@dxos/teleport\";\nvar createTeleportProtocolFactory = (onConnection, defaultParams) => {\n return (params) => {\n const teleport = new Teleport({\n ...defaultParams,\n ...params\n });\n return {\n stream: teleport.stream,\n open: async (sessionId) => {\n await teleport.open(sessionId);\n await onConnection(teleport);\n },\n close: async () => {\n await teleport.close();\n },\n abort: async () => {\n await teleport.abort();\n }\n };\n };\n};\n\nexport {\n process,\n ConnectionState,\n Connection,\n SwarmMessenger,\n Swarm,\n SwarmMapper,\n MAX_CONCURRENT_INITIATING_CONNECTIONS,\n ConnectionLimiter,\n EventType,\n ConnectionLog,\n SwarmNetworkManager,\n FullyConnectedTopology,\n MMSTTopology,\n StarTopology,\n MemoryTransportFactory,\n MemoryTransport,\n TransportKind,\n createSimplePeerTransportFactory,\n SimplePeerTransport,\n SimplePeerTransportService,\n SimplePeerTransportProxy,\n SimplePeerTransportProxyFactory,\n createLibDataChannelTransportFactory,\n LibDataChannelTransport,\n TcpTransportFactory,\n TcpTransport,\n createTeleportProtocolFactory\n};\n//# sourceMappingURL=chunk-3UBXH53L.mjs.map\n"],"names":["dist","a","b","result","s","m","h","d","w","y","ms","val","options","type","parse","fmtLong","fmtShort","str","match","n","msAbs","plural","name","isPlural","setup","env","createDebug","coerce","disable","enable","enabled","require$$0","destroy","key","selectColor","namespace","hash","i","prevTime","enableOverride","namespacesCache","enabledCache","debug","args","self","curr","index","format","formatter","extend","v","delimiter","newDebug","namespaces","split","len","toNamespace","regexp","common","exports","formatArgs","save","load","useColors","localstorage","warned","module","c","lastC","r","formatters","error","getBrowserRtc","wrtc","MAX_BYTES","MAX_UINT32","oldBrowser","Buffer","crypto","global","browserModule","randomBytes","size","cb","bytes","generated","promise","queueMicrotask_1","err","assign","obj","props","createError","code","ErrClass","errCode","getBrowserRTC","require$$1","randombytes","require$$2","stream","require$$3","queueMicrotask","require$$4","require$$5","require$$6","MAX_BUFFERED_AMOUNT","ICECOMPLETE_TIMEOUT","CHANNEL_CLOSING_TIMEOUT","filterTrickle","sdp","warn","message","Peer$1","Peer","opts","event","data","candidate","iceCandidateObj","chunk","kind","init","track","submap","sender","oldTrack","newTrack","isClosing","encoding","destroySoon","offer","sendOffer","signal","onSuccess","onError","transceiver","answer","sendAnswer","iceConnectionState","iceGatheringState","flattenValues","report","value","res","reports","findCandidatePair","items","remoteCandidates","localCandidates","candidatePairs","foundSelectedCandidatePair","item","setSelectedCandidatePair","selectedCandidatePair","local","remote","eventStream","remoteStream","simplePeer","isProduction","prefix","invariant","condition","provided","ConnectionState","emitterComponent","Emitter","mixin","fn","on","callbacks","Stream","dest","source","ondata","ondrain","onend","onclose","didOnEnd","onerror","er","cleanup","encode_1","encode","MSB","REST","MSBALL","INT","num","out","offset","oldOffset","decode","read","buf","shift","counter","l","N1","N2","N3","N4","N5","N6","N7","N8","N9","length","varint","__dxlog_file","HEARTBEAT_RTT_WARN_THRESH","DEBUG_PRINT_HEARTBEAT","ControlExtension","localPeerId","remotePeerId","Context","Callback","extensionContext","createProtoRpcPeer","schema","request","scheduleTaskInterval","reqTS","resp","asyncTimeout","now","log","f","RpcClosedError","AsyncTimeoutError","__dxlog_file2","FRAME_LENGTH_SIZE","Framer","Event","Duplex","callback","resolve","frame","encodeFrame","_a","responseQueue","decodeFrame","log2","buffer","frameLength","bytesConsumed","payload","__dxlog_file3","MAX_CHUNK_SIZE","Balancer","_sysChannelId","Event2","channel","trigger","channelId","log3","msg","dataLength","decodeChunk","channelId2","channelBuffer","msg2","sendBuffer","chunks","idx","encodeChunk","_b","invariant2","channelTagLength","varint.encodingLength","dataLengthLength","varint.encode","withLength","varint.decode","_ts_decorate","decorators","target","desc","__dxlog_file4","Command","schema2","DEFAULT_SEND_COMMAND_TIMEOUT","DESTROY_COMMAND_SEND_TIMEOUT","STATS_INTERVAL","MAX_SAFE_FRAME_SIZE","SYSTEM_CHANNEL_ID","GRACEFUL_CLOSE_TIMEOUT","Muxer","Context2","Event3","sessionId","tag","invariant3","Duplex2","inboundBuffer","port","timeout","log4","err2","asyncTimeout2","TimeoutError","cmd","failUndefined","Trigger","params","scheduleTaskInterval2","lastStats","bytesSent","bytesReceived","interval","calculateThroughput","current","last","stats","logInfo","_ts_decorate2","__dxlog_file5","CONTROL_HEARTBEAT_INTERVAL","CONTROL_HEARTBEAT_TIMEOUT","Teleport","initiator","rest","Context3","log5","invariant4","PublicKey","TimeoutError2","extension","scheduleTask","RpcClosedError2","extensionName","failUndefined2","context","channelName","runInContextAsync","logInfo2","synchronized","__require","x","STARTING_SIGNALLING_DELAY","TRANSPORT_CONNECTION_TIMEOUT","TRANSPORT_STATS_INTERVAL","MAX_SIGNALLING_DELAY","ConnectionState5","Connection","topic","ownId","remoteId","_signalMessaging","_protocol","_transportFactory","_callbacks","ErrorStream","DeferredTask","trace","ProtocolError","ConnectionResetError","ConnectivityError","UnknownProtocolError","lastState","abortProtocol","cancelWithContext","sleep","signals","CancelledError","state","SwarmMessage","SwarmMessenger","sendMessage","onSignal","onOffer","ComplexMap","author","recipient","_c","_d","networkMessage","PublicKey2","reject","offerRecord","offerMessage","signalMessage","ConnectionDisplacedError","SystemError","CONNECTION_COUNTS_STABLE_AFTER","id","_protocolProvider","_connectionLimiter","connection","CancelledError2","PublicKey3","increaseInterval","scheduleTask2","reason","synchronized2","_ts_decorate3","INITIATION_DELAY","getClassName","Swarm","_topic","_ownPeerId","_topology","_messenger","_label","_initiationDelay","Context4","ComplexMap2","PublicKey4","ErrorStream2","trace2","peer","isNotNullOrUndefined","topology","swarmEvent","peerId","scheduleTask3","ctx","sleep2","synchronized3","SwarmMapper","_swarm","EventSubscriptions","ComplexMap3","PublicKey5","Event4","__dxlog_file6","MAX_CONCURRENT_INITIATING_CONNECTIONS","ConnectionLimiter","maxConcurrentInitConnections","Context5","ComplexMap4","PublicKey6","DeferredTask2","invariant5","log6","CancelledError3","CONNECTION_GC_THRESHOLD","EventType","EventType2","ConnectionLog","ComplexMap5","PublicKey7","Event5","swarmId","raise","swarm","info","connectionInfo","details","gcSwarm","_ts_decorate4","__dxlog_file7","SwarmNetworkManager","transportFactory","signalManager","log15","ComplexMap6","PublicKey8","ConnectionState2","Event6","Messenger","log7","trace3","protocol","label","invariant6","synchronized4","_ts_decorate5","__dxlog_file11","MEMORY_TRANSPORT_DELAY","createStreamDelay","delay","Transform","_","MemoryTransport","_options","PublicKey9","Trigger2","Event7","ErrorStream3","invariant10","log10","toError","transportId","ComplexMap7","logInfo3","TransportKind","TransportKind2","__dxlog_file12","SimplePeerTransport","_params","Event8","ErrorStream4","PublicKey10","log11","trace4","SimplePeerConstructor","raise2","ConnectionResetError2","UnknownProtocolError2","ProtocolError2","ConnectivityError2","statsEntries","transport","candidatePair","remoteCandidate","rc","invariant11","__dxlog_file13","SimplePeerTransportService","_webrtcConfig","ComplexMap8","PublicKey11","ready","next","close","duplex","transportState","ConnectionState3","proxyId","invariant12","log12","_ts_decorate6","__dxlog_file15","DATACHANNEL_LABEL","MAX_MESSAGE_SIZE","LibDataChannelTransport","Trigger3","Event10","ErrorStream6","RTCPeerConnection","importESM","log14","invariant14","dataChannel","Buffer2","synchronized5"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,11,12,13,14,15,16]}