@questionbase/deskfree 0.3.0-alpha.9 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../../node_modules/ws/lib/constants.js","../../node_modules/ws/lib/buffer-util.js","../../node_modules/ws/lib/limiter.js","../../node_modules/ws/lib/permessage-deflate.js","../../node_modules/ws/lib/validation.js","../../node_modules/ws/lib/receiver.js","../../node_modules/ws/lib/sender.js","../../node_modules/ws/lib/event-target.js","../../node_modules/ws/lib/extension.js","../../node_modules/ws/lib/websocket.js","../../node_modules/ws/lib/stream.js","../../node_modules/ws/lib/subprotocol.js","../../node_modules/ws/lib/websocket-server.js","../src/client.ts","../src/error-reporter.ts","../src/runtime.ts","../src/paths.ts","../src/streaming.ts","../src/deliver.ts","../src/version.ts","../src/workspace.ts","../src/gateway.ts","../../node_modules/ws/wrapper.mjs","../node_modules/@sinclair/typebox/build/esm/type/guard/value.mjs","../node_modules/@sinclair/typebox/build/esm/type/clone/value.mjs","../node_modules/@sinclair/typebox/build/esm/type/clone/type.mjs","../node_modules/@sinclair/typebox/build/esm/value/guard/guard.mjs","../node_modules/@sinclair/typebox/build/esm/system/policy.mjs","../node_modules/@sinclair/typebox/build/esm/type/create/immutable.mjs","../node_modules/@sinclair/typebox/build/esm/type/create/type.mjs","../node_modules/@sinclair/typebox/build/esm/type/error/error.mjs","../node_modules/@sinclair/typebox/build/esm/type/symbols/symbols.mjs","../node_modules/@sinclair/typebox/build/esm/type/guard/kind.mjs","../node_modules/@sinclair/typebox/build/esm/type/guard/type.mjs","../node_modules/@sinclair/typebox/build/esm/type/patterns/patterns.mjs","../node_modules/@sinclair/typebox/build/esm/type/sets/set.mjs","../node_modules/@sinclair/typebox/build/esm/type/any/any.mjs","../node_modules/@sinclair/typebox/build/esm/type/array/array.mjs","../node_modules/@sinclair/typebox/build/esm/type/argument/argument.mjs","../node_modules/@sinclair/typebox/build/esm/type/async-iterator/async-iterator.mjs","../node_modules/@sinclair/typebox/build/esm/type/computed/computed.mjs","../node_modules/@sinclair/typebox/build/esm/type/discard/discard.mjs","../node_modules/@sinclair/typebox/build/esm/type/never/never.mjs","../node_modules/@sinclair/typebox/build/esm/type/mapped/mapped-result.mjs","../node_modules/@sinclair/typebox/build/esm/type/constructor/constructor.mjs","../node_modules/@sinclair/typebox/build/esm/type/function/function.mjs","../node_modules/@sinclair/typebox/build/esm/type/union/union-create.mjs","../node_modules/@sinclair/typebox/build/esm/type/union/union-evaluated.mjs","../node_modules/@sinclair/typebox/build/esm/type/union/union.mjs","../node_modules/@sinclair/typebox/build/esm/type/template-literal/parse.mjs","../node_modules/@sinclair/typebox/build/esm/type/template-literal/finite.mjs","../node_modules/@sinclair/typebox/build/esm/type/template-literal/generate.mjs","../node_modules/@sinclair/typebox/build/esm/type/literal/literal.mjs","../node_modules/@sinclair/typebox/build/esm/type/boolean/boolean.mjs","../node_modules/@sinclair/typebox/build/esm/type/bigint/bigint.mjs","../node_modules/@sinclair/typebox/build/esm/type/number/number.mjs","../node_modules/@sinclair/typebox/build/esm/type/string/string.mjs","../node_modules/@sinclair/typebox/build/esm/type/template-literal/syntax.mjs","../node_modules/@sinclair/typebox/build/esm/type/template-literal/pattern.mjs","../node_modules/@sinclair/typebox/build/esm/type/template-literal/union.mjs","../node_modules/@sinclair/typebox/build/esm/type/template-literal/template-literal.mjs","../node_modules/@sinclair/typebox/build/esm/type/indexed/indexed-property-keys.mjs","../node_modules/@sinclair/typebox/build/esm/type/indexed/indexed-from-mapped-result.mjs","../node_modules/@sinclair/typebox/build/esm/type/indexed/indexed.mjs","../node_modules/@sinclair/typebox/build/esm/type/indexed/indexed-from-mapped-key.mjs","../node_modules/@sinclair/typebox/build/esm/type/iterator/iterator.mjs","../node_modules/@sinclair/typebox/build/esm/type/object/object.mjs","../node_modules/@sinclair/typebox/build/esm/type/promise/promise.mjs","../node_modules/@sinclair/typebox/build/esm/type/readonly/readonly.mjs","../node_modules/@sinclair/typebox/build/esm/type/readonly/readonly-from-mapped-result.mjs","../node_modules/@sinclair/typebox/build/esm/type/tuple/tuple.mjs","../node_modules/@sinclair/typebox/build/esm/type/mapped/mapped.mjs","../node_modules/@sinclair/typebox/build/esm/type/optional/optional.mjs","../node_modules/@sinclair/typebox/build/esm/type/optional/optional-from-mapped-result.mjs","../node_modules/@sinclair/typebox/build/esm/type/intersect/intersect-create.mjs","../node_modules/@sinclair/typebox/build/esm/type/intersect/intersect-evaluated.mjs","../node_modules/@sinclair/typebox/build/esm/type/intersect/intersect.mjs","../node_modules/@sinclair/typebox/build/esm/type/ref/ref.mjs","../node_modules/@sinclair/typebox/build/esm/type/awaited/awaited.mjs","../node_modules/@sinclair/typebox/build/esm/type/keyof/keyof-property-keys.mjs","../node_modules/@sinclair/typebox/build/esm/type/keyof/keyof.mjs","../node_modules/@sinclair/typebox/build/esm/type/keyof/keyof-from-mapped-result.mjs","../node_modules/@sinclair/typebox/build/esm/type/composite/composite.mjs","../node_modules/@sinclair/typebox/build/esm/type/date/date.mjs","../node_modules/@sinclair/typebox/build/esm/type/null/null.mjs","../node_modules/@sinclair/typebox/build/esm/type/symbol/symbol.mjs","../node_modules/@sinclair/typebox/build/esm/type/undefined/undefined.mjs","../node_modules/@sinclair/typebox/build/esm/type/uint8array/uint8array.mjs","../node_modules/@sinclair/typebox/build/esm/type/unknown/unknown.mjs","../node_modules/@sinclair/typebox/build/esm/type/const/const.mjs","../node_modules/@sinclair/typebox/build/esm/type/constructor-parameters/constructor-parameters.mjs","../node_modules/@sinclair/typebox/build/esm/type/enum/enum.mjs","../node_modules/@sinclair/typebox/build/esm/type/extends/extends-check.mjs","../node_modules/@sinclair/typebox/build/esm/type/extends/extends-from-mapped-result.mjs","../node_modules/@sinclair/typebox/build/esm/type/extends/extends.mjs","../node_modules/@sinclair/typebox/build/esm/type/extends/extends-from-mapped-key.mjs","../node_modules/@sinclair/typebox/build/esm/type/exclude/exclude-from-template-literal.mjs","../node_modules/@sinclair/typebox/build/esm/type/exclude/exclude.mjs","../node_modules/@sinclair/typebox/build/esm/type/exclude/exclude-from-mapped-result.mjs","../node_modules/@sinclair/typebox/build/esm/type/extract/extract-from-template-literal.mjs","../node_modules/@sinclair/typebox/build/esm/type/extract/extract.mjs","../node_modules/@sinclair/typebox/build/esm/type/extract/extract-from-mapped-result.mjs","../node_modules/@sinclair/typebox/build/esm/type/instance-type/instance-type.mjs","../node_modules/@sinclair/typebox/build/esm/type/readonly-optional/readonly-optional.mjs","../node_modules/@sinclair/typebox/build/esm/type/record/record.mjs","../node_modules/@sinclair/typebox/build/esm/type/instantiate/instantiate.mjs","../node_modules/@sinclair/typebox/build/esm/type/integer/integer.mjs","../node_modules/@sinclair/typebox/build/esm/type/intrinsic/intrinsic-from-mapped-key.mjs","../node_modules/@sinclair/typebox/build/esm/type/intrinsic/intrinsic.mjs","../node_modules/@sinclair/typebox/build/esm/type/intrinsic/capitalize.mjs","../node_modules/@sinclair/typebox/build/esm/type/intrinsic/lowercase.mjs","../node_modules/@sinclair/typebox/build/esm/type/intrinsic/uncapitalize.mjs","../node_modules/@sinclair/typebox/build/esm/type/intrinsic/uppercase.mjs","../node_modules/@sinclair/typebox/build/esm/type/omit/omit-from-mapped-result.mjs","../node_modules/@sinclair/typebox/build/esm/type/omit/omit.mjs","../node_modules/@sinclair/typebox/build/esm/type/omit/omit-from-mapped-key.mjs","../node_modules/@sinclair/typebox/build/esm/type/pick/pick-from-mapped-result.mjs","../node_modules/@sinclair/typebox/build/esm/type/pick/pick.mjs","../node_modules/@sinclair/typebox/build/esm/type/pick/pick-from-mapped-key.mjs","../node_modules/@sinclair/typebox/build/esm/type/partial/partial.mjs","../node_modules/@sinclair/typebox/build/esm/type/partial/partial-from-mapped-result.mjs","../node_modules/@sinclair/typebox/build/esm/type/required/required.mjs","../node_modules/@sinclair/typebox/build/esm/type/required/required-from-mapped-result.mjs","../node_modules/@sinclair/typebox/build/esm/type/module/compute.mjs","../node_modules/@sinclair/typebox/build/esm/type/module/module.mjs","../node_modules/@sinclair/typebox/build/esm/type/not/not.mjs","../node_modules/@sinclair/typebox/build/esm/type/parameters/parameters.mjs","../node_modules/@sinclair/typebox/build/esm/type/recursive/recursive.mjs","../node_modules/@sinclair/typebox/build/esm/type/regexp/regexp.mjs","../node_modules/@sinclair/typebox/build/esm/type/rest/rest.mjs","../node_modules/@sinclair/typebox/build/esm/type/return-type/return-type.mjs","../node_modules/@sinclair/typebox/build/esm/type/transform/transform.mjs","../node_modules/@sinclair/typebox/build/esm/type/unsafe/unsafe.mjs","../node_modules/@sinclair/typebox/build/esm/type/void/void.mjs","../node_modules/@sinclair/typebox/build/esm/type/type/type.mjs","../node_modules/@sinclair/typebox/build/esm/type/type/index.mjs","../src/llm-definitions.ts","../src/channel.ts","../src/context.ts","../src/tools.ts","../src/offline-queue.ts","../src/index.ts"],"sourcesContent":["'use strict';\n\nconst BINARY_TYPES = ['nodebuffer', 'arraybuffer', 'fragments'];\nconst hasBlob = typeof Blob !== 'undefined';\n\nif (hasBlob) BINARY_TYPES.push('blob');\n\nmodule.exports = {\n BINARY_TYPES,\n CLOSE_TIMEOUT: 30000,\n EMPTY_BUFFER: Buffer.alloc(0),\n GUID: '258EAFA5-E914-47DA-95CA-C5AB0DC85B11',\n hasBlob,\n kForOnEventAttribute: Symbol('kIsForOnEventAttribute'),\n kListener: Symbol('kListener'),\n kStatusCode: Symbol('status-code'),\n kWebSocket: Symbol('websocket'),\n NOOP: () => {}\n};\n","'use strict';\n\nconst { EMPTY_BUFFER } = require('./constants');\n\nconst FastBuffer = Buffer[Symbol.species];\n\n/**\n * Merges an array of buffers into a new buffer.\n *\n * @param {Buffer[]} list The array of buffers to concat\n * @param {Number} totalLength The total length of buffers in the list\n * @return {Buffer} The resulting buffer\n * @public\n */\nfunction concat(list, totalLength) {\n if (list.length === 0) return EMPTY_BUFFER;\n if (list.length === 1) return list[0];\n\n const target = Buffer.allocUnsafe(totalLength);\n let offset = 0;\n\n for (let i = 0; i < list.length; i++) {\n const buf = list[i];\n target.set(buf, offset);\n offset += buf.length;\n }\n\n if (offset < totalLength) {\n return new FastBuffer(target.buffer, target.byteOffset, offset);\n }\n\n return target;\n}\n\n/**\n * Masks a buffer using the given mask.\n *\n * @param {Buffer} source The buffer to mask\n * @param {Buffer} mask The mask to use\n * @param {Buffer} output The buffer where to store the result\n * @param {Number} offset The offset at which to start writing\n * @param {Number} length The number of bytes to mask.\n * @public\n */\nfunction _mask(source, mask, output, offset, length) {\n for (let i = 0; i < length; i++) {\n output[offset + i] = source[i] ^ mask[i & 3];\n }\n}\n\n/**\n * Unmasks a buffer using the given mask.\n *\n * @param {Buffer} buffer The buffer to unmask\n * @param {Buffer} mask The mask to use\n * @public\n */\nfunction _unmask(buffer, mask) {\n for (let i = 0; i < buffer.length; i++) {\n buffer[i] ^= mask[i & 3];\n }\n}\n\n/**\n * Converts a buffer to an `ArrayBuffer`.\n *\n * @param {Buffer} buf The buffer to convert\n * @return {ArrayBuffer} Converted buffer\n * @public\n */\nfunction toArrayBuffer(buf) {\n if (buf.length === buf.buffer.byteLength) {\n return buf.buffer;\n }\n\n return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.length);\n}\n\n/**\n * Converts `data` to a `Buffer`.\n *\n * @param {*} data The data to convert\n * @return {Buffer} The buffer\n * @throws {TypeError}\n * @public\n */\nfunction toBuffer(data) {\n toBuffer.readOnly = true;\n\n if (Buffer.isBuffer(data)) return data;\n\n let buf;\n\n if (data instanceof ArrayBuffer) {\n buf = new FastBuffer(data);\n } else if (ArrayBuffer.isView(data)) {\n buf = new FastBuffer(data.buffer, data.byteOffset, data.byteLength);\n } else {\n buf = Buffer.from(data);\n toBuffer.readOnly = false;\n }\n\n return buf;\n}\n\nmodule.exports = {\n concat,\n mask: _mask,\n toArrayBuffer,\n toBuffer,\n unmask: _unmask\n};\n\n/* istanbul ignore else */\nif (!process.env.WS_NO_BUFFER_UTIL) {\n try {\n const bufferUtil = require('bufferutil');\n\n module.exports.mask = function (source, mask, output, offset, length) {\n if (length < 48) _mask(source, mask, output, offset, length);\n else bufferUtil.mask(source, mask, output, offset, length);\n };\n\n module.exports.unmask = function (buffer, mask) {\n if (buffer.length < 32) _unmask(buffer, mask);\n else bufferUtil.unmask(buffer, mask);\n };\n } catch (e) {\n // Continue regardless of the error.\n }\n}\n","'use strict';\n\nconst kDone = Symbol('kDone');\nconst kRun = Symbol('kRun');\n\n/**\n * A very simple job queue with adjustable concurrency. Adapted from\n * https://github.com/STRML/async-limiter\n */\nclass Limiter {\n /**\n * Creates a new `Limiter`.\n *\n * @param {Number} [concurrency=Infinity] The maximum number of jobs allowed\n * to run concurrently\n */\n constructor(concurrency) {\n this[kDone] = () => {\n this.pending--;\n this[kRun]();\n };\n this.concurrency = concurrency || Infinity;\n this.jobs = [];\n this.pending = 0;\n }\n\n /**\n * Adds a job to the queue.\n *\n * @param {Function} job The job to run\n * @public\n */\n add(job) {\n this.jobs.push(job);\n this[kRun]();\n }\n\n /**\n * Removes a job from the queue and runs it if possible.\n *\n * @private\n */\n [kRun]() {\n if (this.pending === this.concurrency) return;\n\n if (this.jobs.length) {\n const job = this.jobs.shift();\n\n this.pending++;\n job(this[kDone]);\n }\n }\n}\n\nmodule.exports = Limiter;\n","'use strict';\n\nconst zlib = require('zlib');\n\nconst bufferUtil = require('./buffer-util');\nconst Limiter = require('./limiter');\nconst { kStatusCode } = require('./constants');\n\nconst FastBuffer = Buffer[Symbol.species];\nconst TRAILER = Buffer.from([0x00, 0x00, 0xff, 0xff]);\nconst kPerMessageDeflate = Symbol('permessage-deflate');\nconst kTotalLength = Symbol('total-length');\nconst kCallback = Symbol('callback');\nconst kBuffers = Symbol('buffers');\nconst kError = Symbol('error');\n\n//\n// We limit zlib concurrency, which prevents severe memory fragmentation\n// as documented in https://github.com/nodejs/node/issues/8871#issuecomment-250915913\n// and https://github.com/websockets/ws/issues/1202\n//\n// Intentionally global; it's the global thread pool that's an issue.\n//\nlet zlibLimiter;\n\n/**\n * permessage-deflate implementation.\n */\nclass PerMessageDeflate {\n /**\n * Creates a PerMessageDeflate instance.\n *\n * @param {Object} [options] Configuration options\n * @param {(Boolean|Number)} [options.clientMaxWindowBits] Advertise support\n * for, or request, a custom client window size\n * @param {Boolean} [options.clientNoContextTakeover=false] Advertise/\n * acknowledge disabling of client context takeover\n * @param {Number} [options.concurrencyLimit=10] The number of concurrent\n * calls to zlib\n * @param {(Boolean|Number)} [options.serverMaxWindowBits] Request/confirm the\n * use of a custom server window size\n * @param {Boolean} [options.serverNoContextTakeover=false] Request/accept\n * disabling of server context takeover\n * @param {Number} [options.threshold=1024] Size (in bytes) below which\n * messages should not be compressed if context takeover is disabled\n * @param {Object} [options.zlibDeflateOptions] Options to pass to zlib on\n * deflate\n * @param {Object} [options.zlibInflateOptions] Options to pass to zlib on\n * inflate\n * @param {Boolean} [isServer=false] Create the instance in either server or\n * client mode\n * @param {Number} [maxPayload=0] The maximum allowed message length\n */\n constructor(options, isServer, maxPayload) {\n this._maxPayload = maxPayload | 0;\n this._options = options || {};\n this._threshold =\n this._options.threshold !== undefined ? this._options.threshold : 1024;\n this._isServer = !!isServer;\n this._deflate = null;\n this._inflate = null;\n\n this.params = null;\n\n if (!zlibLimiter) {\n const concurrency =\n this._options.concurrencyLimit !== undefined\n ? this._options.concurrencyLimit\n : 10;\n zlibLimiter = new Limiter(concurrency);\n }\n }\n\n /**\n * @type {String}\n */\n static get extensionName() {\n return 'permessage-deflate';\n }\n\n /**\n * Create an extension negotiation offer.\n *\n * @return {Object} Extension parameters\n * @public\n */\n offer() {\n const params = {};\n\n if (this._options.serverNoContextTakeover) {\n params.server_no_context_takeover = true;\n }\n if (this._options.clientNoContextTakeover) {\n params.client_no_context_takeover = true;\n }\n if (this._options.serverMaxWindowBits) {\n params.server_max_window_bits = this._options.serverMaxWindowBits;\n }\n if (this._options.clientMaxWindowBits) {\n params.client_max_window_bits = this._options.clientMaxWindowBits;\n } else if (this._options.clientMaxWindowBits == null) {\n params.client_max_window_bits = true;\n }\n\n return params;\n }\n\n /**\n * Accept an extension negotiation offer/response.\n *\n * @param {Array} configurations The extension negotiation offers/reponse\n * @return {Object} Accepted configuration\n * @public\n */\n accept(configurations) {\n configurations = this.normalizeParams(configurations);\n\n this.params = this._isServer\n ? this.acceptAsServer(configurations)\n : this.acceptAsClient(configurations);\n\n return this.params;\n }\n\n /**\n * Releases all resources used by the extension.\n *\n * @public\n */\n cleanup() {\n if (this._inflate) {\n this._inflate.close();\n this._inflate = null;\n }\n\n if (this._deflate) {\n const callback = this._deflate[kCallback];\n\n this._deflate.close();\n this._deflate = null;\n\n if (callback) {\n callback(\n new Error(\n 'The deflate stream was closed while data was being processed'\n )\n );\n }\n }\n }\n\n /**\n * Accept an extension negotiation offer.\n *\n * @param {Array} offers The extension negotiation offers\n * @return {Object} Accepted configuration\n * @private\n */\n acceptAsServer(offers) {\n const opts = this._options;\n const accepted = offers.find((params) => {\n if (\n (opts.serverNoContextTakeover === false &&\n params.server_no_context_takeover) ||\n (params.server_max_window_bits &&\n (opts.serverMaxWindowBits === false ||\n (typeof opts.serverMaxWindowBits === 'number' &&\n opts.serverMaxWindowBits > params.server_max_window_bits))) ||\n (typeof opts.clientMaxWindowBits === 'number' &&\n !params.client_max_window_bits)\n ) {\n return false;\n }\n\n return true;\n });\n\n if (!accepted) {\n throw new Error('None of the extension offers can be accepted');\n }\n\n if (opts.serverNoContextTakeover) {\n accepted.server_no_context_takeover = true;\n }\n if (opts.clientNoContextTakeover) {\n accepted.client_no_context_takeover = true;\n }\n if (typeof opts.serverMaxWindowBits === 'number') {\n accepted.server_max_window_bits = opts.serverMaxWindowBits;\n }\n if (typeof opts.clientMaxWindowBits === 'number') {\n accepted.client_max_window_bits = opts.clientMaxWindowBits;\n } else if (\n accepted.client_max_window_bits === true ||\n opts.clientMaxWindowBits === false\n ) {\n delete accepted.client_max_window_bits;\n }\n\n return accepted;\n }\n\n /**\n * Accept the extension negotiation response.\n *\n * @param {Array} response The extension negotiation response\n * @return {Object} Accepted configuration\n * @private\n */\n acceptAsClient(response) {\n const params = response[0];\n\n if (\n this._options.clientNoContextTakeover === false &&\n params.client_no_context_takeover\n ) {\n throw new Error('Unexpected parameter \"client_no_context_takeover\"');\n }\n\n if (!params.client_max_window_bits) {\n if (typeof this._options.clientMaxWindowBits === 'number') {\n params.client_max_window_bits = this._options.clientMaxWindowBits;\n }\n } else if (\n this._options.clientMaxWindowBits === false ||\n (typeof this._options.clientMaxWindowBits === 'number' &&\n params.client_max_window_bits > this._options.clientMaxWindowBits)\n ) {\n throw new Error(\n 'Unexpected or invalid parameter \"client_max_window_bits\"'\n );\n }\n\n return params;\n }\n\n /**\n * Normalize parameters.\n *\n * @param {Array} configurations The extension negotiation offers/reponse\n * @return {Array} The offers/response with normalized parameters\n * @private\n */\n normalizeParams(configurations) {\n configurations.forEach((params) => {\n Object.keys(params).forEach((key) => {\n let value = params[key];\n\n if (value.length > 1) {\n throw new Error(`Parameter \"${key}\" must have only a single value`);\n }\n\n value = value[0];\n\n if (key === 'client_max_window_bits') {\n if (value !== true) {\n const num = +value;\n if (!Number.isInteger(num) || num < 8 || num > 15) {\n throw new TypeError(\n `Invalid value for parameter \"${key}\": ${value}`\n );\n }\n value = num;\n } else if (!this._isServer) {\n throw new TypeError(\n `Invalid value for parameter \"${key}\": ${value}`\n );\n }\n } else if (key === 'server_max_window_bits') {\n const num = +value;\n if (!Number.isInteger(num) || num < 8 || num > 15) {\n throw new TypeError(\n `Invalid value for parameter \"${key}\": ${value}`\n );\n }\n value = num;\n } else if (\n key === 'client_no_context_takeover' ||\n key === 'server_no_context_takeover'\n ) {\n if (value !== true) {\n throw new TypeError(\n `Invalid value for parameter \"${key}\": ${value}`\n );\n }\n } else {\n throw new Error(`Unknown parameter \"${key}\"`);\n }\n\n params[key] = value;\n });\n });\n\n return configurations;\n }\n\n /**\n * Decompress data. Concurrency limited.\n *\n * @param {Buffer} data Compressed data\n * @param {Boolean} fin Specifies whether or not this is the last fragment\n * @param {Function} callback Callback\n * @public\n */\n decompress(data, fin, callback) {\n zlibLimiter.add((done) => {\n this._decompress(data, fin, (err, result) => {\n done();\n callback(err, result);\n });\n });\n }\n\n /**\n * Compress data. Concurrency limited.\n *\n * @param {(Buffer|String)} data Data to compress\n * @param {Boolean} fin Specifies whether or not this is the last fragment\n * @param {Function} callback Callback\n * @public\n */\n compress(data, fin, callback) {\n zlibLimiter.add((done) => {\n this._compress(data, fin, (err, result) => {\n done();\n callback(err, result);\n });\n });\n }\n\n /**\n * Decompress data.\n *\n * @param {Buffer} data Compressed data\n * @param {Boolean} fin Specifies whether or not this is the last fragment\n * @param {Function} callback Callback\n * @private\n */\n _decompress(data, fin, callback) {\n const endpoint = this._isServer ? 'client' : 'server';\n\n if (!this._inflate) {\n const key = `${endpoint}_max_window_bits`;\n const windowBits =\n typeof this.params[key] !== 'number'\n ? zlib.Z_DEFAULT_WINDOWBITS\n : this.params[key];\n\n this._inflate = zlib.createInflateRaw({\n ...this._options.zlibInflateOptions,\n windowBits\n });\n this._inflate[kPerMessageDeflate] = this;\n this._inflate[kTotalLength] = 0;\n this._inflate[kBuffers] = [];\n this._inflate.on('error', inflateOnError);\n this._inflate.on('data', inflateOnData);\n }\n\n this._inflate[kCallback] = callback;\n\n this._inflate.write(data);\n if (fin) this._inflate.write(TRAILER);\n\n this._inflate.flush(() => {\n const err = this._inflate[kError];\n\n if (err) {\n this._inflate.close();\n this._inflate = null;\n callback(err);\n return;\n }\n\n const data = bufferUtil.concat(\n this._inflate[kBuffers],\n this._inflate[kTotalLength]\n );\n\n if (this._inflate._readableState.endEmitted) {\n this._inflate.close();\n this._inflate = null;\n } else {\n this._inflate[kTotalLength] = 0;\n this._inflate[kBuffers] = [];\n\n if (fin && this.params[`${endpoint}_no_context_takeover`]) {\n this._inflate.reset();\n }\n }\n\n callback(null, data);\n });\n }\n\n /**\n * Compress data.\n *\n * @param {(Buffer|String)} data Data to compress\n * @param {Boolean} fin Specifies whether or not this is the last fragment\n * @param {Function} callback Callback\n * @private\n */\n _compress(data, fin, callback) {\n const endpoint = this._isServer ? 'server' : 'client';\n\n if (!this._deflate) {\n const key = `${endpoint}_max_window_bits`;\n const windowBits =\n typeof this.params[key] !== 'number'\n ? zlib.Z_DEFAULT_WINDOWBITS\n : this.params[key];\n\n this._deflate = zlib.createDeflateRaw({\n ...this._options.zlibDeflateOptions,\n windowBits\n });\n\n this._deflate[kTotalLength] = 0;\n this._deflate[kBuffers] = [];\n\n this._deflate.on('data', deflateOnData);\n }\n\n this._deflate[kCallback] = callback;\n\n this._deflate.write(data);\n this._deflate.flush(zlib.Z_SYNC_FLUSH, () => {\n if (!this._deflate) {\n //\n // The deflate stream was closed while data was being processed.\n //\n return;\n }\n\n let data = bufferUtil.concat(\n this._deflate[kBuffers],\n this._deflate[kTotalLength]\n );\n\n if (fin) {\n data = new FastBuffer(data.buffer, data.byteOffset, data.length - 4);\n }\n\n //\n // Ensure that the callback will not be called again in\n // `PerMessageDeflate#cleanup()`.\n //\n this._deflate[kCallback] = null;\n\n this._deflate[kTotalLength] = 0;\n this._deflate[kBuffers] = [];\n\n if (fin && this.params[`${endpoint}_no_context_takeover`]) {\n this._deflate.reset();\n }\n\n callback(null, data);\n });\n }\n}\n\nmodule.exports = PerMessageDeflate;\n\n/**\n * The listener of the `zlib.DeflateRaw` stream `'data'` event.\n *\n * @param {Buffer} chunk A chunk of data\n * @private\n */\nfunction deflateOnData(chunk) {\n this[kBuffers].push(chunk);\n this[kTotalLength] += chunk.length;\n}\n\n/**\n * The listener of the `zlib.InflateRaw` stream `'data'` event.\n *\n * @param {Buffer} chunk A chunk of data\n * @private\n */\nfunction inflateOnData(chunk) {\n this[kTotalLength] += chunk.length;\n\n if (\n this[kPerMessageDeflate]._maxPayload < 1 ||\n this[kTotalLength] <= this[kPerMessageDeflate]._maxPayload\n ) {\n this[kBuffers].push(chunk);\n return;\n }\n\n this[kError] = new RangeError('Max payload size exceeded');\n this[kError].code = 'WS_ERR_UNSUPPORTED_MESSAGE_LENGTH';\n this[kError][kStatusCode] = 1009;\n this.removeListener('data', inflateOnData);\n\n //\n // The choice to employ `zlib.reset()` over `zlib.close()` is dictated by the\n // fact that in Node.js versions prior to 13.10.0, the callback for\n // `zlib.flush()` is not called if `zlib.close()` is used. Utilizing\n // `zlib.reset()` ensures that either the callback is invoked or an error is\n // emitted.\n //\n this.reset();\n}\n\n/**\n * The listener of the `zlib.InflateRaw` stream `'error'` event.\n *\n * @param {Error} err The emitted error\n * @private\n */\nfunction inflateOnError(err) {\n //\n // There is no need to call `Zlib#close()` as the handle is automatically\n // closed when an error is emitted.\n //\n this[kPerMessageDeflate]._inflate = null;\n\n if (this[kError]) {\n this[kCallback](this[kError]);\n return;\n }\n\n err[kStatusCode] = 1007;\n this[kCallback](err);\n}\n","'use strict';\n\nconst { isUtf8 } = require('buffer');\n\nconst { hasBlob } = require('./constants');\n\n//\n// Allowed token characters:\n//\n// '!', '#', '$', '%', '&', ''', '*', '+', '-',\n// '.', 0-9, A-Z, '^', '_', '`', a-z, '|', '~'\n//\n// tokenChars[32] === 0 // ' '\n// tokenChars[33] === 1 // '!'\n// tokenChars[34] === 0 // '\"'\n// ...\n//\n// prettier-ignore\nconst tokenChars = [\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0 - 15\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 16 - 31\n 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, // 32 - 47\n 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, // 48 - 63\n 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 64 - 79\n 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, // 80 - 95\n 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 96 - 111\n 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0 // 112 - 127\n];\n\n/**\n * Checks if a status code is allowed in a close frame.\n *\n * @param {Number} code The status code\n * @return {Boolean} `true` if the status code is valid, else `false`\n * @public\n */\nfunction isValidStatusCode(code) {\n return (\n (code >= 1000 &&\n code <= 1014 &&\n code !== 1004 &&\n code !== 1005 &&\n code !== 1006) ||\n (code >= 3000 && code <= 4999)\n );\n}\n\n/**\n * Checks if a given buffer contains only correct UTF-8.\n * Ported from https://www.cl.cam.ac.uk/%7Emgk25/ucs/utf8_check.c by\n * Markus Kuhn.\n *\n * @param {Buffer} buf The buffer to check\n * @return {Boolean} `true` if `buf` contains only correct UTF-8, else `false`\n * @public\n */\nfunction _isValidUTF8(buf) {\n const len = buf.length;\n let i = 0;\n\n while (i < len) {\n if ((buf[i] & 0x80) === 0) {\n // 0xxxxxxx\n i++;\n } else if ((buf[i] & 0xe0) === 0xc0) {\n // 110xxxxx 10xxxxxx\n if (\n i + 1 === len ||\n (buf[i + 1] & 0xc0) !== 0x80 ||\n (buf[i] & 0xfe) === 0xc0 // Overlong\n ) {\n return false;\n }\n\n i += 2;\n } else if ((buf[i] & 0xf0) === 0xe0) {\n // 1110xxxx 10xxxxxx 10xxxxxx\n if (\n i + 2 >= len ||\n (buf[i + 1] & 0xc0) !== 0x80 ||\n (buf[i + 2] & 0xc0) !== 0x80 ||\n (buf[i] === 0xe0 && (buf[i + 1] & 0xe0) === 0x80) || // Overlong\n (buf[i] === 0xed && (buf[i + 1] & 0xe0) === 0xa0) // Surrogate (U+D800 - U+DFFF)\n ) {\n return false;\n }\n\n i += 3;\n } else if ((buf[i] & 0xf8) === 0xf0) {\n // 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx\n if (\n i + 3 >= len ||\n (buf[i + 1] & 0xc0) !== 0x80 ||\n (buf[i + 2] & 0xc0) !== 0x80 ||\n (buf[i + 3] & 0xc0) !== 0x80 ||\n (buf[i] === 0xf0 && (buf[i + 1] & 0xf0) === 0x80) || // Overlong\n (buf[i] === 0xf4 && buf[i + 1] > 0x8f) ||\n buf[i] > 0xf4 // > U+10FFFF\n ) {\n return false;\n }\n\n i += 4;\n } else {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Determines whether a value is a `Blob`.\n *\n * @param {*} value The value to be tested\n * @return {Boolean} `true` if `value` is a `Blob`, else `false`\n * @private\n */\nfunction isBlob(value) {\n return (\n hasBlob &&\n typeof value === 'object' &&\n typeof value.arrayBuffer === 'function' &&\n typeof value.type === 'string' &&\n typeof value.stream === 'function' &&\n (value[Symbol.toStringTag] === 'Blob' ||\n value[Symbol.toStringTag] === 'File')\n );\n}\n\nmodule.exports = {\n isBlob,\n isValidStatusCode,\n isValidUTF8: _isValidUTF8,\n tokenChars\n};\n\nif (isUtf8) {\n module.exports.isValidUTF8 = function (buf) {\n return buf.length < 24 ? _isValidUTF8(buf) : isUtf8(buf);\n };\n} /* istanbul ignore else */ else if (!process.env.WS_NO_UTF_8_VALIDATE) {\n try {\n const isValidUTF8 = require('utf-8-validate');\n\n module.exports.isValidUTF8 = function (buf) {\n return buf.length < 32 ? _isValidUTF8(buf) : isValidUTF8(buf);\n };\n } catch (e) {\n // Continue regardless of the error.\n }\n}\n","'use strict';\n\nconst { Writable } = require('stream');\n\nconst PerMessageDeflate = require('./permessage-deflate');\nconst {\n BINARY_TYPES,\n EMPTY_BUFFER,\n kStatusCode,\n kWebSocket\n} = require('./constants');\nconst { concat, toArrayBuffer, unmask } = require('./buffer-util');\nconst { isValidStatusCode, isValidUTF8 } = require('./validation');\n\nconst FastBuffer = Buffer[Symbol.species];\n\nconst GET_INFO = 0;\nconst GET_PAYLOAD_LENGTH_16 = 1;\nconst GET_PAYLOAD_LENGTH_64 = 2;\nconst GET_MASK = 3;\nconst GET_DATA = 4;\nconst INFLATING = 5;\nconst DEFER_EVENT = 6;\n\n/**\n * HyBi Receiver implementation.\n *\n * @extends Writable\n */\nclass Receiver extends Writable {\n /**\n * Creates a Receiver instance.\n *\n * @param {Object} [options] Options object\n * @param {Boolean} [options.allowSynchronousEvents=true] Specifies whether\n * any of the `'message'`, `'ping'`, and `'pong'` events can be emitted\n * multiple times in the same tick\n * @param {String} [options.binaryType=nodebuffer] The type for binary data\n * @param {Object} [options.extensions] An object containing the negotiated\n * extensions\n * @param {Boolean} [options.isServer=false] Specifies whether to operate in\n * client or server mode\n * @param {Number} [options.maxPayload=0] The maximum allowed message length\n * @param {Boolean} [options.skipUTF8Validation=false] Specifies whether or\n * not to skip UTF-8 validation for text and close messages\n */\n constructor(options = {}) {\n super();\n\n this._allowSynchronousEvents =\n options.allowSynchronousEvents !== undefined\n ? options.allowSynchronousEvents\n : true;\n this._binaryType = options.binaryType || BINARY_TYPES[0];\n this._extensions = options.extensions || {};\n this._isServer = !!options.isServer;\n this._maxPayload = options.maxPayload | 0;\n this._skipUTF8Validation = !!options.skipUTF8Validation;\n this[kWebSocket] = undefined;\n\n this._bufferedBytes = 0;\n this._buffers = [];\n\n this._compressed = false;\n this._payloadLength = 0;\n this._mask = undefined;\n this._fragmented = 0;\n this._masked = false;\n this._fin = false;\n this._opcode = 0;\n\n this._totalPayloadLength = 0;\n this._messageLength = 0;\n this._fragments = [];\n\n this._errored = false;\n this._loop = false;\n this._state = GET_INFO;\n }\n\n /**\n * Implements `Writable.prototype._write()`.\n *\n * @param {Buffer} chunk The chunk of data to write\n * @param {String} encoding The character encoding of `chunk`\n * @param {Function} cb Callback\n * @private\n */\n _write(chunk, encoding, cb) {\n if (this._opcode === 0x08 && this._state == GET_INFO) return cb();\n\n this._bufferedBytes += chunk.length;\n this._buffers.push(chunk);\n this.startLoop(cb);\n }\n\n /**\n * Consumes `n` bytes from the buffered data.\n *\n * @param {Number} n The number of bytes to consume\n * @return {Buffer} The consumed bytes\n * @private\n */\n consume(n) {\n this._bufferedBytes -= n;\n\n if (n === this._buffers[0].length) return this._buffers.shift();\n\n if (n < this._buffers[0].length) {\n const buf = this._buffers[0];\n this._buffers[0] = new FastBuffer(\n buf.buffer,\n buf.byteOffset + n,\n buf.length - n\n );\n\n return new FastBuffer(buf.buffer, buf.byteOffset, n);\n }\n\n const dst = Buffer.allocUnsafe(n);\n\n do {\n const buf = this._buffers[0];\n const offset = dst.length - n;\n\n if (n >= buf.length) {\n dst.set(this._buffers.shift(), offset);\n } else {\n dst.set(new Uint8Array(buf.buffer, buf.byteOffset, n), offset);\n this._buffers[0] = new FastBuffer(\n buf.buffer,\n buf.byteOffset + n,\n buf.length - n\n );\n }\n\n n -= buf.length;\n } while (n > 0);\n\n return dst;\n }\n\n /**\n * Starts the parsing loop.\n *\n * @param {Function} cb Callback\n * @private\n */\n startLoop(cb) {\n this._loop = true;\n\n do {\n switch (this._state) {\n case GET_INFO:\n this.getInfo(cb);\n break;\n case GET_PAYLOAD_LENGTH_16:\n this.getPayloadLength16(cb);\n break;\n case GET_PAYLOAD_LENGTH_64:\n this.getPayloadLength64(cb);\n break;\n case GET_MASK:\n this.getMask();\n break;\n case GET_DATA:\n this.getData(cb);\n break;\n case INFLATING:\n case DEFER_EVENT:\n this._loop = false;\n return;\n }\n } while (this._loop);\n\n if (!this._errored) cb();\n }\n\n /**\n * Reads the first two bytes of a frame.\n *\n * @param {Function} cb Callback\n * @private\n */\n getInfo(cb) {\n if (this._bufferedBytes < 2) {\n this._loop = false;\n return;\n }\n\n const buf = this.consume(2);\n\n if ((buf[0] & 0x30) !== 0x00) {\n const error = this.createError(\n RangeError,\n 'RSV2 and RSV3 must be clear',\n true,\n 1002,\n 'WS_ERR_UNEXPECTED_RSV_2_3'\n );\n\n cb(error);\n return;\n }\n\n const compressed = (buf[0] & 0x40) === 0x40;\n\n if (compressed && !this._extensions[PerMessageDeflate.extensionName]) {\n const error = this.createError(\n RangeError,\n 'RSV1 must be clear',\n true,\n 1002,\n 'WS_ERR_UNEXPECTED_RSV_1'\n );\n\n cb(error);\n return;\n }\n\n this._fin = (buf[0] & 0x80) === 0x80;\n this._opcode = buf[0] & 0x0f;\n this._payloadLength = buf[1] & 0x7f;\n\n if (this._opcode === 0x00) {\n if (compressed) {\n const error = this.createError(\n RangeError,\n 'RSV1 must be clear',\n true,\n 1002,\n 'WS_ERR_UNEXPECTED_RSV_1'\n );\n\n cb(error);\n return;\n }\n\n if (!this._fragmented) {\n const error = this.createError(\n RangeError,\n 'invalid opcode 0',\n true,\n 1002,\n 'WS_ERR_INVALID_OPCODE'\n );\n\n cb(error);\n return;\n }\n\n this._opcode = this._fragmented;\n } else if (this._opcode === 0x01 || this._opcode === 0x02) {\n if (this._fragmented) {\n const error = this.createError(\n RangeError,\n `invalid opcode ${this._opcode}`,\n true,\n 1002,\n 'WS_ERR_INVALID_OPCODE'\n );\n\n cb(error);\n return;\n }\n\n this._compressed = compressed;\n } else if (this._opcode > 0x07 && this._opcode < 0x0b) {\n if (!this._fin) {\n const error = this.createError(\n RangeError,\n 'FIN must be set',\n true,\n 1002,\n 'WS_ERR_EXPECTED_FIN'\n );\n\n cb(error);\n return;\n }\n\n if (compressed) {\n const error = this.createError(\n RangeError,\n 'RSV1 must be clear',\n true,\n 1002,\n 'WS_ERR_UNEXPECTED_RSV_1'\n );\n\n cb(error);\n return;\n }\n\n if (\n this._payloadLength > 0x7d ||\n (this._opcode === 0x08 && this._payloadLength === 1)\n ) {\n const error = this.createError(\n RangeError,\n `invalid payload length ${this._payloadLength}`,\n true,\n 1002,\n 'WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH'\n );\n\n cb(error);\n return;\n }\n } else {\n const error = this.createError(\n RangeError,\n `invalid opcode ${this._opcode}`,\n true,\n 1002,\n 'WS_ERR_INVALID_OPCODE'\n );\n\n cb(error);\n return;\n }\n\n if (!this._fin && !this._fragmented) this._fragmented = this._opcode;\n this._masked = (buf[1] & 0x80) === 0x80;\n\n if (this._isServer) {\n if (!this._masked) {\n const error = this.createError(\n RangeError,\n 'MASK must be set',\n true,\n 1002,\n 'WS_ERR_EXPECTED_MASK'\n );\n\n cb(error);\n return;\n }\n } else if (this._masked) {\n const error = this.createError(\n RangeError,\n 'MASK must be clear',\n true,\n 1002,\n 'WS_ERR_UNEXPECTED_MASK'\n );\n\n cb(error);\n return;\n }\n\n if (this._payloadLength === 126) this._state = GET_PAYLOAD_LENGTH_16;\n else if (this._payloadLength === 127) this._state = GET_PAYLOAD_LENGTH_64;\n else this.haveLength(cb);\n }\n\n /**\n * Gets extended payload length (7+16).\n *\n * @param {Function} cb Callback\n * @private\n */\n getPayloadLength16(cb) {\n if (this._bufferedBytes < 2) {\n this._loop = false;\n return;\n }\n\n this._payloadLength = this.consume(2).readUInt16BE(0);\n this.haveLength(cb);\n }\n\n /**\n * Gets extended payload length (7+64).\n *\n * @param {Function} cb Callback\n * @private\n */\n getPayloadLength64(cb) {\n if (this._bufferedBytes < 8) {\n this._loop = false;\n return;\n }\n\n const buf = this.consume(8);\n const num = buf.readUInt32BE(0);\n\n //\n // The maximum safe integer in JavaScript is 2^53 - 1. An error is returned\n // if payload length is greater than this number.\n //\n if (num > Math.pow(2, 53 - 32) - 1) {\n const error = this.createError(\n RangeError,\n 'Unsupported WebSocket frame: payload length > 2^53 - 1',\n false,\n 1009,\n 'WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH'\n );\n\n cb(error);\n return;\n }\n\n this._payloadLength = num * Math.pow(2, 32) + buf.readUInt32BE(4);\n this.haveLength(cb);\n }\n\n /**\n * Payload length has been read.\n *\n * @param {Function} cb Callback\n * @private\n */\n haveLength(cb) {\n if (this._payloadLength && this._opcode < 0x08) {\n this._totalPayloadLength += this._payloadLength;\n if (this._totalPayloadLength > this._maxPayload && this._maxPayload > 0) {\n const error = this.createError(\n RangeError,\n 'Max payload size exceeded',\n false,\n 1009,\n 'WS_ERR_UNSUPPORTED_MESSAGE_LENGTH'\n );\n\n cb(error);\n return;\n }\n }\n\n if (this._masked) this._state = GET_MASK;\n else this._state = GET_DATA;\n }\n\n /**\n * Reads mask bytes.\n *\n * @private\n */\n getMask() {\n if (this._bufferedBytes < 4) {\n this._loop = false;\n return;\n }\n\n this._mask = this.consume(4);\n this._state = GET_DATA;\n }\n\n /**\n * Reads data bytes.\n *\n * @param {Function} cb Callback\n * @private\n */\n getData(cb) {\n let data = EMPTY_BUFFER;\n\n if (this._payloadLength) {\n if (this._bufferedBytes < this._payloadLength) {\n this._loop = false;\n return;\n }\n\n data = this.consume(this._payloadLength);\n\n if (\n this._masked &&\n (this._mask[0] | this._mask[1] | this._mask[2] | this._mask[3]) !== 0\n ) {\n unmask(data, this._mask);\n }\n }\n\n if (this._opcode > 0x07) {\n this.controlMessage(data, cb);\n return;\n }\n\n if (this._compressed) {\n this._state = INFLATING;\n this.decompress(data, cb);\n return;\n }\n\n if (data.length) {\n //\n // This message is not compressed so its length is the sum of the payload\n // length of all fragments.\n //\n this._messageLength = this._totalPayloadLength;\n this._fragments.push(data);\n }\n\n this.dataMessage(cb);\n }\n\n /**\n * Decompresses data.\n *\n * @param {Buffer} data Compressed data\n * @param {Function} cb Callback\n * @private\n */\n decompress(data, cb) {\n const perMessageDeflate = this._extensions[PerMessageDeflate.extensionName];\n\n perMessageDeflate.decompress(data, this._fin, (err, buf) => {\n if (err) return cb(err);\n\n if (buf.length) {\n this._messageLength += buf.length;\n if (this._messageLength > this._maxPayload && this._maxPayload > 0) {\n const error = this.createError(\n RangeError,\n 'Max payload size exceeded',\n false,\n 1009,\n 'WS_ERR_UNSUPPORTED_MESSAGE_LENGTH'\n );\n\n cb(error);\n return;\n }\n\n this._fragments.push(buf);\n }\n\n this.dataMessage(cb);\n if (this._state === GET_INFO) this.startLoop(cb);\n });\n }\n\n /**\n * Handles a data message.\n *\n * @param {Function} cb Callback\n * @private\n */\n dataMessage(cb) {\n if (!this._fin) {\n this._state = GET_INFO;\n return;\n }\n\n const messageLength = this._messageLength;\n const fragments = this._fragments;\n\n this._totalPayloadLength = 0;\n this._messageLength = 0;\n this._fragmented = 0;\n this._fragments = [];\n\n if (this._opcode === 2) {\n let data;\n\n if (this._binaryType === 'nodebuffer') {\n data = concat(fragments, messageLength);\n } else if (this._binaryType === 'arraybuffer') {\n data = toArrayBuffer(concat(fragments, messageLength));\n } else if (this._binaryType === 'blob') {\n data = new Blob(fragments);\n } else {\n data = fragments;\n }\n\n if (this._allowSynchronousEvents) {\n this.emit('message', data, true);\n this._state = GET_INFO;\n } else {\n this._state = DEFER_EVENT;\n setImmediate(() => {\n this.emit('message', data, true);\n this._state = GET_INFO;\n this.startLoop(cb);\n });\n }\n } else {\n const buf = concat(fragments, messageLength);\n\n if (!this._skipUTF8Validation && !isValidUTF8(buf)) {\n const error = this.createError(\n Error,\n 'invalid UTF-8 sequence',\n true,\n 1007,\n 'WS_ERR_INVALID_UTF8'\n );\n\n cb(error);\n return;\n }\n\n if (this._state === INFLATING || this._allowSynchronousEvents) {\n this.emit('message', buf, false);\n this._state = GET_INFO;\n } else {\n this._state = DEFER_EVENT;\n setImmediate(() => {\n this.emit('message', buf, false);\n this._state = GET_INFO;\n this.startLoop(cb);\n });\n }\n }\n }\n\n /**\n * Handles a control message.\n *\n * @param {Buffer} data Data to handle\n * @return {(Error|RangeError|undefined)} A possible error\n * @private\n */\n controlMessage(data, cb) {\n if (this._opcode === 0x08) {\n if (data.length === 0) {\n this._loop = false;\n this.emit('conclude', 1005, EMPTY_BUFFER);\n this.end();\n } else {\n const code = data.readUInt16BE(0);\n\n if (!isValidStatusCode(code)) {\n const error = this.createError(\n RangeError,\n `invalid status code ${code}`,\n true,\n 1002,\n 'WS_ERR_INVALID_CLOSE_CODE'\n );\n\n cb(error);\n return;\n }\n\n const buf = new FastBuffer(\n data.buffer,\n data.byteOffset + 2,\n data.length - 2\n );\n\n if (!this._skipUTF8Validation && !isValidUTF8(buf)) {\n const error = this.createError(\n Error,\n 'invalid UTF-8 sequence',\n true,\n 1007,\n 'WS_ERR_INVALID_UTF8'\n );\n\n cb(error);\n return;\n }\n\n this._loop = false;\n this.emit('conclude', code, buf);\n this.end();\n }\n\n this._state = GET_INFO;\n return;\n }\n\n if (this._allowSynchronousEvents) {\n this.emit(this._opcode === 0x09 ? 'ping' : 'pong', data);\n this._state = GET_INFO;\n } else {\n this._state = DEFER_EVENT;\n setImmediate(() => {\n this.emit(this._opcode === 0x09 ? 'ping' : 'pong', data);\n this._state = GET_INFO;\n this.startLoop(cb);\n });\n }\n }\n\n /**\n * Builds an error object.\n *\n * @param {function(new:Error|RangeError)} ErrorCtor The error constructor\n * @param {String} message The error message\n * @param {Boolean} prefix Specifies whether or not to add a default prefix to\n * `message`\n * @param {Number} statusCode The status code\n * @param {String} errorCode The exposed error code\n * @return {(Error|RangeError)} The error\n * @private\n */\n createError(ErrorCtor, message, prefix, statusCode, errorCode) {\n this._loop = false;\n this._errored = true;\n\n const err = new ErrorCtor(\n prefix ? `Invalid WebSocket frame: ${message}` : message\n );\n\n Error.captureStackTrace(err, this.createError);\n err.code = errorCode;\n err[kStatusCode] = statusCode;\n return err;\n }\n}\n\nmodule.exports = Receiver;\n","/* eslint no-unused-vars: [\"error\", { \"varsIgnorePattern\": \"^Duplex\" }] */\n\n'use strict';\n\nconst { Duplex } = require('stream');\nconst { randomFillSync } = require('crypto');\n\nconst PerMessageDeflate = require('./permessage-deflate');\nconst { EMPTY_BUFFER, kWebSocket, NOOP } = require('./constants');\nconst { isBlob, isValidStatusCode } = require('./validation');\nconst { mask: applyMask, toBuffer } = require('./buffer-util');\n\nconst kByteLength = Symbol('kByteLength');\nconst maskBuffer = Buffer.alloc(4);\nconst RANDOM_POOL_SIZE = 8 * 1024;\nlet randomPool;\nlet randomPoolPointer = RANDOM_POOL_SIZE;\n\nconst DEFAULT = 0;\nconst DEFLATING = 1;\nconst GET_BLOB_DATA = 2;\n\n/**\n * HyBi Sender implementation.\n */\nclass Sender {\n /**\n * Creates a Sender instance.\n *\n * @param {Duplex} socket The connection socket\n * @param {Object} [extensions] An object containing the negotiated extensions\n * @param {Function} [generateMask] The function used to generate the masking\n * key\n */\n constructor(socket, extensions, generateMask) {\n this._extensions = extensions || {};\n\n if (generateMask) {\n this._generateMask = generateMask;\n this._maskBuffer = Buffer.alloc(4);\n }\n\n this._socket = socket;\n\n this._firstFragment = true;\n this._compress = false;\n\n this._bufferedBytes = 0;\n this._queue = [];\n this._state = DEFAULT;\n this.onerror = NOOP;\n this[kWebSocket] = undefined;\n }\n\n /**\n * Frames a piece of data according to the HyBi WebSocket protocol.\n *\n * @param {(Buffer|String)} data The data to frame\n * @param {Object} options Options object\n * @param {Boolean} [options.fin=false] Specifies whether or not to set the\n * FIN bit\n * @param {Function} [options.generateMask] The function used to generate the\n * masking key\n * @param {Boolean} [options.mask=false] Specifies whether or not to mask\n * `data`\n * @param {Buffer} [options.maskBuffer] The buffer used to store the masking\n * key\n * @param {Number} options.opcode The opcode\n * @param {Boolean} [options.readOnly=false] Specifies whether `data` can be\n * modified\n * @param {Boolean} [options.rsv1=false] Specifies whether or not to set the\n * RSV1 bit\n * @return {(Buffer|String)[]} The framed data\n * @public\n */\n static frame(data, options) {\n let mask;\n let merge = false;\n let offset = 2;\n let skipMasking = false;\n\n if (options.mask) {\n mask = options.maskBuffer || maskBuffer;\n\n if (options.generateMask) {\n options.generateMask(mask);\n } else {\n if (randomPoolPointer === RANDOM_POOL_SIZE) {\n /* istanbul ignore else */\n if (randomPool === undefined) {\n //\n // This is lazily initialized because server-sent frames must not\n // be masked so it may never be used.\n //\n randomPool = Buffer.alloc(RANDOM_POOL_SIZE);\n }\n\n randomFillSync(randomPool, 0, RANDOM_POOL_SIZE);\n randomPoolPointer = 0;\n }\n\n mask[0] = randomPool[randomPoolPointer++];\n mask[1] = randomPool[randomPoolPointer++];\n mask[2] = randomPool[randomPoolPointer++];\n mask[3] = randomPool[randomPoolPointer++];\n }\n\n skipMasking = (mask[0] | mask[1] | mask[2] | mask[3]) === 0;\n offset = 6;\n }\n\n let dataLength;\n\n if (typeof data === 'string') {\n if (\n (!options.mask || skipMasking) &&\n options[kByteLength] !== undefined\n ) {\n dataLength = options[kByteLength];\n } else {\n data = Buffer.from(data);\n dataLength = data.length;\n }\n } else {\n dataLength = data.length;\n merge = options.mask && options.readOnly && !skipMasking;\n }\n\n let payloadLength = dataLength;\n\n if (dataLength >= 65536) {\n offset += 8;\n payloadLength = 127;\n } else if (dataLength > 125) {\n offset += 2;\n payloadLength = 126;\n }\n\n const target = Buffer.allocUnsafe(merge ? dataLength + offset : offset);\n\n target[0] = options.fin ? options.opcode | 0x80 : options.opcode;\n if (options.rsv1) target[0] |= 0x40;\n\n target[1] = payloadLength;\n\n if (payloadLength === 126) {\n target.writeUInt16BE(dataLength, 2);\n } else if (payloadLength === 127) {\n target[2] = target[3] = 0;\n target.writeUIntBE(dataLength, 4, 6);\n }\n\n if (!options.mask) return [target, data];\n\n target[1] |= 0x80;\n target[offset - 4] = mask[0];\n target[offset - 3] = mask[1];\n target[offset - 2] = mask[2];\n target[offset - 1] = mask[3];\n\n if (skipMasking) return [target, data];\n\n if (merge) {\n applyMask(data, mask, target, offset, dataLength);\n return [target];\n }\n\n applyMask(data, mask, data, 0, dataLength);\n return [target, data];\n }\n\n /**\n * Sends a close message to the other peer.\n *\n * @param {Number} [code] The status code component of the body\n * @param {(String|Buffer)} [data] The message component of the body\n * @param {Boolean} [mask=false] Specifies whether or not to mask the message\n * @param {Function} [cb] Callback\n * @public\n */\n close(code, data, mask, cb) {\n let buf;\n\n if (code === undefined) {\n buf = EMPTY_BUFFER;\n } else if (typeof code !== 'number' || !isValidStatusCode(code)) {\n throw new TypeError('First argument must be a valid error code number');\n } else if (data === undefined || !data.length) {\n buf = Buffer.allocUnsafe(2);\n buf.writeUInt16BE(code, 0);\n } else {\n const length = Buffer.byteLength(data);\n\n if (length > 123) {\n throw new RangeError('The message must not be greater than 123 bytes');\n }\n\n buf = Buffer.allocUnsafe(2 + length);\n buf.writeUInt16BE(code, 0);\n\n if (typeof data === 'string') {\n buf.write(data, 2);\n } else {\n buf.set(data, 2);\n }\n }\n\n const options = {\n [kByteLength]: buf.length,\n fin: true,\n generateMask: this._generateMask,\n mask,\n maskBuffer: this._maskBuffer,\n opcode: 0x08,\n readOnly: false,\n rsv1: false\n };\n\n if (this._state !== DEFAULT) {\n this.enqueue([this.dispatch, buf, false, options, cb]);\n } else {\n this.sendFrame(Sender.frame(buf, options), cb);\n }\n }\n\n /**\n * Sends a ping message to the other peer.\n *\n * @param {*} data The message to send\n * @param {Boolean} [mask=false] Specifies whether or not to mask `data`\n * @param {Function} [cb] Callback\n * @public\n */\n ping(data, mask, cb) {\n let byteLength;\n let readOnly;\n\n if (typeof data === 'string') {\n byteLength = Buffer.byteLength(data);\n readOnly = false;\n } else if (isBlob(data)) {\n byteLength = data.size;\n readOnly = false;\n } else {\n data = toBuffer(data);\n byteLength = data.length;\n readOnly = toBuffer.readOnly;\n }\n\n if (byteLength > 125) {\n throw new RangeError('The data size must not be greater than 125 bytes');\n }\n\n const options = {\n [kByteLength]: byteLength,\n fin: true,\n generateMask: this._generateMask,\n mask,\n maskBuffer: this._maskBuffer,\n opcode: 0x09,\n readOnly,\n rsv1: false\n };\n\n if (isBlob(data)) {\n if (this._state !== DEFAULT) {\n this.enqueue([this.getBlobData, data, false, options, cb]);\n } else {\n this.getBlobData(data, false, options, cb);\n }\n } else if (this._state !== DEFAULT) {\n this.enqueue([this.dispatch, data, false, options, cb]);\n } else {\n this.sendFrame(Sender.frame(data, options), cb);\n }\n }\n\n /**\n * Sends a pong message to the other peer.\n *\n * @param {*} data The message to send\n * @param {Boolean} [mask=false] Specifies whether or not to mask `data`\n * @param {Function} [cb] Callback\n * @public\n */\n pong(data, mask, cb) {\n let byteLength;\n let readOnly;\n\n if (typeof data === 'string') {\n byteLength = Buffer.byteLength(data);\n readOnly = false;\n } else if (isBlob(data)) {\n byteLength = data.size;\n readOnly = false;\n } else {\n data = toBuffer(data);\n byteLength = data.length;\n readOnly = toBuffer.readOnly;\n }\n\n if (byteLength > 125) {\n throw new RangeError('The data size must not be greater than 125 bytes');\n }\n\n const options = {\n [kByteLength]: byteLength,\n fin: true,\n generateMask: this._generateMask,\n mask,\n maskBuffer: this._maskBuffer,\n opcode: 0x0a,\n readOnly,\n rsv1: false\n };\n\n if (isBlob(data)) {\n if (this._state !== DEFAULT) {\n this.enqueue([this.getBlobData, data, false, options, cb]);\n } else {\n this.getBlobData(data, false, options, cb);\n }\n } else if (this._state !== DEFAULT) {\n this.enqueue([this.dispatch, data, false, options, cb]);\n } else {\n this.sendFrame(Sender.frame(data, options), cb);\n }\n }\n\n /**\n * Sends a data message to the other peer.\n *\n * @param {*} data The message to send\n * @param {Object} options Options object\n * @param {Boolean} [options.binary=false] Specifies whether `data` is binary\n * or text\n * @param {Boolean} [options.compress=false] Specifies whether or not to\n * compress `data`\n * @param {Boolean} [options.fin=false] Specifies whether the fragment is the\n * last one\n * @param {Boolean} [options.mask=false] Specifies whether or not to mask\n * `data`\n * @param {Function} [cb] Callback\n * @public\n */\n send(data, options, cb) {\n const perMessageDeflate = this._extensions[PerMessageDeflate.extensionName];\n let opcode = options.binary ? 2 : 1;\n let rsv1 = options.compress;\n\n let byteLength;\n let readOnly;\n\n if (typeof data === 'string') {\n byteLength = Buffer.byteLength(data);\n readOnly = false;\n } else if (isBlob(data)) {\n byteLength = data.size;\n readOnly = false;\n } else {\n data = toBuffer(data);\n byteLength = data.length;\n readOnly = toBuffer.readOnly;\n }\n\n if (this._firstFragment) {\n this._firstFragment = false;\n if (\n rsv1 &&\n perMessageDeflate &&\n perMessageDeflate.params[\n perMessageDeflate._isServer\n ? 'server_no_context_takeover'\n : 'client_no_context_takeover'\n ]\n ) {\n rsv1 = byteLength >= perMessageDeflate._threshold;\n }\n this._compress = rsv1;\n } else {\n rsv1 = false;\n opcode = 0;\n }\n\n if (options.fin) this._firstFragment = true;\n\n const opts = {\n [kByteLength]: byteLength,\n fin: options.fin,\n generateMask: this._generateMask,\n mask: options.mask,\n maskBuffer: this._maskBuffer,\n opcode,\n readOnly,\n rsv1\n };\n\n if (isBlob(data)) {\n if (this._state !== DEFAULT) {\n this.enqueue([this.getBlobData, data, this._compress, opts, cb]);\n } else {\n this.getBlobData(data, this._compress, opts, cb);\n }\n } else if (this._state !== DEFAULT) {\n this.enqueue([this.dispatch, data, this._compress, opts, cb]);\n } else {\n this.dispatch(data, this._compress, opts, cb);\n }\n }\n\n /**\n * Gets the contents of a blob as binary data.\n *\n * @param {Blob} blob The blob\n * @param {Boolean} [compress=false] Specifies whether or not to compress\n * the data\n * @param {Object} options Options object\n * @param {Boolean} [options.fin=false] Specifies whether or not to set the\n * FIN bit\n * @param {Function} [options.generateMask] The function used to generate the\n * masking key\n * @param {Boolean} [options.mask=false] Specifies whether or not to mask\n * `data`\n * @param {Buffer} [options.maskBuffer] The buffer used to store the masking\n * key\n * @param {Number} options.opcode The opcode\n * @param {Boolean} [options.readOnly=false] Specifies whether `data` can be\n * modified\n * @param {Boolean} [options.rsv1=false] Specifies whether or not to set the\n * RSV1 bit\n * @param {Function} [cb] Callback\n * @private\n */\n getBlobData(blob, compress, options, cb) {\n this._bufferedBytes += options[kByteLength];\n this._state = GET_BLOB_DATA;\n\n blob\n .arrayBuffer()\n .then((arrayBuffer) => {\n if (this._socket.destroyed) {\n const err = new Error(\n 'The socket was closed while the blob was being read'\n );\n\n //\n // `callCallbacks` is called in the next tick to ensure that errors\n // that might be thrown in the callbacks behave like errors thrown\n // outside the promise chain.\n //\n process.nextTick(callCallbacks, this, err, cb);\n return;\n }\n\n this._bufferedBytes -= options[kByteLength];\n const data = toBuffer(arrayBuffer);\n\n if (!compress) {\n this._state = DEFAULT;\n this.sendFrame(Sender.frame(data, options), cb);\n this.dequeue();\n } else {\n this.dispatch(data, compress, options, cb);\n }\n })\n .catch((err) => {\n //\n // `onError` is called in the next tick for the same reason that\n // `callCallbacks` above is.\n //\n process.nextTick(onError, this, err, cb);\n });\n }\n\n /**\n * Dispatches a message.\n *\n * @param {(Buffer|String)} data The message to send\n * @param {Boolean} [compress=false] Specifies whether or not to compress\n * `data`\n * @param {Object} options Options object\n * @param {Boolean} [options.fin=false] Specifies whether or not to set the\n * FIN bit\n * @param {Function} [options.generateMask] The function used to generate the\n * masking key\n * @param {Boolean} [options.mask=false] Specifies whether or not to mask\n * `data`\n * @param {Buffer} [options.maskBuffer] The buffer used to store the masking\n * key\n * @param {Number} options.opcode The opcode\n * @param {Boolean} [options.readOnly=false] Specifies whether `data` can be\n * modified\n * @param {Boolean} [options.rsv1=false] Specifies whether or not to set the\n * RSV1 bit\n * @param {Function} [cb] Callback\n * @private\n */\n dispatch(data, compress, options, cb) {\n if (!compress) {\n this.sendFrame(Sender.frame(data, options), cb);\n return;\n }\n\n const perMessageDeflate = this._extensions[PerMessageDeflate.extensionName];\n\n this._bufferedBytes += options[kByteLength];\n this._state = DEFLATING;\n perMessageDeflate.compress(data, options.fin, (_, buf) => {\n if (this._socket.destroyed) {\n const err = new Error(\n 'The socket was closed while data was being compressed'\n );\n\n callCallbacks(this, err, cb);\n return;\n }\n\n this._bufferedBytes -= options[kByteLength];\n this._state = DEFAULT;\n options.readOnly = false;\n this.sendFrame(Sender.frame(buf, options), cb);\n this.dequeue();\n });\n }\n\n /**\n * Executes queued send operations.\n *\n * @private\n */\n dequeue() {\n while (this._state === DEFAULT && this._queue.length) {\n const params = this._queue.shift();\n\n this._bufferedBytes -= params[3][kByteLength];\n Reflect.apply(params[0], this, params.slice(1));\n }\n }\n\n /**\n * Enqueues a send operation.\n *\n * @param {Array} params Send operation parameters.\n * @private\n */\n enqueue(params) {\n this._bufferedBytes += params[3][kByteLength];\n this._queue.push(params);\n }\n\n /**\n * Sends a frame.\n *\n * @param {(Buffer | String)[]} list The frame to send\n * @param {Function} [cb] Callback\n * @private\n */\n sendFrame(list, cb) {\n if (list.length === 2) {\n this._socket.cork();\n this._socket.write(list[0]);\n this._socket.write(list[1], cb);\n this._socket.uncork();\n } else {\n this._socket.write(list[0], cb);\n }\n }\n}\n\nmodule.exports = Sender;\n\n/**\n * Calls queued callbacks with an error.\n *\n * @param {Sender} sender The `Sender` instance\n * @param {Error} err The error to call the callbacks with\n * @param {Function} [cb] The first callback\n * @private\n */\nfunction callCallbacks(sender, err, cb) {\n if (typeof cb === 'function') cb(err);\n\n for (let i = 0; i < sender._queue.length; i++) {\n const params = sender._queue[i];\n const callback = params[params.length - 1];\n\n if (typeof callback === 'function') callback(err);\n }\n}\n\n/**\n * Handles a `Sender` error.\n *\n * @param {Sender} sender The `Sender` instance\n * @param {Error} err The error\n * @param {Function} [cb] The first pending callback\n * @private\n */\nfunction onError(sender, err, cb) {\n callCallbacks(sender, err, cb);\n sender.onerror(err);\n}\n","'use strict';\n\nconst { kForOnEventAttribute, kListener } = require('./constants');\n\nconst kCode = Symbol('kCode');\nconst kData = Symbol('kData');\nconst kError = Symbol('kError');\nconst kMessage = Symbol('kMessage');\nconst kReason = Symbol('kReason');\nconst kTarget = Symbol('kTarget');\nconst kType = Symbol('kType');\nconst kWasClean = Symbol('kWasClean');\n\n/**\n * Class representing an event.\n */\nclass Event {\n /**\n * Create a new `Event`.\n *\n * @param {String} type The name of the event\n * @throws {TypeError} If the `type` argument is not specified\n */\n constructor(type) {\n this[kTarget] = null;\n this[kType] = type;\n }\n\n /**\n * @type {*}\n */\n get target() {\n return this[kTarget];\n }\n\n /**\n * @type {String}\n */\n get type() {\n return this[kType];\n }\n}\n\nObject.defineProperty(Event.prototype, 'target', { enumerable: true });\nObject.defineProperty(Event.prototype, 'type', { enumerable: true });\n\n/**\n * Class representing a close event.\n *\n * @extends Event\n */\nclass CloseEvent extends Event {\n /**\n * Create a new `CloseEvent`.\n *\n * @param {String} type The name of the event\n * @param {Object} [options] A dictionary object that allows for setting\n * attributes via object members of the same name\n * @param {Number} [options.code=0] The status code explaining why the\n * connection was closed\n * @param {String} [options.reason=''] A human-readable string explaining why\n * the connection was closed\n * @param {Boolean} [options.wasClean=false] Indicates whether or not the\n * connection was cleanly closed\n */\n constructor(type, options = {}) {\n super(type);\n\n this[kCode] = options.code === undefined ? 0 : options.code;\n this[kReason] = options.reason === undefined ? '' : options.reason;\n this[kWasClean] = options.wasClean === undefined ? false : options.wasClean;\n }\n\n /**\n * @type {Number}\n */\n get code() {\n return this[kCode];\n }\n\n /**\n * @type {String}\n */\n get reason() {\n return this[kReason];\n }\n\n /**\n * @type {Boolean}\n */\n get wasClean() {\n return this[kWasClean];\n }\n}\n\nObject.defineProperty(CloseEvent.prototype, 'code', { enumerable: true });\nObject.defineProperty(CloseEvent.prototype, 'reason', { enumerable: true });\nObject.defineProperty(CloseEvent.prototype, 'wasClean', { enumerable: true });\n\n/**\n * Class representing an error event.\n *\n * @extends Event\n */\nclass ErrorEvent extends Event {\n /**\n * Create a new `ErrorEvent`.\n *\n * @param {String} type The name of the event\n * @param {Object} [options] A dictionary object that allows for setting\n * attributes via object members of the same name\n * @param {*} [options.error=null] The error that generated this event\n * @param {String} [options.message=''] The error message\n */\n constructor(type, options = {}) {\n super(type);\n\n this[kError] = options.error === undefined ? null : options.error;\n this[kMessage] = options.message === undefined ? '' : options.message;\n }\n\n /**\n * @type {*}\n */\n get error() {\n return this[kError];\n }\n\n /**\n * @type {String}\n */\n get message() {\n return this[kMessage];\n }\n}\n\nObject.defineProperty(ErrorEvent.prototype, 'error', { enumerable: true });\nObject.defineProperty(ErrorEvent.prototype, 'message', { enumerable: true });\n\n/**\n * Class representing a message event.\n *\n * @extends Event\n */\nclass MessageEvent extends Event {\n /**\n * Create a new `MessageEvent`.\n *\n * @param {String} type The name of the event\n * @param {Object} [options] A dictionary object that allows for setting\n * attributes via object members of the same name\n * @param {*} [options.data=null] The message content\n */\n constructor(type, options = {}) {\n super(type);\n\n this[kData] = options.data === undefined ? null : options.data;\n }\n\n /**\n * @type {*}\n */\n get data() {\n return this[kData];\n }\n}\n\nObject.defineProperty(MessageEvent.prototype, 'data', { enumerable: true });\n\n/**\n * This provides methods for emulating the `EventTarget` interface. It's not\n * meant to be used directly.\n *\n * @mixin\n */\nconst EventTarget = {\n /**\n * Register an event listener.\n *\n * @param {String} type A string representing the event type to listen for\n * @param {(Function|Object)} handler The listener to add\n * @param {Object} [options] An options object specifies characteristics about\n * the event listener\n * @param {Boolean} [options.once=false] A `Boolean` indicating that the\n * listener should be invoked at most once after being added. If `true`,\n * the listener would be automatically removed when invoked.\n * @public\n */\n addEventListener(type, handler, options = {}) {\n for (const listener of this.listeners(type)) {\n if (\n !options[kForOnEventAttribute] &&\n listener[kListener] === handler &&\n !listener[kForOnEventAttribute]\n ) {\n return;\n }\n }\n\n let wrapper;\n\n if (type === 'message') {\n wrapper = function onMessage(data, isBinary) {\n const event = new MessageEvent('message', {\n data: isBinary ? data : data.toString()\n });\n\n event[kTarget] = this;\n callListener(handler, this, event);\n };\n } else if (type === 'close') {\n wrapper = function onClose(code, message) {\n const event = new CloseEvent('close', {\n code,\n reason: message.toString(),\n wasClean: this._closeFrameReceived && this._closeFrameSent\n });\n\n event[kTarget] = this;\n callListener(handler, this, event);\n };\n } else if (type === 'error') {\n wrapper = function onError(error) {\n const event = new ErrorEvent('error', {\n error,\n message: error.message\n });\n\n event[kTarget] = this;\n callListener(handler, this, event);\n };\n } else if (type === 'open') {\n wrapper = function onOpen() {\n const event = new Event('open');\n\n event[kTarget] = this;\n callListener(handler, this, event);\n };\n } else {\n return;\n }\n\n wrapper[kForOnEventAttribute] = !!options[kForOnEventAttribute];\n wrapper[kListener] = handler;\n\n if (options.once) {\n this.once(type, wrapper);\n } else {\n this.on(type, wrapper);\n }\n },\n\n /**\n * Remove an event listener.\n *\n * @param {String} type A string representing the event type to remove\n * @param {(Function|Object)} handler The listener to remove\n * @public\n */\n removeEventListener(type, handler) {\n for (const listener of this.listeners(type)) {\n if (listener[kListener] === handler && !listener[kForOnEventAttribute]) {\n this.removeListener(type, listener);\n break;\n }\n }\n }\n};\n\nmodule.exports = {\n CloseEvent,\n ErrorEvent,\n Event,\n EventTarget,\n MessageEvent\n};\n\n/**\n * Call an event listener\n *\n * @param {(Function|Object)} listener The listener to call\n * @param {*} thisArg The value to use as `this`` when calling the listener\n * @param {Event} event The event to pass to the listener\n * @private\n */\nfunction callListener(listener, thisArg, event) {\n if (typeof listener === 'object' && listener.handleEvent) {\n listener.handleEvent.call(listener, event);\n } else {\n listener.call(thisArg, event);\n }\n}\n","'use strict';\n\nconst { tokenChars } = require('./validation');\n\n/**\n * Adds an offer to the map of extension offers or a parameter to the map of\n * parameters.\n *\n * @param {Object} dest The map of extension offers or parameters\n * @param {String} name The extension or parameter name\n * @param {(Object|Boolean|String)} elem The extension parameters or the\n * parameter value\n * @private\n */\nfunction push(dest, name, elem) {\n if (dest[name] === undefined) dest[name] = [elem];\n else dest[name].push(elem);\n}\n\n/**\n * Parses the `Sec-WebSocket-Extensions` header into an object.\n *\n * @param {String} header The field value of the header\n * @return {Object} The parsed object\n * @public\n */\nfunction parse(header) {\n const offers = Object.create(null);\n let params = Object.create(null);\n let mustUnescape = false;\n let isEscaping = false;\n let inQuotes = false;\n let extensionName;\n let paramName;\n let start = -1;\n let code = -1;\n let end = -1;\n let i = 0;\n\n for (; i < header.length; i++) {\n code = header.charCodeAt(i);\n\n if (extensionName === undefined) {\n if (end === -1 && tokenChars[code] === 1) {\n if (start === -1) start = i;\n } else if (\n i !== 0 &&\n (code === 0x20 /* ' ' */ || code === 0x09) /* '\\t' */\n ) {\n if (end === -1 && start !== -1) end = i;\n } else if (code === 0x3b /* ';' */ || code === 0x2c /* ',' */) {\n if (start === -1) {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n\n if (end === -1) end = i;\n const name = header.slice(start, end);\n if (code === 0x2c) {\n push(offers, name, params);\n params = Object.create(null);\n } else {\n extensionName = name;\n }\n\n start = end = -1;\n } else {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n } else if (paramName === undefined) {\n if (end === -1 && tokenChars[code] === 1) {\n if (start === -1) start = i;\n } else if (code === 0x20 || code === 0x09) {\n if (end === -1 && start !== -1) end = i;\n } else if (code === 0x3b || code === 0x2c) {\n if (start === -1) {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n\n if (end === -1) end = i;\n push(params, header.slice(start, end), true);\n if (code === 0x2c) {\n push(offers, extensionName, params);\n params = Object.create(null);\n extensionName = undefined;\n }\n\n start = end = -1;\n } else if (code === 0x3d /* '=' */ && start !== -1 && end === -1) {\n paramName = header.slice(start, i);\n start = end = -1;\n } else {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n } else {\n //\n // The value of a quoted-string after unescaping must conform to the\n // token ABNF, so only token characters are valid.\n // Ref: https://tools.ietf.org/html/rfc6455#section-9.1\n //\n if (isEscaping) {\n if (tokenChars[code] !== 1) {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n if (start === -1) start = i;\n else if (!mustUnescape) mustUnescape = true;\n isEscaping = false;\n } else if (inQuotes) {\n if (tokenChars[code] === 1) {\n if (start === -1) start = i;\n } else if (code === 0x22 /* '\"' */ && start !== -1) {\n inQuotes = false;\n end = i;\n } else if (code === 0x5c /* '\\' */) {\n isEscaping = true;\n } else {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n } else if (code === 0x22 && header.charCodeAt(i - 1) === 0x3d) {\n inQuotes = true;\n } else if (end === -1 && tokenChars[code] === 1) {\n if (start === -1) start = i;\n } else if (start !== -1 && (code === 0x20 || code === 0x09)) {\n if (end === -1) end = i;\n } else if (code === 0x3b || code === 0x2c) {\n if (start === -1) {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n\n if (end === -1) end = i;\n let value = header.slice(start, end);\n if (mustUnescape) {\n value = value.replace(/\\\\/g, '');\n mustUnescape = false;\n }\n push(params, paramName, value);\n if (code === 0x2c) {\n push(offers, extensionName, params);\n params = Object.create(null);\n extensionName = undefined;\n }\n\n paramName = undefined;\n start = end = -1;\n } else {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n }\n }\n\n if (start === -1 || inQuotes || code === 0x20 || code === 0x09) {\n throw new SyntaxError('Unexpected end of input');\n }\n\n if (end === -1) end = i;\n const token = header.slice(start, end);\n if (extensionName === undefined) {\n push(offers, token, params);\n } else {\n if (paramName === undefined) {\n push(params, token, true);\n } else if (mustUnescape) {\n push(params, paramName, token.replace(/\\\\/g, ''));\n } else {\n push(params, paramName, token);\n }\n push(offers, extensionName, params);\n }\n\n return offers;\n}\n\n/**\n * Builds the `Sec-WebSocket-Extensions` header field value.\n *\n * @param {Object} extensions The map of extensions and parameters to format\n * @return {String} A string representing the given object\n * @public\n */\nfunction format(extensions) {\n return Object.keys(extensions)\n .map((extension) => {\n let configurations = extensions[extension];\n if (!Array.isArray(configurations)) configurations = [configurations];\n return configurations\n .map((params) => {\n return [extension]\n .concat(\n Object.keys(params).map((k) => {\n let values = params[k];\n if (!Array.isArray(values)) values = [values];\n return values\n .map((v) => (v === true ? k : `${k}=${v}`))\n .join('; ');\n })\n )\n .join('; ');\n })\n .join(', ');\n })\n .join(', ');\n}\n\nmodule.exports = { format, parse };\n","/* eslint no-unused-vars: [\"error\", { \"varsIgnorePattern\": \"^Duplex|Readable$\", \"caughtErrors\": \"none\" }] */\n\n'use strict';\n\nconst EventEmitter = require('events');\nconst https = require('https');\nconst http = require('http');\nconst net = require('net');\nconst tls = require('tls');\nconst { randomBytes, createHash } = require('crypto');\nconst { Duplex, Readable } = require('stream');\nconst { URL } = require('url');\n\nconst PerMessageDeflate = require('./permessage-deflate');\nconst Receiver = require('./receiver');\nconst Sender = require('./sender');\nconst { isBlob } = require('./validation');\n\nconst {\n BINARY_TYPES,\n CLOSE_TIMEOUT,\n EMPTY_BUFFER,\n GUID,\n kForOnEventAttribute,\n kListener,\n kStatusCode,\n kWebSocket,\n NOOP\n} = require('./constants');\nconst {\n EventTarget: { addEventListener, removeEventListener }\n} = require('./event-target');\nconst { format, parse } = require('./extension');\nconst { toBuffer } = require('./buffer-util');\n\nconst kAborted = Symbol('kAborted');\nconst protocolVersions = [8, 13];\nconst readyStates = ['CONNECTING', 'OPEN', 'CLOSING', 'CLOSED'];\nconst subprotocolRegex = /^[!#$%&'*+\\-.0-9A-Z^_`|a-z~]+$/;\n\n/**\n * Class representing a WebSocket.\n *\n * @extends EventEmitter\n */\nclass WebSocket extends EventEmitter {\n /**\n * Create a new `WebSocket`.\n *\n * @param {(String|URL)} address The URL to which to connect\n * @param {(String|String[])} [protocols] The subprotocols\n * @param {Object} [options] Connection options\n */\n constructor(address, protocols, options) {\n super();\n\n this._binaryType = BINARY_TYPES[0];\n this._closeCode = 1006;\n this._closeFrameReceived = false;\n this._closeFrameSent = false;\n this._closeMessage = EMPTY_BUFFER;\n this._closeTimer = null;\n this._errorEmitted = false;\n this._extensions = {};\n this._paused = false;\n this._protocol = '';\n this._readyState = WebSocket.CONNECTING;\n this._receiver = null;\n this._sender = null;\n this._socket = null;\n\n if (address !== null) {\n this._bufferedAmount = 0;\n this._isServer = false;\n this._redirects = 0;\n\n if (protocols === undefined) {\n protocols = [];\n } else if (!Array.isArray(protocols)) {\n if (typeof protocols === 'object' && protocols !== null) {\n options = protocols;\n protocols = [];\n } else {\n protocols = [protocols];\n }\n }\n\n initAsClient(this, address, protocols, options);\n } else {\n this._autoPong = options.autoPong;\n this._closeTimeout = options.closeTimeout;\n this._isServer = true;\n }\n }\n\n /**\n * For historical reasons, the custom \"nodebuffer\" type is used by the default\n * instead of \"blob\".\n *\n * @type {String}\n */\n get binaryType() {\n return this._binaryType;\n }\n\n set binaryType(type) {\n if (!BINARY_TYPES.includes(type)) return;\n\n this._binaryType = type;\n\n //\n // Allow to change `binaryType` on the fly.\n //\n if (this._receiver) this._receiver._binaryType = type;\n }\n\n /**\n * @type {Number}\n */\n get bufferedAmount() {\n if (!this._socket) return this._bufferedAmount;\n\n return this._socket._writableState.length + this._sender._bufferedBytes;\n }\n\n /**\n * @type {String}\n */\n get extensions() {\n return Object.keys(this._extensions).join();\n }\n\n /**\n * @type {Boolean}\n */\n get isPaused() {\n return this._paused;\n }\n\n /**\n * @type {Function}\n */\n /* istanbul ignore next */\n get onclose() {\n return null;\n }\n\n /**\n * @type {Function}\n */\n /* istanbul ignore next */\n get onerror() {\n return null;\n }\n\n /**\n * @type {Function}\n */\n /* istanbul ignore next */\n get onopen() {\n return null;\n }\n\n /**\n * @type {Function}\n */\n /* istanbul ignore next */\n get onmessage() {\n return null;\n }\n\n /**\n * @type {String}\n */\n get protocol() {\n return this._protocol;\n }\n\n /**\n * @type {Number}\n */\n get readyState() {\n return this._readyState;\n }\n\n /**\n * @type {String}\n */\n get url() {\n return this._url;\n }\n\n /**\n * Set up the socket and the internal resources.\n *\n * @param {Duplex} socket The network socket between the server and client\n * @param {Buffer} head The first packet of the upgraded stream\n * @param {Object} options Options object\n * @param {Boolean} [options.allowSynchronousEvents=false] Specifies whether\n * any of the `'message'`, `'ping'`, and `'pong'` events can be emitted\n * multiple times in the same tick\n * @param {Function} [options.generateMask] The function used to generate the\n * masking key\n * @param {Number} [options.maxPayload=0] The maximum allowed message size\n * @param {Boolean} [options.skipUTF8Validation=false] Specifies whether or\n * not to skip UTF-8 validation for text and close messages\n * @private\n */\n setSocket(socket, head, options) {\n const receiver = new Receiver({\n allowSynchronousEvents: options.allowSynchronousEvents,\n binaryType: this.binaryType,\n extensions: this._extensions,\n isServer: this._isServer,\n maxPayload: options.maxPayload,\n skipUTF8Validation: options.skipUTF8Validation\n });\n\n const sender = new Sender(socket, this._extensions, options.generateMask);\n\n this._receiver = receiver;\n this._sender = sender;\n this._socket = socket;\n\n receiver[kWebSocket] = this;\n sender[kWebSocket] = this;\n socket[kWebSocket] = this;\n\n receiver.on('conclude', receiverOnConclude);\n receiver.on('drain', receiverOnDrain);\n receiver.on('error', receiverOnError);\n receiver.on('message', receiverOnMessage);\n receiver.on('ping', receiverOnPing);\n receiver.on('pong', receiverOnPong);\n\n sender.onerror = senderOnError;\n\n //\n // These methods may not be available if `socket` is just a `Duplex`.\n //\n if (socket.setTimeout) socket.setTimeout(0);\n if (socket.setNoDelay) socket.setNoDelay();\n\n if (head.length > 0) socket.unshift(head);\n\n socket.on('close', socketOnClose);\n socket.on('data', socketOnData);\n socket.on('end', socketOnEnd);\n socket.on('error', socketOnError);\n\n this._readyState = WebSocket.OPEN;\n this.emit('open');\n }\n\n /**\n * Emit the `'close'` event.\n *\n * @private\n */\n emitClose() {\n if (!this._socket) {\n this._readyState = WebSocket.CLOSED;\n this.emit('close', this._closeCode, this._closeMessage);\n return;\n }\n\n if (this._extensions[PerMessageDeflate.extensionName]) {\n this._extensions[PerMessageDeflate.extensionName].cleanup();\n }\n\n this._receiver.removeAllListeners();\n this._readyState = WebSocket.CLOSED;\n this.emit('close', this._closeCode, this._closeMessage);\n }\n\n /**\n * Start a closing handshake.\n *\n * +----------+ +-----------+ +----------+\n * - - -|ws.close()|-->|close frame|-->|ws.close()|- - -\n * | +----------+ +-----------+ +----------+ |\n * +----------+ +-----------+ |\n * CLOSING |ws.close()|<--|close frame|<--+-----+ CLOSING\n * +----------+ +-----------+ |\n * | | | +---+ |\n * +------------------------+-->|fin| - - - -\n * | +---+ | +---+\n * - - - - -|fin|<---------------------+\n * +---+\n *\n * @param {Number} [code] Status code explaining why the connection is closing\n * @param {(String|Buffer)} [data] The reason why the connection is\n * closing\n * @public\n */\n close(code, data) {\n if (this.readyState === WebSocket.CLOSED) return;\n if (this.readyState === WebSocket.CONNECTING) {\n const msg = 'WebSocket was closed before the connection was established';\n abortHandshake(this, this._req, msg);\n return;\n }\n\n if (this.readyState === WebSocket.CLOSING) {\n if (\n this._closeFrameSent &&\n (this._closeFrameReceived || this._receiver._writableState.errorEmitted)\n ) {\n this._socket.end();\n }\n\n return;\n }\n\n this._readyState = WebSocket.CLOSING;\n this._sender.close(code, data, !this._isServer, (err) => {\n //\n // This error is handled by the `'error'` listener on the socket. We only\n // want to know if the close frame has been sent here.\n //\n if (err) return;\n\n this._closeFrameSent = true;\n\n if (\n this._closeFrameReceived ||\n this._receiver._writableState.errorEmitted\n ) {\n this._socket.end();\n }\n });\n\n setCloseTimer(this);\n }\n\n /**\n * Pause the socket.\n *\n * @public\n */\n pause() {\n if (\n this.readyState === WebSocket.CONNECTING ||\n this.readyState === WebSocket.CLOSED\n ) {\n return;\n }\n\n this._paused = true;\n this._socket.pause();\n }\n\n /**\n * Send a ping.\n *\n * @param {*} [data] The data to send\n * @param {Boolean} [mask] Indicates whether or not to mask `data`\n * @param {Function} [cb] Callback which is executed when the ping is sent\n * @public\n */\n ping(data, mask, cb) {\n if (this.readyState === WebSocket.CONNECTING) {\n throw new Error('WebSocket is not open: readyState 0 (CONNECTING)');\n }\n\n if (typeof data === 'function') {\n cb = data;\n data = mask = undefined;\n } else if (typeof mask === 'function') {\n cb = mask;\n mask = undefined;\n }\n\n if (typeof data === 'number') data = data.toString();\n\n if (this.readyState !== WebSocket.OPEN) {\n sendAfterClose(this, data, cb);\n return;\n }\n\n if (mask === undefined) mask = !this._isServer;\n this._sender.ping(data || EMPTY_BUFFER, mask, cb);\n }\n\n /**\n * Send a pong.\n *\n * @param {*} [data] The data to send\n * @param {Boolean} [mask] Indicates whether or not to mask `data`\n * @param {Function} [cb] Callback which is executed when the pong is sent\n * @public\n */\n pong(data, mask, cb) {\n if (this.readyState === WebSocket.CONNECTING) {\n throw new Error('WebSocket is not open: readyState 0 (CONNECTING)');\n }\n\n if (typeof data === 'function') {\n cb = data;\n data = mask = undefined;\n } else if (typeof mask === 'function') {\n cb = mask;\n mask = undefined;\n }\n\n if (typeof data === 'number') data = data.toString();\n\n if (this.readyState !== WebSocket.OPEN) {\n sendAfterClose(this, data, cb);\n return;\n }\n\n if (mask === undefined) mask = !this._isServer;\n this._sender.pong(data || EMPTY_BUFFER, mask, cb);\n }\n\n /**\n * Resume the socket.\n *\n * @public\n */\n resume() {\n if (\n this.readyState === WebSocket.CONNECTING ||\n this.readyState === WebSocket.CLOSED\n ) {\n return;\n }\n\n this._paused = false;\n if (!this._receiver._writableState.needDrain) this._socket.resume();\n }\n\n /**\n * Send a data message.\n *\n * @param {*} data The message to send\n * @param {Object} [options] Options object\n * @param {Boolean} [options.binary] Specifies whether `data` is binary or\n * text\n * @param {Boolean} [options.compress] Specifies whether or not to compress\n * `data`\n * @param {Boolean} [options.fin=true] Specifies whether the fragment is the\n * last one\n * @param {Boolean} [options.mask] Specifies whether or not to mask `data`\n * @param {Function} [cb] Callback which is executed when data is written out\n * @public\n */\n send(data, options, cb) {\n if (this.readyState === WebSocket.CONNECTING) {\n throw new Error('WebSocket is not open: readyState 0 (CONNECTING)');\n }\n\n if (typeof options === 'function') {\n cb = options;\n options = {};\n }\n\n if (typeof data === 'number') data = data.toString();\n\n if (this.readyState !== WebSocket.OPEN) {\n sendAfterClose(this, data, cb);\n return;\n }\n\n const opts = {\n binary: typeof data !== 'string',\n mask: !this._isServer,\n compress: true,\n fin: true,\n ...options\n };\n\n if (!this._extensions[PerMessageDeflate.extensionName]) {\n opts.compress = false;\n }\n\n this._sender.send(data || EMPTY_BUFFER, opts, cb);\n }\n\n /**\n * Forcibly close the connection.\n *\n * @public\n */\n terminate() {\n if (this.readyState === WebSocket.CLOSED) return;\n if (this.readyState === WebSocket.CONNECTING) {\n const msg = 'WebSocket was closed before the connection was established';\n abortHandshake(this, this._req, msg);\n return;\n }\n\n if (this._socket) {\n this._readyState = WebSocket.CLOSING;\n this._socket.destroy();\n }\n }\n}\n\n/**\n * @constant {Number} CONNECTING\n * @memberof WebSocket\n */\nObject.defineProperty(WebSocket, 'CONNECTING', {\n enumerable: true,\n value: readyStates.indexOf('CONNECTING')\n});\n\n/**\n * @constant {Number} CONNECTING\n * @memberof WebSocket.prototype\n */\nObject.defineProperty(WebSocket.prototype, 'CONNECTING', {\n enumerable: true,\n value: readyStates.indexOf('CONNECTING')\n});\n\n/**\n * @constant {Number} OPEN\n * @memberof WebSocket\n */\nObject.defineProperty(WebSocket, 'OPEN', {\n enumerable: true,\n value: readyStates.indexOf('OPEN')\n});\n\n/**\n * @constant {Number} OPEN\n * @memberof WebSocket.prototype\n */\nObject.defineProperty(WebSocket.prototype, 'OPEN', {\n enumerable: true,\n value: readyStates.indexOf('OPEN')\n});\n\n/**\n * @constant {Number} CLOSING\n * @memberof WebSocket\n */\nObject.defineProperty(WebSocket, 'CLOSING', {\n enumerable: true,\n value: readyStates.indexOf('CLOSING')\n});\n\n/**\n * @constant {Number} CLOSING\n * @memberof WebSocket.prototype\n */\nObject.defineProperty(WebSocket.prototype, 'CLOSING', {\n enumerable: true,\n value: readyStates.indexOf('CLOSING')\n});\n\n/**\n * @constant {Number} CLOSED\n * @memberof WebSocket\n */\nObject.defineProperty(WebSocket, 'CLOSED', {\n enumerable: true,\n value: readyStates.indexOf('CLOSED')\n});\n\n/**\n * @constant {Number} CLOSED\n * @memberof WebSocket.prototype\n */\nObject.defineProperty(WebSocket.prototype, 'CLOSED', {\n enumerable: true,\n value: readyStates.indexOf('CLOSED')\n});\n\n[\n 'binaryType',\n 'bufferedAmount',\n 'extensions',\n 'isPaused',\n 'protocol',\n 'readyState',\n 'url'\n].forEach((property) => {\n Object.defineProperty(WebSocket.prototype, property, { enumerable: true });\n});\n\n//\n// Add the `onopen`, `onerror`, `onclose`, and `onmessage` attributes.\n// See https://html.spec.whatwg.org/multipage/comms.html#the-websocket-interface\n//\n['open', 'error', 'close', 'message'].forEach((method) => {\n Object.defineProperty(WebSocket.prototype, `on${method}`, {\n enumerable: true,\n get() {\n for (const listener of this.listeners(method)) {\n if (listener[kForOnEventAttribute]) return listener[kListener];\n }\n\n return null;\n },\n set(handler) {\n for (const listener of this.listeners(method)) {\n if (listener[kForOnEventAttribute]) {\n this.removeListener(method, listener);\n break;\n }\n }\n\n if (typeof handler !== 'function') return;\n\n this.addEventListener(method, handler, {\n [kForOnEventAttribute]: true\n });\n }\n });\n});\n\nWebSocket.prototype.addEventListener = addEventListener;\nWebSocket.prototype.removeEventListener = removeEventListener;\n\nmodule.exports = WebSocket;\n\n/**\n * Initialize a WebSocket client.\n *\n * @param {WebSocket} websocket The client to initialize\n * @param {(String|URL)} address The URL to which to connect\n * @param {Array} protocols The subprotocols\n * @param {Object} [options] Connection options\n * @param {Boolean} [options.allowSynchronousEvents=true] Specifies whether any\n * of the `'message'`, `'ping'`, and `'pong'` events can be emitted multiple\n * times in the same tick\n * @param {Boolean} [options.autoPong=true] Specifies whether or not to\n * automatically send a pong in response to a ping\n * @param {Number} [options.closeTimeout=30000] Duration in milliseconds to wait\n * for the closing handshake to finish after `websocket.close()` is called\n * @param {Function} [options.finishRequest] A function which can be used to\n * customize the headers of each http request before it is sent\n * @param {Boolean} [options.followRedirects=false] Whether or not to follow\n * redirects\n * @param {Function} [options.generateMask] The function used to generate the\n * masking key\n * @param {Number} [options.handshakeTimeout] Timeout in milliseconds for the\n * handshake request\n * @param {Number} [options.maxPayload=104857600] The maximum allowed message\n * size\n * @param {Number} [options.maxRedirects=10] The maximum number of redirects\n * allowed\n * @param {String} [options.origin] Value of the `Origin` or\n * `Sec-WebSocket-Origin` header\n * @param {(Boolean|Object)} [options.perMessageDeflate=true] Enable/disable\n * permessage-deflate\n * @param {Number} [options.protocolVersion=13] Value of the\n * `Sec-WebSocket-Version` header\n * @param {Boolean} [options.skipUTF8Validation=false] Specifies whether or\n * not to skip UTF-8 validation for text and close messages\n * @private\n */\nfunction initAsClient(websocket, address, protocols, options) {\n const opts = {\n allowSynchronousEvents: true,\n autoPong: true,\n closeTimeout: CLOSE_TIMEOUT,\n protocolVersion: protocolVersions[1],\n maxPayload: 100 * 1024 * 1024,\n skipUTF8Validation: false,\n perMessageDeflate: true,\n followRedirects: false,\n maxRedirects: 10,\n ...options,\n socketPath: undefined,\n hostname: undefined,\n protocol: undefined,\n timeout: undefined,\n method: 'GET',\n host: undefined,\n path: undefined,\n port: undefined\n };\n\n websocket._autoPong = opts.autoPong;\n websocket._closeTimeout = opts.closeTimeout;\n\n if (!protocolVersions.includes(opts.protocolVersion)) {\n throw new RangeError(\n `Unsupported protocol version: ${opts.protocolVersion} ` +\n `(supported versions: ${protocolVersions.join(', ')})`\n );\n }\n\n let parsedUrl;\n\n if (address instanceof URL) {\n parsedUrl = address;\n } else {\n try {\n parsedUrl = new URL(address);\n } catch (e) {\n throw new SyntaxError(`Invalid URL: ${address}`);\n }\n }\n\n if (parsedUrl.protocol === 'http:') {\n parsedUrl.protocol = 'ws:';\n } else if (parsedUrl.protocol === 'https:') {\n parsedUrl.protocol = 'wss:';\n }\n\n websocket._url = parsedUrl.href;\n\n const isSecure = parsedUrl.protocol === 'wss:';\n const isIpcUrl = parsedUrl.protocol === 'ws+unix:';\n let invalidUrlMessage;\n\n if (parsedUrl.protocol !== 'ws:' && !isSecure && !isIpcUrl) {\n invalidUrlMessage =\n 'The URL\\'s protocol must be one of \"ws:\", \"wss:\", ' +\n '\"http:\", \"https:\", or \"ws+unix:\"';\n } else if (isIpcUrl && !parsedUrl.pathname) {\n invalidUrlMessage = \"The URL's pathname is empty\";\n } else if (parsedUrl.hash) {\n invalidUrlMessage = 'The URL contains a fragment identifier';\n }\n\n if (invalidUrlMessage) {\n const err = new SyntaxError(invalidUrlMessage);\n\n if (websocket._redirects === 0) {\n throw err;\n } else {\n emitErrorAndClose(websocket, err);\n return;\n }\n }\n\n const defaultPort = isSecure ? 443 : 80;\n const key = randomBytes(16).toString('base64');\n const request = isSecure ? https.request : http.request;\n const protocolSet = new Set();\n let perMessageDeflate;\n\n opts.createConnection =\n opts.createConnection || (isSecure ? tlsConnect : netConnect);\n opts.defaultPort = opts.defaultPort || defaultPort;\n opts.port = parsedUrl.port || defaultPort;\n opts.host = parsedUrl.hostname.startsWith('[')\n ? parsedUrl.hostname.slice(1, -1)\n : parsedUrl.hostname;\n opts.headers = {\n ...opts.headers,\n 'Sec-WebSocket-Version': opts.protocolVersion,\n 'Sec-WebSocket-Key': key,\n Connection: 'Upgrade',\n Upgrade: 'websocket'\n };\n opts.path = parsedUrl.pathname + parsedUrl.search;\n opts.timeout = opts.handshakeTimeout;\n\n if (opts.perMessageDeflate) {\n perMessageDeflate = new PerMessageDeflate(\n opts.perMessageDeflate !== true ? opts.perMessageDeflate : {},\n false,\n opts.maxPayload\n );\n opts.headers['Sec-WebSocket-Extensions'] = format({\n [PerMessageDeflate.extensionName]: perMessageDeflate.offer()\n });\n }\n if (protocols.length) {\n for (const protocol of protocols) {\n if (\n typeof protocol !== 'string' ||\n !subprotocolRegex.test(protocol) ||\n protocolSet.has(protocol)\n ) {\n throw new SyntaxError(\n 'An invalid or duplicated subprotocol was specified'\n );\n }\n\n protocolSet.add(protocol);\n }\n\n opts.headers['Sec-WebSocket-Protocol'] = protocols.join(',');\n }\n if (opts.origin) {\n if (opts.protocolVersion < 13) {\n opts.headers['Sec-WebSocket-Origin'] = opts.origin;\n } else {\n opts.headers.Origin = opts.origin;\n }\n }\n if (parsedUrl.username || parsedUrl.password) {\n opts.auth = `${parsedUrl.username}:${parsedUrl.password}`;\n }\n\n if (isIpcUrl) {\n const parts = opts.path.split(':');\n\n opts.socketPath = parts[0];\n opts.path = parts[1];\n }\n\n let req;\n\n if (opts.followRedirects) {\n if (websocket._redirects === 0) {\n websocket._originalIpc = isIpcUrl;\n websocket._originalSecure = isSecure;\n websocket._originalHostOrSocketPath = isIpcUrl\n ? opts.socketPath\n : parsedUrl.host;\n\n const headers = options && options.headers;\n\n //\n // Shallow copy the user provided options so that headers can be changed\n // without mutating the original object.\n //\n options = { ...options, headers: {} };\n\n if (headers) {\n for (const [key, value] of Object.entries(headers)) {\n options.headers[key.toLowerCase()] = value;\n }\n }\n } else if (websocket.listenerCount('redirect') === 0) {\n const isSameHost = isIpcUrl\n ? websocket._originalIpc\n ? opts.socketPath === websocket._originalHostOrSocketPath\n : false\n : websocket._originalIpc\n ? false\n : parsedUrl.host === websocket._originalHostOrSocketPath;\n\n if (!isSameHost || (websocket._originalSecure && !isSecure)) {\n //\n // Match curl 7.77.0 behavior and drop the following headers. These\n // headers are also dropped when following a redirect to a subdomain.\n //\n delete opts.headers.authorization;\n delete opts.headers.cookie;\n\n if (!isSameHost) delete opts.headers.host;\n\n opts.auth = undefined;\n }\n }\n\n //\n // Match curl 7.77.0 behavior and make the first `Authorization` header win.\n // If the `Authorization` header is set, then there is nothing to do as it\n // will take precedence.\n //\n if (opts.auth && !options.headers.authorization) {\n options.headers.authorization =\n 'Basic ' + Buffer.from(opts.auth).toString('base64');\n }\n\n req = websocket._req = request(opts);\n\n if (websocket._redirects) {\n //\n // Unlike what is done for the `'upgrade'` event, no early exit is\n // triggered here if the user calls `websocket.close()` or\n // `websocket.terminate()` from a listener of the `'redirect'` event. This\n // is because the user can also call `request.destroy()` with an error\n // before calling `websocket.close()` or `websocket.terminate()` and this\n // would result in an error being emitted on the `request` object with no\n // `'error'` event listeners attached.\n //\n websocket.emit('redirect', websocket.url, req);\n }\n } else {\n req = websocket._req = request(opts);\n }\n\n if (opts.timeout) {\n req.on('timeout', () => {\n abortHandshake(websocket, req, 'Opening handshake has timed out');\n });\n }\n\n req.on('error', (err) => {\n if (req === null || req[kAborted]) return;\n\n req = websocket._req = null;\n emitErrorAndClose(websocket, err);\n });\n\n req.on('response', (res) => {\n const location = res.headers.location;\n const statusCode = res.statusCode;\n\n if (\n location &&\n opts.followRedirects &&\n statusCode >= 300 &&\n statusCode < 400\n ) {\n if (++websocket._redirects > opts.maxRedirects) {\n abortHandshake(websocket, req, 'Maximum redirects exceeded');\n return;\n }\n\n req.abort();\n\n let addr;\n\n try {\n addr = new URL(location, address);\n } catch (e) {\n const err = new SyntaxError(`Invalid URL: ${location}`);\n emitErrorAndClose(websocket, err);\n return;\n }\n\n initAsClient(websocket, addr, protocols, options);\n } else if (!websocket.emit('unexpected-response', req, res)) {\n abortHandshake(\n websocket,\n req,\n `Unexpected server response: ${res.statusCode}`\n );\n }\n });\n\n req.on('upgrade', (res, socket, head) => {\n websocket.emit('upgrade', res);\n\n //\n // The user may have closed the connection from a listener of the\n // `'upgrade'` event.\n //\n if (websocket.readyState !== WebSocket.CONNECTING) return;\n\n req = websocket._req = null;\n\n const upgrade = res.headers.upgrade;\n\n if (upgrade === undefined || upgrade.toLowerCase() !== 'websocket') {\n abortHandshake(websocket, socket, 'Invalid Upgrade header');\n return;\n }\n\n const digest = createHash('sha1')\n .update(key + GUID)\n .digest('base64');\n\n if (res.headers['sec-websocket-accept'] !== digest) {\n abortHandshake(websocket, socket, 'Invalid Sec-WebSocket-Accept header');\n return;\n }\n\n const serverProt = res.headers['sec-websocket-protocol'];\n let protError;\n\n if (serverProt !== undefined) {\n if (!protocolSet.size) {\n protError = 'Server sent a subprotocol but none was requested';\n } else if (!protocolSet.has(serverProt)) {\n protError = 'Server sent an invalid subprotocol';\n }\n } else if (protocolSet.size) {\n protError = 'Server sent no subprotocol';\n }\n\n if (protError) {\n abortHandshake(websocket, socket, protError);\n return;\n }\n\n if (serverProt) websocket._protocol = serverProt;\n\n const secWebSocketExtensions = res.headers['sec-websocket-extensions'];\n\n if (secWebSocketExtensions !== undefined) {\n if (!perMessageDeflate) {\n const message =\n 'Server sent a Sec-WebSocket-Extensions header but no extension ' +\n 'was requested';\n abortHandshake(websocket, socket, message);\n return;\n }\n\n let extensions;\n\n try {\n extensions = parse(secWebSocketExtensions);\n } catch (err) {\n const message = 'Invalid Sec-WebSocket-Extensions header';\n abortHandshake(websocket, socket, message);\n return;\n }\n\n const extensionNames = Object.keys(extensions);\n\n if (\n extensionNames.length !== 1 ||\n extensionNames[0] !== PerMessageDeflate.extensionName\n ) {\n const message = 'Server indicated an extension that was not requested';\n abortHandshake(websocket, socket, message);\n return;\n }\n\n try {\n perMessageDeflate.accept(extensions[PerMessageDeflate.extensionName]);\n } catch (err) {\n const message = 'Invalid Sec-WebSocket-Extensions header';\n abortHandshake(websocket, socket, message);\n return;\n }\n\n websocket._extensions[PerMessageDeflate.extensionName] =\n perMessageDeflate;\n }\n\n websocket.setSocket(socket, head, {\n allowSynchronousEvents: opts.allowSynchronousEvents,\n generateMask: opts.generateMask,\n maxPayload: opts.maxPayload,\n skipUTF8Validation: opts.skipUTF8Validation\n });\n });\n\n if (opts.finishRequest) {\n opts.finishRequest(req, websocket);\n } else {\n req.end();\n }\n}\n\n/**\n * Emit the `'error'` and `'close'` events.\n *\n * @param {WebSocket} websocket The WebSocket instance\n * @param {Error} The error to emit\n * @private\n */\nfunction emitErrorAndClose(websocket, err) {\n websocket._readyState = WebSocket.CLOSING;\n //\n // The following assignment is practically useless and is done only for\n // consistency.\n //\n websocket._errorEmitted = true;\n websocket.emit('error', err);\n websocket.emitClose();\n}\n\n/**\n * Create a `net.Socket` and initiate a connection.\n *\n * @param {Object} options Connection options\n * @return {net.Socket} The newly created socket used to start the connection\n * @private\n */\nfunction netConnect(options) {\n options.path = options.socketPath;\n return net.connect(options);\n}\n\n/**\n * Create a `tls.TLSSocket` and initiate a connection.\n *\n * @param {Object} options Connection options\n * @return {tls.TLSSocket} The newly created socket used to start the connection\n * @private\n */\nfunction tlsConnect(options) {\n options.path = undefined;\n\n if (!options.servername && options.servername !== '') {\n options.servername = net.isIP(options.host) ? '' : options.host;\n }\n\n return tls.connect(options);\n}\n\n/**\n * Abort the handshake and emit an error.\n *\n * @param {WebSocket} websocket The WebSocket instance\n * @param {(http.ClientRequest|net.Socket|tls.Socket)} stream The request to\n * abort or the socket to destroy\n * @param {String} message The error message\n * @private\n */\nfunction abortHandshake(websocket, stream, message) {\n websocket._readyState = WebSocket.CLOSING;\n\n const err = new Error(message);\n Error.captureStackTrace(err, abortHandshake);\n\n if (stream.setHeader) {\n stream[kAborted] = true;\n stream.abort();\n\n if (stream.socket && !stream.socket.destroyed) {\n //\n // On Node.js >= 14.3.0 `request.abort()` does not destroy the socket if\n // called after the request completed. See\n // https://github.com/websockets/ws/issues/1869.\n //\n stream.socket.destroy();\n }\n\n process.nextTick(emitErrorAndClose, websocket, err);\n } else {\n stream.destroy(err);\n stream.once('error', websocket.emit.bind(websocket, 'error'));\n stream.once('close', websocket.emitClose.bind(websocket));\n }\n}\n\n/**\n * Handle cases where the `ping()`, `pong()`, or `send()` methods are called\n * when the `readyState` attribute is `CLOSING` or `CLOSED`.\n *\n * @param {WebSocket} websocket The WebSocket instance\n * @param {*} [data] The data to send\n * @param {Function} [cb] Callback\n * @private\n */\nfunction sendAfterClose(websocket, data, cb) {\n if (data) {\n const length = isBlob(data) ? data.size : toBuffer(data).length;\n\n //\n // The `_bufferedAmount` property is used only when the peer is a client and\n // the opening handshake fails. Under these circumstances, in fact, the\n // `setSocket()` method is not called, so the `_socket` and `_sender`\n // properties are set to `null`.\n //\n if (websocket._socket) websocket._sender._bufferedBytes += length;\n else websocket._bufferedAmount += length;\n }\n\n if (cb) {\n const err = new Error(\n `WebSocket is not open: readyState ${websocket.readyState} ` +\n `(${readyStates[websocket.readyState]})`\n );\n process.nextTick(cb, err);\n }\n}\n\n/**\n * The listener of the `Receiver` `'conclude'` event.\n *\n * @param {Number} code The status code\n * @param {Buffer} reason The reason for closing\n * @private\n */\nfunction receiverOnConclude(code, reason) {\n const websocket = this[kWebSocket];\n\n websocket._closeFrameReceived = true;\n websocket._closeMessage = reason;\n websocket._closeCode = code;\n\n if (websocket._socket[kWebSocket] === undefined) return;\n\n websocket._socket.removeListener('data', socketOnData);\n process.nextTick(resume, websocket._socket);\n\n if (code === 1005) websocket.close();\n else websocket.close(code, reason);\n}\n\n/**\n * The listener of the `Receiver` `'drain'` event.\n *\n * @private\n */\nfunction receiverOnDrain() {\n const websocket = this[kWebSocket];\n\n if (!websocket.isPaused) websocket._socket.resume();\n}\n\n/**\n * The listener of the `Receiver` `'error'` event.\n *\n * @param {(RangeError|Error)} err The emitted error\n * @private\n */\nfunction receiverOnError(err) {\n const websocket = this[kWebSocket];\n\n if (websocket._socket[kWebSocket] !== undefined) {\n websocket._socket.removeListener('data', socketOnData);\n\n //\n // On Node.js < 14.0.0 the `'error'` event is emitted synchronously. See\n // https://github.com/websockets/ws/issues/1940.\n //\n process.nextTick(resume, websocket._socket);\n\n websocket.close(err[kStatusCode]);\n }\n\n if (!websocket._errorEmitted) {\n websocket._errorEmitted = true;\n websocket.emit('error', err);\n }\n}\n\n/**\n * The listener of the `Receiver` `'finish'` event.\n *\n * @private\n */\nfunction receiverOnFinish() {\n this[kWebSocket].emitClose();\n}\n\n/**\n * The listener of the `Receiver` `'message'` event.\n *\n * @param {Buffer|ArrayBuffer|Buffer[])} data The message\n * @param {Boolean} isBinary Specifies whether the message is binary or not\n * @private\n */\nfunction receiverOnMessage(data, isBinary) {\n this[kWebSocket].emit('message', data, isBinary);\n}\n\n/**\n * The listener of the `Receiver` `'ping'` event.\n *\n * @param {Buffer} data The data included in the ping frame\n * @private\n */\nfunction receiverOnPing(data) {\n const websocket = this[kWebSocket];\n\n if (websocket._autoPong) websocket.pong(data, !this._isServer, NOOP);\n websocket.emit('ping', data);\n}\n\n/**\n * The listener of the `Receiver` `'pong'` event.\n *\n * @param {Buffer} data The data included in the pong frame\n * @private\n */\nfunction receiverOnPong(data) {\n this[kWebSocket].emit('pong', data);\n}\n\n/**\n * Resume a readable stream\n *\n * @param {Readable} stream The readable stream\n * @private\n */\nfunction resume(stream) {\n stream.resume();\n}\n\n/**\n * The `Sender` error event handler.\n *\n * @param {Error} The error\n * @private\n */\nfunction senderOnError(err) {\n const websocket = this[kWebSocket];\n\n if (websocket.readyState === WebSocket.CLOSED) return;\n if (websocket.readyState === WebSocket.OPEN) {\n websocket._readyState = WebSocket.CLOSING;\n setCloseTimer(websocket);\n }\n\n //\n // `socket.end()` is used instead of `socket.destroy()` to allow the other\n // peer to finish sending queued data. There is no need to set a timer here\n // because `CLOSING` means that it is already set or not needed.\n //\n this._socket.end();\n\n if (!websocket._errorEmitted) {\n websocket._errorEmitted = true;\n websocket.emit('error', err);\n }\n}\n\n/**\n * Set a timer to destroy the underlying raw socket of a WebSocket.\n *\n * @param {WebSocket} websocket The WebSocket instance\n * @private\n */\nfunction setCloseTimer(websocket) {\n websocket._closeTimer = setTimeout(\n websocket._socket.destroy.bind(websocket._socket),\n websocket._closeTimeout\n );\n}\n\n/**\n * The listener of the socket `'close'` event.\n *\n * @private\n */\nfunction socketOnClose() {\n const websocket = this[kWebSocket];\n\n this.removeListener('close', socketOnClose);\n this.removeListener('data', socketOnData);\n this.removeListener('end', socketOnEnd);\n\n websocket._readyState = WebSocket.CLOSING;\n\n //\n // The close frame might not have been received or the `'end'` event emitted,\n // for example, if the socket was destroyed due to an error. Ensure that the\n // `receiver` stream is closed after writing any remaining buffered data to\n // it. If the readable side of the socket is in flowing mode then there is no\n // buffered data as everything has been already written. If instead, the\n // socket is paused, any possible buffered data will be read as a single\n // chunk.\n //\n if (\n !this._readableState.endEmitted &&\n !websocket._closeFrameReceived &&\n !websocket._receiver._writableState.errorEmitted &&\n this._readableState.length !== 0\n ) {\n const chunk = this.read(this._readableState.length);\n\n websocket._receiver.write(chunk);\n }\n\n websocket._receiver.end();\n\n this[kWebSocket] = undefined;\n\n clearTimeout(websocket._closeTimer);\n\n if (\n websocket._receiver._writableState.finished ||\n websocket._receiver._writableState.errorEmitted\n ) {\n websocket.emitClose();\n } else {\n websocket._receiver.on('error', receiverOnFinish);\n websocket._receiver.on('finish', receiverOnFinish);\n }\n}\n\n/**\n * The listener of the socket `'data'` event.\n *\n * @param {Buffer} chunk A chunk of data\n * @private\n */\nfunction socketOnData(chunk) {\n if (!this[kWebSocket]._receiver.write(chunk)) {\n this.pause();\n }\n}\n\n/**\n * The listener of the socket `'end'` event.\n *\n * @private\n */\nfunction socketOnEnd() {\n const websocket = this[kWebSocket];\n\n websocket._readyState = WebSocket.CLOSING;\n websocket._receiver.end();\n this.end();\n}\n\n/**\n * The listener of the socket `'error'` event.\n *\n * @private\n */\nfunction socketOnError() {\n const websocket = this[kWebSocket];\n\n this.removeListener('error', socketOnError);\n this.on('error', NOOP);\n\n if (websocket) {\n websocket._readyState = WebSocket.CLOSING;\n this.destroy();\n }\n}\n","/* eslint no-unused-vars: [\"error\", { \"varsIgnorePattern\": \"^WebSocket$\" }] */\n'use strict';\n\nconst WebSocket = require('./websocket');\nconst { Duplex } = require('stream');\n\n/**\n * Emits the `'close'` event on a stream.\n *\n * @param {Duplex} stream The stream.\n * @private\n */\nfunction emitClose(stream) {\n stream.emit('close');\n}\n\n/**\n * The listener of the `'end'` event.\n *\n * @private\n */\nfunction duplexOnEnd() {\n if (!this.destroyed && this._writableState.finished) {\n this.destroy();\n }\n}\n\n/**\n * The listener of the `'error'` event.\n *\n * @param {Error} err The error\n * @private\n */\nfunction duplexOnError(err) {\n this.removeListener('error', duplexOnError);\n this.destroy();\n if (this.listenerCount('error') === 0) {\n // Do not suppress the throwing behavior.\n this.emit('error', err);\n }\n}\n\n/**\n * Wraps a `WebSocket` in a duplex stream.\n *\n * @param {WebSocket} ws The `WebSocket` to wrap\n * @param {Object} [options] The options for the `Duplex` constructor\n * @return {Duplex} The duplex stream\n * @public\n */\nfunction createWebSocketStream(ws, options) {\n let terminateOnDestroy = true;\n\n const duplex = new Duplex({\n ...options,\n autoDestroy: false,\n emitClose: false,\n objectMode: false,\n writableObjectMode: false\n });\n\n ws.on('message', function message(msg, isBinary) {\n const data =\n !isBinary && duplex._readableState.objectMode ? msg.toString() : msg;\n\n if (!duplex.push(data)) ws.pause();\n });\n\n ws.once('error', function error(err) {\n if (duplex.destroyed) return;\n\n // Prevent `ws.terminate()` from being called by `duplex._destroy()`.\n //\n // - If the `'error'` event is emitted before the `'open'` event, then\n // `ws.terminate()` is a noop as no socket is assigned.\n // - Otherwise, the error is re-emitted by the listener of the `'error'`\n // event of the `Receiver` object. The listener already closes the\n // connection by calling `ws.close()`. This allows a close frame to be\n // sent to the other peer. If `ws.terminate()` is called right after this,\n // then the close frame might not be sent.\n terminateOnDestroy = false;\n duplex.destroy(err);\n });\n\n ws.once('close', function close() {\n if (duplex.destroyed) return;\n\n duplex.push(null);\n });\n\n duplex._destroy = function (err, callback) {\n if (ws.readyState === ws.CLOSED) {\n callback(err);\n process.nextTick(emitClose, duplex);\n return;\n }\n\n let called = false;\n\n ws.once('error', function error(err) {\n called = true;\n callback(err);\n });\n\n ws.once('close', function close() {\n if (!called) callback(err);\n process.nextTick(emitClose, duplex);\n });\n\n if (terminateOnDestroy) ws.terminate();\n };\n\n duplex._final = function (callback) {\n if (ws.readyState === ws.CONNECTING) {\n ws.once('open', function open() {\n duplex._final(callback);\n });\n return;\n }\n\n // If the value of the `_socket` property is `null` it means that `ws` is a\n // client websocket and the handshake failed. In fact, when this happens, a\n // socket is never assigned to the websocket. Wait for the `'error'` event\n // that will be emitted by the websocket.\n if (ws._socket === null) return;\n\n if (ws._socket._writableState.finished) {\n callback();\n if (duplex._readableState.endEmitted) duplex.destroy();\n } else {\n ws._socket.once('finish', function finish() {\n // `duplex` is not destroyed here because the `'end'` event will be\n // emitted on `duplex` after this `'finish'` event. The EOF signaling\n // `null` chunk is, in fact, pushed when the websocket emits `'close'`.\n callback();\n });\n ws.close();\n }\n };\n\n duplex._read = function () {\n if (ws.isPaused) ws.resume();\n };\n\n duplex._write = function (chunk, encoding, callback) {\n if (ws.readyState === ws.CONNECTING) {\n ws.once('open', function open() {\n duplex._write(chunk, encoding, callback);\n });\n return;\n }\n\n ws.send(chunk, callback);\n };\n\n duplex.on('end', duplexOnEnd);\n duplex.on('error', duplexOnError);\n return duplex;\n}\n\nmodule.exports = createWebSocketStream;\n","'use strict';\n\nconst { tokenChars } = require('./validation');\n\n/**\n * Parses the `Sec-WebSocket-Protocol` header into a set of subprotocol names.\n *\n * @param {String} header The field value of the header\n * @return {Set} The subprotocol names\n * @public\n */\nfunction parse(header) {\n const protocols = new Set();\n let start = -1;\n let end = -1;\n let i = 0;\n\n for (i; i < header.length; i++) {\n const code = header.charCodeAt(i);\n\n if (end === -1 && tokenChars[code] === 1) {\n if (start === -1) start = i;\n } else if (\n i !== 0 &&\n (code === 0x20 /* ' ' */ || code === 0x09) /* '\\t' */\n ) {\n if (end === -1 && start !== -1) end = i;\n } else if (code === 0x2c /* ',' */) {\n if (start === -1) {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n\n if (end === -1) end = i;\n\n const protocol = header.slice(start, end);\n\n if (protocols.has(protocol)) {\n throw new SyntaxError(`The \"${protocol}\" subprotocol is duplicated`);\n }\n\n protocols.add(protocol);\n start = end = -1;\n } else {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n }\n\n if (start === -1 || end !== -1) {\n throw new SyntaxError('Unexpected end of input');\n }\n\n const protocol = header.slice(start, i);\n\n if (protocols.has(protocol)) {\n throw new SyntaxError(`The \"${protocol}\" subprotocol is duplicated`);\n }\n\n protocols.add(protocol);\n return protocols;\n}\n\nmodule.exports = { parse };\n","/* eslint no-unused-vars: [\"error\", { \"varsIgnorePattern\": \"^Duplex$\", \"caughtErrors\": \"none\" }] */\n\n'use strict';\n\nconst EventEmitter = require('events');\nconst http = require('http');\nconst { Duplex } = require('stream');\nconst { createHash } = require('crypto');\n\nconst extension = require('./extension');\nconst PerMessageDeflate = require('./permessage-deflate');\nconst subprotocol = require('./subprotocol');\nconst WebSocket = require('./websocket');\nconst { CLOSE_TIMEOUT, GUID, kWebSocket } = require('./constants');\n\nconst keyRegex = /^[+/0-9A-Za-z]{22}==$/;\n\nconst RUNNING = 0;\nconst CLOSING = 1;\nconst CLOSED = 2;\n\n/**\n * Class representing a WebSocket server.\n *\n * @extends EventEmitter\n */\nclass WebSocketServer extends EventEmitter {\n /**\n * Create a `WebSocketServer` instance.\n *\n * @param {Object} options Configuration options\n * @param {Boolean} [options.allowSynchronousEvents=true] Specifies whether\n * any of the `'message'`, `'ping'`, and `'pong'` events can be emitted\n * multiple times in the same tick\n * @param {Boolean} [options.autoPong=true] Specifies whether or not to\n * automatically send a pong in response to a ping\n * @param {Number} [options.backlog=511] The maximum length of the queue of\n * pending connections\n * @param {Boolean} [options.clientTracking=true] Specifies whether or not to\n * track clients\n * @param {Number} [options.closeTimeout=30000] Duration in milliseconds to\n * wait for the closing handshake to finish after `websocket.close()` is\n * called\n * @param {Function} [options.handleProtocols] A hook to handle protocols\n * @param {String} [options.host] The hostname where to bind the server\n * @param {Number} [options.maxPayload=104857600] The maximum allowed message\n * size\n * @param {Boolean} [options.noServer=false] Enable no server mode\n * @param {String} [options.path] Accept only connections matching this path\n * @param {(Boolean|Object)} [options.perMessageDeflate=false] Enable/disable\n * permessage-deflate\n * @param {Number} [options.port] The port where to bind the server\n * @param {(http.Server|https.Server)} [options.server] A pre-created HTTP/S\n * server to use\n * @param {Boolean} [options.skipUTF8Validation=false] Specifies whether or\n * not to skip UTF-8 validation for text and close messages\n * @param {Function} [options.verifyClient] A hook to reject connections\n * @param {Function} [options.WebSocket=WebSocket] Specifies the `WebSocket`\n * class to use. It must be the `WebSocket` class or class that extends it\n * @param {Function} [callback] A listener for the `listening` event\n */\n constructor(options, callback) {\n super();\n\n options = {\n allowSynchronousEvents: true,\n autoPong: true,\n maxPayload: 100 * 1024 * 1024,\n skipUTF8Validation: false,\n perMessageDeflate: false,\n handleProtocols: null,\n clientTracking: true,\n closeTimeout: CLOSE_TIMEOUT,\n verifyClient: null,\n noServer: false,\n backlog: null, // use default (511 as implemented in net.js)\n server: null,\n host: null,\n path: null,\n port: null,\n WebSocket,\n ...options\n };\n\n if (\n (options.port == null && !options.server && !options.noServer) ||\n (options.port != null && (options.server || options.noServer)) ||\n (options.server && options.noServer)\n ) {\n throw new TypeError(\n 'One and only one of the \"port\", \"server\", or \"noServer\" options ' +\n 'must be specified'\n );\n }\n\n if (options.port != null) {\n this._server = http.createServer((req, res) => {\n const body = http.STATUS_CODES[426];\n\n res.writeHead(426, {\n 'Content-Length': body.length,\n 'Content-Type': 'text/plain'\n });\n res.end(body);\n });\n this._server.listen(\n options.port,\n options.host,\n options.backlog,\n callback\n );\n } else if (options.server) {\n this._server = options.server;\n }\n\n if (this._server) {\n const emitConnection = this.emit.bind(this, 'connection');\n\n this._removeListeners = addListeners(this._server, {\n listening: this.emit.bind(this, 'listening'),\n error: this.emit.bind(this, 'error'),\n upgrade: (req, socket, head) => {\n this.handleUpgrade(req, socket, head, emitConnection);\n }\n });\n }\n\n if (options.perMessageDeflate === true) options.perMessageDeflate = {};\n if (options.clientTracking) {\n this.clients = new Set();\n this._shouldEmitClose = false;\n }\n\n this.options = options;\n this._state = RUNNING;\n }\n\n /**\n * Returns the bound address, the address family name, and port of the server\n * as reported by the operating system if listening on an IP socket.\n * If the server is listening on a pipe or UNIX domain socket, the name is\n * returned as a string.\n *\n * @return {(Object|String|null)} The address of the server\n * @public\n */\n address() {\n if (this.options.noServer) {\n throw new Error('The server is operating in \"noServer\" mode');\n }\n\n if (!this._server) return null;\n return this._server.address();\n }\n\n /**\n * Stop the server from accepting new connections and emit the `'close'` event\n * when all existing connections are closed.\n *\n * @param {Function} [cb] A one-time listener for the `'close'` event\n * @public\n */\n close(cb) {\n if (this._state === CLOSED) {\n if (cb) {\n this.once('close', () => {\n cb(new Error('The server is not running'));\n });\n }\n\n process.nextTick(emitClose, this);\n return;\n }\n\n if (cb) this.once('close', cb);\n\n if (this._state === CLOSING) return;\n this._state = CLOSING;\n\n if (this.options.noServer || this.options.server) {\n if (this._server) {\n this._removeListeners();\n this._removeListeners = this._server = null;\n }\n\n if (this.clients) {\n if (!this.clients.size) {\n process.nextTick(emitClose, this);\n } else {\n this._shouldEmitClose = true;\n }\n } else {\n process.nextTick(emitClose, this);\n }\n } else {\n const server = this._server;\n\n this._removeListeners();\n this._removeListeners = this._server = null;\n\n //\n // The HTTP/S server was created internally. Close it, and rely on its\n // `'close'` event.\n //\n server.close(() => {\n emitClose(this);\n });\n }\n }\n\n /**\n * See if a given request should be handled by this server instance.\n *\n * @param {http.IncomingMessage} req Request object to inspect\n * @return {Boolean} `true` if the request is valid, else `false`\n * @public\n */\n shouldHandle(req) {\n if (this.options.path) {\n const index = req.url.indexOf('?');\n const pathname = index !== -1 ? req.url.slice(0, index) : req.url;\n\n if (pathname !== this.options.path) return false;\n }\n\n return true;\n }\n\n /**\n * Handle a HTTP Upgrade request.\n *\n * @param {http.IncomingMessage} req The request object\n * @param {Duplex} socket The network socket between the server and client\n * @param {Buffer} head The first packet of the upgraded stream\n * @param {Function} cb Callback\n * @public\n */\n handleUpgrade(req, socket, head, cb) {\n socket.on('error', socketOnError);\n\n const key = req.headers['sec-websocket-key'];\n const upgrade = req.headers.upgrade;\n const version = +req.headers['sec-websocket-version'];\n\n if (req.method !== 'GET') {\n const message = 'Invalid HTTP method';\n abortHandshakeOrEmitwsClientError(this, req, socket, 405, message);\n return;\n }\n\n if (upgrade === undefined || upgrade.toLowerCase() !== 'websocket') {\n const message = 'Invalid Upgrade header';\n abortHandshakeOrEmitwsClientError(this, req, socket, 400, message);\n return;\n }\n\n if (key === undefined || !keyRegex.test(key)) {\n const message = 'Missing or invalid Sec-WebSocket-Key header';\n abortHandshakeOrEmitwsClientError(this, req, socket, 400, message);\n return;\n }\n\n if (version !== 13 && version !== 8) {\n const message = 'Missing or invalid Sec-WebSocket-Version header';\n abortHandshakeOrEmitwsClientError(this, req, socket, 400, message, {\n 'Sec-WebSocket-Version': '13, 8'\n });\n return;\n }\n\n if (!this.shouldHandle(req)) {\n abortHandshake(socket, 400);\n return;\n }\n\n const secWebSocketProtocol = req.headers['sec-websocket-protocol'];\n let protocols = new Set();\n\n if (secWebSocketProtocol !== undefined) {\n try {\n protocols = subprotocol.parse(secWebSocketProtocol);\n } catch (err) {\n const message = 'Invalid Sec-WebSocket-Protocol header';\n abortHandshakeOrEmitwsClientError(this, req, socket, 400, message);\n return;\n }\n }\n\n const secWebSocketExtensions = req.headers['sec-websocket-extensions'];\n const extensions = {};\n\n if (\n this.options.perMessageDeflate &&\n secWebSocketExtensions !== undefined\n ) {\n const perMessageDeflate = new PerMessageDeflate(\n this.options.perMessageDeflate,\n true,\n this.options.maxPayload\n );\n\n try {\n const offers = extension.parse(secWebSocketExtensions);\n\n if (offers[PerMessageDeflate.extensionName]) {\n perMessageDeflate.accept(offers[PerMessageDeflate.extensionName]);\n extensions[PerMessageDeflate.extensionName] = perMessageDeflate;\n }\n } catch (err) {\n const message =\n 'Invalid or unacceptable Sec-WebSocket-Extensions header';\n abortHandshakeOrEmitwsClientError(this, req, socket, 400, message);\n return;\n }\n }\n\n //\n // Optionally call external client verification handler.\n //\n if (this.options.verifyClient) {\n const info = {\n origin:\n req.headers[`${version === 8 ? 'sec-websocket-origin' : 'origin'}`],\n secure: !!(req.socket.authorized || req.socket.encrypted),\n req\n };\n\n if (this.options.verifyClient.length === 2) {\n this.options.verifyClient(info, (verified, code, message, headers) => {\n if (!verified) {\n return abortHandshake(socket, code || 401, message, headers);\n }\n\n this.completeUpgrade(\n extensions,\n key,\n protocols,\n req,\n socket,\n head,\n cb\n );\n });\n return;\n }\n\n if (!this.options.verifyClient(info)) return abortHandshake(socket, 401);\n }\n\n this.completeUpgrade(extensions, key, protocols, req, socket, head, cb);\n }\n\n /**\n * Upgrade the connection to WebSocket.\n *\n * @param {Object} extensions The accepted extensions\n * @param {String} key The value of the `Sec-WebSocket-Key` header\n * @param {Set} protocols The subprotocols\n * @param {http.IncomingMessage} req The request object\n * @param {Duplex} socket The network socket between the server and client\n * @param {Buffer} head The first packet of the upgraded stream\n * @param {Function} cb Callback\n * @throws {Error} If called more than once with the same socket\n * @private\n */\n completeUpgrade(extensions, key, protocols, req, socket, head, cb) {\n //\n // Destroy the socket if the client has already sent a FIN packet.\n //\n if (!socket.readable || !socket.writable) return socket.destroy();\n\n if (socket[kWebSocket]) {\n throw new Error(\n 'server.handleUpgrade() was called more than once with the same ' +\n 'socket, possibly due to a misconfiguration'\n );\n }\n\n if (this._state > RUNNING) return abortHandshake(socket, 503);\n\n const digest = createHash('sha1')\n .update(key + GUID)\n .digest('base64');\n\n const headers = [\n 'HTTP/1.1 101 Switching Protocols',\n 'Upgrade: websocket',\n 'Connection: Upgrade',\n `Sec-WebSocket-Accept: ${digest}`\n ];\n\n const ws = new this.options.WebSocket(null, undefined, this.options);\n\n if (protocols.size) {\n //\n // Optionally call external protocol selection handler.\n //\n const protocol = this.options.handleProtocols\n ? this.options.handleProtocols(protocols, req)\n : protocols.values().next().value;\n\n if (protocol) {\n headers.push(`Sec-WebSocket-Protocol: ${protocol}`);\n ws._protocol = protocol;\n }\n }\n\n if (extensions[PerMessageDeflate.extensionName]) {\n const params = extensions[PerMessageDeflate.extensionName].params;\n const value = extension.format({\n [PerMessageDeflate.extensionName]: [params]\n });\n headers.push(`Sec-WebSocket-Extensions: ${value}`);\n ws._extensions = extensions;\n }\n\n //\n // Allow external modification/inspection of handshake headers.\n //\n this.emit('headers', headers, req);\n\n socket.write(headers.concat('\\r\\n').join('\\r\\n'));\n socket.removeListener('error', socketOnError);\n\n ws.setSocket(socket, head, {\n allowSynchronousEvents: this.options.allowSynchronousEvents,\n maxPayload: this.options.maxPayload,\n skipUTF8Validation: this.options.skipUTF8Validation\n });\n\n if (this.clients) {\n this.clients.add(ws);\n ws.on('close', () => {\n this.clients.delete(ws);\n\n if (this._shouldEmitClose && !this.clients.size) {\n process.nextTick(emitClose, this);\n }\n });\n }\n\n cb(ws, req);\n }\n}\n\nmodule.exports = WebSocketServer;\n\n/**\n * Add event listeners on an `EventEmitter` using a map of <event, listener>\n * pairs.\n *\n * @param {EventEmitter} server The event emitter\n * @param {Object.<String, Function>} map The listeners to add\n * @return {Function} A function that will remove the added listeners when\n * called\n * @private\n */\nfunction addListeners(server, map) {\n for (const event of Object.keys(map)) server.on(event, map[event]);\n\n return function removeListeners() {\n for (const event of Object.keys(map)) {\n server.removeListener(event, map[event]);\n }\n };\n}\n\n/**\n * Emit a `'close'` event on an `EventEmitter`.\n *\n * @param {EventEmitter} server The event emitter\n * @private\n */\nfunction emitClose(server) {\n server._state = CLOSED;\n server.emit('close');\n}\n\n/**\n * Handle socket errors.\n *\n * @private\n */\nfunction socketOnError() {\n this.destroy();\n}\n\n/**\n * Close the connection when preconditions are not fulfilled.\n *\n * @param {Duplex} socket The socket of the upgrade request\n * @param {Number} code The HTTP response status code\n * @param {String} [message] The HTTP response body\n * @param {Object} [headers] Additional HTTP response headers\n * @private\n */\nfunction abortHandshake(socket, code, message, headers) {\n //\n // The socket is writable unless the user destroyed or ended it before calling\n // `server.handleUpgrade()` or in the `verifyClient` function, which is a user\n // error. Handling this does not make much sense as the worst that can happen\n // is that some of the data written by the user might be discarded due to the\n // call to `socket.end()` below, which triggers an `'error'` event that in\n // turn causes the socket to be destroyed.\n //\n message = message || http.STATUS_CODES[code];\n headers = {\n Connection: 'close',\n 'Content-Type': 'text/html',\n 'Content-Length': Buffer.byteLength(message),\n ...headers\n };\n\n socket.once('finish', socket.destroy);\n\n socket.end(\n `HTTP/1.1 ${code} ${http.STATUS_CODES[code]}\\r\\n` +\n Object.keys(headers)\n .map((h) => `${h}: ${headers[h]}`)\n .join('\\r\\n') +\n '\\r\\n\\r\\n' +\n message\n );\n}\n\n/**\n * Emit a `'wsClientError'` event on a `WebSocketServer` if there is at least\n * one listener for it, otherwise call `abortHandshake()`.\n *\n * @param {WebSocketServer} server The WebSocket server\n * @param {http.IncomingMessage} req The request object\n * @param {Duplex} socket The socket of the upgrade request\n * @param {Number} code The HTTP response status code\n * @param {String} message The HTTP response body\n * @param {Object} [headers] The HTTP response headers\n * @private\n */\nfunction abortHandshakeOrEmitwsClientError(\n server,\n req,\n socket,\n code,\n message,\n headers\n) {\n if (server.listenerCount('wsClientError')) {\n const err = new Error(message);\n Error.captureStackTrace(err, abortHandshakeOrEmitwsClientError);\n\n server.emit('wsClientError', err, socket, req);\n } else {\n abortHandshake(socket, code, message, headers);\n }\n}\n","import type {\n ChannelProbeResult,\n CompleteTaskInput,\n CreateTaskResponse,\n Goal,\n MessagesResponse,\n Task,\n TaskWithContext,\n WorkspaceState,\n WsTicketResponse,\n} from './types';\n\n/**\n * HTTP client for the DeskFree bot API.\n * All endpoints use tRPC via HTTP POST/GET.\n */\n/** Default timeout for API requests (30 seconds). */\nconst DEFAULT_REQUEST_TIMEOUT_MS = 30_000;\n\n/** Enhanced error class for DeskFree API errors with user-friendly messages */\nexport class DeskFreeError extends Error {\n public readonly type:\n | 'network'\n | 'auth'\n | 'server'\n | 'client'\n | 'timeout'\n | 'invalid_response';\n public readonly statusCode?: number;\n public readonly userMessage: string;\n public readonly procedure: string;\n\n constructor(\n type: DeskFreeError['type'],\n procedure: string,\n message: string,\n userMessage: string,\n statusCode?: number,\n ) {\n super(message);\n this.name = 'DeskFreeError';\n this.type = type;\n this.procedure = procedure;\n this.userMessage = userMessage;\n this.statusCode = statusCode;\n }\n\n static fromResponse(\n response: Response,\n procedure: string,\n responseText: string,\n ): DeskFreeError {\n const status = response.status;\n const statusText = response.statusText;\n\n if (status === 401) {\n return new DeskFreeError(\n 'auth',\n procedure,\n `Authentication failed: ${status} ${statusText} — ${responseText}`,\n 'Your bot token is invalid or has expired. Please check your authentication credentials.',\n status,\n );\n }\n\n if (status === 403) {\n return new DeskFreeError(\n 'auth',\n procedure,\n `Authorization failed: ${status} ${statusText} — ${responseText}`,\n 'Your bot does not have permission to perform this action. Contact your administrator.',\n status,\n );\n }\n\n if (status >= 500) {\n return new DeskFreeError(\n 'server',\n procedure,\n `Server error: ${status} ${statusText} — ${responseText}`,\n 'DeskFree service is temporarily unavailable. Please try again in a few minutes.',\n status,\n );\n }\n\n if (status === 429) {\n return new DeskFreeError(\n 'client',\n procedure,\n `Rate limit exceeded: ${status} ${statusText} — ${responseText}`,\n 'Too many requests. Please wait a moment before trying again.',\n status,\n );\n }\n\n if (status === 400) {\n return new DeskFreeError(\n 'client',\n procedure,\n `Bad request: ${status} ${statusText} — ${responseText}`,\n 'The request was invalid. Please check your input and try again.',\n status,\n );\n }\n\n return new DeskFreeError(\n 'client',\n procedure,\n `HTTP error: ${status} ${statusText} — ${responseText}`,\n `Request failed with error ${status}. Please try again or contact support if the problem persists.`,\n status,\n );\n }\n\n static timeout(procedure: string, timeoutMs: number): DeskFreeError {\n return new DeskFreeError(\n 'timeout',\n procedure,\n `Request to ${procedure} timed out after ${timeoutMs}ms`,\n 'The request took too long to complete. Please check your network connection and try again.',\n );\n }\n\n static invalidResponse(procedure: string): DeskFreeError {\n return new DeskFreeError(\n 'invalid_response',\n procedure,\n `Invalid tRPC response structure for ${procedure}`,\n 'Received an unexpected response from the server. Please try again or contact support.',\n );\n }\n\n static network(procedure: string, originalError: Error): DeskFreeError {\n return new DeskFreeError(\n 'network',\n procedure,\n `Network error for ${procedure}: ${originalError.message}`,\n 'Unable to connect to DeskFree. Please check your internet connection and try again.',\n );\n }\n}\n\nexport class DeskFreeClient {\n private botToken: string;\n private apiUrl: string;\n private requestTimeoutMs: number;\n\n constructor(\n botToken: string,\n apiUrl: string,\n options?: { requestTimeoutMs?: number },\n ) {\n this.botToken = botToken;\n this.apiUrl = apiUrl.replace(/\\/$/, '');\n this.requestTimeoutMs =\n options?.requestTimeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS;\n }\n\n private async request<T>(\n method: 'GET' | 'POST',\n procedure: string,\n input?: unknown,\n ): Promise<T> {\n const url =\n method === 'GET' && input\n ? `${this.apiUrl}/${procedure}?input=${encodeURIComponent(JSON.stringify(input))}`\n : `${this.apiUrl}/${procedure}`;\n\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), this.requestTimeoutMs);\n\n try {\n const response = await fetch(url, {\n method,\n headers: {\n Authorization: `Bot ${this.botToken}`,\n 'Content-Type': 'application/json',\n },\n body: method === 'POST' ? JSON.stringify(input) : undefined,\n signal: controller.signal,\n });\n\n if (!response.ok) {\n const text = await response.text().catch((err) => {\n const errMsg = err instanceof Error ? err.message : String(err);\n return `(failed to read response body: ${errMsg})`;\n });\n\n throw DeskFreeError.fromResponse(response, procedure, text);\n }\n\n const json = (await response.json()) as { result?: { data?: T } };\n\n // Validate tRPC response structure\n if (!json.result || json.result.data === undefined) {\n throw DeskFreeError.invalidResponse(procedure);\n }\n\n return json.result.data;\n } catch (err) {\n if (err instanceof DeskFreeError) {\n throw err;\n }\n\n if (err instanceof Error && err.name === 'AbortError') {\n throw DeskFreeError.timeout(procedure, this.requestTimeoutMs);\n }\n\n if (err instanceof Error) {\n // Network or other fetch errors\n throw DeskFreeError.network(procedure, err);\n }\n\n throw err;\n } finally {\n clearTimeout(timer);\n }\n }\n\n /**\n * Validates that a string parameter is non-empty.\n * Catches invalid inputs before they hit the network.\n */\n private requireNonEmpty(value: string, name: string): void {\n if (!value || value.trim() === '') {\n throw new DeskFreeError(\n 'client',\n name,\n `${name} is required and cannot be empty`,\n `Missing required parameter: ${name}. Please provide a valid value.`,\n );\n }\n }\n\n /**\n * Send a typing indicator to the DeskFree conversation.\n *\n * @param input - Optional parameters including taskId to scope the indicator\n */\n async typing(input?: { taskId?: string; clear?: boolean }): Promise<void> {\n return this.request('POST', 'messages.typing', input ?? {});\n }\n\n /**\n * Update an existing bot message content (for streaming).\n *\n * @param input - messageId, new content, and streaming flag\n */\n async updateMessage(input: {\n messageId: string;\n content: string;\n streaming?: boolean;\n }): Promise<{ messageId: string; content: string }> {\n return this.request('POST', 'messages.update', input);\n }\n\n /**\n * Send a text message (with optional attachments) to a DeskFree conversation.\n *\n * @param input - Message content, optional userId, taskId, and attachments\n */\n async sendMessage(input: {\n userId?: string;\n content: string;\n taskId?: string;\n attachments?: Array<{\n s3Key: string;\n name: string;\n contentType: string;\n size: number;\n }>;\n }): Promise<{ messageId: string; content: string }> {\n this.requireNonEmpty(input.content, 'content');\n return this.request('POST', 'messages.send', input);\n }\n\n /** Fetch paginated message history for a conversation. */\n async listMessages(input: {\n userId?: string;\n cursor?: string | null;\n limit?: number;\n }): Promise<MessagesResponse> {\n if (input.limit !== undefined && (input.limit < 1 || input.limit > 100)) {\n throw new DeskFreeError(\n 'client',\n 'limit',\n 'limit must be between 1 and 100',\n 'The limit parameter must be between 1 and 100.',\n );\n }\n return this.request<MessagesResponse>('GET', 'messages.list', input);\n }\n\n /** Obtain a one-time WebSocket authentication ticket for real-time notifications. */\n async getWsTicket(): Promise<WsTicketResponse> {\n return this.request<WsTicketResponse>('POST', 'messages.wsTicket', {});\n }\n\n // ── Goals ─────────────────────────────────────────────────\n\n /** Create a new goal. */\n async createGoal(input: {\n title: string;\n description?: string;\n }): Promise<{ goal: Goal }> {\n this.requireNonEmpty(input.title, 'title');\n return this.request('POST', 'goals.create', input);\n }\n\n /** Update a goal's status, title, or description. */\n async updateGoal(input: {\n goalId: string;\n title?: string;\n description?: string;\n status?: string;\n }): Promise<Goal> {\n this.requireNonEmpty(input.goalId, 'goalId');\n return this.request('POST', 'goals.update', input);\n }\n\n // ── Tasks ─────────────────────────────────────────────────\n\n /** Create a new task, optionally with a recurring schedule. */\n async createTask(input: {\n title: string;\n instructions?: string;\n goalId?: string;\n isRecurring?: boolean;\n recurringSchedule?: {\n frequency: 'daily' | 'weekly' | 'biweekly' | 'monthly';\n dayOfWeek?: number;\n dayOfMonth?: number;\n time: string;\n timezone?: string;\n };\n }): Promise<CreateTaskResponse> {\n this.requireNonEmpty(input.title, 'title');\n return this.request('POST', 'tasks.create', input);\n }\n\n /** Claim a task so the bot can begin working on it. Returns enriched context. */\n async claimTask(input: { taskId: string }): Promise<TaskWithContext> {\n this.requireNonEmpty(input.taskId, 'taskId');\n return this.request('POST', 'tasks.claim', input);\n }\n\n /** Update the deliverable (markdown content) for a task. */\n async updateDeliverable(input: {\n taskId: string;\n deliverable: string;\n }): Promise<void> {\n this.requireNonEmpty(input.taskId, 'taskId');\n this.requireNonEmpty(input.deliverable, 'deliverable');\n return this.request('POST', 'tasks.updateDeliverable', input);\n }\n\n /** Send an agent status update to DeskFree. */\n async statusUpdate(input: {\n status: 'idle' | 'working' | 'responding';\n activeSubAgents: Array<{\n label: string;\n status: 'running' | 'completed' | 'failed';\n startedAt: string;\n completedAt?: string;\n tokenUsage?: number;\n task?: string;\n }>;\n model?: string;\n lastActivity?: string;\n pluginVersion?: string;\n openclawVersion?: string;\n }): Promise<{ success: boolean }> {\n return this.request('POST', 'agent.statusUpdate', input);\n }\n\n /** Report error log entries to the backend for CloudWatch/Slack visibility. */\n async reportError(input: {\n errors: Array<{\n message: string;\n level: 'warn' | 'error' | 'fatal';\n timestamp: string;\n metadata?: Record<string, unknown>;\n }>;\n }): Promise<{ accepted: number }> {\n return this.request('POST', 'agent.reportError', input);\n }\n\n /** Get short-lived AWS credentials for S3 workspace access. */\n async workspaceCredentials(): Promise<{\n accessKeyId: string;\n secretAccessKey: string;\n sessionToken: string;\n expiration: Date;\n s3Uri: string;\n region: string;\n }> {\n return this.request('POST', 'workspace.credentials', {});\n }\n\n /** Notify DeskFree that workspace files have changed locally. */\n async workspaceRead(input: {\n path: string;\n }): Promise<{ path: string; content: string; lastModified: string }> {\n return this.request('GET', 'workspace.read', input);\n }\n\n /** Get full workspace snapshot — goals with tasks, unlinked tasks, recently done. */\n async getState(): Promise<WorkspaceState> {\n return this.request('GET', 'state.get', {});\n }\n\n /** Report token usage for a task. Atomically increments rollup columns. */\n async reportUsage(input: {\n taskId: string;\n inputTokens: number;\n outputTokens: number;\n thinkingTokens: number;\n model: string;\n estimatedCost: number;\n }): Promise<{ success: boolean }> {\n this.requireNonEmpty(input.taskId, 'taskId');\n this.requireNonEmpty(input.model, 'model');\n return this.request('POST', 'tasks.reportUsage', input);\n }\n\n /** Complete a task with an outcome. Moves task to waiting_for_human. */\n async completeTask(\n input: CompleteTaskInput,\n ): Promise<Task & { outcome: 'done' | 'blocked' }> {\n this.requireNonEmpty(input.taskId, 'taskId');\n return this.request('POST', 'tasks.complete', input);\n }\n\n /**\n * Lightweight health check that verifies connectivity and authentication.\n *\n * @param timeoutMs - Maximum time to wait for the probe response\n * @returns Probe result indicating success or a descriptive error\n */\n async probe(timeoutMs: number): Promise<ChannelProbeResult> {\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), timeoutMs);\n\n try {\n const response = await fetch(\n `${this.apiUrl}/state.get?input=${encodeURIComponent(JSON.stringify({}))}`,\n {\n method: 'GET',\n headers: {\n Authorization: `Bot ${this.botToken}`,\n 'Content-Type': 'application/json',\n },\n signal: controller.signal,\n },\n );\n\n if (!response.ok) {\n // Provide more user-friendly probe error messages\n if (response.status === 401 || response.status === 403) {\n return {\n ok: false,\n error: 'Authentication failed - check bot token',\n };\n }\n if (response.status >= 500) {\n return { ok: false, error: 'DeskFree server unavailable' };\n }\n return {\n ok: false,\n error: `HTTP ${response.status} - ${response.statusText}`,\n };\n }\n\n return { ok: true };\n } catch (err) {\n if (err instanceof Error && err.name === 'AbortError') {\n return { ok: false, error: `Connection timeout after ${timeoutMs}ms` };\n }\n\n const message = err instanceof Error ? err.message : String(err);\n // Simplify network errors for probe results\n if (message.includes('fetch')) {\n return { ok: false, error: 'Network connection failed' };\n }\n\n return { ok: false, error: message };\n } finally {\n clearTimeout(timer);\n }\n }\n}\n","import type { DeskFreeClient } from './client';\nimport type { PluginLogger } from './types';\n\n/** A queued error entry waiting to be flushed to the backend. */\ninterface ErrorEntry {\n message: string;\n level: 'warn' | 'error' | 'fatal';\n timestamp: string;\n metadata?: Record<string, unknown>;\n}\n\nconst FLUSH_INTERVAL_MS = 10_000;\nconst MAX_BATCH_SIZE = 50;\nconst MAX_QUEUE_SIZE = 200;\n\n// ── Singleton access ──────────────────────────────────────────────────\nlet _instance: ErrorReporter | null = null;\n\n/**\n * Initialize the global ErrorReporter singleton.\n * Called once when the DeskFree gateway connection starts.\n */\nexport function initErrorReporter(\n client: DeskFreeClient,\n logger: PluginLogger,\n): ErrorReporter {\n if (_instance) {\n _instance.dispose();\n }\n _instance = new ErrorReporter(client, logger);\n return _instance;\n}\n\n/**\n * Get the global ErrorReporter instance, or null if not yet initialized.\n * Use this from any module to report errors without passing the instance around.\n */\nexport function getErrorReporter(): ErrorReporter | null {\n return _instance;\n}\n\n/**\n * Convenience: report an error if the reporter is initialized.\n * No-op if called before initErrorReporter(). Never throws.\n */\nexport function reportError(\n level: 'warn' | 'error' | 'fatal',\n message: string,\n metadata?: Record<string, unknown>,\n): void {\n _instance?.report(level, message, metadata);\n}\n\n/**\n * Batched, async, fire-and-forget error reporter that sends plugin errors\n * to the DeskFree backend via `agent.reportError`.\n *\n * Errors are queued in memory and flushed periodically or when the batch\n * reaches MAX_BATCH_SIZE. Reporting failures are silently swallowed to\n * never block the plugin.\n */\nexport class ErrorReporter {\n private queue: ErrorEntry[] = [];\n private flushTimer: ReturnType<typeof setInterval> | null = null;\n private client: DeskFreeClient;\n private logger: PluginLogger;\n\n constructor(client: DeskFreeClient, logger: PluginLogger) {\n this.client = client;\n this.logger = logger;\n\n this.flushTimer = setInterval(() => void this.flush(), FLUSH_INTERVAL_MS);\n if (\n this.flushTimer &&\n typeof this.flushTimer === 'object' &&\n 'unref' in this.flushTimer\n ) {\n this.flushTimer.unref();\n }\n }\n\n /** Enqueue an error for reporting. Never throws. */\n report(\n level: 'warn' | 'error' | 'fatal',\n message: string,\n metadata?: Record<string, unknown>,\n ): void {\n // Drop oldest entries if queue is full to bound memory\n if (this.queue.length >= MAX_QUEUE_SIZE) {\n this.queue.splice(0, this.queue.length - MAX_QUEUE_SIZE + 1);\n }\n\n this.queue.push({\n message: message.slice(0, 4000),\n level,\n timestamp: new Date().toISOString(),\n metadata,\n });\n\n if (this.queue.length >= MAX_BATCH_SIZE) {\n void this.flush();\n }\n }\n\n /** Flush queued errors to the backend. Fire-and-forget. */\n async flush(): Promise<void> {\n if (this.queue.length === 0) return;\n\n const batch = this.queue.splice(0, MAX_BATCH_SIZE);\n\n try {\n await this.client.reportError({ errors: batch });\n } catch {\n // Fire-and-forget — never block the plugin\n this.logger.debug(\n `[error-reporter] Failed to flush ${batch.length} error(s) to backend`,\n );\n }\n }\n\n /** Stop the periodic flush timer. */\n dispose(): void {\n if (this.flushTimer) {\n clearInterval(this.flushTimer);\n this.flushTimer = null;\n }\n if (_instance === this) {\n _instance = null;\n }\n }\n}\n","import type { PluginRuntime } from './types';\n\nlet _runtime: PluginRuntime | null = null;\n\n/**\n * Store the OpenClaw plugin runtime for later use by other modules.\n *\n * Called once during plugin registration in {@link index.ts}.\n *\n * @param runtime - The OpenClaw plugin runtime provided during registration\n */\nexport function setDeskFreeRuntime(runtime: PluginRuntime): void {\n _runtime = runtime;\n}\n\n/**\n * Retrieve the stored OpenClaw plugin runtime.\n *\n * @returns The plugin runtime instance\n * @throws Error if called before {@link setDeskFreeRuntime}\n */\nexport function getDeskFreeRuntime(): PluginRuntime {\n if (!_runtime) {\n throw new Error(\n 'DeskFree runtime not initialized. Ensure setDeskFreeRuntime() is called during plugin registration.',\n );\n }\n return _runtime;\n}\n","import { getDeskFreeRuntime } from './runtime';\nimport { homedir } from 'node:os';\nimport { join } from 'node:path';\n\n/**\n * Resolve a path for plugin data storage.\n *\n * Uses `runtime.state.resolveStateDir()` to find the OpenClaw state directory,\n * then appends `plugin-data/deskfree/<subpath>`.\n * Falls back to `~/.openclaw/plugin-data/deskfree/<subpath>` if the runtime\n * is not yet initialized.\n */\nexport function resolvePluginStorePath(subpath: string): string {\n let stateDir: string | undefined;\n\n try {\n const runtime = getDeskFreeRuntime();\n if (runtime.state?.resolveStateDir) {\n stateDir = runtime.state.resolveStateDir();\n }\n } catch {\n // runtime not initialized yet — use fallback\n }\n\n if (!stateDir) {\n stateDir =\n process.env.OPENCLAW_STATE_DIR?.trim() || join(homedir(), '.openclaw');\n }\n\n return join(stateDir, 'plugin-data', 'deskfree', subpath);\n}\n","import type { DeskFreeClient } from './client';\nimport type { PluginLogger } from './types';\n\n/** Minimum interval between update calls (ms). */\nconst THROTTLE_MS = 300;\n\n/**\n * Manages a streaming message session for DeskFree.\n *\n * Flow:\n * 1. First chunk → `start()` sends a new message, stores messageId\n * 2. Subsequent chunks → `update()` edits the message in-place (throttled)\n * 3. Final → `close()` sends the final content with streaming=false\n *\n * Throttling: updates are batched to at most once per THROTTLE_MS.\n * If a new update arrives while throttled, it's queued and sent when\n * the throttle window expires.\n */\nexport class DeskFreeStreamingSession {\n private client: DeskFreeClient;\n private log: PluginLogger;\n private messageId: string | null = null;\n private currentText = '';\n private closed = false;\n private lastUpdateTime = 0;\n private pendingText: string | null = null;\n private pendingTimer: ReturnType<typeof setTimeout> | null = null;\n private queue: Promise<void> = Promise.resolve();\n\n constructor(client: DeskFreeClient, log: PluginLogger) {\n this.client = client;\n this.log = log;\n }\n\n /**\n * Send the first chunk as a new message.\n * Returns the messageId for subsequent updates.\n */\n async start(content: string, taskId?: string): Promise<string> {\n if (this.messageId) {\n throw new Error('Streaming session already started');\n }\n\n const result = await this.client.sendMessage({ content, taskId });\n this.messageId = result.messageId;\n this.currentText = content;\n this.lastUpdateTime = Date.now();\n\n this.log.info(`Streaming started: messageId=${this.messageId}`);\n\n return this.messageId;\n }\n\n /**\n * Update the message with new content. Throttled to THROTTLE_MS.\n * Content should be the FULL message text (not a delta).\n */\n async update(fullText: string): Promise<void> {\n if (!this.messageId || this.closed) return;\n if (fullText === this.currentText) return;\n\n const now = Date.now();\n const elapsed = now - this.lastUpdateTime;\n\n if (elapsed >= THROTTLE_MS) {\n // Enough time passed — send immediately\n await this.sendUpdate(fullText, true);\n } else {\n // Throttled — queue for later\n this.pendingText = fullText;\n if (!this.pendingTimer) {\n this.pendingTimer = setTimeout(async () => {\n this.pendingTimer = null;\n if (this.pendingText && !this.closed) {\n const text = this.pendingText;\n this.pendingText = null;\n await this.sendUpdate(text, true);\n }\n }, THROTTLE_MS - elapsed);\n }\n }\n }\n\n /**\n * Finalize the streaming session with the final content.\n */\n async close(finalText?: string): Promise<void> {\n if (this.closed) return;\n this.closed = true;\n\n // Clear any pending throttled update\n if (this.pendingTimer) {\n clearTimeout(this.pendingTimer);\n this.pendingTimer = null;\n }\n\n // Wait for any in-flight update\n await this.queue;\n\n const text = finalText ?? this.pendingText ?? this.currentText;\n\n if (this.messageId && text !== this.currentText) {\n await this.sendUpdate(text, false);\n } else if (this.messageId) {\n // Same text but need to clear streaming flag\n await this.sendUpdate(this.currentText, false);\n }\n\n this.log.info(`Streaming closed: messageId=${this.messageId}`);\n }\n\n isActive(): boolean {\n return this.messageId !== null && !this.closed;\n }\n\n getMessageId(): string | null {\n return this.messageId;\n }\n\n private async sendUpdate(content: string, streaming: boolean): Promise<void> {\n if (!this.messageId) return;\n\n this.queue = this.queue.then(async () => {\n try {\n await this.client.updateMessage({\n messageId: this.messageId!,\n content,\n streaming,\n });\n this.currentText = content;\n this.lastUpdateTime = Date.now();\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n this.log.warn(`Streaming update failed: ${msg}`);\n }\n });\n\n await this.queue;\n }\n}\n","import { DeskFreeClient } from './client';\nimport { reportError } from './error-reporter';\nimport { getActiveTaskId } from './gateway';\nimport { resolvePluginStorePath } from './paths';\nimport { getDeskFreeRuntime } from './runtime';\nimport { DeskFreeStreamingSession } from './streaming';\nimport type {\n ChannelGatewayContext,\n ChatMessage,\n ChatMessageAttachment,\n PluginLogger,\n} from './types';\nimport { randomUUID } from 'node:crypto';\nimport { createWriteStream } from 'node:fs';\nimport { mkdir, unlink } from 'node:fs/promises';\nimport { dirname, extname } from 'node:path';\nimport { Readable } from 'node:stream';\nimport { pipeline } from 'node:stream/promises';\nimport { createTypingCallbacks, logTypingFailure } from 'openclaw/plugin-sdk';\n\n// Maximum file size for attachments (10MB)\nconst MAX_ATTACHMENT_SIZE = 10 * 1024 * 1024;\n\n// Download timeout (30 seconds)\nconst DOWNLOAD_TIMEOUT_MS = 30 * 1000;\n\n// Rate limiting: maximum attachments per message\nconst MAX_ATTACHMENTS_PER_MESSAGE = 10;\n\n// Rate limiting: maximum total download size per message (50MB)\nconst MAX_TOTAL_DOWNLOAD_SIZE = 50 * 1024 * 1024;\n\n// Allowed content types for security\nconst ALLOWED_CONTENT_TYPES = [\n 'image/',\n 'video/',\n 'audio/',\n 'application/pdf',\n 'text/',\n 'application/json',\n 'application/xml',\n 'application/zip',\n 'application/x-zip-compressed',\n 'application/gzip',\n 'application/msword',\n 'application/vnd.openxmlformats-officedocument',\n 'application/vnd.ms-excel',\n 'application/vnd.ms-powerpoint',\n];\n\n/**\n * Validates if a content type is safe to download.\n */\nexport function isContentTypeAllowed(contentType: string): boolean {\n const normalized = contentType.toLowerCase().trim();\n return ALLOWED_CONTENT_TYPES.some((allowed) =>\n normalized.startsWith(allowed),\n );\n}\n\n/**\n * Sanitizes a filename to prevent directory traversal and other security issues.\n */\nexport function sanitizeFileName(fileName: string): string {\n return fileName\n .replace(/[^a-zA-Z0-9._-]/g, '_') // Replace unsafe chars with underscore\n .replace(/\\.+/g, '.') // Replace multiple dots with single dot\n .replace(/^\\./, '_') // Replace leading dot\n .substring(0, 100); // Limit length\n}\n\n/**\n * Validates a URL to ensure it's a proper HTTPS URL.\n */\nexport function validateDownloadUrl(url: string): void {\n try {\n const parsed = new URL(url);\n if (parsed.protocol !== 'https:') {\n throw new Error('Only HTTPS URLs are allowed');\n }\n\n // Block localhost and private IP ranges\n const hostname = parsed.hostname.toLowerCase();\n // Strip IPv6 brackets for comparison (URL parser wraps IPv6 in brackets)\n const bareHostname = hostname.replace(/^\\[|\\]$/g, '');\n if (\n bareHostname === 'localhost' ||\n bareHostname === '127.0.0.1' ||\n bareHostname === '::1'\n ) {\n throw new Error('Local URLs are not allowed');\n }\n\n // Block private IP ranges (RFC 1918 and others)\n const ipv4Patterns = [\n /^10\\./, // 10.0.0.0/8\n /^192\\.168\\./, // 192.168.0.0/16\n /^172\\.(1[6-9]|2[0-9]|3[0-1])\\./, // 172.16.0.0/12\n /^169\\.254\\./, // Link-local 169.254.0.0/16\n /^0\\./, // Current network\n /^127\\./, // Loopback\n ];\n\n for (const pattern of ipv4Patterns) {\n if (pattern.test(hostname)) {\n throw new Error('Private IP addresses are not allowed');\n }\n }\n\n // Block IPv6 private/reserved ranges\n // bareHostname has brackets stripped, so compare raw IPv6 addresses\n const ipv6Patterns = [\n /^fe80:/i, // Link-local fe80::/10\n /^fc00:/i, // Unique Local Address fc00::/7\n /^fd/i, // Unique Local Address fd00::/8 (subset of fc00::/7)\n /^::$/i, // Unspecified address ::\n /^::ffff:/i, // IPv4-mapped IPv6 (e.g. ::ffff:127.0.0.1)\n /^100::/i, // Discard prefix 100::/64\n /^2001:db8:/i, // Documentation 2001:db8::/32\n /^ff0[0-9a-f]:/i, // Multicast ff00::/8\n ];\n\n for (const pattern of ipv6Patterns) {\n if (pattern.test(bareHostname)) {\n throw new Error('Private IP addresses are not allowed');\n }\n }\n\n // Validate URL length to prevent DoS\n if (url.length > 2048) {\n throw new Error('URL too long (max 2048 characters)');\n }\n } catch (error) {\n throw new Error(\n `Invalid URL: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n}\n\n/**\n * Downloads a file from a signed S3 URL and saves it to the plugin store.\n * Includes security validations and error handling.\n */\nasync function fetchAndSaveMedia(\n attachment: ChatMessageAttachment,\n): Promise<{ path: string; contentType: string }> {\n // Validate input\n if (!attachment.url) {\n throw new Error('Attachment URL is required');\n }\n\n if (!attachment.name) {\n throw new Error('Attachment name is required');\n }\n\n if (!attachment.contentType) {\n throw new Error('Attachment content type is required');\n }\n\n // Security validations\n validateDownloadUrl(attachment.url);\n\n if (!isContentTypeAllowed(attachment.contentType)) {\n throw new Error(`Content type not allowed: ${attachment.contentType}`);\n }\n\n if (attachment.size > MAX_ATTACHMENT_SIZE) {\n throw new Error(\n `File too large: ${attachment.size} bytes (max: ${MAX_ATTACHMENT_SIZE})`,\n );\n }\n\n // Generate safe file path with additional security checks\n const sanitizedName = sanitizeFileName(attachment.name);\n\n // Additional validation - ensure no path traversal attempts\n if (\n sanitizedName.includes('..') ||\n sanitizedName.includes('/') ||\n sanitizedName.includes('\\\\')\n ) {\n throw new Error('Invalid filename: contains path traversal characters');\n }\n\n // Only append extension if the sanitized name doesn't already have one\n const hasExt = extname(sanitizedName).length > 0;\n const fileName = hasExt\n ? `${randomUUID()}_${sanitizedName}`\n : `${randomUUID()}_${sanitizedName}${extname(attachment.name) || '.bin'}`;\n\n // Final validation of complete filename\n if (fileName.length > 255) {\n throw new Error('Generated filename too long (max 255 characters)');\n }\n\n const filePath = resolvePluginStorePath(`media/inbound/${fileName}`);\n\n // Ensure directory exists\n await mkdir(dirname(filePath), { recursive: true });\n\n // Download with timeout and validations\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), DOWNLOAD_TIMEOUT_MS);\n let fileStream: ReturnType<typeof createWriteStream> | null = null;\n\n try {\n const response = await fetch(attachment.url, {\n signal: controller.signal,\n headers: {\n 'User-Agent': 'DeskFree-OpenClaw/1.0',\n },\n });\n\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n }\n\n if (!response.body) {\n throw new Error('Empty response body');\n }\n\n // Validate content type from response\n const responseContentType = response.headers.get('content-type');\n if (responseContentType && !isContentTypeAllowed(responseContentType)) {\n throw new Error(\n `Response content type not allowed: ${responseContentType}`,\n );\n }\n\n // Validate content length if provided\n const contentLength = response.headers.get('content-length');\n if (contentLength) {\n const size = parseInt(contentLength, 10);\n if (size > MAX_ATTACHMENT_SIZE) {\n throw new Error(\n `Content too large: ${size} bytes (max: ${MAX_ATTACHMENT_SIZE})`,\n );\n }\n }\n\n // Stream the response body to disk with size tracking\n const nodeStream = Readable.fromWeb(response.body as never);\n fileStream = createWriteStream(filePath);\n\n let bytesWritten = 0;\n let sizeExceeded = false;\n\n nodeStream.on('data', (chunk) => {\n bytesWritten += chunk.length;\n if (bytesWritten > MAX_ATTACHMENT_SIZE && !sizeExceeded) {\n sizeExceeded = true;\n nodeStream.destroy(\n new Error('File size limit exceeded during download'),\n );\n }\n });\n\n // Handle stream errors properly\n nodeStream.on('error', () => {\n if (fileStream && !fileStream.destroyed) {\n fileStream.destroy();\n }\n });\n\n fileStream.on('error', () => {\n if (!nodeStream.destroyed) {\n nodeStream.destroy();\n }\n });\n\n await pipeline(nodeStream, fileStream);\n\n return {\n path: filePath,\n contentType: responseContentType || attachment.contentType,\n };\n } catch (error) {\n // Ensure streams are properly closed\n if (fileStream && !fileStream.destroyed) {\n fileStream.destroy();\n fileStream = null;\n }\n\n // Clean up partial file if download failed\n try {\n await unlink(filePath);\n } catch {\n // Ignore cleanup errors - file might not have been created\n }\n\n if (controller.signal.aborted) {\n throw new Error(`Download timeout after ${DOWNLOAD_TIMEOUT_MS}ms`);\n }\n\n throw new Error(\n `Failed to download attachment: ${error instanceof Error ? error.message : String(error)}`,\n );\n } finally {\n clearTimeout(timeoutId);\n // Final cleanup - ensure file stream is closed\n if (fileStream && !fileStream.destroyed) {\n fileStream.destroy();\n }\n }\n}\n\n/**\n * Delivers a DeskFree chat message to the OpenClaw agent pipeline.\n *\n * Each message produces a single inbound message.\n * If the message has a taskId, it's set as ThreadId for conversation threading.\n */\nexport async function deliverMessageToAgent(\n ctx: ChannelGatewayContext,\n message: ChatMessage,\n client: DeskFreeClient,\n): Promise<void> {\n const runtime = getDeskFreeRuntime();\n const log: PluginLogger =\n ctx.log ?? runtime.logging.createLogger('deskfree:deliver');\n\n const peerId = message.humanId.trim().toLowerCase();\n\n log.info(\n `Delivering message ${message.messageId} from ${message.userName ?? message.humanId}` +\n (message.taskId ? ` (task: ${message.taskId})` : '') +\n `: \"${message.content.slice(0, 80)}${message.content.length > 80 ? '…' : ''}\"`,\n );\n\n // Download attachments if present\n const attachments = message.attachments ?? [];\n\n // Validate attachment count\n if (attachments.length > MAX_ATTACHMENTS_PER_MESSAGE) {\n log.warn(\n `Message has ${attachments.length} attachments, limiting to ${MAX_ATTACHMENTS_PER_MESSAGE}`,\n );\n }\n\n // Calculate total attachment size for rate limiting\n const totalSize = attachments\n .slice(0, MAX_ATTACHMENTS_PER_MESSAGE)\n .reduce((sum, att) => sum + (att.size || 0), 0);\n\n if (totalSize > MAX_TOTAL_DOWNLOAD_SIZE) {\n log.warn(\n `Total attachment size ${totalSize} bytes exceeds limit ${MAX_TOTAL_DOWNLOAD_SIZE} bytes`,\n );\n // Don't fail the entire message, just log the warning\n }\n\n const mediaPaths: string[] = [];\n const mediaTypes: string[] = [];\n const mediaUrls: string[] = [];\n\n for (const [index, attachment] of attachments\n .slice(0, MAX_ATTACHMENTS_PER_MESSAGE)\n .entries()) {\n if (!attachment.url) {\n log.warn(`Skipping attachment ${index}: no URL provided`);\n continue;\n }\n\n try {\n const saved = await fetchAndSaveMedia(attachment);\n mediaPaths.push(saved.path);\n mediaTypes.push(saved.contentType);\n mediaUrls.push(saved.path);\n log.info(\n `Downloaded attachment ${index}: ${attachment.name} (${saved.contentType})`,\n );\n } catch (error) {\n const errorMsg = error instanceof Error ? error.message : String(error);\n log.warn(\n `Failed to download attachment ${index} (${attachment.name}): ${errorMsg}`,\n );\n // Non-fatal — continue processing other attachments and the message\n }\n }\n\n const msgCtx = runtime.channel.reply.finalizeInboundContext({\n Body: message.content,\n RawBody: message.content,\n ChatType: 'dm',\n Provider: 'deskfree',\n Surface: 'deskfree',\n Channel: 'deskfree',\n From: message.humanId,\n To: message.humanId,\n MessageSid: message.messageId,\n ThreadId: message.taskId ?? undefined,\n Timestamp: message.createdAt,\n AccountId: ctx.accountId,\n FromName: message.userName ?? 'Unknown',\n SessionKey: `agent:main:deskfree:dm:${peerId}`,\n // Backward-compatible: first attachment\n MediaPath: mediaPaths[0],\n MediaType: mediaTypes[0],\n MediaUrl: mediaUrls[0],\n // Array keys for multiple attachments\n MediaPaths: mediaPaths,\n MediaTypes: mediaTypes,\n MediaUrls: mediaUrls,\n MediaCount: mediaPaths.length,\n });\n\n try {\n // Send typing immediately so the user sees feedback while the agent processes\n try {\n await client.typing({ taskId: message.taskId ?? undefined });\n } catch (err) {\n logTypingFailure({\n log: (m) => log.warn(m),\n channel: 'deskfree',\n action: 'start',\n error: err instanceof Error ? err : new Error(String(err)),\n });\n }\n\n const cfg = runtime.config.loadConfig();\n\n const typingCallbacks = createTypingCallbacks({\n start: async () => {\n await client.typing({ taskId: message.taskId ?? undefined });\n },\n stop: async () => {\n await client.typing({\n taskId: message.taskId ?? undefined,\n clear: true,\n });\n },\n onStartError: (err) => {\n logTypingFailure({\n log: (m) => log.warn(m),\n channel: 'deskfree',\n action: 'start',\n error: err,\n });\n },\n onStopError: (err) => {\n logTypingFailure({\n log: (m) => log.warn(m),\n channel: 'deskfree',\n action: 'stop',\n error: err,\n });\n },\n });\n\n // Streaming session — reused across block + final delivers\n let streamingSession: DeskFreeStreamingSession | null = null;\n // Accumulate block text — OpenClaw sends deltas, not full text\n let accumulatedText = '';\n\n const { dispatcher, replyOptions } =\n runtime.channel.reply.createReplyDispatcherWithTyping({\n channel: 'deskfree',\n accountId: ctx.accountId,\n onReplyStart: typingCallbacks.onReplyStart,\n onIdle: typingCallbacks.onIdle,\n deliver: async (\n payload: { text?: string; body?: string },\n info?: { kind?: string },\n ) => {\n const text =\n typeof payload === 'string'\n ? payload\n : (payload.text ?? payload.body ?? '');\n if (!text) {\n log.warn('Deliver callback called with empty text, skipping.');\n return;\n }\n\n const taskId = message.taskId ?? getActiveTaskId() ?? undefined;\n const kind = info?.kind ?? 'final';\n\n if (kind === 'block') {\n // Block streaming: progressive message updates\n // OpenClaw sends deltas — accumulate into full text\n accumulatedText += text;\n\n if (!streamingSession) {\n // First block — create the message\n streamingSession = new DeskFreeStreamingSession(client, log);\n log.info(\n `Streaming reply to DeskFree (task: ${taskId ?? 'none'}): \"${accumulatedText.slice(0, 80)}...\"`,\n );\n await streamingSession.start(accumulatedText, taskId);\n } else {\n // Subsequent block — update in place with full accumulated text\n await streamingSession.update(accumulatedText);\n }\n } else if (kind === 'final') {\n if (streamingSession?.isActive()) {\n // Final after streaming — close with final text\n // Use the final text from OpenClaw (authoritative, may differ from accumulated)\n await streamingSession.close(text);\n streamingSession = null;\n accumulatedText = '';\n log.info('Streaming reply finalized.');\n } else {\n // No streaming — send as normal message\n log.info(\n `Sending reply to DeskFree (task: ${taskId ?? 'none'}): \"${text.slice(0, 80)}...\"`,\n );\n await client.sendMessage({ content: text, taskId });\n log.info('Reply sent successfully.');\n }\n } else {\n // tool results or other kinds — send as normal\n log.info(\n `Sending ${kind} reply to DeskFree (task: ${taskId ?? 'none'}): \"${text.slice(0, 80)}...\"`,\n );\n await client.sendMessage({ content: text, taskId });\n }\n },\n });\n\n await runtime.channel.reply.dispatchReplyFromConfig({\n ctx: msgCtx,\n cfg,\n dispatcher,\n replyOptions,\n });\n\n log.info(`Message ${message.messageId} dispatched successfully.`);\n } catch (err) {\n const errMsg = err instanceof Error ? err.message : String(err);\n log.warn(`Failed to dispatch message ${message.messageId}: ${errMsg}`);\n reportError('error', `Failed to dispatch message: ${errMsg}`, {\n component: 'deliver',\n event: 'dispatch_failed',\n messageId: message.messageId,\n });\n }\n}\n","import { readFileSync } from 'node:fs';\nimport { resolve } from 'node:path';\n\nexport const PLUGIN_VERSION: string = JSON.parse(\n readFileSync(resolve(__dirname, '..', 'package.json'), 'utf-8'),\n).version;\n","/**\n * Workspace sync utilities.\n *\n * Reads .md files from the OpenClaw workspace directory so they can be\n * uploaded to DeskFree via the workspace.sync API.\n */\nimport { readdirSync, readFileSync, statSync } from 'node:fs';\nimport { join, relative } from 'node:path';\n\nconst MAX_FILE_SIZE = 100 * 1024; // 100 KB\nconst SKIP_DIRS = new Set(['node_modules', '.git']);\n\n/**\n * Recursively read all `.md` files from a workspace directory.\n *\n * Skips files larger than 100 KB, hidden directories, node_modules, and .git.\n * Returns paths relative to `workspacePath`.\n */\nexport function readWorkspaceFiles(\n workspacePath: string,\n): { path: string; content: string }[] {\n const results: { path: string; content: string }[] = [];\n\n function walk(dir: string): void {\n let entries: string[];\n try {\n entries = readdirSync(dir);\n } catch {\n return;\n }\n\n for (const entry of entries) {\n // Skip hidden directories and known non-workspace dirs\n if (entry.startsWith('.') || SKIP_DIRS.has(entry)) continue;\n\n const fullPath = join(dir, entry);\n let st;\n try {\n st = statSync(fullPath);\n } catch {\n continue;\n }\n\n if (st.isDirectory()) {\n walk(fullPath);\n } else if (entry.endsWith('.md') && st.size <= MAX_FILE_SIZE) {\n try {\n const content = readFileSync(fullPath, 'utf-8');\n results.push({\n path: relative(workspacePath, fullPath),\n content,\n });\n } catch {\n // Skip unreadable files\n }\n }\n }\n }\n\n walk(workspacePath);\n return results;\n}\n\n/**\n * Resolve the OpenClaw workspace path from config.\n *\n * Looks for `agents.defaults.workspace` in the OpenClaw config.\n * Falls back to `~/.openclaw` if not found.\n */\nexport function resolveWorkspacePath(\n cfg: Record<string, unknown>,\n): string | null {\n try {\n const agents = cfg.agents as Record<string, unknown> | undefined;\n if (!agents) return null;\n const defaults = agents.defaults as Record<string, unknown> | undefined;\n if (!defaults) return null;\n const workspace = defaults.workspace;\n if (typeof workspace === 'string' && workspace.length > 0) {\n return workspace;\n }\n return null;\n } catch {\n return null;\n }\n}\n","// Use ESM imports for Node.js built-in modules\nimport { DeskFreeClient } from './client';\nimport { deliverMessageToAgent } from './deliver';\nimport { initErrorReporter, reportError } from './error-reporter';\nimport { resolvePluginStorePath } from './paths';\nimport { getDeskFreeRuntime } from './runtime';\nimport type {\n ChannelGatewayContext,\n ChatMessage,\n PluginLogger,\n WsNotification,\n} from './types';\nimport { PLUGIN_VERSION } from './version';\nimport { resolveWorkspacePath } from './workspace';\nimport { spawn } from 'node:child_process';\nimport { mkdirSync, readFileSync, writeFileSync } from 'node:fs';\nimport { dirname } from 'node:path';\nimport WebSocket from 'ws';\n\n// ── Active Task Tracking ──────────────────────────────────────────────\n// Tracks the currently active task so outbound messages can be\n// automatically threaded into it without explicit taskId parameters.\nlet activeTaskId: string | null = null;\n\nexport function setActiveTaskId(taskId: string | null): void {\n activeTaskId = taskId;\n}\n\nexport function getActiveTaskId(): string | null {\n return activeTaskId;\n}\n\n// ── Workspace S3 Sync Helpers ─────────────────────────────────────────\n/**\n * Helper function to get AWS credentials from DeskFree and run an S3 command.\n * Replaces the previous API-based workspace sync approach with direct AWS CLI usage.\n */\nasync function runS3CommandWithCredentials(\n client: DeskFreeClient,\n buildCommand: (s3Uri: string) => string[],\n workspacePath: string,\n log: PluginLogger,\n): Promise<boolean> {\n try {\n // Get short-lived credentials + S3 location from DeskFree\n const creds = await client.workspaceCredentials();\n\n const command = buildCommand(creds.s3Uri);\n\n // Set up environment with temporary credentials\n const env = {\n ...process.env,\n AWS_ACCESS_KEY_ID: creds.accessKeyId,\n AWS_SECRET_ACCESS_KEY: creds.secretAccessKey,\n AWS_SESSION_TOKEN: creds.sessionToken,\n AWS_DEFAULT_REGION: creds.region,\n };\n\n return new Promise((resolve, reject) => {\n const child = spawn('aws', command, {\n env,\n cwd: workspacePath,\n stdio: 'pipe',\n });\n\n let stdout = '';\n let stderr = '';\n\n child.stdout?.on('data', (data) => {\n stdout += data.toString();\n });\n\n child.stderr?.on('data', (data) => {\n stderr += data.toString();\n });\n\n child.on('close', (code) => {\n if (code === 0) {\n log.info(`S3 command succeeded: ${command.join(' ')}`);\n if (stdout.trim()) {\n log.debug(`S3 stdout: ${stdout.trim()}`);\n }\n resolve(true);\n } else {\n log.warn(`S3 command failed (exit ${code}): ${command.join(' ')}`);\n if (stderr.trim()) {\n log.warn(`S3 stderr: ${stderr.trim()}`);\n }\n reject(\n new Error(\n `AWS CLI command failed with exit code ${code}: ${stderr}`,\n ),\n );\n }\n });\n\n child.on('error', (err) => {\n log.warn(`S3 command spawn error: ${err.message}`);\n reject(err);\n });\n });\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n log.warn(`Failed to get S3 credentials or run command: ${message}`);\n reportError('warn', `S3 workspace command failed: ${message}`, {\n component: 'gateway',\n event: 'workspace_sync_failed',\n });\n return false;\n }\n}\n\nconst PING_INTERVAL_MS = 5 * 60 * 1000; // 5 minutes (API GW idle timeout = 10 min)\nconst POLL_FALLBACK_INTERVAL_MS = 30 * 1000; // 30s fallback when WS is down\nconst WS_CONNECTION_TIMEOUT_MS = 30 * 1000; // 30s timeout for initial connection\nconst WS_PONG_TIMEOUT_MS = 10 * 1000; // 10s timeout waiting for pong response\nconst BACKOFF_INITIAL_MS = 2000;\nconst BACKOFF_MAX_MS = 30000;\nconst BACKOFF_FACTOR = 1.8;\nconst HEALTH_LOG_INTERVAL_MS = 30 * 60 * 1000; // 30 minutes\nconst MAX_CONSECUTIVE_POLL_FAILURES = 5; // Switch to longer backoff after this many\n\n// Dedup set to prevent re-delivering messages due to cursor precision issues\n// (Postgres microsecond timestamps vs JS millisecond Date precision)\nconst deliveredMessageIds = new Set<string>();\n\ninterface ConnectionHealth {\n connectionStartTime: number;\n totalReconnects: number;\n lastReconnectAt: number | null;\n avgReconnectInterval: number;\n totalMessagesDelivered: number;\n lastMessageAt: number | null;\n currentMode: 'websocket' | 'polling';\n}\n\n// Module-level health state persists across reconnects\nconst healthState = new Map<string, ConnectionHealth>();\n\nfunction initializeHealth(accountId: string): void {\n if (!healthState.has(accountId)) {\n healthState.set(accountId, {\n connectionStartTime: Date.now(),\n totalReconnects: 0,\n lastReconnectAt: null,\n avgReconnectInterval: 0,\n totalMessagesDelivered: 0,\n lastMessageAt: null,\n currentMode: 'websocket',\n });\n }\n}\n\nfunction updateHealthMode(\n accountId: string,\n mode: 'websocket' | 'polling',\n): void {\n const health = healthState.get(accountId);\n if (health) {\n health.currentMode = mode;\n }\n}\n\nfunction recordReconnect(accountId: string): void {\n const health = healthState.get(accountId);\n if (health) {\n const now = Date.now();\n if (health.lastReconnectAt) {\n const interval = now - health.lastReconnectAt;\n health.avgReconnectInterval =\n (health.avgReconnectInterval * health.totalReconnects + interval) /\n (health.totalReconnects + 1);\n }\n health.totalReconnects++;\n health.lastReconnectAt = now;\n }\n}\n\nfunction recordMessageDelivery(accountId: string, count: number): void {\n const health = healthState.get(accountId);\n if (health) {\n health.totalMessagesDelivered += count;\n health.lastMessageAt = Date.now();\n }\n}\n\nfunction formatDuration(ms: number): string {\n const seconds = Math.floor(ms / 1000);\n const minutes = Math.floor(seconds / 60);\n const hours = Math.floor(minutes / 60);\n\n if (hours > 0) {\n return `${hours}h${minutes % 60}m`;\n } else if (minutes > 0) {\n return `${minutes}m${seconds % 60}s`;\n } else {\n return `${seconds}s`;\n }\n}\n\nfunction logHealthSummary(accountId: string, log: PluginLogger): void {\n const health = healthState.get(accountId);\n if (!health) return;\n\n const uptime = Date.now() - health.connectionStartTime;\n log.info(\n `DeskFree health: uptime=${formatDuration(uptime)}, ` +\n `reconnects=${health.totalReconnects}, ` +\n `messages=${health.totalMessagesDelivered}, ` +\n `mode=${health.currentMode}`,\n );\n}\n\n// Serialize poll operations per account to prevent duplicate message delivery.\n// Each account gets its own promise-chain mutex so polls don't block across accounts.\nconst pollChains = new Map<string, Promise<void>>();\n\nfunction enqueuePoll(\n client: DeskFreeClient,\n ctx: ChannelGatewayContext,\n getCursor: () => string | null,\n setCursor: (c: string | null) => void,\n log: PluginLogger,\n account?: { botName?: string; humanName?: string },\n): void {\n const accountId = ctx.accountId;\n const prev = pollChains.get(accountId) ?? Promise.resolve();\n const next = prev\n .then(async () => {\n const newCursor = await pollAndDeliver(\n client,\n ctx,\n getCursor(),\n log,\n account,\n );\n if (newCursor) setCursor(newCursor);\n })\n .catch((err) => {\n const message = err instanceof Error ? err.message : String(err);\n log.error(`Poll error: ${message}`);\n });\n pollChains.set(accountId, next);\n}\n\ninterface BackoffState {\n attempt: number;\n}\n\nfunction nextBackoff(state: BackoffState): number {\n const delay = Math.min(\n BACKOFF_INITIAL_MS * Math.pow(BACKOFF_FACTOR, state.attempt),\n BACKOFF_MAX_MS,\n );\n const jitter = delay * 0.25 * Math.random();\n state.attempt++;\n return delay + jitter;\n}\n\nfunction resetBackoff(state: BackoffState): void {\n state.attempt = 0;\n}\n\n// Clean up abort listener to prevent memory leak\nfunction sleepWithAbort(ms: number, signal: AbortSignal): Promise<void> {\n return new Promise((resolve) => {\n const onAbort = () => {\n clearTimeout(timer);\n resolve();\n };\n const timer = setTimeout(() => {\n signal.removeEventListener('abort', onAbort);\n resolve();\n }, ms);\n signal.addEventListener('abort', onAbort, { once: true });\n });\n}\n\n/**\n * Persistent cursor management.\n * Stores cursor on disk so we can resume from the right position after restart.\n */\nfunction loadCursor(ctx: ChannelGatewayContext): string | null {\n try {\n const cursorPath = resolvePluginStorePath(\n `cursors/${ctx.accountId}/cursor`,\n );\n return readFileSync(cursorPath, 'utf-8').trim() || null;\n } catch {\n return null;\n }\n}\n\nfunction saveCursor(\n ctx: ChannelGatewayContext,\n cursor: string,\n log?: PluginLogger,\n): void {\n try {\n const filePath = resolvePluginStorePath(`cursors/${ctx.accountId}/cursor`);\n const dir = dirname(filePath);\n mkdirSync(dir, { recursive: true });\n writeFileSync(filePath, cursor, 'utf-8');\n } catch (err) {\n // Non-fatal — we'll just re-process some messages on restart\n const message = err instanceof Error ? err.message : String(err);\n log?.warn(`Failed to persist cursor: ${message}`);\n }\n}\n\n/**\n * Main entry point for the DeskFree channel gateway.\n * Called by OpenClaw's channel manager via gateway.startAccount().\n *\n * Maintains a WebSocket connection for real-time notifications\n * and polls the messages endpoint for actual data.\n * Falls back to interval-based polling if WebSocket is unavailable.\n */\nexport async function startDeskFreeConnection(\n ctx: ChannelGatewayContext,\n): Promise<void> {\n const account = ctx.account;\n const client = new DeskFreeClient(account.botToken, account.apiUrl);\n const log = ctx.log ?? getDeskFreeRuntime().logging.createLogger('deskfree');\n\n let cursor = loadCursor(ctx);\n const backoff: BackoffState = { attempt: 0 };\n let totalReconnects = 0;\n\n // Initialize health tracking for this account\n initializeHealth(ctx.accountId);\n\n // Initialize the global error reporter so all modules can report errors\n const errorReporter = initErrorReporter(client, log);\n\n log.info(\n `Starting DeskFree connection for account ${ctx.accountId}` +\n (cursor ? ` (resuming from cursor ${cursor})` : ' (fresh start)'),\n );\n\n // Start health logging timer\n const healthInterval = setInterval(() => {\n if (!ctx.abortSignal.aborted) {\n logHealthSummary(ctx.accountId, log);\n }\n }, HEALTH_LOG_INTERVAL_MS);\n\n // Clean up health interval on shutdown\n ctx.abortSignal.addEventListener(\n 'abort',\n () => {\n clearInterval(healthInterval);\n },\n { once: true },\n );\n\n // Outer reconnection loop — runs until OpenClaw shuts down\n while (!ctx.abortSignal.aborted) {\n try {\n const { ticket, wsUrl } = await client.getWsTicket();\n resetBackoff(backoff);\n\n if (totalReconnects > 0) {\n log.info(\n `Got WS ticket, reconnecting to ${wsUrl}... (reconnect #${totalReconnects})`,\n );\n recordReconnect(ctx.accountId);\n } else {\n log.info(`Got WS ticket, connecting to ${wsUrl}...`);\n }\n\n updateHealthMode(ctx.accountId, 'websocket');\n\n cursor = await runWebSocketConnection({\n ticket,\n wsUrl,\n client,\n ctx,\n cursor,\n log,\n account,\n });\n\n // Connection closed cleanly — will reconnect\n totalReconnects++;\n } catch (err) {\n totalReconnects++;\n const message = err instanceof Error ? err.message : String(err);\n\n // If ticket fetch fails, fall back to polling\n if (\n message.includes('API error') ||\n message.includes('authentication failed') ||\n message.includes('server error')\n ) {\n log.warn(\n `Ticket fetch failed (attempt #${totalReconnects}): ${message}. Falling back to polling.`,\n );\n reportError('error', `WS ticket fetch failed: ${message}`, {\n component: 'gateway',\n event: 'ticket_fetch_failed',\n attempt: totalReconnects,\n });\n recordReconnect(ctx.accountId);\n updateHealthMode(ctx.accountId, 'polling');\n cursor = await runPollingFallback({ client, ctx, cursor, log });\n } else {\n log.warn(`Connection error (attempt #${totalReconnects}): ${message}`);\n reportError('warn', `WS connection error: ${message}`, {\n component: 'gateway',\n event: 'connection_error',\n attempt: totalReconnects,\n });\n recordReconnect(ctx.accountId);\n }\n\n if (ctx.abortSignal.aborted) break;\n\n const delay = nextBackoff(backoff);\n log.info(\n `Reconnecting in ${Math.round(delay)}ms (attempt #${totalReconnects + 1})...`,\n );\n await sleepWithAbort(delay, ctx.abortSignal);\n }\n }\n\n // Flush any remaining errors before shutdown\n await errorReporter.flush();\n errorReporter.dispose();\n\n log.info(\n `DeskFree connection loop exited after ${totalReconnects} reconnect(s).`,\n );\n}\n\n/**\n * Runs a single WebSocket connection session.\n * Returns the latest cursor when the connection closes.\n */\nasync function runWebSocketConnection(opts: {\n ticket: string;\n wsUrl: string;\n client: DeskFreeClient;\n ctx: ChannelGatewayContext;\n cursor: string | null;\n log: PluginLogger;\n account?: { botName?: string; humanName?: string };\n}): Promise<string | null> {\n const { ticket, wsUrl, client, ctx, log, account } = opts;\n let cursor = opts.cursor;\n\n return new Promise<string | null>((resolve, reject) => {\n const ws = new WebSocket(`${wsUrl}?ticket=${ticket}`);\n let pingInterval: ReturnType<typeof setInterval> | undefined;\n let connectionTimer: ReturnType<typeof setTimeout> | undefined;\n let pongTimer: ReturnType<typeof setTimeout> | undefined;\n let isConnected = false;\n\n // Centralized cleanup to prevent timer leaks\n const cleanup = () => {\n if (pingInterval !== undefined) {\n clearInterval(pingInterval);\n pingInterval = undefined;\n }\n if (connectionTimer !== undefined) {\n clearTimeout(connectionTimer);\n connectionTimer = undefined;\n }\n if (pongTimer !== undefined) {\n clearTimeout(pongTimer);\n pongTimer = undefined;\n }\n };\n\n // Connection timeout - if no 'open' event within timeout, fail\n connectionTimer = setTimeout(() => {\n if (!isConnected) {\n cleanup();\n try {\n ws.close();\n } catch {\n // Ignore close errors during timeout cleanup\n }\n reject(\n new Error(\n `WebSocket connection timeout after ${WS_CONNECTION_TIMEOUT_MS}ms`,\n ),\n );\n }\n }, WS_CONNECTION_TIMEOUT_MS);\n\n ws.on('open', async () => {\n isConnected = true;\n if (connectionTimer !== undefined) {\n clearTimeout(connectionTimer);\n connectionTimer = undefined;\n }\n\n ctx.setStatus({ running: true, lastStartAt: Date.now() });\n log.info('WebSocket connected.');\n\n // Keepalive ping every 5 minutes with pong timeout handling\n pingInterval = setInterval(() => {\n if (ws.readyState === WebSocket.OPEN) {\n try {\n ws.send(JSON.stringify({ action: 'ping' }));\n\n // Start pong timeout\n pongTimer = setTimeout(() => {\n log.warn('Pong timeout - closing WebSocket connection');\n try {\n ws.close(1002, 'pong timeout');\n } catch (closeErr) {\n const closeMsg =\n closeErr instanceof Error\n ? closeErr.message\n : String(closeErr);\n log.warn(\n `Error closing WebSocket on pong timeout: ${closeMsg}`,\n );\n }\n }, WS_PONG_TIMEOUT_MS);\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n log.warn(`Failed to send ping: ${message}`);\n }\n }\n }, PING_INTERVAL_MS);\n\n // Report plugin + OpenClaw versions on connect\n const openclawVersion = getDeskFreeRuntime().version;\n client\n .statusUpdate({\n status: 'idle',\n activeSubAgents: [],\n pluginVersion: PLUGIN_VERSION,\n openclawVersion,\n })\n .catch((err) => {\n const msg = err instanceof Error ? err.message : String(err);\n log.warn(`Failed to send statusUpdate: ${msg}`);\n });\n\n // Upload local workspace files to S3 on startup (backup local → S3)\n try {\n const cfg = getDeskFreeRuntime().config.loadConfig();\n const workspacePath = resolveWorkspacePath(\n cfg as Record<string, unknown>,\n );\n if (workspacePath) {\n const success = await runS3CommandWithCredentials(\n client,\n (s3Uri) => ['s3', 'sync', '.', s3Uri, '--only-show-errors'],\n workspacePath,\n log,\n );\n if (success) {\n log.info(\n `Workspace sync: uploaded files from ${workspacePath} to S3`,\n );\n } else {\n log.warn('Workspace sync: failed to upload files to S3');\n }\n } else {\n log.debug(\n 'Workspace sync: no workspace path configured (agents.defaults.workspace)',\n );\n }\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n log.warn(`Workspace sync failed: ${msg}`);\n }\n\n // NOTE: DeskFree directives are now injected via before_agent_start hook\n // (see index.ts) instead of writing to AGENTS.md/HEARTBEAT.md files.\n\n // Enqueue initial catch-up poll through mutex\n enqueuePoll(\n client,\n ctx,\n () => cursor,\n (c) => {\n cursor = c ?? cursor;\n },\n log,\n account,\n );\n });\n\n ws.on('message', async (data) => {\n try {\n const raw = data.toString();\n if (!raw || raw.length > 65536) {\n log.warn(\n `Ignoring oversized or empty WS message (${raw?.length ?? 0} bytes)`,\n );\n return;\n }\n\n const msg = JSON.parse(raw) as WsNotification | { action: string };\n\n if (!msg || typeof msg.action !== 'string') {\n log.warn('Ignoring WS message with missing or invalid action field');\n return;\n }\n\n if (msg.action === 'notify') {\n const notifyMsg = msg as WsNotification;\n\n // Handle workspace file changes from human edits\n if (notifyMsg.hint === 'workspace.fileChanged') {\n const paths = (notifyMsg as { paths?: string[] }).paths ?? [];\n log.info(\n `Workspace file(s) changed by human: ${paths.join(', ') || '(all)'}`,\n );\n\n // Download changed files using aws s3 cp\n try {\n const cfg = getDeskFreeRuntime().config.loadConfig();\n const workspacePath = resolveWorkspacePath(\n cfg as Record<string, unknown>,\n );\n\n if (workspacePath && paths.length > 0) {\n for (const filePath of paths) {\n try {\n // Use aws s3 cp to download the specific changed file\n const success = await runS3CommandWithCredentials(\n client,\n (s3Uri) => [\n 's3',\n 'cp',\n `${s3Uri}/${filePath}`,\n filePath,\n '--only-show-errors',\n ],\n workspacePath,\n log,\n );\n if (success) {\n log.info(`Updated local file: ${filePath}`);\n } else {\n log.warn(\n `Failed to download workspace file: ${filePath}`,\n );\n }\n } catch (err) {\n const errMsg =\n err instanceof Error ? err.message : String(err);\n log.warn(\n `Failed to download workspace file ${filePath}: ${errMsg}`,\n );\n }\n }\n } else if (!workspacePath) {\n log.warn(\n 'Cannot sync workspace files: workspace path not configured',\n );\n }\n } catch (err) {\n const errMsg = err instanceof Error ? err.message : String(err);\n log.warn(`Workspace file change handling failed: ${errMsg}`);\n }\n }\n\n // Handle workspace upload requests (upload local → S3)\n if (notifyMsg.hint === 'workspace.uploadRequested') {\n log.info('Workspace upload requested');\n try {\n const cfg = getDeskFreeRuntime().config.loadConfig();\n const workspacePath = resolveWorkspacePath(\n cfg as Record<string, unknown>,\n );\n if (workspacePath) {\n const success = await runS3CommandWithCredentials(\n client,\n (s3Uri) => ['s3', 'sync', '.', s3Uri, '--only-show-errors'],\n workspacePath,\n log,\n );\n if (success) {\n log.info(`Workspace upload: synced ${workspacePath} to S3`);\n } else {\n log.warn('Workspace upload: failed to sync to S3');\n }\n } else {\n log.warn(\n 'Cannot upload workspace: workspace path not configured',\n );\n }\n } catch (err) {\n const errMsg = err instanceof Error ? err.message : String(err);\n log.warn(`Workspace upload failed: ${errMsg}`);\n }\n }\n\n // Enqueue notification-triggered poll through mutex\n enqueuePoll(\n client,\n ctx,\n () => cursor,\n (c) => {\n cursor = c ?? cursor;\n },\n log,\n );\n } else if (msg.action === 'pong') {\n // Clear pong timeout - connection is healthy\n if (pongTimer !== undefined) {\n clearTimeout(pongTimer);\n pongTimer = undefined;\n }\n log.debug('Received pong - connection healthy');\n }\n // Ignore other message types\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n log.warn(`Error processing WS message: ${message}`);\n }\n });\n\n ws.on('close', (code, reason) => {\n cleanup();\n isConnected = false;\n ctx.setStatus({ running: false, lastStopAt: Date.now() });\n\n // Classify close codes for better logging and error handling\n if (code === 1000) {\n log.info(`WebSocket closed normally: ${code} ${reason.toString()}`);\n } else if (code === 1001) {\n log.info(\n `WebSocket closed - endpoint going away: ${code} ${reason.toString()}`,\n );\n } else if (code >= 1002 && code <= 1011) {\n log.warn(`WebSocket closed with error: ${code} ${reason.toString()}`);\n reportError(\n 'error',\n `WebSocket closed with error: ${code} ${reason.toString()}`,\n {\n component: 'gateway',\n event: 'ws_close_error',\n closeCode: code,\n },\n );\n ctx.setStatus({\n running: false,\n lastStopAt: Date.now(),\n lastError: `WebSocket closed with code ${code}: ${reason.toString()}`,\n });\n } else if (code >= 4000) {\n log.warn(\n `WebSocket closed with application error: ${code} ${reason.toString()}`,\n );\n reportError(\n 'error',\n `WebSocket application error: ${code} ${reason.toString()}`,\n {\n component: 'gateway',\n event: 'ws_close_app_error',\n closeCode: code,\n },\n );\n ctx.setStatus({\n running: false,\n lastStopAt: Date.now(),\n lastError: `Application error ${code}: ${reason.toString()}`,\n });\n } else {\n log.info(`WebSocket closed: ${code} ${reason.toString()}`);\n }\n\n resolve(cursor);\n });\n\n ws.on('error', (err) => {\n cleanup();\n isConnected = false;\n const errorMessage = err instanceof Error ? err.message : String(err);\n log.error(`WebSocket error: ${errorMessage}`);\n reportError('error', `WebSocket error: ${errorMessage}`, {\n component: 'gateway',\n event: 'ws_error',\n });\n ctx.setStatus({\n running: false,\n lastError: errorMessage,\n lastStopAt: Date.now(),\n });\n reject(err);\n });\n\n // Clean shutdown - register abort handler before potential errors\n ctx.abortSignal.addEventListener(\n 'abort',\n () => {\n log.info('Shutdown requested - closing WebSocket');\n cleanup();\n try {\n if (\n ws.readyState === WebSocket.OPEN ||\n ws.readyState === WebSocket.CONNECTING\n ) {\n ws.close(1000, 'shutdown');\n }\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n log.warn(`Error closing WebSocket during shutdown: ${message}`);\n }\n },\n { once: true },\n );\n });\n}\n\n/**\n * Fallback polling loop when WebSocket is unavailable.\n * Polls every 30s until aborted or until we should retry WebSocket.\n */\nasync function runPollingFallback(opts: {\n client: DeskFreeClient;\n ctx: ChannelGatewayContext;\n cursor: string | null;\n log: PluginLogger;\n}): Promise<string | null> {\n const { client, ctx, log } = opts;\n let cursor = opts.cursor;\n let iterations = 0;\n const maxIterations = 10; // After 10 polls (~5 min), try WebSocket again\n\n ctx.setStatus({ running: true, lastStartAt: Date.now() });\n log.info('Running in polling fallback mode.');\n\n let consecutiveFailures = 0;\n\n while (!ctx.abortSignal.aborted && iterations < maxIterations) {\n const newCursor = await pollAndDeliver(client, ctx, cursor, log);\n if (newCursor) {\n cursor = newCursor;\n consecutiveFailures = 0;\n } else if (newCursor === null && cursor) {\n // null return with existing cursor means poll succeeded but no new messages - fine\n consecutiveFailures = 0;\n } else {\n consecutiveFailures++;\n if (consecutiveFailures >= MAX_CONSECUTIVE_POLL_FAILURES) {\n log.warn(\n `${consecutiveFailures} consecutive poll failures, breaking out to retry WebSocket`,\n );\n reportError(\n 'error',\n `${consecutiveFailures} consecutive poll failures, switching to WebSocket retry`,\n {\n component: 'gateway',\n event: 'poll_max_failures',\n consecutiveFailures,\n },\n );\n break;\n }\n }\n iterations++;\n // Add jitter to poll interval to avoid thundering herd\n const jitter = Math.random() * POLL_FALLBACK_INTERVAL_MS * 0.2;\n await sleepWithAbort(POLL_FALLBACK_INTERVAL_MS + jitter, ctx.abortSignal);\n }\n\n ctx.setStatus({ running: false, lastStopAt: Date.now() });\n return cursor;\n}\n\n/**\n * Poll the messages endpoint and deliver new messages to the OpenClaw agent.\n * Returns the new cursor, or null if no messages.\n *\n * On first run (cursor is null), we skip delivering old messages and just\n * seed the cursor so we only receive messages from this point forward.\n */\nasync function pollAndDeliver(\n client: DeskFreeClient,\n ctx: ChannelGatewayContext,\n cursor: string | null,\n log: PluginLogger,\n account?: { botName?: string; humanName?: string },\n): Promise<string | null> {\n try {\n // SEED is a sentinel value indicating we've completed the first-run\n // flow but had no real cursor (empty inbox). Don't send it to the API\n // since it's not a valid datetime cursor.\n const SEED = 'SEED';\n const isFirstRun = !cursor || cursor === SEED;\n const apiCursor = cursor && cursor !== SEED ? cursor : undefined;\n\n const response = await client.listMessages({\n ...(apiCursor ? { cursor: apiCursor } : {}),\n });\n\n // On first run, don't deliver old messages — just seed the cursor\n // and send a welcome message so the user knows the connection is live.\n if (isFirstRun) {\n if (response.cursor) {\n log.info(\n `First run: skipping ${response.items.length} existing message(s), seeding cursor.`,\n );\n saveCursor(ctx, response.cursor, log);\n } else {\n log.info('First run: no messages yet (empty inbox).');\n }\n\n log.info('Connected to DeskFree. Ready to receive messages and tasks.');\n\n // Send welcome message to trigger the first agent session.\n // This ensures workspace files get scaffolded on fresh instances.\n try {\n const botName = account?.botName;\n const humanName = account?.humanName;\n const welcomeContent =\n botName && humanName\n ? `Hi! I'm ${humanName}. Your name is ${botName}. Welcome to DeskFree — read your BOOTSTRAP.md to get started, then check for any tasks.`\n : \"DeskFree plugin installed! Read your BOOTSTRAP.md if you haven't already, then check for any tasks.\";\n\n const welcomeMessage: ChatMessage = {\n messageId: `welcome-${Date.now()}`,\n botId: '',\n humanId: 'system',\n authorType: 'user',\n content: welcomeContent,\n createdAt: new Date().toISOString(),\n userName: humanName ?? 'System',\n };\n\n await deliverMessageToAgent(ctx, welcomeMessage, client);\n log.info('Sent welcome message to agent.');\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n log.warn(`Failed to send welcome message: ${msg}`);\n }\n\n // Return the API cursor, or SEED as sentinel when API returns null\n // (empty inbox) so subsequent polls don't re-trigger first-run flow.\n return response.cursor ?? SEED;\n }\n\n if (response.items.length === 0) return null;\n\n // Filter out already-delivered messages (handles cursor precision issues\n // where Postgres microsecond timestamps round-trip through JS millisecond Date)\n const newItems = response.items.filter(\n (m) => !deliveredMessageIds.has(m.messageId),\n );\n\n if (newItems.length === 0) {\n log.debug(\n `Poll returned ${response.items.length} item(s), all already delivered.`,\n );\n // Still advance cursor even if all items were duplicates\n if (response.cursor) {\n saveCursor(ctx, response.cursor, log);\n }\n return response.cursor;\n }\n\n log.info(\n `Received ${newItems.length} new message(s) (${response.items.length - newItems.length} duplicate(s) skipped).`,\n );\n\n // Save cursor after each successful delivery so a mid-batch\n // failure doesn't cause the entire batch to be re-delivered on retry.\n let deliveredCount = 0;\n for (const message of newItems) {\n // Skip bot's own messages to prevent echo loops\n if (message.authorType === 'bot') {\n log.debug(`Skipping bot message ${message.messageId}`);\n deliveredMessageIds.add(message.messageId);\n continue;\n }\n await deliverMessageToAgent(ctx, message, client);\n deliveredMessageIds.add(message.messageId);\n deliveredCount++;\n }\n\n // Cap the dedup set to prevent unbounded memory growth\n if (deliveredMessageIds.size > 1000) {\n const entries = Array.from(deliveredMessageIds);\n deliveredMessageIds.clear();\n for (const id of entries.slice(-500)) {\n deliveredMessageIds.add(id);\n }\n }\n\n // Record message delivery in health stats\n if (deliveredCount > 0) {\n recordMessageDelivery(ctx.accountId, deliveredCount);\n }\n\n // Persist cursor\n if (response.cursor) {\n saveCursor(ctx, response.cursor, log);\n }\n\n return response.cursor;\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n log.warn(`Poll failed: ${message}`);\n reportError('warn', `Message poll failed: ${message}`, {\n component: 'gateway',\n event: 'poll_failed',\n });\n return null;\n }\n}\n","import createWebSocketStream from './lib/stream.js';\nimport Receiver from './lib/receiver.js';\nimport Sender from './lib/sender.js';\nimport WebSocket from './lib/websocket.js';\nimport WebSocketServer from './lib/websocket-server.js';\n\nexport { createWebSocketStream, Receiver, Sender, WebSocket, WebSocketServer };\nexport default WebSocket;\n","// --------------------------------------------------------------------------\n// PropertyKey\n// --------------------------------------------------------------------------\n/** Returns true if this value has this property key */\nexport function HasPropertyKey(value, key) {\n return key in value;\n}\n// --------------------------------------------------------------------------\n// Object Instances\n// --------------------------------------------------------------------------\n/** Returns true if this value is an async iterator */\nexport function IsAsyncIterator(value) {\n return IsObject(value) && !IsArray(value) && !IsUint8Array(value) && Symbol.asyncIterator in value;\n}\n/** Returns true if this value is an array */\nexport function IsArray(value) {\n return Array.isArray(value);\n}\n/** Returns true if this value is bigint */\nexport function IsBigInt(value) {\n return typeof value === 'bigint';\n}\n/** Returns true if this value is a boolean */\nexport function IsBoolean(value) {\n return typeof value === 'boolean';\n}\n/** Returns true if this value is a Date object */\nexport function IsDate(value) {\n return value instanceof globalThis.Date;\n}\n/** Returns true if this value is a function */\nexport function IsFunction(value) {\n return typeof value === 'function';\n}\n/** Returns true if this value is an iterator */\nexport function IsIterator(value) {\n return IsObject(value) && !IsArray(value) && !IsUint8Array(value) && Symbol.iterator in value;\n}\n/** Returns true if this value is null */\nexport function IsNull(value) {\n return value === null;\n}\n/** Returns true if this value is number */\nexport function IsNumber(value) {\n return typeof value === 'number';\n}\n/** Returns true if this value is an object */\nexport function IsObject(value) {\n return typeof value === 'object' && value !== null;\n}\n/** Returns true if this value is RegExp */\nexport function IsRegExp(value) {\n return value instanceof globalThis.RegExp;\n}\n/** Returns true if this value is string */\nexport function IsString(value) {\n return typeof value === 'string';\n}\n/** Returns true if this value is symbol */\nexport function IsSymbol(value) {\n return typeof value === 'symbol';\n}\n/** Returns true if this value is a Uint8Array */\nexport function IsUint8Array(value) {\n return value instanceof globalThis.Uint8Array;\n}\n/** Returns true if this value is undefined */\nexport function IsUndefined(value) {\n return value === undefined;\n}\n","import * as ValueGuard from '../guard/value.mjs';\nfunction ArrayType(value) {\n return value.map((value) => Visit(value));\n}\nfunction DateType(value) {\n return new Date(value.getTime());\n}\nfunction Uint8ArrayType(value) {\n return new Uint8Array(value);\n}\nfunction RegExpType(value) {\n return new RegExp(value.source, value.flags);\n}\nfunction ObjectType(value) {\n const result = {};\n for (const key of Object.getOwnPropertyNames(value)) {\n result[key] = Visit(value[key]);\n }\n for (const key of Object.getOwnPropertySymbols(value)) {\n result[key] = Visit(value[key]);\n }\n return result;\n}\n// prettier-ignore\nfunction Visit(value) {\n return (ValueGuard.IsArray(value) ? ArrayType(value) :\n ValueGuard.IsDate(value) ? DateType(value) :\n ValueGuard.IsUint8Array(value) ? Uint8ArrayType(value) :\n ValueGuard.IsRegExp(value) ? RegExpType(value) :\n ValueGuard.IsObject(value) ? ObjectType(value) :\n value);\n}\n/** Clones a value */\nexport function Clone(value) {\n return Visit(value);\n}\n","import { Clone } from './value.mjs';\n/** Clones a Rest */\nexport function CloneRest(schemas) {\n return schemas.map((schema) => CloneType(schema));\n}\n/** Clones a Type */\nexport function CloneType(schema, options) {\n return options === undefined ? Clone(schema) : Clone({ ...options, ...schema });\n}\n","// --------------------------------------------------------------------------\n// Iterators\n// --------------------------------------------------------------------------\n/** Returns true if this value is an async iterator */\nexport function IsAsyncIterator(value) {\n return IsObject(value) && globalThis.Symbol.asyncIterator in value;\n}\n/** Returns true if this value is an iterator */\nexport function IsIterator(value) {\n return IsObject(value) && globalThis.Symbol.iterator in value;\n}\n// --------------------------------------------------------------------------\n// Object Instances\n// --------------------------------------------------------------------------\n/** Returns true if this value is not an instance of a class */\nexport function IsStandardObject(value) {\n return IsObject(value) && (globalThis.Object.getPrototypeOf(value) === Object.prototype || globalThis.Object.getPrototypeOf(value) === null);\n}\n/** Returns true if this value is an instance of a class */\nexport function IsInstanceObject(value) {\n return IsObject(value) && !IsArray(value) && IsFunction(value.constructor) && value.constructor.name !== 'Object';\n}\n// --------------------------------------------------------------------------\n// JavaScript\n// --------------------------------------------------------------------------\n/** Returns true if this value is a Promise */\nexport function IsPromise(value) {\n return value instanceof globalThis.Promise;\n}\n/** Returns true if this value is a Date */\nexport function IsDate(value) {\n return value instanceof Date && globalThis.Number.isFinite(value.getTime());\n}\n/** Returns true if this value is an instance of Map<K, T> */\nexport function IsMap(value) {\n return value instanceof globalThis.Map;\n}\n/** Returns true if this value is an instance of Set<T> */\nexport function IsSet(value) {\n return value instanceof globalThis.Set;\n}\n/** Returns true if this value is RegExp */\nexport function IsRegExp(value) {\n return value instanceof globalThis.RegExp;\n}\n/** Returns true if this value is a typed array */\nexport function IsTypedArray(value) {\n return globalThis.ArrayBuffer.isView(value);\n}\n/** Returns true if the value is a Int8Array */\nexport function IsInt8Array(value) {\n return value instanceof globalThis.Int8Array;\n}\n/** Returns true if the value is a Uint8Array */\nexport function IsUint8Array(value) {\n return value instanceof globalThis.Uint8Array;\n}\n/** Returns true if the value is a Uint8ClampedArray */\nexport function IsUint8ClampedArray(value) {\n return value instanceof globalThis.Uint8ClampedArray;\n}\n/** Returns true if the value is a Int16Array */\nexport function IsInt16Array(value) {\n return value instanceof globalThis.Int16Array;\n}\n/** Returns true if the value is a Uint16Array */\nexport function IsUint16Array(value) {\n return value instanceof globalThis.Uint16Array;\n}\n/** Returns true if the value is a Int32Array */\nexport function IsInt32Array(value) {\n return value instanceof globalThis.Int32Array;\n}\n/** Returns true if the value is a Uint32Array */\nexport function IsUint32Array(value) {\n return value instanceof globalThis.Uint32Array;\n}\n/** Returns true if the value is a Float32Array */\nexport function IsFloat32Array(value) {\n return value instanceof globalThis.Float32Array;\n}\n/** Returns true if the value is a Float64Array */\nexport function IsFloat64Array(value) {\n return value instanceof globalThis.Float64Array;\n}\n/** Returns true if the value is a BigInt64Array */\nexport function IsBigInt64Array(value) {\n return value instanceof globalThis.BigInt64Array;\n}\n/** Returns true if the value is a BigUint64Array */\nexport function IsBigUint64Array(value) {\n return value instanceof globalThis.BigUint64Array;\n}\n// --------------------------------------------------------------------------\n// PropertyKey\n// --------------------------------------------------------------------------\n/** Returns true if this value has this property key */\nexport function HasPropertyKey(value, key) {\n return key in value;\n}\n// --------------------------------------------------------------------------\n// Standard\n// --------------------------------------------------------------------------\n/** Returns true of this value is an object type */\nexport function IsObject(value) {\n return value !== null && typeof value === 'object';\n}\n/** Returns true if this value is an array, but not a typed array */\nexport function IsArray(value) {\n return globalThis.Array.isArray(value) && !globalThis.ArrayBuffer.isView(value);\n}\n/** Returns true if this value is an undefined */\nexport function IsUndefined(value) {\n return value === undefined;\n}\n/** Returns true if this value is an null */\nexport function IsNull(value) {\n return value === null;\n}\n/** Returns true if this value is an boolean */\nexport function IsBoolean(value) {\n return typeof value === 'boolean';\n}\n/** Returns true if this value is an number */\nexport function IsNumber(value) {\n return typeof value === 'number';\n}\n/** Returns true if this value is an integer */\nexport function IsInteger(value) {\n return globalThis.Number.isInteger(value);\n}\n/** Returns true if this value is bigint */\nexport function IsBigInt(value) {\n return typeof value === 'bigint';\n}\n/** Returns true if this value is string */\nexport function IsString(value) {\n return typeof value === 'string';\n}\n/** Returns true if this value is a function */\nexport function IsFunction(value) {\n return typeof value === 'function';\n}\n/** Returns true if this value is a symbol */\nexport function IsSymbol(value) {\n return typeof value === 'symbol';\n}\n/** Returns true if this value is a value type such as number, string, boolean */\nexport function IsValueType(value) {\n // prettier-ignore\n return (IsBigInt(value) ||\n IsBoolean(value) ||\n IsNull(value) ||\n IsNumber(value) ||\n IsString(value) ||\n IsSymbol(value) ||\n IsUndefined(value));\n}\n","import { IsObject, IsArray, IsNumber, IsUndefined } from '../value/guard/index.mjs';\nexport var TypeSystemPolicy;\n(function (TypeSystemPolicy) {\n // ------------------------------------------------------------------\n // TypeSystemPolicy: Instancing\n // ------------------------------------------------------------------\n /**\n * Configures the instantiation behavior of TypeBox types. The `default` option assigns raw JavaScript\n * references for embedded types, which may cause side effects if type properties are explicitly updated\n * outside the TypeBox type builder. The `clone` option creates copies of any shared types upon creation,\n * preventing unintended side effects. The `freeze` option applies `Object.freeze()` to the type, making\n * it fully readonly and immutable. Implementations should use `default` whenever possible, as it is the\n * fastest way to instantiate types. The default setting is `default`.\n */\n TypeSystemPolicy.InstanceMode = 'default';\n // ------------------------------------------------------------------\n // TypeSystemPolicy: Checking\n // ------------------------------------------------------------------\n /** Sets whether TypeBox should assert optional properties using the TypeScript `exactOptionalPropertyTypes` assertion policy. The default is `false` */\n TypeSystemPolicy.ExactOptionalPropertyTypes = false;\n /** Sets whether arrays should be treated as a kind of objects. The default is `false` */\n TypeSystemPolicy.AllowArrayObject = false;\n /** Sets whether `NaN` or `Infinity` should be treated as valid numeric values. The default is `false` */\n TypeSystemPolicy.AllowNaN = false;\n /** Sets whether `null` should validate for void types. The default is `false` */\n TypeSystemPolicy.AllowNullVoid = false;\n /** Checks this value using the ExactOptionalPropertyTypes policy */\n function IsExactOptionalProperty(value, key) {\n return TypeSystemPolicy.ExactOptionalPropertyTypes ? key in value : value[key] !== undefined;\n }\n TypeSystemPolicy.IsExactOptionalProperty = IsExactOptionalProperty;\n /** Checks this value using the AllowArrayObjects policy */\n function IsObjectLike(value) {\n const isObject = IsObject(value);\n return TypeSystemPolicy.AllowArrayObject ? isObject : isObject && !IsArray(value);\n }\n TypeSystemPolicy.IsObjectLike = IsObjectLike;\n /** Checks this value as a record using the AllowArrayObjects policy */\n function IsRecordLike(value) {\n return IsObjectLike(value) && !(value instanceof Date) && !(value instanceof Uint8Array);\n }\n TypeSystemPolicy.IsRecordLike = IsRecordLike;\n /** Checks this value using the AllowNaN policy */\n function IsNumberLike(value) {\n return TypeSystemPolicy.AllowNaN ? IsNumber(value) : Number.isFinite(value);\n }\n TypeSystemPolicy.IsNumberLike = IsNumberLike;\n /** Checks this value using the AllowVoidNull policy */\n function IsVoidLike(value) {\n const isUndefined = IsUndefined(value);\n return TypeSystemPolicy.AllowNullVoid ? isUndefined || value === null : isUndefined;\n }\n TypeSystemPolicy.IsVoidLike = IsVoidLike;\n})(TypeSystemPolicy || (TypeSystemPolicy = {}));\n","import * as ValueGuard from '../guard/value.mjs';\nfunction ImmutableArray(value) {\n return globalThis.Object.freeze(value).map((value) => Immutable(value));\n}\nfunction ImmutableDate(value) {\n return value;\n}\nfunction ImmutableUint8Array(value) {\n return value;\n}\nfunction ImmutableRegExp(value) {\n return value;\n}\nfunction ImmutableObject(value) {\n const result = {};\n for (const key of Object.getOwnPropertyNames(value)) {\n result[key] = Immutable(value[key]);\n }\n for (const key of Object.getOwnPropertySymbols(value)) {\n result[key] = Immutable(value[key]);\n }\n return globalThis.Object.freeze(result);\n}\n/** Specialized deep immutable value. Applies freeze recursively to the given value */\n// prettier-ignore\nexport function Immutable(value) {\n return (ValueGuard.IsArray(value) ? ImmutableArray(value) :\n ValueGuard.IsDate(value) ? ImmutableDate(value) :\n ValueGuard.IsUint8Array(value) ? ImmutableUint8Array(value) :\n ValueGuard.IsRegExp(value) ? ImmutableRegExp(value) :\n ValueGuard.IsObject(value) ? ImmutableObject(value) :\n value);\n}\n","import { TypeSystemPolicy } from '../../system/policy.mjs';\nimport { Immutable } from './immutable.mjs';\nimport { Clone } from '../clone/value.mjs';\n/** Creates TypeBox schematics using the configured InstanceMode */\nexport function CreateType(schema, options) {\n const result = options !== undefined ? { ...options, ...schema } : schema;\n switch (TypeSystemPolicy.InstanceMode) {\n case 'freeze':\n return Immutable(result);\n case 'clone':\n return Clone(result);\n default:\n return result;\n }\n}\n","/** The base Error type thrown for all TypeBox exceptions */\nexport class TypeBoxError extends Error {\n constructor(message) {\n super(message);\n }\n}\n","/** Symbol key applied to transform types */\nexport const TransformKind = Symbol.for('TypeBox.Transform');\n/** Symbol key applied to readonly types */\nexport const ReadonlyKind = Symbol.for('TypeBox.Readonly');\n/** Symbol key applied to optional types */\nexport const OptionalKind = Symbol.for('TypeBox.Optional');\n/** Symbol key applied to types */\nexport const Hint = Symbol.for('TypeBox.Hint');\n/** Symbol key applied to types */\nexport const Kind = Symbol.for('TypeBox.Kind');\n","import * as ValueGuard from './value.mjs';\nimport { Kind, Hint, TransformKind, ReadonlyKind, OptionalKind } from '../symbols/index.mjs';\n/** `[Kind-Only]` Returns true if this value has a Readonly symbol */\nexport function IsReadonly(value) {\n return ValueGuard.IsObject(value) && value[ReadonlyKind] === 'Readonly';\n}\n/** `[Kind-Only]` Returns true if this value has a Optional symbol */\nexport function IsOptional(value) {\n return ValueGuard.IsObject(value) && value[OptionalKind] === 'Optional';\n}\n/** `[Kind-Only]` Returns true if the given value is TAny */\nexport function IsAny(value) {\n return IsKindOf(value, 'Any');\n}\n/** `[Kind-Only]` Returns true if the given value is TArgument */\nexport function IsArgument(value) {\n return IsKindOf(value, 'Argument');\n}\n/** `[Kind-Only]` Returns true if the given value is TArray */\nexport function IsArray(value) {\n return IsKindOf(value, 'Array');\n}\n/** `[Kind-Only]` Returns true if the given value is TAsyncIterator */\nexport function IsAsyncIterator(value) {\n return IsKindOf(value, 'AsyncIterator');\n}\n/** `[Kind-Only]` Returns true if the given value is TBigInt */\nexport function IsBigInt(value) {\n return IsKindOf(value, 'BigInt');\n}\n/** `[Kind-Only]` Returns true if the given value is TBoolean */\nexport function IsBoolean(value) {\n return IsKindOf(value, 'Boolean');\n}\n/** `[Kind-Only]` Returns true if the given value is TComputed */\nexport function IsComputed(value) {\n return IsKindOf(value, 'Computed');\n}\n/** `[Kind-Only]` Returns true if the given value is TConstructor */\nexport function IsConstructor(value) {\n return IsKindOf(value, 'Constructor');\n}\n/** `[Kind-Only]` Returns true if the given value is TDate */\nexport function IsDate(value) {\n return IsKindOf(value, 'Date');\n}\n/** `[Kind-Only]` Returns true if the given value is TFunction */\nexport function IsFunction(value) {\n return IsKindOf(value, 'Function');\n}\n/** `[Kind-Only]` Returns true if the given value is TInteger */\nexport function IsImport(value) {\n return IsKindOf(value, 'Import');\n}\n/** `[Kind-Only]` Returns true if the given value is TInteger */\nexport function IsInteger(value) {\n return IsKindOf(value, 'Integer');\n}\n/** `[Kind-Only]` Returns true if the given schema is TProperties */\nexport function IsProperties(value) {\n return ValueGuard.IsObject(value);\n}\n/** `[Kind-Only]` Returns true if the given value is TIntersect */\nexport function IsIntersect(value) {\n return IsKindOf(value, 'Intersect');\n}\n/** `[Kind-Only]` Returns true if the given value is TIterator */\nexport function IsIterator(value) {\n return IsKindOf(value, 'Iterator');\n}\n/** `[Kind-Only]` Returns true if the given value is a TKind with the given name. */\nexport function IsKindOf(value, kind) {\n return ValueGuard.IsObject(value) && Kind in value && value[Kind] === kind;\n}\n/** `[Kind-Only]` Returns true if the given value is TLiteral<string> */\nexport function IsLiteralString(value) {\n return IsLiteral(value) && ValueGuard.IsString(value.const);\n}\n/** `[Kind-Only]` Returns true if the given value is TLiteral<number> */\nexport function IsLiteralNumber(value) {\n return IsLiteral(value) && ValueGuard.IsNumber(value.const);\n}\n/** `[Kind-Only]` Returns true if the given value is TLiteral<boolean> */\nexport function IsLiteralBoolean(value) {\n return IsLiteral(value) && ValueGuard.IsBoolean(value.const);\n}\n/** `[Kind-Only]` Returns true if the given value is TLiteralValue */\nexport function IsLiteralValue(value) {\n return ValueGuard.IsBoolean(value) || ValueGuard.IsNumber(value) || ValueGuard.IsString(value);\n}\n/** `[Kind-Only]` Returns true if the given value is TLiteral */\nexport function IsLiteral(value) {\n return IsKindOf(value, 'Literal');\n}\n/** `[Kind-Only]` Returns true if the given value is a TMappedKey */\nexport function IsMappedKey(value) {\n return IsKindOf(value, 'MappedKey');\n}\n/** `[Kind-Only]` Returns true if the given value is TMappedResult */\nexport function IsMappedResult(value) {\n return IsKindOf(value, 'MappedResult');\n}\n/** `[Kind-Only]` Returns true if the given value is TNever */\nexport function IsNever(value) {\n return IsKindOf(value, 'Never');\n}\n/** `[Kind-Only]` Returns true if the given value is TNot */\nexport function IsNot(value) {\n return IsKindOf(value, 'Not');\n}\n/** `[Kind-Only]` Returns true if the given value is TNull */\nexport function IsNull(value) {\n return IsKindOf(value, 'Null');\n}\n/** `[Kind-Only]` Returns true if the given value is TNumber */\nexport function IsNumber(value) {\n return IsKindOf(value, 'Number');\n}\n/** `[Kind-Only]` Returns true if the given value is TObject */\nexport function IsObject(value) {\n return IsKindOf(value, 'Object');\n}\n/** `[Kind-Only]` Returns true if the given value is TPromise */\nexport function IsPromise(value) {\n return IsKindOf(value, 'Promise');\n}\n/** `[Kind-Only]` Returns true if the given value is TRecord */\nexport function IsRecord(value) {\n return IsKindOf(value, 'Record');\n}\n/** `[Kind-Only]` Returns true if this value is TRecursive */\nexport function IsRecursive(value) {\n return ValueGuard.IsObject(value) && Hint in value && value[Hint] === 'Recursive';\n}\n/** `[Kind-Only]` Returns true if the given value is TRef */\nexport function IsRef(value) {\n return IsKindOf(value, 'Ref');\n}\n/** `[Kind-Only]` Returns true if the given value is TRegExp */\nexport function IsRegExp(value) {\n return IsKindOf(value, 'RegExp');\n}\n/** `[Kind-Only]` Returns true if the given value is TString */\nexport function IsString(value) {\n return IsKindOf(value, 'String');\n}\n/** `[Kind-Only]` Returns true if the given value is TSymbol */\nexport function IsSymbol(value) {\n return IsKindOf(value, 'Symbol');\n}\n/** `[Kind-Only]` Returns true if the given value is TTemplateLiteral */\nexport function IsTemplateLiteral(value) {\n return IsKindOf(value, 'TemplateLiteral');\n}\n/** `[Kind-Only]` Returns true if the given value is TThis */\nexport function IsThis(value) {\n return IsKindOf(value, 'This');\n}\n/** `[Kind-Only]` Returns true of this value is TTransform */\nexport function IsTransform(value) {\n return ValueGuard.IsObject(value) && TransformKind in value;\n}\n/** `[Kind-Only]` Returns true if the given value is TTuple */\nexport function IsTuple(value) {\n return IsKindOf(value, 'Tuple');\n}\n/** `[Kind-Only]` Returns true if the given value is TUndefined */\nexport function IsUndefined(value) {\n return IsKindOf(value, 'Undefined');\n}\n/** `[Kind-Only]` Returns true if the given value is TUnion */\nexport function IsUnion(value) {\n return IsKindOf(value, 'Union');\n}\n/** `[Kind-Only]` Returns true if the given value is TUint8Array */\nexport function IsUint8Array(value) {\n return IsKindOf(value, 'Uint8Array');\n}\n/** `[Kind-Only]` Returns true if the given value is TUnknown */\nexport function IsUnknown(value) {\n return IsKindOf(value, 'Unknown');\n}\n/** `[Kind-Only]` Returns true if the given value is a raw TUnsafe */\nexport function IsUnsafe(value) {\n return IsKindOf(value, 'Unsafe');\n}\n/** `[Kind-Only]` Returns true if the given value is TVoid */\nexport function IsVoid(value) {\n return IsKindOf(value, 'Void');\n}\n/** `[Kind-Only]` Returns true if the given value is TKind */\nexport function IsKind(value) {\n return ValueGuard.IsObject(value) && Kind in value && ValueGuard.IsString(value[Kind]);\n}\n/** `[Kind-Only]` Returns true if the given value is TSchema */\nexport function IsSchema(value) {\n // prettier-ignore\n return (IsAny(value) ||\n IsArgument(value) ||\n IsArray(value) ||\n IsBoolean(value) ||\n IsBigInt(value) ||\n IsAsyncIterator(value) ||\n IsComputed(value) ||\n IsConstructor(value) ||\n IsDate(value) ||\n IsFunction(value) ||\n IsInteger(value) ||\n IsIntersect(value) ||\n IsIterator(value) ||\n IsLiteral(value) ||\n IsMappedKey(value) ||\n IsMappedResult(value) ||\n IsNever(value) ||\n IsNot(value) ||\n IsNull(value) ||\n IsNumber(value) ||\n IsObject(value) ||\n IsPromise(value) ||\n IsRecord(value) ||\n IsRef(value) ||\n IsRegExp(value) ||\n IsString(value) ||\n IsSymbol(value) ||\n IsTemplateLiteral(value) ||\n IsThis(value) ||\n IsTuple(value) ||\n IsUndefined(value) ||\n IsUnion(value) ||\n IsUint8Array(value) ||\n IsUnknown(value) ||\n IsUnsafe(value) ||\n IsVoid(value) ||\n IsKind(value));\n}\n","import * as ValueGuard from './value.mjs';\nimport { Kind, Hint, TransformKind, ReadonlyKind, OptionalKind } from '../symbols/index.mjs';\nimport { TypeBoxError } from '../error/index.mjs';\nexport class TypeGuardUnknownTypeError extends TypeBoxError {\n}\nconst KnownTypes = [\n 'Argument',\n 'Any',\n 'Array',\n 'AsyncIterator',\n 'BigInt',\n 'Boolean',\n 'Computed',\n 'Constructor',\n 'Date',\n 'Enum',\n 'Function',\n 'Integer',\n 'Intersect',\n 'Iterator',\n 'Literal',\n 'MappedKey',\n 'MappedResult',\n 'Not',\n 'Null',\n 'Number',\n 'Object',\n 'Promise',\n 'Record',\n 'Ref',\n 'RegExp',\n 'String',\n 'Symbol',\n 'TemplateLiteral',\n 'This',\n 'Tuple',\n 'Undefined',\n 'Union',\n 'Uint8Array',\n 'Unknown',\n 'Void',\n];\nfunction IsPattern(value) {\n try {\n new RegExp(value);\n return true;\n }\n catch {\n return false;\n }\n}\nfunction IsControlCharacterFree(value) {\n if (!ValueGuard.IsString(value))\n return false;\n for (let i = 0; i < value.length; i++) {\n const code = value.charCodeAt(i);\n if ((code >= 7 && code <= 13) || code === 27 || code === 127) {\n return false;\n }\n }\n return true;\n}\nfunction IsAdditionalProperties(value) {\n return IsOptionalBoolean(value) || IsSchema(value);\n}\nfunction IsOptionalBigInt(value) {\n return ValueGuard.IsUndefined(value) || ValueGuard.IsBigInt(value);\n}\nfunction IsOptionalNumber(value) {\n return ValueGuard.IsUndefined(value) || ValueGuard.IsNumber(value);\n}\nfunction IsOptionalBoolean(value) {\n return ValueGuard.IsUndefined(value) || ValueGuard.IsBoolean(value);\n}\nfunction IsOptionalString(value) {\n return ValueGuard.IsUndefined(value) || ValueGuard.IsString(value);\n}\nfunction IsOptionalPattern(value) {\n return ValueGuard.IsUndefined(value) || (ValueGuard.IsString(value) && IsControlCharacterFree(value) && IsPattern(value));\n}\nfunction IsOptionalFormat(value) {\n return ValueGuard.IsUndefined(value) || (ValueGuard.IsString(value) && IsControlCharacterFree(value));\n}\nfunction IsOptionalSchema(value) {\n return ValueGuard.IsUndefined(value) || IsSchema(value);\n}\n// ------------------------------------------------------------------\n// Modifiers\n// ------------------------------------------------------------------\n/** Returns true if this value has a Readonly symbol */\nexport function IsReadonly(value) {\n return ValueGuard.IsObject(value) && value[ReadonlyKind] === 'Readonly';\n}\n/** Returns true if this value has a Optional symbol */\nexport function IsOptional(value) {\n return ValueGuard.IsObject(value) && value[OptionalKind] === 'Optional';\n}\n// ------------------------------------------------------------------\n// Types\n// ------------------------------------------------------------------\n/** Returns true if the given value is TAny */\nexport function IsAny(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Any') &&\n IsOptionalString(value.$id));\n}\n/** Returns true if the given value is TArgument */\nexport function IsArgument(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Argument') &&\n ValueGuard.IsNumber(value.index));\n}\n/** Returns true if the given value is TArray */\nexport function IsArray(value) {\n return (IsKindOf(value, 'Array') &&\n value.type === 'array' &&\n IsOptionalString(value.$id) &&\n IsSchema(value.items) &&\n IsOptionalNumber(value.minItems) &&\n IsOptionalNumber(value.maxItems) &&\n IsOptionalBoolean(value.uniqueItems) &&\n IsOptionalSchema(value.contains) &&\n IsOptionalNumber(value.minContains) &&\n IsOptionalNumber(value.maxContains));\n}\n/** Returns true if the given value is TAsyncIterator */\nexport function IsAsyncIterator(value) {\n // prettier-ignore\n return (IsKindOf(value, 'AsyncIterator') &&\n value.type === 'AsyncIterator' &&\n IsOptionalString(value.$id) &&\n IsSchema(value.items));\n}\n/** Returns true if the given value is TBigInt */\nexport function IsBigInt(value) {\n // prettier-ignore\n return (IsKindOf(value, 'BigInt') &&\n value.type === 'bigint' &&\n IsOptionalString(value.$id) &&\n IsOptionalBigInt(value.exclusiveMaximum) &&\n IsOptionalBigInt(value.exclusiveMinimum) &&\n IsOptionalBigInt(value.maximum) &&\n IsOptionalBigInt(value.minimum) &&\n IsOptionalBigInt(value.multipleOf));\n}\n/** Returns true if the given value is TBoolean */\nexport function IsBoolean(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Boolean') &&\n value.type === 'boolean' &&\n IsOptionalString(value.$id));\n}\n/** Returns true if the given value is TComputed */\nexport function IsComputed(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Computed') &&\n ValueGuard.IsString(value.target) &&\n ValueGuard.IsArray(value.parameters) &&\n value.parameters.every((schema) => IsSchema(schema)));\n}\n/** Returns true if the given value is TConstructor */\nexport function IsConstructor(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Constructor') &&\n value.type === 'Constructor' &&\n IsOptionalString(value.$id) &&\n ValueGuard.IsArray(value.parameters) &&\n value.parameters.every(schema => IsSchema(schema)) &&\n IsSchema(value.returns));\n}\n/** Returns true if the given value is TDate */\nexport function IsDate(value) {\n return (IsKindOf(value, 'Date') &&\n value.type === 'Date' &&\n IsOptionalString(value.$id) &&\n IsOptionalNumber(value.exclusiveMaximumTimestamp) &&\n IsOptionalNumber(value.exclusiveMinimumTimestamp) &&\n IsOptionalNumber(value.maximumTimestamp) &&\n IsOptionalNumber(value.minimumTimestamp) &&\n IsOptionalNumber(value.multipleOfTimestamp));\n}\n/** Returns true if the given value is TFunction */\nexport function IsFunction(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Function') &&\n value.type === 'Function' &&\n IsOptionalString(value.$id) &&\n ValueGuard.IsArray(value.parameters) &&\n value.parameters.every(schema => IsSchema(schema)) &&\n IsSchema(value.returns));\n}\n/** Returns true if the given value is TImport */\nexport function IsImport(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Import') &&\n ValueGuard.HasPropertyKey(value, '$defs') &&\n ValueGuard.IsObject(value.$defs) &&\n IsProperties(value.$defs) &&\n ValueGuard.HasPropertyKey(value, '$ref') &&\n ValueGuard.IsString(value.$ref) &&\n value.$ref in value.$defs // required\n );\n}\n/** Returns true if the given value is TInteger */\nexport function IsInteger(value) {\n return (IsKindOf(value, 'Integer') &&\n value.type === 'integer' &&\n IsOptionalString(value.$id) &&\n IsOptionalNumber(value.exclusiveMaximum) &&\n IsOptionalNumber(value.exclusiveMinimum) &&\n IsOptionalNumber(value.maximum) &&\n IsOptionalNumber(value.minimum) &&\n IsOptionalNumber(value.multipleOf));\n}\n/** Returns true if the given schema is TProperties */\nexport function IsProperties(value) {\n // prettier-ignore\n return (ValueGuard.IsObject(value) &&\n Object.entries(value).every(([key, schema]) => IsControlCharacterFree(key) && IsSchema(schema)));\n}\n/** Returns true if the given value is TIntersect */\nexport function IsIntersect(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Intersect') &&\n (ValueGuard.IsString(value.type) && value.type !== 'object' ? false : true) &&\n ValueGuard.IsArray(value.allOf) &&\n value.allOf.every(schema => IsSchema(schema) && !IsTransform(schema)) &&\n IsOptionalString(value.type) &&\n (IsOptionalBoolean(value.unevaluatedProperties) || IsOptionalSchema(value.unevaluatedProperties)) &&\n IsOptionalString(value.$id));\n}\n/** Returns true if the given value is TIterator */\nexport function IsIterator(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Iterator') &&\n value.type === 'Iterator' &&\n IsOptionalString(value.$id) &&\n IsSchema(value.items));\n}\n/** Returns true if the given value is a TKind with the given name. */\nexport function IsKindOf(value, kind) {\n return ValueGuard.IsObject(value) && Kind in value && value[Kind] === kind;\n}\n/** Returns true if the given value is TLiteral<string> */\nexport function IsLiteralString(value) {\n return IsLiteral(value) && ValueGuard.IsString(value.const);\n}\n/** Returns true if the given value is TLiteral<number> */\nexport function IsLiteralNumber(value) {\n return IsLiteral(value) && ValueGuard.IsNumber(value.const);\n}\n/** Returns true if the given value is TLiteral<boolean> */\nexport function IsLiteralBoolean(value) {\n return IsLiteral(value) && ValueGuard.IsBoolean(value.const);\n}\n/** Returns true if the given value is TLiteral */\nexport function IsLiteral(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Literal') &&\n IsOptionalString(value.$id) && IsLiteralValue(value.const));\n}\n/** Returns true if the given value is a TLiteralValue */\nexport function IsLiteralValue(value) {\n return ValueGuard.IsBoolean(value) || ValueGuard.IsNumber(value) || ValueGuard.IsString(value);\n}\n/** Returns true if the given value is a TMappedKey */\nexport function IsMappedKey(value) {\n // prettier-ignore\n return (IsKindOf(value, 'MappedKey') &&\n ValueGuard.IsArray(value.keys) &&\n value.keys.every(key => ValueGuard.IsNumber(key) || ValueGuard.IsString(key)));\n}\n/** Returns true if the given value is TMappedResult */\nexport function IsMappedResult(value) {\n // prettier-ignore\n return (IsKindOf(value, 'MappedResult') &&\n IsProperties(value.properties));\n}\n/** Returns true if the given value is TNever */\nexport function IsNever(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Never') &&\n ValueGuard.IsObject(value.not) &&\n Object.getOwnPropertyNames(value.not).length === 0);\n}\n/** Returns true if the given value is TNot */\nexport function IsNot(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Not') &&\n IsSchema(value.not));\n}\n/** Returns true if the given value is TNull */\nexport function IsNull(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Null') &&\n value.type === 'null' &&\n IsOptionalString(value.$id));\n}\n/** Returns true if the given value is TNumber */\nexport function IsNumber(value) {\n return (IsKindOf(value, 'Number') &&\n value.type === 'number' &&\n IsOptionalString(value.$id) &&\n IsOptionalNumber(value.exclusiveMaximum) &&\n IsOptionalNumber(value.exclusiveMinimum) &&\n IsOptionalNumber(value.maximum) &&\n IsOptionalNumber(value.minimum) &&\n IsOptionalNumber(value.multipleOf));\n}\n/** Returns true if the given value is TObject */\nexport function IsObject(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Object') &&\n value.type === 'object' &&\n IsOptionalString(value.$id) &&\n IsProperties(value.properties) &&\n IsAdditionalProperties(value.additionalProperties) &&\n IsOptionalNumber(value.minProperties) &&\n IsOptionalNumber(value.maxProperties));\n}\n/** Returns true if the given value is TPromise */\nexport function IsPromise(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Promise') &&\n value.type === 'Promise' &&\n IsOptionalString(value.$id) &&\n IsSchema(value.item));\n}\n/** Returns true if the given value is TRecord */\nexport function IsRecord(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Record') &&\n value.type === 'object' &&\n IsOptionalString(value.$id) &&\n IsAdditionalProperties(value.additionalProperties) &&\n ValueGuard.IsObject(value.patternProperties) &&\n ((schema) => {\n const keys = Object.getOwnPropertyNames(schema.patternProperties);\n return (keys.length === 1 &&\n IsPattern(keys[0]) &&\n ValueGuard.IsObject(schema.patternProperties) &&\n IsSchema(schema.patternProperties[keys[0]]));\n })(value));\n}\n/** Returns true if this value is TRecursive */\nexport function IsRecursive(value) {\n return ValueGuard.IsObject(value) && Hint in value && value[Hint] === 'Recursive';\n}\n/** Returns true if the given value is TRef */\nexport function IsRef(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Ref') &&\n IsOptionalString(value.$id) &&\n ValueGuard.IsString(value.$ref));\n}\n/** Returns true if the given value is TRegExp */\nexport function IsRegExp(value) {\n // prettier-ignore\n return (IsKindOf(value, 'RegExp') &&\n IsOptionalString(value.$id) &&\n ValueGuard.IsString(value.source) &&\n ValueGuard.IsString(value.flags) &&\n IsOptionalNumber(value.maxLength) &&\n IsOptionalNumber(value.minLength));\n}\n/** Returns true if the given value is TString */\nexport function IsString(value) {\n // prettier-ignore\n return (IsKindOf(value, 'String') &&\n value.type === 'string' &&\n IsOptionalString(value.$id) &&\n IsOptionalNumber(value.minLength) &&\n IsOptionalNumber(value.maxLength) &&\n IsOptionalPattern(value.pattern) &&\n IsOptionalFormat(value.format));\n}\n/** Returns true if the given value is TSymbol */\nexport function IsSymbol(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Symbol') &&\n value.type === 'symbol' &&\n IsOptionalString(value.$id));\n}\n/** Returns true if the given value is TTemplateLiteral */\nexport function IsTemplateLiteral(value) {\n // prettier-ignore\n return (IsKindOf(value, 'TemplateLiteral') &&\n value.type === 'string' &&\n ValueGuard.IsString(value.pattern) &&\n value.pattern[0] === '^' &&\n value.pattern[value.pattern.length - 1] === '$');\n}\n/** Returns true if the given value is TThis */\nexport function IsThis(value) {\n // prettier-ignore\n return (IsKindOf(value, 'This') &&\n IsOptionalString(value.$id) &&\n ValueGuard.IsString(value.$ref));\n}\n/** Returns true of this value is TTransform */\nexport function IsTransform(value) {\n return ValueGuard.IsObject(value) && TransformKind in value;\n}\n/** Returns true if the given value is TTuple */\nexport function IsTuple(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Tuple') &&\n value.type === 'array' &&\n IsOptionalString(value.$id) &&\n ValueGuard.IsNumber(value.minItems) &&\n ValueGuard.IsNumber(value.maxItems) &&\n value.minItems === value.maxItems &&\n (( // empty\n ValueGuard.IsUndefined(value.items) &&\n ValueGuard.IsUndefined(value.additionalItems) &&\n value.minItems === 0) || (ValueGuard.IsArray(value.items) &&\n value.items.every(schema => IsSchema(schema)))));\n}\n/** Returns true if the given value is TUndefined */\nexport function IsUndefined(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Undefined') &&\n value.type === 'undefined' &&\n IsOptionalString(value.$id));\n}\n/** Returns true if the given value is TUnion<Literal<string | number>[]> */\nexport function IsUnionLiteral(value) {\n return IsUnion(value) && value.anyOf.every((schema) => IsLiteralString(schema) || IsLiteralNumber(schema));\n}\n/** Returns true if the given value is TUnion */\nexport function IsUnion(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Union') &&\n IsOptionalString(value.$id) &&\n ValueGuard.IsObject(value) &&\n ValueGuard.IsArray(value.anyOf) &&\n value.anyOf.every(schema => IsSchema(schema)));\n}\n/** Returns true if the given value is TUint8Array */\nexport function IsUint8Array(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Uint8Array') &&\n value.type === 'Uint8Array' &&\n IsOptionalString(value.$id) &&\n IsOptionalNumber(value.minByteLength) &&\n IsOptionalNumber(value.maxByteLength));\n}\n/** Returns true if the given value is TUnknown */\nexport function IsUnknown(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Unknown') &&\n IsOptionalString(value.$id));\n}\n/** Returns true if the given value is a raw TUnsafe */\nexport function IsUnsafe(value) {\n return IsKindOf(value, 'Unsafe');\n}\n/** Returns true if the given value is TVoid */\nexport function IsVoid(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Void') &&\n value.type === 'void' &&\n IsOptionalString(value.$id));\n}\n/** Returns true if the given value is TKind */\nexport function IsKind(value) {\n return ValueGuard.IsObject(value) && Kind in value && ValueGuard.IsString(value[Kind]) && !KnownTypes.includes(value[Kind]);\n}\n/** Returns true if the given value is TSchema */\nexport function IsSchema(value) {\n // prettier-ignore\n return (ValueGuard.IsObject(value)) && (IsAny(value) ||\n IsArgument(value) ||\n IsArray(value) ||\n IsBoolean(value) ||\n IsBigInt(value) ||\n IsAsyncIterator(value) ||\n IsComputed(value) ||\n IsConstructor(value) ||\n IsDate(value) ||\n IsFunction(value) ||\n IsInteger(value) ||\n IsIntersect(value) ||\n IsIterator(value) ||\n IsLiteral(value) ||\n IsMappedKey(value) ||\n IsMappedResult(value) ||\n IsNever(value) ||\n IsNot(value) ||\n IsNull(value) ||\n IsNumber(value) ||\n IsObject(value) ||\n IsPromise(value) ||\n IsRecord(value) ||\n IsRef(value) ||\n IsRegExp(value) ||\n IsString(value) ||\n IsSymbol(value) ||\n IsTemplateLiteral(value) ||\n IsThis(value) ||\n IsTuple(value) ||\n IsUndefined(value) ||\n IsUnion(value) ||\n IsUint8Array(value) ||\n IsUnknown(value) ||\n IsUnsafe(value) ||\n IsVoid(value) ||\n IsKind(value));\n}\n","export const PatternBoolean = '(true|false)';\nexport const PatternNumber = '(0|[1-9][0-9]*)';\nexport const PatternString = '(.*)';\nexport const PatternNever = '(?!.*)';\nexport const PatternBooleanExact = `^${PatternBoolean}$`;\nexport const PatternNumberExact = `^${PatternNumber}$`;\nexport const PatternStringExact = `^${PatternString}$`;\nexport const PatternNeverExact = `^${PatternNever}$`;\n","/** Returns true if element right is in the set of left */\n// prettier-ignore\nexport function SetIncludes(T, S) {\n return T.includes(S);\n}\n/** Returns true if left is a subset of right */\nexport function SetIsSubset(T, S) {\n return T.every((L) => SetIncludes(S, L));\n}\n/** Returns a distinct set of elements */\nexport function SetDistinct(T) {\n return [...new Set(T)];\n}\n/** Returns the Intersect of the given sets */\nexport function SetIntersect(T, S) {\n return T.filter((L) => S.includes(L));\n}\n/** Returns the Union of the given sets */\nexport function SetUnion(T, S) {\n return [...T, ...S];\n}\n/** Returns the Complement by omitting elements in T that are in S */\n// prettier-ignore\nexport function SetComplement(T, S) {\n return T.filter(L => !S.includes(L));\n}\n// prettier-ignore\nfunction SetIntersectManyResolve(T, Init) {\n return T.reduce((Acc, L) => {\n return SetIntersect(Acc, L);\n }, Init);\n}\n// prettier-ignore\nexport function SetIntersectMany(T) {\n return (T.length === 1\n ? T[0]\n // Use left to initialize the accumulator for resolve\n : T.length > 1\n ? SetIntersectManyResolve(T.slice(1), T[0])\n : []);\n}\n/** Returns the Union of multiple sets */\nexport function SetUnionMany(T) {\n const Acc = [];\n for (const L of T)\n Acc.push(...L);\n return Acc;\n}\n","import { CreateType } from '../create/index.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates an Any type */\nexport function Any(options) {\n return CreateType({ [Kind]: 'Any' }, options);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates an Array type */\nexport function Array(items, options) {\n return CreateType({ [Kind]: 'Array', type: 'array', items }, options);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[JavaScript]` Creates an Argument Type. */\nexport function Argument(index) {\n return CreateType({ [Kind]: 'Argument', index });\n}\n","import { Kind } from '../symbols/index.mjs';\nimport { CreateType } from '../create/type.mjs';\n/** `[JavaScript]` Creates a AsyncIterator type */\nexport function AsyncIterator(items, options) {\n return CreateType({ [Kind]: 'AsyncIterator', type: 'AsyncIterator', items }, options);\n}\n","import { CreateType } from '../create/index.mjs';\nimport { Kind } from '../symbols/symbols.mjs';\n/** `[Internal]` Creates a deferred computed type. This type is used exclusively in modules to defer resolution of computable types that contain interior references */\nexport function Computed(target, parameters, options) {\n return CreateType({ [Kind]: 'Computed', target, parameters }, options);\n}\n","function DiscardKey(value, key) {\n const { [key]: _, ...rest } = value;\n return rest;\n}\n/** Discards property keys from the given value. This function returns a shallow Clone. */\nexport function Discard(value, keys) {\n return keys.reduce((acc, key) => DiscardKey(acc, key), value);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates a Never type */\nexport function Never(options) {\n return CreateType({ [Kind]: 'Never', not: {} }, options);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n// prettier-ignore\nexport function MappedResult(properties) {\n return CreateType({\n [Kind]: 'MappedResult',\n properties\n });\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[JavaScript]` Creates a Constructor type */\nexport function Constructor(parameters, returns, options) {\n return CreateType({ [Kind]: 'Constructor', type: 'Constructor', parameters, returns }, options);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[JavaScript]` Creates a Function type */\nexport function Function(parameters, returns, options) {\n return CreateType({ [Kind]: 'Function', type: 'Function', parameters, returns }, options);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\nexport function UnionCreate(T, options) {\n return CreateType({ [Kind]: 'Union', anyOf: T }, options);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { OptionalKind } from '../symbols/index.mjs';\nimport { Discard } from '../discard/index.mjs';\nimport { Never } from '../never/index.mjs';\nimport { Optional } from '../optional/index.mjs';\nimport { UnionCreate } from './union-create.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsOptional } from '../guard/kind.mjs';\n// prettier-ignore\nfunction IsUnionOptional(types) {\n return types.some(type => IsOptional(type));\n}\n// prettier-ignore\nfunction RemoveOptionalFromRest(types) {\n return types.map(left => IsOptional(left) ? RemoveOptionalFromType(left) : left);\n}\n// prettier-ignore\nfunction RemoveOptionalFromType(T) {\n return (Discard(T, [OptionalKind]));\n}\n// prettier-ignore\nfunction ResolveUnion(types, options) {\n const isOptional = IsUnionOptional(types);\n return (isOptional\n ? Optional(UnionCreate(RemoveOptionalFromRest(types), options))\n : UnionCreate(RemoveOptionalFromRest(types), options));\n}\n/** `[Json]` Creates an evaluated Union type */\nexport function UnionEvaluated(T, options) {\n // prettier-ignore\n return (T.length === 1 ? CreateType(T[0], options) :\n T.length === 0 ? Never(options) :\n ResolveUnion(T, options));\n}\n","import { Never } from '../never/index.mjs';\nimport { CreateType } from '../create/type.mjs';\nimport { UnionCreate } from './union-create.mjs';\n/** `[Json]` Creates a Union type */\nexport function Union(types, options) {\n // prettier-ignore\n return (types.length === 0 ? Never(options) :\n types.length === 1 ? CreateType(types[0], options) :\n UnionCreate(types, options));\n}\n","import { TypeBoxError } from '../error/index.mjs';\n// ------------------------------------------------------------------\n// TemplateLiteralParserError\n// ------------------------------------------------------------------\nexport class TemplateLiteralParserError extends TypeBoxError {\n}\n// -------------------------------------------------------------------\n// Unescape\n//\n// Unescape for these control characters specifically. Note that this\n// function is only called on non union group content, and where we\n// still want to allow the user to embed control characters in that\n// content. For review.\n// -------------------------------------------------------------------\n// prettier-ignore\nfunction Unescape(pattern) {\n return pattern\n .replace(/\\\\\\$/g, '$')\n .replace(/\\\\\\*/g, '*')\n .replace(/\\\\\\^/g, '^')\n .replace(/\\\\\\|/g, '|')\n .replace(/\\\\\\(/g, '(')\n .replace(/\\\\\\)/g, ')');\n}\n// -------------------------------------------------------------------\n// Control Characters\n// -------------------------------------------------------------------\nfunction IsNonEscaped(pattern, index, char) {\n return pattern[index] === char && pattern.charCodeAt(index - 1) !== 92;\n}\nfunction IsOpenParen(pattern, index) {\n return IsNonEscaped(pattern, index, '(');\n}\nfunction IsCloseParen(pattern, index) {\n return IsNonEscaped(pattern, index, ')');\n}\nfunction IsSeparator(pattern, index) {\n return IsNonEscaped(pattern, index, '|');\n}\n// -------------------------------------------------------------------\n// Control Groups\n// -------------------------------------------------------------------\nfunction IsGroup(pattern) {\n if (!(IsOpenParen(pattern, 0) && IsCloseParen(pattern, pattern.length - 1)))\n return false;\n let count = 0;\n for (let index = 0; index < pattern.length; index++) {\n if (IsOpenParen(pattern, index))\n count += 1;\n if (IsCloseParen(pattern, index))\n count -= 1;\n if (count === 0 && index !== pattern.length - 1)\n return false;\n }\n return true;\n}\n// prettier-ignore\nfunction InGroup(pattern) {\n return pattern.slice(1, pattern.length - 1);\n}\n// prettier-ignore\nfunction IsPrecedenceOr(pattern) {\n let count = 0;\n for (let index = 0; index < pattern.length; index++) {\n if (IsOpenParen(pattern, index))\n count += 1;\n if (IsCloseParen(pattern, index))\n count -= 1;\n if (IsSeparator(pattern, index) && count === 0)\n return true;\n }\n return false;\n}\n// prettier-ignore\nfunction IsPrecedenceAnd(pattern) {\n for (let index = 0; index < pattern.length; index++) {\n if (IsOpenParen(pattern, index))\n return true;\n }\n return false;\n}\n// prettier-ignore\nfunction Or(pattern) {\n let [count, start] = [0, 0];\n const expressions = [];\n for (let index = 0; index < pattern.length; index++) {\n if (IsOpenParen(pattern, index))\n count += 1;\n if (IsCloseParen(pattern, index))\n count -= 1;\n if (IsSeparator(pattern, index) && count === 0) {\n const range = pattern.slice(start, index);\n if (range.length > 0)\n expressions.push(TemplateLiteralParse(range));\n start = index + 1;\n }\n }\n const range = pattern.slice(start);\n if (range.length > 0)\n expressions.push(TemplateLiteralParse(range));\n if (expressions.length === 0)\n return { type: 'const', const: '' };\n if (expressions.length === 1)\n return expressions[0];\n return { type: 'or', expr: expressions };\n}\n// prettier-ignore\nfunction And(pattern) {\n function Group(value, index) {\n if (!IsOpenParen(value, index))\n throw new TemplateLiteralParserError(`TemplateLiteralParser: Index must point to open parens`);\n let count = 0;\n for (let scan = index; scan < value.length; scan++) {\n if (IsOpenParen(value, scan))\n count += 1;\n if (IsCloseParen(value, scan))\n count -= 1;\n if (count === 0)\n return [index, scan];\n }\n throw new TemplateLiteralParserError(`TemplateLiteralParser: Unclosed group parens in expression`);\n }\n function Range(pattern, index) {\n for (let scan = index; scan < pattern.length; scan++) {\n if (IsOpenParen(pattern, scan))\n return [index, scan];\n }\n return [index, pattern.length];\n }\n const expressions = [];\n for (let index = 0; index < pattern.length; index++) {\n if (IsOpenParen(pattern, index)) {\n const [start, end] = Group(pattern, index);\n const range = pattern.slice(start, end + 1);\n expressions.push(TemplateLiteralParse(range));\n index = end;\n }\n else {\n const [start, end] = Range(pattern, index);\n const range = pattern.slice(start, end);\n if (range.length > 0)\n expressions.push(TemplateLiteralParse(range));\n index = end - 1;\n }\n }\n return ((expressions.length === 0) ? { type: 'const', const: '' } :\n (expressions.length === 1) ? expressions[0] :\n { type: 'and', expr: expressions });\n}\n// ------------------------------------------------------------------\n// TemplateLiteralParse\n// ------------------------------------------------------------------\n/** Parses a pattern and returns an expression tree */\nexport function TemplateLiteralParse(pattern) {\n // prettier-ignore\n return (IsGroup(pattern) ? TemplateLiteralParse(InGroup(pattern)) :\n IsPrecedenceOr(pattern) ? Or(pattern) :\n IsPrecedenceAnd(pattern) ? And(pattern) :\n { type: 'const', const: Unescape(pattern) });\n}\n// ------------------------------------------------------------------\n// TemplateLiteralParseExact\n// ------------------------------------------------------------------\n/** Parses a pattern and strips forward and trailing ^ and $ */\nexport function TemplateLiteralParseExact(pattern) {\n return TemplateLiteralParse(pattern.slice(1, pattern.length - 1));\n}\n","import { TemplateLiteralParseExact } from './parse.mjs';\nimport { TypeBoxError } from '../error/index.mjs';\n// ------------------------------------------------------------------\n// TemplateLiteralFiniteError\n// ------------------------------------------------------------------\nexport class TemplateLiteralFiniteError extends TypeBoxError {\n}\n// ------------------------------------------------------------------\n// IsTemplateLiteralFiniteCheck\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction IsNumberExpression(expression) {\n return (expression.type === 'or' &&\n expression.expr.length === 2 &&\n expression.expr[0].type === 'const' &&\n expression.expr[0].const === '0' &&\n expression.expr[1].type === 'const' &&\n expression.expr[1].const === '[1-9][0-9]*');\n}\n// prettier-ignore\nfunction IsBooleanExpression(expression) {\n return (expression.type === 'or' &&\n expression.expr.length === 2 &&\n expression.expr[0].type === 'const' &&\n expression.expr[0].const === 'true' &&\n expression.expr[1].type === 'const' &&\n expression.expr[1].const === 'false');\n}\n// prettier-ignore\nfunction IsStringExpression(expression) {\n return expression.type === 'const' && expression.const === '.*';\n}\n// ------------------------------------------------------------------\n// IsTemplateLiteralExpressionFinite\n// ------------------------------------------------------------------\n// prettier-ignore\nexport function IsTemplateLiteralExpressionFinite(expression) {\n return (IsNumberExpression(expression) || IsStringExpression(expression) ? false :\n IsBooleanExpression(expression) ? true :\n (expression.type === 'and') ? expression.expr.every((expr) => IsTemplateLiteralExpressionFinite(expr)) :\n (expression.type === 'or') ? expression.expr.every((expr) => IsTemplateLiteralExpressionFinite(expr)) :\n (expression.type === 'const') ? true :\n (() => { throw new TemplateLiteralFiniteError(`Unknown expression type`); })());\n}\n/** Returns true if this TemplateLiteral resolves to a finite set of values */\nexport function IsTemplateLiteralFinite(schema) {\n const expression = TemplateLiteralParseExact(schema.pattern);\n return IsTemplateLiteralExpressionFinite(expression);\n}\n","import { IsTemplateLiteralExpressionFinite } from './finite.mjs';\nimport { TemplateLiteralParseExact } from './parse.mjs';\nimport { TypeBoxError } from '../error/index.mjs';\n// ------------------------------------------------------------------\n// TemplateLiteralGenerateError\n// ------------------------------------------------------------------\nexport class TemplateLiteralGenerateError extends TypeBoxError {\n}\n// ------------------------------------------------------------------\n// TemplateLiteralExpressionGenerate\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction* GenerateReduce(buffer) {\n if (buffer.length === 1)\n return yield* buffer[0];\n for (const left of buffer[0]) {\n for (const right of GenerateReduce(buffer.slice(1))) {\n yield `${left}${right}`;\n }\n }\n}\n// prettier-ignore\nfunction* GenerateAnd(expression) {\n return yield* GenerateReduce(expression.expr.map((expr) => [...TemplateLiteralExpressionGenerate(expr)]));\n}\n// prettier-ignore\nfunction* GenerateOr(expression) {\n for (const expr of expression.expr)\n yield* TemplateLiteralExpressionGenerate(expr);\n}\n// prettier-ignore\nfunction* GenerateConst(expression) {\n return yield expression.const;\n}\nexport function* TemplateLiteralExpressionGenerate(expression) {\n return expression.type === 'and'\n ? yield* GenerateAnd(expression)\n : expression.type === 'or'\n ? yield* GenerateOr(expression)\n : expression.type === 'const'\n ? yield* GenerateConst(expression)\n : (() => {\n throw new TemplateLiteralGenerateError('Unknown expression');\n })();\n}\n/** Generates a tuple of strings from the given TemplateLiteral. Returns an empty tuple if infinite. */\nexport function TemplateLiteralGenerate(schema) {\n const expression = TemplateLiteralParseExact(schema.pattern);\n // prettier-ignore\n return (IsTemplateLiteralExpressionFinite(expression)\n ? [...TemplateLiteralExpressionGenerate(expression)]\n : []);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates a Literal type */\nexport function Literal(value, options) {\n return CreateType({\n [Kind]: 'Literal',\n const: value,\n type: typeof value,\n }, options);\n}\n","import { Kind } from '../symbols/index.mjs';\nimport { CreateType } from '../create/index.mjs';\n/** `[Json]` Creates a Boolean type */\nexport function Boolean(options) {\n return CreateType({ [Kind]: 'Boolean', type: 'boolean' }, options);\n}\n","import { Kind } from '../symbols/index.mjs';\nimport { CreateType } from '../create/index.mjs';\n/** `[JavaScript]` Creates a BigInt type */\nexport function BigInt(options) {\n return CreateType({ [Kind]: 'BigInt', type: 'bigint' }, options);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates a Number type */\nexport function Number(options) {\n return CreateType({ [Kind]: 'Number', type: 'number' }, options);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates a String type */\nexport function String(options) {\n return CreateType({ [Kind]: 'String', type: 'string' }, options);\n}\n","import { Literal } from '../literal/index.mjs';\nimport { Boolean } from '../boolean/index.mjs';\nimport { BigInt } from '../bigint/index.mjs';\nimport { Number } from '../number/index.mjs';\nimport { String } from '../string/index.mjs';\nimport { UnionEvaluated } from '../union/index.mjs';\nimport { Never } from '../never/index.mjs';\n// ------------------------------------------------------------------\n// SyntaxParsers\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction* FromUnion(syntax) {\n const trim = syntax.trim().replace(/\"|'/g, '');\n return (trim === 'boolean' ? yield Boolean() :\n trim === 'number' ? yield Number() :\n trim === 'bigint' ? yield BigInt() :\n trim === 'string' ? yield String() :\n yield (() => {\n const literals = trim.split('|').map((literal) => Literal(literal.trim()));\n return (literals.length === 0 ? Never() :\n literals.length === 1 ? literals[0] :\n UnionEvaluated(literals));\n })());\n}\n// prettier-ignore\nfunction* FromTerminal(syntax) {\n if (syntax[1] !== '{') {\n const L = Literal('$');\n const R = FromSyntax(syntax.slice(1));\n return yield* [L, ...R];\n }\n for (let i = 2; i < syntax.length; i++) {\n if (syntax[i] === '}') {\n const L = FromUnion(syntax.slice(2, i));\n const R = FromSyntax(syntax.slice(i + 1));\n return yield* [...L, ...R];\n }\n }\n yield Literal(syntax);\n}\n// prettier-ignore\nfunction* FromSyntax(syntax) {\n for (let i = 0; i < syntax.length; i++) {\n if (syntax[i] === '$') {\n const L = Literal(syntax.slice(0, i));\n const R = FromTerminal(syntax.slice(i));\n return yield* [L, ...R];\n }\n }\n yield Literal(syntax);\n}\n/** Parses TemplateLiteralSyntax and returns a tuple of TemplateLiteralKinds */\nexport function TemplateLiteralSyntax(syntax) {\n return [...FromSyntax(syntax)];\n}\n","import { PatternNumber, PatternString, PatternBoolean } from '../patterns/index.mjs';\nimport { Kind } from '../symbols/index.mjs';\nimport { TypeBoxError } from '../error/index.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsTemplateLiteral, IsUnion, IsNumber, IsInteger, IsBigInt, IsString, IsLiteral, IsBoolean } from '../guard/kind.mjs';\n// ------------------------------------------------------------------\n// TemplateLiteralPatternError\n// ------------------------------------------------------------------\nexport class TemplateLiteralPatternError extends TypeBoxError {\n}\n// ------------------------------------------------------------------\n// TemplateLiteralPattern\n// ------------------------------------------------------------------\nfunction Escape(value) {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n// prettier-ignore\nfunction Visit(schema, acc) {\n return (IsTemplateLiteral(schema) ? schema.pattern.slice(1, schema.pattern.length - 1) :\n IsUnion(schema) ? `(${schema.anyOf.map((schema) => Visit(schema, acc)).join('|')})` :\n IsNumber(schema) ? `${acc}${PatternNumber}` :\n IsInteger(schema) ? `${acc}${PatternNumber}` :\n IsBigInt(schema) ? `${acc}${PatternNumber}` :\n IsString(schema) ? `${acc}${PatternString}` :\n IsLiteral(schema) ? `${acc}${Escape(schema.const.toString())}` :\n IsBoolean(schema) ? `${acc}${PatternBoolean}` :\n (() => { throw new TemplateLiteralPatternError(`Unexpected Kind '${schema[Kind]}'`); })());\n}\nexport function TemplateLiteralPattern(kinds) {\n return `^${kinds.map((schema) => Visit(schema, '')).join('')}\\$`;\n}\n","import { UnionEvaluated } from '../union/index.mjs';\nimport { Literal } from '../literal/index.mjs';\nimport { TemplateLiteralGenerate } from './generate.mjs';\n/** Returns a Union from the given TemplateLiteral */\nexport function TemplateLiteralToUnion(schema) {\n const R = TemplateLiteralGenerate(schema);\n const L = R.map((S) => Literal(S));\n return UnionEvaluated(L);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { TemplateLiteralSyntax } from './syntax.mjs';\nimport { TemplateLiteralPattern } from './pattern.mjs';\nimport { IsString } from '../guard/value.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates a TemplateLiteral type */\n// prettier-ignore\nexport function TemplateLiteral(unresolved, options) {\n const pattern = IsString(unresolved)\n ? TemplateLiteralPattern(TemplateLiteralSyntax(unresolved))\n : TemplateLiteralPattern(unresolved);\n return CreateType({ [Kind]: 'TemplateLiteral', type: 'string', pattern }, options);\n}\n","import { TemplateLiteralGenerate } from '../template-literal/index.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsTemplateLiteral, IsUnion, IsLiteral, IsNumber, IsInteger } from '../guard/kind.mjs';\n// prettier-ignore\nfunction FromTemplateLiteral(templateLiteral) {\n const keys = TemplateLiteralGenerate(templateLiteral);\n return keys.map(key => key.toString());\n}\n// prettier-ignore\nfunction FromUnion(types) {\n const result = [];\n for (const type of types)\n result.push(...IndexPropertyKeys(type));\n return result;\n}\n// prettier-ignore\nfunction FromLiteral(literalValue) {\n return ([literalValue.toString()] // TS 5.4 observes TLiteralValue as not having a toString()\n );\n}\n/** Returns a tuple of PropertyKeys derived from the given TSchema */\n// prettier-ignore\nexport function IndexPropertyKeys(type) {\n return [...new Set((IsTemplateLiteral(type) ? FromTemplateLiteral(type) :\n IsUnion(type) ? FromUnion(type.anyOf) :\n IsLiteral(type) ? FromLiteral(type.const) :\n IsNumber(type) ? ['[number]'] :\n IsInteger(type) ? ['[number]'] :\n []))];\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { IndexPropertyKeys } from './indexed-property-keys.mjs';\nimport { Index } from './index.mjs';\n// prettier-ignore\nfunction FromProperties(type, properties, options) {\n const result = {};\n for (const K2 of Object.getOwnPropertyNames(properties)) {\n result[K2] = Index(type, IndexPropertyKeys(properties[K2]), options);\n }\n return result;\n}\n// prettier-ignore\nfunction FromMappedResult(type, mappedResult, options) {\n return FromProperties(type, mappedResult.properties, options);\n}\n// prettier-ignore\nexport function IndexFromMappedResult(type, mappedResult, options) {\n const properties = FromMappedResult(type, mappedResult, options);\n return MappedResult(properties);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { TypeBoxError } from '../error/index.mjs';\nimport { Computed } from '../computed/index.mjs';\nimport { Never } from '../never/index.mjs';\nimport { IntersectEvaluated } from '../intersect/index.mjs';\nimport { UnionEvaluated } from '../union/index.mjs';\nimport { IndexPropertyKeys } from './indexed-property-keys.mjs';\nimport { IndexFromMappedKey } from './indexed-from-mapped-key.mjs';\nimport { IndexFromMappedResult } from './indexed-from-mapped-result.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsArray, IsIntersect, IsObject, IsMappedKey, IsMappedResult, IsNever, IsSchema, IsTuple, IsUnion, IsRef } from '../guard/kind.mjs';\n// prettier-ignore\nfunction FromRest(types, key) {\n return types.map(type => IndexFromPropertyKey(type, key));\n}\n// prettier-ignore\nfunction FromIntersectRest(types) {\n return types.filter(type => !IsNever(type));\n}\n// prettier-ignore\nfunction FromIntersect(types, key) {\n return (IntersectEvaluated(FromIntersectRest(FromRest(types, key))));\n}\n// prettier-ignore\nfunction FromUnionRest(types) {\n return (types.some(L => IsNever(L))\n ? []\n : types);\n}\n// prettier-ignore\nfunction FromUnion(types, key) {\n return (UnionEvaluated(FromUnionRest(FromRest(types, key))));\n}\n// prettier-ignore\nfunction FromTuple(types, key) {\n return (key in types ? types[key] :\n key === '[number]' ? UnionEvaluated(types) :\n Never());\n}\n// prettier-ignore\nfunction FromArray(type, key) {\n return (key === '[number]'\n ? type\n : Never());\n}\n// prettier-ignore\nfunction FromProperty(properties, propertyKey) {\n return (propertyKey in properties ? properties[propertyKey] : Never());\n}\n// prettier-ignore\nexport function IndexFromPropertyKey(type, propertyKey) {\n return (IsIntersect(type) ? FromIntersect(type.allOf, propertyKey) :\n IsUnion(type) ? FromUnion(type.anyOf, propertyKey) :\n IsTuple(type) ? FromTuple(type.items ?? [], propertyKey) :\n IsArray(type) ? FromArray(type.items, propertyKey) :\n IsObject(type) ? FromProperty(type.properties, propertyKey) :\n Never());\n}\n// prettier-ignore\nexport function IndexFromPropertyKeys(type, propertyKeys) {\n return propertyKeys.map(propertyKey => IndexFromPropertyKey(type, propertyKey));\n}\n// prettier-ignore\nfunction FromSchema(type, propertyKeys) {\n return (UnionEvaluated(IndexFromPropertyKeys(type, propertyKeys)));\n}\n// prettier-ignore\nexport function IndexFromComputed(type, key) {\n return Computed('Index', [type, key]);\n}\n/** `[Json]` Returns an Indexed property type for the given keys */\nexport function Index(type, key, options) {\n // computed-type\n if (IsRef(type) || IsRef(key)) {\n const error = `Index types using Ref parameters require both Type and Key to be of TSchema`;\n if (!IsSchema(type) || !IsSchema(key))\n throw new TypeBoxError(error);\n return Computed('Index', [type, key]);\n }\n // mapped-types\n if (IsMappedResult(key))\n return IndexFromMappedResult(type, key, options);\n if (IsMappedKey(key))\n return IndexFromMappedKey(type, key, options);\n // prettier-ignore\n return CreateType(IsSchema(key)\n ? FromSchema(type, IndexPropertyKeys(key))\n : FromSchema(type, key), options);\n}\n","import { Index } from './indexed.mjs';\nimport { MappedResult } from '../mapped/index.mjs';\nimport { Clone } from '../clone/value.mjs';\n// prettier-ignore\nfunction MappedIndexPropertyKey(type, key, options) {\n return { [key]: Index(type, [key], Clone(options)) };\n}\n// prettier-ignore\nfunction MappedIndexPropertyKeys(type, propertyKeys, options) {\n return propertyKeys.reduce((result, left) => {\n return { ...result, ...MappedIndexPropertyKey(type, left, options) };\n }, {});\n}\n// prettier-ignore\nfunction MappedIndexProperties(type, mappedKey, options) {\n return MappedIndexPropertyKeys(type, mappedKey.keys, options);\n}\n// prettier-ignore\nexport function IndexFromMappedKey(type, mappedKey, options) {\n const properties = MappedIndexProperties(type, mappedKey, options);\n return MappedResult(properties);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[JavaScript]` Creates an Iterator type */\nexport function Iterator(items, options) {\n return CreateType({ [Kind]: 'Iterator', type: 'Iterator', items }, options);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsOptional } from '../guard/kind.mjs';\n/** Creates a RequiredArray derived from the given TProperties value. */\nfunction RequiredArray(properties) {\n return globalThis.Object.keys(properties).filter((key) => !IsOptional(properties[key]));\n}\n/** `[Json]` Creates an Object type */\nfunction _Object(properties, options) {\n const required = RequiredArray(properties);\n const schema = required.length > 0 ? { [Kind]: 'Object', type: 'object', required, properties } : { [Kind]: 'Object', type: 'object', properties };\n return CreateType(schema, options);\n}\n/** `[Json]` Creates an Object type */\nexport var Object = _Object;\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[JavaScript]` Creates a Promise type */\nexport function Promise(item, options) {\n return CreateType({ [Kind]: 'Promise', type: 'Promise', item }, options);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { ReadonlyKind } from '../symbols/index.mjs';\nimport { Discard } from '../discard/index.mjs';\nimport { ReadonlyFromMappedResult } from './readonly-from-mapped-result.mjs';\nimport { IsMappedResult } from '../guard/kind.mjs';\nfunction RemoveReadonly(schema) {\n return CreateType(Discard(schema, [ReadonlyKind]));\n}\nfunction AddReadonly(schema) {\n return CreateType({ ...schema, [ReadonlyKind]: 'Readonly' });\n}\n// prettier-ignore\nfunction ReadonlyWithFlag(schema, F) {\n return (F === false\n ? RemoveReadonly(schema)\n : AddReadonly(schema));\n}\n/** `[Json]` Creates a Readonly property */\nexport function Readonly(schema, enable) {\n const F = enable ?? true;\n return IsMappedResult(schema) ? ReadonlyFromMappedResult(schema, F) : ReadonlyWithFlag(schema, F);\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Readonly } from './readonly.mjs';\n// prettier-ignore\nfunction FromProperties(K, F) {\n const Acc = {};\n for (const K2 of globalThis.Object.getOwnPropertyNames(K))\n Acc[K2] = Readonly(K[K2], F);\n return Acc;\n}\n// prettier-ignore\nfunction FromMappedResult(R, F) {\n return FromProperties(R.properties, F);\n}\n// prettier-ignore\nexport function ReadonlyFromMappedResult(R, F) {\n const P = FromMappedResult(R, F);\n return MappedResult(P);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates a Tuple type */\nexport function Tuple(types, options) {\n // prettier-ignore\n return CreateType(types.length > 0 ?\n { [Kind]: 'Tuple', type: 'array', items: types, additionalItems: false, minItems: types.length, maxItems: types.length } :\n { [Kind]: 'Tuple', type: 'array', minItems: types.length, maxItems: types.length }, options);\n}\n","import { Kind, OptionalKind, ReadonlyKind } from '../symbols/index.mjs';\nimport { Discard } from '../discard/index.mjs';\n// evaluation types\nimport { Array } from '../array/index.mjs';\nimport { AsyncIterator } from '../async-iterator/index.mjs';\nimport { Constructor } from '../constructor/index.mjs';\nimport { Function as FunctionType } from '../function/index.mjs';\nimport { IndexPropertyKeys } from '../indexed/index.mjs';\nimport { Intersect } from '../intersect/index.mjs';\nimport { Iterator } from '../iterator/index.mjs';\nimport { Literal } from '../literal/index.mjs';\nimport { Object } from '../object/index.mjs';\nimport { Optional } from '../optional/index.mjs';\nimport { Promise } from '../promise/index.mjs';\nimport { Readonly } from '../readonly/index.mjs';\nimport { Tuple } from '../tuple/index.mjs';\nimport { Union } from '../union/index.mjs';\n// operator\nimport { SetIncludes } from '../sets/index.mjs';\n// mapping types\nimport { MappedResult } from './mapped-result.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsArray, IsAsyncIterator, IsConstructor, IsFunction, IsIntersect, IsIterator, IsReadonly, IsMappedResult, IsMappedKey, IsObject, IsOptional, IsPromise, IsSchema, IsTuple, IsUnion } from '../guard/kind.mjs';\n// prettier-ignore\nfunction FromMappedResult(K, P) {\n return (K in P\n ? FromSchemaType(K, P[K])\n : MappedResult(P));\n}\n// prettier-ignore\nfunction MappedKeyToKnownMappedResultProperties(K) {\n return { [K]: Literal(K) };\n}\n// prettier-ignore\nfunction MappedKeyToUnknownMappedResultProperties(P) {\n const Acc = {};\n for (const L of P)\n Acc[L] = Literal(L);\n return Acc;\n}\n// prettier-ignore\nfunction MappedKeyToMappedResultProperties(K, P) {\n return (SetIncludes(P, K)\n ? MappedKeyToKnownMappedResultProperties(K)\n : MappedKeyToUnknownMappedResultProperties(P));\n}\n// prettier-ignore\nfunction FromMappedKey(K, P) {\n const R = MappedKeyToMappedResultProperties(K, P);\n return FromMappedResult(K, R);\n}\n// prettier-ignore\nfunction FromRest(K, T) {\n return T.map(L => FromSchemaType(K, L));\n}\n// prettier-ignore\nfunction FromProperties(K, T) {\n const Acc = {};\n for (const K2 of globalThis.Object.getOwnPropertyNames(T))\n Acc[K2] = FromSchemaType(K, T[K2]);\n return Acc;\n}\n// prettier-ignore\nfunction FromSchemaType(K, T) {\n // required to retain user defined options for mapped type\n const options = { ...T };\n return (\n // unevaluated modifier types\n IsOptional(T) ? Optional(FromSchemaType(K, Discard(T, [OptionalKind]))) :\n IsReadonly(T) ? Readonly(FromSchemaType(K, Discard(T, [ReadonlyKind]))) :\n // unevaluated mapped types\n IsMappedResult(T) ? FromMappedResult(K, T.properties) :\n IsMappedKey(T) ? FromMappedKey(K, T.keys) :\n // unevaluated types\n IsConstructor(T) ? Constructor(FromRest(K, T.parameters), FromSchemaType(K, T.returns), options) :\n IsFunction(T) ? FunctionType(FromRest(K, T.parameters), FromSchemaType(K, T.returns), options) :\n IsAsyncIterator(T) ? AsyncIterator(FromSchemaType(K, T.items), options) :\n IsIterator(T) ? Iterator(FromSchemaType(K, T.items), options) :\n IsIntersect(T) ? Intersect(FromRest(K, T.allOf), options) :\n IsUnion(T) ? Union(FromRest(K, T.anyOf), options) :\n IsTuple(T) ? Tuple(FromRest(K, T.items ?? []), options) :\n IsObject(T) ? Object(FromProperties(K, T.properties), options) :\n IsArray(T) ? Array(FromSchemaType(K, T.items), options) :\n IsPromise(T) ? Promise(FromSchemaType(K, T.item), options) :\n T);\n}\n// prettier-ignore\nexport function MappedFunctionReturnType(K, T) {\n const Acc = {};\n for (const L of K)\n Acc[L] = FromSchemaType(L, T);\n return Acc;\n}\n/** `[Json]` Creates a Mapped object type */\nexport function Mapped(key, map, options) {\n const K = IsSchema(key) ? IndexPropertyKeys(key) : key;\n const RT = map({ [Kind]: 'MappedKey', keys: K });\n const R = MappedFunctionReturnType(K, RT);\n return Object(R, options);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { OptionalKind } from '../symbols/index.mjs';\nimport { Discard } from '../discard/index.mjs';\nimport { OptionalFromMappedResult } from './optional-from-mapped-result.mjs';\nimport { IsMappedResult } from '../guard/kind.mjs';\nfunction RemoveOptional(schema) {\n return CreateType(Discard(schema, [OptionalKind]));\n}\nfunction AddOptional(schema) {\n return CreateType({ ...schema, [OptionalKind]: 'Optional' });\n}\n// prettier-ignore\nfunction OptionalWithFlag(schema, F) {\n return (F === false\n ? RemoveOptional(schema)\n : AddOptional(schema));\n}\n/** `[Json]` Creates a Optional property */\nexport function Optional(schema, enable) {\n const F = enable ?? true;\n return IsMappedResult(schema) ? OptionalFromMappedResult(schema, F) : OptionalWithFlag(schema, F);\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Optional } from './optional.mjs';\n// prettier-ignore\nfunction FromProperties(P, F) {\n const Acc = {};\n for (const K2 of globalThis.Object.getOwnPropertyNames(P))\n Acc[K2] = Optional(P[K2], F);\n return Acc;\n}\n// prettier-ignore\nfunction FromMappedResult(R, F) {\n return FromProperties(R.properties, F);\n}\n// prettier-ignore\nexport function OptionalFromMappedResult(R, F) {\n const P = FromMappedResult(R, F);\n return MappedResult(P);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsObject, IsSchema } from '../guard/kind.mjs';\n// ------------------------------------------------------------------\n// IntersectCreate\n// ------------------------------------------------------------------\n// prettier-ignore\nexport function IntersectCreate(T, options = {}) {\n const allObjects = T.every((schema) => IsObject(schema));\n const clonedUnevaluatedProperties = IsSchema(options.unevaluatedProperties)\n ? { unevaluatedProperties: options.unevaluatedProperties }\n : {};\n return CreateType((options.unevaluatedProperties === false || IsSchema(options.unevaluatedProperties) || allObjects\n ? { ...clonedUnevaluatedProperties, [Kind]: 'Intersect', type: 'object', allOf: T }\n : { ...clonedUnevaluatedProperties, [Kind]: 'Intersect', allOf: T }), options);\n}\n","import { OptionalKind } from '../symbols/index.mjs';\nimport { CreateType } from '../create/type.mjs';\nimport { Discard } from '../discard/index.mjs';\nimport { Never } from '../never/index.mjs';\nimport { Optional } from '../optional/index.mjs';\nimport { IntersectCreate } from './intersect-create.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsOptional, IsTransform } from '../guard/kind.mjs';\n// prettier-ignore\nfunction IsIntersectOptional(types) {\n return types.every(left => IsOptional(left));\n}\n// prettier-ignore\nfunction RemoveOptionalFromType(type) {\n return (Discard(type, [OptionalKind]));\n}\n// prettier-ignore\nfunction RemoveOptionalFromRest(types) {\n return types.map(left => IsOptional(left) ? RemoveOptionalFromType(left) : left);\n}\n// prettier-ignore\nfunction ResolveIntersect(types, options) {\n return (IsIntersectOptional(types)\n ? Optional(IntersectCreate(RemoveOptionalFromRest(types), options))\n : IntersectCreate(RemoveOptionalFromRest(types), options));\n}\n/** `[Json]` Creates an evaluated Intersect type */\nexport function IntersectEvaluated(types, options = {}) {\n if (types.length === 1)\n return CreateType(types[0], options);\n if (types.length === 0)\n return Never(options);\n if (types.some((schema) => IsTransform(schema)))\n throw new Error('Cannot intersect transform types');\n return ResolveIntersect(types, options);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Never } from '../never/index.mjs';\nimport { IntersectCreate } from './intersect-create.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsTransform } from '../guard/kind.mjs';\n/** `[Json]` Creates an evaluated Intersect type */\nexport function Intersect(types, options) {\n if (types.length === 1)\n return CreateType(types[0], options);\n if (types.length === 0)\n return Never(options);\n if (types.some((schema) => IsTransform(schema)))\n throw new Error('Cannot intersect transform types');\n return IntersectCreate(types, options);\n}\n","import { TypeBoxError } from '../error/index.mjs';\nimport { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates a Ref type. The referenced type must contain a $id */\nexport function Ref(...args) {\n const [$ref, options] = typeof args[0] === 'string' ? [args[0], args[1]] : [args[0].$id, args[1]];\n if (typeof $ref !== 'string')\n throw new TypeBoxError('Ref: $ref must be a string');\n return CreateType({ [Kind]: 'Ref', $ref }, options);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Computed } from '../computed/index.mjs';\nimport { Intersect } from '../intersect/index.mjs';\nimport { Union } from '../union/index.mjs';\nimport { Ref } from '../ref/index.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsIntersect, IsUnion, IsPromise, IsRef, IsComputed } from '../guard/kind.mjs';\n// prettier-ignore\nfunction FromComputed(target, parameters) {\n return Computed('Awaited', [Computed(target, parameters)]);\n}\n// prettier-ignore\nfunction FromRef($ref) {\n return Computed('Awaited', [Ref($ref)]);\n}\n// prettier-ignore\nfunction FromIntersect(types) {\n return Intersect(FromRest(types));\n}\n// prettier-ignore\nfunction FromUnion(types) {\n return Union(FromRest(types));\n}\n// prettier-ignore\nfunction FromPromise(type) {\n return Awaited(type);\n}\n// prettier-ignore\nfunction FromRest(types) {\n return types.map(type => Awaited(type));\n}\n/** `[JavaScript]` Constructs a type by recursively unwrapping Promise types */\nexport function Awaited(type, options) {\n return CreateType(IsComputed(type) ? FromComputed(type.target, type.parameters) : IsIntersect(type) ? FromIntersect(type.allOf) : IsUnion(type) ? FromUnion(type.anyOf) : IsPromise(type) ? FromPromise(type.item) : IsRef(type) ? FromRef(type.$ref) : type, options);\n}\n","import { SetUnionMany, SetIntersectMany } from '../sets/index.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsIntersect, IsUnion, IsTuple, IsArray, IsObject, IsRecord } from '../guard/kind.mjs';\n// prettier-ignore\nfunction FromRest(types) {\n const result = [];\n for (const L of types)\n result.push(KeyOfPropertyKeys(L));\n return result;\n}\n// prettier-ignore\nfunction FromIntersect(types) {\n const propertyKeysArray = FromRest(types);\n const propertyKeys = SetUnionMany(propertyKeysArray);\n return propertyKeys;\n}\n// prettier-ignore\nfunction FromUnion(types) {\n const propertyKeysArray = FromRest(types);\n const propertyKeys = SetIntersectMany(propertyKeysArray);\n return propertyKeys;\n}\n// prettier-ignore\nfunction FromTuple(types) {\n return types.map((_, indexer) => indexer.toString());\n}\n// prettier-ignore\nfunction FromArray(_) {\n return (['[number]']);\n}\n// prettier-ignore\nfunction FromProperties(T) {\n return (globalThis.Object.getOwnPropertyNames(T));\n}\n// ------------------------------------------------------------------\n// FromPatternProperties\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromPatternProperties(patternProperties) {\n if (!includePatternProperties)\n return [];\n const patternPropertyKeys = globalThis.Object.getOwnPropertyNames(patternProperties);\n return patternPropertyKeys.map(key => {\n return (key[0] === '^' && key[key.length - 1] === '$')\n ? key.slice(1, key.length - 1)\n : key;\n });\n}\n/** Returns a tuple of PropertyKeys derived from the given TSchema. */\n// prettier-ignore\nexport function KeyOfPropertyKeys(type) {\n return (IsIntersect(type) ? FromIntersect(type.allOf) :\n IsUnion(type) ? FromUnion(type.anyOf) :\n IsTuple(type) ? FromTuple(type.items ?? []) :\n IsArray(type) ? FromArray(type.items) :\n IsObject(type) ? FromProperties(type.properties) :\n IsRecord(type) ? FromPatternProperties(type.patternProperties) :\n []);\n}\n// ----------------------------------------------------------------\n// KeyOfPattern\n// ----------------------------------------------------------------\nlet includePatternProperties = false;\n/** Returns a regular expression pattern derived from the given TSchema */\nexport function KeyOfPattern(schema) {\n includePatternProperties = true;\n const keys = KeyOfPropertyKeys(schema);\n includePatternProperties = false;\n const pattern = keys.map((key) => `(${key})`);\n return `^(${pattern.join('|')})$`;\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Literal } from '../literal/index.mjs';\nimport { Number } from '../number/index.mjs';\nimport { Computed } from '../computed/index.mjs';\nimport { Ref } from '../ref/index.mjs';\nimport { KeyOfPropertyKeys } from './keyof-property-keys.mjs';\nimport { UnionEvaluated } from '../union/index.mjs';\nimport { KeyOfFromMappedResult } from './keyof-from-mapped-result.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsMappedResult, IsRef, IsComputed } from '../guard/kind.mjs';\n// prettier-ignore\nfunction FromComputed(target, parameters) {\n return Computed('KeyOf', [Computed(target, parameters)]);\n}\n// prettier-ignore\nfunction FromRef($ref) {\n return Computed('KeyOf', [Ref($ref)]);\n}\n// prettier-ignore\nfunction KeyOfFromType(type, options) {\n const propertyKeys = KeyOfPropertyKeys(type);\n const propertyKeyTypes = KeyOfPropertyKeysToRest(propertyKeys);\n const result = UnionEvaluated(propertyKeyTypes);\n return CreateType(result, options);\n}\n// prettier-ignore\nexport function KeyOfPropertyKeysToRest(propertyKeys) {\n return propertyKeys.map(L => L === '[number]' ? Number() : Literal(L));\n}\n/** `[Json]` Creates a KeyOf type */\nexport function KeyOf(type, options) {\n return (IsComputed(type) ? FromComputed(type.target, type.parameters) : IsRef(type) ? FromRef(type.$ref) : IsMappedResult(type) ? KeyOfFromMappedResult(type, options) : KeyOfFromType(type, options));\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { KeyOf } from './keyof.mjs';\nimport { Clone } from '../clone/value.mjs';\n// prettier-ignore\nfunction FromProperties(properties, options) {\n const result = {};\n for (const K2 of globalThis.Object.getOwnPropertyNames(properties))\n result[K2] = KeyOf(properties[K2], Clone(options));\n return result;\n}\n// prettier-ignore\nfunction FromMappedResult(mappedResult, options) {\n return FromProperties(mappedResult.properties, options);\n}\n// prettier-ignore\nexport function KeyOfFromMappedResult(mappedResult, options) {\n const properties = FromMappedResult(mappedResult, options);\n return MappedResult(properties);\n}\n","import { IntersectEvaluated } from '../intersect/index.mjs';\nimport { IndexFromPropertyKeys } from '../indexed/index.mjs';\nimport { KeyOfPropertyKeys } from '../keyof/index.mjs';\nimport { Object } from '../object/index.mjs';\nimport { SetDistinct } from '../sets/index.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsNever } from '../guard/kind.mjs';\n// prettier-ignore\nfunction CompositeKeys(T) {\n const Acc = [];\n for (const L of T)\n Acc.push(...KeyOfPropertyKeys(L));\n return SetDistinct(Acc);\n}\n// prettier-ignore\nfunction FilterNever(T) {\n return T.filter(L => !IsNever(L));\n}\n// prettier-ignore\nfunction CompositeProperty(T, K) {\n const Acc = [];\n for (const L of T)\n Acc.push(...IndexFromPropertyKeys(L, [K]));\n return FilterNever(Acc);\n}\n// prettier-ignore\nfunction CompositeProperties(T, K) {\n const Acc = {};\n for (const L of K) {\n Acc[L] = IntersectEvaluated(CompositeProperty(T, L));\n }\n return Acc;\n}\n// prettier-ignore\nexport function Composite(T, options) {\n const K = CompositeKeys(T);\n const P = CompositeProperties(T, K);\n const R = Object(P, options);\n return R;\n}\n","import { Kind } from '../symbols/index.mjs';\nimport { CreateType } from '../create/type.mjs';\n/** `[JavaScript]` Creates a Date type */\nexport function Date(options) {\n return CreateType({ [Kind]: 'Date', type: 'Date' }, options);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates a Null type */\nexport function Null(options) {\n return CreateType({ [Kind]: 'Null', type: 'null' }, options);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[JavaScript]` Creates a Symbol type */\nexport function Symbol(options) {\n return CreateType({ [Kind]: 'Symbol', type: 'symbol' }, options);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[JavaScript]` Creates a Undefined type */\nexport function Undefined(options) {\n return CreateType({ [Kind]: 'Undefined', type: 'undefined' }, options);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[JavaScript]` Creates a Uint8Array type */\nexport function Uint8Array(options) {\n return CreateType({ [Kind]: 'Uint8Array', type: 'Uint8Array' }, options);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates an Unknown type */\nexport function Unknown(options) {\n return CreateType({ [Kind]: 'Unknown' }, options);\n}\n","import { Any } from '../any/index.mjs';\nimport { BigInt } from '../bigint/index.mjs';\nimport { Date } from '../date/index.mjs';\nimport { Function as FunctionType } from '../function/index.mjs';\nimport { Literal } from '../literal/index.mjs';\nimport { Null } from '../null/index.mjs';\nimport { Object } from '../object/index.mjs';\nimport { Symbol } from '../symbol/index.mjs';\nimport { Tuple } from '../tuple/index.mjs';\nimport { Readonly } from '../readonly/index.mjs';\nimport { Undefined } from '../undefined/index.mjs';\nimport { Uint8Array } from '../uint8array/index.mjs';\nimport { Unknown } from '../unknown/index.mjs';\nimport { CreateType } from '../create/index.mjs';\n// ------------------------------------------------------------------\n// ValueGuard\n// ------------------------------------------------------------------\nimport { IsArray, IsNumber, IsBigInt, IsUint8Array, IsDate, IsIterator, IsObject, IsAsyncIterator, IsFunction, IsUndefined, IsNull, IsSymbol, IsBoolean, IsString } from '../guard/value.mjs';\n// prettier-ignore\nfunction FromArray(T) {\n return T.map(L => FromValue(L, false));\n}\n// prettier-ignore\nfunction FromProperties(value) {\n const Acc = {};\n for (const K of globalThis.Object.getOwnPropertyNames(value))\n Acc[K] = Readonly(FromValue(value[K], false));\n return Acc;\n}\nfunction ConditionalReadonly(T, root) {\n return (root === true ? T : Readonly(T));\n}\n// prettier-ignore\nfunction FromValue(value, root) {\n return (IsAsyncIterator(value) ? ConditionalReadonly(Any(), root) :\n IsIterator(value) ? ConditionalReadonly(Any(), root) :\n IsArray(value) ? Readonly(Tuple(FromArray(value))) :\n IsUint8Array(value) ? Uint8Array() :\n IsDate(value) ? Date() :\n IsObject(value) ? ConditionalReadonly(Object(FromProperties(value)), root) :\n IsFunction(value) ? ConditionalReadonly(FunctionType([], Unknown()), root) :\n IsUndefined(value) ? Undefined() :\n IsNull(value) ? Null() :\n IsSymbol(value) ? Symbol() :\n IsBigInt(value) ? BigInt() :\n IsNumber(value) ? Literal(value) :\n IsBoolean(value) ? Literal(value) :\n IsString(value) ? Literal(value) :\n Object({}));\n}\n/** `[JavaScript]` Creates a readonly const type from the given value. */\nexport function Const(T, options) {\n return CreateType(FromValue(T, true), options);\n}\n","import { Tuple } from '../tuple/index.mjs';\nimport { Never } from '../never/index.mjs';\nimport * as KindGuard from '../guard/kind.mjs';\n/** `[JavaScript]` Extracts the ConstructorParameters from the given Constructor type */\nexport function ConstructorParameters(schema, options) {\n return (KindGuard.IsConstructor(schema) ? Tuple(schema.parameters, options) : Never(options));\n}\n","import { Literal } from '../literal/index.mjs';\nimport { Kind, Hint } from '../symbols/index.mjs';\nimport { Union } from '../union/index.mjs';\n// ------------------------------------------------------------------\n// ValueGuard\n// ------------------------------------------------------------------\nimport { IsUndefined } from '../guard/value.mjs';\n/** `[Json]` Creates a Enum type */\nexport function Enum(item, options) {\n if (IsUndefined(item))\n throw new Error('Enum undefined or empty');\n const values1 = globalThis.Object.getOwnPropertyNames(item)\n .filter((key) => isNaN(key))\n .map((key) => item[key]);\n const values2 = [...new Set(values1)];\n const anyOf = values2.map((value) => Literal(value));\n return Union(anyOf, { ...options, [Hint]: 'Enum' });\n}\n","import { Any } from '../any/index.mjs';\nimport { Function as FunctionType } from '../function/index.mjs';\nimport { Number } from '../number/index.mjs';\nimport { String } from '../string/index.mjs';\nimport { Unknown } from '../unknown/index.mjs';\nimport { TemplateLiteralToUnion } from '../template-literal/index.mjs';\nimport { PatternNumberExact, PatternStringExact } from '../patterns/index.mjs';\nimport { Kind, Hint } from '../symbols/index.mjs';\nimport { TypeBoxError } from '../error/index.mjs';\nimport { TypeGuard, ValueGuard } from '../guard/index.mjs';\nexport class ExtendsResolverError extends TypeBoxError {\n}\nexport var ExtendsResult;\n(function (ExtendsResult) {\n ExtendsResult[ExtendsResult[\"Union\"] = 0] = \"Union\";\n ExtendsResult[ExtendsResult[\"True\"] = 1] = \"True\";\n ExtendsResult[ExtendsResult[\"False\"] = 2] = \"False\";\n})(ExtendsResult || (ExtendsResult = {}));\n// ------------------------------------------------------------------\n// IntoBooleanResult\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction IntoBooleanResult(result) {\n return result === ExtendsResult.False ? result : ExtendsResult.True;\n}\n// ------------------------------------------------------------------\n// Throw\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction Throw(message) {\n throw new ExtendsResolverError(message);\n}\n// ------------------------------------------------------------------\n// StructuralRight\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction IsStructuralRight(right) {\n return (TypeGuard.IsNever(right) ||\n TypeGuard.IsIntersect(right) ||\n TypeGuard.IsUnion(right) ||\n TypeGuard.IsUnknown(right) ||\n TypeGuard.IsAny(right));\n}\n// prettier-ignore\nfunction StructuralRight(left, right) {\n return (TypeGuard.IsNever(right) ? FromNeverRight(left, right) :\n TypeGuard.IsIntersect(right) ? FromIntersectRight(left, right) :\n TypeGuard.IsUnion(right) ? FromUnionRight(left, right) :\n TypeGuard.IsUnknown(right) ? FromUnknownRight(left, right) :\n TypeGuard.IsAny(right) ? FromAnyRight(left, right) :\n Throw('StructuralRight'));\n}\n// ------------------------------------------------------------------\n// Any\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromAnyRight(left, right) {\n return ExtendsResult.True;\n}\n// prettier-ignore\nfunction FromAny(left, right) {\n return (TypeGuard.IsIntersect(right) ? FromIntersectRight(left, right) :\n (TypeGuard.IsUnion(right) && right.anyOf.some((schema) => TypeGuard.IsAny(schema) || TypeGuard.IsUnknown(schema))) ? ExtendsResult.True :\n TypeGuard.IsUnion(right) ? ExtendsResult.Union :\n TypeGuard.IsUnknown(right) ? ExtendsResult.True :\n TypeGuard.IsAny(right) ? ExtendsResult.True :\n ExtendsResult.Union);\n}\n// ------------------------------------------------------------------\n// Array\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromArrayRight(left, right) {\n return (TypeGuard.IsUnknown(left) ? ExtendsResult.False :\n TypeGuard.IsAny(left) ? ExtendsResult.Union :\n TypeGuard.IsNever(left) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// prettier-ignore\nfunction FromArray(left, right) {\n return (TypeGuard.IsObject(right) && IsObjectArrayLike(right) ? ExtendsResult.True :\n IsStructuralRight(right) ? StructuralRight(left, right) :\n !TypeGuard.IsArray(right) ? ExtendsResult.False :\n IntoBooleanResult(Visit(left.items, right.items)));\n}\n// ------------------------------------------------------------------\n// AsyncIterator\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromAsyncIterator(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n !TypeGuard.IsAsyncIterator(right) ? ExtendsResult.False :\n IntoBooleanResult(Visit(left.items, right.items)));\n}\n// ------------------------------------------------------------------\n// BigInt\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromBigInt(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsRecord(right) ? FromRecordRight(left, right) :\n TypeGuard.IsBigInt(right) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// Boolean\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromBooleanRight(left, right) {\n return (TypeGuard.IsLiteralBoolean(left) ? ExtendsResult.True :\n TypeGuard.IsBoolean(left) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// prettier-ignore\nfunction FromBoolean(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsRecord(right) ? FromRecordRight(left, right) :\n TypeGuard.IsBoolean(right) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// Constructor\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromConstructor(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n !TypeGuard.IsConstructor(right) ? ExtendsResult.False :\n left.parameters.length > right.parameters.length ? ExtendsResult.False :\n (!left.parameters.every((schema, index) => IntoBooleanResult(Visit(right.parameters[index], schema)) === ExtendsResult.True)) ? ExtendsResult.False :\n IntoBooleanResult(Visit(left.returns, right.returns)));\n}\n// ------------------------------------------------------------------\n// Date\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromDate(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsRecord(right) ? FromRecordRight(left, right) :\n TypeGuard.IsDate(right) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// Function\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromFunction(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n !TypeGuard.IsFunction(right) ? ExtendsResult.False :\n left.parameters.length > right.parameters.length ? ExtendsResult.False :\n (!left.parameters.every((schema, index) => IntoBooleanResult(Visit(right.parameters[index], schema)) === ExtendsResult.True)) ? ExtendsResult.False :\n IntoBooleanResult(Visit(left.returns, right.returns)));\n}\n// ------------------------------------------------------------------\n// Integer\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromIntegerRight(left, right) {\n return (TypeGuard.IsLiteral(left) && ValueGuard.IsNumber(left.const) ? ExtendsResult.True :\n TypeGuard.IsNumber(left) || TypeGuard.IsInteger(left) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// prettier-ignore\nfunction FromInteger(left, right) {\n return (TypeGuard.IsInteger(right) || TypeGuard.IsNumber(right) ? ExtendsResult.True :\n IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsRecord(right) ? FromRecordRight(left, right) :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// Intersect\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromIntersectRight(left, right) {\n return right.allOf.every((schema) => Visit(left, schema) === ExtendsResult.True)\n ? ExtendsResult.True\n : ExtendsResult.False;\n}\n// prettier-ignore\nfunction FromIntersect(left, right) {\n return left.allOf.some((schema) => Visit(schema, right) === ExtendsResult.True)\n ? ExtendsResult.True\n : ExtendsResult.False;\n}\n// ------------------------------------------------------------------\n// Iterator\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromIterator(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n !TypeGuard.IsIterator(right) ? ExtendsResult.False :\n IntoBooleanResult(Visit(left.items, right.items)));\n}\n// ------------------------------------------------------------------\n// Literal\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromLiteral(left, right) {\n return (TypeGuard.IsLiteral(right) && right.const === left.const ? ExtendsResult.True :\n IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsRecord(right) ? FromRecordRight(left, right) :\n TypeGuard.IsString(right) ? FromStringRight(left, right) :\n TypeGuard.IsNumber(right) ? FromNumberRight(left, right) :\n TypeGuard.IsInteger(right) ? FromIntegerRight(left, right) :\n TypeGuard.IsBoolean(right) ? FromBooleanRight(left, right) :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// Never\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromNeverRight(left, right) {\n return ExtendsResult.False;\n}\n// prettier-ignore\nfunction FromNever(left, right) {\n return ExtendsResult.True;\n}\n// ------------------------------------------------------------------\n// Not\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction UnwrapTNot(schema) {\n let [current, depth] = [schema, 0];\n while (true) {\n if (!TypeGuard.IsNot(current))\n break;\n current = current.not;\n depth += 1;\n }\n return depth % 2 === 0 ? current : Unknown();\n}\n// prettier-ignore\nfunction FromNot(left, right) {\n // TypeScript has no concept of negated types, and attempts to correctly check the negated\n // type at runtime would put TypeBox at odds with TypeScripts ability to statically infer\n // the type. Instead we unwrap to either unknown or T and continue evaluating.\n // prettier-ignore\n return (TypeGuard.IsNot(left) ? Visit(UnwrapTNot(left), right) :\n TypeGuard.IsNot(right) ? Visit(left, UnwrapTNot(right)) :\n Throw('Invalid fallthrough for Not'));\n}\n// ------------------------------------------------------------------\n// Null\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromNull(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsRecord(right) ? FromRecordRight(left, right) :\n TypeGuard.IsNull(right) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// Number\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromNumberRight(left, right) {\n return (TypeGuard.IsLiteralNumber(left) ? ExtendsResult.True :\n TypeGuard.IsNumber(left) || TypeGuard.IsInteger(left) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// prettier-ignore\nfunction FromNumber(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsRecord(right) ? FromRecordRight(left, right) :\n TypeGuard.IsInteger(right) || TypeGuard.IsNumber(right) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// Object\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction IsObjectPropertyCount(schema, count) {\n return Object.getOwnPropertyNames(schema.properties).length === count;\n}\n// prettier-ignore\nfunction IsObjectStringLike(schema) {\n return IsObjectArrayLike(schema);\n}\n// prettier-ignore\nfunction IsObjectSymbolLike(schema) {\n return IsObjectPropertyCount(schema, 0) || (IsObjectPropertyCount(schema, 1) && 'description' in schema.properties && TypeGuard.IsUnion(schema.properties.description) && schema.properties.description.anyOf.length === 2 && ((TypeGuard.IsString(schema.properties.description.anyOf[0]) &&\n TypeGuard.IsUndefined(schema.properties.description.anyOf[1])) || (TypeGuard.IsString(schema.properties.description.anyOf[1]) &&\n TypeGuard.IsUndefined(schema.properties.description.anyOf[0]))));\n}\n// prettier-ignore\nfunction IsObjectNumberLike(schema) {\n return IsObjectPropertyCount(schema, 0);\n}\n// prettier-ignore\nfunction IsObjectBooleanLike(schema) {\n return IsObjectPropertyCount(schema, 0);\n}\n// prettier-ignore\nfunction IsObjectBigIntLike(schema) {\n return IsObjectPropertyCount(schema, 0);\n}\n// prettier-ignore\nfunction IsObjectDateLike(schema) {\n return IsObjectPropertyCount(schema, 0);\n}\n// prettier-ignore\nfunction IsObjectUint8ArrayLike(schema) {\n return IsObjectArrayLike(schema);\n}\n// prettier-ignore\nfunction IsObjectFunctionLike(schema) {\n const length = Number();\n return IsObjectPropertyCount(schema, 0) || (IsObjectPropertyCount(schema, 1) && 'length' in schema.properties && IntoBooleanResult(Visit(schema.properties['length'], length)) === ExtendsResult.True);\n}\n// prettier-ignore\nfunction IsObjectConstructorLike(schema) {\n return IsObjectPropertyCount(schema, 0);\n}\n// prettier-ignore\nfunction IsObjectArrayLike(schema) {\n const length = Number();\n return IsObjectPropertyCount(schema, 0) || (IsObjectPropertyCount(schema, 1) && 'length' in schema.properties && IntoBooleanResult(Visit(schema.properties['length'], length)) === ExtendsResult.True);\n}\n// prettier-ignore\nfunction IsObjectPromiseLike(schema) {\n const then = FunctionType([Any()], Any());\n return IsObjectPropertyCount(schema, 0) || (IsObjectPropertyCount(schema, 1) && 'then' in schema.properties && IntoBooleanResult(Visit(schema.properties['then'], then)) === ExtendsResult.True);\n}\n// ------------------------------------------------------------------\n// Property\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction Property(left, right) {\n return (Visit(left, right) === ExtendsResult.False ? ExtendsResult.False :\n TypeGuard.IsOptional(left) && !TypeGuard.IsOptional(right) ? ExtendsResult.False :\n ExtendsResult.True);\n}\n// prettier-ignore\nfunction FromObjectRight(left, right) {\n return (TypeGuard.IsUnknown(left) ? ExtendsResult.False :\n TypeGuard.IsAny(left) ? ExtendsResult.Union : (TypeGuard.IsNever(left) ||\n (TypeGuard.IsLiteralString(left) && IsObjectStringLike(right)) ||\n (TypeGuard.IsLiteralNumber(left) && IsObjectNumberLike(right)) ||\n (TypeGuard.IsLiteralBoolean(left) && IsObjectBooleanLike(right)) ||\n (TypeGuard.IsSymbol(left) && IsObjectSymbolLike(right)) ||\n (TypeGuard.IsBigInt(left) && IsObjectBigIntLike(right)) ||\n (TypeGuard.IsString(left) && IsObjectStringLike(right)) ||\n (TypeGuard.IsSymbol(left) && IsObjectSymbolLike(right)) ||\n (TypeGuard.IsNumber(left) && IsObjectNumberLike(right)) ||\n (TypeGuard.IsInteger(left) && IsObjectNumberLike(right)) ||\n (TypeGuard.IsBoolean(left) && IsObjectBooleanLike(right)) ||\n (TypeGuard.IsUint8Array(left) && IsObjectUint8ArrayLike(right)) ||\n (TypeGuard.IsDate(left) && IsObjectDateLike(right)) ||\n (TypeGuard.IsConstructor(left) && IsObjectConstructorLike(right)) ||\n (TypeGuard.IsFunction(left) && IsObjectFunctionLike(right))) ? ExtendsResult.True :\n (TypeGuard.IsRecord(left) && TypeGuard.IsString(RecordKey(left))) ? (() => {\n // When expressing a Record with literal key values, the Record is converted into a Object with\n // the Hint assigned as `Record`. This is used to invert the extends logic.\n return right[Hint] === 'Record' ? ExtendsResult.True : ExtendsResult.False;\n })() :\n (TypeGuard.IsRecord(left) && TypeGuard.IsNumber(RecordKey(left))) ? (() => {\n return IsObjectPropertyCount(right, 0) ? ExtendsResult.True : ExtendsResult.False;\n })() :\n ExtendsResult.False);\n}\n// prettier-ignore\nfunction FromObject(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsRecord(right) ? FromRecordRight(left, right) :\n !TypeGuard.IsObject(right) ? ExtendsResult.False :\n (() => {\n for (const key of Object.getOwnPropertyNames(right.properties)) {\n if (!(key in left.properties) && !TypeGuard.IsOptional(right.properties[key])) {\n return ExtendsResult.False;\n }\n if (TypeGuard.IsOptional(right.properties[key])) {\n return ExtendsResult.True;\n }\n if (Property(left.properties[key], right.properties[key]) === ExtendsResult.False) {\n return ExtendsResult.False;\n }\n }\n return ExtendsResult.True;\n })());\n}\n// ------------------------------------------------------------------\n// Promise\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromPromise(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) && IsObjectPromiseLike(right) ? ExtendsResult.True :\n !TypeGuard.IsPromise(right) ? ExtendsResult.False :\n IntoBooleanResult(Visit(left.item, right.item)));\n}\n// ------------------------------------------------------------------\n// Record\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction RecordKey(schema) {\n return (PatternNumberExact in schema.patternProperties ? Number() :\n PatternStringExact in schema.patternProperties ? String() :\n Throw('Unknown record key pattern'));\n}\n// prettier-ignore\nfunction RecordValue(schema) {\n return (PatternNumberExact in schema.patternProperties ? schema.patternProperties[PatternNumberExact] :\n PatternStringExact in schema.patternProperties ? schema.patternProperties[PatternStringExact] :\n Throw('Unable to get record value schema'));\n}\n// prettier-ignore\nfunction FromRecordRight(left, right) {\n const [Key, Value] = [RecordKey(right), RecordValue(right)];\n return ((TypeGuard.IsLiteralString(left) && TypeGuard.IsNumber(Key) && IntoBooleanResult(Visit(left, Value)) === ExtendsResult.True) ? ExtendsResult.True :\n TypeGuard.IsUint8Array(left) && TypeGuard.IsNumber(Key) ? Visit(left, Value) :\n TypeGuard.IsString(left) && TypeGuard.IsNumber(Key) ? Visit(left, Value) :\n TypeGuard.IsArray(left) && TypeGuard.IsNumber(Key) ? Visit(left, Value) :\n TypeGuard.IsObject(left) ? (() => {\n for (const key of Object.getOwnPropertyNames(left.properties)) {\n if (Property(Value, left.properties[key]) === ExtendsResult.False) {\n return ExtendsResult.False;\n }\n }\n return ExtendsResult.True;\n })() :\n ExtendsResult.False);\n}\n// prettier-ignore\nfunction FromRecord(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n !TypeGuard.IsRecord(right) ? ExtendsResult.False :\n Visit(RecordValue(left), RecordValue(right)));\n}\n// ------------------------------------------------------------------\n// RegExp\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromRegExp(left, right) {\n // Note: RegExp types evaluate as strings, not RegExp objects.\n // Here we remap either into string and continue evaluating.\n const L = TypeGuard.IsRegExp(left) ? String() : left;\n const R = TypeGuard.IsRegExp(right) ? String() : right;\n return Visit(L, R);\n}\n// ------------------------------------------------------------------\n// String\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromStringRight(left, right) {\n return (TypeGuard.IsLiteral(left) && ValueGuard.IsString(left.const) ? ExtendsResult.True :\n TypeGuard.IsString(left) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// prettier-ignore\nfunction FromString(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsRecord(right) ? FromRecordRight(left, right) :\n TypeGuard.IsString(right) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// Symbol\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromSymbol(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsRecord(right) ? FromRecordRight(left, right) :\n TypeGuard.IsSymbol(right) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// TemplateLiteral\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromTemplateLiteral(left, right) {\n // TemplateLiteral types are resolved to either unions for finite expressions or string\n // for infinite expressions. Here we call to TemplateLiteralResolver to resolve for\n // either type and continue evaluating.\n return (TypeGuard.IsTemplateLiteral(left) ? Visit(TemplateLiteralToUnion(left), right) :\n TypeGuard.IsTemplateLiteral(right) ? Visit(left, TemplateLiteralToUnion(right)) :\n Throw('Invalid fallthrough for TemplateLiteral'));\n}\n// ------------------------------------------------------------------\n// Tuple\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction IsArrayOfTuple(left, right) {\n return (TypeGuard.IsArray(right) &&\n left.items !== undefined &&\n left.items.every((schema) => Visit(schema, right.items) === ExtendsResult.True));\n}\n// prettier-ignore\nfunction FromTupleRight(left, right) {\n return (TypeGuard.IsNever(left) ? ExtendsResult.True :\n TypeGuard.IsUnknown(left) ? ExtendsResult.False :\n TypeGuard.IsAny(left) ? ExtendsResult.Union :\n ExtendsResult.False);\n}\n// prettier-ignore\nfunction FromTuple(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) && IsObjectArrayLike(right) ? ExtendsResult.True :\n TypeGuard.IsArray(right) && IsArrayOfTuple(left, right) ? ExtendsResult.True :\n !TypeGuard.IsTuple(right) ? ExtendsResult.False :\n (ValueGuard.IsUndefined(left.items) && !ValueGuard.IsUndefined(right.items)) || (!ValueGuard.IsUndefined(left.items) && ValueGuard.IsUndefined(right.items)) ? ExtendsResult.False :\n (ValueGuard.IsUndefined(left.items) && !ValueGuard.IsUndefined(right.items)) ? ExtendsResult.True :\n left.items.every((schema, index) => Visit(schema, right.items[index]) === ExtendsResult.True) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// Uint8Array\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromUint8Array(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsRecord(right) ? FromRecordRight(left, right) :\n TypeGuard.IsUint8Array(right) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// Undefined\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromUndefined(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsRecord(right) ? FromRecordRight(left, right) :\n TypeGuard.IsVoid(right) ? FromVoidRight(left, right) :\n TypeGuard.IsUndefined(right) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// Union\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromUnionRight(left, right) {\n return right.anyOf.some((schema) => Visit(left, schema) === ExtendsResult.True)\n ? ExtendsResult.True\n : ExtendsResult.False;\n}\n// prettier-ignore\nfunction FromUnion(left, right) {\n return left.anyOf.every((schema) => Visit(schema, right) === ExtendsResult.True)\n ? ExtendsResult.True\n : ExtendsResult.False;\n}\n// ------------------------------------------------------------------\n// Unknown\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromUnknownRight(left, right) {\n return ExtendsResult.True;\n}\n// prettier-ignore\nfunction FromUnknown(left, right) {\n return (TypeGuard.IsNever(right) ? FromNeverRight(left, right) :\n TypeGuard.IsIntersect(right) ? FromIntersectRight(left, right) :\n TypeGuard.IsUnion(right) ? FromUnionRight(left, right) :\n TypeGuard.IsAny(right) ? FromAnyRight(left, right) :\n TypeGuard.IsString(right) ? FromStringRight(left, right) :\n TypeGuard.IsNumber(right) ? FromNumberRight(left, right) :\n TypeGuard.IsInteger(right) ? FromIntegerRight(left, right) :\n TypeGuard.IsBoolean(right) ? FromBooleanRight(left, right) :\n TypeGuard.IsArray(right) ? FromArrayRight(left, right) :\n TypeGuard.IsTuple(right) ? FromTupleRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsUnknown(right) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// Void\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromVoidRight(left, right) {\n return (TypeGuard.IsUndefined(left) ? ExtendsResult.True :\n TypeGuard.IsUndefined(left) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// prettier-ignore\nfunction FromVoid(left, right) {\n return (TypeGuard.IsIntersect(right) ? FromIntersectRight(left, right) :\n TypeGuard.IsUnion(right) ? FromUnionRight(left, right) :\n TypeGuard.IsUnknown(right) ? FromUnknownRight(left, right) :\n TypeGuard.IsAny(right) ? FromAnyRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsVoid(right) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// prettier-ignore\nfunction Visit(left, right) {\n return (\n // resolvable\n (TypeGuard.IsTemplateLiteral(left) || TypeGuard.IsTemplateLiteral(right)) ? FromTemplateLiteral(left, right) :\n (TypeGuard.IsRegExp(left) || TypeGuard.IsRegExp(right)) ? FromRegExp(left, right) :\n (TypeGuard.IsNot(left) || TypeGuard.IsNot(right)) ? FromNot(left, right) :\n // standard\n TypeGuard.IsAny(left) ? FromAny(left, right) :\n TypeGuard.IsArray(left) ? FromArray(left, right) :\n TypeGuard.IsBigInt(left) ? FromBigInt(left, right) :\n TypeGuard.IsBoolean(left) ? FromBoolean(left, right) :\n TypeGuard.IsAsyncIterator(left) ? FromAsyncIterator(left, right) :\n TypeGuard.IsConstructor(left) ? FromConstructor(left, right) :\n TypeGuard.IsDate(left) ? FromDate(left, right) :\n TypeGuard.IsFunction(left) ? FromFunction(left, right) :\n TypeGuard.IsInteger(left) ? FromInteger(left, right) :\n TypeGuard.IsIntersect(left) ? FromIntersect(left, right) :\n TypeGuard.IsIterator(left) ? FromIterator(left, right) :\n TypeGuard.IsLiteral(left) ? FromLiteral(left, right) :\n TypeGuard.IsNever(left) ? FromNever(left, right) :\n TypeGuard.IsNull(left) ? FromNull(left, right) :\n TypeGuard.IsNumber(left) ? FromNumber(left, right) :\n TypeGuard.IsObject(left) ? FromObject(left, right) :\n TypeGuard.IsRecord(left) ? FromRecord(left, right) :\n TypeGuard.IsString(left) ? FromString(left, right) :\n TypeGuard.IsSymbol(left) ? FromSymbol(left, right) :\n TypeGuard.IsTuple(left) ? FromTuple(left, right) :\n TypeGuard.IsPromise(left) ? FromPromise(left, right) :\n TypeGuard.IsUint8Array(left) ? FromUint8Array(left, right) :\n TypeGuard.IsUndefined(left) ? FromUndefined(left, right) :\n TypeGuard.IsUnion(left) ? FromUnion(left, right) :\n TypeGuard.IsUnknown(left) ? FromUnknown(left, right) :\n TypeGuard.IsVoid(left) ? FromVoid(left, right) :\n Throw(`Unknown left type operand '${left[Kind]}'`));\n}\nexport function ExtendsCheck(left, right) {\n return Visit(left, right);\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Extends } from './extends.mjs';\nimport { Clone } from '../clone/value.mjs';\n// prettier-ignore\nfunction FromProperties(P, Right, True, False, options) {\n const Acc = {};\n for (const K2 of globalThis.Object.getOwnPropertyNames(P))\n Acc[K2] = Extends(P[K2], Right, True, False, Clone(options));\n return Acc;\n}\n// prettier-ignore\nfunction FromMappedResult(Left, Right, True, False, options) {\n return FromProperties(Left.properties, Right, True, False, options);\n}\n// prettier-ignore\nexport function ExtendsFromMappedResult(Left, Right, True, False, options) {\n const P = FromMappedResult(Left, Right, True, False, options);\n return MappedResult(P);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Union } from '../union/index.mjs';\nimport { ExtendsCheck, ExtendsResult } from './extends-check.mjs';\nimport { ExtendsFromMappedKey } from './extends-from-mapped-key.mjs';\nimport { ExtendsFromMappedResult } from './extends-from-mapped-result.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsMappedKey, IsMappedResult } from '../guard/kind.mjs';\n// prettier-ignore\nfunction ExtendsResolve(left, right, trueType, falseType) {\n const R = ExtendsCheck(left, right);\n return (R === ExtendsResult.Union ? Union([trueType, falseType]) :\n R === ExtendsResult.True ? trueType :\n falseType);\n}\n/** `[Json]` Creates a Conditional type */\nexport function Extends(L, R, T, F, options) {\n // prettier-ignore\n return (IsMappedResult(L) ? ExtendsFromMappedResult(L, R, T, F, options) :\n IsMappedKey(L) ? CreateType(ExtendsFromMappedKey(L, R, T, F, options)) :\n CreateType(ExtendsResolve(L, R, T, F), options));\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Literal } from '../literal/index.mjs';\nimport { Extends } from './extends.mjs';\nimport { Clone } from '../clone/value.mjs';\n// prettier-ignore\nfunction FromPropertyKey(K, U, L, R, options) {\n return {\n [K]: Extends(Literal(K), U, L, R, Clone(options))\n };\n}\n// prettier-ignore\nfunction FromPropertyKeys(K, U, L, R, options) {\n return K.reduce((Acc, LK) => {\n return { ...Acc, ...FromPropertyKey(LK, U, L, R, options) };\n }, {});\n}\n// prettier-ignore\nfunction FromMappedKey(K, U, L, R, options) {\n return FromPropertyKeys(K.keys, U, L, R, options);\n}\n// prettier-ignore\nexport function ExtendsFromMappedKey(T, U, L, R, options) {\n const P = FromMappedKey(T, U, L, R, options);\n return MappedResult(P);\n}\n","import { Exclude } from './exclude.mjs';\nimport { TemplateLiteralToUnion } from '../template-literal/index.mjs';\nexport function ExcludeFromTemplateLiteral(L, R) {\n return Exclude(TemplateLiteralToUnion(L), R);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Union } from '../union/index.mjs';\nimport { Never } from '../never/index.mjs';\nimport { ExtendsCheck, ExtendsResult } from '../extends/index.mjs';\nimport { ExcludeFromMappedResult } from './exclude-from-mapped-result.mjs';\nimport { ExcludeFromTemplateLiteral } from './exclude-from-template-literal.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsMappedResult, IsTemplateLiteral, IsUnion } from '../guard/kind.mjs';\nfunction ExcludeRest(L, R) {\n const excluded = L.filter((inner) => ExtendsCheck(inner, R) === ExtendsResult.False);\n return excluded.length === 1 ? excluded[0] : Union(excluded);\n}\n/** `[Json]` Constructs a type by excluding from unionType all union members that are assignable to excludedMembers */\nexport function Exclude(L, R, options = {}) {\n // overloads\n if (IsTemplateLiteral(L))\n return CreateType(ExcludeFromTemplateLiteral(L, R), options);\n if (IsMappedResult(L))\n return CreateType(ExcludeFromMappedResult(L, R), options);\n // prettier-ignore\n return CreateType(IsUnion(L) ? ExcludeRest(L.anyOf, R) :\n ExtendsCheck(L, R) !== ExtendsResult.False ? Never() : L, options);\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Exclude } from './exclude.mjs';\n// prettier-ignore\nfunction FromProperties(P, U) {\n const Acc = {};\n for (const K2 of globalThis.Object.getOwnPropertyNames(P))\n Acc[K2] = Exclude(P[K2], U);\n return Acc;\n}\n// prettier-ignore\nfunction FromMappedResult(R, T) {\n return FromProperties(R.properties, T);\n}\n// prettier-ignore\nexport function ExcludeFromMappedResult(R, T) {\n const P = FromMappedResult(R, T);\n return MappedResult(P);\n}\n","import { Extract } from './extract.mjs';\nimport { TemplateLiteralToUnion } from '../template-literal/index.mjs';\nexport function ExtractFromTemplateLiteral(L, R) {\n return Extract(TemplateLiteralToUnion(L), R);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Union } from '../union/index.mjs';\nimport { Never } from '../never/index.mjs';\nimport { ExtendsCheck, ExtendsResult } from '../extends/index.mjs';\nimport { ExtractFromMappedResult } from './extract-from-mapped-result.mjs';\nimport { ExtractFromTemplateLiteral } from './extract-from-template-literal.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsMappedResult, IsTemplateLiteral, IsUnion } from '../guard/kind.mjs';\nfunction ExtractRest(L, R) {\n const extracted = L.filter((inner) => ExtendsCheck(inner, R) !== ExtendsResult.False);\n return extracted.length === 1 ? extracted[0] : Union(extracted);\n}\n/** `[Json]` Constructs a type by extracting from type all union members that are assignable to union */\nexport function Extract(L, R, options) {\n // overloads\n if (IsTemplateLiteral(L))\n return CreateType(ExtractFromTemplateLiteral(L, R), options);\n if (IsMappedResult(L))\n return CreateType(ExtractFromMappedResult(L, R), options);\n // prettier-ignore\n return CreateType(IsUnion(L) ? ExtractRest(L.anyOf, R) :\n ExtendsCheck(L, R) !== ExtendsResult.False ? L : Never(), options);\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Extract } from './extract.mjs';\n// prettier-ignore\nfunction FromProperties(P, T) {\n const Acc = {};\n for (const K2 of globalThis.Object.getOwnPropertyNames(P))\n Acc[K2] = Extract(P[K2], T);\n return Acc;\n}\n// prettier-ignore\nfunction FromMappedResult(R, T) {\n return FromProperties(R.properties, T);\n}\n// prettier-ignore\nexport function ExtractFromMappedResult(R, T) {\n const P = FromMappedResult(R, T);\n return MappedResult(P);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Never } from '../never/index.mjs';\nimport * as KindGuard from '../guard/kind.mjs';\n/** `[JavaScript]` Extracts the InstanceType from the given Constructor type */\nexport function InstanceType(schema, options) {\n return (KindGuard.IsConstructor(schema) ? CreateType(schema.returns, options) : Never(options));\n}\n","import { Readonly } from '../readonly/index.mjs';\nimport { Optional } from '../optional/index.mjs';\n/** `[Json]` Creates a Readonly and Optional property */\nexport function ReadonlyOptional(schema) {\n return Readonly(Optional(schema));\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind, Hint } from '../symbols/index.mjs';\nimport { Never } from '../never/index.mjs';\nimport { Number } from '../number/index.mjs';\nimport { Object } from '../object/index.mjs';\nimport { String } from '../string/index.mjs';\nimport { Union } from '../union/index.mjs';\nimport { IsTemplateLiteralFinite } from '../template-literal/index.mjs';\nimport { PatternStringExact, PatternNumberExact, PatternNeverExact } from '../patterns/index.mjs';\nimport { IndexPropertyKeys } from '../indexed/index.mjs';\n// ------------------------------------------------------------------\n// ValueGuard\n// ------------------------------------------------------------------\nimport { IsUndefined } from '../guard/value.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsInteger, IsLiteral, IsAny, IsBoolean, IsNever, IsNumber, IsString, IsRegExp, IsTemplateLiteral, IsUnion } from '../guard/kind.mjs';\n// ------------------------------------------------------------------\n// RecordCreateFromPattern\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction RecordCreateFromPattern(pattern, T, options) {\n return CreateType({ [Kind]: 'Record', type: 'object', patternProperties: { [pattern]: T } }, options);\n}\n// ------------------------------------------------------------------\n// RecordCreateFromKeys\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction RecordCreateFromKeys(K, T, options) {\n const result = {};\n for (const K2 of K)\n result[K2] = T;\n return Object(result, { ...options, [Hint]: 'Record' });\n}\n// prettier-ignore\nfunction FromTemplateLiteralKey(K, T, options) {\n return (IsTemplateLiteralFinite(K)\n ? RecordCreateFromKeys(IndexPropertyKeys(K), T, options)\n : RecordCreateFromPattern(K.pattern, T, options));\n}\n// prettier-ignore\nfunction FromUnionKey(key, type, options) {\n return RecordCreateFromKeys(IndexPropertyKeys(Union(key)), type, options);\n}\n// prettier-ignore\nfunction FromLiteralKey(key, type, options) {\n return RecordCreateFromKeys([key.toString()], type, options);\n}\n// prettier-ignore\nfunction FromRegExpKey(key, type, options) {\n return RecordCreateFromPattern(key.source, type, options);\n}\n// prettier-ignore\nfunction FromStringKey(key, type, options) {\n const pattern = IsUndefined(key.pattern) ? PatternStringExact : key.pattern;\n return RecordCreateFromPattern(pattern, type, options);\n}\n// prettier-ignore\nfunction FromAnyKey(_, type, options) {\n return RecordCreateFromPattern(PatternStringExact, type, options);\n}\n// prettier-ignore\nfunction FromNeverKey(_key, type, options) {\n return RecordCreateFromPattern(PatternNeverExact, type, options);\n}\n// prettier-ignore\nfunction FromBooleanKey(_key, type, options) {\n return Object({ true: type, false: type }, options);\n}\n// prettier-ignore\nfunction FromIntegerKey(_key, type, options) {\n return RecordCreateFromPattern(PatternNumberExact, type, options);\n}\n// prettier-ignore\nfunction FromNumberKey(_, type, options) {\n return RecordCreateFromPattern(PatternNumberExact, type, options);\n}\n// ------------------------------------------------------------------\n// TRecordOrObject\n// ------------------------------------------------------------------\n/** `[Json]` Creates a Record type */\nexport function Record(key, type, options = {}) {\n // prettier-ignore\n return (IsUnion(key) ? FromUnionKey(key.anyOf, type, options) :\n IsTemplateLiteral(key) ? FromTemplateLiteralKey(key, type, options) :\n IsLiteral(key) ? FromLiteralKey(key.const, type, options) :\n IsBoolean(key) ? FromBooleanKey(key, type, options) :\n IsInteger(key) ? FromIntegerKey(key, type, options) :\n IsNumber(key) ? FromNumberKey(key, type, options) :\n IsRegExp(key) ? FromRegExpKey(key, type, options) :\n IsString(key) ? FromStringKey(key, type, options) :\n IsAny(key) ? FromAnyKey(key, type, options) :\n IsNever(key) ? FromNeverKey(key, type, options) :\n Never(options));\n}\n// ------------------------------------------------------------------\n// Record Utilities\n// ------------------------------------------------------------------\n/** Gets the Records Pattern */\nexport function RecordPattern(record) {\n return globalThis.Object.getOwnPropertyNames(record.patternProperties)[0];\n}\n/** Gets the Records Key Type */\n// prettier-ignore\nexport function RecordKey(type) {\n const pattern = RecordPattern(type);\n return (pattern === PatternStringExact ? String() :\n pattern === PatternNumberExact ? Number() :\n String({ pattern }));\n}\n/** Gets a Record Value Type */\n// prettier-ignore\nexport function RecordValue(type) {\n return type.patternProperties[RecordPattern(type)];\n}\n","import { CloneType } from '../clone/type.mjs';\nimport { Unknown } from '../unknown/index.mjs';\nimport { ReadonlyOptional } from '../readonly-optional/index.mjs';\nimport { Readonly } from '../readonly/index.mjs';\nimport { Optional } from '../optional/index.mjs';\nimport { Object } from '../object/index.mjs';\nimport { Record, RecordKey, RecordValue } from '../record/index.mjs';\nimport * as ValueGuard from '../guard/value.mjs';\nimport * as KindGuard from '../guard/kind.mjs';\n// prettier-ignore\nfunction FromConstructor(args, type) {\n type.parameters = FromTypes(args, type.parameters);\n type.returns = FromType(args, type.returns);\n return type;\n}\n// prettier-ignore\nfunction FromFunction(args, type) {\n type.parameters = FromTypes(args, type.parameters);\n type.returns = FromType(args, type.returns);\n return type;\n}\n// prettier-ignore\nfunction FromIntersect(args, type) {\n type.allOf = FromTypes(args, type.allOf);\n return type;\n}\n// prettier-ignore\nfunction FromUnion(args, type) {\n type.anyOf = FromTypes(args, type.anyOf);\n return type;\n}\n// prettier-ignore\nfunction FromTuple(args, type) {\n if (ValueGuard.IsUndefined(type.items))\n return type;\n type.items = FromTypes(args, type.items);\n return type;\n}\n// prettier-ignore\nfunction FromArray(args, type) {\n type.items = FromType(args, type.items);\n return type;\n}\n// prettier-ignore\nfunction FromAsyncIterator(args, type) {\n type.items = FromType(args, type.items);\n return type;\n}\n// prettier-ignore\nfunction FromIterator(args, type) {\n type.items = FromType(args, type.items);\n return type;\n}\n// prettier-ignore\nfunction FromPromise(args, type) {\n type.item = FromType(args, type.item);\n return type;\n}\n// prettier-ignore\nfunction FromObject(args, type) {\n const mappedProperties = FromProperties(args, type.properties);\n return { ...type, ...Object(mappedProperties) }; // retain options\n}\n// prettier-ignore\nfunction FromRecord(args, type) {\n const mappedKey = FromType(args, RecordKey(type));\n const mappedValue = FromType(args, RecordValue(type));\n const result = Record(mappedKey, mappedValue);\n return { ...type, ...result }; // retain options\n}\n// prettier-ignore\nfunction FromArgument(args, argument) {\n return argument.index in args ? args[argument.index] : Unknown();\n}\n// prettier-ignore\nfunction FromProperty(args, type) {\n const isReadonly = KindGuard.IsReadonly(type);\n const isOptional = KindGuard.IsOptional(type);\n const mapped = FromType(args, type);\n return (isReadonly && isOptional ? ReadonlyOptional(mapped) :\n isReadonly && !isOptional ? Readonly(mapped) :\n !isReadonly && isOptional ? Optional(mapped) :\n mapped);\n}\n// prettier-ignore\nfunction FromProperties(args, properties) {\n return globalThis.Object.getOwnPropertyNames(properties).reduce((result, key) => {\n return { ...result, [key]: FromProperty(args, properties[key]) };\n }, {});\n}\n// prettier-ignore\nexport function FromTypes(args, types) {\n return types.map(type => FromType(args, type));\n}\n// prettier-ignore\nfunction FromType(args, type) {\n return (KindGuard.IsConstructor(type) ? FromConstructor(args, type) :\n KindGuard.IsFunction(type) ? FromFunction(args, type) :\n KindGuard.IsIntersect(type) ? FromIntersect(args, type) :\n KindGuard.IsUnion(type) ? FromUnion(args, type) :\n KindGuard.IsTuple(type) ? FromTuple(args, type) :\n KindGuard.IsArray(type) ? FromArray(args, type) :\n KindGuard.IsAsyncIterator(type) ? FromAsyncIterator(args, type) :\n KindGuard.IsIterator(type) ? FromIterator(args, type) :\n KindGuard.IsPromise(type) ? FromPromise(args, type) :\n KindGuard.IsObject(type) ? FromObject(args, type) :\n KindGuard.IsRecord(type) ? FromRecord(args, type) :\n KindGuard.IsArgument(type) ? FromArgument(args, type) :\n type);\n}\n/** `[JavaScript]` Instantiates a type with the given parameters */\n// prettier-ignore\nexport function Instantiate(type, args) {\n return FromType(args, CloneType(type));\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates an Integer type */\nexport function Integer(options) {\n return CreateType({ [Kind]: 'Integer', type: 'integer' }, options);\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Intrinsic } from './intrinsic.mjs';\nimport { Literal } from '../literal/index.mjs';\nimport { Clone } from '../clone/value.mjs';\n// prettier-ignore\nfunction MappedIntrinsicPropertyKey(K, M, options) {\n return {\n [K]: Intrinsic(Literal(K), M, Clone(options))\n };\n}\n// prettier-ignore\nfunction MappedIntrinsicPropertyKeys(K, M, options) {\n const result = K.reduce((Acc, L) => {\n return { ...Acc, ...MappedIntrinsicPropertyKey(L, M, options) };\n }, {});\n return result;\n}\n// prettier-ignore\nfunction MappedIntrinsicProperties(T, M, options) {\n return MappedIntrinsicPropertyKeys(T['keys'], M, options);\n}\n// prettier-ignore\nexport function IntrinsicFromMappedKey(T, M, options) {\n const P = MappedIntrinsicProperties(T, M, options);\n return MappedResult(P);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { TemplateLiteral, TemplateLiteralParseExact, IsTemplateLiteralExpressionFinite, TemplateLiteralExpressionGenerate } from '../template-literal/index.mjs';\nimport { IntrinsicFromMappedKey } from './intrinsic-from-mapped-key.mjs';\nimport { Literal } from '../literal/index.mjs';\nimport { Union } from '../union/index.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsMappedKey, IsTemplateLiteral, IsUnion, IsLiteral } from '../guard/kind.mjs';\n// ------------------------------------------------------------------\n// Apply\n// ------------------------------------------------------------------\nfunction ApplyUncapitalize(value) {\n const [first, rest] = [value.slice(0, 1), value.slice(1)];\n return [first.toLowerCase(), rest].join('');\n}\nfunction ApplyCapitalize(value) {\n const [first, rest] = [value.slice(0, 1), value.slice(1)];\n return [first.toUpperCase(), rest].join('');\n}\nfunction ApplyUppercase(value) {\n return value.toUpperCase();\n}\nfunction ApplyLowercase(value) {\n return value.toLowerCase();\n}\nfunction FromTemplateLiteral(schema, mode, options) {\n // note: template literals require special runtime handling as they are encoded in string patterns.\n // This diverges from the mapped type which would otherwise map on the template literal kind.\n const expression = TemplateLiteralParseExact(schema.pattern);\n const finite = IsTemplateLiteralExpressionFinite(expression);\n if (!finite)\n return { ...schema, pattern: FromLiteralValue(schema.pattern, mode) };\n const strings = [...TemplateLiteralExpressionGenerate(expression)];\n const literals = strings.map((value) => Literal(value));\n const mapped = FromRest(literals, mode);\n const union = Union(mapped);\n return TemplateLiteral([union], options);\n}\n// prettier-ignore\nfunction FromLiteralValue(value, mode) {\n return (typeof value === 'string' ? (mode === 'Uncapitalize' ? ApplyUncapitalize(value) :\n mode === 'Capitalize' ? ApplyCapitalize(value) :\n mode === 'Uppercase' ? ApplyUppercase(value) :\n mode === 'Lowercase' ? ApplyLowercase(value) :\n value) : value.toString());\n}\n// prettier-ignore\nfunction FromRest(T, M) {\n return T.map(L => Intrinsic(L, M));\n}\n/** Applies an intrinsic string manipulation to the given type. */\nexport function Intrinsic(schema, mode, options = {}) {\n // prettier-ignore\n return (\n // Intrinsic-Mapped-Inference\n IsMappedKey(schema) ? IntrinsicFromMappedKey(schema, mode, options) :\n // Standard-Inference\n IsTemplateLiteral(schema) ? FromTemplateLiteral(schema, mode, options) :\n IsUnion(schema) ? Union(FromRest(schema.anyOf, mode), options) :\n IsLiteral(schema) ? Literal(FromLiteralValue(schema.const, mode), options) :\n // Default Type\n CreateType(schema, options));\n}\n","import { Intrinsic } from './intrinsic.mjs';\n/** `[Json]` Intrinsic function to Capitalize LiteralString types */\nexport function Capitalize(T, options = {}) {\n return Intrinsic(T, 'Capitalize', options);\n}\n","import { Intrinsic } from './intrinsic.mjs';\n/** `[Json]` Intrinsic function to Lowercase LiteralString types */\nexport function Lowercase(T, options = {}) {\n return Intrinsic(T, 'Lowercase', options);\n}\n","import { Intrinsic } from './intrinsic.mjs';\n/** `[Json]` Intrinsic function to Uncapitalize LiteralString types */\nexport function Uncapitalize(T, options = {}) {\n return Intrinsic(T, 'Uncapitalize', options);\n}\n","import { Intrinsic } from './intrinsic.mjs';\n/** `[Json]` Intrinsic function to Uppercase LiteralString types */\nexport function Uppercase(T, options = {}) {\n return Intrinsic(T, 'Uppercase', options);\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Omit } from './omit.mjs';\nimport { Clone } from '../clone/value.mjs';\n// prettier-ignore\nfunction FromProperties(properties, propertyKeys, options) {\n const result = {};\n for (const K2 of globalThis.Object.getOwnPropertyNames(properties))\n result[K2] = Omit(properties[K2], propertyKeys, Clone(options));\n return result;\n}\n// prettier-ignore\nfunction FromMappedResult(mappedResult, propertyKeys, options) {\n return FromProperties(mappedResult.properties, propertyKeys, options);\n}\n// prettier-ignore\nexport function OmitFromMappedResult(mappedResult, propertyKeys, options) {\n const properties = FromMappedResult(mappedResult, propertyKeys, options);\n return MappedResult(properties);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Discard } from '../discard/discard.mjs';\nimport { TransformKind } from '../symbols/symbols.mjs';\nimport { Computed } from '../computed/index.mjs';\nimport { Literal } from '../literal/index.mjs';\nimport { IndexPropertyKeys } from '../indexed/index.mjs';\nimport { Intersect } from '../intersect/index.mjs';\nimport { Union } from '../union/index.mjs';\nimport { Object } from '../object/index.mjs';\n// ------------------------------------------------------------------\n// Mapped\n// ------------------------------------------------------------------\nimport { OmitFromMappedKey } from './omit-from-mapped-key.mjs';\nimport { OmitFromMappedResult } from './omit-from-mapped-result.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsMappedKey, IsIntersect, IsUnion, IsObject, IsSchema, IsMappedResult, IsLiteralValue, IsRef } from '../guard/kind.mjs';\nimport { IsArray as IsArrayValue } from '../guard/value.mjs';\n// prettier-ignore\nfunction FromIntersect(types, propertyKeys) {\n return types.map((type) => OmitResolve(type, propertyKeys));\n}\n// prettier-ignore\nfunction FromUnion(types, propertyKeys) {\n return types.map((type) => OmitResolve(type, propertyKeys));\n}\n// ------------------------------------------------------------------\n// FromProperty\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromProperty(properties, key) {\n const { [key]: _, ...R } = properties;\n return R;\n}\n// prettier-ignore\nfunction FromProperties(properties, propertyKeys) {\n return propertyKeys.reduce((T, K2) => FromProperty(T, K2), properties);\n}\n// prettier-ignore\nfunction FromObject(type, propertyKeys, properties) {\n const options = Discard(type, [TransformKind, '$id', 'required', 'properties']);\n const mappedProperties = FromProperties(properties, propertyKeys);\n return Object(mappedProperties, options);\n}\n// prettier-ignore\nfunction UnionFromPropertyKeys(propertyKeys) {\n const result = propertyKeys.reduce((result, key) => IsLiteralValue(key) ? [...result, Literal(key)] : result, []);\n return Union(result);\n}\n// prettier-ignore\nfunction OmitResolve(type, propertyKeys) {\n return (IsIntersect(type) ? Intersect(FromIntersect(type.allOf, propertyKeys)) :\n IsUnion(type) ? Union(FromUnion(type.anyOf, propertyKeys)) :\n IsObject(type) ? FromObject(type, propertyKeys, type.properties) :\n Object({}));\n}\n/** `[Json]` Constructs a type whose keys are picked from the given type */\n// prettier-ignore\nexport function Omit(type, key, options) {\n const typeKey = IsArrayValue(key) ? UnionFromPropertyKeys(key) : key;\n const propertyKeys = IsSchema(key) ? IndexPropertyKeys(key) : key;\n const isTypeRef = IsRef(type);\n const isKeyRef = IsRef(key);\n return (IsMappedResult(type) ? OmitFromMappedResult(type, propertyKeys, options) :\n IsMappedKey(key) ? OmitFromMappedKey(type, key, options) :\n (isTypeRef && isKeyRef) ? Computed('Omit', [type, typeKey], options) :\n (!isTypeRef && isKeyRef) ? Computed('Omit', [type, typeKey], options) :\n (isTypeRef && !isKeyRef) ? Computed('Omit', [type, typeKey], options) :\n CreateType({ ...OmitResolve(type, propertyKeys), ...options }));\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Omit } from './omit.mjs';\nimport { Clone } from '../clone/value.mjs';\n// prettier-ignore\nfunction FromPropertyKey(type, key, options) {\n return { [key]: Omit(type, [key], Clone(options)) };\n}\n// prettier-ignore\nfunction FromPropertyKeys(type, propertyKeys, options) {\n return propertyKeys.reduce((Acc, LK) => {\n return { ...Acc, ...FromPropertyKey(type, LK, options) };\n }, {});\n}\n// prettier-ignore\nfunction FromMappedKey(type, mappedKey, options) {\n return FromPropertyKeys(type, mappedKey.keys, options);\n}\n// prettier-ignore\nexport function OmitFromMappedKey(type, mappedKey, options) {\n const properties = FromMappedKey(type, mappedKey, options);\n return MappedResult(properties);\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Pick } from './pick.mjs';\nimport { Clone } from '../clone/value.mjs';\n// prettier-ignore\nfunction FromProperties(properties, propertyKeys, options) {\n const result = {};\n for (const K2 of globalThis.Object.getOwnPropertyNames(properties))\n result[K2] = Pick(properties[K2], propertyKeys, Clone(options));\n return result;\n}\n// prettier-ignore\nfunction FromMappedResult(mappedResult, propertyKeys, options) {\n return FromProperties(mappedResult.properties, propertyKeys, options);\n}\n// prettier-ignore\nexport function PickFromMappedResult(mappedResult, propertyKeys, options) {\n const properties = FromMappedResult(mappedResult, propertyKeys, options);\n return MappedResult(properties);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Discard } from '../discard/discard.mjs';\nimport { Computed } from '../computed/index.mjs';\nimport { Intersect } from '../intersect/index.mjs';\nimport { Literal } from '../literal/index.mjs';\nimport { Object } from '../object/index.mjs';\nimport { Union } from '../union/index.mjs';\nimport { IndexPropertyKeys } from '../indexed/index.mjs';\nimport { TransformKind } from '../symbols/symbols.mjs';\n// ------------------------------------------------------------------\n// Guards\n// ------------------------------------------------------------------\nimport { IsMappedKey, IsMappedResult, IsIntersect, IsUnion, IsObject, IsSchema, IsLiteralValue, IsRef } from '../guard/kind.mjs';\nimport { IsArray as IsArrayValue } from '../guard/value.mjs';\n// ------------------------------------------------------------------\n// Infrastructure\n// ------------------------------------------------------------------\nimport { PickFromMappedKey } from './pick-from-mapped-key.mjs';\nimport { PickFromMappedResult } from './pick-from-mapped-result.mjs';\nfunction FromIntersect(types, propertyKeys) {\n return types.map((type) => PickResolve(type, propertyKeys));\n}\n// prettier-ignore\nfunction FromUnion(types, propertyKeys) {\n return types.map((type) => PickResolve(type, propertyKeys));\n}\n// prettier-ignore\nfunction FromProperties(properties, propertyKeys) {\n const result = {};\n for (const K2 of propertyKeys)\n if (K2 in properties)\n result[K2] = properties[K2];\n return result;\n}\n// prettier-ignore\nfunction FromObject(Type, keys, properties) {\n const options = Discard(Type, [TransformKind, '$id', 'required', 'properties']);\n const mappedProperties = FromProperties(properties, keys);\n return Object(mappedProperties, options);\n}\n// prettier-ignore\nfunction UnionFromPropertyKeys(propertyKeys) {\n const result = propertyKeys.reduce((result, key) => IsLiteralValue(key) ? [...result, Literal(key)] : result, []);\n return Union(result);\n}\n// prettier-ignore\nfunction PickResolve(type, propertyKeys) {\n return (IsIntersect(type) ? Intersect(FromIntersect(type.allOf, propertyKeys)) :\n IsUnion(type) ? Union(FromUnion(type.anyOf, propertyKeys)) :\n IsObject(type) ? FromObject(type, propertyKeys, type.properties) :\n Object({}));\n}\n/** `[Json]` Constructs a type whose keys are picked from the given type */\n// prettier-ignore\nexport function Pick(type, key, options) {\n const typeKey = IsArrayValue(key) ? UnionFromPropertyKeys(key) : key;\n const propertyKeys = IsSchema(key) ? IndexPropertyKeys(key) : key;\n const isTypeRef = IsRef(type);\n const isKeyRef = IsRef(key);\n return (IsMappedResult(type) ? PickFromMappedResult(type, propertyKeys, options) :\n IsMappedKey(key) ? PickFromMappedKey(type, key, options) :\n (isTypeRef && isKeyRef) ? Computed('Pick', [type, typeKey], options) :\n (!isTypeRef && isKeyRef) ? Computed('Pick', [type, typeKey], options) :\n (isTypeRef && !isKeyRef) ? Computed('Pick', [type, typeKey], options) :\n CreateType({ ...PickResolve(type, propertyKeys), ...options }));\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Pick } from './pick.mjs';\nimport { Clone } from '../clone/value.mjs';\n// prettier-ignore\nfunction FromPropertyKey(type, key, options) {\n return {\n [key]: Pick(type, [key], Clone(options))\n };\n}\n// prettier-ignore\nfunction FromPropertyKeys(type, propertyKeys, options) {\n return propertyKeys.reduce((result, leftKey) => {\n return { ...result, ...FromPropertyKey(type, leftKey, options) };\n }, {});\n}\n// prettier-ignore\nfunction FromMappedKey(type, mappedKey, options) {\n return FromPropertyKeys(type, mappedKey.keys, options);\n}\n// prettier-ignore\nexport function PickFromMappedKey(type, mappedKey, options) {\n const properties = FromMappedKey(type, mappedKey, options);\n return MappedResult(properties);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Computed } from '../computed/index.mjs';\nimport { Optional } from '../optional/index.mjs';\nimport { Object } from '../object/index.mjs';\nimport { Intersect } from '../intersect/index.mjs';\nimport { Union } from '../union/index.mjs';\nimport { Ref } from '../ref/index.mjs';\nimport { Discard } from '../discard/index.mjs';\nimport { TransformKind } from '../symbols/index.mjs';\nimport { PartialFromMappedResult } from './partial-from-mapped-result.mjs';\n// ------------------------------------------------------------------\n// KindGuard\n// ------------------------------------------------------------------\nimport * as KindGuard from '../guard/kind.mjs';\n// prettier-ignore\nfunction FromComputed(target, parameters) {\n return Computed('Partial', [Computed(target, parameters)]);\n}\n// prettier-ignore\nfunction FromRef($ref) {\n return Computed('Partial', [Ref($ref)]);\n}\n// prettier-ignore\nfunction FromProperties(properties) {\n const partialProperties = {};\n for (const K of globalThis.Object.getOwnPropertyNames(properties))\n partialProperties[K] = Optional(properties[K]);\n return partialProperties;\n}\n// prettier-ignore\nfunction FromObject(type, properties) {\n const options = Discard(type, [TransformKind, '$id', 'required', 'properties']);\n const mappedProperties = FromProperties(properties);\n return Object(mappedProperties, options);\n}\n// prettier-ignore\nfunction FromRest(types) {\n return types.map(type => PartialResolve(type));\n}\n// ------------------------------------------------------------------\n// PartialResolve\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction PartialResolve(type) {\n return (\n // Mappable\n KindGuard.IsComputed(type) ? FromComputed(type.target, type.parameters) :\n KindGuard.IsRef(type) ? FromRef(type.$ref) :\n KindGuard.IsIntersect(type) ? Intersect(FromRest(type.allOf)) :\n KindGuard.IsUnion(type) ? Union(FromRest(type.anyOf)) :\n KindGuard.IsObject(type) ? FromObject(type, type.properties) :\n // Intrinsic\n KindGuard.IsBigInt(type) ? type :\n KindGuard.IsBoolean(type) ? type :\n KindGuard.IsInteger(type) ? type :\n KindGuard.IsLiteral(type) ? type :\n KindGuard.IsNull(type) ? type :\n KindGuard.IsNumber(type) ? type :\n KindGuard.IsString(type) ? type :\n KindGuard.IsSymbol(type) ? type :\n KindGuard.IsUndefined(type) ? type :\n // Passthrough\n Object({}));\n}\n/** `[Json]` Constructs a type where all properties are optional */\nexport function Partial(type, options) {\n if (KindGuard.IsMappedResult(type)) {\n return PartialFromMappedResult(type, options);\n }\n else {\n // special: mapping types require overridable options\n return CreateType({ ...PartialResolve(type), ...options });\n }\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Partial } from './partial.mjs';\nimport { Clone } from '../clone/value.mjs';\n// prettier-ignore\nfunction FromProperties(K, options) {\n const Acc = {};\n for (const K2 of globalThis.Object.getOwnPropertyNames(K))\n Acc[K2] = Partial(K[K2], Clone(options));\n return Acc;\n}\n// prettier-ignore\nfunction FromMappedResult(R, options) {\n return FromProperties(R.properties, options);\n}\n// prettier-ignore\nexport function PartialFromMappedResult(R, options) {\n const P = FromMappedResult(R, options);\n return MappedResult(P);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Computed } from '../computed/index.mjs';\nimport { Object } from '../object/index.mjs';\nimport { Intersect } from '../intersect/index.mjs';\nimport { Union } from '../union/index.mjs';\nimport { Ref } from '../ref/index.mjs';\nimport { OptionalKind, TransformKind } from '../symbols/index.mjs';\nimport { Discard } from '../discard/index.mjs';\nimport { RequiredFromMappedResult } from './required-from-mapped-result.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport * as KindGuard from '../guard/kind.mjs';\n// prettier-ignore\nfunction FromComputed(target, parameters) {\n return Computed('Required', [Computed(target, parameters)]);\n}\n// prettier-ignore\nfunction FromRef($ref) {\n return Computed('Required', [Ref($ref)]);\n}\n// prettier-ignore\nfunction FromProperties(properties) {\n const requiredProperties = {};\n for (const K of globalThis.Object.getOwnPropertyNames(properties))\n requiredProperties[K] = Discard(properties[K], [OptionalKind]);\n return requiredProperties;\n}\n// prettier-ignore\nfunction FromObject(type, properties) {\n const options = Discard(type, [TransformKind, '$id', 'required', 'properties']);\n const mappedProperties = FromProperties(properties);\n return Object(mappedProperties, options);\n}\n// prettier-ignore\nfunction FromRest(types) {\n return types.map(type => RequiredResolve(type));\n}\n// ------------------------------------------------------------------\n// RequiredResolve\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction RequiredResolve(type) {\n return (\n // Mappable\n KindGuard.IsComputed(type) ? FromComputed(type.target, type.parameters) :\n KindGuard.IsRef(type) ? FromRef(type.$ref) :\n KindGuard.IsIntersect(type) ? Intersect(FromRest(type.allOf)) :\n KindGuard.IsUnion(type) ? Union(FromRest(type.anyOf)) :\n KindGuard.IsObject(type) ? FromObject(type, type.properties) :\n // Intrinsic\n KindGuard.IsBigInt(type) ? type :\n KindGuard.IsBoolean(type) ? type :\n KindGuard.IsInteger(type) ? type :\n KindGuard.IsLiteral(type) ? type :\n KindGuard.IsNull(type) ? type :\n KindGuard.IsNumber(type) ? type :\n KindGuard.IsString(type) ? type :\n KindGuard.IsSymbol(type) ? type :\n KindGuard.IsUndefined(type) ? type :\n // Passthrough\n Object({}));\n}\n/** `[Json]` Constructs a type where all properties are required */\nexport function Required(type, options) {\n if (KindGuard.IsMappedResult(type)) {\n return RequiredFromMappedResult(type, options);\n }\n else {\n // special: mapping types require overridable options\n return CreateType({ ...RequiredResolve(type), ...options });\n }\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Required } from './required.mjs';\n// prettier-ignore\nfunction FromProperties(P, options) {\n const Acc = {};\n for (const K2 of globalThis.Object.getOwnPropertyNames(P))\n Acc[K2] = Required(P[K2], options);\n return Acc;\n}\n// prettier-ignore\nfunction FromMappedResult(R, options) {\n return FromProperties(R.properties, options);\n}\n// prettier-ignore\nexport function RequiredFromMappedResult(R, options) {\n const P = FromMappedResult(R, options);\n return MappedResult(P);\n}\n","import { CreateType } from '../create/index.mjs';\nimport { CloneType } from '../clone/index.mjs';\nimport { Discard } from '../discard/index.mjs';\nimport { Array } from '../array/index.mjs';\nimport { Awaited } from '../awaited/index.mjs';\nimport { AsyncIterator } from '../async-iterator/index.mjs';\nimport { Constructor } from '../constructor/index.mjs';\nimport { Index } from '../indexed/index.mjs';\nimport { Function as FunctionType } from '../function/index.mjs';\nimport { Intersect } from '../intersect/index.mjs';\nimport { Iterator } from '../iterator/index.mjs';\nimport { KeyOf } from '../keyof/index.mjs';\nimport { Object } from '../object/index.mjs';\nimport { Omit } from '../omit/index.mjs';\nimport { Pick } from '../pick/index.mjs';\nimport { Never } from '../never/index.mjs';\nimport { Partial } from '../partial/index.mjs';\nimport { RecordValue, RecordPattern } from '../record/index.mjs';\nimport { Required } from '../required/index.mjs';\nimport { Tuple } from '../tuple/index.mjs';\nimport { Union } from '../union/index.mjs';\n// ------------------------------------------------------------------\n// Symbols\n// ------------------------------------------------------------------\nimport { TransformKind, OptionalKind, ReadonlyKind } from '../symbols/index.mjs';\n// ------------------------------------------------------------------\n// KindGuard\n// ------------------------------------------------------------------\nimport * as KindGuard from '../guard/kind.mjs';\n// prettier-ignore\nfunction DereferenceParameters(moduleProperties, types) {\n return types.map((type) => {\n return KindGuard.IsRef(type)\n ? Dereference(moduleProperties, type.$ref)\n : FromType(moduleProperties, type);\n });\n}\n// prettier-ignore\nfunction Dereference(moduleProperties, ref) {\n return (ref in moduleProperties\n ? KindGuard.IsRef(moduleProperties[ref])\n ? Dereference(moduleProperties, moduleProperties[ref].$ref)\n : FromType(moduleProperties, moduleProperties[ref])\n : Never());\n}\n// prettier-ignore\nfunction FromAwaited(parameters) {\n return Awaited(parameters[0]);\n}\n// prettier-ignore\nfunction FromIndex(parameters) {\n return Index(parameters[0], parameters[1]);\n}\n// prettier-ignore\nfunction FromKeyOf(parameters) {\n return KeyOf(parameters[0]);\n}\n// prettier-ignore\nfunction FromPartial(parameters) {\n return Partial(parameters[0]);\n}\n// prettier-ignore\nfunction FromOmit(parameters) {\n return Omit(parameters[0], parameters[1]);\n}\n// prettier-ignore\nfunction FromPick(parameters) {\n return Pick(parameters[0], parameters[1]);\n}\n// prettier-ignore\nfunction FromRequired(parameters) {\n return Required(parameters[0]);\n}\n// prettier-ignore\nfunction FromComputed(moduleProperties, target, parameters) {\n const dereferenced = DereferenceParameters(moduleProperties, parameters);\n return (target === 'Awaited' ? FromAwaited(dereferenced) :\n target === 'Index' ? FromIndex(dereferenced) :\n target === 'KeyOf' ? FromKeyOf(dereferenced) :\n target === 'Partial' ? FromPartial(dereferenced) :\n target === 'Omit' ? FromOmit(dereferenced) :\n target === 'Pick' ? FromPick(dereferenced) :\n target === 'Required' ? FromRequired(dereferenced) :\n Never());\n}\nfunction FromArray(moduleProperties, type) {\n return Array(FromType(moduleProperties, type));\n}\nfunction FromAsyncIterator(moduleProperties, type) {\n return AsyncIterator(FromType(moduleProperties, type));\n}\n// prettier-ignore\nfunction FromConstructor(moduleProperties, parameters, instanceType) {\n return Constructor(FromTypes(moduleProperties, parameters), FromType(moduleProperties, instanceType));\n}\n// prettier-ignore\nfunction FromFunction(moduleProperties, parameters, returnType) {\n return FunctionType(FromTypes(moduleProperties, parameters), FromType(moduleProperties, returnType));\n}\nfunction FromIntersect(moduleProperties, types) {\n return Intersect(FromTypes(moduleProperties, types));\n}\nfunction FromIterator(moduleProperties, type) {\n return Iterator(FromType(moduleProperties, type));\n}\nfunction FromObject(moduleProperties, properties) {\n return Object(globalThis.Object.keys(properties).reduce((result, key) => {\n return { ...result, [key]: FromType(moduleProperties, properties[key]) };\n }, {}));\n}\n// prettier-ignore\nfunction FromRecord(moduleProperties, type) {\n const [value, pattern] = [FromType(moduleProperties, RecordValue(type)), RecordPattern(type)];\n const result = CloneType(type);\n result.patternProperties[pattern] = value;\n return result;\n}\n// prettier-ignore\nfunction FromTransform(moduleProperties, transform) {\n return (KindGuard.IsRef(transform))\n ? { ...Dereference(moduleProperties, transform.$ref), [TransformKind]: transform[TransformKind] }\n : transform;\n}\nfunction FromTuple(moduleProperties, types) {\n return Tuple(FromTypes(moduleProperties, types));\n}\nfunction FromUnion(moduleProperties, types) {\n return Union(FromTypes(moduleProperties, types));\n}\nfunction FromTypes(moduleProperties, types) {\n return types.map((type) => FromType(moduleProperties, type));\n}\n// prettier-ignore\nexport function FromType(moduleProperties, type) {\n return (\n // Modifiers\n KindGuard.IsOptional(type) ? CreateType(FromType(moduleProperties, Discard(type, [OptionalKind])), type) :\n KindGuard.IsReadonly(type) ? CreateType(FromType(moduleProperties, Discard(type, [ReadonlyKind])), type) :\n // Transform\n KindGuard.IsTransform(type) ? CreateType(FromTransform(moduleProperties, type), type) :\n // Types\n KindGuard.IsArray(type) ? CreateType(FromArray(moduleProperties, type.items), type) :\n KindGuard.IsAsyncIterator(type) ? CreateType(FromAsyncIterator(moduleProperties, type.items), type) :\n KindGuard.IsComputed(type) ? CreateType(FromComputed(moduleProperties, type.target, type.parameters)) :\n KindGuard.IsConstructor(type) ? CreateType(FromConstructor(moduleProperties, type.parameters, type.returns), type) :\n KindGuard.IsFunction(type) ? CreateType(FromFunction(moduleProperties, type.parameters, type.returns), type) :\n KindGuard.IsIntersect(type) ? CreateType(FromIntersect(moduleProperties, type.allOf), type) :\n KindGuard.IsIterator(type) ? CreateType(FromIterator(moduleProperties, type.items), type) :\n KindGuard.IsObject(type) ? CreateType(FromObject(moduleProperties, type.properties), type) :\n KindGuard.IsRecord(type) ? CreateType(FromRecord(moduleProperties, type)) :\n KindGuard.IsTuple(type) ? CreateType(FromTuple(moduleProperties, type.items || []), type) :\n KindGuard.IsUnion(type) ? CreateType(FromUnion(moduleProperties, type.anyOf), type) :\n type);\n}\n// prettier-ignore\nexport function ComputeType(moduleProperties, key) {\n return (key in moduleProperties\n ? FromType(moduleProperties, moduleProperties[key])\n : Never());\n}\n// prettier-ignore\nexport function ComputeModuleProperties(moduleProperties) {\n return globalThis.Object.getOwnPropertyNames(moduleProperties).reduce((result, key) => {\n return { ...result, [key]: ComputeType(moduleProperties, key) };\n }, {});\n}\n","import { CreateType } from '../create/index.mjs';\nimport { Kind } from '../symbols/index.mjs';\n// ------------------------------------------------------------------\n// Module Infrastructure Types\n// ------------------------------------------------------------------\nimport { ComputeModuleProperties } from './compute.mjs';\n// ------------------------------------------------------------------\n// Module\n// ------------------------------------------------------------------\n// prettier-ignore\nexport class TModule {\n constructor($defs) {\n const computed = ComputeModuleProperties($defs);\n const identified = this.WithIdentifiers(computed);\n this.$defs = identified;\n }\n /** `[Json]` Imports a Type by Key. */\n Import(key, options) {\n const $defs = { ...this.$defs, [key]: CreateType(this.$defs[key], options) };\n return CreateType({ [Kind]: 'Import', $defs, $ref: key });\n }\n // prettier-ignore\n WithIdentifiers($defs) {\n return globalThis.Object.getOwnPropertyNames($defs).reduce((result, key) => {\n return { ...result, [key]: { ...$defs[key], $id: key } };\n }, {});\n }\n}\n/** `[Json]` Creates a Type Definition Module. */\nexport function Module(properties) {\n return new TModule(properties);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates a Not type */\nexport function Not(type, options) {\n return CreateType({ [Kind]: 'Not', not: type }, options);\n}\n","import { Tuple } from '../tuple/index.mjs';\nimport { Never } from '../never/index.mjs';\nimport * as KindGuard from '../guard/kind.mjs';\n/** `[JavaScript]` Extracts the Parameters from the given Function type */\nexport function Parameters(schema, options) {\n return (KindGuard.IsFunction(schema) ? Tuple(schema.parameters, options) : Never());\n}\n","import { CloneType } from '../clone/type.mjs';\nimport { CreateType } from '../create/type.mjs';\nimport { IsUndefined } from '../guard/value.mjs';\nimport { Kind, Hint } from '../symbols/index.mjs';\n// Auto Tracked For Recursive Types without ID's\nlet Ordinal = 0;\n/** `[Json]` Creates a Recursive type */\nexport function Recursive(callback, options = {}) {\n if (IsUndefined(options.$id))\n options.$id = `T${Ordinal++}`;\n const thisType = CloneType(callback({ [Kind]: 'This', $ref: `${options.$id}` }));\n thisType.$id = options.$id;\n // prettier-ignore\n return CreateType({ [Hint]: 'Recursive', ...thisType }, options);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { IsString } from '../guard/value.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[JavaScript]` Creates a RegExp type */\nexport function RegExp(unresolved, options) {\n const expr = IsString(unresolved) ? new globalThis.RegExp(unresolved) : unresolved;\n return CreateType({ [Kind]: 'RegExp', type: 'RegExp', source: expr.source, flags: expr.flags }, options);\n}\n","// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsIntersect, IsUnion, IsTuple } from '../guard/kind.mjs';\n// prettier-ignore\nfunction RestResolve(T) {\n return (IsIntersect(T) ? T.allOf :\n IsUnion(T) ? T.anyOf :\n IsTuple(T) ? T.items ?? [] :\n []);\n}\n/** `[Json]` Extracts interior Rest elements from Tuple, Intersect and Union types */\nexport function Rest(T) {\n return RestResolve(T);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Never } from '../never/index.mjs';\nimport * as KindGuard from '../guard/kind.mjs';\n/** `[JavaScript]` Extracts the ReturnType from the given Function type */\nexport function ReturnType(schema, options) {\n return (KindGuard.IsFunction(schema) ? CreateType(schema.returns, options) : Never(options));\n}\n","import { TransformKind } from '../symbols/index.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsTransform } from '../guard/kind.mjs';\n// ------------------------------------------------------------------\n// TransformBuilders\n// ------------------------------------------------------------------\nexport class TransformDecodeBuilder {\n constructor(schema) {\n this.schema = schema;\n }\n Decode(decode) {\n return new TransformEncodeBuilder(this.schema, decode);\n }\n}\n// prettier-ignore\nexport class TransformEncodeBuilder {\n constructor(schema, decode) {\n this.schema = schema;\n this.decode = decode;\n }\n EncodeTransform(encode, schema) {\n const Encode = (value) => schema[TransformKind].Encode(encode(value));\n const Decode = (value) => this.decode(schema[TransformKind].Decode(value));\n const Codec = { Encode: Encode, Decode: Decode };\n return { ...schema, [TransformKind]: Codec };\n }\n EncodeSchema(encode, schema) {\n const Codec = { Decode: this.decode, Encode: encode };\n return { ...schema, [TransformKind]: Codec };\n }\n Encode(encode) {\n return (IsTransform(this.schema) ? this.EncodeTransform(encode, this.schema) : this.EncodeSchema(encode, this.schema));\n }\n}\n/** `[Json]` Creates a Transform type */\nexport function Transform(schema) {\n return new TransformDecodeBuilder(schema);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates a Unsafe type that will infers as the generic argument T */\nexport function Unsafe(options = {}) {\n return CreateType({ [Kind]: options[Kind] ?? 'Unsafe' }, options);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[JavaScript]` Creates a Void type */\nexport function Void(options) {\n return CreateType({ [Kind]: 'Void', type: 'void' }, options);\n}\n","// ------------------------------------------------------------------\n// Type: Module\n// ------------------------------------------------------------------\nexport { Any } from '../any/index.mjs';\nexport { Argument } from '../argument/index.mjs';\nexport { Array } from '../array/index.mjs';\nexport { AsyncIterator } from '../async-iterator/index.mjs';\nexport { Awaited } from '../awaited/index.mjs';\nexport { BigInt } from '../bigint/index.mjs';\nexport { Boolean } from '../boolean/index.mjs';\nexport { Composite } from '../composite/index.mjs';\nexport { Const } from '../const/index.mjs';\nexport { Constructor } from '../constructor/index.mjs';\nexport { ConstructorParameters } from '../constructor-parameters/index.mjs';\nexport { Date } from '../date/index.mjs';\nexport { Enum } from '../enum/index.mjs';\nexport { Exclude } from '../exclude/index.mjs';\nexport { Extends } from '../extends/index.mjs';\nexport { Extract } from '../extract/index.mjs';\nexport { Function } from '../function/index.mjs';\nexport { Index } from '../indexed/index.mjs';\nexport { InstanceType } from '../instance-type/index.mjs';\nexport { Instantiate } from '../instantiate/index.mjs';\nexport { Integer } from '../integer/index.mjs';\nexport { Intersect } from '../intersect/index.mjs';\nexport { Capitalize, Uncapitalize, Lowercase, Uppercase } from '../intrinsic/index.mjs';\nexport { Iterator } from '../iterator/index.mjs';\nexport { KeyOf } from '../keyof/index.mjs';\nexport { Literal } from '../literal/index.mjs';\nexport { Mapped } from '../mapped/index.mjs';\nexport { Module } from '../module/index.mjs';\nexport { Never } from '../never/index.mjs';\nexport { Not } from '../not/index.mjs';\nexport { Null } from '../null/index.mjs';\nexport { Number } from '../number/index.mjs';\nexport { Object } from '../object/index.mjs';\nexport { Omit } from '../omit/index.mjs';\nexport { Optional } from '../optional/index.mjs';\nexport { Parameters } from '../parameters/index.mjs';\nexport { Partial } from '../partial/index.mjs';\nexport { Pick } from '../pick/index.mjs';\nexport { Promise } from '../promise/index.mjs';\nexport { Readonly } from '../readonly/index.mjs';\nexport { ReadonlyOptional } from '../readonly-optional/index.mjs';\nexport { Record } from '../record/index.mjs';\nexport { Recursive } from '../recursive/index.mjs';\nexport { Ref } from '../ref/index.mjs';\nexport { RegExp } from '../regexp/index.mjs';\nexport { Required } from '../required/index.mjs';\nexport { Rest } from '../rest/index.mjs';\nexport { ReturnType } from '../return-type/index.mjs';\nexport { String } from '../string/index.mjs';\nexport { Symbol } from '../symbol/index.mjs';\nexport { TemplateLiteral } from '../template-literal/index.mjs';\nexport { Transform } from '../transform/index.mjs';\nexport { Tuple } from '../tuple/index.mjs';\nexport { Uint8Array } from '../uint8array/index.mjs';\nexport { Undefined } from '../undefined/index.mjs';\nexport { Union } from '../union/index.mjs';\nexport { Unknown } from '../unknown/index.mjs';\nexport { Unsafe } from '../unsafe/index.mjs';\nexport { Void } from '../void/index.mjs';\n","// ------------------------------------------------------------------\n// JsonTypeBuilder\n// ------------------------------------------------------------------\nexport { JsonTypeBuilder } from './json.mjs';\n// ------------------------------------------------------------------\n// JavaScriptTypeBuilder\n// ------------------------------------------------------------------\nimport * as TypeBuilder from './type.mjs';\nimport { JavaScriptTypeBuilder } from './javascript.mjs';\n/** JavaScript Type Builder with Static Resolution for TypeScript */\nconst Type = TypeBuilder;\nexport { JavaScriptTypeBuilder };\nexport { Type };\n","/**\n * LLM-Facing Definitions — single source of truth.\n *\n * Every string an LLM sees (tool names, descriptions, parameter descriptions,\n * channel metadata, hints, status messages) lives here.\n *\n * Also see: skills/deskfree/SKILL.md (must stay there for plugin system)\n */\nimport { Type } from '@sinclair/typebox';\n\n// ─── Orchestrator Tools (8) ───────────────────────────────────\n// Full tool set for the main orchestrator agent.\n// tools.ts spreads these and adds only the execute handler.\n\nexport const ORCHESTRATOR_TOOLS = {\n STATE: {\n name: 'deskfree_state',\n description:\n 'Get full workspace state — all goals with tasks, unlinked tasks, recently done tasks. Use to assess what needs attention.',\n parameters: Type.Object({}),\n },\n CREATE_GOAL: {\n name: 'deskfree_create_goal',\n description:\n 'Create a goal — a high-level objective to break into tasks. Returns the created goal.',\n parameters: Type.Object({\n title: Type.String({ description: 'Goal title (max 200 chars)' }),\n description: Type.Optional(\n Type.String({\n description: 'What the user wants to achieve — the big picture',\n }),\n ),\n }),\n },\n UPDATE_GOAL: {\n name: 'deskfree_update_goal',\n description: 'Update a goal status, title, or description.',\n parameters: Type.Object({\n goalId: Type.String({ description: 'Goal ID to update' }),\n title: Type.Optional(\n Type.String({ description: 'New title (max 200 chars)' }),\n ),\n description: Type.Optional(\n Type.String({ description: 'Updated description' }),\n ),\n status: Type.Optional(\n Type.String({\n description: 'New status: active, paused, completed, archived',\n }),\n ),\n }),\n },\n CREATE_TASK: {\n name: 'deskfree_create_task',\n description:\n 'Create a new task (starts as ready_for_bot). Link to a goal with goalId.',\n parameters: Type.Object({\n title: Type.String({ description: 'Task title (max 200 chars)' }),\n instructions: Type.Optional(\n Type.String({ description: 'Detailed instructions for the task' }),\n ),\n goalId: Type.Optional(\n Type.String({\n description: 'Link this task to a goal (goal ID)',\n }),\n ),\n }),\n },\n START_TASK: {\n name: 'deskfree_start_task',\n description:\n 'Claim a ready_for_bot task and start working. Returns full context (instructions, deliverable, message history).',\n parameters: Type.Object({\n taskId: Type.String({ description: 'Task UUID to claim' }),\n }),\n },\n UPDATE_DELIVERABLE: {\n name: 'deskfree_update_deliverable',\n description:\n 'Update task deliverable markdown. Build incrementally as you work.',\n parameters: Type.Object({\n taskId: Type.String({ description: 'Task UUID' }),\n deliverable: Type.String({ description: 'Markdown deliverable content' }),\n }),\n },\n COMPLETE_TASK: {\n name: 'deskfree_complete_task',\n description:\n 'Finish a task. Outcome \"done\" = work complete for review. Outcome \"blocked\" = need human input. Both move to waiting_for_human.',\n parameters: Type.Object({\n taskId: Type.String({ description: 'Task UUID' }),\n outcome: Type.Union([Type.Literal('done'), Type.Literal('blocked')], {\n description: '\"done\" = work complete, \"blocked\" = need human input',\n }),\n }),\n },\n SEND_MESSAGE: {\n name: 'deskfree_send_message',\n description:\n 'Send a message in the task thread (progress update, question, status report).',\n parameters: Type.Object({\n content: Type.String({ description: 'Message content' }),\n taskId: Type.Optional(\n Type.String({\n description: 'Task UUID (optional if context provides it)',\n }),\n ),\n }),\n },\n} as const;\n\n// ─── Worker Tools (3) ─────────────────────────────────────────\n// Subset of orchestrator tools for worker sub-agents.\n\nexport const WORKER_TOOLS = {\n UPDATE_DELIVERABLE: ORCHESTRATOR_TOOLS.UPDATE_DELIVERABLE,\n COMPLETE_TASK: ORCHESTRATOR_TOOLS.COMPLETE_TASK,\n SEND_MESSAGE: ORCHESTRATOR_TOOLS.SEND_MESSAGE,\n} as const;\n\n// ─── Channel ──────────────────────────────────────────────────\n\nexport const CHANNEL_META = {\n name: 'DeskFree',\n description: '1:1 messaging channel for DeskFree bots',\n} as const;\n\nexport const CHANNEL_HINTS = {\n targetResolver: 'Use a DeskFree ID (e.g. U9QF3C6X1A)',\n onboardingSelection: 'Connect to a DeskFree instance for 1:1 bot messaging',\n} as const;\n\nexport const STATUS_MESSAGES = {\n probeNotConfigured: 'Account not configured',\n notConfigured: {\n message: 'Account is not configured',\n fix: 'Run onboarding to set bot token and API URL',\n },\n disabled: {\n message: 'Account is disabled',\n fix: 'Set enabled: true in config',\n },\n notRunning: {\n message: 'Gateway is not running',\n },\n probeFailed: {\n fix: 'Check bot token and API URL',\n },\n} as const;\n","import { DeskFreeClient } from './client';\nimport { reportError } from './error-reporter';\nimport { getActiveTaskId, startDeskFreeConnection } from './gateway';\nimport {\n CHANNEL_HINTS,\n CHANNEL_META,\n STATUS_MESSAGES,\n} from './llm-definitions';\nimport { getDeskFreeRuntime } from './runtime';\nimport type {\n ChannelAccountSnapshot,\n ChannelLogoutContext,\n ChannelPlugin,\n DeskFreeChannelConfig,\n OpenClawConfig,\n ResolvedDeskFreeAccount,\n} from './types';\n\nfunction getChannelConfig(cfg: OpenClawConfig): DeskFreeChannelConfig | null {\n return cfg?.channels?.deskfree ?? null;\n}\n\nexport const deskFreePlugin: ChannelPlugin = {\n id: 'deskfree',\n\n meta: CHANNEL_META,\n\n capabilities: {\n text: true,\n media: false,\n reactions: false,\n threads: true,\n editing: false,\n },\n\n config: {\n listAccountIds(cfg: OpenClawConfig): string[] {\n const ch = getChannelConfig(cfg);\n if (!ch) return [];\n if (ch.accounts && Object.keys(ch.accounts).length > 0) {\n return Object.keys(ch.accounts);\n }\n return ['default'];\n },\n\n resolveAccount(\n cfg: OpenClawConfig,\n accountId?: string | null,\n ): ResolvedDeskFreeAccount {\n const ch = getChannelConfig(cfg);\n if (!ch) {\n return {\n accountId: accountId ?? 'default',\n botToken: '',\n apiUrl: '',\n wsUrl: '',\n userId: '',\n enabled: false,\n };\n }\n\n const id = accountId ?? 'default';\n const acct = id !== 'default' && ch.accounts?.[id] ? ch.accounts[id] : ch;\n\n return {\n accountId: id,\n botToken: acct.botToken ?? '',\n apiUrl: acct.apiUrl ?? '',\n wsUrl: acct.wsUrl ?? '',\n userId: acct.userId ?? '',\n enabled: acct.enabled !== false,\n botName: acct.botName,\n humanName: acct.humanName,\n };\n },\n\n isConfigured(account: ResolvedDeskFreeAccount): boolean {\n return Boolean(account.botToken && account.apiUrl);\n },\n\n isEnabled(account: ResolvedDeskFreeAccount): boolean {\n return account.enabled;\n },\n\n describeAccount(account: ResolvedDeskFreeAccount): ChannelAccountSnapshot {\n const isConfigured = Boolean(account.botToken && account.apiUrl);\n return {\n accountId: account.accountId,\n enabled: account.enabled,\n configured: isConfigured,\n };\n },\n },\n\n outbound: {\n deliveryMode: 'direct',\n chunkerMode: 'markdown',\n textChunkLimit: 2000,\n\n resolveTarget(_target, { cfg, accountId }) {\n // Resolve to the userId configured for this account\n const acct = deskFreePlugin.config.resolveAccount(cfg, accountId);\n if (!acct.userId) return null;\n return { to: acct.userId };\n },\n\n async sendText(ctx) {\n const runtime = getDeskFreeRuntime();\n const cfg = runtime.config.loadConfig();\n const ch = getChannelConfig(cfg);\n if (!ch) {\n return { channel: 'deskfree', success: false };\n }\n\n const acct = deskFreePlugin.config.resolveAccount(cfg, ctx.accountId);\n const client = new DeskFreeClient(acct.botToken, acct.apiUrl);\n const log = runtime.logging.createLogger('deskfree');\n\n try {\n // Use explicit threadId if present, otherwise auto-thread\n // into the active task\n const taskId = ctx.threadId\n ? String(ctx.threadId)\n : (getActiveTaskId() ?? undefined);\n await client.sendMessage({\n content: ctx.text,\n taskId,\n });\n return {\n channel: 'deskfree',\n success: true,\n threadId: taskId,\n };\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n log.error(`Failed to send message: ${message}`);\n reportError('error', `Outbound send failed: ${message}`, {\n component: 'channel',\n event: 'send_failed',\n });\n return {\n channel: 'deskfree',\n success: false,\n error: message,\n };\n }\n },\n },\n\n gateway: {\n async startAccount(ctx) {\n return startDeskFreeConnection(ctx);\n },\n\n async stopAccount(ctx) {\n const log =\n ctx.log ?? getDeskFreeRuntime().logging.createLogger('deskfree');\n log.info(`Stopping DeskFree account ${ctx.accountId}`);\n ctx.setStatus({ running: false, lastStopAt: Date.now() });\n },\n\n async logoutAccount(ctx: ChannelLogoutContext) {\n const log =\n ctx.log ?? getDeskFreeRuntime().logging.createLogger('deskfree');\n const runtime = ctx.runtime as {\n config: { writeConfigFile(cfg: unknown): Promise<void> };\n };\n\n // Clone config immutably\n const config = JSON.parse(JSON.stringify(ctx.cfg)) as Record<\n string,\n unknown\n >;\n const channels = (config.channels ?? {}) as Record<string, unknown>;\n const deskfree = (channels.deskfree ?? {}) as Record<string, unknown>;\n\n if (ctx.accountId === 'default') {\n delete deskfree.botToken;\n } else {\n const accounts = (deskfree.accounts ?? {}) as Record<\n string,\n Record<string, unknown>\n >;\n if (accounts[ctx.accountId]) {\n delete accounts[ctx.accountId].botToken;\n }\n }\n\n channels.deskfree = deskfree;\n config.channels = channels;\n\n await runtime.config.writeConfigFile(config);\n log.info(`Cleared bot token for account ${ctx.accountId}`);\n\n return { cleared: true, loggedOut: true };\n },\n },\n\n setup: {\n applyAccountConfig(params) {\n const { cfg, accountId, input } = params;\n const config = cfg as Record<string, unknown>;\n const channels = (config.channels ?? {}) as Record<string, unknown>;\n const deskfree = (channels.deskfree ?? {}) as Record<string, unknown>;\n\n if (accountId === 'default') {\n deskfree.botToken = input.botToken;\n deskfree.apiUrl = input.apiUrl;\n deskfree.wsUrl = input.wsUrl;\n deskfree.userId = input.userId;\n } else {\n const accounts = (deskfree.accounts ?? {}) as Record<string, unknown>;\n accounts[accountId] = {\n botToken: input.botToken,\n apiUrl: input.apiUrl,\n wsUrl: input.wsUrl,\n userId: input.userId,\n enabled: true,\n };\n deskfree.accounts = accounts;\n }\n\n // Enable block streaming on the channel for edit-in-place responses\n deskfree.blockStreaming = true;\n\n // Always set top-level channel enabled\n deskfree.enabled = true;\n channels.deskfree = deskfree;\n config.channels = channels;\n\n // Set agent-level streaming defaults if not already configured\n const agents = (config.agents ?? {}) as Record<string, unknown>;\n const defaults = (agents.defaults ?? {}) as Record<string, unknown>;\n\n if (!defaults.blockStreamingDefault) {\n defaults.blockStreamingDefault = 'on';\n }\n if (!defaults.blockStreamingBreak) {\n defaults.blockStreamingBreak = 'text_end';\n }\n if (!defaults.blockStreamingChunk) {\n defaults.blockStreamingChunk = { minChars: 200, maxChars: 800 };\n }\n if (!defaults.blockStreamingCoalesce) {\n defaults.blockStreamingCoalesce = { minChars: 200, idleMs: 1000 };\n }\n\n agents.defaults = defaults;\n config.agents = agents;\n\n // Register plugin entry with channel ID to prevent auto-enable\n // from creating a phantom disabled entry under the NPM package ID\n const plugins = (config.plugins ?? {}) as Record<string, unknown>;\n const entries = (plugins.entries ?? {}) as Record<string, unknown>;\n const existing = (entries.deskfree ?? {}) as Record<string, unknown>;\n entries.deskfree = { ...existing, enabled: true };\n plugins.entries = entries;\n config.plugins = plugins;\n\n return config;\n },\n\n validateInput(params) {\n const { input } = params;\n\n // Validate bot token\n if (!input.botToken) {\n return 'Bot token is required';\n }\n if (typeof input.botToken !== 'string') {\n return 'Bot token must be a string';\n }\n const botTokenTrimmed = input.botToken.trim();\n if (botTokenTrimmed !== input.botToken) {\n return 'Bot token must not have leading or trailing whitespace';\n }\n if (!botTokenTrimmed.startsWith('bot_')) {\n return 'Bot token must start with \"bot_\"';\n }\n if (botTokenTrimmed.length < 10) {\n return 'Bot token appears to be too short (minimum 10 characters)';\n }\n if (botTokenTrimmed.length > 100) {\n return 'Bot token appears to be too long (maximum 100 characters)';\n }\n if (!/^bot_[a-zA-Z0-9_-]+$/.test(botTokenTrimmed)) {\n return 'Bot token contains invalid characters (only alphanumeric, underscore, and dash allowed after \"bot_\")';\n }\n\n // Validate API URL\n if (!input.apiUrl) {\n return 'API URL is required';\n }\n if (typeof input.apiUrl !== 'string') {\n return 'API URL must be a string';\n }\n const apiUrlTrimmed = input.apiUrl.trim();\n if (apiUrlTrimmed !== input.apiUrl) {\n return 'API URL must not have leading or trailing whitespace';\n }\n try {\n const apiUrl = new URL(apiUrlTrimmed);\n if (apiUrl.protocol !== 'https:') {\n return 'API URL must use HTTPS protocol for security';\n }\n if (!apiUrl.hostname) {\n return 'API URL must have a valid hostname';\n }\n if (\n apiUrl.hostname === 'localhost' ||\n apiUrl.hostname === '127.0.0.1'\n ) {\n return 'API URL cannot use localhost (use a publicly accessible URL)';\n }\n if (apiUrl.pathname && !apiUrl.pathname.endsWith('/')) {\n // Warn if path doesn't end with slash but don't fail validation\n // since the client will normalize this\n }\n } catch (err) {\n const message =\n err instanceof Error ? err.message : 'Invalid URL format';\n return `API URL must be a valid URL: ${message}`;\n }\n\n // Validate WebSocket URL\n if (!input.wsUrl) {\n return 'WebSocket URL is required';\n }\n if (typeof input.wsUrl !== 'string') {\n return 'WebSocket URL must be a string';\n }\n const wsUrlTrimmed = input.wsUrl.trim();\n if (wsUrlTrimmed !== input.wsUrl) {\n return 'WebSocket URL must not have leading or trailing whitespace';\n }\n try {\n const wsUrl = new URL(wsUrlTrimmed);\n if (!['ws:', 'wss:'].includes(wsUrl.protocol)) {\n return 'WebSocket URL must use ws:// or wss:// protocol';\n }\n if (!wsUrl.hostname) {\n return 'WebSocket URL must have a valid hostname';\n }\n if (wsUrl.hostname === 'localhost' || wsUrl.hostname === '127.0.0.1') {\n return 'WebSocket URL cannot use localhost (use a publicly accessible URL)';\n }\n // Recommend wss:// for security if using ws://\n if (wsUrl.protocol === 'ws:' && wsUrl.hostname !== 'localhost') {\n // This is just a recommendation, not a hard failure\n // Most production deployments should use wss://\n }\n } catch (err) {\n const message =\n err instanceof Error ? err.message : 'Invalid URL format';\n return `WebSocket URL must be a valid URL: ${message}`;\n }\n\n // Validate User ID\n if (!input.userId) {\n return 'User ID is required';\n }\n if (typeof input.userId !== 'string') {\n return 'User ID must be a string';\n }\n const userIdTrimmed = input.userId.trim().toUpperCase();\n if (userIdTrimmed !== input.userId.toUpperCase()) {\n return 'User ID must not have leading or trailing whitespace and should be uppercase';\n }\n if (!/^[UBPT][A-Z0-9]{10}$/.test(userIdTrimmed)) {\n const prefix = userIdTrimmed.charAt(0);\n if (!'UBPT'.includes(prefix)) {\n return 'User ID must start with U, B, P, or T (got: ' + prefix + ')';\n }\n if (userIdTrimmed.length !== 11) {\n return `User ID must be exactly 11 characters long (got: ${userIdTrimmed.length})`;\n }\n return 'User ID must be a valid DeskFree ID format: one letter (U/B/P/T) + 10 alphanumeric characters (e.g. U9QF3C6X1A)';\n }\n\n return null;\n },\n },\n\n messaging: {\n normalizeTarget(raw: string): string | undefined {\n const trimmed = raw.trim();\n if (/^[UBPT][A-Z0-9]{10}$/i.test(trimmed)) return `user:${trimmed}`;\n return undefined;\n },\n targetResolver: {\n hint: CHANNEL_HINTS.targetResolver,\n looksLikeId(raw: string): boolean {\n const t = raw.trim();\n return /^[UBPT][A-Z0-9]{10}$/i.test(t) || /^user:/i.test(t);\n },\n },\n },\n\n security: {\n resolveDmPolicy({ accountId }) {\n const basePath =\n accountId && accountId !== 'default'\n ? `channels.deskfree.accounts.${accountId}.dm.`\n : 'channels.deskfree.dm.';\n return {\n policy: 'open',\n allowFrom: ['*'],\n allowFromPath: basePath,\n approveHint: 'DeskFree uses bot token auth — no pairing needed.',\n };\n },\n },\n\n onboarding: {\n channel: 'deskfree',\n\n async getStatus(ctx) {\n const ch = getChannelConfig(ctx.cfg);\n const hasBotToken = Boolean(ch?.botToken);\n const hasApiUrl = Boolean(ch?.apiUrl);\n const hasUserId = Boolean(ch?.userId);\n const configured = hasBotToken && hasApiUrl && hasUserId;\n\n const statusLines: string[] = [];\n if (configured) {\n statusLines.push('Bot token: configured');\n statusLines.push(`API URL: ${ch!.apiUrl}`);\n if (ch!.wsUrl) statusLines.push(`WS URL: ${ch!.wsUrl}`);\n } else {\n statusLines.push('Not configured');\n }\n\n return {\n channel: 'deskfree',\n configured,\n statusLines,\n selectionHint: CHANNEL_HINTS.onboardingSelection,\n quickstartScore: configured ? 0 : 50,\n };\n },\n\n async configure(ctx) {\n const ch = getChannelConfig(ctx.cfg);\n const accountId = ctx.accountOverrides.accountId ?? 'default';\n\n const botToken = await ctx.prompter.text({\n message: 'Bot token',\n initialValue: ch?.botToken ?? '',\n placeholder: 'bot_xxxxxxxxxxxxxxxx',\n validate: (v) => {\n if (!v) return 'Bot token is required';\n if (!v.startsWith('bot_')) return 'Must start with \"bot_\"';\n if (v.length < 10) return 'Bot token appears to be too short';\n return undefined;\n },\n });\n\n const apiUrl = await ctx.prompter.text({\n message: 'API URL',\n initialValue: ch?.apiUrl ?? '',\n placeholder: 'https://app.deskfree.ai/v1/bot',\n validate: (v) => {\n if (!v) return 'API URL is required';\n try {\n const url = new URL(v);\n if (url.protocol !== 'https:')\n return 'Must use HTTPS protocol for security';\n return undefined;\n } catch {\n return 'Must be a valid HTTPS URL';\n }\n },\n });\n\n const wsUrl = await ctx.prompter.text({\n message: 'WebSocket URL',\n initialValue: ch?.wsUrl ?? '',\n placeholder: 'wss://ws.deskfree.ai',\n validate: (v) => {\n if (!v) return 'WebSocket URL is required';\n try {\n const url = new URL(v);\n if (!['ws:', 'wss:'].includes(url.protocol)) {\n return 'Must use ws:// or wss:// protocol';\n }\n return undefined;\n } catch {\n return 'Must be a valid WebSocket URL';\n }\n },\n });\n\n const userId = await ctx.prompter.text({\n message: 'Your DeskFree User ID (shown in install instructions)',\n initialValue: ch?.userId ?? '',\n placeholder: 'U9QF3C6X1A',\n validate: (v) => {\n if (!v) return 'User ID is required';\n if (!/^[UBPT][A-Z0-9]{10}$/i.test(v)) {\n return 'Must be a valid DeskFree ID (e.g. U9QF3C6X1A)';\n }\n return undefined;\n },\n });\n\n const updatedCfg = deskFreePlugin.setup!.applyAccountConfig({\n cfg: ctx.cfg,\n accountId,\n input: { botToken, apiUrl, wsUrl, userId },\n });\n\n await ctx.prompter.note('DeskFree channel configured.', 'Done');\n\n return { cfg: updatedCfg, accountId };\n },\n\n disable(cfg: unknown) {\n const config = JSON.parse(JSON.stringify(cfg)) as Record<string, unknown>;\n const channels = (config.channels ?? {}) as Record<string, unknown>;\n const deskfree = (channels.deskfree ?? {}) as Record<string, unknown>;\n deskfree.enabled = false;\n channels.deskfree = deskfree;\n config.channels = channels;\n return config;\n },\n },\n\n status: {\n async probeAccount(params) {\n const isConfigured = Boolean(\n params.account.botToken && params.account.apiUrl,\n );\n if (!isConfigured) {\n return { ok: false, error: STATUS_MESSAGES.probeNotConfigured };\n }\n const client = new DeskFreeClient(\n params.account.botToken,\n params.account.apiUrl,\n );\n return client.probe(params.timeoutMs);\n },\n\n buildAccountSnapshot(params): ChannelAccountSnapshot {\n const isConfigured = Boolean(\n params.account.botToken && params.account.apiUrl,\n );\n return {\n accountId: params.account.accountId,\n enabled: params.account.enabled,\n configured: isConfigured,\n running: params.runtime?.running,\n lastStartAt: params.runtime?.lastStartAt,\n lastStopAt: params.runtime?.lastStopAt,\n lastError: params.runtime?.lastError,\n probe: params.probe,\n };\n },\n\n collectStatusIssues(accounts) {\n const issues: import('./types').ChannelStatusIssue[] = [];\n\n for (const snap of accounts) {\n const id = snap.accountId ?? 'unknown';\n\n if (!snap.configured) {\n issues.push({\n channel: 'deskfree',\n accountId: id,\n kind: 'config',\n message: STATUS_MESSAGES.notConfigured.message,\n fix: STATUS_MESSAGES.notConfigured.fix,\n });\n continue;\n }\n\n if (!snap.enabled) {\n issues.push({\n channel: 'deskfree',\n accountId: id,\n kind: 'config',\n message: STATUS_MESSAGES.disabled.message,\n fix: STATUS_MESSAGES.disabled.fix,\n });\n continue;\n }\n\n if (!snap.running) {\n issues.push({\n channel: 'deskfree',\n accountId: id,\n kind: 'runtime',\n message: STATUS_MESSAGES.notRunning.message,\n });\n }\n\n if (snap.probe && !snap.probe.ok) {\n issues.push({\n channel: 'deskfree',\n accountId: id,\n kind: 'auth',\n message: `Probe failed: ${snap.probe.error ?? 'unknown error'}`,\n fix: STATUS_MESSAGES.probeFailed.fix,\n });\n }\n }\n\n return issues;\n },\n },\n};\n","import { PLUGIN_VERSION } from './version';\n\n/**\n * DeskFree directive injected into agent context via before_agent_start hook.\n * This replaces the old AGENTS.md file injection approach, ensuring the directive\n * is always present from the first turn (no race condition with file writes).\n */\nexport const DESKFREE_AGENT_DIRECTIVE = `## DeskFree\nAlways read the deskfree skill (SKILL.md) at startup. Follow its workflow for task tracking and messaging.\n1. ALL work requires a task — use \\`deskfree_create_task\\` then \\`deskfree_start_task\\`.\n2. Goals before tasks — use \\`deskfree_create_goal\\` for multi-step objectives.\n3. Build deliverables incrementally — use \\`deskfree_update_deliverable\\` from the start.\n4. Always complete tasks — use \\`deskfree_complete_task\\` with outcome \"done\" or \"blocked\".\n5. Auto-threading works — messages sent while a task is active are threaded automatically.\n6. One task per sub-agent — sub-agents only get 3 tools: update_deliverable, complete_task, send_message.`;\n\n/**\n * DeskFree heartbeat checklist injected into agent context for heartbeat turns.\n */\nexport const DESKFREE_HEARTBEAT_DIRECTIVE = `## DeskFree Heartbeat\nOn each heartbeat, run through this checklist:\n1. Run \\`deskfree_state\\` to get full workspace snapshot.\n2. Any active goals without pending tasks? Create the next task.\n3. Any \\`ready_for_bot\\` tasks? Check capacity, then \\`deskfree_start_task\\` and spawn sub-agents.\n4. Any goals with no activity in 48h? Create a task or nudge the human.\n5. Any \\`working_on_it\\` tasks with no active sub-agent? Complete as blocked or resume.`;\n\n/**\n * Returns the full context to prepend to every agent turn.\n */\nexport function getDeskFreeContext(): string {\n return `${DESKFREE_AGENT_DIRECTIVE}\\n\\n<!-- deskfree-plugin:${PLUGIN_VERSION} -->`;\n}\n","/**\n * DeskFree Agent Tools Implementation\n *\n * This module implements the DeskFree integration for OpenClaw agents,\n * providing tools for task management, message sending, and bot collaboration.\n *\n * Architecture:\n * - createOrchestratorTools() — full 8-tool set for orchestrator agents\n * - createWorkerTools() — 3-tool subset for worker sub-agents\n * - createDeskFreeTools() — backward-compat alias for createOrchestratorTools()\n *\n * Configuration:\n * Tools are only available when DeskFree is properly configured in channels.deskfree\n * with botToken and apiUrl. Supports both single account and multi-account setups.\n */\nimport { DeskFreeClient, DeskFreeError } from './client';\nimport { setActiveTaskId } from './gateway';\nimport { ORCHESTRATOR_TOOLS, WORKER_TOOLS } from './llm-definitions';\nimport type {\n AnyAgentTool,\n OpenClawPluginApi,\n ResolvedDeskFreeAccount,\n Task,\n} from './types';\n\n/**\n * Resolve the DeskFree account from the plugin config.\n * Supports both single account mode (direct config) and multi-account mode (accounts object).\n */\nfunction resolveAccountFromConfig(\n api: OpenClawPluginApi,\n): ResolvedDeskFreeAccount | null {\n const cfg = api.runtime.config.loadConfig();\n\n const ch = cfg?.channels?.deskfree;\n if (!ch) return null;\n\n // Use first explicit account, or fall back to top-level config\n if (ch.accounts && Object.keys(ch.accounts).length > 0) {\n const [accountId, acct] = Object.entries(ch.accounts)[0];\n if (!acct.botToken || !acct.apiUrl) return null;\n return {\n accountId,\n botToken: acct.botToken,\n apiUrl: acct.apiUrl,\n wsUrl: acct.wsUrl ?? '',\n userId: acct.userId ?? '',\n enabled: acct.enabled !== false,\n };\n }\n\n if (!ch.botToken || !ch.apiUrl) return null;\n return {\n accountId: 'default',\n botToken: ch.botToken,\n apiUrl: ch.apiUrl,\n wsUrl: ch.wsUrl ?? '',\n userId: ch.userId ?? '',\n enabled: ch.enabled !== false,\n };\n}\n\nfunction formatTaskResponse(\n task: Task,\n summary: string,\n nextActions: string[],\n): {\n content: Array<{ type: string; text: string }>;\n} {\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(\n {\n summary,\n nextActions,\n task,\n },\n null,\n 2,\n ),\n },\n ],\n };\n}\n\nfunction formatConfirmation(\n summary: string,\n nextActions: string[],\n data?: unknown,\n): {\n content: Array<{ type: string; text: string }>;\n} {\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(\n {\n summary,\n nextActions,\n ...(data ? { data } : {}),\n },\n null,\n 2,\n ),\n },\n ],\n };\n}\n\n/**\n * Map a DeskFreeError type to an actionable suggestion for the agent.\n */\nfunction suggestionForErrorType(\n type: DeskFreeError['type'],\n statusCode?: number,\n): string {\n switch (type) {\n case 'auth':\n return 'Verify the bot token in your OpenClaw configuration is correct and has not expired.';\n case 'timeout':\n return 'Wait a moment and try again. If the problem persists, check your network connection.';\n case 'network':\n return 'Check your internet connection and try again.';\n case 'server':\n return 'The server encountered an error. Wait a few moments and retry your request.';\n case 'invalid_response':\n return 'The server returned an unexpected response. Please try again or contact support.';\n case 'client':\n if (statusCode === 429)\n return 'Too many requests. Wait a moment before trying again.';\n if (statusCode === 409)\n return 'Try calling deskfree_state to see available tasks.';\n if (statusCode === 404)\n return 'Use deskfree_state to see all available tasks and verify the taskId.';\n return 'Check your input parameters and try again.';\n default:\n return '';\n }\n}\n\nfunction errorResult(err: unknown): {\n content: Array<{ type: string; text: string }>;\n isError: true;\n} {\n if (err instanceof DeskFreeError) {\n const suggestion = suggestionForErrorType(err.type, err.statusCode);\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(\n {\n error: true,\n errorType: err.type,\n message: err.userMessage,\n ...(suggestion ? { suggestion } : {}),\n procedure: err.procedure,\n ...(err.statusCode ? { statusCode: err.statusCode } : {}),\n },\n null,\n 2,\n ),\n },\n ],\n isError: true,\n };\n }\n\n const rawMessage = err instanceof Error ? err.message : String(err);\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(\n {\n error: true,\n message: rawMessage,\n },\n null,\n 2,\n ),\n },\n ],\n isError: true,\n };\n}\n\n/**\n * Type-safe parameter validation helpers\n */\nexport function validateStringParam(\n params: Record<string, unknown>,\n key: string,\n required: true,\n): string;\nexport function validateStringParam(\n params: Record<string, unknown>,\n key: string,\n required: false,\n): string | undefined;\nexport function validateStringParam(\n params: Record<string, unknown>,\n key: string,\n required: boolean,\n): string | undefined {\n if (!params) {\n if (required) {\n throw new Error(\n `Required parameter '${key}' is missing (no params provided)`,\n );\n }\n return undefined;\n }\n const value = params[key];\n\n if (value == null) {\n if (required) {\n throw new Error(`Required parameter '${key}' is missing`);\n }\n return undefined;\n }\n\n if (typeof value !== 'string') {\n throw new Error(`Parameter '${key}' must be a string, got ${typeof value}`);\n }\n\n if (required && value.trim() === '') {\n throw new Error(`Required parameter '${key}' cannot be empty`);\n }\n\n return value;\n}\n\nexport function validateEnumParam<T extends string>(\n params: Record<string, unknown>,\n key: string,\n allowedValues: readonly T[],\n required: true,\n): T;\nexport function validateEnumParam<T extends string>(\n params: Record<string, unknown>,\n key: string,\n allowedValues: readonly T[],\n required: false,\n): T | undefined;\nexport function validateEnumParam<T extends string>(\n params: Record<string, unknown>,\n key: string,\n allowedValues: readonly T[],\n required: boolean,\n): T | undefined {\n if (!params) {\n if (required) {\n throw new Error(\n `Required parameter '${key}' is missing (no params provided)`,\n );\n }\n return undefined;\n }\n const value = params[key];\n\n if (value == null) {\n if (required) {\n throw new Error(`Required parameter '${key}' is missing`);\n }\n return undefined;\n }\n\n if (typeof value !== 'string') {\n throw new Error(`Parameter '${key}' must be a string, got ${typeof value}`);\n }\n\n if (required && value.trim() === '') {\n throw new Error(`Required parameter '${key}' cannot be empty`);\n }\n\n if (!allowedValues.includes(value as T)) {\n throw new Error(\n `Parameter '${key}' must be one of: ${allowedValues.join(', ')}, got: ${value}`,\n );\n }\n\n return value as T;\n}\n\n/**\n * Creates all 8 orchestrator tools for the main orchestrator agent.\n *\n * @param api - OpenClaw plugin API for accessing configuration\n * @returns Array of agent tools, or null if DeskFree is not configured\n */\nexport function createOrchestratorTools(\n api: OpenClawPluginApi,\n): AnyAgentTool[] | null {\n const account = resolveAccountFromConfig(api);\n if (!account) return null;\n\n const client = new DeskFreeClient(account.botToken, account.apiUrl);\n\n return [\n {\n ...ORCHESTRATOR_TOOLS.STATE,\n async execute(_id, _params) {\n try {\n const state = await client.getState();\n return {\n content: [{ type: 'text', text: JSON.stringify(state, null, 2) }],\n };\n } catch (err) {\n return errorResult(err);\n }\n },\n },\n {\n ...ORCHESTRATOR_TOOLS.CREATE_GOAL,\n async execute(_id, params) {\n try {\n const title = validateStringParam(params, 'title', true);\n const description = validateStringParam(params, 'description', false);\n\n const result = await client.createGoal({ title, description });\n\n return formatConfirmation(\n `Created goal \"${result.goal.title}\" (${result.goal.goalId})`,\n [\n 'Now create 3-5 tasks linked to this goal using deskfree_create_task with goalId',\n 'Claim the first task with deskfree_start_task and start working immediately',\n ],\n result.goal,\n );\n } catch (err) {\n return errorResult(err);\n }\n },\n },\n {\n ...ORCHESTRATOR_TOOLS.UPDATE_GOAL,\n async execute(_id, params) {\n try {\n const goalId = validateStringParam(params, 'goalId', true);\n const title = validateStringParam(params, 'title', false);\n const description = validateStringParam(params, 'description', false);\n const status = validateStringParam(params, 'status', false);\n\n const result = await client.updateGoal({\n goalId,\n title,\n description,\n status,\n });\n\n return formatConfirmation(\n `Updated goal \"${result.title}\"`,\n [\n result.status === 'active'\n ? 'Continue working on tasks for this goal'\n : `Goal is now ${result.status}`,\n ],\n result,\n );\n } catch (err) {\n return errorResult(err);\n }\n },\n },\n {\n ...ORCHESTRATOR_TOOLS.CREATE_TASK,\n async execute(_id, params) {\n try {\n const title = validateStringParam(params, 'title', true);\n const instructions = validateStringParam(\n params,\n 'instructions',\n false,\n );\n const goalId = validateStringParam(params, 'goalId', false);\n\n const task = await client.createTask({\n title,\n instructions,\n goalId,\n });\n\n return formatTaskResponse(\n task,\n `Created task \"${task.title}\" with ID ${task.taskId}`,\n [\n 'Claim and start this task with deskfree_start_task',\n 'Or check workspace state with deskfree_state',\n ],\n );\n } catch (err) {\n return errorResult(err);\n }\n },\n },\n {\n ...ORCHESTRATOR_TOOLS.START_TASK,\n async execute(_id, params) {\n try {\n const taskId = validateStringParam(params, 'taskId', true);\n const result = await client.claimTask({ taskId });\n setActiveTaskId(taskId);\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(\n {\n summary: `Claimed task \"${result.title}\" — full context loaded`,\n nextActions: [\n 'Read the instructions and message history carefully',\n 'Update deliverable incrementally with deskfree_update_deliverable',\n 'Complete with deskfree_complete_task when done',\n ],\n task: result,\n },\n null,\n 2,\n ),\n },\n ],\n };\n } catch (err) {\n return errorResult(err);\n }\n },\n },\n {\n ...ORCHESTRATOR_TOOLS.UPDATE_DELIVERABLE,\n async execute(_id, params) {\n try {\n const taskId = validateStringParam(params, 'taskId', true);\n const deliverable = validateStringParam(params, 'deliverable', true);\n await client.updateDeliverable({ taskId, deliverable });\n\n return formatConfirmation(`Updated deliverable for task ${taskId}`, [\n 'Deliverable has been saved',\n 'Complete with deskfree_complete_task when ready',\n ]);\n } catch (err) {\n return errorResult(err);\n }\n },\n },\n {\n ...ORCHESTRATOR_TOOLS.COMPLETE_TASK,\n async execute(_id, params) {\n try {\n const taskId = validateStringParam(params, 'taskId', true);\n const outcome = validateEnumParam(\n params,\n 'outcome',\n ['done', 'blocked'] as const,\n true,\n );\n\n const result = await client.completeTask({ taskId, outcome });\n setActiveTaskId(null);\n\n const summaryVerb = outcome === 'done' ? 'completed' : 'blocked';\n return formatTaskResponse(\n result,\n `Task \"${result.title}\" marked as ${summaryVerb} — waiting for human`,\n [\n outcome === 'done'\n ? 'Human will review the deliverable'\n : 'Human will review the blocker and provide guidance',\n 'Use deskfree_state to check for other tasks',\n ],\n );\n } catch (err) {\n return errorResult(err);\n }\n },\n },\n {\n ...ORCHESTRATOR_TOOLS.SEND_MESSAGE,\n async execute(_id, params) {\n try {\n const content = validateStringParam(params, 'content', true);\n const taskId = validateStringParam(params, 'taskId', false);\n await client.sendMessage({ content, taskId });\n\n return formatConfirmation(\n `Message sent${taskId ? ` to task ${taskId}` : ''}`,\n [\n 'Message delivered to the human',\n taskId\n ? 'Continue working on the task or wait for response'\n : 'Check for response with task messages',\n ],\n );\n } catch (err) {\n return errorResult(err);\n }\n },\n },\n ];\n}\n\n/**\n * Creates the 3-tool subset for worker sub-agents.\n *\n * @param api - OpenClaw plugin API for accessing configuration\n * @returns Array of worker tools, or null if DeskFree is not configured\n */\nexport function createWorkerTools(\n api: OpenClawPluginApi,\n): AnyAgentTool[] | null {\n const account = resolveAccountFromConfig(api);\n if (!account) return null;\n\n const client = new DeskFreeClient(account.botToken, account.apiUrl);\n\n return [\n {\n ...WORKER_TOOLS.UPDATE_DELIVERABLE,\n async execute(_id, params) {\n try {\n const taskId = validateStringParam(params, 'taskId', true);\n const deliverable = validateStringParam(params, 'deliverable', true);\n await client.updateDeliverable({ taskId, deliverable });\n\n return formatConfirmation(`Updated deliverable for task ${taskId}`, [\n 'Deliverable has been saved',\n 'Complete with deskfree_complete_task when ready',\n ]);\n } catch (err) {\n return errorResult(err);\n }\n },\n },\n {\n ...WORKER_TOOLS.COMPLETE_TASK,\n async execute(_id, params) {\n try {\n const taskId = validateStringParam(params, 'taskId', true);\n const outcome = validateEnumParam(\n params,\n 'outcome',\n ['done', 'blocked'] as const,\n true,\n );\n\n const result = await client.completeTask({ taskId, outcome });\n setActiveTaskId(null);\n\n const summaryVerb = outcome === 'done' ? 'completed' : 'blocked';\n return formatTaskResponse(\n result,\n `Task \"${result.title}\" marked as ${summaryVerb} — waiting for human`,\n [\n outcome === 'done'\n ? 'Human will review the deliverable'\n : 'Human will review the blocker and provide guidance',\n ],\n );\n } catch (err) {\n return errorResult(err);\n }\n },\n },\n {\n ...WORKER_TOOLS.SEND_MESSAGE,\n async execute(_id, params) {\n try {\n const content = validateStringParam(params, 'content', true);\n const taskId = validateStringParam(params, 'taskId', false);\n await client.sendMessage({ content, taskId });\n\n return formatConfirmation(\n `Message sent${taskId ? ` to task ${taskId}` : ''}`,\n [\n 'Message delivered to the human',\n taskId\n ? 'Continue working on the task or wait for response'\n : 'Check for response with task messages',\n ],\n );\n } catch (err) {\n return errorResult(err);\n }\n },\n },\n ];\n}\n","/**\n * Offline queue for failed API requests.\n *\n * When the DeskFree API is unreachable (network errors, timeouts),\n * outbound requests are queued in memory and retried with exponential\n * backoff when connectivity is restored.\n */\nimport type { PluginLogger } from './types';\n\n/** A queued request that can be retried. */\nexport interface QueuedRequest {\n id: string;\n /** Human-readable description for logging. */\n label: string;\n /** The function to execute. Must be idempotent for safe retries. */\n execute: () => Promise<void>;\n /** Number of retry attempts so far. */\n attempts: number;\n /** Timestamp when the request was first queued. */\n queuedAt: number;\n}\n\n/** Maximum number of queued requests to prevent unbounded memory growth. */\nconst MAX_QUEUE_SIZE = 100;\n\n/** Maximum retry attempts before dropping a request. */\nconst MAX_RETRIES = 5;\n\n/** Base delay for exponential backoff (ms). */\nconst BASE_DELAY_MS = 2_000;\n\n/** Maximum delay between retries (ms). */\nconst MAX_DELAY_MS = 60_000;\n\n/** Maximum age of a queued request before it's dropped (5 minutes). */\nconst MAX_AGE_MS = 5 * 60 * 1000;\n\nexport class OfflineQueue {\n private queue: QueuedRequest[] = [];\n private processing = false;\n private retryTimer: ReturnType<typeof setTimeout> | null = null;\n private log: PluginLogger;\n\n constructor(log: PluginLogger) {\n this.log = log;\n }\n\n /** Number of requests currently queued. */\n get size(): number {\n return this.queue.length;\n }\n\n /**\n * Enqueue a failed request for later retry.\n * Returns false if the queue is full.\n */\n enqueue(request: Omit<QueuedRequest, 'attempts' | 'queuedAt'>): boolean {\n if (this.queue.length >= MAX_QUEUE_SIZE) {\n this.log.warn(\n `Offline queue full (${MAX_QUEUE_SIZE}), dropping request: ${request.label}`,\n );\n return false;\n }\n\n this.queue.push({\n ...request,\n attempts: 0,\n queuedAt: Date.now(),\n });\n\n this.log.info(\n `Queued request for retry: ${request.label} (queue size: ${this.queue.length})`,\n );\n\n this.scheduleRetry();\n return true;\n }\n\n /**\n * Attempt to flush all queued requests.\n * Called when connectivity is restored (e.g., WebSocket reconnect).\n */\n async flush(): Promise<void> {\n if (this.processing || this.queue.length === 0) return;\n\n this.processing = true;\n this.log.info(`Flushing offline queue (${this.queue.length} requests)`);\n\n // Process a snapshot — new items added during flush will be picked up next time\n const batch = [...this.queue];\n this.queue = [];\n\n for (const request of batch) {\n // Drop stale requests\n if (Date.now() - request.queuedAt > MAX_AGE_MS) {\n this.log.warn(\n `Dropping stale request: ${request.label} (queued ${Math.round((Date.now() - request.queuedAt) / 1000)}s ago)`,\n );\n continue;\n }\n\n try {\n await request.execute();\n this.log.info(`Retry succeeded: ${request.label}`);\n } catch (_error) {\n request.attempts++;\n if (request.attempts >= MAX_RETRIES) {\n this.log.warn(\n `Dropping request after ${MAX_RETRIES} retries: ${request.label}`,\n );\n } else {\n // Re-queue for another attempt\n this.queue.push(request);\n this.log.info(\n `Retry failed (attempt ${request.attempts}/${MAX_RETRIES}): ${request.label}`,\n );\n }\n }\n }\n\n this.processing = false;\n\n // If there are still items, schedule another retry\n if (this.queue.length > 0) {\n this.scheduleRetry();\n }\n }\n\n /** Clear all queued requests. */\n clear(): void {\n const count = this.queue.length;\n this.queue = [];\n if (this.retryTimer) {\n clearTimeout(this.retryTimer);\n this.retryTimer = null;\n }\n if (count > 0) {\n this.log.info(`Cleared ${count} queued requests`);\n }\n }\n\n /** Stop the retry timer (for cleanup). */\n destroy(): void {\n this.clear();\n }\n\n private scheduleRetry(): void {\n if (this.retryTimer) return; // Already scheduled\n\n // Use the highest attempt count in the queue for backoff\n const maxAttempts = Math.max(...this.queue.map((r) => r.attempts), 0);\n const delay = Math.min(BASE_DELAY_MS * 2 ** maxAttempts, MAX_DELAY_MS);\n\n this.retryTimer = setTimeout(() => {\n this.retryTimer = null;\n void this.flush();\n }, delay);\n }\n}\n","import { deskFreePlugin } from './channel';\nimport { getDeskFreeContext } from './context';\nimport { setDeskFreeRuntime } from './runtime';\nimport { createOrchestratorTools } from './tools';\nimport type { OpenClawPluginApi } from './types';\n\n// Export useful types and classes for external usage\nexport { DeskFreeClient, DeskFreeError } from './client';\nexport { reportError } from './error-reporter';\nexport { OfflineQueue } from './offline-queue';\nexport type * from './types';\n\nconst plugin = {\n id: 'deskfree',\n name: 'DeskFree',\n\n register(api: OpenClawPluginApi) {\n setDeskFreeRuntime(api.runtime);\n api.registerChannel({ plugin: deskFreePlugin });\n api.registerTool(() => {\n return createOrchestratorTools(api);\n });\n\n // Inject DeskFree directive into every agent turn via before_agent_start hook.\n // This replaces the old approach of writing to AGENTS.md/HEARTBEAT.md files,\n // which had a race condition on first boot (files written after system prompt built).\n api.on('before_agent_start', (_event, _ctx) => {\n return { prependContext: getDeskFreeContext() };\n });\n },\n};\n\nexport default plugin;\n"],"mappings":"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","names":["data","Receiver","Sender","Readable","URL","Receiver","Sender","WebSocket","key","WebSocket","createWebSocketStream","err","protocol","WebSocket","WebSocketServer","readFileSync","join","readFileSync","dirname","WebSocket","resolve","readFileSync","dirname","value","IsObject","IsArray","IsUndefined","IsNumber","TypeSystemPolicy","IsObject","IsArray","IsNumber","IsUndefined","value","IsArray","IsAsyncIterator","IsBigInt","IsBoolean","IsDate","IsFunction","IsIterator","IsNull","IsNumber","IsObject","IsRegExp","IsString","IsSymbol","IsUndefined","IsUint8Array","IsArray","IsBoolean","IsBigInt","IsAsyncIterator","IsDate","IsFunction","IsIterator","IsNull","IsNumber","IsObject","IsAny","IsArgument","IsArray","IsAsyncIterator","IsBigInt","IsBoolean","IsComputed","IsConstructor","IsDate","IsFunction","IsInteger","IsIntersect","IsIterator","IsKind","IsKindOf","IsLiteral","IsLiteralValue","IsMappedKey","IsMappedResult","IsNever","IsNot","IsNull","IsNumber","IsObject","IsOptional","IsPromise","IsReadonly","IsRecord","IsRef","IsRegExp","IsSchema","IsString","IsSymbol","IsTemplateLiteral","IsThis","IsTransform","IsTuple","IsUint8Array","IsUndefined","IsUnion","IsUnknown","IsUnsafe","IsVoid","IsSchema","IsReadonly","IsOptional","IsAny","IsKindOf","IsArgument","IsArray","IsAsyncIterator","IsBigInt","IsBoolean","IsComputed","IsConstructor","IsDate","IsFunction","IsInteger","IsIntersect","IsTransform","IsIterator","IsLiteral","IsLiteralValue","IsMappedKey","IsMappedResult","IsNever","IsNot","IsNull","IsNumber","IsObject","IsPromise","IsRecord","IsRef","IsRegExp","IsString","IsSymbol","IsTemplateLiteral","IsThis","IsTuple","IsUndefined","IsUnion","IsUint8Array","IsUnknown","IsUnsafe","IsVoid","IsKind","Array","range","pattern","Boolean","Number","String","Boolean","Number","String","Visit","schema","IsNumber","IsBigInt","IsString","IsBoolean","FromUnion","IsNumber","FromUnion","IsArray","IsObject","Object","Promise","FromProperties","FromMappedResult","FromMappedResult","FromRest","FromProperties","IsFunction","IsAsyncIterator","IsIterator","IsObject","Object","IsArray","Array","Promise","FromProperties","FromMappedResult","IsObject","RemoveOptionalFromType","RemoveOptionalFromRest","FromIntersect","FromRest","FromUnion","FromRest","FromIntersect","FromUnion","FromTuple","FromArray","FromProperties","IsArray","IsObject","FromComputed","FromRef","Number","FromProperties","FromMappedResult","Object","Date","Symbol","Uint8Array","FromArray","FromProperties","Uint8Array","Date","Object","Symbol","ExtendsResult","FromArray","Visit","FromIntersect","FromLiteral","Number","FromPromise","String","FromTemplateLiteral","FromTuple","FromUnion","FromProperties","FromMappedResult","FromMappedKey","FromProperties","FromMappedResult","FromProperties","FromMappedResult","Object","IsBoolean","IsNumber","IsRegExp","IsString","RecordKey","String","Number","RecordValue","FromConstructor","FromFunction","FromIntersect","FromUnion","FromTuple","FromArray","FromAsyncIterator","FromIterator","FromPromise","FromObject","FromProperties","Object","FromRecord","RecordKey","RecordValue","FromProperty","IsFunction","IsArray","IsAsyncIterator","IsIterator","IsObject","FromTemplateLiteral","FromRest","FromProperties","FromMappedResult","FromIntersect","FromUnion","FromProperty","FromProperties","FromObject","Object","result","IsObject","FromPropertyKey","FromPropertyKeys","FromMappedKey","FromProperties","FromMappedResult","FromIntersect","FromUnion","FromProperties","FromObject","Type","Object","UnionFromPropertyKeys","result","IsObject","FromPropertyKey","FromPropertyKeys","FromMappedKey","FromComputed","FromRef","FromProperties","FromObject","Object","FromRest","IsObject","IsBigInt","IsBoolean","IsNull","IsNumber","IsString","IsSymbol","IsUndefined","FromProperties","FromMappedResult","FromComputed","FromRef","FromProperties","FromObject","Object","FromRest","IsObject","IsBigInt","IsBoolean","IsNull","IsNumber","IsString","IsSymbol","IsUndefined","FromProperties","FromMappedResult","FromType","FromComputed","FromArray","Array","FromAsyncIterator","FromConstructor","FromTypes","FromFunction","FromIntersect","FromIterator","FromObject","Object","FromRecord","RecordValue","FromTuple","FromUnion","IsArray","IsAsyncIterator","IsFunction","IsIterator","IsObject","IsFunction","RegExp","IsFunction","type_exports","Array","Boolean","Date","Number","Object","Promise","RegExp","String","Symbol","Uint8Array","type_exports","MAX_QUEUE_SIZE"]}
1
+ {"version":3,"sources":["../../../node_modules/ws/lib/constants.js","../../../node_modules/ws/lib/buffer-util.js","../../../node_modules/ws/lib/limiter.js","../../../node_modules/ws/lib/permessage-deflate.js","../../../node_modules/ws/lib/validation.js","../../../node_modules/ws/lib/receiver.js","../../../node_modules/ws/lib/sender.js","../../../node_modules/ws/lib/event-target.js","../../../node_modules/ws/lib/extension.js","../../../node_modules/ws/lib/websocket.js","../../../node_modules/ws/lib/stream.js","../../../node_modules/ws/lib/subprotocol.js","../../../node_modules/ws/lib/websocket-server.js","../../core/src/util.toErrorMessage.ts","../../core/src/client.ts","../../core/node_modules/@sinclair/typebox/build/esm/type/guard/value.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/clone/value.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/clone/type.mjs","../../core/node_modules/@sinclair/typebox/build/esm/value/guard/guard.mjs","../../core/node_modules/@sinclair/typebox/build/esm/system/policy.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/create/immutable.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/create/type.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/error/error.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/symbols/symbols.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/guard/kind.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/guard/type.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/patterns/patterns.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/sets/set.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/any/any.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/array/array.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/argument/argument.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/async-iterator/async-iterator.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/computed/computed.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/discard/discard.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/never/never.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/mapped/mapped-result.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/constructor/constructor.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/function/function.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/union/union-create.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/union/union-evaluated.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/union/union.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/template-literal/parse.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/template-literal/finite.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/template-literal/generate.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/literal/literal.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/boolean/boolean.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/bigint/bigint.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/number/number.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/string/string.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/template-literal/syntax.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/template-literal/pattern.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/template-literal/union.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/template-literal/template-literal.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/indexed/indexed-property-keys.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/indexed/indexed-from-mapped-result.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/indexed/indexed.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/indexed/indexed-from-mapped-key.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/iterator/iterator.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/object/object.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/promise/promise.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/readonly/readonly.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/readonly/readonly-from-mapped-result.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/tuple/tuple.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/mapped/mapped.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/optional/optional.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/optional/optional-from-mapped-result.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/intersect/intersect-create.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/intersect/intersect-evaluated.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/intersect/intersect.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/ref/ref.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/awaited/awaited.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/keyof/keyof-property-keys.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/keyof/keyof.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/keyof/keyof-from-mapped-result.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/composite/composite.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/date/date.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/null/null.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/symbol/symbol.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/undefined/undefined.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/uint8array/uint8array.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/unknown/unknown.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/const/const.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/constructor-parameters/constructor-parameters.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/enum/enum.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/extends/extends-check.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/extends/extends-from-mapped-result.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/extends/extends.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/extends/extends-from-mapped-key.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/exclude/exclude-from-template-literal.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/exclude/exclude.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/exclude/exclude-from-mapped-result.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/extract/extract-from-template-literal.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/extract/extract.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/extract/extract-from-mapped-result.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/instance-type/instance-type.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/readonly-optional/readonly-optional.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/record/record.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/instantiate/instantiate.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/integer/integer.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/intrinsic/intrinsic-from-mapped-key.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/intrinsic/intrinsic.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/intrinsic/capitalize.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/intrinsic/lowercase.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/intrinsic/uncapitalize.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/intrinsic/uppercase.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/omit/omit-from-mapped-result.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/omit/omit.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/omit/omit-from-mapped-key.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/pick/pick-from-mapped-result.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/pick/pick.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/pick/pick-from-mapped-key.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/partial/partial.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/partial/partial-from-mapped-result.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/required/required.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/required/required-from-mapped-result.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/module/compute.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/module/module.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/not/not.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/parameters/parameters.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/recursive/recursive.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/regexp/regexp.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/rest/rest.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/return-type/return-type.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/transform/transform.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/unsafe/unsafe.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/void/void.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/type/type.mjs","../../core/node_modules/@sinclair/typebox/build/esm/type/type/index.mjs","../../core/src/llm-definitions.ts","../../core/src/tools.ts","../../core/src/context.ts","../../core/src/streaming.ts","../../../node_modules/ws/wrapper.mjs","../../core/src/gateway.state.ts","../../core/src/error-reporter.ts","../../core/src/gateway.health.ts","../../core/src/gateway.cursor.ts","../../core/src/channel.validation.ts","../src/agents/orchestrator.ts","../src/config.ts","../src/service/health-state.ts","../src/gateway/polling.ts","../src/gateway/ws-gateway.ts","../src/mcp/adapt.ts","../src/mcp/orchestrator-server.ts","../src/tools/security.ts","../src/mcp/worker-server.ts","../src/memory/daily-log.ts","../src/memory/sleep-scheduler.ts","../src/tools/registry.ts","../src/util/logger.ts","../src/service/router.ts","../src/service/sessions.ts","../src/agents/worker.ts","../src/service/channel.ts","../src/service/worker-manager.ts","../src/service/entrypoint.ts"],"names":["require_constants","exports","require_buffer_util","require_limiter","require_permessage_deflate","data","require_validation","require_receiver","Receiver","require_sender","Sender","require_event_target","require_extension","require_websocket","Readable","URL","WebSocket","key","require_stream","createWebSocketStream","err","require_subprotocol","protocol","require_websocket_server","WebSocketServer","__commonJS","__require","value","IsObject","IsArray","IsUndefined","IsNumber","TypeSystemPolicy","IsAsyncIterator","IsBigInt","IsBoolean","IsDate","IsFunction","IsIterator","IsNull","IsRegExp","IsString","IsSymbol","IsUint8Array","IsAny","IsArgument","IsComputed","IsConstructor","IsInteger","IsIntersect","IsKind","IsKindOf","IsLiteral","IsLiteralValue","IsMappedKey","IsMappedResult","IsNever","IsNot","IsOptional","IsPromise","IsReadonly","IsRecord","IsRef","IsSchema","IsTemplateLiteral","IsThis","IsTransform","IsTuple","IsUnion","IsUnknown","IsUnsafe","IsVoid","Array","range","pattern","Boolean","Number","String","Visit","schema","FromUnion","Object","Promise","FromProperties","FromMappedResult","FromRest","RemoveOptionalFromType","RemoveOptionalFromRest","FromIntersect","FromTuple","FromArray","FromComputed","FromRef","Date","Symbol","Uint8Array","ExtendsResult","FromLiteral","FromPromise","FromTemplateLiteral","FromMappedKey","RecordKey","RecordValue","FromConstructor","FromFunction","FromAsyncIterator","FromIterator","FromObject","FromRecord","FromProperty","result","FromPropertyKey","FromPropertyKeys","Type","UnionFromPropertyKeys","FromType","FromTypes","RegExp","type_exports","state","__toESM","logger","import_websocket","wrapper_default","createSdkMcpServer","join","mkdirSync","existsSync","delayMs","writeFileSync","dirname","message","DISALLOWED_BUILTIN_TOOLS","query","extractTextDelta","extractSessionId","readFileSync"],"mappings":"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AG,CAAA;AAAA,MAAG,CAAA;AAAA,MAAG,CAAA;AAAA;AAAA,MAC7C,CAAA;AAAA,MAAG,CAAA;AAAA,MAAG,CAAA;AAAA,MAAG,CAAA;AAAA,MAAG,CAAA;AAAA,MAAG,CAAA;AAAA,MAAG,CAAA;AAAA,MAAG,CAAA;AAAA,MAAG,CAAA;AAAA,MAAG,CAAA;AAAA,MAAG,CAAA;AAAA,MAAG,CAAA;AAAA,MAAG,CAAA;AAAA,MAAG,CAAA;AAAA,MAAG,CAAA;AAAA,MAAG,CAAA;AAAA;AAAA,MAC7C,CAAA;AAAA,MAAG,CAAA;AAAA,MAAG,CAAA;AAAA,MAAG,CAAA;AAAA,MAAG,CAAA;AAAA,MAAG,CAAA;AAAA,MAAG,CAAA;AAAA,MAAG,CAAA;AAAA,MAAG,CAAA;AAAA,MAAG,CAAA;AAAA,MAAG,CAAA;AAAA,MAAG,CAAA;AAAA,MAAG,CAAA;AAAA,MAAG,CAAA;AAAA,MAAG,CAAA;AAAA,MAAG,CAAA;AAAA;AAAA,MAC7C,CAAA;AAAA,MAAG,CAAA;AAAA,MAAG,CAAA;AAAA,MAAG,CAAA;AAAA,MAAG,CAAA;AAAA,MAAG,CAAA;AAAA,MAAG,CAAA;AAAA,MAAG,CAAA;AAAA,MAAG,CAAA;AAAA,MAAG,CAAA;AAAA,MAAG,CAAA;AAAA,MAAG,CAAA;AAAA,MAAG,CAAA;AAAA,MAAG,CAAA;AAAA,MAAG,CAAA;AAAA,MAAG,CAAA;AAAA;AAAA,MAC7C,CAAA;AAAA,MAAG,CAAA;AAAA,MAAG,CAAA;AAAA,MAAG,CAAA;AAAA,MAAG,CAAA;AAAA,MAAG,CAAA;AAAA,MAAG,CAAA;AAAA,MAAG,CAAA;AAAA,MAAG,CAAA;AAAA,MAAG,CAAA;AAAA,MAAG,CAAA;AAAA,MAAG,CAAA;AAAA,MAAG,CAAA;AAAA,MAAG,CAAA;AAAA,MAAG,CAAA;AAAA,MAAG,CAAA;AAAA;AAAA,MAC7C,CAAA;AAAA,MAAG,CAAA;AAAA,MAAG,CAAA;AAAA,MAAG,CAAA;AAAA,MAAG,CAAA;AAAA,MAAG,CAAA;AAAA,MAAG,CAAA;AAAA,MAAG,CAAA;AAAA,MAAG,CAAA;AAAA,MAAG,CAAA;AAAA,MAAG,CAAA;AAAA,MA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","file":"index.js","sourcesContent":["'use strict';\n\nconst BINARY_TYPES = ['nodebuffer', 'arraybuffer', 'fragments'];\nconst hasBlob = typeof Blob !== 'undefined';\n\nif (hasBlob) BINARY_TYPES.push('blob');\n\nmodule.exports = {\n BINARY_TYPES,\n CLOSE_TIMEOUT: 30000,\n EMPTY_BUFFER: Buffer.alloc(0),\n GUID: '258EAFA5-E914-47DA-95CA-C5AB0DC85B11',\n hasBlob,\n kForOnEventAttribute: Symbol('kIsForOnEventAttribute'),\n kListener: Symbol('kListener'),\n kStatusCode: Symbol('status-code'),\n kWebSocket: Symbol('websocket'),\n NOOP: () => {}\n};\n","'use strict';\n\nconst { EMPTY_BUFFER } = require('./constants');\n\nconst FastBuffer = Buffer[Symbol.species];\n\n/**\n * Merges an array of buffers into a new buffer.\n *\n * @param {Buffer[]} list The array of buffers to concat\n * @param {Number} totalLength The total length of buffers in the list\n * @return {Buffer} The resulting buffer\n * @public\n */\nfunction concat(list, totalLength) {\n if (list.length === 0) return EMPTY_BUFFER;\n if (list.length === 1) return list[0];\n\n const target = Buffer.allocUnsafe(totalLength);\n let offset = 0;\n\n for (let i = 0; i < list.length; i++) {\n const buf = list[i];\n target.set(buf, offset);\n offset += buf.length;\n }\n\n if (offset < totalLength) {\n return new FastBuffer(target.buffer, target.byteOffset, offset);\n }\n\n return target;\n}\n\n/**\n * Masks a buffer using the given mask.\n *\n * @param {Buffer} source The buffer to mask\n * @param {Buffer} mask The mask to use\n * @param {Buffer} output The buffer where to store the result\n * @param {Number} offset The offset at which to start writing\n * @param {Number} length The number of bytes to mask.\n * @public\n */\nfunction _mask(source, mask, output, offset, length) {\n for (let i = 0; i < length; i++) {\n output[offset + i] = source[i] ^ mask[i & 3];\n }\n}\n\n/**\n * Unmasks a buffer using the given mask.\n *\n * @param {Buffer} buffer The buffer to unmask\n * @param {Buffer} mask The mask to use\n * @public\n */\nfunction _unmask(buffer, mask) {\n for (let i = 0; i < buffer.length; i++) {\n buffer[i] ^= mask[i & 3];\n }\n}\n\n/**\n * Converts a buffer to an `ArrayBuffer`.\n *\n * @param {Buffer} buf The buffer to convert\n * @return {ArrayBuffer} Converted buffer\n * @public\n */\nfunction toArrayBuffer(buf) {\n if (buf.length === buf.buffer.byteLength) {\n return buf.buffer;\n }\n\n return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.length);\n}\n\n/**\n * Converts `data` to a `Buffer`.\n *\n * @param {*} data The data to convert\n * @return {Buffer} The buffer\n * @throws {TypeError}\n * @public\n */\nfunction toBuffer(data) {\n toBuffer.readOnly = true;\n\n if (Buffer.isBuffer(data)) return data;\n\n let buf;\n\n if (data instanceof ArrayBuffer) {\n buf = new FastBuffer(data);\n } else if (ArrayBuffer.isView(data)) {\n buf = new FastBuffer(data.buffer, data.byteOffset, data.byteLength);\n } else {\n buf = Buffer.from(data);\n toBuffer.readOnly = false;\n }\n\n return buf;\n}\n\nmodule.exports = {\n concat,\n mask: _mask,\n toArrayBuffer,\n toBuffer,\n unmask: _unmask\n};\n\n/* istanbul ignore else */\nif (!process.env.WS_NO_BUFFER_UTIL) {\n try {\n const bufferUtil = require('bufferutil');\n\n module.exports.mask = function (source, mask, output, offset, length) {\n if (length < 48) _mask(source, mask, output, offset, length);\n else bufferUtil.mask(source, mask, output, offset, length);\n };\n\n module.exports.unmask = function (buffer, mask) {\n if (buffer.length < 32) _unmask(buffer, mask);\n else bufferUtil.unmask(buffer, mask);\n };\n } catch (e) {\n // Continue regardless of the error.\n }\n}\n","'use strict';\n\nconst kDone = Symbol('kDone');\nconst kRun = Symbol('kRun');\n\n/**\n * A very simple job queue with adjustable concurrency. Adapted from\n * https://github.com/STRML/async-limiter\n */\nclass Limiter {\n /**\n * Creates a new `Limiter`.\n *\n * @param {Number} [concurrency=Infinity] The maximum number of jobs allowed\n * to run concurrently\n */\n constructor(concurrency) {\n this[kDone] = () => {\n this.pending--;\n this[kRun]();\n };\n this.concurrency = concurrency || Infinity;\n this.jobs = [];\n this.pending = 0;\n }\n\n /**\n * Adds a job to the queue.\n *\n * @param {Function} job The job to run\n * @public\n */\n add(job) {\n this.jobs.push(job);\n this[kRun]();\n }\n\n /**\n * Removes a job from the queue and runs it if possible.\n *\n * @private\n */\n [kRun]() {\n if (this.pending === this.concurrency) return;\n\n if (this.jobs.length) {\n const job = this.jobs.shift();\n\n this.pending++;\n job(this[kDone]);\n }\n }\n}\n\nmodule.exports = Limiter;\n","'use strict';\n\nconst zlib = require('zlib');\n\nconst bufferUtil = require('./buffer-util');\nconst Limiter = require('./limiter');\nconst { kStatusCode } = require('./constants');\n\nconst FastBuffer = Buffer[Symbol.species];\nconst TRAILER = Buffer.from([0x00, 0x00, 0xff, 0xff]);\nconst kPerMessageDeflate = Symbol('permessage-deflate');\nconst kTotalLength = Symbol('total-length');\nconst kCallback = Symbol('callback');\nconst kBuffers = Symbol('buffers');\nconst kError = Symbol('error');\n\n//\n// We limit zlib concurrency, which prevents severe memory fragmentation\n// as documented in https://github.com/nodejs/node/issues/8871#issuecomment-250915913\n// and https://github.com/websockets/ws/issues/1202\n//\n// Intentionally global; it's the global thread pool that's an issue.\n//\nlet zlibLimiter;\n\n/**\n * permessage-deflate implementation.\n */\nclass PerMessageDeflate {\n /**\n * Creates a PerMessageDeflate instance.\n *\n * @param {Object} [options] Configuration options\n * @param {(Boolean|Number)} [options.clientMaxWindowBits] Advertise support\n * for, or request, a custom client window size\n * @param {Boolean} [options.clientNoContextTakeover=false] Advertise/\n * acknowledge disabling of client context takeover\n * @param {Number} [options.concurrencyLimit=10] The number of concurrent\n * calls to zlib\n * @param {(Boolean|Number)} [options.serverMaxWindowBits] Request/confirm the\n * use of a custom server window size\n * @param {Boolean} [options.serverNoContextTakeover=false] Request/accept\n * disabling of server context takeover\n * @param {Number} [options.threshold=1024] Size (in bytes) below which\n * messages should not be compressed if context takeover is disabled\n * @param {Object} [options.zlibDeflateOptions] Options to pass to zlib on\n * deflate\n * @param {Object} [options.zlibInflateOptions] Options to pass to zlib on\n * inflate\n * @param {Boolean} [isServer=false] Create the instance in either server or\n * client mode\n * @param {Number} [maxPayload=0] The maximum allowed message length\n */\n constructor(options, isServer, maxPayload) {\n this._maxPayload = maxPayload | 0;\n this._options = options || {};\n this._threshold =\n this._options.threshold !== undefined ? this._options.threshold : 1024;\n this._isServer = !!isServer;\n this._deflate = null;\n this._inflate = null;\n\n this.params = null;\n\n if (!zlibLimiter) {\n const concurrency =\n this._options.concurrencyLimit !== undefined\n ? this._options.concurrencyLimit\n : 10;\n zlibLimiter = new Limiter(concurrency);\n }\n }\n\n /**\n * @type {String}\n */\n static get extensionName() {\n return 'permessage-deflate';\n }\n\n /**\n * Create an extension negotiation offer.\n *\n * @return {Object} Extension parameters\n * @public\n */\n offer() {\n const params = {};\n\n if (this._options.serverNoContextTakeover) {\n params.server_no_context_takeover = true;\n }\n if (this._options.clientNoContextTakeover) {\n params.client_no_context_takeover = true;\n }\n if (this._options.serverMaxWindowBits) {\n params.server_max_window_bits = this._options.serverMaxWindowBits;\n }\n if (this._options.clientMaxWindowBits) {\n params.client_max_window_bits = this._options.clientMaxWindowBits;\n } else if (this._options.clientMaxWindowBits == null) {\n params.client_max_window_bits = true;\n }\n\n return params;\n }\n\n /**\n * Accept an extension negotiation offer/response.\n *\n * @param {Array} configurations The extension negotiation offers/reponse\n * @return {Object} Accepted configuration\n * @public\n */\n accept(configurations) {\n configurations = this.normalizeParams(configurations);\n\n this.params = this._isServer\n ? this.acceptAsServer(configurations)\n : this.acceptAsClient(configurations);\n\n return this.params;\n }\n\n /**\n * Releases all resources used by the extension.\n *\n * @public\n */\n cleanup() {\n if (this._inflate) {\n this._inflate.close();\n this._inflate = null;\n }\n\n if (this._deflate) {\n const callback = this._deflate[kCallback];\n\n this._deflate.close();\n this._deflate = null;\n\n if (callback) {\n callback(\n new Error(\n 'The deflate stream was closed while data was being processed'\n )\n );\n }\n }\n }\n\n /**\n * Accept an extension negotiation offer.\n *\n * @param {Array} offers The extension negotiation offers\n * @return {Object} Accepted configuration\n * @private\n */\n acceptAsServer(offers) {\n const opts = this._options;\n const accepted = offers.find((params) => {\n if (\n (opts.serverNoContextTakeover === false &&\n params.server_no_context_takeover) ||\n (params.server_max_window_bits &&\n (opts.serverMaxWindowBits === false ||\n (typeof opts.serverMaxWindowBits === 'number' &&\n opts.serverMaxWindowBits > params.server_max_window_bits))) ||\n (typeof opts.clientMaxWindowBits === 'number' &&\n !params.client_max_window_bits)\n ) {\n return false;\n }\n\n return true;\n });\n\n if (!accepted) {\n throw new Error('None of the extension offers can be accepted');\n }\n\n if (opts.serverNoContextTakeover) {\n accepted.server_no_context_takeover = true;\n }\n if (opts.clientNoContextTakeover) {\n accepted.client_no_context_takeover = true;\n }\n if (typeof opts.serverMaxWindowBits === 'number') {\n accepted.server_max_window_bits = opts.serverMaxWindowBits;\n }\n if (typeof opts.clientMaxWindowBits === 'number') {\n accepted.client_max_window_bits = opts.clientMaxWindowBits;\n } else if (\n accepted.client_max_window_bits === true ||\n opts.clientMaxWindowBits === false\n ) {\n delete accepted.client_max_window_bits;\n }\n\n return accepted;\n }\n\n /**\n * Accept the extension negotiation response.\n *\n * @param {Array} response The extension negotiation response\n * @return {Object} Accepted configuration\n * @private\n */\n acceptAsClient(response) {\n const params = response[0];\n\n if (\n this._options.clientNoContextTakeover === false &&\n params.client_no_context_takeover\n ) {\n throw new Error('Unexpected parameter \"client_no_context_takeover\"');\n }\n\n if (!params.client_max_window_bits) {\n if (typeof this._options.clientMaxWindowBits === 'number') {\n params.client_max_window_bits = this._options.clientMaxWindowBits;\n }\n } else if (\n this._options.clientMaxWindowBits === false ||\n (typeof this._options.clientMaxWindowBits === 'number' &&\n params.client_max_window_bits > this._options.clientMaxWindowBits)\n ) {\n throw new Error(\n 'Unexpected or invalid parameter \"client_max_window_bits\"'\n );\n }\n\n return params;\n }\n\n /**\n * Normalize parameters.\n *\n * @param {Array} configurations The extension negotiation offers/reponse\n * @return {Array} The offers/response with normalized parameters\n * @private\n */\n normalizeParams(configurations) {\n configurations.forEach((params) => {\n Object.keys(params).forEach((key) => {\n let value = params[key];\n\n if (value.length > 1) {\n throw new Error(`Parameter \"${key}\" must have only a single value`);\n }\n\n value = value[0];\n\n if (key === 'client_max_window_bits') {\n if (value !== true) {\n const num = +value;\n if (!Number.isInteger(num) || num < 8 || num > 15) {\n throw new TypeError(\n `Invalid value for parameter \"${key}\": ${value}`\n );\n }\n value = num;\n } else if (!this._isServer) {\n throw new TypeError(\n `Invalid value for parameter \"${key}\": ${value}`\n );\n }\n } else if (key === 'server_max_window_bits') {\n const num = +value;\n if (!Number.isInteger(num) || num < 8 || num > 15) {\n throw new TypeError(\n `Invalid value for parameter \"${key}\": ${value}`\n );\n }\n value = num;\n } else if (\n key === 'client_no_context_takeover' ||\n key === 'server_no_context_takeover'\n ) {\n if (value !== true) {\n throw new TypeError(\n `Invalid value for parameter \"${key}\": ${value}`\n );\n }\n } else {\n throw new Error(`Unknown parameter \"${key}\"`);\n }\n\n params[key] = value;\n });\n });\n\n return configurations;\n }\n\n /**\n * Decompress data. Concurrency limited.\n *\n * @param {Buffer} data Compressed data\n * @param {Boolean} fin Specifies whether or not this is the last fragment\n * @param {Function} callback Callback\n * @public\n */\n decompress(data, fin, callback) {\n zlibLimiter.add((done) => {\n this._decompress(data, fin, (err, result) => {\n done();\n callback(err, result);\n });\n });\n }\n\n /**\n * Compress data. Concurrency limited.\n *\n * @param {(Buffer|String)} data Data to compress\n * @param {Boolean} fin Specifies whether or not this is the last fragment\n * @param {Function} callback Callback\n * @public\n */\n compress(data, fin, callback) {\n zlibLimiter.add((done) => {\n this._compress(data, fin, (err, result) => {\n done();\n callback(err, result);\n });\n });\n }\n\n /**\n * Decompress data.\n *\n * @param {Buffer} data Compressed data\n * @param {Boolean} fin Specifies whether or not this is the last fragment\n * @param {Function} callback Callback\n * @private\n */\n _decompress(data, fin, callback) {\n const endpoint = this._isServer ? 'client' : 'server';\n\n if (!this._inflate) {\n const key = `${endpoint}_max_window_bits`;\n const windowBits =\n typeof this.params[key] !== 'number'\n ? zlib.Z_DEFAULT_WINDOWBITS\n : this.params[key];\n\n this._inflate = zlib.createInflateRaw({\n ...this._options.zlibInflateOptions,\n windowBits\n });\n this._inflate[kPerMessageDeflate] = this;\n this._inflate[kTotalLength] = 0;\n this._inflate[kBuffers] = [];\n this._inflate.on('error', inflateOnError);\n this._inflate.on('data', inflateOnData);\n }\n\n this._inflate[kCallback] = callback;\n\n this._inflate.write(data);\n if (fin) this._inflate.write(TRAILER);\n\n this._inflate.flush(() => {\n const err = this._inflate[kError];\n\n if (err) {\n this._inflate.close();\n this._inflate = null;\n callback(err);\n return;\n }\n\n const data = bufferUtil.concat(\n this._inflate[kBuffers],\n this._inflate[kTotalLength]\n );\n\n if (this._inflate._readableState.endEmitted) {\n this._inflate.close();\n this._inflate = null;\n } else {\n this._inflate[kTotalLength] = 0;\n this._inflate[kBuffers] = [];\n\n if (fin && this.params[`${endpoint}_no_context_takeover`]) {\n this._inflate.reset();\n }\n }\n\n callback(null, data);\n });\n }\n\n /**\n * Compress data.\n *\n * @param {(Buffer|String)} data Data to compress\n * @param {Boolean} fin Specifies whether or not this is the last fragment\n * @param {Function} callback Callback\n * @private\n */\n _compress(data, fin, callback) {\n const endpoint = this._isServer ? 'server' : 'client';\n\n if (!this._deflate) {\n const key = `${endpoint}_max_window_bits`;\n const windowBits =\n typeof this.params[key] !== 'number'\n ? zlib.Z_DEFAULT_WINDOWBITS\n : this.params[key];\n\n this._deflate = zlib.createDeflateRaw({\n ...this._options.zlibDeflateOptions,\n windowBits\n });\n\n this._deflate[kTotalLength] = 0;\n this._deflate[kBuffers] = [];\n\n this._deflate.on('data', deflateOnData);\n }\n\n this._deflate[kCallback] = callback;\n\n this._deflate.write(data);\n this._deflate.flush(zlib.Z_SYNC_FLUSH, () => {\n if (!this._deflate) {\n //\n // The deflate stream was closed while data was being processed.\n //\n return;\n }\n\n let data = bufferUtil.concat(\n this._deflate[kBuffers],\n this._deflate[kTotalLength]\n );\n\n if (fin) {\n data = new FastBuffer(data.buffer, data.byteOffset, data.length - 4);\n }\n\n //\n // Ensure that the callback will not be called again in\n // `PerMessageDeflate#cleanup()`.\n //\n this._deflate[kCallback] = null;\n\n this._deflate[kTotalLength] = 0;\n this._deflate[kBuffers] = [];\n\n if (fin && this.params[`${endpoint}_no_context_takeover`]) {\n this._deflate.reset();\n }\n\n callback(null, data);\n });\n }\n}\n\nmodule.exports = PerMessageDeflate;\n\n/**\n * The listener of the `zlib.DeflateRaw` stream `'data'` event.\n *\n * @param {Buffer} chunk A chunk of data\n * @private\n */\nfunction deflateOnData(chunk) {\n this[kBuffers].push(chunk);\n this[kTotalLength] += chunk.length;\n}\n\n/**\n * The listener of the `zlib.InflateRaw` stream `'data'` event.\n *\n * @param {Buffer} chunk A chunk of data\n * @private\n */\nfunction inflateOnData(chunk) {\n this[kTotalLength] += chunk.length;\n\n if (\n this[kPerMessageDeflate]._maxPayload < 1 ||\n this[kTotalLength] <= this[kPerMessageDeflate]._maxPayload\n ) {\n this[kBuffers].push(chunk);\n return;\n }\n\n this[kError] = new RangeError('Max payload size exceeded');\n this[kError].code = 'WS_ERR_UNSUPPORTED_MESSAGE_LENGTH';\n this[kError][kStatusCode] = 1009;\n this.removeListener('data', inflateOnData);\n\n //\n // The choice to employ `zlib.reset()` over `zlib.close()` is dictated by the\n // fact that in Node.js versions prior to 13.10.0, the callback for\n // `zlib.flush()` is not called if `zlib.close()` is used. Utilizing\n // `zlib.reset()` ensures that either the callback is invoked or an error is\n // emitted.\n //\n this.reset();\n}\n\n/**\n * The listener of the `zlib.InflateRaw` stream `'error'` event.\n *\n * @param {Error} err The emitted error\n * @private\n */\nfunction inflateOnError(err) {\n //\n // There is no need to call `Zlib#close()` as the handle is automatically\n // closed when an error is emitted.\n //\n this[kPerMessageDeflate]._inflate = null;\n\n if (this[kError]) {\n this[kCallback](this[kError]);\n return;\n }\n\n err[kStatusCode] = 1007;\n this[kCallback](err);\n}\n","'use strict';\n\nconst { isUtf8 } = require('buffer');\n\nconst { hasBlob } = require('./constants');\n\n//\n// Allowed token characters:\n//\n// '!', '#', '$', '%', '&', ''', '*', '+', '-',\n// '.', 0-9, A-Z, '^', '_', '`', a-z, '|', '~'\n//\n// tokenChars[32] === 0 // ' '\n// tokenChars[33] === 1 // '!'\n// tokenChars[34] === 0 // '\"'\n// ...\n//\n// prettier-ignore\nconst tokenChars = [\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0 - 15\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 16 - 31\n 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, // 32 - 47\n 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, // 48 - 63\n 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 64 - 79\n 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, // 80 - 95\n 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 96 - 111\n 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0 // 112 - 127\n];\n\n/**\n * Checks if a status code is allowed in a close frame.\n *\n * @param {Number} code The status code\n * @return {Boolean} `true` if the status code is valid, else `false`\n * @public\n */\nfunction isValidStatusCode(code) {\n return (\n (code >= 1000 &&\n code <= 1014 &&\n code !== 1004 &&\n code !== 1005 &&\n code !== 1006) ||\n (code >= 3000 && code <= 4999)\n );\n}\n\n/**\n * Checks if a given buffer contains only correct UTF-8.\n * Ported from https://www.cl.cam.ac.uk/%7Emgk25/ucs/utf8_check.c by\n * Markus Kuhn.\n *\n * @param {Buffer} buf The buffer to check\n * @return {Boolean} `true` if `buf` contains only correct UTF-8, else `false`\n * @public\n */\nfunction _isValidUTF8(buf) {\n const len = buf.length;\n let i = 0;\n\n while (i < len) {\n if ((buf[i] & 0x80) === 0) {\n // 0xxxxxxx\n i++;\n } else if ((buf[i] & 0xe0) === 0xc0) {\n // 110xxxxx 10xxxxxx\n if (\n i + 1 === len ||\n (buf[i + 1] & 0xc0) !== 0x80 ||\n (buf[i] & 0xfe) === 0xc0 // Overlong\n ) {\n return false;\n }\n\n i += 2;\n } else if ((buf[i] & 0xf0) === 0xe0) {\n // 1110xxxx 10xxxxxx 10xxxxxx\n if (\n i + 2 >= len ||\n (buf[i + 1] & 0xc0) !== 0x80 ||\n (buf[i + 2] & 0xc0) !== 0x80 ||\n (buf[i] === 0xe0 && (buf[i + 1] & 0xe0) === 0x80) || // Overlong\n (buf[i] === 0xed && (buf[i + 1] & 0xe0) === 0xa0) // Surrogate (U+D800 - U+DFFF)\n ) {\n return false;\n }\n\n i += 3;\n } else if ((buf[i] & 0xf8) === 0xf0) {\n // 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx\n if (\n i + 3 >= len ||\n (buf[i + 1] & 0xc0) !== 0x80 ||\n (buf[i + 2] & 0xc0) !== 0x80 ||\n (buf[i + 3] & 0xc0) !== 0x80 ||\n (buf[i] === 0xf0 && (buf[i + 1] & 0xf0) === 0x80) || // Overlong\n (buf[i] === 0xf4 && buf[i + 1] > 0x8f) ||\n buf[i] > 0xf4 // > U+10FFFF\n ) {\n return false;\n }\n\n i += 4;\n } else {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Determines whether a value is a `Blob`.\n *\n * @param {*} value The value to be tested\n * @return {Boolean} `true` if `value` is a `Blob`, else `false`\n * @private\n */\nfunction isBlob(value) {\n return (\n hasBlob &&\n typeof value === 'object' &&\n typeof value.arrayBuffer === 'function' &&\n typeof value.type === 'string' &&\n typeof value.stream === 'function' &&\n (value[Symbol.toStringTag] === 'Blob' ||\n value[Symbol.toStringTag] === 'File')\n );\n}\n\nmodule.exports = {\n isBlob,\n isValidStatusCode,\n isValidUTF8: _isValidUTF8,\n tokenChars\n};\n\nif (isUtf8) {\n module.exports.isValidUTF8 = function (buf) {\n return buf.length < 24 ? _isValidUTF8(buf) : isUtf8(buf);\n };\n} /* istanbul ignore else */ else if (!process.env.WS_NO_UTF_8_VALIDATE) {\n try {\n const isValidUTF8 = require('utf-8-validate');\n\n module.exports.isValidUTF8 = function (buf) {\n return buf.length < 32 ? _isValidUTF8(buf) : isValidUTF8(buf);\n };\n } catch (e) {\n // Continue regardless of the error.\n }\n}\n","'use strict';\n\nconst { Writable } = require('stream');\n\nconst PerMessageDeflate = require('./permessage-deflate');\nconst {\n BINARY_TYPES,\n EMPTY_BUFFER,\n kStatusCode,\n kWebSocket\n} = require('./constants');\nconst { concat, toArrayBuffer, unmask } = require('./buffer-util');\nconst { isValidStatusCode, isValidUTF8 } = require('./validation');\n\nconst FastBuffer = Buffer[Symbol.species];\n\nconst GET_INFO = 0;\nconst GET_PAYLOAD_LENGTH_16 = 1;\nconst GET_PAYLOAD_LENGTH_64 = 2;\nconst GET_MASK = 3;\nconst GET_DATA = 4;\nconst INFLATING = 5;\nconst DEFER_EVENT = 6;\n\n/**\n * HyBi Receiver implementation.\n *\n * @extends Writable\n */\nclass Receiver extends Writable {\n /**\n * Creates a Receiver instance.\n *\n * @param {Object} [options] Options object\n * @param {Boolean} [options.allowSynchronousEvents=true] Specifies whether\n * any of the `'message'`, `'ping'`, and `'pong'` events can be emitted\n * multiple times in the same tick\n * @param {String} [options.binaryType=nodebuffer] The type for binary data\n * @param {Object} [options.extensions] An object containing the negotiated\n * extensions\n * @param {Boolean} [options.isServer=false] Specifies whether to operate in\n * client or server mode\n * @param {Number} [options.maxPayload=0] The maximum allowed message length\n * @param {Boolean} [options.skipUTF8Validation=false] Specifies whether or\n * not to skip UTF-8 validation for text and close messages\n */\n constructor(options = {}) {\n super();\n\n this._allowSynchronousEvents =\n options.allowSynchronousEvents !== undefined\n ? options.allowSynchronousEvents\n : true;\n this._binaryType = options.binaryType || BINARY_TYPES[0];\n this._extensions = options.extensions || {};\n this._isServer = !!options.isServer;\n this._maxPayload = options.maxPayload | 0;\n this._skipUTF8Validation = !!options.skipUTF8Validation;\n this[kWebSocket] = undefined;\n\n this._bufferedBytes = 0;\n this._buffers = [];\n\n this._compressed = false;\n this._payloadLength = 0;\n this._mask = undefined;\n this._fragmented = 0;\n this._masked = false;\n this._fin = false;\n this._opcode = 0;\n\n this._totalPayloadLength = 0;\n this._messageLength = 0;\n this._fragments = [];\n\n this._errored = false;\n this._loop = false;\n this._state = GET_INFO;\n }\n\n /**\n * Implements `Writable.prototype._write()`.\n *\n * @param {Buffer} chunk The chunk of data to write\n * @param {String} encoding The character encoding of `chunk`\n * @param {Function} cb Callback\n * @private\n */\n _write(chunk, encoding, cb) {\n if (this._opcode === 0x08 && this._state == GET_INFO) return cb();\n\n this._bufferedBytes += chunk.length;\n this._buffers.push(chunk);\n this.startLoop(cb);\n }\n\n /**\n * Consumes `n` bytes from the buffered data.\n *\n * @param {Number} n The number of bytes to consume\n * @return {Buffer} The consumed bytes\n * @private\n */\n consume(n) {\n this._bufferedBytes -= n;\n\n if (n === this._buffers[0].length) return this._buffers.shift();\n\n if (n < this._buffers[0].length) {\n const buf = this._buffers[0];\n this._buffers[0] = new FastBuffer(\n buf.buffer,\n buf.byteOffset + n,\n buf.length - n\n );\n\n return new FastBuffer(buf.buffer, buf.byteOffset, n);\n }\n\n const dst = Buffer.allocUnsafe(n);\n\n do {\n const buf = this._buffers[0];\n const offset = dst.length - n;\n\n if (n >= buf.length) {\n dst.set(this._buffers.shift(), offset);\n } else {\n dst.set(new Uint8Array(buf.buffer, buf.byteOffset, n), offset);\n this._buffers[0] = new FastBuffer(\n buf.buffer,\n buf.byteOffset + n,\n buf.length - n\n );\n }\n\n n -= buf.length;\n } while (n > 0);\n\n return dst;\n }\n\n /**\n * Starts the parsing loop.\n *\n * @param {Function} cb Callback\n * @private\n */\n startLoop(cb) {\n this._loop = true;\n\n do {\n switch (this._state) {\n case GET_INFO:\n this.getInfo(cb);\n break;\n case GET_PAYLOAD_LENGTH_16:\n this.getPayloadLength16(cb);\n break;\n case GET_PAYLOAD_LENGTH_64:\n this.getPayloadLength64(cb);\n break;\n case GET_MASK:\n this.getMask();\n break;\n case GET_DATA:\n this.getData(cb);\n break;\n case INFLATING:\n case DEFER_EVENT:\n this._loop = false;\n return;\n }\n } while (this._loop);\n\n if (!this._errored) cb();\n }\n\n /**\n * Reads the first two bytes of a frame.\n *\n * @param {Function} cb Callback\n * @private\n */\n getInfo(cb) {\n if (this._bufferedBytes < 2) {\n this._loop = false;\n return;\n }\n\n const buf = this.consume(2);\n\n if ((buf[0] & 0x30) !== 0x00) {\n const error = this.createError(\n RangeError,\n 'RSV2 and RSV3 must be clear',\n true,\n 1002,\n 'WS_ERR_UNEXPECTED_RSV_2_3'\n );\n\n cb(error);\n return;\n }\n\n const compressed = (buf[0] & 0x40) === 0x40;\n\n if (compressed && !this._extensions[PerMessageDeflate.extensionName]) {\n const error = this.createError(\n RangeError,\n 'RSV1 must be clear',\n true,\n 1002,\n 'WS_ERR_UNEXPECTED_RSV_1'\n );\n\n cb(error);\n return;\n }\n\n this._fin = (buf[0] & 0x80) === 0x80;\n this._opcode = buf[0] & 0x0f;\n this._payloadLength = buf[1] & 0x7f;\n\n if (this._opcode === 0x00) {\n if (compressed) {\n const error = this.createError(\n RangeError,\n 'RSV1 must be clear',\n true,\n 1002,\n 'WS_ERR_UNEXPECTED_RSV_1'\n );\n\n cb(error);\n return;\n }\n\n if (!this._fragmented) {\n const error = this.createError(\n RangeError,\n 'invalid opcode 0',\n true,\n 1002,\n 'WS_ERR_INVALID_OPCODE'\n );\n\n cb(error);\n return;\n }\n\n this._opcode = this._fragmented;\n } else if (this._opcode === 0x01 || this._opcode === 0x02) {\n if (this._fragmented) {\n const error = this.createError(\n RangeError,\n `invalid opcode ${this._opcode}`,\n true,\n 1002,\n 'WS_ERR_INVALID_OPCODE'\n );\n\n cb(error);\n return;\n }\n\n this._compressed = compressed;\n } else if (this._opcode > 0x07 && this._opcode < 0x0b) {\n if (!this._fin) {\n const error = this.createError(\n RangeError,\n 'FIN must be set',\n true,\n 1002,\n 'WS_ERR_EXPECTED_FIN'\n );\n\n cb(error);\n return;\n }\n\n if (compressed) {\n const error = this.createError(\n RangeError,\n 'RSV1 must be clear',\n true,\n 1002,\n 'WS_ERR_UNEXPECTED_RSV_1'\n );\n\n cb(error);\n return;\n }\n\n if (\n this._payloadLength > 0x7d ||\n (this._opcode === 0x08 && this._payloadLength === 1)\n ) {\n const error = this.createError(\n RangeError,\n `invalid payload length ${this._payloadLength}`,\n true,\n 1002,\n 'WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH'\n );\n\n cb(error);\n return;\n }\n } else {\n const error = this.createError(\n RangeError,\n `invalid opcode ${this._opcode}`,\n true,\n 1002,\n 'WS_ERR_INVALID_OPCODE'\n );\n\n cb(error);\n return;\n }\n\n if (!this._fin && !this._fragmented) this._fragmented = this._opcode;\n this._masked = (buf[1] & 0x80) === 0x80;\n\n if (this._isServer) {\n if (!this._masked) {\n const error = this.createError(\n RangeError,\n 'MASK must be set',\n true,\n 1002,\n 'WS_ERR_EXPECTED_MASK'\n );\n\n cb(error);\n return;\n }\n } else if (this._masked) {\n const error = this.createError(\n RangeError,\n 'MASK must be clear',\n true,\n 1002,\n 'WS_ERR_UNEXPECTED_MASK'\n );\n\n cb(error);\n return;\n }\n\n if (this._payloadLength === 126) this._state = GET_PAYLOAD_LENGTH_16;\n else if (this._payloadLength === 127) this._state = GET_PAYLOAD_LENGTH_64;\n else this.haveLength(cb);\n }\n\n /**\n * Gets extended payload length (7+16).\n *\n * @param {Function} cb Callback\n * @private\n */\n getPayloadLength16(cb) {\n if (this._bufferedBytes < 2) {\n this._loop = false;\n return;\n }\n\n this._payloadLength = this.consume(2).readUInt16BE(0);\n this.haveLength(cb);\n }\n\n /**\n * Gets extended payload length (7+64).\n *\n * @param {Function} cb Callback\n * @private\n */\n getPayloadLength64(cb) {\n if (this._bufferedBytes < 8) {\n this._loop = false;\n return;\n }\n\n const buf = this.consume(8);\n const num = buf.readUInt32BE(0);\n\n //\n // The maximum safe integer in JavaScript is 2^53 - 1. An error is returned\n // if payload length is greater than this number.\n //\n if (num > Math.pow(2, 53 - 32) - 1) {\n const error = this.createError(\n RangeError,\n 'Unsupported WebSocket frame: payload length > 2^53 - 1',\n false,\n 1009,\n 'WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH'\n );\n\n cb(error);\n return;\n }\n\n this._payloadLength = num * Math.pow(2, 32) + buf.readUInt32BE(4);\n this.haveLength(cb);\n }\n\n /**\n * Payload length has been read.\n *\n * @param {Function} cb Callback\n * @private\n */\n haveLength(cb) {\n if (this._payloadLength && this._opcode < 0x08) {\n this._totalPayloadLength += this._payloadLength;\n if (this._totalPayloadLength > this._maxPayload && this._maxPayload > 0) {\n const error = this.createError(\n RangeError,\n 'Max payload size exceeded',\n false,\n 1009,\n 'WS_ERR_UNSUPPORTED_MESSAGE_LENGTH'\n );\n\n cb(error);\n return;\n }\n }\n\n if (this._masked) this._state = GET_MASK;\n else this._state = GET_DATA;\n }\n\n /**\n * Reads mask bytes.\n *\n * @private\n */\n getMask() {\n if (this._bufferedBytes < 4) {\n this._loop = false;\n return;\n }\n\n this._mask = this.consume(4);\n this._state = GET_DATA;\n }\n\n /**\n * Reads data bytes.\n *\n * @param {Function} cb Callback\n * @private\n */\n getData(cb) {\n let data = EMPTY_BUFFER;\n\n if (this._payloadLength) {\n if (this._bufferedBytes < this._payloadLength) {\n this._loop = false;\n return;\n }\n\n data = this.consume(this._payloadLength);\n\n if (\n this._masked &&\n (this._mask[0] | this._mask[1] | this._mask[2] | this._mask[3]) !== 0\n ) {\n unmask(data, this._mask);\n }\n }\n\n if (this._opcode > 0x07) {\n this.controlMessage(data, cb);\n return;\n }\n\n if (this._compressed) {\n this._state = INFLATING;\n this.decompress(data, cb);\n return;\n }\n\n if (data.length) {\n //\n // This message is not compressed so its length is the sum of the payload\n // length of all fragments.\n //\n this._messageLength = this._totalPayloadLength;\n this._fragments.push(data);\n }\n\n this.dataMessage(cb);\n }\n\n /**\n * Decompresses data.\n *\n * @param {Buffer} data Compressed data\n * @param {Function} cb Callback\n * @private\n */\n decompress(data, cb) {\n const perMessageDeflate = this._extensions[PerMessageDeflate.extensionName];\n\n perMessageDeflate.decompress(data, this._fin, (err, buf) => {\n if (err) return cb(err);\n\n if (buf.length) {\n this._messageLength += buf.length;\n if (this._messageLength > this._maxPayload && this._maxPayload > 0) {\n const error = this.createError(\n RangeError,\n 'Max payload size exceeded',\n false,\n 1009,\n 'WS_ERR_UNSUPPORTED_MESSAGE_LENGTH'\n );\n\n cb(error);\n return;\n }\n\n this._fragments.push(buf);\n }\n\n this.dataMessage(cb);\n if (this._state === GET_INFO) this.startLoop(cb);\n });\n }\n\n /**\n * Handles a data message.\n *\n * @param {Function} cb Callback\n * @private\n */\n dataMessage(cb) {\n if (!this._fin) {\n this._state = GET_INFO;\n return;\n }\n\n const messageLength = this._messageLength;\n const fragments = this._fragments;\n\n this._totalPayloadLength = 0;\n this._messageLength = 0;\n this._fragmented = 0;\n this._fragments = [];\n\n if (this._opcode === 2) {\n let data;\n\n if (this._binaryType === 'nodebuffer') {\n data = concat(fragments, messageLength);\n } else if (this._binaryType === 'arraybuffer') {\n data = toArrayBuffer(concat(fragments, messageLength));\n } else if (this._binaryType === 'blob') {\n data = new Blob(fragments);\n } else {\n data = fragments;\n }\n\n if (this._allowSynchronousEvents) {\n this.emit('message', data, true);\n this._state = GET_INFO;\n } else {\n this._state = DEFER_EVENT;\n setImmediate(() => {\n this.emit('message', data, true);\n this._state = GET_INFO;\n this.startLoop(cb);\n });\n }\n } else {\n const buf = concat(fragments, messageLength);\n\n if (!this._skipUTF8Validation && !isValidUTF8(buf)) {\n const error = this.createError(\n Error,\n 'invalid UTF-8 sequence',\n true,\n 1007,\n 'WS_ERR_INVALID_UTF8'\n );\n\n cb(error);\n return;\n }\n\n if (this._state === INFLATING || this._allowSynchronousEvents) {\n this.emit('message', buf, false);\n this._state = GET_INFO;\n } else {\n this._state = DEFER_EVENT;\n setImmediate(() => {\n this.emit('message', buf, false);\n this._state = GET_INFO;\n this.startLoop(cb);\n });\n }\n }\n }\n\n /**\n * Handles a control message.\n *\n * @param {Buffer} data Data to handle\n * @return {(Error|RangeError|undefined)} A possible error\n * @private\n */\n controlMessage(data, cb) {\n if (this._opcode === 0x08) {\n if (data.length === 0) {\n this._loop = false;\n this.emit('conclude', 1005, EMPTY_BUFFER);\n this.end();\n } else {\n const code = data.readUInt16BE(0);\n\n if (!isValidStatusCode(code)) {\n const error = this.createError(\n RangeError,\n `invalid status code ${code}`,\n true,\n 1002,\n 'WS_ERR_INVALID_CLOSE_CODE'\n );\n\n cb(error);\n return;\n }\n\n const buf = new FastBuffer(\n data.buffer,\n data.byteOffset + 2,\n data.length - 2\n );\n\n if (!this._skipUTF8Validation && !isValidUTF8(buf)) {\n const error = this.createError(\n Error,\n 'invalid UTF-8 sequence',\n true,\n 1007,\n 'WS_ERR_INVALID_UTF8'\n );\n\n cb(error);\n return;\n }\n\n this._loop = false;\n this.emit('conclude', code, buf);\n this.end();\n }\n\n this._state = GET_INFO;\n return;\n }\n\n if (this._allowSynchronousEvents) {\n this.emit(this._opcode === 0x09 ? 'ping' : 'pong', data);\n this._state = GET_INFO;\n } else {\n this._state = DEFER_EVENT;\n setImmediate(() => {\n this.emit(this._opcode === 0x09 ? 'ping' : 'pong', data);\n this._state = GET_INFO;\n this.startLoop(cb);\n });\n }\n }\n\n /**\n * Builds an error object.\n *\n * @param {function(new:Error|RangeError)} ErrorCtor The error constructor\n * @param {String} message The error message\n * @param {Boolean} prefix Specifies whether or not to add a default prefix to\n * `message`\n * @param {Number} statusCode The status code\n * @param {String} errorCode The exposed error code\n * @return {(Error|RangeError)} The error\n * @private\n */\n createError(ErrorCtor, message, prefix, statusCode, errorCode) {\n this._loop = false;\n this._errored = true;\n\n const err = new ErrorCtor(\n prefix ? `Invalid WebSocket frame: ${message}` : message\n );\n\n Error.captureStackTrace(err, this.createError);\n err.code = errorCode;\n err[kStatusCode] = statusCode;\n return err;\n }\n}\n\nmodule.exports = Receiver;\n","/* eslint no-unused-vars: [\"error\", { \"varsIgnorePattern\": \"^Duplex\" }] */\n\n'use strict';\n\nconst { Duplex } = require('stream');\nconst { randomFillSync } = require('crypto');\n\nconst PerMessageDeflate = require('./permessage-deflate');\nconst { EMPTY_BUFFER, kWebSocket, NOOP } = require('./constants');\nconst { isBlob, isValidStatusCode } = require('./validation');\nconst { mask: applyMask, toBuffer } = require('./buffer-util');\n\nconst kByteLength = Symbol('kByteLength');\nconst maskBuffer = Buffer.alloc(4);\nconst RANDOM_POOL_SIZE = 8 * 1024;\nlet randomPool;\nlet randomPoolPointer = RANDOM_POOL_SIZE;\n\nconst DEFAULT = 0;\nconst DEFLATING = 1;\nconst GET_BLOB_DATA = 2;\n\n/**\n * HyBi Sender implementation.\n */\nclass Sender {\n /**\n * Creates a Sender instance.\n *\n * @param {Duplex} socket The connection socket\n * @param {Object} [extensions] An object containing the negotiated extensions\n * @param {Function} [generateMask] The function used to generate the masking\n * key\n */\n constructor(socket, extensions, generateMask) {\n this._extensions = extensions || {};\n\n if (generateMask) {\n this._generateMask = generateMask;\n this._maskBuffer = Buffer.alloc(4);\n }\n\n this._socket = socket;\n\n this._firstFragment = true;\n this._compress = false;\n\n this._bufferedBytes = 0;\n this._queue = [];\n this._state = DEFAULT;\n this.onerror = NOOP;\n this[kWebSocket] = undefined;\n }\n\n /**\n * Frames a piece of data according to the HyBi WebSocket protocol.\n *\n * @param {(Buffer|String)} data The data to frame\n * @param {Object} options Options object\n * @param {Boolean} [options.fin=false] Specifies whether or not to set the\n * FIN bit\n * @param {Function} [options.generateMask] The function used to generate the\n * masking key\n * @param {Boolean} [options.mask=false] Specifies whether or not to mask\n * `data`\n * @param {Buffer} [options.maskBuffer] The buffer used to store the masking\n * key\n * @param {Number} options.opcode The opcode\n * @param {Boolean} [options.readOnly=false] Specifies whether `data` can be\n * modified\n * @param {Boolean} [options.rsv1=false] Specifies whether or not to set the\n * RSV1 bit\n * @return {(Buffer|String)[]} The framed data\n * @public\n */\n static frame(data, options) {\n let mask;\n let merge = false;\n let offset = 2;\n let skipMasking = false;\n\n if (options.mask) {\n mask = options.maskBuffer || maskBuffer;\n\n if (options.generateMask) {\n options.generateMask(mask);\n } else {\n if (randomPoolPointer === RANDOM_POOL_SIZE) {\n /* istanbul ignore else */\n if (randomPool === undefined) {\n //\n // This is lazily initialized because server-sent frames must not\n // be masked so it may never be used.\n //\n randomPool = Buffer.alloc(RANDOM_POOL_SIZE);\n }\n\n randomFillSync(randomPool, 0, RANDOM_POOL_SIZE);\n randomPoolPointer = 0;\n }\n\n mask[0] = randomPool[randomPoolPointer++];\n mask[1] = randomPool[randomPoolPointer++];\n mask[2] = randomPool[randomPoolPointer++];\n mask[3] = randomPool[randomPoolPointer++];\n }\n\n skipMasking = (mask[0] | mask[1] | mask[2] | mask[3]) === 0;\n offset = 6;\n }\n\n let dataLength;\n\n if (typeof data === 'string') {\n if (\n (!options.mask || skipMasking) &&\n options[kByteLength] !== undefined\n ) {\n dataLength = options[kByteLength];\n } else {\n data = Buffer.from(data);\n dataLength = data.length;\n }\n } else {\n dataLength = data.length;\n merge = options.mask && options.readOnly && !skipMasking;\n }\n\n let payloadLength = dataLength;\n\n if (dataLength >= 65536) {\n offset += 8;\n payloadLength = 127;\n } else if (dataLength > 125) {\n offset += 2;\n payloadLength = 126;\n }\n\n const target = Buffer.allocUnsafe(merge ? dataLength + offset : offset);\n\n target[0] = options.fin ? options.opcode | 0x80 : options.opcode;\n if (options.rsv1) target[0] |= 0x40;\n\n target[1] = payloadLength;\n\n if (payloadLength === 126) {\n target.writeUInt16BE(dataLength, 2);\n } else if (payloadLength === 127) {\n target[2] = target[3] = 0;\n target.writeUIntBE(dataLength, 4, 6);\n }\n\n if (!options.mask) return [target, data];\n\n target[1] |= 0x80;\n target[offset - 4] = mask[0];\n target[offset - 3] = mask[1];\n target[offset - 2] = mask[2];\n target[offset - 1] = mask[3];\n\n if (skipMasking) return [target, data];\n\n if (merge) {\n applyMask(data, mask, target, offset, dataLength);\n return [target];\n }\n\n applyMask(data, mask, data, 0, dataLength);\n return [target, data];\n }\n\n /**\n * Sends a close message to the other peer.\n *\n * @param {Number} [code] The status code component of the body\n * @param {(String|Buffer)} [data] The message component of the body\n * @param {Boolean} [mask=false] Specifies whether or not to mask the message\n * @param {Function} [cb] Callback\n * @public\n */\n close(code, data, mask, cb) {\n let buf;\n\n if (code === undefined) {\n buf = EMPTY_BUFFER;\n } else if (typeof code !== 'number' || !isValidStatusCode(code)) {\n throw new TypeError('First argument must be a valid error code number');\n } else if (data === undefined || !data.length) {\n buf = Buffer.allocUnsafe(2);\n buf.writeUInt16BE(code, 0);\n } else {\n const length = Buffer.byteLength(data);\n\n if (length > 123) {\n throw new RangeError('The message must not be greater than 123 bytes');\n }\n\n buf = Buffer.allocUnsafe(2 + length);\n buf.writeUInt16BE(code, 0);\n\n if (typeof data === 'string') {\n buf.write(data, 2);\n } else {\n buf.set(data, 2);\n }\n }\n\n const options = {\n [kByteLength]: buf.length,\n fin: true,\n generateMask: this._generateMask,\n mask,\n maskBuffer: this._maskBuffer,\n opcode: 0x08,\n readOnly: false,\n rsv1: false\n };\n\n if (this._state !== DEFAULT) {\n this.enqueue([this.dispatch, buf, false, options, cb]);\n } else {\n this.sendFrame(Sender.frame(buf, options), cb);\n }\n }\n\n /**\n * Sends a ping message to the other peer.\n *\n * @param {*} data The message to send\n * @param {Boolean} [mask=false] Specifies whether or not to mask `data`\n * @param {Function} [cb] Callback\n * @public\n */\n ping(data, mask, cb) {\n let byteLength;\n let readOnly;\n\n if (typeof data === 'string') {\n byteLength = Buffer.byteLength(data);\n readOnly = false;\n } else if (isBlob(data)) {\n byteLength = data.size;\n readOnly = false;\n } else {\n data = toBuffer(data);\n byteLength = data.length;\n readOnly = toBuffer.readOnly;\n }\n\n if (byteLength > 125) {\n throw new RangeError('The data size must not be greater than 125 bytes');\n }\n\n const options = {\n [kByteLength]: byteLength,\n fin: true,\n generateMask: this._generateMask,\n mask,\n maskBuffer: this._maskBuffer,\n opcode: 0x09,\n readOnly,\n rsv1: false\n };\n\n if (isBlob(data)) {\n if (this._state !== DEFAULT) {\n this.enqueue([this.getBlobData, data, false, options, cb]);\n } else {\n this.getBlobData(data, false, options, cb);\n }\n } else if (this._state !== DEFAULT) {\n this.enqueue([this.dispatch, data, false, options, cb]);\n } else {\n this.sendFrame(Sender.frame(data, options), cb);\n }\n }\n\n /**\n * Sends a pong message to the other peer.\n *\n * @param {*} data The message to send\n * @param {Boolean} [mask=false] Specifies whether or not to mask `data`\n * @param {Function} [cb] Callback\n * @public\n */\n pong(data, mask, cb) {\n let byteLength;\n let readOnly;\n\n if (typeof data === 'string') {\n byteLength = Buffer.byteLength(data);\n readOnly = false;\n } else if (isBlob(data)) {\n byteLength = data.size;\n readOnly = false;\n } else {\n data = toBuffer(data);\n byteLength = data.length;\n readOnly = toBuffer.readOnly;\n }\n\n if (byteLength > 125) {\n throw new RangeError('The data size must not be greater than 125 bytes');\n }\n\n const options = {\n [kByteLength]: byteLength,\n fin: true,\n generateMask: this._generateMask,\n mask,\n maskBuffer: this._maskBuffer,\n opcode: 0x0a,\n readOnly,\n rsv1: false\n };\n\n if (isBlob(data)) {\n if (this._state !== DEFAULT) {\n this.enqueue([this.getBlobData, data, false, options, cb]);\n } else {\n this.getBlobData(data, false, options, cb);\n }\n } else if (this._state !== DEFAULT) {\n this.enqueue([this.dispatch, data, false, options, cb]);\n } else {\n this.sendFrame(Sender.frame(data, options), cb);\n }\n }\n\n /**\n * Sends a data message to the other peer.\n *\n * @param {*} data The message to send\n * @param {Object} options Options object\n * @param {Boolean} [options.binary=false] Specifies whether `data` is binary\n * or text\n * @param {Boolean} [options.compress=false] Specifies whether or not to\n * compress `data`\n * @param {Boolean} [options.fin=false] Specifies whether the fragment is the\n * last one\n * @param {Boolean} [options.mask=false] Specifies whether or not to mask\n * `data`\n * @param {Function} [cb] Callback\n * @public\n */\n send(data, options, cb) {\n const perMessageDeflate = this._extensions[PerMessageDeflate.extensionName];\n let opcode = options.binary ? 2 : 1;\n let rsv1 = options.compress;\n\n let byteLength;\n let readOnly;\n\n if (typeof data === 'string') {\n byteLength = Buffer.byteLength(data);\n readOnly = false;\n } else if (isBlob(data)) {\n byteLength = data.size;\n readOnly = false;\n } else {\n data = toBuffer(data);\n byteLength = data.length;\n readOnly = toBuffer.readOnly;\n }\n\n if (this._firstFragment) {\n this._firstFragment = false;\n if (\n rsv1 &&\n perMessageDeflate &&\n perMessageDeflate.params[\n perMessageDeflate._isServer\n ? 'server_no_context_takeover'\n : 'client_no_context_takeover'\n ]\n ) {\n rsv1 = byteLength >= perMessageDeflate._threshold;\n }\n this._compress = rsv1;\n } else {\n rsv1 = false;\n opcode = 0;\n }\n\n if (options.fin) this._firstFragment = true;\n\n const opts = {\n [kByteLength]: byteLength,\n fin: options.fin,\n generateMask: this._generateMask,\n mask: options.mask,\n maskBuffer: this._maskBuffer,\n opcode,\n readOnly,\n rsv1\n };\n\n if (isBlob(data)) {\n if (this._state !== DEFAULT) {\n this.enqueue([this.getBlobData, data, this._compress, opts, cb]);\n } else {\n this.getBlobData(data, this._compress, opts, cb);\n }\n } else if (this._state !== DEFAULT) {\n this.enqueue([this.dispatch, data, this._compress, opts, cb]);\n } else {\n this.dispatch(data, this._compress, opts, cb);\n }\n }\n\n /**\n * Gets the contents of a blob as binary data.\n *\n * @param {Blob} blob The blob\n * @param {Boolean} [compress=false] Specifies whether or not to compress\n * the data\n * @param {Object} options Options object\n * @param {Boolean} [options.fin=false] Specifies whether or not to set the\n * FIN bit\n * @param {Function} [options.generateMask] The function used to generate the\n * masking key\n * @param {Boolean} [options.mask=false] Specifies whether or not to mask\n * `data`\n * @param {Buffer} [options.maskBuffer] The buffer used to store the masking\n * key\n * @param {Number} options.opcode The opcode\n * @param {Boolean} [options.readOnly=false] Specifies whether `data` can be\n * modified\n * @param {Boolean} [options.rsv1=false] Specifies whether or not to set the\n * RSV1 bit\n * @param {Function} [cb] Callback\n * @private\n */\n getBlobData(blob, compress, options, cb) {\n this._bufferedBytes += options[kByteLength];\n this._state = GET_BLOB_DATA;\n\n blob\n .arrayBuffer()\n .then((arrayBuffer) => {\n if (this._socket.destroyed) {\n const err = new Error(\n 'The socket was closed while the blob was being read'\n );\n\n //\n // `callCallbacks` is called in the next tick to ensure that errors\n // that might be thrown in the callbacks behave like errors thrown\n // outside the promise chain.\n //\n process.nextTick(callCallbacks, this, err, cb);\n return;\n }\n\n this._bufferedBytes -= options[kByteLength];\n const data = toBuffer(arrayBuffer);\n\n if (!compress) {\n this._state = DEFAULT;\n this.sendFrame(Sender.frame(data, options), cb);\n this.dequeue();\n } else {\n this.dispatch(data, compress, options, cb);\n }\n })\n .catch((err) => {\n //\n // `onError` is called in the next tick for the same reason that\n // `callCallbacks` above is.\n //\n process.nextTick(onError, this, err, cb);\n });\n }\n\n /**\n * Dispatches a message.\n *\n * @param {(Buffer|String)} data The message to send\n * @param {Boolean} [compress=false] Specifies whether or not to compress\n * `data`\n * @param {Object} options Options object\n * @param {Boolean} [options.fin=false] Specifies whether or not to set the\n * FIN bit\n * @param {Function} [options.generateMask] The function used to generate the\n * masking key\n * @param {Boolean} [options.mask=false] Specifies whether or not to mask\n * `data`\n * @param {Buffer} [options.maskBuffer] The buffer used to store the masking\n * key\n * @param {Number} options.opcode The opcode\n * @param {Boolean} [options.readOnly=false] Specifies whether `data` can be\n * modified\n * @param {Boolean} [options.rsv1=false] Specifies whether or not to set the\n * RSV1 bit\n * @param {Function} [cb] Callback\n * @private\n */\n dispatch(data, compress, options, cb) {\n if (!compress) {\n this.sendFrame(Sender.frame(data, options), cb);\n return;\n }\n\n const perMessageDeflate = this._extensions[PerMessageDeflate.extensionName];\n\n this._bufferedBytes += options[kByteLength];\n this._state = DEFLATING;\n perMessageDeflate.compress(data, options.fin, (_, buf) => {\n if (this._socket.destroyed) {\n const err = new Error(\n 'The socket was closed while data was being compressed'\n );\n\n callCallbacks(this, err, cb);\n return;\n }\n\n this._bufferedBytes -= options[kByteLength];\n this._state = DEFAULT;\n options.readOnly = false;\n this.sendFrame(Sender.frame(buf, options), cb);\n this.dequeue();\n });\n }\n\n /**\n * Executes queued send operations.\n *\n * @private\n */\n dequeue() {\n while (this._state === DEFAULT && this._queue.length) {\n const params = this._queue.shift();\n\n this._bufferedBytes -= params[3][kByteLength];\n Reflect.apply(params[0], this, params.slice(1));\n }\n }\n\n /**\n * Enqueues a send operation.\n *\n * @param {Array} params Send operation parameters.\n * @private\n */\n enqueue(params) {\n this._bufferedBytes += params[3][kByteLength];\n this._queue.push(params);\n }\n\n /**\n * Sends a frame.\n *\n * @param {(Buffer | String)[]} list The frame to send\n * @param {Function} [cb] Callback\n * @private\n */\n sendFrame(list, cb) {\n if (list.length === 2) {\n this._socket.cork();\n this._socket.write(list[0]);\n this._socket.write(list[1], cb);\n this._socket.uncork();\n } else {\n this._socket.write(list[0], cb);\n }\n }\n}\n\nmodule.exports = Sender;\n\n/**\n * Calls queued callbacks with an error.\n *\n * @param {Sender} sender The `Sender` instance\n * @param {Error} err The error to call the callbacks with\n * @param {Function} [cb] The first callback\n * @private\n */\nfunction callCallbacks(sender, err, cb) {\n if (typeof cb === 'function') cb(err);\n\n for (let i = 0; i < sender._queue.length; i++) {\n const params = sender._queue[i];\n const callback = params[params.length - 1];\n\n if (typeof callback === 'function') callback(err);\n }\n}\n\n/**\n * Handles a `Sender` error.\n *\n * @param {Sender} sender The `Sender` instance\n * @param {Error} err The error\n * @param {Function} [cb] The first pending callback\n * @private\n */\nfunction onError(sender, err, cb) {\n callCallbacks(sender, err, cb);\n sender.onerror(err);\n}\n","'use strict';\n\nconst { kForOnEventAttribute, kListener } = require('./constants');\n\nconst kCode = Symbol('kCode');\nconst kData = Symbol('kData');\nconst kError = Symbol('kError');\nconst kMessage = Symbol('kMessage');\nconst kReason = Symbol('kReason');\nconst kTarget = Symbol('kTarget');\nconst kType = Symbol('kType');\nconst kWasClean = Symbol('kWasClean');\n\n/**\n * Class representing an event.\n */\nclass Event {\n /**\n * Create a new `Event`.\n *\n * @param {String} type The name of the event\n * @throws {TypeError} If the `type` argument is not specified\n */\n constructor(type) {\n this[kTarget] = null;\n this[kType] = type;\n }\n\n /**\n * @type {*}\n */\n get target() {\n return this[kTarget];\n }\n\n /**\n * @type {String}\n */\n get type() {\n return this[kType];\n }\n}\n\nObject.defineProperty(Event.prototype, 'target', { enumerable: true });\nObject.defineProperty(Event.prototype, 'type', { enumerable: true });\n\n/**\n * Class representing a close event.\n *\n * @extends Event\n */\nclass CloseEvent extends Event {\n /**\n * Create a new `CloseEvent`.\n *\n * @param {String} type The name of the event\n * @param {Object} [options] A dictionary object that allows for setting\n * attributes via object members of the same name\n * @param {Number} [options.code=0] The status code explaining why the\n * connection was closed\n * @param {String} [options.reason=''] A human-readable string explaining why\n * the connection was closed\n * @param {Boolean} [options.wasClean=false] Indicates whether or not the\n * connection was cleanly closed\n */\n constructor(type, options = {}) {\n super(type);\n\n this[kCode] = options.code === undefined ? 0 : options.code;\n this[kReason] = options.reason === undefined ? '' : options.reason;\n this[kWasClean] = options.wasClean === undefined ? false : options.wasClean;\n }\n\n /**\n * @type {Number}\n */\n get code() {\n return this[kCode];\n }\n\n /**\n * @type {String}\n */\n get reason() {\n return this[kReason];\n }\n\n /**\n * @type {Boolean}\n */\n get wasClean() {\n return this[kWasClean];\n }\n}\n\nObject.defineProperty(CloseEvent.prototype, 'code', { enumerable: true });\nObject.defineProperty(CloseEvent.prototype, 'reason', { enumerable: true });\nObject.defineProperty(CloseEvent.prototype, 'wasClean', { enumerable: true });\n\n/**\n * Class representing an error event.\n *\n * @extends Event\n */\nclass ErrorEvent extends Event {\n /**\n * Create a new `ErrorEvent`.\n *\n * @param {String} type The name of the event\n * @param {Object} [options] A dictionary object that allows for setting\n * attributes via object members of the same name\n * @param {*} [options.error=null] The error that generated this event\n * @param {String} [options.message=''] The error message\n */\n constructor(type, options = {}) {\n super(type);\n\n this[kError] = options.error === undefined ? null : options.error;\n this[kMessage] = options.message === undefined ? '' : options.message;\n }\n\n /**\n * @type {*}\n */\n get error() {\n return this[kError];\n }\n\n /**\n * @type {String}\n */\n get message() {\n return this[kMessage];\n }\n}\n\nObject.defineProperty(ErrorEvent.prototype, 'error', { enumerable: true });\nObject.defineProperty(ErrorEvent.prototype, 'message', { enumerable: true });\n\n/**\n * Class representing a message event.\n *\n * @extends Event\n */\nclass MessageEvent extends Event {\n /**\n * Create a new `MessageEvent`.\n *\n * @param {String} type The name of the event\n * @param {Object} [options] A dictionary object that allows for setting\n * attributes via object members of the same name\n * @param {*} [options.data=null] The message content\n */\n constructor(type, options = {}) {\n super(type);\n\n this[kData] = options.data === undefined ? null : options.data;\n }\n\n /**\n * @type {*}\n */\n get data() {\n return this[kData];\n }\n}\n\nObject.defineProperty(MessageEvent.prototype, 'data', { enumerable: true });\n\n/**\n * This provides methods for emulating the `EventTarget` interface. It's not\n * meant to be used directly.\n *\n * @mixin\n */\nconst EventTarget = {\n /**\n * Register an event listener.\n *\n * @param {String} type A string representing the event type to listen for\n * @param {(Function|Object)} handler The listener to add\n * @param {Object} [options] An options object specifies characteristics about\n * the event listener\n * @param {Boolean} [options.once=false] A `Boolean` indicating that the\n * listener should be invoked at most once after being added. If `true`,\n * the listener would be automatically removed when invoked.\n * @public\n */\n addEventListener(type, handler, options = {}) {\n for (const listener of this.listeners(type)) {\n if (\n !options[kForOnEventAttribute] &&\n listener[kListener] === handler &&\n !listener[kForOnEventAttribute]\n ) {\n return;\n }\n }\n\n let wrapper;\n\n if (type === 'message') {\n wrapper = function onMessage(data, isBinary) {\n const event = new MessageEvent('message', {\n data: isBinary ? data : data.toString()\n });\n\n event[kTarget] = this;\n callListener(handler, this, event);\n };\n } else if (type === 'close') {\n wrapper = function onClose(code, message) {\n const event = new CloseEvent('close', {\n code,\n reason: message.toString(),\n wasClean: this._closeFrameReceived && this._closeFrameSent\n });\n\n event[kTarget] = this;\n callListener(handler, this, event);\n };\n } else if (type === 'error') {\n wrapper = function onError(error) {\n const event = new ErrorEvent('error', {\n error,\n message: error.message\n });\n\n event[kTarget] = this;\n callListener(handler, this, event);\n };\n } else if (type === 'open') {\n wrapper = function onOpen() {\n const event = new Event('open');\n\n event[kTarget] = this;\n callListener(handler, this, event);\n };\n } else {\n return;\n }\n\n wrapper[kForOnEventAttribute] = !!options[kForOnEventAttribute];\n wrapper[kListener] = handler;\n\n if (options.once) {\n this.once(type, wrapper);\n } else {\n this.on(type, wrapper);\n }\n },\n\n /**\n * Remove an event listener.\n *\n * @param {String} type A string representing the event type to remove\n * @param {(Function|Object)} handler The listener to remove\n * @public\n */\n removeEventListener(type, handler) {\n for (const listener of this.listeners(type)) {\n if (listener[kListener] === handler && !listener[kForOnEventAttribute]) {\n this.removeListener(type, listener);\n break;\n }\n }\n }\n};\n\nmodule.exports = {\n CloseEvent,\n ErrorEvent,\n Event,\n EventTarget,\n MessageEvent\n};\n\n/**\n * Call an event listener\n *\n * @param {(Function|Object)} listener The listener to call\n * @param {*} thisArg The value to use as `this`` when calling the listener\n * @param {Event} event The event to pass to the listener\n * @private\n */\nfunction callListener(listener, thisArg, event) {\n if (typeof listener === 'object' && listener.handleEvent) {\n listener.handleEvent.call(listener, event);\n } else {\n listener.call(thisArg, event);\n }\n}\n","'use strict';\n\nconst { tokenChars } = require('./validation');\n\n/**\n * Adds an offer to the map of extension offers or a parameter to the map of\n * parameters.\n *\n * @param {Object} dest The map of extension offers or parameters\n * @param {String} name The extension or parameter name\n * @param {(Object|Boolean|String)} elem The extension parameters or the\n * parameter value\n * @private\n */\nfunction push(dest, name, elem) {\n if (dest[name] === undefined) dest[name] = [elem];\n else dest[name].push(elem);\n}\n\n/**\n * Parses the `Sec-WebSocket-Extensions` header into an object.\n *\n * @param {String} header The field value of the header\n * @return {Object} The parsed object\n * @public\n */\nfunction parse(header) {\n const offers = Object.create(null);\n let params = Object.create(null);\n let mustUnescape = false;\n let isEscaping = false;\n let inQuotes = false;\n let extensionName;\n let paramName;\n let start = -1;\n let code = -1;\n let end = -1;\n let i = 0;\n\n for (; i < header.length; i++) {\n code = header.charCodeAt(i);\n\n if (extensionName === undefined) {\n if (end === -1 && tokenChars[code] === 1) {\n if (start === -1) start = i;\n } else if (\n i !== 0 &&\n (code === 0x20 /* ' ' */ || code === 0x09) /* '\\t' */\n ) {\n if (end === -1 && start !== -1) end = i;\n } else if (code === 0x3b /* ';' */ || code === 0x2c /* ',' */) {\n if (start === -1) {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n\n if (end === -1) end = i;\n const name = header.slice(start, end);\n if (code === 0x2c) {\n push(offers, name, params);\n params = Object.create(null);\n } else {\n extensionName = name;\n }\n\n start = end = -1;\n } else {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n } else if (paramName === undefined) {\n if (end === -1 && tokenChars[code] === 1) {\n if (start === -1) start = i;\n } else if (code === 0x20 || code === 0x09) {\n if (end === -1 && start !== -1) end = i;\n } else if (code === 0x3b || code === 0x2c) {\n if (start === -1) {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n\n if (end === -1) end = i;\n push(params, header.slice(start, end), true);\n if (code === 0x2c) {\n push(offers, extensionName, params);\n params = Object.create(null);\n extensionName = undefined;\n }\n\n start = end = -1;\n } else if (code === 0x3d /* '=' */ && start !== -1 && end === -1) {\n paramName = header.slice(start, i);\n start = end = -1;\n } else {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n } else {\n //\n // The value of a quoted-string after unescaping must conform to the\n // token ABNF, so only token characters are valid.\n // Ref: https://tools.ietf.org/html/rfc6455#section-9.1\n //\n if (isEscaping) {\n if (tokenChars[code] !== 1) {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n if (start === -1) start = i;\n else if (!mustUnescape) mustUnescape = true;\n isEscaping = false;\n } else if (inQuotes) {\n if (tokenChars[code] === 1) {\n if (start === -1) start = i;\n } else if (code === 0x22 /* '\"' */ && start !== -1) {\n inQuotes = false;\n end = i;\n } else if (code === 0x5c /* '\\' */) {\n isEscaping = true;\n } else {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n } else if (code === 0x22 && header.charCodeAt(i - 1) === 0x3d) {\n inQuotes = true;\n } else if (end === -1 && tokenChars[code] === 1) {\n if (start === -1) start = i;\n } else if (start !== -1 && (code === 0x20 || code === 0x09)) {\n if (end === -1) end = i;\n } else if (code === 0x3b || code === 0x2c) {\n if (start === -1) {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n\n if (end === -1) end = i;\n let value = header.slice(start, end);\n if (mustUnescape) {\n value = value.replace(/\\\\/g, '');\n mustUnescape = false;\n }\n push(params, paramName, value);\n if (code === 0x2c) {\n push(offers, extensionName, params);\n params = Object.create(null);\n extensionName = undefined;\n }\n\n paramName = undefined;\n start = end = -1;\n } else {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n }\n }\n\n if (start === -1 || inQuotes || code === 0x20 || code === 0x09) {\n throw new SyntaxError('Unexpected end of input');\n }\n\n if (end === -1) end = i;\n const token = header.slice(start, end);\n if (extensionName === undefined) {\n push(offers, token, params);\n } else {\n if (paramName === undefined) {\n push(params, token, true);\n } else if (mustUnescape) {\n push(params, paramName, token.replace(/\\\\/g, ''));\n } else {\n push(params, paramName, token);\n }\n push(offers, extensionName, params);\n }\n\n return offers;\n}\n\n/**\n * Builds the `Sec-WebSocket-Extensions` header field value.\n *\n * @param {Object} extensions The map of extensions and parameters to format\n * @return {String} A string representing the given object\n * @public\n */\nfunction format(extensions) {\n return Object.keys(extensions)\n .map((extension) => {\n let configurations = extensions[extension];\n if (!Array.isArray(configurations)) configurations = [configurations];\n return configurations\n .map((params) => {\n return [extension]\n .concat(\n Object.keys(params).map((k) => {\n let values = params[k];\n if (!Array.isArray(values)) values = [values];\n return values\n .map((v) => (v === true ? k : `${k}=${v}`))\n .join('; ');\n })\n )\n .join('; ');\n })\n .join(', ');\n })\n .join(', ');\n}\n\nmodule.exports = { format, parse };\n","/* eslint no-unused-vars: [\"error\", { \"varsIgnorePattern\": \"^Duplex|Readable$\", \"caughtErrors\": \"none\" }] */\n\n'use strict';\n\nconst EventEmitter = require('events');\nconst https = require('https');\nconst http = require('http');\nconst net = require('net');\nconst tls = require('tls');\nconst { randomBytes, createHash } = require('crypto');\nconst { Duplex, Readable } = require('stream');\nconst { URL } = require('url');\n\nconst PerMessageDeflate = require('./permessage-deflate');\nconst Receiver = require('./receiver');\nconst Sender = require('./sender');\nconst { isBlob } = require('./validation');\n\nconst {\n BINARY_TYPES,\n CLOSE_TIMEOUT,\n EMPTY_BUFFER,\n GUID,\n kForOnEventAttribute,\n kListener,\n kStatusCode,\n kWebSocket,\n NOOP\n} = require('./constants');\nconst {\n EventTarget: { addEventListener, removeEventListener }\n} = require('./event-target');\nconst { format, parse } = require('./extension');\nconst { toBuffer } = require('./buffer-util');\n\nconst kAborted = Symbol('kAborted');\nconst protocolVersions = [8, 13];\nconst readyStates = ['CONNECTING', 'OPEN', 'CLOSING', 'CLOSED'];\nconst subprotocolRegex = /^[!#$%&'*+\\-.0-9A-Z^_`|a-z~]+$/;\n\n/**\n * Class representing a WebSocket.\n *\n * @extends EventEmitter\n */\nclass WebSocket extends EventEmitter {\n /**\n * Create a new `WebSocket`.\n *\n * @param {(String|URL)} address The URL to which to connect\n * @param {(String|String[])} [protocols] The subprotocols\n * @param {Object} [options] Connection options\n */\n constructor(address, protocols, options) {\n super();\n\n this._binaryType = BINARY_TYPES[0];\n this._closeCode = 1006;\n this._closeFrameReceived = false;\n this._closeFrameSent = false;\n this._closeMessage = EMPTY_BUFFER;\n this._closeTimer = null;\n this._errorEmitted = false;\n this._extensions = {};\n this._paused = false;\n this._protocol = '';\n this._readyState = WebSocket.CONNECTING;\n this._receiver = null;\n this._sender = null;\n this._socket = null;\n\n if (address !== null) {\n this._bufferedAmount = 0;\n this._isServer = false;\n this._redirects = 0;\n\n if (protocols === undefined) {\n protocols = [];\n } else if (!Array.isArray(protocols)) {\n if (typeof protocols === 'object' && protocols !== null) {\n options = protocols;\n protocols = [];\n } else {\n protocols = [protocols];\n }\n }\n\n initAsClient(this, address, protocols, options);\n } else {\n this._autoPong = options.autoPong;\n this._closeTimeout = options.closeTimeout;\n this._isServer = true;\n }\n }\n\n /**\n * For historical reasons, the custom \"nodebuffer\" type is used by the default\n * instead of \"blob\".\n *\n * @type {String}\n */\n get binaryType() {\n return this._binaryType;\n }\n\n set binaryType(type) {\n if (!BINARY_TYPES.includes(type)) return;\n\n this._binaryType = type;\n\n //\n // Allow to change `binaryType` on the fly.\n //\n if (this._receiver) this._receiver._binaryType = type;\n }\n\n /**\n * @type {Number}\n */\n get bufferedAmount() {\n if (!this._socket) return this._bufferedAmount;\n\n return this._socket._writableState.length + this._sender._bufferedBytes;\n }\n\n /**\n * @type {String}\n */\n get extensions() {\n return Object.keys(this._extensions).join();\n }\n\n /**\n * @type {Boolean}\n */\n get isPaused() {\n return this._paused;\n }\n\n /**\n * @type {Function}\n */\n /* istanbul ignore next */\n get onclose() {\n return null;\n }\n\n /**\n * @type {Function}\n */\n /* istanbul ignore next */\n get onerror() {\n return null;\n }\n\n /**\n * @type {Function}\n */\n /* istanbul ignore next */\n get onopen() {\n return null;\n }\n\n /**\n * @type {Function}\n */\n /* istanbul ignore next */\n get onmessage() {\n return null;\n }\n\n /**\n * @type {String}\n */\n get protocol() {\n return this._protocol;\n }\n\n /**\n * @type {Number}\n */\n get readyState() {\n return this._readyState;\n }\n\n /**\n * @type {String}\n */\n get url() {\n return this._url;\n }\n\n /**\n * Set up the socket and the internal resources.\n *\n * @param {Duplex} socket The network socket between the server and client\n * @param {Buffer} head The first packet of the upgraded stream\n * @param {Object} options Options object\n * @param {Boolean} [options.allowSynchronousEvents=false] Specifies whether\n * any of the `'message'`, `'ping'`, and `'pong'` events can be emitted\n * multiple times in the same tick\n * @param {Function} [options.generateMask] The function used to generate the\n * masking key\n * @param {Number} [options.maxPayload=0] The maximum allowed message size\n * @param {Boolean} [options.skipUTF8Validation=false] Specifies whether or\n * not to skip UTF-8 validation for text and close messages\n * @private\n */\n setSocket(socket, head, options) {\n const receiver = new Receiver({\n allowSynchronousEvents: options.allowSynchronousEvents,\n binaryType: this.binaryType,\n extensions: this._extensions,\n isServer: this._isServer,\n maxPayload: options.maxPayload,\n skipUTF8Validation: options.skipUTF8Validation\n });\n\n const sender = new Sender(socket, this._extensions, options.generateMask);\n\n this._receiver = receiver;\n this._sender = sender;\n this._socket = socket;\n\n receiver[kWebSocket] = this;\n sender[kWebSocket] = this;\n socket[kWebSocket] = this;\n\n receiver.on('conclude', receiverOnConclude);\n receiver.on('drain', receiverOnDrain);\n receiver.on('error', receiverOnError);\n receiver.on('message', receiverOnMessage);\n receiver.on('ping', receiverOnPing);\n receiver.on('pong', receiverOnPong);\n\n sender.onerror = senderOnError;\n\n //\n // These methods may not be available if `socket` is just a `Duplex`.\n //\n if (socket.setTimeout) socket.setTimeout(0);\n if (socket.setNoDelay) socket.setNoDelay();\n\n if (head.length > 0) socket.unshift(head);\n\n socket.on('close', socketOnClose);\n socket.on('data', socketOnData);\n socket.on('end', socketOnEnd);\n socket.on('error', socketOnError);\n\n this._readyState = WebSocket.OPEN;\n this.emit('open');\n }\n\n /**\n * Emit the `'close'` event.\n *\n * @private\n */\n emitClose() {\n if (!this._socket) {\n this._readyState = WebSocket.CLOSED;\n this.emit('close', this._closeCode, this._closeMessage);\n return;\n }\n\n if (this._extensions[PerMessageDeflate.extensionName]) {\n this._extensions[PerMessageDeflate.extensionName].cleanup();\n }\n\n this._receiver.removeAllListeners();\n this._readyState = WebSocket.CLOSED;\n this.emit('close', this._closeCode, this._closeMessage);\n }\n\n /**\n * Start a closing handshake.\n *\n * +----------+ +-----------+ +----------+\n * - - -|ws.close()|-->|close frame|-->|ws.close()|- - -\n * | +----------+ +-----------+ +----------+ |\n * +----------+ +-----------+ |\n * CLOSING |ws.close()|<--|close frame|<--+-----+ CLOSING\n * +----------+ +-----------+ |\n * | | | +---+ |\n * +------------------------+-->|fin| - - - -\n * | +---+ | +---+\n * - - - - -|fin|<---------------------+\n * +---+\n *\n * @param {Number} [code] Status code explaining why the connection is closing\n * @param {(String|Buffer)} [data] The reason why the connection is\n * closing\n * @public\n */\n close(code, data) {\n if (this.readyState === WebSocket.CLOSED) return;\n if (this.readyState === WebSocket.CONNECTING) {\n const msg = 'WebSocket was closed before the connection was established';\n abortHandshake(this, this._req, msg);\n return;\n }\n\n if (this.readyState === WebSocket.CLOSING) {\n if (\n this._closeFrameSent &&\n (this._closeFrameReceived || this._receiver._writableState.errorEmitted)\n ) {\n this._socket.end();\n }\n\n return;\n }\n\n this._readyState = WebSocket.CLOSING;\n this._sender.close(code, data, !this._isServer, (err) => {\n //\n // This error is handled by the `'error'` listener on the socket. We only\n // want to know if the close frame has been sent here.\n //\n if (err) return;\n\n this._closeFrameSent = true;\n\n if (\n this._closeFrameReceived ||\n this._receiver._writableState.errorEmitted\n ) {\n this._socket.end();\n }\n });\n\n setCloseTimer(this);\n }\n\n /**\n * Pause the socket.\n *\n * @public\n */\n pause() {\n if (\n this.readyState === WebSocket.CONNECTING ||\n this.readyState === WebSocket.CLOSED\n ) {\n return;\n }\n\n this._paused = true;\n this._socket.pause();\n }\n\n /**\n * Send a ping.\n *\n * @param {*} [data] The data to send\n * @param {Boolean} [mask] Indicates whether or not to mask `data`\n * @param {Function} [cb] Callback which is executed when the ping is sent\n * @public\n */\n ping(data, mask, cb) {\n if (this.readyState === WebSocket.CONNECTING) {\n throw new Error('WebSocket is not open: readyState 0 (CONNECTING)');\n }\n\n if (typeof data === 'function') {\n cb = data;\n data = mask = undefined;\n } else if (typeof mask === 'function') {\n cb = mask;\n mask = undefined;\n }\n\n if (typeof data === 'number') data = data.toString();\n\n if (this.readyState !== WebSocket.OPEN) {\n sendAfterClose(this, data, cb);\n return;\n }\n\n if (mask === undefined) mask = !this._isServer;\n this._sender.ping(data || EMPTY_BUFFER, mask, cb);\n }\n\n /**\n * Send a pong.\n *\n * @param {*} [data] The data to send\n * @param {Boolean} [mask] Indicates whether or not to mask `data`\n * @param {Function} [cb] Callback which is executed when the pong is sent\n * @public\n */\n pong(data, mask, cb) {\n if (this.readyState === WebSocket.CONNECTING) {\n throw new Error('WebSocket is not open: readyState 0 (CONNECTING)');\n }\n\n if (typeof data === 'function') {\n cb = data;\n data = mask = undefined;\n } else if (typeof mask === 'function') {\n cb = mask;\n mask = undefined;\n }\n\n if (typeof data === 'number') data = data.toString();\n\n if (this.readyState !== WebSocket.OPEN) {\n sendAfterClose(this, data, cb);\n return;\n }\n\n if (mask === undefined) mask = !this._isServer;\n this._sender.pong(data || EMPTY_BUFFER, mask, cb);\n }\n\n /**\n * Resume the socket.\n *\n * @public\n */\n resume() {\n if (\n this.readyState === WebSocket.CONNECTING ||\n this.readyState === WebSocket.CLOSED\n ) {\n return;\n }\n\n this._paused = false;\n if (!this._receiver._writableState.needDrain) this._socket.resume();\n }\n\n /**\n * Send a data message.\n *\n * @param {*} data The message to send\n * @param {Object} [options] Options object\n * @param {Boolean} [options.binary] Specifies whether `data` is binary or\n * text\n * @param {Boolean} [options.compress] Specifies whether or not to compress\n * `data`\n * @param {Boolean} [options.fin=true] Specifies whether the fragment is the\n * last one\n * @param {Boolean} [options.mask] Specifies whether or not to mask `data`\n * @param {Function} [cb] Callback which is executed when data is written out\n * @public\n */\n send(data, options, cb) {\n if (this.readyState === WebSocket.CONNECTING) {\n throw new Error('WebSocket is not open: readyState 0 (CONNECTING)');\n }\n\n if (typeof options === 'function') {\n cb = options;\n options = {};\n }\n\n if (typeof data === 'number') data = data.toString();\n\n if (this.readyState !== WebSocket.OPEN) {\n sendAfterClose(this, data, cb);\n return;\n }\n\n const opts = {\n binary: typeof data !== 'string',\n mask: !this._isServer,\n compress: true,\n fin: true,\n ...options\n };\n\n if (!this._extensions[PerMessageDeflate.extensionName]) {\n opts.compress = false;\n }\n\n this._sender.send(data || EMPTY_BUFFER, opts, cb);\n }\n\n /**\n * Forcibly close the connection.\n *\n * @public\n */\n terminate() {\n if (this.readyState === WebSocket.CLOSED) return;\n if (this.readyState === WebSocket.CONNECTING) {\n const msg = 'WebSocket was closed before the connection was established';\n abortHandshake(this, this._req, msg);\n return;\n }\n\n if (this._socket) {\n this._readyState = WebSocket.CLOSING;\n this._socket.destroy();\n }\n }\n}\n\n/**\n * @constant {Number} CONNECTING\n * @memberof WebSocket\n */\nObject.defineProperty(WebSocket, 'CONNECTING', {\n enumerable: true,\n value: readyStates.indexOf('CONNECTING')\n});\n\n/**\n * @constant {Number} CONNECTING\n * @memberof WebSocket.prototype\n */\nObject.defineProperty(WebSocket.prototype, 'CONNECTING', {\n enumerable: true,\n value: readyStates.indexOf('CONNECTING')\n});\n\n/**\n * @constant {Number} OPEN\n * @memberof WebSocket\n */\nObject.defineProperty(WebSocket, 'OPEN', {\n enumerable: true,\n value: readyStates.indexOf('OPEN')\n});\n\n/**\n * @constant {Number} OPEN\n * @memberof WebSocket.prototype\n */\nObject.defineProperty(WebSocket.prototype, 'OPEN', {\n enumerable: true,\n value: readyStates.indexOf('OPEN')\n});\n\n/**\n * @constant {Number} CLOSING\n * @memberof WebSocket\n */\nObject.defineProperty(WebSocket, 'CLOSING', {\n enumerable: true,\n value: readyStates.indexOf('CLOSING')\n});\n\n/**\n * @constant {Number} CLOSING\n * @memberof WebSocket.prototype\n */\nObject.defineProperty(WebSocket.prototype, 'CLOSING', {\n enumerable: true,\n value: readyStates.indexOf('CLOSING')\n});\n\n/**\n * @constant {Number} CLOSED\n * @memberof WebSocket\n */\nObject.defineProperty(WebSocket, 'CLOSED', {\n enumerable: true,\n value: readyStates.indexOf('CLOSED')\n});\n\n/**\n * @constant {Number} CLOSED\n * @memberof WebSocket.prototype\n */\nObject.defineProperty(WebSocket.prototype, 'CLOSED', {\n enumerable: true,\n value: readyStates.indexOf('CLOSED')\n});\n\n[\n 'binaryType',\n 'bufferedAmount',\n 'extensions',\n 'isPaused',\n 'protocol',\n 'readyState',\n 'url'\n].forEach((property) => {\n Object.defineProperty(WebSocket.prototype, property, { enumerable: true });\n});\n\n//\n// Add the `onopen`, `onerror`, `onclose`, and `onmessage` attributes.\n// See https://html.spec.whatwg.org/multipage/comms.html#the-websocket-interface\n//\n['open', 'error', 'close', 'message'].forEach((method) => {\n Object.defineProperty(WebSocket.prototype, `on${method}`, {\n enumerable: true,\n get() {\n for (const listener of this.listeners(method)) {\n if (listener[kForOnEventAttribute]) return listener[kListener];\n }\n\n return null;\n },\n set(handler) {\n for (const listener of this.listeners(method)) {\n if (listener[kForOnEventAttribute]) {\n this.removeListener(method, listener);\n break;\n }\n }\n\n if (typeof handler !== 'function') return;\n\n this.addEventListener(method, handler, {\n [kForOnEventAttribute]: true\n });\n }\n });\n});\n\nWebSocket.prototype.addEventListener = addEventListener;\nWebSocket.prototype.removeEventListener = removeEventListener;\n\nmodule.exports = WebSocket;\n\n/**\n * Initialize a WebSocket client.\n *\n * @param {WebSocket} websocket The client to initialize\n * @param {(String|URL)} address The URL to which to connect\n * @param {Array} protocols The subprotocols\n * @param {Object} [options] Connection options\n * @param {Boolean} [options.allowSynchronousEvents=true] Specifies whether any\n * of the `'message'`, `'ping'`, and `'pong'` events can be emitted multiple\n * times in the same tick\n * @param {Boolean} [options.autoPong=true] Specifies whether or not to\n * automatically send a pong in response to a ping\n * @param {Number} [options.closeTimeout=30000] Duration in milliseconds to wait\n * for the closing handshake to finish after `websocket.close()` is called\n * @param {Function} [options.finishRequest] A function which can be used to\n * customize the headers of each http request before it is sent\n * @param {Boolean} [options.followRedirects=false] Whether or not to follow\n * redirects\n * @param {Function} [options.generateMask] The function used to generate the\n * masking key\n * @param {Number} [options.handshakeTimeout] Timeout in milliseconds for the\n * handshake request\n * @param {Number} [options.maxPayload=104857600] The maximum allowed message\n * size\n * @param {Number} [options.maxRedirects=10] The maximum number of redirects\n * allowed\n * @param {String} [options.origin] Value of the `Origin` or\n * `Sec-WebSocket-Origin` header\n * @param {(Boolean|Object)} [options.perMessageDeflate=true] Enable/disable\n * permessage-deflate\n * @param {Number} [options.protocolVersion=13] Value of the\n * `Sec-WebSocket-Version` header\n * @param {Boolean} [options.skipUTF8Validation=false] Specifies whether or\n * not to skip UTF-8 validation for text and close messages\n * @private\n */\nfunction initAsClient(websocket, address, protocols, options) {\n const opts = {\n allowSynchronousEvents: true,\n autoPong: true,\n closeTimeout: CLOSE_TIMEOUT,\n protocolVersion: protocolVersions[1],\n maxPayload: 100 * 1024 * 1024,\n skipUTF8Validation: false,\n perMessageDeflate: true,\n followRedirects: false,\n maxRedirects: 10,\n ...options,\n socketPath: undefined,\n hostname: undefined,\n protocol: undefined,\n timeout: undefined,\n method: 'GET',\n host: undefined,\n path: undefined,\n port: undefined\n };\n\n websocket._autoPong = opts.autoPong;\n websocket._closeTimeout = opts.closeTimeout;\n\n if (!protocolVersions.includes(opts.protocolVersion)) {\n throw new RangeError(\n `Unsupported protocol version: ${opts.protocolVersion} ` +\n `(supported versions: ${protocolVersions.join(', ')})`\n );\n }\n\n let parsedUrl;\n\n if (address instanceof URL) {\n parsedUrl = address;\n } else {\n try {\n parsedUrl = new URL(address);\n } catch (e) {\n throw new SyntaxError(`Invalid URL: ${address}`);\n }\n }\n\n if (parsedUrl.protocol === 'http:') {\n parsedUrl.protocol = 'ws:';\n } else if (parsedUrl.protocol === 'https:') {\n parsedUrl.protocol = 'wss:';\n }\n\n websocket._url = parsedUrl.href;\n\n const isSecure = parsedUrl.protocol === 'wss:';\n const isIpcUrl = parsedUrl.protocol === 'ws+unix:';\n let invalidUrlMessage;\n\n if (parsedUrl.protocol !== 'ws:' && !isSecure && !isIpcUrl) {\n invalidUrlMessage =\n 'The URL\\'s protocol must be one of \"ws:\", \"wss:\", ' +\n '\"http:\", \"https:\", or \"ws+unix:\"';\n } else if (isIpcUrl && !parsedUrl.pathname) {\n invalidUrlMessage = \"The URL's pathname is empty\";\n } else if (parsedUrl.hash) {\n invalidUrlMessage = 'The URL contains a fragment identifier';\n }\n\n if (invalidUrlMessage) {\n const err = new SyntaxError(invalidUrlMessage);\n\n if (websocket._redirects === 0) {\n throw err;\n } else {\n emitErrorAndClose(websocket, err);\n return;\n }\n }\n\n const defaultPort = isSecure ? 443 : 80;\n const key = randomBytes(16).toString('base64');\n const request = isSecure ? https.request : http.request;\n const protocolSet = new Set();\n let perMessageDeflate;\n\n opts.createConnection =\n opts.createConnection || (isSecure ? tlsConnect : netConnect);\n opts.defaultPort = opts.defaultPort || defaultPort;\n opts.port = parsedUrl.port || defaultPort;\n opts.host = parsedUrl.hostname.startsWith('[')\n ? parsedUrl.hostname.slice(1, -1)\n : parsedUrl.hostname;\n opts.headers = {\n ...opts.headers,\n 'Sec-WebSocket-Version': opts.protocolVersion,\n 'Sec-WebSocket-Key': key,\n Connection: 'Upgrade',\n Upgrade: 'websocket'\n };\n opts.path = parsedUrl.pathname + parsedUrl.search;\n opts.timeout = opts.handshakeTimeout;\n\n if (opts.perMessageDeflate) {\n perMessageDeflate = new PerMessageDeflate(\n opts.perMessageDeflate !== true ? opts.perMessageDeflate : {},\n false,\n opts.maxPayload\n );\n opts.headers['Sec-WebSocket-Extensions'] = format({\n [PerMessageDeflate.extensionName]: perMessageDeflate.offer()\n });\n }\n if (protocols.length) {\n for (const protocol of protocols) {\n if (\n typeof protocol !== 'string' ||\n !subprotocolRegex.test(protocol) ||\n protocolSet.has(protocol)\n ) {\n throw new SyntaxError(\n 'An invalid or duplicated subprotocol was specified'\n );\n }\n\n protocolSet.add(protocol);\n }\n\n opts.headers['Sec-WebSocket-Protocol'] = protocols.join(',');\n }\n if (opts.origin) {\n if (opts.protocolVersion < 13) {\n opts.headers['Sec-WebSocket-Origin'] = opts.origin;\n } else {\n opts.headers.Origin = opts.origin;\n }\n }\n if (parsedUrl.username || parsedUrl.password) {\n opts.auth = `${parsedUrl.username}:${parsedUrl.password}`;\n }\n\n if (isIpcUrl) {\n const parts = opts.path.split(':');\n\n opts.socketPath = parts[0];\n opts.path = parts[1];\n }\n\n let req;\n\n if (opts.followRedirects) {\n if (websocket._redirects === 0) {\n websocket._originalIpc = isIpcUrl;\n websocket._originalSecure = isSecure;\n websocket._originalHostOrSocketPath = isIpcUrl\n ? opts.socketPath\n : parsedUrl.host;\n\n const headers = options && options.headers;\n\n //\n // Shallow copy the user provided options so that headers can be changed\n // without mutating the original object.\n //\n options = { ...options, headers: {} };\n\n if (headers) {\n for (const [key, value] of Object.entries(headers)) {\n options.headers[key.toLowerCase()] = value;\n }\n }\n } else if (websocket.listenerCount('redirect') === 0) {\n const isSameHost = isIpcUrl\n ? websocket._originalIpc\n ? opts.socketPath === websocket._originalHostOrSocketPath\n : false\n : websocket._originalIpc\n ? false\n : parsedUrl.host === websocket._originalHostOrSocketPath;\n\n if (!isSameHost || (websocket._originalSecure && !isSecure)) {\n //\n // Match curl 7.77.0 behavior and drop the following headers. These\n // headers are also dropped when following a redirect to a subdomain.\n //\n delete opts.headers.authorization;\n delete opts.headers.cookie;\n\n if (!isSameHost) delete opts.headers.host;\n\n opts.auth = undefined;\n }\n }\n\n //\n // Match curl 7.77.0 behavior and make the first `Authorization` header win.\n // If the `Authorization` header is set, then there is nothing to do as it\n // will take precedence.\n //\n if (opts.auth && !options.headers.authorization) {\n options.headers.authorization =\n 'Basic ' + Buffer.from(opts.auth).toString('base64');\n }\n\n req = websocket._req = request(opts);\n\n if (websocket._redirects) {\n //\n // Unlike what is done for the `'upgrade'` event, no early exit is\n // triggered here if the user calls `websocket.close()` or\n // `websocket.terminate()` from a listener of the `'redirect'` event. This\n // is because the user can also call `request.destroy()` with an error\n // before calling `websocket.close()` or `websocket.terminate()` and this\n // would result in an error being emitted on the `request` object with no\n // `'error'` event listeners attached.\n //\n websocket.emit('redirect', websocket.url, req);\n }\n } else {\n req = websocket._req = request(opts);\n }\n\n if (opts.timeout) {\n req.on('timeout', () => {\n abortHandshake(websocket, req, 'Opening handshake has timed out');\n });\n }\n\n req.on('error', (err) => {\n if (req === null || req[kAborted]) return;\n\n req = websocket._req = null;\n emitErrorAndClose(websocket, err);\n });\n\n req.on('response', (res) => {\n const location = res.headers.location;\n const statusCode = res.statusCode;\n\n if (\n location &&\n opts.followRedirects &&\n statusCode >= 300 &&\n statusCode < 400\n ) {\n if (++websocket._redirects > opts.maxRedirects) {\n abortHandshake(websocket, req, 'Maximum redirects exceeded');\n return;\n }\n\n req.abort();\n\n let addr;\n\n try {\n addr = new URL(location, address);\n } catch (e) {\n const err = new SyntaxError(`Invalid URL: ${location}`);\n emitErrorAndClose(websocket, err);\n return;\n }\n\n initAsClient(websocket, addr, protocols, options);\n } else if (!websocket.emit('unexpected-response', req, res)) {\n abortHandshake(\n websocket,\n req,\n `Unexpected server response: ${res.statusCode}`\n );\n }\n });\n\n req.on('upgrade', (res, socket, head) => {\n websocket.emit('upgrade', res);\n\n //\n // The user may have closed the connection from a listener of the\n // `'upgrade'` event.\n //\n if (websocket.readyState !== WebSocket.CONNECTING) return;\n\n req = websocket._req = null;\n\n const upgrade = res.headers.upgrade;\n\n if (upgrade === undefined || upgrade.toLowerCase() !== 'websocket') {\n abortHandshake(websocket, socket, 'Invalid Upgrade header');\n return;\n }\n\n const digest = createHash('sha1')\n .update(key + GUID)\n .digest('base64');\n\n if (res.headers['sec-websocket-accept'] !== digest) {\n abortHandshake(websocket, socket, 'Invalid Sec-WebSocket-Accept header');\n return;\n }\n\n const serverProt = res.headers['sec-websocket-protocol'];\n let protError;\n\n if (serverProt !== undefined) {\n if (!protocolSet.size) {\n protError = 'Server sent a subprotocol but none was requested';\n } else if (!protocolSet.has(serverProt)) {\n protError = 'Server sent an invalid subprotocol';\n }\n } else if (protocolSet.size) {\n protError = 'Server sent no subprotocol';\n }\n\n if (protError) {\n abortHandshake(websocket, socket, protError);\n return;\n }\n\n if (serverProt) websocket._protocol = serverProt;\n\n const secWebSocketExtensions = res.headers['sec-websocket-extensions'];\n\n if (secWebSocketExtensions !== undefined) {\n if (!perMessageDeflate) {\n const message =\n 'Server sent a Sec-WebSocket-Extensions header but no extension ' +\n 'was requested';\n abortHandshake(websocket, socket, message);\n return;\n }\n\n let extensions;\n\n try {\n extensions = parse(secWebSocketExtensions);\n } catch (err) {\n const message = 'Invalid Sec-WebSocket-Extensions header';\n abortHandshake(websocket, socket, message);\n return;\n }\n\n const extensionNames = Object.keys(extensions);\n\n if (\n extensionNames.length !== 1 ||\n extensionNames[0] !== PerMessageDeflate.extensionName\n ) {\n const message = 'Server indicated an extension that was not requested';\n abortHandshake(websocket, socket, message);\n return;\n }\n\n try {\n perMessageDeflate.accept(extensions[PerMessageDeflate.extensionName]);\n } catch (err) {\n const message = 'Invalid Sec-WebSocket-Extensions header';\n abortHandshake(websocket, socket, message);\n return;\n }\n\n websocket._extensions[PerMessageDeflate.extensionName] =\n perMessageDeflate;\n }\n\n websocket.setSocket(socket, head, {\n allowSynchronousEvents: opts.allowSynchronousEvents,\n generateMask: opts.generateMask,\n maxPayload: opts.maxPayload,\n skipUTF8Validation: opts.skipUTF8Validation\n });\n });\n\n if (opts.finishRequest) {\n opts.finishRequest(req, websocket);\n } else {\n req.end();\n }\n}\n\n/**\n * Emit the `'error'` and `'close'` events.\n *\n * @param {WebSocket} websocket The WebSocket instance\n * @param {Error} The error to emit\n * @private\n */\nfunction emitErrorAndClose(websocket, err) {\n websocket._readyState = WebSocket.CLOSING;\n //\n // The following assignment is practically useless and is done only for\n // consistency.\n //\n websocket._errorEmitted = true;\n websocket.emit('error', err);\n websocket.emitClose();\n}\n\n/**\n * Create a `net.Socket` and initiate a connection.\n *\n * @param {Object} options Connection options\n * @return {net.Socket} The newly created socket used to start the connection\n * @private\n */\nfunction netConnect(options) {\n options.path = options.socketPath;\n return net.connect(options);\n}\n\n/**\n * Create a `tls.TLSSocket` and initiate a connection.\n *\n * @param {Object} options Connection options\n * @return {tls.TLSSocket} The newly created socket used to start the connection\n * @private\n */\nfunction tlsConnect(options) {\n options.path = undefined;\n\n if (!options.servername && options.servername !== '') {\n options.servername = net.isIP(options.host) ? '' : options.host;\n }\n\n return tls.connect(options);\n}\n\n/**\n * Abort the handshake and emit an error.\n *\n * @param {WebSocket} websocket The WebSocket instance\n * @param {(http.ClientRequest|net.Socket|tls.Socket)} stream The request to\n * abort or the socket to destroy\n * @param {String} message The error message\n * @private\n */\nfunction abortHandshake(websocket, stream, message) {\n websocket._readyState = WebSocket.CLOSING;\n\n const err = new Error(message);\n Error.captureStackTrace(err, abortHandshake);\n\n if (stream.setHeader) {\n stream[kAborted] = true;\n stream.abort();\n\n if (stream.socket && !stream.socket.destroyed) {\n //\n // On Node.js >= 14.3.0 `request.abort()` does not destroy the socket if\n // called after the request completed. See\n // https://github.com/websockets/ws/issues/1869.\n //\n stream.socket.destroy();\n }\n\n process.nextTick(emitErrorAndClose, websocket, err);\n } else {\n stream.destroy(err);\n stream.once('error', websocket.emit.bind(websocket, 'error'));\n stream.once('close', websocket.emitClose.bind(websocket));\n }\n}\n\n/**\n * Handle cases where the `ping()`, `pong()`, or `send()` methods are called\n * when the `readyState` attribute is `CLOSING` or `CLOSED`.\n *\n * @param {WebSocket} websocket The WebSocket instance\n * @param {*} [data] The data to send\n * @param {Function} [cb] Callback\n * @private\n */\nfunction sendAfterClose(websocket, data, cb) {\n if (data) {\n const length = isBlob(data) ? data.size : toBuffer(data).length;\n\n //\n // The `_bufferedAmount` property is used only when the peer is a client and\n // the opening handshake fails. Under these circumstances, in fact, the\n // `setSocket()` method is not called, so the `_socket` and `_sender`\n // properties are set to `null`.\n //\n if (websocket._socket) websocket._sender._bufferedBytes += length;\n else websocket._bufferedAmount += length;\n }\n\n if (cb) {\n const err = new Error(\n `WebSocket is not open: readyState ${websocket.readyState} ` +\n `(${readyStates[websocket.readyState]})`\n );\n process.nextTick(cb, err);\n }\n}\n\n/**\n * The listener of the `Receiver` `'conclude'` event.\n *\n * @param {Number} code The status code\n * @param {Buffer} reason The reason for closing\n * @private\n */\nfunction receiverOnConclude(code, reason) {\n const websocket = this[kWebSocket];\n\n websocket._closeFrameReceived = true;\n websocket._closeMessage = reason;\n websocket._closeCode = code;\n\n if (websocket._socket[kWebSocket] === undefined) return;\n\n websocket._socket.removeListener('data', socketOnData);\n process.nextTick(resume, websocket._socket);\n\n if (code === 1005) websocket.close();\n else websocket.close(code, reason);\n}\n\n/**\n * The listener of the `Receiver` `'drain'` event.\n *\n * @private\n */\nfunction receiverOnDrain() {\n const websocket = this[kWebSocket];\n\n if (!websocket.isPaused) websocket._socket.resume();\n}\n\n/**\n * The listener of the `Receiver` `'error'` event.\n *\n * @param {(RangeError|Error)} err The emitted error\n * @private\n */\nfunction receiverOnError(err) {\n const websocket = this[kWebSocket];\n\n if (websocket._socket[kWebSocket] !== undefined) {\n websocket._socket.removeListener('data', socketOnData);\n\n //\n // On Node.js < 14.0.0 the `'error'` event is emitted synchronously. See\n // https://github.com/websockets/ws/issues/1940.\n //\n process.nextTick(resume, websocket._socket);\n\n websocket.close(err[kStatusCode]);\n }\n\n if (!websocket._errorEmitted) {\n websocket._errorEmitted = true;\n websocket.emit('error', err);\n }\n}\n\n/**\n * The listener of the `Receiver` `'finish'` event.\n *\n * @private\n */\nfunction receiverOnFinish() {\n this[kWebSocket].emitClose();\n}\n\n/**\n * The listener of the `Receiver` `'message'` event.\n *\n * @param {Buffer|ArrayBuffer|Buffer[])} data The message\n * @param {Boolean} isBinary Specifies whether the message is binary or not\n * @private\n */\nfunction receiverOnMessage(data, isBinary) {\n this[kWebSocket].emit('message', data, isBinary);\n}\n\n/**\n * The listener of the `Receiver` `'ping'` event.\n *\n * @param {Buffer} data The data included in the ping frame\n * @private\n */\nfunction receiverOnPing(data) {\n const websocket = this[kWebSocket];\n\n if (websocket._autoPong) websocket.pong(data, !this._isServer, NOOP);\n websocket.emit('ping', data);\n}\n\n/**\n * The listener of the `Receiver` `'pong'` event.\n *\n * @param {Buffer} data The data included in the pong frame\n * @private\n */\nfunction receiverOnPong(data) {\n this[kWebSocket].emit('pong', data);\n}\n\n/**\n * Resume a readable stream\n *\n * @param {Readable} stream The readable stream\n * @private\n */\nfunction resume(stream) {\n stream.resume();\n}\n\n/**\n * The `Sender` error event handler.\n *\n * @param {Error} The error\n * @private\n */\nfunction senderOnError(err) {\n const websocket = this[kWebSocket];\n\n if (websocket.readyState === WebSocket.CLOSED) return;\n if (websocket.readyState === WebSocket.OPEN) {\n websocket._readyState = WebSocket.CLOSING;\n setCloseTimer(websocket);\n }\n\n //\n // `socket.end()` is used instead of `socket.destroy()` to allow the other\n // peer to finish sending queued data. There is no need to set a timer here\n // because `CLOSING` means that it is already set or not needed.\n //\n this._socket.end();\n\n if (!websocket._errorEmitted) {\n websocket._errorEmitted = true;\n websocket.emit('error', err);\n }\n}\n\n/**\n * Set a timer to destroy the underlying raw socket of a WebSocket.\n *\n * @param {WebSocket} websocket The WebSocket instance\n * @private\n */\nfunction setCloseTimer(websocket) {\n websocket._closeTimer = setTimeout(\n websocket._socket.destroy.bind(websocket._socket),\n websocket._closeTimeout\n );\n}\n\n/**\n * The listener of the socket `'close'` event.\n *\n * @private\n */\nfunction socketOnClose() {\n const websocket = this[kWebSocket];\n\n this.removeListener('close', socketOnClose);\n this.removeListener('data', socketOnData);\n this.removeListener('end', socketOnEnd);\n\n websocket._readyState = WebSocket.CLOSING;\n\n //\n // The close frame might not have been received or the `'end'` event emitted,\n // for example, if the socket was destroyed due to an error. Ensure that the\n // `receiver` stream is closed after writing any remaining buffered data to\n // it. If the readable side of the socket is in flowing mode then there is no\n // buffered data as everything has been already written. If instead, the\n // socket is paused, any possible buffered data will be read as a single\n // chunk.\n //\n if (\n !this._readableState.endEmitted &&\n !websocket._closeFrameReceived &&\n !websocket._receiver._writableState.errorEmitted &&\n this._readableState.length !== 0\n ) {\n const chunk = this.read(this._readableState.length);\n\n websocket._receiver.write(chunk);\n }\n\n websocket._receiver.end();\n\n this[kWebSocket] = undefined;\n\n clearTimeout(websocket._closeTimer);\n\n if (\n websocket._receiver._writableState.finished ||\n websocket._receiver._writableState.errorEmitted\n ) {\n websocket.emitClose();\n } else {\n websocket._receiver.on('error', receiverOnFinish);\n websocket._receiver.on('finish', receiverOnFinish);\n }\n}\n\n/**\n * The listener of the socket `'data'` event.\n *\n * @param {Buffer} chunk A chunk of data\n * @private\n */\nfunction socketOnData(chunk) {\n if (!this[kWebSocket]._receiver.write(chunk)) {\n this.pause();\n }\n}\n\n/**\n * The listener of the socket `'end'` event.\n *\n * @private\n */\nfunction socketOnEnd() {\n const websocket = this[kWebSocket];\n\n websocket._readyState = WebSocket.CLOSING;\n websocket._receiver.end();\n this.end();\n}\n\n/**\n * The listener of the socket `'error'` event.\n *\n * @private\n */\nfunction socketOnError() {\n const websocket = this[kWebSocket];\n\n this.removeListener('error', socketOnError);\n this.on('error', NOOP);\n\n if (websocket) {\n websocket._readyState = WebSocket.CLOSING;\n this.destroy();\n }\n}\n","/* eslint no-unused-vars: [\"error\", { \"varsIgnorePattern\": \"^WebSocket$\" }] */\n'use strict';\n\nconst WebSocket = require('./websocket');\nconst { Duplex } = require('stream');\n\n/**\n * Emits the `'close'` event on a stream.\n *\n * @param {Duplex} stream The stream.\n * @private\n */\nfunction emitClose(stream) {\n stream.emit('close');\n}\n\n/**\n * The listener of the `'end'` event.\n *\n * @private\n */\nfunction duplexOnEnd() {\n if (!this.destroyed && this._writableState.finished) {\n this.destroy();\n }\n}\n\n/**\n * The listener of the `'error'` event.\n *\n * @param {Error} err The error\n * @private\n */\nfunction duplexOnError(err) {\n this.removeListener('error', duplexOnError);\n this.destroy();\n if (this.listenerCount('error') === 0) {\n // Do not suppress the throwing behavior.\n this.emit('error', err);\n }\n}\n\n/**\n * Wraps a `WebSocket` in a duplex stream.\n *\n * @param {WebSocket} ws The `WebSocket` to wrap\n * @param {Object} [options] The options for the `Duplex` constructor\n * @return {Duplex} The duplex stream\n * @public\n */\nfunction createWebSocketStream(ws, options) {\n let terminateOnDestroy = true;\n\n const duplex = new Duplex({\n ...options,\n autoDestroy: false,\n emitClose: false,\n objectMode: false,\n writableObjectMode: false\n });\n\n ws.on('message', function message(msg, isBinary) {\n const data =\n !isBinary && duplex._readableState.objectMode ? msg.toString() : msg;\n\n if (!duplex.push(data)) ws.pause();\n });\n\n ws.once('error', function error(err) {\n if (duplex.destroyed) return;\n\n // Prevent `ws.terminate()` from being called by `duplex._destroy()`.\n //\n // - If the `'error'` event is emitted before the `'open'` event, then\n // `ws.terminate()` is a noop as no socket is assigned.\n // - Otherwise, the error is re-emitted by the listener of the `'error'`\n // event of the `Receiver` object. The listener already closes the\n // connection by calling `ws.close()`. This allows a close frame to be\n // sent to the other peer. If `ws.terminate()` is called right after this,\n // then the close frame might not be sent.\n terminateOnDestroy = false;\n duplex.destroy(err);\n });\n\n ws.once('close', function close() {\n if (duplex.destroyed) return;\n\n duplex.push(null);\n });\n\n duplex._destroy = function (err, callback) {\n if (ws.readyState === ws.CLOSED) {\n callback(err);\n process.nextTick(emitClose, duplex);\n return;\n }\n\n let called = false;\n\n ws.once('error', function error(err) {\n called = true;\n callback(err);\n });\n\n ws.once('close', function close() {\n if (!called) callback(err);\n process.nextTick(emitClose, duplex);\n });\n\n if (terminateOnDestroy) ws.terminate();\n };\n\n duplex._final = function (callback) {\n if (ws.readyState === ws.CONNECTING) {\n ws.once('open', function open() {\n duplex._final(callback);\n });\n return;\n }\n\n // If the value of the `_socket` property is `null` it means that `ws` is a\n // client websocket and the handshake failed. In fact, when this happens, a\n // socket is never assigned to the websocket. Wait for the `'error'` event\n // that will be emitted by the websocket.\n if (ws._socket === null) return;\n\n if (ws._socket._writableState.finished) {\n callback();\n if (duplex._readableState.endEmitted) duplex.destroy();\n } else {\n ws._socket.once('finish', function finish() {\n // `duplex` is not destroyed here because the `'end'` event will be\n // emitted on `duplex` after this `'finish'` event. The EOF signaling\n // `null` chunk is, in fact, pushed when the websocket emits `'close'`.\n callback();\n });\n ws.close();\n }\n };\n\n duplex._read = function () {\n if (ws.isPaused) ws.resume();\n };\n\n duplex._write = function (chunk, encoding, callback) {\n if (ws.readyState === ws.CONNECTING) {\n ws.once('open', function open() {\n duplex._write(chunk, encoding, callback);\n });\n return;\n }\n\n ws.send(chunk, callback);\n };\n\n duplex.on('end', duplexOnEnd);\n duplex.on('error', duplexOnError);\n return duplex;\n}\n\nmodule.exports = createWebSocketStream;\n","'use strict';\n\nconst { tokenChars } = require('./validation');\n\n/**\n * Parses the `Sec-WebSocket-Protocol` header into a set of subprotocol names.\n *\n * @param {String} header The field value of the header\n * @return {Set} The subprotocol names\n * @public\n */\nfunction parse(header) {\n const protocols = new Set();\n let start = -1;\n let end = -1;\n let i = 0;\n\n for (i; i < header.length; i++) {\n const code = header.charCodeAt(i);\n\n if (end === -1 && tokenChars[code] === 1) {\n if (start === -1) start = i;\n } else if (\n i !== 0 &&\n (code === 0x20 /* ' ' */ || code === 0x09) /* '\\t' */\n ) {\n if (end === -1 && start !== -1) end = i;\n } else if (code === 0x2c /* ',' */) {\n if (start === -1) {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n\n if (end === -1) end = i;\n\n const protocol = header.slice(start, end);\n\n if (protocols.has(protocol)) {\n throw new SyntaxError(`The \"${protocol}\" subprotocol is duplicated`);\n }\n\n protocols.add(protocol);\n start = end = -1;\n } else {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n }\n\n if (start === -1 || end !== -1) {\n throw new SyntaxError('Unexpected end of input');\n }\n\n const protocol = header.slice(start, i);\n\n if (protocols.has(protocol)) {\n throw new SyntaxError(`The \"${protocol}\" subprotocol is duplicated`);\n }\n\n protocols.add(protocol);\n return protocols;\n}\n\nmodule.exports = { parse };\n","/* eslint no-unused-vars: [\"error\", { \"varsIgnorePattern\": \"^Duplex$\", \"caughtErrors\": \"none\" }] */\n\n'use strict';\n\nconst EventEmitter = require('events');\nconst http = require('http');\nconst { Duplex } = require('stream');\nconst { createHash } = require('crypto');\n\nconst extension = require('./extension');\nconst PerMessageDeflate = require('./permessage-deflate');\nconst subprotocol = require('./subprotocol');\nconst WebSocket = require('./websocket');\nconst { CLOSE_TIMEOUT, GUID, kWebSocket } = require('./constants');\n\nconst keyRegex = /^[+/0-9A-Za-z]{22}==$/;\n\nconst RUNNING = 0;\nconst CLOSING = 1;\nconst CLOSED = 2;\n\n/**\n * Class representing a WebSocket server.\n *\n * @extends EventEmitter\n */\nclass WebSocketServer extends EventEmitter {\n /**\n * Create a `WebSocketServer` instance.\n *\n * @param {Object} options Configuration options\n * @param {Boolean} [options.allowSynchronousEvents=true] Specifies whether\n * any of the `'message'`, `'ping'`, and `'pong'` events can be emitted\n * multiple times in the same tick\n * @param {Boolean} [options.autoPong=true] Specifies whether or not to\n * automatically send a pong in response to a ping\n * @param {Number} [options.backlog=511] The maximum length of the queue of\n * pending connections\n * @param {Boolean} [options.clientTracking=true] Specifies whether or not to\n * track clients\n * @param {Number} [options.closeTimeout=30000] Duration in milliseconds to\n * wait for the closing handshake to finish after `websocket.close()` is\n * called\n * @param {Function} [options.handleProtocols] A hook to handle protocols\n * @param {String} [options.host] The hostname where to bind the server\n * @param {Number} [options.maxPayload=104857600] The maximum allowed message\n * size\n * @param {Boolean} [options.noServer=false] Enable no server mode\n * @param {String} [options.path] Accept only connections matching this path\n * @param {(Boolean|Object)} [options.perMessageDeflate=false] Enable/disable\n * permessage-deflate\n * @param {Number} [options.port] The port where to bind the server\n * @param {(http.Server|https.Server)} [options.server] A pre-created HTTP/S\n * server to use\n * @param {Boolean} [options.skipUTF8Validation=false] Specifies whether or\n * not to skip UTF-8 validation for text and close messages\n * @param {Function} [options.verifyClient] A hook to reject connections\n * @param {Function} [options.WebSocket=WebSocket] Specifies the `WebSocket`\n * class to use. It must be the `WebSocket` class or class that extends it\n * @param {Function} [callback] A listener for the `listening` event\n */\n constructor(options, callback) {\n super();\n\n options = {\n allowSynchronousEvents: true,\n autoPong: true,\n maxPayload: 100 * 1024 * 1024,\n skipUTF8Validation: false,\n perMessageDeflate: false,\n handleProtocols: null,\n clientTracking: true,\n closeTimeout: CLOSE_TIMEOUT,\n verifyClient: null,\n noServer: false,\n backlog: null, // use default (511 as implemented in net.js)\n server: null,\n host: null,\n path: null,\n port: null,\n WebSocket,\n ...options\n };\n\n if (\n (options.port == null && !options.server && !options.noServer) ||\n (options.port != null && (options.server || options.noServer)) ||\n (options.server && options.noServer)\n ) {\n throw new TypeError(\n 'One and only one of the \"port\", \"server\", or \"noServer\" options ' +\n 'must be specified'\n );\n }\n\n if (options.port != null) {\n this._server = http.createServer((req, res) => {\n const body = http.STATUS_CODES[426];\n\n res.writeHead(426, {\n 'Content-Length': body.length,\n 'Content-Type': 'text/plain'\n });\n res.end(body);\n });\n this._server.listen(\n options.port,\n options.host,\n options.backlog,\n callback\n );\n } else if (options.server) {\n this._server = options.server;\n }\n\n if (this._server) {\n const emitConnection = this.emit.bind(this, 'connection');\n\n this._removeListeners = addListeners(this._server, {\n listening: this.emit.bind(this, 'listening'),\n error: this.emit.bind(this, 'error'),\n upgrade: (req, socket, head) => {\n this.handleUpgrade(req, socket, head, emitConnection);\n }\n });\n }\n\n if (options.perMessageDeflate === true) options.perMessageDeflate = {};\n if (options.clientTracking) {\n this.clients = new Set();\n this._shouldEmitClose = false;\n }\n\n this.options = options;\n this._state = RUNNING;\n }\n\n /**\n * Returns the bound address, the address family name, and port of the server\n * as reported by the operating system if listening on an IP socket.\n * If the server is listening on a pipe or UNIX domain socket, the name is\n * returned as a string.\n *\n * @return {(Object|String|null)} The address of the server\n * @public\n */\n address() {\n if (this.options.noServer) {\n throw new Error('The server is operating in \"noServer\" mode');\n }\n\n if (!this._server) return null;\n return this._server.address();\n }\n\n /**\n * Stop the server from accepting new connections and emit the `'close'` event\n * when all existing connections are closed.\n *\n * @param {Function} [cb] A one-time listener for the `'close'` event\n * @public\n */\n close(cb) {\n if (this._state === CLOSED) {\n if (cb) {\n this.once('close', () => {\n cb(new Error('The server is not running'));\n });\n }\n\n process.nextTick(emitClose, this);\n return;\n }\n\n if (cb) this.once('close', cb);\n\n if (this._state === CLOSING) return;\n this._state = CLOSING;\n\n if (this.options.noServer || this.options.server) {\n if (this._server) {\n this._removeListeners();\n this._removeListeners = this._server = null;\n }\n\n if (this.clients) {\n if (!this.clients.size) {\n process.nextTick(emitClose, this);\n } else {\n this._shouldEmitClose = true;\n }\n } else {\n process.nextTick(emitClose, this);\n }\n } else {\n const server = this._server;\n\n this._removeListeners();\n this._removeListeners = this._server = null;\n\n //\n // The HTTP/S server was created internally. Close it, and rely on its\n // `'close'` event.\n //\n server.close(() => {\n emitClose(this);\n });\n }\n }\n\n /**\n * See if a given request should be handled by this server instance.\n *\n * @param {http.IncomingMessage} req Request object to inspect\n * @return {Boolean} `true` if the request is valid, else `false`\n * @public\n */\n shouldHandle(req) {\n if (this.options.path) {\n const index = req.url.indexOf('?');\n const pathname = index !== -1 ? req.url.slice(0, index) : req.url;\n\n if (pathname !== this.options.path) return false;\n }\n\n return true;\n }\n\n /**\n * Handle a HTTP Upgrade request.\n *\n * @param {http.IncomingMessage} req The request object\n * @param {Duplex} socket The network socket between the server and client\n * @param {Buffer} head The first packet of the upgraded stream\n * @param {Function} cb Callback\n * @public\n */\n handleUpgrade(req, socket, head, cb) {\n socket.on('error', socketOnError);\n\n const key = req.headers['sec-websocket-key'];\n const upgrade = req.headers.upgrade;\n const version = +req.headers['sec-websocket-version'];\n\n if (req.method !== 'GET') {\n const message = 'Invalid HTTP method';\n abortHandshakeOrEmitwsClientError(this, req, socket, 405, message);\n return;\n }\n\n if (upgrade === undefined || upgrade.toLowerCase() !== 'websocket') {\n const message = 'Invalid Upgrade header';\n abortHandshakeOrEmitwsClientError(this, req, socket, 400, message);\n return;\n }\n\n if (key === undefined || !keyRegex.test(key)) {\n const message = 'Missing or invalid Sec-WebSocket-Key header';\n abortHandshakeOrEmitwsClientError(this, req, socket, 400, message);\n return;\n }\n\n if (version !== 13 && version !== 8) {\n const message = 'Missing or invalid Sec-WebSocket-Version header';\n abortHandshakeOrEmitwsClientError(this, req, socket, 400, message, {\n 'Sec-WebSocket-Version': '13, 8'\n });\n return;\n }\n\n if (!this.shouldHandle(req)) {\n abortHandshake(socket, 400);\n return;\n }\n\n const secWebSocketProtocol = req.headers['sec-websocket-protocol'];\n let protocols = new Set();\n\n if (secWebSocketProtocol !== undefined) {\n try {\n protocols = subprotocol.parse(secWebSocketProtocol);\n } catch (err) {\n const message = 'Invalid Sec-WebSocket-Protocol header';\n abortHandshakeOrEmitwsClientError(this, req, socket, 400, message);\n return;\n }\n }\n\n const secWebSocketExtensions = req.headers['sec-websocket-extensions'];\n const extensions = {};\n\n if (\n this.options.perMessageDeflate &&\n secWebSocketExtensions !== undefined\n ) {\n const perMessageDeflate = new PerMessageDeflate(\n this.options.perMessageDeflate,\n true,\n this.options.maxPayload\n );\n\n try {\n const offers = extension.parse(secWebSocketExtensions);\n\n if (offers[PerMessageDeflate.extensionName]) {\n perMessageDeflate.accept(offers[PerMessageDeflate.extensionName]);\n extensions[PerMessageDeflate.extensionName] = perMessageDeflate;\n }\n } catch (err) {\n const message =\n 'Invalid or unacceptable Sec-WebSocket-Extensions header';\n abortHandshakeOrEmitwsClientError(this, req, socket, 400, message);\n return;\n }\n }\n\n //\n // Optionally call external client verification handler.\n //\n if (this.options.verifyClient) {\n const info = {\n origin:\n req.headers[`${version === 8 ? 'sec-websocket-origin' : 'origin'}`],\n secure: !!(req.socket.authorized || req.socket.encrypted),\n req\n };\n\n if (this.options.verifyClient.length === 2) {\n this.options.verifyClient(info, (verified, code, message, headers) => {\n if (!verified) {\n return abortHandshake(socket, code || 401, message, headers);\n }\n\n this.completeUpgrade(\n extensions,\n key,\n protocols,\n req,\n socket,\n head,\n cb\n );\n });\n return;\n }\n\n if (!this.options.verifyClient(info)) return abortHandshake(socket, 401);\n }\n\n this.completeUpgrade(extensions, key, protocols, req, socket, head, cb);\n }\n\n /**\n * Upgrade the connection to WebSocket.\n *\n * @param {Object} extensions The accepted extensions\n * @param {String} key The value of the `Sec-WebSocket-Key` header\n * @param {Set} protocols The subprotocols\n * @param {http.IncomingMessage} req The request object\n * @param {Duplex} socket The network socket between the server and client\n * @param {Buffer} head The first packet of the upgraded stream\n * @param {Function} cb Callback\n * @throws {Error} If called more than once with the same socket\n * @private\n */\n completeUpgrade(extensions, key, protocols, req, socket, head, cb) {\n //\n // Destroy the socket if the client has already sent a FIN packet.\n //\n if (!socket.readable || !socket.writable) return socket.destroy();\n\n if (socket[kWebSocket]) {\n throw new Error(\n 'server.handleUpgrade() was called more than once with the same ' +\n 'socket, possibly due to a misconfiguration'\n );\n }\n\n if (this._state > RUNNING) return abortHandshake(socket, 503);\n\n const digest = createHash('sha1')\n .update(key + GUID)\n .digest('base64');\n\n const headers = [\n 'HTTP/1.1 101 Switching Protocols',\n 'Upgrade: websocket',\n 'Connection: Upgrade',\n `Sec-WebSocket-Accept: ${digest}`\n ];\n\n const ws = new this.options.WebSocket(null, undefined, this.options);\n\n if (protocols.size) {\n //\n // Optionally call external protocol selection handler.\n //\n const protocol = this.options.handleProtocols\n ? this.options.handleProtocols(protocols, req)\n : protocols.values().next().value;\n\n if (protocol) {\n headers.push(`Sec-WebSocket-Protocol: ${protocol}`);\n ws._protocol = protocol;\n }\n }\n\n if (extensions[PerMessageDeflate.extensionName]) {\n const params = extensions[PerMessageDeflate.extensionName].params;\n const value = extension.format({\n [PerMessageDeflate.extensionName]: [params]\n });\n headers.push(`Sec-WebSocket-Extensions: ${value}`);\n ws._extensions = extensions;\n }\n\n //\n // Allow external modification/inspection of handshake headers.\n //\n this.emit('headers', headers, req);\n\n socket.write(headers.concat('\\r\\n').join('\\r\\n'));\n socket.removeListener('error', socketOnError);\n\n ws.setSocket(socket, head, {\n allowSynchronousEvents: this.options.allowSynchronousEvents,\n maxPayload: this.options.maxPayload,\n skipUTF8Validation: this.options.skipUTF8Validation\n });\n\n if (this.clients) {\n this.clients.add(ws);\n ws.on('close', () => {\n this.clients.delete(ws);\n\n if (this._shouldEmitClose && !this.clients.size) {\n process.nextTick(emitClose, this);\n }\n });\n }\n\n cb(ws, req);\n }\n}\n\nmodule.exports = WebSocketServer;\n\n/**\n * Add event listeners on an `EventEmitter` using a map of <event, listener>\n * pairs.\n *\n * @param {EventEmitter} server The event emitter\n * @param {Object.<String, Function>} map The listeners to add\n * @return {Function} A function that will remove the added listeners when\n * called\n * @private\n */\nfunction addListeners(server, map) {\n for (const event of Object.keys(map)) server.on(event, map[event]);\n\n return function removeListeners() {\n for (const event of Object.keys(map)) {\n server.removeListener(event, map[event]);\n }\n };\n}\n\n/**\n * Emit a `'close'` event on an `EventEmitter`.\n *\n * @param {EventEmitter} server The event emitter\n * @private\n */\nfunction emitClose(server) {\n server._state = CLOSED;\n server.emit('close');\n}\n\n/**\n * Handle socket errors.\n *\n * @private\n */\nfunction socketOnError() {\n this.destroy();\n}\n\n/**\n * Close the connection when preconditions are not fulfilled.\n *\n * @param {Duplex} socket The socket of the upgrade request\n * @param {Number} code The HTTP response status code\n * @param {String} [message] The HTTP response body\n * @param {Object} [headers] Additional HTTP response headers\n * @private\n */\nfunction abortHandshake(socket, code, message, headers) {\n //\n // The socket is writable unless the user destroyed or ended it before calling\n // `server.handleUpgrade()` or in the `verifyClient` function, which is a user\n // error. Handling this does not make much sense as the worst that can happen\n // is that some of the data written by the user might be discarded due to the\n // call to `socket.end()` below, which triggers an `'error'` event that in\n // turn causes the socket to be destroyed.\n //\n message = message || http.STATUS_CODES[code];\n headers = {\n Connection: 'close',\n 'Content-Type': 'text/html',\n 'Content-Length': Buffer.byteLength(message),\n ...headers\n };\n\n socket.once('finish', socket.destroy);\n\n socket.end(\n `HTTP/1.1 ${code} ${http.STATUS_CODES[code]}\\r\\n` +\n Object.keys(headers)\n .map((h) => `${h}: ${headers[h]}`)\n .join('\\r\\n') +\n '\\r\\n\\r\\n' +\n message\n );\n}\n\n/**\n * Emit a `'wsClientError'` event on a `WebSocketServer` if there is at least\n * one listener for it, otherwise call `abortHandshake()`.\n *\n * @param {WebSocketServer} server The WebSocket server\n * @param {http.IncomingMessage} req The request object\n * @param {Duplex} socket The socket of the upgrade request\n * @param {Number} code The HTTP response status code\n * @param {String} message The HTTP response body\n * @param {Object} [headers] The HTTP response headers\n * @private\n */\nfunction abortHandshakeOrEmitwsClientError(\n server,\n req,\n socket,\n code,\n message,\n headers\n) {\n if (server.listenerCount('wsClientError')) {\n const err = new Error(message);\n Error.captureStackTrace(err, abortHandshakeOrEmitwsClientError);\n\n server.emit('wsClientError', err, socket, req);\n } else {\n abortHandshake(socket, code, message, headers);\n }\n}\n","/**\n * Safely extract a message string from an unknown thrown value.\n *\n * TypeScript catch clauses type errors as `unknown` since v4. The common\n * workaround `(e as Error).message` is unsafe — if the thrown value is\n * a plain string, a number, or an object without a `message` property,\n * the cast is a lie and the result is `undefined`.\n *\n * Use this helper wherever you need a loggable string from a caught value.\n *\n * @param error - The caught value (typically from a catch clause)\n * @returns A human-readable error message string\n *\n * @example\n * try { ... } catch (e: unknown) {\n * log.error(`Something failed: ${toErrorMessage(e)}`);\n * }\n */\nexport function toErrorMessage(error: unknown): string {\n if (error instanceof Error) return error.message;\n if (typeof error === 'string') return error;\n return String(error);\n}\n","import type {\n ChannelProbeResult,\n CompleteTaskInput,\n MessagesResponse,\n RuntimeBootstrapConfig,\n Task,\n TaskSummary,\n TaskWithContext,\n WorkspaceState,\n WsTicketResponse,\n} from './types';\nimport { toErrorMessage } from './util.toErrorMessage';\n\n/**\n * HTTP client for the DeskFree bot API.\n * All endpoints use tRPC via HTTP POST/GET.\n */\n/** Default timeout for API requests (30 seconds). */\nconst DEFAULT_REQUEST_TIMEOUT_MS = 30_000;\n\n/** Enhanced error class for DeskFree API errors with user-friendly messages */\nexport class DeskFreeError extends Error {\n public readonly type:\n | 'network'\n | 'auth'\n | 'server'\n | 'client'\n | 'timeout'\n | 'invalid_response';\n public readonly statusCode?: number;\n public readonly userMessage: string;\n public readonly procedure: string;\n\n constructor(\n type: DeskFreeError['type'],\n procedure: string,\n message: string,\n userMessage: string,\n statusCode?: number,\n ) {\n super(message);\n this.name = 'DeskFreeError';\n this.type = type;\n this.procedure = procedure;\n this.userMessage = userMessage;\n this.statusCode = statusCode;\n }\n\n static fromResponse(\n response: Response,\n procedure: string,\n responseText: string,\n ): DeskFreeError {\n const status = response.status;\n const statusText = response.statusText;\n\n // Authentication errors\n if (status === 401) {\n return new DeskFreeError(\n 'auth',\n procedure,\n `Authentication failed: ${status} ${statusText} — ${responseText}`,\n 'Your bot token is invalid or has expired. Please check your authentication credentials.',\n status,\n );\n }\n\n if (status === 403) {\n return new DeskFreeError(\n 'auth',\n procedure,\n `Authorization failed: ${status} ${statusText} — ${responseText}`,\n 'Your bot does not have permission to perform this action. Contact your administrator.',\n status,\n );\n }\n\n // Client errors (4xx)\n if (status === 400) {\n return new DeskFreeError(\n 'client',\n procedure,\n `Bad request: ${status} ${statusText} — ${responseText}`,\n 'The request was invalid. Please check your input parameters and try again.',\n status,\n );\n }\n\n if (status === 404) {\n return new DeskFreeError(\n 'client',\n procedure,\n `Resource not found: ${status} ${statusText} — ${responseText}`,\n procedure.includes('task')\n ? 'The specified task was not found or is not available. Use deskfree_state to see available tasks.'\n : 'The requested resource was not found. Please check your input and try again.',\n status,\n );\n }\n\n if (status === 409) {\n return new DeskFreeError(\n 'client',\n procedure,\n `Conflict: ${status} ${statusText} — ${responseText}`,\n procedure.includes('start_task') || procedure.includes('claim')\n ? 'The resource is already in use by another process. Use deskfree_state to see current status and try a different resource.'\n : 'The request conflicts with the current state of the resource. Please refresh and try again.',\n status,\n );\n }\n\n if (status === 422) {\n return new DeskFreeError(\n 'client',\n procedure,\n `Validation failed: ${status} ${statusText} — ${responseText}`,\n 'The request data failed validation. Please check all required fields and data formats.',\n status,\n );\n }\n\n if (status === 429) {\n return new DeskFreeError(\n 'client',\n procedure,\n `Rate limit exceeded: ${status} ${statusText} — ${responseText}`,\n 'Too many requests. Please wait a moment before trying again.',\n status,\n );\n }\n\n // Server errors (5xx)\n if (status >= 500 && status < 600) {\n const serverErrorMessage =\n status === 502 || status === 503\n ? 'DeskFree service is temporarily unavailable due to maintenance or high load. Please try again in a few minutes.'\n : status === 504\n ? 'The request timed out on the server. This may be due to high load. Please try again with a smaller request or wait a few minutes.'\n : 'DeskFree service encountered an internal error. Please try again in a few minutes.';\n\n return new DeskFreeError(\n 'server',\n procedure,\n `Server error: ${status} ${statusText} — ${responseText}`,\n serverErrorMessage,\n status,\n );\n }\n\n // Other 4xx client errors\n if (status >= 400 && status < 500) {\n return new DeskFreeError(\n 'client',\n procedure,\n `Client error: ${status} ${statusText} — ${responseText}`,\n 'The request was not accepted by the server. Please check your input and try again.',\n status,\n );\n }\n\n // Fallback for unexpected status codes\n return new DeskFreeError(\n 'client',\n procedure,\n `HTTP error: ${status} ${statusText} — ${responseText}`,\n `Request failed with error ${status}. Please try again or contact support if the problem persists.`,\n status,\n );\n }\n\n static timeout(procedure: string, timeoutMs: number): DeskFreeError {\n return new DeskFreeError(\n 'timeout',\n procedure,\n `Request to ${procedure} timed out after ${timeoutMs}ms`,\n 'The request took too long to complete. Please check your network connection and try again.',\n );\n }\n\n static invalidResponse(procedure: string): DeskFreeError {\n return new DeskFreeError(\n 'invalid_response',\n procedure,\n `Invalid tRPC response structure for ${procedure}`,\n 'Received an unexpected response from the server. Please try again or contact support.',\n );\n }\n\n static network(procedure: string, originalError: Error): DeskFreeError {\n return new DeskFreeError(\n 'network',\n procedure,\n `Network error for ${procedure}: ${originalError.message}`,\n 'Unable to connect to DeskFree. Please check your internet connection and try again.',\n );\n }\n}\n\nexport class DeskFreeClient {\n private botToken: string;\n private apiUrl: string;\n private requestTimeoutMs: number;\n\n constructor(\n botToken: string,\n apiUrl: string,\n options?: { requestTimeoutMs?: number },\n ) {\n this.botToken = botToken;\n this.apiUrl = apiUrl.replace(/\\/$/, '');\n this.requestTimeoutMs =\n options?.requestTimeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS;\n }\n\n private async request<T>(\n method: 'GET' | 'POST',\n procedure: string,\n input?: unknown,\n ): Promise<T> {\n const url =\n method === 'GET' && input\n ? `${this.apiUrl}/${procedure}?input=${encodeURIComponent(JSON.stringify(input))}`\n : `${this.apiUrl}/${procedure}`;\n\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), this.requestTimeoutMs);\n\n try {\n const response = await fetch(url, {\n method,\n headers: {\n Authorization: `Bot ${this.botToken}`,\n 'Content-Type': 'application/json',\n },\n body: method === 'POST' ? JSON.stringify(input) : undefined,\n signal: controller.signal,\n });\n\n if (!response.ok) {\n const text = await response.text().catch((err) => {\n const errMsg = toErrorMessage(err);\n return `(failed to read response body: ${errMsg})`;\n });\n\n throw DeskFreeError.fromResponse(response, procedure, text);\n }\n\n const json = (await response.json()) as { result?: { data?: T } };\n\n // Validate tRPC response structure\n if (!json.result || json.result.data === undefined) {\n throw DeskFreeError.invalidResponse(procedure);\n }\n\n return json.result.data;\n } catch (err) {\n if (err instanceof DeskFreeError) {\n throw err;\n }\n\n if (err instanceof Error && err.name === 'AbortError') {\n throw DeskFreeError.timeout(procedure, this.requestTimeoutMs);\n }\n\n if (err instanceof Error) {\n // Network or other fetch errors\n throw DeskFreeError.network(procedure, err);\n }\n\n throw err;\n } finally {\n clearTimeout(timer);\n }\n }\n\n /**\n * Validates that a string parameter is non-empty.\n * Catches invalid inputs before they hit the network.\n */\n private requireNonEmpty(value: string, name: string): void {\n if (!value || value.trim() === '') {\n throw new DeskFreeError(\n 'client',\n name,\n `${name} is required and cannot be empty`,\n `Missing required parameter: ${name}. Please provide a valid value.`,\n );\n }\n }\n\n /**\n * Update an existing bot message content (for streaming).\n *\n * @param input - messageId, new content, and streaming flag\n */\n async updateMessage(input: {\n messageId: string;\n content: string;\n streaming?: boolean;\n }): Promise<{ messageId: string; content: string }> {\n return this.request('POST', 'messages.update', input);\n }\n\n /**\n * Send a streaming chunk (delta only) for an in-progress message.\n * Broadcasts delta over WS and stores full content in DynamoDB for crash recovery.\n */\n async streamChunk(input: {\n messageId: string;\n delta: string;\n fullContent: string;\n }): Promise<{ messageId: string }> {\n return this.request('POST', 'messages.streamChunk', input);\n }\n\n /**\n * Send a text message to a DeskFree conversation.\n *\n * @param input - Message content, optional userId, taskId, attachments\n */\n async sendMessage(input: {\n userId?: string;\n content: string;\n taskId?: string;\n messageType?: 'ask' | 'notify';\n attachments?: Array<{\n s3Key: string;\n name: string;\n contentType: string;\n size: number;\n }>;\n }): Promise<{ messageId: string; content: string }> {\n this.requireNonEmpty(input.content, 'content');\n return this.request('POST', 'messages.send', input);\n }\n\n /** Fetch paginated message history for a conversation. */\n async listMessages(input: {\n userId?: string;\n taskId?: string;\n cursor?: string | null;\n limit?: number;\n }): Promise<MessagesResponse> {\n if (input.limit !== undefined && (input.limit < 1 || input.limit > 100)) {\n throw new DeskFreeError(\n 'client',\n 'limit',\n 'limit must be between 1 and 100',\n 'The limit parameter must be between 1 and 100.',\n );\n }\n return this.request<MessagesResponse>('GET', 'messages.list', input);\n }\n\n /** Obtain a one-time WebSocket authentication ticket for real-time notifications. */\n async getWsTicket(): Promise<WsTicketResponse> {\n return this.request<WsTicketResponse>('POST', 'messages.wsTicket', {});\n }\n\n // ── Tasks ─────────────────────────────────────────────────\n\n /** Claim a task so the bot can begin working on it. Returns enriched context. */\n async claimTask(input: { taskId: string }): Promise<TaskWithContext> {\n this.requireNonEmpty(input.taskId, 'taskId');\n return this.request('POST', 'tasks.claim', input);\n }\n\n /** Fetch a lightweight task summary by ID. Read-only, no side effects. */\n async getTask(input: { taskId: string }): Promise<TaskSummary> {\n this.requireNonEmpty(input.taskId, 'taskId');\n return this.request<TaskSummary>('GET', 'tasks.get', input);\n }\n\n /** Read a file's full content by ID. */\n async getFile(input: { fileId: string }): Promise<{\n fileId: string;\n name: string;\n description: string;\n content: string;\n contentFormat: string;\n version: number;\n }> {\n this.requireNonEmpty(input.fileId, 'fileId');\n return this.request('GET', 'files.get', input);\n }\n\n /** Update the content of an existing file. */\n async updateFile(input: {\n fileId: string;\n content: string;\n contentFormat?: 'markdown' | 'html';\n taskId?: string;\n }): Promise<void> {\n this.requireNonEmpty(input.fileId, 'fileId');\n this.requireNonEmpty(input.content, 'content');\n return this.request('POST', 'files.update', input);\n }\n\n /** Create a new persistent file. */\n async createFile(input: {\n name: string;\n description?: string;\n content?: string;\n contentFormat?: 'markdown' | 'html';\n taskId?: string;\n }): Promise<{ fileId: string; name: string }> {\n this.requireNonEmpty(input.name, 'name');\n return this.request('POST', 'files.create', input);\n }\n\n /** List all files for this bot (metadata only, no content). */\n async listFiles(): Promise<\n Array<{\n fileId: string;\n name: string;\n description: string;\n contentFormat: string;\n version: number;\n updatedAt: string;\n }>\n > {\n return this.request('GET', 'files.list', {});\n }\n\n /** Report error log entries to the backend for CloudWatch/Slack visibility. */\n async reportError(input: {\n errors: Array<{\n message: string;\n level: 'warn' | 'error' | 'fatal';\n timestamp: string;\n metadata?: Record<string, unknown>;\n }>;\n }): Promise<{ accepted: number }> {\n return this.request('POST', 'agent.reportError', input);\n }\n\n /** Get full workspace snapshot — active tasks and recently done. */\n async getState(): Promise<WorkspaceState> {\n return this.request('GET', 'state.get', {});\n }\n\n /** Report cost for a task. Atomically increments the estimated cost. */\n async reportUsage(input: {\n taskId: string;\n estimatedCost: number;\n }): Promise<{ success: boolean }> {\n this.requireNonEmpty(input.taskId, 'taskId');\n return this.request('POST', 'tasks.reportUsage', input);\n }\n\n /** Complete a task. Marks it as done. */\n async completeTask(input: CompleteTaskInput): Promise<Task> {\n this.requireNonEmpty(input.taskId, 'taskId');\n return this.request('POST', 'tasks.complete', input);\n }\n\n /** Reopen a completed/human task back to bot status for further work. */\n async reopenTask(input: { taskId: string; reason?: string }): Promise<Task> {\n this.requireNonEmpty(input.taskId, 'taskId');\n return this.request('POST', 'tasks.reopen', input);\n }\n\n /** Snooze a task until a specified time. Task is hidden from active queues until then. */\n async snoozeTask(input: {\n taskId: string;\n scheduledFor: string;\n initiator: 'human_request' | 'bot_decision';\n reason: string;\n }): Promise<Task> {\n this.requireNonEmpty(input.taskId, 'taskId');\n this.requireNonEmpty(input.scheduledFor, 'scheduledFor');\n this.requireNonEmpty(input.reason, 'reason');\n return this.request('POST', 'tasks.snooze', input);\n }\n\n /** Unsnooze a task, making it immediately active before the snooze expires. */\n async unsnoozeTask(input: { taskId: string }): Promise<Task> {\n this.requireNonEmpty(input.taskId, 'taskId');\n return this.request('POST', 'tasks.unsnooze', input);\n }\n\n /** Report a learning observation from a worker task. Posts a system message in the task thread. */\n async reportLearning(input: {\n content: string;\n taskId?: string;\n }): Promise<{ success: boolean }> {\n this.requireNonEmpty(input.content, 'content');\n return this.request('POST', 'tasks.learning', input);\n }\n\n /** Propose a plan — creates a proposal message with plan metadata. No DB rows until human approves. */\n async proposePlan(input: {\n tasks: Array<{\n title?: string;\n instructions?: string;\n estimatedTokens?: number;\n scheduledFor?: string;\n inputFileIds?: string[];\n outputFileIds?: string[];\n }>;\n context?: string;\n taskId?: string;\n }): Promise<{ messageId: string }> {\n if (!input.tasks || input.tasks.length === 0) {\n throw new DeskFreeError(\n 'client',\n 'tasks',\n 'tasks array is required and cannot be empty',\n 'Missing required parameter: tasks.',\n );\n }\n return this.request('POST', 'tasks.propose', input);\n }\n\n /**\n * Fetch runtime bootstrap config from the backend.\n * Returns everything the runtime needs beyond token + apiUrl:\n * wsUrl, model, region, heartbeat interval, tools.\n */\n async getConfig(): Promise<RuntimeBootstrapConfig> {\n return this.request<RuntimeBootstrapConfig>('GET', 'config.get', {});\n }\n\n /**\n * Lightweight health check that verifies connectivity and authentication.\n *\n * @param timeoutMs - Maximum time to wait for the probe response\n * @returns Probe result indicating success or a descriptive error\n */\n async probe(timeoutMs: number): Promise<ChannelProbeResult> {\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), timeoutMs);\n\n try {\n const response = await fetch(\n `${this.apiUrl}/state.get?input=${encodeURIComponent(JSON.stringify({}))}`,\n {\n method: 'GET',\n headers: {\n Authorization: `Bot ${this.botToken}`,\n 'Content-Type': 'application/json',\n },\n signal: controller.signal,\n },\n );\n\n if (!response.ok) {\n // Provide more user-friendly probe error messages\n if (response.status === 401 || response.status === 403) {\n return {\n ok: false,\n error: 'Authentication failed - check bot token',\n };\n }\n if (response.status >= 500) {\n return { ok: false, error: 'DeskFree server unavailable' };\n }\n return {\n ok: false,\n error: `HTTP ${response.status} - ${response.statusText}`,\n };\n }\n\n return { ok: true };\n } catch (err) {\n if (err instanceof Error && err.name === 'AbortError') {\n return { ok: false, error: `Connection timeout after ${timeoutMs}ms` };\n }\n\n const message = toErrorMessage(err);\n // Simplify network errors for probe results\n if (message.includes('fetch')) {\n return { ok: false, error: 'Network connection failed' };\n }\n\n return { ok: false, error: message };\n } finally {\n clearTimeout(timer);\n }\n }\n}\n","// --------------------------------------------------------------------------\n// PropertyKey\n// --------------------------------------------------------------------------\n/** Returns true if this value has this property key */\nexport function HasPropertyKey(value, key) {\n return key in value;\n}\n// --------------------------------------------------------------------------\n// Object Instances\n// --------------------------------------------------------------------------\n/** Returns true if this value is an async iterator */\nexport function IsAsyncIterator(value) {\n return IsObject(value) && !IsArray(value) && !IsUint8Array(value) && Symbol.asyncIterator in value;\n}\n/** Returns true if this value is an array */\nexport function IsArray(value) {\n return Array.isArray(value);\n}\n/** Returns true if this value is bigint */\nexport function IsBigInt(value) {\n return typeof value === 'bigint';\n}\n/** Returns true if this value is a boolean */\nexport function IsBoolean(value) {\n return typeof value === 'boolean';\n}\n/** Returns true if this value is a Date object */\nexport function IsDate(value) {\n return value instanceof globalThis.Date;\n}\n/** Returns true if this value is a function */\nexport function IsFunction(value) {\n return typeof value === 'function';\n}\n/** Returns true if this value is an iterator */\nexport function IsIterator(value) {\n return IsObject(value) && !IsArray(value) && !IsUint8Array(value) && Symbol.iterator in value;\n}\n/** Returns true if this value is null */\nexport function IsNull(value) {\n return value === null;\n}\n/** Returns true if this value is number */\nexport function IsNumber(value) {\n return typeof value === 'number';\n}\n/** Returns true if this value is an object */\nexport function IsObject(value) {\n return typeof value === 'object' && value !== null;\n}\n/** Returns true if this value is RegExp */\nexport function IsRegExp(value) {\n return value instanceof globalThis.RegExp;\n}\n/** Returns true if this value is string */\nexport function IsString(value) {\n return typeof value === 'string';\n}\n/** Returns true if this value is symbol */\nexport function IsSymbol(value) {\n return typeof value === 'symbol';\n}\n/** Returns true if this value is a Uint8Array */\nexport function IsUint8Array(value) {\n return value instanceof globalThis.Uint8Array;\n}\n/** Returns true if this value is undefined */\nexport function IsUndefined(value) {\n return value === undefined;\n}\n","import * as ValueGuard from '../guard/value.mjs';\nfunction ArrayType(value) {\n return value.map((value) => Visit(value));\n}\nfunction DateType(value) {\n return new Date(value.getTime());\n}\nfunction Uint8ArrayType(value) {\n return new Uint8Array(value);\n}\nfunction RegExpType(value) {\n return new RegExp(value.source, value.flags);\n}\nfunction ObjectType(value) {\n const result = {};\n for (const key of Object.getOwnPropertyNames(value)) {\n result[key] = Visit(value[key]);\n }\n for (const key of Object.getOwnPropertySymbols(value)) {\n result[key] = Visit(value[key]);\n }\n return result;\n}\n// prettier-ignore\nfunction Visit(value) {\n return (ValueGuard.IsArray(value) ? ArrayType(value) :\n ValueGuard.IsDate(value) ? DateType(value) :\n ValueGuard.IsUint8Array(value) ? Uint8ArrayType(value) :\n ValueGuard.IsRegExp(value) ? RegExpType(value) :\n ValueGuard.IsObject(value) ? ObjectType(value) :\n value);\n}\n/** Clones a value */\nexport function Clone(value) {\n return Visit(value);\n}\n","import { Clone } from './value.mjs';\n/** Clones a Rest */\nexport function CloneRest(schemas) {\n return schemas.map((schema) => CloneType(schema));\n}\n/** Clones a Type */\nexport function CloneType(schema, options) {\n return options === undefined ? Clone(schema) : Clone({ ...options, ...schema });\n}\n","// --------------------------------------------------------------------------\n// Iterators\n// --------------------------------------------------------------------------\n/** Returns true if this value is an async iterator */\nexport function IsAsyncIterator(value) {\n return IsObject(value) && globalThis.Symbol.asyncIterator in value;\n}\n/** Returns true if this value is an iterator */\nexport function IsIterator(value) {\n return IsObject(value) && globalThis.Symbol.iterator in value;\n}\n// --------------------------------------------------------------------------\n// Object Instances\n// --------------------------------------------------------------------------\n/** Returns true if this value is not an instance of a class */\nexport function IsStandardObject(value) {\n return IsObject(value) && (globalThis.Object.getPrototypeOf(value) === Object.prototype || globalThis.Object.getPrototypeOf(value) === null);\n}\n/** Returns true if this value is an instance of a class */\nexport function IsInstanceObject(value) {\n return IsObject(value) && !IsArray(value) && IsFunction(value.constructor) && value.constructor.name !== 'Object';\n}\n// --------------------------------------------------------------------------\n// JavaScript\n// --------------------------------------------------------------------------\n/** Returns true if this value is a Promise */\nexport function IsPromise(value) {\n return value instanceof globalThis.Promise;\n}\n/** Returns true if this value is a Date */\nexport function IsDate(value) {\n return value instanceof Date && globalThis.Number.isFinite(value.getTime());\n}\n/** Returns true if this value is an instance of Map<K, T> */\nexport function IsMap(value) {\n return value instanceof globalThis.Map;\n}\n/** Returns true if this value is an instance of Set<T> */\nexport function IsSet(value) {\n return value instanceof globalThis.Set;\n}\n/** Returns true if this value is RegExp */\nexport function IsRegExp(value) {\n return value instanceof globalThis.RegExp;\n}\n/** Returns true if this value is a typed array */\nexport function IsTypedArray(value) {\n return globalThis.ArrayBuffer.isView(value);\n}\n/** Returns true if the value is a Int8Array */\nexport function IsInt8Array(value) {\n return value instanceof globalThis.Int8Array;\n}\n/** Returns true if the value is a Uint8Array */\nexport function IsUint8Array(value) {\n return value instanceof globalThis.Uint8Array;\n}\n/** Returns true if the value is a Uint8ClampedArray */\nexport function IsUint8ClampedArray(value) {\n return value instanceof globalThis.Uint8ClampedArray;\n}\n/** Returns true if the value is a Int16Array */\nexport function IsInt16Array(value) {\n return value instanceof globalThis.Int16Array;\n}\n/** Returns true if the value is a Uint16Array */\nexport function IsUint16Array(value) {\n return value instanceof globalThis.Uint16Array;\n}\n/** Returns true if the value is a Int32Array */\nexport function IsInt32Array(value) {\n return value instanceof globalThis.Int32Array;\n}\n/** Returns true if the value is a Uint32Array */\nexport function IsUint32Array(value) {\n return value instanceof globalThis.Uint32Array;\n}\n/** Returns true if the value is a Float32Array */\nexport function IsFloat32Array(value) {\n return value instanceof globalThis.Float32Array;\n}\n/** Returns true if the value is a Float64Array */\nexport function IsFloat64Array(value) {\n return value instanceof globalThis.Float64Array;\n}\n/** Returns true if the value is a BigInt64Array */\nexport function IsBigInt64Array(value) {\n return value instanceof globalThis.BigInt64Array;\n}\n/** Returns true if the value is a BigUint64Array */\nexport function IsBigUint64Array(value) {\n return value instanceof globalThis.BigUint64Array;\n}\n// --------------------------------------------------------------------------\n// PropertyKey\n// --------------------------------------------------------------------------\n/** Returns true if this value has this property key */\nexport function HasPropertyKey(value, key) {\n return key in value;\n}\n// --------------------------------------------------------------------------\n// Standard\n// --------------------------------------------------------------------------\n/** Returns true of this value is an object type */\nexport function IsObject(value) {\n return value !== null && typeof value === 'object';\n}\n/** Returns true if this value is an array, but not a typed array */\nexport function IsArray(value) {\n return globalThis.Array.isArray(value) && !globalThis.ArrayBuffer.isView(value);\n}\n/** Returns true if this value is an undefined */\nexport function IsUndefined(value) {\n return value === undefined;\n}\n/** Returns true if this value is an null */\nexport function IsNull(value) {\n return value === null;\n}\n/** Returns true if this value is an boolean */\nexport function IsBoolean(value) {\n return typeof value === 'boolean';\n}\n/** Returns true if this value is an number */\nexport function IsNumber(value) {\n return typeof value === 'number';\n}\n/** Returns true if this value is an integer */\nexport function IsInteger(value) {\n return globalThis.Number.isInteger(value);\n}\n/** Returns true if this value is bigint */\nexport function IsBigInt(value) {\n return typeof value === 'bigint';\n}\n/** Returns true if this value is string */\nexport function IsString(value) {\n return typeof value === 'string';\n}\n/** Returns true if this value is a function */\nexport function IsFunction(value) {\n return typeof value === 'function';\n}\n/** Returns true if this value is a symbol */\nexport function IsSymbol(value) {\n return typeof value === 'symbol';\n}\n/** Returns true if this value is a value type such as number, string, boolean */\nexport function IsValueType(value) {\n // prettier-ignore\n return (IsBigInt(value) ||\n IsBoolean(value) ||\n IsNull(value) ||\n IsNumber(value) ||\n IsString(value) ||\n IsSymbol(value) ||\n IsUndefined(value));\n}\n","import { IsObject, IsArray, IsNumber, IsUndefined } from '../value/guard/index.mjs';\nexport var TypeSystemPolicy;\n(function (TypeSystemPolicy) {\n // ------------------------------------------------------------------\n // TypeSystemPolicy: Instancing\n // ------------------------------------------------------------------\n /**\n * Configures the instantiation behavior of TypeBox types. The `default` option assigns raw JavaScript\n * references for embedded types, which may cause side effects if type properties are explicitly updated\n * outside the TypeBox type builder. The `clone` option creates copies of any shared types upon creation,\n * preventing unintended side effects. The `freeze` option applies `Object.freeze()` to the type, making\n * it fully readonly and immutable. Implementations should use `default` whenever possible, as it is the\n * fastest way to instantiate types. The default setting is `default`.\n */\n TypeSystemPolicy.InstanceMode = 'default';\n // ------------------------------------------------------------------\n // TypeSystemPolicy: Checking\n // ------------------------------------------------------------------\n /** Sets whether TypeBox should assert optional properties using the TypeScript `exactOptionalPropertyTypes` assertion policy. The default is `false` */\n TypeSystemPolicy.ExactOptionalPropertyTypes = false;\n /** Sets whether arrays should be treated as a kind of objects. The default is `false` */\n TypeSystemPolicy.AllowArrayObject = false;\n /** Sets whether `NaN` or `Infinity` should be treated as valid numeric values. The default is `false` */\n TypeSystemPolicy.AllowNaN = false;\n /** Sets whether `null` should validate for void types. The default is `false` */\n TypeSystemPolicy.AllowNullVoid = false;\n /** Checks this value using the ExactOptionalPropertyTypes policy */\n function IsExactOptionalProperty(value, key) {\n return TypeSystemPolicy.ExactOptionalPropertyTypes ? key in value : value[key] !== undefined;\n }\n TypeSystemPolicy.IsExactOptionalProperty = IsExactOptionalProperty;\n /** Checks this value using the AllowArrayObjects policy */\n function IsObjectLike(value) {\n const isObject = IsObject(value);\n return TypeSystemPolicy.AllowArrayObject ? isObject : isObject && !IsArray(value);\n }\n TypeSystemPolicy.IsObjectLike = IsObjectLike;\n /** Checks this value as a record using the AllowArrayObjects policy */\n function IsRecordLike(value) {\n return IsObjectLike(value) && !(value instanceof Date) && !(value instanceof Uint8Array);\n }\n TypeSystemPolicy.IsRecordLike = IsRecordLike;\n /** Checks this value using the AllowNaN policy */\n function IsNumberLike(value) {\n return TypeSystemPolicy.AllowNaN ? IsNumber(value) : Number.isFinite(value);\n }\n TypeSystemPolicy.IsNumberLike = IsNumberLike;\n /** Checks this value using the AllowVoidNull policy */\n function IsVoidLike(value) {\n const isUndefined = IsUndefined(value);\n return TypeSystemPolicy.AllowNullVoid ? isUndefined || value === null : isUndefined;\n }\n TypeSystemPolicy.IsVoidLike = IsVoidLike;\n})(TypeSystemPolicy || (TypeSystemPolicy = {}));\n","import * as ValueGuard from '../guard/value.mjs';\nfunction ImmutableArray(value) {\n return globalThis.Object.freeze(value).map((value) => Immutable(value));\n}\nfunction ImmutableDate(value) {\n return value;\n}\nfunction ImmutableUint8Array(value) {\n return value;\n}\nfunction ImmutableRegExp(value) {\n return value;\n}\nfunction ImmutableObject(value) {\n const result = {};\n for (const key of Object.getOwnPropertyNames(value)) {\n result[key] = Immutable(value[key]);\n }\n for (const key of Object.getOwnPropertySymbols(value)) {\n result[key] = Immutable(value[key]);\n }\n return globalThis.Object.freeze(result);\n}\n/** Specialized deep immutable value. Applies freeze recursively to the given value */\n// prettier-ignore\nexport function Immutable(value) {\n return (ValueGuard.IsArray(value) ? ImmutableArray(value) :\n ValueGuard.IsDate(value) ? ImmutableDate(value) :\n ValueGuard.IsUint8Array(value) ? ImmutableUint8Array(value) :\n ValueGuard.IsRegExp(value) ? ImmutableRegExp(value) :\n ValueGuard.IsObject(value) ? ImmutableObject(value) :\n value);\n}\n","import { TypeSystemPolicy } from '../../system/policy.mjs';\nimport { Immutable } from './immutable.mjs';\nimport { Clone } from '../clone/value.mjs';\n/** Creates TypeBox schematics using the configured InstanceMode */\nexport function CreateType(schema, options) {\n const result = options !== undefined ? { ...options, ...schema } : schema;\n switch (TypeSystemPolicy.InstanceMode) {\n case 'freeze':\n return Immutable(result);\n case 'clone':\n return Clone(result);\n default:\n return result;\n }\n}\n","/** The base Error type thrown for all TypeBox exceptions */\nexport class TypeBoxError extends Error {\n constructor(message) {\n super(message);\n }\n}\n","/** Symbol key applied to transform types */\nexport const TransformKind = Symbol.for('TypeBox.Transform');\n/** Symbol key applied to readonly types */\nexport const ReadonlyKind = Symbol.for('TypeBox.Readonly');\n/** Symbol key applied to optional types */\nexport const OptionalKind = Symbol.for('TypeBox.Optional');\n/** Symbol key applied to types */\nexport const Hint = Symbol.for('TypeBox.Hint');\n/** Symbol key applied to types */\nexport const Kind = Symbol.for('TypeBox.Kind');\n","import * as ValueGuard from './value.mjs';\nimport { Kind, Hint, TransformKind, ReadonlyKind, OptionalKind } from '../symbols/index.mjs';\n/** `[Kind-Only]` Returns true if this value has a Readonly symbol */\nexport function IsReadonly(value) {\n return ValueGuard.IsObject(value) && value[ReadonlyKind] === 'Readonly';\n}\n/** `[Kind-Only]` Returns true if this value has a Optional symbol */\nexport function IsOptional(value) {\n return ValueGuard.IsObject(value) && value[OptionalKind] === 'Optional';\n}\n/** `[Kind-Only]` Returns true if the given value is TAny */\nexport function IsAny(value) {\n return IsKindOf(value, 'Any');\n}\n/** `[Kind-Only]` Returns true if the given value is TArgument */\nexport function IsArgument(value) {\n return IsKindOf(value, 'Argument');\n}\n/** `[Kind-Only]` Returns true if the given value is TArray */\nexport function IsArray(value) {\n return IsKindOf(value, 'Array');\n}\n/** `[Kind-Only]` Returns true if the given value is TAsyncIterator */\nexport function IsAsyncIterator(value) {\n return IsKindOf(value, 'AsyncIterator');\n}\n/** `[Kind-Only]` Returns true if the given value is TBigInt */\nexport function IsBigInt(value) {\n return IsKindOf(value, 'BigInt');\n}\n/** `[Kind-Only]` Returns true if the given value is TBoolean */\nexport function IsBoolean(value) {\n return IsKindOf(value, 'Boolean');\n}\n/** `[Kind-Only]` Returns true if the given value is TComputed */\nexport function IsComputed(value) {\n return IsKindOf(value, 'Computed');\n}\n/** `[Kind-Only]` Returns true if the given value is TConstructor */\nexport function IsConstructor(value) {\n return IsKindOf(value, 'Constructor');\n}\n/** `[Kind-Only]` Returns true if the given value is TDate */\nexport function IsDate(value) {\n return IsKindOf(value, 'Date');\n}\n/** `[Kind-Only]` Returns true if the given value is TFunction */\nexport function IsFunction(value) {\n return IsKindOf(value, 'Function');\n}\n/** `[Kind-Only]` Returns true if the given value is TInteger */\nexport function IsImport(value) {\n return IsKindOf(value, 'Import');\n}\n/** `[Kind-Only]` Returns true if the given value is TInteger */\nexport function IsInteger(value) {\n return IsKindOf(value, 'Integer');\n}\n/** `[Kind-Only]` Returns true if the given schema is TProperties */\nexport function IsProperties(value) {\n return ValueGuard.IsObject(value);\n}\n/** `[Kind-Only]` Returns true if the given value is TIntersect */\nexport function IsIntersect(value) {\n return IsKindOf(value, 'Intersect');\n}\n/** `[Kind-Only]` Returns true if the given value is TIterator */\nexport function IsIterator(value) {\n return IsKindOf(value, 'Iterator');\n}\n/** `[Kind-Only]` Returns true if the given value is a TKind with the given name. */\nexport function IsKindOf(value, kind) {\n return ValueGuard.IsObject(value) && Kind in value && value[Kind] === kind;\n}\n/** `[Kind-Only]` Returns true if the given value is TLiteral<string> */\nexport function IsLiteralString(value) {\n return IsLiteral(value) && ValueGuard.IsString(value.const);\n}\n/** `[Kind-Only]` Returns true if the given value is TLiteral<number> */\nexport function IsLiteralNumber(value) {\n return IsLiteral(value) && ValueGuard.IsNumber(value.const);\n}\n/** `[Kind-Only]` Returns true if the given value is TLiteral<boolean> */\nexport function IsLiteralBoolean(value) {\n return IsLiteral(value) && ValueGuard.IsBoolean(value.const);\n}\n/** `[Kind-Only]` Returns true if the given value is TLiteralValue */\nexport function IsLiteralValue(value) {\n return ValueGuard.IsBoolean(value) || ValueGuard.IsNumber(value) || ValueGuard.IsString(value);\n}\n/** `[Kind-Only]` Returns true if the given value is TLiteral */\nexport function IsLiteral(value) {\n return IsKindOf(value, 'Literal');\n}\n/** `[Kind-Only]` Returns true if the given value is a TMappedKey */\nexport function IsMappedKey(value) {\n return IsKindOf(value, 'MappedKey');\n}\n/** `[Kind-Only]` Returns true if the given value is TMappedResult */\nexport function IsMappedResult(value) {\n return IsKindOf(value, 'MappedResult');\n}\n/** `[Kind-Only]` Returns true if the given value is TNever */\nexport function IsNever(value) {\n return IsKindOf(value, 'Never');\n}\n/** `[Kind-Only]` Returns true if the given value is TNot */\nexport function IsNot(value) {\n return IsKindOf(value, 'Not');\n}\n/** `[Kind-Only]` Returns true if the given value is TNull */\nexport function IsNull(value) {\n return IsKindOf(value, 'Null');\n}\n/** `[Kind-Only]` Returns true if the given value is TNumber */\nexport function IsNumber(value) {\n return IsKindOf(value, 'Number');\n}\n/** `[Kind-Only]` Returns true if the given value is TObject */\nexport function IsObject(value) {\n return IsKindOf(value, 'Object');\n}\n/** `[Kind-Only]` Returns true if the given value is TPromise */\nexport function IsPromise(value) {\n return IsKindOf(value, 'Promise');\n}\n/** `[Kind-Only]` Returns true if the given value is TRecord */\nexport function IsRecord(value) {\n return IsKindOf(value, 'Record');\n}\n/** `[Kind-Only]` Returns true if this value is TRecursive */\nexport function IsRecursive(value) {\n return ValueGuard.IsObject(value) && Hint in value && value[Hint] === 'Recursive';\n}\n/** `[Kind-Only]` Returns true if the given value is TRef */\nexport function IsRef(value) {\n return IsKindOf(value, 'Ref');\n}\n/** `[Kind-Only]` Returns true if the given value is TRegExp */\nexport function IsRegExp(value) {\n return IsKindOf(value, 'RegExp');\n}\n/** `[Kind-Only]` Returns true if the given value is TString */\nexport function IsString(value) {\n return IsKindOf(value, 'String');\n}\n/** `[Kind-Only]` Returns true if the given value is TSymbol */\nexport function IsSymbol(value) {\n return IsKindOf(value, 'Symbol');\n}\n/** `[Kind-Only]` Returns true if the given value is TTemplateLiteral */\nexport function IsTemplateLiteral(value) {\n return IsKindOf(value, 'TemplateLiteral');\n}\n/** `[Kind-Only]` Returns true if the given value is TThis */\nexport function IsThis(value) {\n return IsKindOf(value, 'This');\n}\n/** `[Kind-Only]` Returns true of this value is TTransform */\nexport function IsTransform(value) {\n return ValueGuard.IsObject(value) && TransformKind in value;\n}\n/** `[Kind-Only]` Returns true if the given value is TTuple */\nexport function IsTuple(value) {\n return IsKindOf(value, 'Tuple');\n}\n/** `[Kind-Only]` Returns true if the given value is TUndefined */\nexport function IsUndefined(value) {\n return IsKindOf(value, 'Undefined');\n}\n/** `[Kind-Only]` Returns true if the given value is TUnion */\nexport function IsUnion(value) {\n return IsKindOf(value, 'Union');\n}\n/** `[Kind-Only]` Returns true if the given value is TUint8Array */\nexport function IsUint8Array(value) {\n return IsKindOf(value, 'Uint8Array');\n}\n/** `[Kind-Only]` Returns true if the given value is TUnknown */\nexport function IsUnknown(value) {\n return IsKindOf(value, 'Unknown');\n}\n/** `[Kind-Only]` Returns true if the given value is a raw TUnsafe */\nexport function IsUnsafe(value) {\n return IsKindOf(value, 'Unsafe');\n}\n/** `[Kind-Only]` Returns true if the given value is TVoid */\nexport function IsVoid(value) {\n return IsKindOf(value, 'Void');\n}\n/** `[Kind-Only]` Returns true if the given value is TKind */\nexport function IsKind(value) {\n return ValueGuard.IsObject(value) && Kind in value && ValueGuard.IsString(value[Kind]);\n}\n/** `[Kind-Only]` Returns true if the given value is TSchema */\nexport function IsSchema(value) {\n // prettier-ignore\n return (IsAny(value) ||\n IsArgument(value) ||\n IsArray(value) ||\n IsBoolean(value) ||\n IsBigInt(value) ||\n IsAsyncIterator(value) ||\n IsComputed(value) ||\n IsConstructor(value) ||\n IsDate(value) ||\n IsFunction(value) ||\n IsInteger(value) ||\n IsIntersect(value) ||\n IsIterator(value) ||\n IsLiteral(value) ||\n IsMappedKey(value) ||\n IsMappedResult(value) ||\n IsNever(value) ||\n IsNot(value) ||\n IsNull(value) ||\n IsNumber(value) ||\n IsObject(value) ||\n IsPromise(value) ||\n IsRecord(value) ||\n IsRef(value) ||\n IsRegExp(value) ||\n IsString(value) ||\n IsSymbol(value) ||\n IsTemplateLiteral(value) ||\n IsThis(value) ||\n IsTuple(value) ||\n IsUndefined(value) ||\n IsUnion(value) ||\n IsUint8Array(value) ||\n IsUnknown(value) ||\n IsUnsafe(value) ||\n IsVoid(value) ||\n IsKind(value));\n}\n","import * as ValueGuard from './value.mjs';\nimport { Kind, Hint, TransformKind, ReadonlyKind, OptionalKind } from '../symbols/index.mjs';\nimport { TypeBoxError } from '../error/index.mjs';\nexport class TypeGuardUnknownTypeError extends TypeBoxError {\n}\nconst KnownTypes = [\n 'Argument',\n 'Any',\n 'Array',\n 'AsyncIterator',\n 'BigInt',\n 'Boolean',\n 'Computed',\n 'Constructor',\n 'Date',\n 'Enum',\n 'Function',\n 'Integer',\n 'Intersect',\n 'Iterator',\n 'Literal',\n 'MappedKey',\n 'MappedResult',\n 'Not',\n 'Null',\n 'Number',\n 'Object',\n 'Promise',\n 'Record',\n 'Ref',\n 'RegExp',\n 'String',\n 'Symbol',\n 'TemplateLiteral',\n 'This',\n 'Tuple',\n 'Undefined',\n 'Union',\n 'Uint8Array',\n 'Unknown',\n 'Void',\n];\nfunction IsPattern(value) {\n try {\n new RegExp(value);\n return true;\n }\n catch {\n return false;\n }\n}\nfunction IsControlCharacterFree(value) {\n if (!ValueGuard.IsString(value))\n return false;\n for (let i = 0; i < value.length; i++) {\n const code = value.charCodeAt(i);\n if ((code >= 7 && code <= 13) || code === 27 || code === 127) {\n return false;\n }\n }\n return true;\n}\nfunction IsAdditionalProperties(value) {\n return IsOptionalBoolean(value) || IsSchema(value);\n}\nfunction IsOptionalBigInt(value) {\n return ValueGuard.IsUndefined(value) || ValueGuard.IsBigInt(value);\n}\nfunction IsOptionalNumber(value) {\n return ValueGuard.IsUndefined(value) || ValueGuard.IsNumber(value);\n}\nfunction IsOptionalBoolean(value) {\n return ValueGuard.IsUndefined(value) || ValueGuard.IsBoolean(value);\n}\nfunction IsOptionalString(value) {\n return ValueGuard.IsUndefined(value) || ValueGuard.IsString(value);\n}\nfunction IsOptionalPattern(value) {\n return ValueGuard.IsUndefined(value) || (ValueGuard.IsString(value) && IsControlCharacterFree(value) && IsPattern(value));\n}\nfunction IsOptionalFormat(value) {\n return ValueGuard.IsUndefined(value) || (ValueGuard.IsString(value) && IsControlCharacterFree(value));\n}\nfunction IsOptionalSchema(value) {\n return ValueGuard.IsUndefined(value) || IsSchema(value);\n}\n// ------------------------------------------------------------------\n// Modifiers\n// ------------------------------------------------------------------\n/** Returns true if this value has a Readonly symbol */\nexport function IsReadonly(value) {\n return ValueGuard.IsObject(value) && value[ReadonlyKind] === 'Readonly';\n}\n/** Returns true if this value has a Optional symbol */\nexport function IsOptional(value) {\n return ValueGuard.IsObject(value) && value[OptionalKind] === 'Optional';\n}\n// ------------------------------------------------------------------\n// Types\n// ------------------------------------------------------------------\n/** Returns true if the given value is TAny */\nexport function IsAny(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Any') &&\n IsOptionalString(value.$id));\n}\n/** Returns true if the given value is TArgument */\nexport function IsArgument(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Argument') &&\n ValueGuard.IsNumber(value.index));\n}\n/** Returns true if the given value is TArray */\nexport function IsArray(value) {\n return (IsKindOf(value, 'Array') &&\n value.type === 'array' &&\n IsOptionalString(value.$id) &&\n IsSchema(value.items) &&\n IsOptionalNumber(value.minItems) &&\n IsOptionalNumber(value.maxItems) &&\n IsOptionalBoolean(value.uniqueItems) &&\n IsOptionalSchema(value.contains) &&\n IsOptionalNumber(value.minContains) &&\n IsOptionalNumber(value.maxContains));\n}\n/** Returns true if the given value is TAsyncIterator */\nexport function IsAsyncIterator(value) {\n // prettier-ignore\n return (IsKindOf(value, 'AsyncIterator') &&\n value.type === 'AsyncIterator' &&\n IsOptionalString(value.$id) &&\n IsSchema(value.items));\n}\n/** Returns true if the given value is TBigInt */\nexport function IsBigInt(value) {\n // prettier-ignore\n return (IsKindOf(value, 'BigInt') &&\n value.type === 'bigint' &&\n IsOptionalString(value.$id) &&\n IsOptionalBigInt(value.exclusiveMaximum) &&\n IsOptionalBigInt(value.exclusiveMinimum) &&\n IsOptionalBigInt(value.maximum) &&\n IsOptionalBigInt(value.minimum) &&\n IsOptionalBigInt(value.multipleOf));\n}\n/** Returns true if the given value is TBoolean */\nexport function IsBoolean(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Boolean') &&\n value.type === 'boolean' &&\n IsOptionalString(value.$id));\n}\n/** Returns true if the given value is TComputed */\nexport function IsComputed(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Computed') &&\n ValueGuard.IsString(value.target) &&\n ValueGuard.IsArray(value.parameters) &&\n value.parameters.every((schema) => IsSchema(schema)));\n}\n/** Returns true if the given value is TConstructor */\nexport function IsConstructor(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Constructor') &&\n value.type === 'Constructor' &&\n IsOptionalString(value.$id) &&\n ValueGuard.IsArray(value.parameters) &&\n value.parameters.every(schema => IsSchema(schema)) &&\n IsSchema(value.returns));\n}\n/** Returns true if the given value is TDate */\nexport function IsDate(value) {\n return (IsKindOf(value, 'Date') &&\n value.type === 'Date' &&\n IsOptionalString(value.$id) &&\n IsOptionalNumber(value.exclusiveMaximumTimestamp) &&\n IsOptionalNumber(value.exclusiveMinimumTimestamp) &&\n IsOptionalNumber(value.maximumTimestamp) &&\n IsOptionalNumber(value.minimumTimestamp) &&\n IsOptionalNumber(value.multipleOfTimestamp));\n}\n/** Returns true if the given value is TFunction */\nexport function IsFunction(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Function') &&\n value.type === 'Function' &&\n IsOptionalString(value.$id) &&\n ValueGuard.IsArray(value.parameters) &&\n value.parameters.every(schema => IsSchema(schema)) &&\n IsSchema(value.returns));\n}\n/** Returns true if the given value is TImport */\nexport function IsImport(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Import') &&\n ValueGuard.HasPropertyKey(value, '$defs') &&\n ValueGuard.IsObject(value.$defs) &&\n IsProperties(value.$defs) &&\n ValueGuard.HasPropertyKey(value, '$ref') &&\n ValueGuard.IsString(value.$ref) &&\n value.$ref in value.$defs // required\n );\n}\n/** Returns true if the given value is TInteger */\nexport function IsInteger(value) {\n return (IsKindOf(value, 'Integer') &&\n value.type === 'integer' &&\n IsOptionalString(value.$id) &&\n IsOptionalNumber(value.exclusiveMaximum) &&\n IsOptionalNumber(value.exclusiveMinimum) &&\n IsOptionalNumber(value.maximum) &&\n IsOptionalNumber(value.minimum) &&\n IsOptionalNumber(value.multipleOf));\n}\n/** Returns true if the given schema is TProperties */\nexport function IsProperties(value) {\n // prettier-ignore\n return (ValueGuard.IsObject(value) &&\n Object.entries(value).every(([key, schema]) => IsControlCharacterFree(key) && IsSchema(schema)));\n}\n/** Returns true if the given value is TIntersect */\nexport function IsIntersect(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Intersect') &&\n (ValueGuard.IsString(value.type) && value.type !== 'object' ? false : true) &&\n ValueGuard.IsArray(value.allOf) &&\n value.allOf.every(schema => IsSchema(schema) && !IsTransform(schema)) &&\n IsOptionalString(value.type) &&\n (IsOptionalBoolean(value.unevaluatedProperties) || IsOptionalSchema(value.unevaluatedProperties)) &&\n IsOptionalString(value.$id));\n}\n/** Returns true if the given value is TIterator */\nexport function IsIterator(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Iterator') &&\n value.type === 'Iterator' &&\n IsOptionalString(value.$id) &&\n IsSchema(value.items));\n}\n/** Returns true if the given value is a TKind with the given name. */\nexport function IsKindOf(value, kind) {\n return ValueGuard.IsObject(value) && Kind in value && value[Kind] === kind;\n}\n/** Returns true if the given value is TLiteral<string> */\nexport function IsLiteralString(value) {\n return IsLiteral(value) && ValueGuard.IsString(value.const);\n}\n/** Returns true if the given value is TLiteral<number> */\nexport function IsLiteralNumber(value) {\n return IsLiteral(value) && ValueGuard.IsNumber(value.const);\n}\n/** Returns true if the given value is TLiteral<boolean> */\nexport function IsLiteralBoolean(value) {\n return IsLiteral(value) && ValueGuard.IsBoolean(value.const);\n}\n/** Returns true if the given value is TLiteral */\nexport function IsLiteral(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Literal') &&\n IsOptionalString(value.$id) && IsLiteralValue(value.const));\n}\n/** Returns true if the given value is a TLiteralValue */\nexport function IsLiteralValue(value) {\n return ValueGuard.IsBoolean(value) || ValueGuard.IsNumber(value) || ValueGuard.IsString(value);\n}\n/** Returns true if the given value is a TMappedKey */\nexport function IsMappedKey(value) {\n // prettier-ignore\n return (IsKindOf(value, 'MappedKey') &&\n ValueGuard.IsArray(value.keys) &&\n value.keys.every(key => ValueGuard.IsNumber(key) || ValueGuard.IsString(key)));\n}\n/** Returns true if the given value is TMappedResult */\nexport function IsMappedResult(value) {\n // prettier-ignore\n return (IsKindOf(value, 'MappedResult') &&\n IsProperties(value.properties));\n}\n/** Returns true if the given value is TNever */\nexport function IsNever(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Never') &&\n ValueGuard.IsObject(value.not) &&\n Object.getOwnPropertyNames(value.not).length === 0);\n}\n/** Returns true if the given value is TNot */\nexport function IsNot(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Not') &&\n IsSchema(value.not));\n}\n/** Returns true if the given value is TNull */\nexport function IsNull(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Null') &&\n value.type === 'null' &&\n IsOptionalString(value.$id));\n}\n/** Returns true if the given value is TNumber */\nexport function IsNumber(value) {\n return (IsKindOf(value, 'Number') &&\n value.type === 'number' &&\n IsOptionalString(value.$id) &&\n IsOptionalNumber(value.exclusiveMaximum) &&\n IsOptionalNumber(value.exclusiveMinimum) &&\n IsOptionalNumber(value.maximum) &&\n IsOptionalNumber(value.minimum) &&\n IsOptionalNumber(value.multipleOf));\n}\n/** Returns true if the given value is TObject */\nexport function IsObject(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Object') &&\n value.type === 'object' &&\n IsOptionalString(value.$id) &&\n IsProperties(value.properties) &&\n IsAdditionalProperties(value.additionalProperties) &&\n IsOptionalNumber(value.minProperties) &&\n IsOptionalNumber(value.maxProperties));\n}\n/** Returns true if the given value is TPromise */\nexport function IsPromise(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Promise') &&\n value.type === 'Promise' &&\n IsOptionalString(value.$id) &&\n IsSchema(value.item));\n}\n/** Returns true if the given value is TRecord */\nexport function IsRecord(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Record') &&\n value.type === 'object' &&\n IsOptionalString(value.$id) &&\n IsAdditionalProperties(value.additionalProperties) &&\n ValueGuard.IsObject(value.patternProperties) &&\n ((schema) => {\n const keys = Object.getOwnPropertyNames(schema.patternProperties);\n return (keys.length === 1 &&\n IsPattern(keys[0]) &&\n ValueGuard.IsObject(schema.patternProperties) &&\n IsSchema(schema.patternProperties[keys[0]]));\n })(value));\n}\n/** Returns true if this value is TRecursive */\nexport function IsRecursive(value) {\n return ValueGuard.IsObject(value) && Hint in value && value[Hint] === 'Recursive';\n}\n/** Returns true if the given value is TRef */\nexport function IsRef(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Ref') &&\n IsOptionalString(value.$id) &&\n ValueGuard.IsString(value.$ref));\n}\n/** Returns true if the given value is TRegExp */\nexport function IsRegExp(value) {\n // prettier-ignore\n return (IsKindOf(value, 'RegExp') &&\n IsOptionalString(value.$id) &&\n ValueGuard.IsString(value.source) &&\n ValueGuard.IsString(value.flags) &&\n IsOptionalNumber(value.maxLength) &&\n IsOptionalNumber(value.minLength));\n}\n/** Returns true if the given value is TString */\nexport function IsString(value) {\n // prettier-ignore\n return (IsKindOf(value, 'String') &&\n value.type === 'string' &&\n IsOptionalString(value.$id) &&\n IsOptionalNumber(value.minLength) &&\n IsOptionalNumber(value.maxLength) &&\n IsOptionalPattern(value.pattern) &&\n IsOptionalFormat(value.format));\n}\n/** Returns true if the given value is TSymbol */\nexport function IsSymbol(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Symbol') &&\n value.type === 'symbol' &&\n IsOptionalString(value.$id));\n}\n/** Returns true if the given value is TTemplateLiteral */\nexport function IsTemplateLiteral(value) {\n // prettier-ignore\n return (IsKindOf(value, 'TemplateLiteral') &&\n value.type === 'string' &&\n ValueGuard.IsString(value.pattern) &&\n value.pattern[0] === '^' &&\n value.pattern[value.pattern.length - 1] === '$');\n}\n/** Returns true if the given value is TThis */\nexport function IsThis(value) {\n // prettier-ignore\n return (IsKindOf(value, 'This') &&\n IsOptionalString(value.$id) &&\n ValueGuard.IsString(value.$ref));\n}\n/** Returns true of this value is TTransform */\nexport function IsTransform(value) {\n return ValueGuard.IsObject(value) && TransformKind in value;\n}\n/** Returns true if the given value is TTuple */\nexport function IsTuple(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Tuple') &&\n value.type === 'array' &&\n IsOptionalString(value.$id) &&\n ValueGuard.IsNumber(value.minItems) &&\n ValueGuard.IsNumber(value.maxItems) &&\n value.minItems === value.maxItems &&\n (( // empty\n ValueGuard.IsUndefined(value.items) &&\n ValueGuard.IsUndefined(value.additionalItems) &&\n value.minItems === 0) || (ValueGuard.IsArray(value.items) &&\n value.items.every(schema => IsSchema(schema)))));\n}\n/** Returns true if the given value is TUndefined */\nexport function IsUndefined(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Undefined') &&\n value.type === 'undefined' &&\n IsOptionalString(value.$id));\n}\n/** Returns true if the given value is TUnion<Literal<string | number>[]> */\nexport function IsUnionLiteral(value) {\n return IsUnion(value) && value.anyOf.every((schema) => IsLiteralString(schema) || IsLiteralNumber(schema));\n}\n/** Returns true if the given value is TUnion */\nexport function IsUnion(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Union') &&\n IsOptionalString(value.$id) &&\n ValueGuard.IsObject(value) &&\n ValueGuard.IsArray(value.anyOf) &&\n value.anyOf.every(schema => IsSchema(schema)));\n}\n/** Returns true if the given value is TUint8Array */\nexport function IsUint8Array(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Uint8Array') &&\n value.type === 'Uint8Array' &&\n IsOptionalString(value.$id) &&\n IsOptionalNumber(value.minByteLength) &&\n IsOptionalNumber(value.maxByteLength));\n}\n/** Returns true if the given value is TUnknown */\nexport function IsUnknown(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Unknown') &&\n IsOptionalString(value.$id));\n}\n/** Returns true if the given value is a raw TUnsafe */\nexport function IsUnsafe(value) {\n return IsKindOf(value, 'Unsafe');\n}\n/** Returns true if the given value is TVoid */\nexport function IsVoid(value) {\n // prettier-ignore\n return (IsKindOf(value, 'Void') &&\n value.type === 'void' &&\n IsOptionalString(value.$id));\n}\n/** Returns true if the given value is TKind */\nexport function IsKind(value) {\n return ValueGuard.IsObject(value) && Kind in value && ValueGuard.IsString(value[Kind]) && !KnownTypes.includes(value[Kind]);\n}\n/** Returns true if the given value is TSchema */\nexport function IsSchema(value) {\n // prettier-ignore\n return (ValueGuard.IsObject(value)) && (IsAny(value) ||\n IsArgument(value) ||\n IsArray(value) ||\n IsBoolean(value) ||\n IsBigInt(value) ||\n IsAsyncIterator(value) ||\n IsComputed(value) ||\n IsConstructor(value) ||\n IsDate(value) ||\n IsFunction(value) ||\n IsInteger(value) ||\n IsIntersect(value) ||\n IsIterator(value) ||\n IsLiteral(value) ||\n IsMappedKey(value) ||\n IsMappedResult(value) ||\n IsNever(value) ||\n IsNot(value) ||\n IsNull(value) ||\n IsNumber(value) ||\n IsObject(value) ||\n IsPromise(value) ||\n IsRecord(value) ||\n IsRef(value) ||\n IsRegExp(value) ||\n IsString(value) ||\n IsSymbol(value) ||\n IsTemplateLiteral(value) ||\n IsThis(value) ||\n IsTuple(value) ||\n IsUndefined(value) ||\n IsUnion(value) ||\n IsUint8Array(value) ||\n IsUnknown(value) ||\n IsUnsafe(value) ||\n IsVoid(value) ||\n IsKind(value));\n}\n","export const PatternBoolean = '(true|false)';\nexport const PatternNumber = '(0|[1-9][0-9]*)';\nexport const PatternString = '(.*)';\nexport const PatternNever = '(?!.*)';\nexport const PatternBooleanExact = `^${PatternBoolean}$`;\nexport const PatternNumberExact = `^${PatternNumber}$`;\nexport const PatternStringExact = `^${PatternString}$`;\nexport const PatternNeverExact = `^${PatternNever}$`;\n","/** Returns true if element right is in the set of left */\n// prettier-ignore\nexport function SetIncludes(T, S) {\n return T.includes(S);\n}\n/** Returns true if left is a subset of right */\nexport function SetIsSubset(T, S) {\n return T.every((L) => SetIncludes(S, L));\n}\n/** Returns a distinct set of elements */\nexport function SetDistinct(T) {\n return [...new Set(T)];\n}\n/** Returns the Intersect of the given sets */\nexport function SetIntersect(T, S) {\n return T.filter((L) => S.includes(L));\n}\n/** Returns the Union of the given sets */\nexport function SetUnion(T, S) {\n return [...T, ...S];\n}\n/** Returns the Complement by omitting elements in T that are in S */\n// prettier-ignore\nexport function SetComplement(T, S) {\n return T.filter(L => !S.includes(L));\n}\n// prettier-ignore\nfunction SetIntersectManyResolve(T, Init) {\n return T.reduce((Acc, L) => {\n return SetIntersect(Acc, L);\n }, Init);\n}\n// prettier-ignore\nexport function SetIntersectMany(T) {\n return (T.length === 1\n ? T[0]\n // Use left to initialize the accumulator for resolve\n : T.length > 1\n ? SetIntersectManyResolve(T.slice(1), T[0])\n : []);\n}\n/** Returns the Union of multiple sets */\nexport function SetUnionMany(T) {\n const Acc = [];\n for (const L of T)\n Acc.push(...L);\n return Acc;\n}\n","import { CreateType } from '../create/index.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates an Any type */\nexport function Any(options) {\n return CreateType({ [Kind]: 'Any' }, options);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates an Array type */\nexport function Array(items, options) {\n return CreateType({ [Kind]: 'Array', type: 'array', items }, options);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[JavaScript]` Creates an Argument Type. */\nexport function Argument(index) {\n return CreateType({ [Kind]: 'Argument', index });\n}\n","import { Kind } from '../symbols/index.mjs';\nimport { CreateType } from '../create/type.mjs';\n/** `[JavaScript]` Creates a AsyncIterator type */\nexport function AsyncIterator(items, options) {\n return CreateType({ [Kind]: 'AsyncIterator', type: 'AsyncIterator', items }, options);\n}\n","import { CreateType } from '../create/index.mjs';\nimport { Kind } from '../symbols/symbols.mjs';\n/** `[Internal]` Creates a deferred computed type. This type is used exclusively in modules to defer resolution of computable types that contain interior references */\nexport function Computed(target, parameters, options) {\n return CreateType({ [Kind]: 'Computed', target, parameters }, options);\n}\n","function DiscardKey(value, key) {\n const { [key]: _, ...rest } = value;\n return rest;\n}\n/** Discards property keys from the given value. This function returns a shallow Clone. */\nexport function Discard(value, keys) {\n return keys.reduce((acc, key) => DiscardKey(acc, key), value);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates a Never type */\nexport function Never(options) {\n return CreateType({ [Kind]: 'Never', not: {} }, options);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n// prettier-ignore\nexport function MappedResult(properties) {\n return CreateType({\n [Kind]: 'MappedResult',\n properties\n });\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[JavaScript]` Creates a Constructor type */\nexport function Constructor(parameters, returns, options) {\n return CreateType({ [Kind]: 'Constructor', type: 'Constructor', parameters, returns }, options);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[JavaScript]` Creates a Function type */\nexport function Function(parameters, returns, options) {\n return CreateType({ [Kind]: 'Function', type: 'Function', parameters, returns }, options);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\nexport function UnionCreate(T, options) {\n return CreateType({ [Kind]: 'Union', anyOf: T }, options);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { OptionalKind } from '../symbols/index.mjs';\nimport { Discard } from '../discard/index.mjs';\nimport { Never } from '../never/index.mjs';\nimport { Optional } from '../optional/index.mjs';\nimport { UnionCreate } from './union-create.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsOptional } from '../guard/kind.mjs';\n// prettier-ignore\nfunction IsUnionOptional(types) {\n return types.some(type => IsOptional(type));\n}\n// prettier-ignore\nfunction RemoveOptionalFromRest(types) {\n return types.map(left => IsOptional(left) ? RemoveOptionalFromType(left) : left);\n}\n// prettier-ignore\nfunction RemoveOptionalFromType(T) {\n return (Discard(T, [OptionalKind]));\n}\n// prettier-ignore\nfunction ResolveUnion(types, options) {\n const isOptional = IsUnionOptional(types);\n return (isOptional\n ? Optional(UnionCreate(RemoveOptionalFromRest(types), options))\n : UnionCreate(RemoveOptionalFromRest(types), options));\n}\n/** `[Json]` Creates an evaluated Union type */\nexport function UnionEvaluated(T, options) {\n // prettier-ignore\n return (T.length === 1 ? CreateType(T[0], options) :\n T.length === 0 ? Never(options) :\n ResolveUnion(T, options));\n}\n","import { Never } from '../never/index.mjs';\nimport { CreateType } from '../create/type.mjs';\nimport { UnionCreate } from './union-create.mjs';\n/** `[Json]` Creates a Union type */\nexport function Union(types, options) {\n // prettier-ignore\n return (types.length === 0 ? Never(options) :\n types.length === 1 ? CreateType(types[0], options) :\n UnionCreate(types, options));\n}\n","import { TypeBoxError } from '../error/index.mjs';\n// ------------------------------------------------------------------\n// TemplateLiteralParserError\n// ------------------------------------------------------------------\nexport class TemplateLiteralParserError extends TypeBoxError {\n}\n// -------------------------------------------------------------------\n// Unescape\n//\n// Unescape for these control characters specifically. Note that this\n// function is only called on non union group content, and where we\n// still want to allow the user to embed control characters in that\n// content. For review.\n// -------------------------------------------------------------------\n// prettier-ignore\nfunction Unescape(pattern) {\n return pattern\n .replace(/\\\\\\$/g, '$')\n .replace(/\\\\\\*/g, '*')\n .replace(/\\\\\\^/g, '^')\n .replace(/\\\\\\|/g, '|')\n .replace(/\\\\\\(/g, '(')\n .replace(/\\\\\\)/g, ')');\n}\n// -------------------------------------------------------------------\n// Control Characters\n// -------------------------------------------------------------------\nfunction IsNonEscaped(pattern, index, char) {\n return pattern[index] === char && pattern.charCodeAt(index - 1) !== 92;\n}\nfunction IsOpenParen(pattern, index) {\n return IsNonEscaped(pattern, index, '(');\n}\nfunction IsCloseParen(pattern, index) {\n return IsNonEscaped(pattern, index, ')');\n}\nfunction IsSeparator(pattern, index) {\n return IsNonEscaped(pattern, index, '|');\n}\n// -------------------------------------------------------------------\n// Control Groups\n// -------------------------------------------------------------------\nfunction IsGroup(pattern) {\n if (!(IsOpenParen(pattern, 0) && IsCloseParen(pattern, pattern.length - 1)))\n return false;\n let count = 0;\n for (let index = 0; index < pattern.length; index++) {\n if (IsOpenParen(pattern, index))\n count += 1;\n if (IsCloseParen(pattern, index))\n count -= 1;\n if (count === 0 && index !== pattern.length - 1)\n return false;\n }\n return true;\n}\n// prettier-ignore\nfunction InGroup(pattern) {\n return pattern.slice(1, pattern.length - 1);\n}\n// prettier-ignore\nfunction IsPrecedenceOr(pattern) {\n let count = 0;\n for (let index = 0; index < pattern.length; index++) {\n if (IsOpenParen(pattern, index))\n count += 1;\n if (IsCloseParen(pattern, index))\n count -= 1;\n if (IsSeparator(pattern, index) && count === 0)\n return true;\n }\n return false;\n}\n// prettier-ignore\nfunction IsPrecedenceAnd(pattern) {\n for (let index = 0; index < pattern.length; index++) {\n if (IsOpenParen(pattern, index))\n return true;\n }\n return false;\n}\n// prettier-ignore\nfunction Or(pattern) {\n let [count, start] = [0, 0];\n const expressions = [];\n for (let index = 0; index < pattern.length; index++) {\n if (IsOpenParen(pattern, index))\n count += 1;\n if (IsCloseParen(pattern, index))\n count -= 1;\n if (IsSeparator(pattern, index) && count === 0) {\n const range = pattern.slice(start, index);\n if (range.length > 0)\n expressions.push(TemplateLiteralParse(range));\n start = index + 1;\n }\n }\n const range = pattern.slice(start);\n if (range.length > 0)\n expressions.push(TemplateLiteralParse(range));\n if (expressions.length === 0)\n return { type: 'const', const: '' };\n if (expressions.length === 1)\n return expressions[0];\n return { type: 'or', expr: expressions };\n}\n// prettier-ignore\nfunction And(pattern) {\n function Group(value, index) {\n if (!IsOpenParen(value, index))\n throw new TemplateLiteralParserError(`TemplateLiteralParser: Index must point to open parens`);\n let count = 0;\n for (let scan = index; scan < value.length; scan++) {\n if (IsOpenParen(value, scan))\n count += 1;\n if (IsCloseParen(value, scan))\n count -= 1;\n if (count === 0)\n return [index, scan];\n }\n throw new TemplateLiteralParserError(`TemplateLiteralParser: Unclosed group parens in expression`);\n }\n function Range(pattern, index) {\n for (let scan = index; scan < pattern.length; scan++) {\n if (IsOpenParen(pattern, scan))\n return [index, scan];\n }\n return [index, pattern.length];\n }\n const expressions = [];\n for (let index = 0; index < pattern.length; index++) {\n if (IsOpenParen(pattern, index)) {\n const [start, end] = Group(pattern, index);\n const range = pattern.slice(start, end + 1);\n expressions.push(TemplateLiteralParse(range));\n index = end;\n }\n else {\n const [start, end] = Range(pattern, index);\n const range = pattern.slice(start, end);\n if (range.length > 0)\n expressions.push(TemplateLiteralParse(range));\n index = end - 1;\n }\n }\n return ((expressions.length === 0) ? { type: 'const', const: '' } :\n (expressions.length === 1) ? expressions[0] :\n { type: 'and', expr: expressions });\n}\n// ------------------------------------------------------------------\n// TemplateLiteralParse\n// ------------------------------------------------------------------\n/** Parses a pattern and returns an expression tree */\nexport function TemplateLiteralParse(pattern) {\n // prettier-ignore\n return (IsGroup(pattern) ? TemplateLiteralParse(InGroup(pattern)) :\n IsPrecedenceOr(pattern) ? Or(pattern) :\n IsPrecedenceAnd(pattern) ? And(pattern) :\n { type: 'const', const: Unescape(pattern) });\n}\n// ------------------------------------------------------------------\n// TemplateLiteralParseExact\n// ------------------------------------------------------------------\n/** Parses a pattern and strips forward and trailing ^ and $ */\nexport function TemplateLiteralParseExact(pattern) {\n return TemplateLiteralParse(pattern.slice(1, pattern.length - 1));\n}\n","import { TemplateLiteralParseExact } from './parse.mjs';\nimport { TypeBoxError } from '../error/index.mjs';\n// ------------------------------------------------------------------\n// TemplateLiteralFiniteError\n// ------------------------------------------------------------------\nexport class TemplateLiteralFiniteError extends TypeBoxError {\n}\n// ------------------------------------------------------------------\n// IsTemplateLiteralFiniteCheck\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction IsNumberExpression(expression) {\n return (expression.type === 'or' &&\n expression.expr.length === 2 &&\n expression.expr[0].type === 'const' &&\n expression.expr[0].const === '0' &&\n expression.expr[1].type === 'const' &&\n expression.expr[1].const === '[1-9][0-9]*');\n}\n// prettier-ignore\nfunction IsBooleanExpression(expression) {\n return (expression.type === 'or' &&\n expression.expr.length === 2 &&\n expression.expr[0].type === 'const' &&\n expression.expr[0].const === 'true' &&\n expression.expr[1].type === 'const' &&\n expression.expr[1].const === 'false');\n}\n// prettier-ignore\nfunction IsStringExpression(expression) {\n return expression.type === 'const' && expression.const === '.*';\n}\n// ------------------------------------------------------------------\n// IsTemplateLiteralExpressionFinite\n// ------------------------------------------------------------------\n// prettier-ignore\nexport function IsTemplateLiteralExpressionFinite(expression) {\n return (IsNumberExpression(expression) || IsStringExpression(expression) ? false :\n IsBooleanExpression(expression) ? true :\n (expression.type === 'and') ? expression.expr.every((expr) => IsTemplateLiteralExpressionFinite(expr)) :\n (expression.type === 'or') ? expression.expr.every((expr) => IsTemplateLiteralExpressionFinite(expr)) :\n (expression.type === 'const') ? true :\n (() => { throw new TemplateLiteralFiniteError(`Unknown expression type`); })());\n}\n/** Returns true if this TemplateLiteral resolves to a finite set of values */\nexport function IsTemplateLiteralFinite(schema) {\n const expression = TemplateLiteralParseExact(schema.pattern);\n return IsTemplateLiteralExpressionFinite(expression);\n}\n","import { IsTemplateLiteralExpressionFinite } from './finite.mjs';\nimport { TemplateLiteralParseExact } from './parse.mjs';\nimport { TypeBoxError } from '../error/index.mjs';\n// ------------------------------------------------------------------\n// TemplateLiteralGenerateError\n// ------------------------------------------------------------------\nexport class TemplateLiteralGenerateError extends TypeBoxError {\n}\n// ------------------------------------------------------------------\n// TemplateLiteralExpressionGenerate\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction* GenerateReduce(buffer) {\n if (buffer.length === 1)\n return yield* buffer[0];\n for (const left of buffer[0]) {\n for (const right of GenerateReduce(buffer.slice(1))) {\n yield `${left}${right}`;\n }\n }\n}\n// prettier-ignore\nfunction* GenerateAnd(expression) {\n return yield* GenerateReduce(expression.expr.map((expr) => [...TemplateLiteralExpressionGenerate(expr)]));\n}\n// prettier-ignore\nfunction* GenerateOr(expression) {\n for (const expr of expression.expr)\n yield* TemplateLiteralExpressionGenerate(expr);\n}\n// prettier-ignore\nfunction* GenerateConst(expression) {\n return yield expression.const;\n}\nexport function* TemplateLiteralExpressionGenerate(expression) {\n return expression.type === 'and'\n ? yield* GenerateAnd(expression)\n : expression.type === 'or'\n ? yield* GenerateOr(expression)\n : expression.type === 'const'\n ? yield* GenerateConst(expression)\n : (() => {\n throw new TemplateLiteralGenerateError('Unknown expression');\n })();\n}\n/** Generates a tuple of strings from the given TemplateLiteral. Returns an empty tuple if infinite. */\nexport function TemplateLiteralGenerate(schema) {\n const expression = TemplateLiteralParseExact(schema.pattern);\n // prettier-ignore\n return (IsTemplateLiteralExpressionFinite(expression)\n ? [...TemplateLiteralExpressionGenerate(expression)]\n : []);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates a Literal type */\nexport function Literal(value, options) {\n return CreateType({\n [Kind]: 'Literal',\n const: value,\n type: typeof value,\n }, options);\n}\n","import { Kind } from '../symbols/index.mjs';\nimport { CreateType } from '../create/index.mjs';\n/** `[Json]` Creates a Boolean type */\nexport function Boolean(options) {\n return CreateType({ [Kind]: 'Boolean', type: 'boolean' }, options);\n}\n","import { Kind } from '../symbols/index.mjs';\nimport { CreateType } from '../create/index.mjs';\n/** `[JavaScript]` Creates a BigInt type */\nexport function BigInt(options) {\n return CreateType({ [Kind]: 'BigInt', type: 'bigint' }, options);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates a Number type */\nexport function Number(options) {\n return CreateType({ [Kind]: 'Number', type: 'number' }, options);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates a String type */\nexport function String(options) {\n return CreateType({ [Kind]: 'String', type: 'string' }, options);\n}\n","import { Literal } from '../literal/index.mjs';\nimport { Boolean } from '../boolean/index.mjs';\nimport { BigInt } from '../bigint/index.mjs';\nimport { Number } from '../number/index.mjs';\nimport { String } from '../string/index.mjs';\nimport { UnionEvaluated } from '../union/index.mjs';\nimport { Never } from '../never/index.mjs';\n// ------------------------------------------------------------------\n// SyntaxParsers\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction* FromUnion(syntax) {\n const trim = syntax.trim().replace(/\"|'/g, '');\n return (trim === 'boolean' ? yield Boolean() :\n trim === 'number' ? yield Number() :\n trim === 'bigint' ? yield BigInt() :\n trim === 'string' ? yield String() :\n yield (() => {\n const literals = trim.split('|').map((literal) => Literal(literal.trim()));\n return (literals.length === 0 ? Never() :\n literals.length === 1 ? literals[0] :\n UnionEvaluated(literals));\n })());\n}\n// prettier-ignore\nfunction* FromTerminal(syntax) {\n if (syntax[1] !== '{') {\n const L = Literal('$');\n const R = FromSyntax(syntax.slice(1));\n return yield* [L, ...R];\n }\n for (let i = 2; i < syntax.length; i++) {\n if (syntax[i] === '}') {\n const L = FromUnion(syntax.slice(2, i));\n const R = FromSyntax(syntax.slice(i + 1));\n return yield* [...L, ...R];\n }\n }\n yield Literal(syntax);\n}\n// prettier-ignore\nfunction* FromSyntax(syntax) {\n for (let i = 0; i < syntax.length; i++) {\n if (syntax[i] === '$') {\n const L = Literal(syntax.slice(0, i));\n const R = FromTerminal(syntax.slice(i));\n return yield* [L, ...R];\n }\n }\n yield Literal(syntax);\n}\n/** Parses TemplateLiteralSyntax and returns a tuple of TemplateLiteralKinds */\nexport function TemplateLiteralSyntax(syntax) {\n return [...FromSyntax(syntax)];\n}\n","import { PatternNumber, PatternString, PatternBoolean } from '../patterns/index.mjs';\nimport { Kind } from '../symbols/index.mjs';\nimport { TypeBoxError } from '../error/index.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsTemplateLiteral, IsUnion, IsNumber, IsInteger, IsBigInt, IsString, IsLiteral, IsBoolean } from '../guard/kind.mjs';\n// ------------------------------------------------------------------\n// TemplateLiteralPatternError\n// ------------------------------------------------------------------\nexport class TemplateLiteralPatternError extends TypeBoxError {\n}\n// ------------------------------------------------------------------\n// TemplateLiteralPattern\n// ------------------------------------------------------------------\nfunction Escape(value) {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n// prettier-ignore\nfunction Visit(schema, acc) {\n return (IsTemplateLiteral(schema) ? schema.pattern.slice(1, schema.pattern.length - 1) :\n IsUnion(schema) ? `(${schema.anyOf.map((schema) => Visit(schema, acc)).join('|')})` :\n IsNumber(schema) ? `${acc}${PatternNumber}` :\n IsInteger(schema) ? `${acc}${PatternNumber}` :\n IsBigInt(schema) ? `${acc}${PatternNumber}` :\n IsString(schema) ? `${acc}${PatternString}` :\n IsLiteral(schema) ? `${acc}${Escape(schema.const.toString())}` :\n IsBoolean(schema) ? `${acc}${PatternBoolean}` :\n (() => { throw new TemplateLiteralPatternError(`Unexpected Kind '${schema[Kind]}'`); })());\n}\nexport function TemplateLiteralPattern(kinds) {\n return `^${kinds.map((schema) => Visit(schema, '')).join('')}\\$`;\n}\n","import { UnionEvaluated } from '../union/index.mjs';\nimport { Literal } from '../literal/index.mjs';\nimport { TemplateLiteralGenerate } from './generate.mjs';\n/** Returns a Union from the given TemplateLiteral */\nexport function TemplateLiteralToUnion(schema) {\n const R = TemplateLiteralGenerate(schema);\n const L = R.map((S) => Literal(S));\n return UnionEvaluated(L);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { TemplateLiteralSyntax } from './syntax.mjs';\nimport { TemplateLiteralPattern } from './pattern.mjs';\nimport { IsString } from '../guard/value.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates a TemplateLiteral type */\n// prettier-ignore\nexport function TemplateLiteral(unresolved, options) {\n const pattern = IsString(unresolved)\n ? TemplateLiteralPattern(TemplateLiteralSyntax(unresolved))\n : TemplateLiteralPattern(unresolved);\n return CreateType({ [Kind]: 'TemplateLiteral', type: 'string', pattern }, options);\n}\n","import { TemplateLiteralGenerate } from '../template-literal/index.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsTemplateLiteral, IsUnion, IsLiteral, IsNumber, IsInteger } from '../guard/kind.mjs';\n// prettier-ignore\nfunction FromTemplateLiteral(templateLiteral) {\n const keys = TemplateLiteralGenerate(templateLiteral);\n return keys.map(key => key.toString());\n}\n// prettier-ignore\nfunction FromUnion(types) {\n const result = [];\n for (const type of types)\n result.push(...IndexPropertyKeys(type));\n return result;\n}\n// prettier-ignore\nfunction FromLiteral(literalValue) {\n return ([literalValue.toString()] // TS 5.4 observes TLiteralValue as not having a toString()\n );\n}\n/** Returns a tuple of PropertyKeys derived from the given TSchema */\n// prettier-ignore\nexport function IndexPropertyKeys(type) {\n return [...new Set((IsTemplateLiteral(type) ? FromTemplateLiteral(type) :\n IsUnion(type) ? FromUnion(type.anyOf) :\n IsLiteral(type) ? FromLiteral(type.const) :\n IsNumber(type) ? ['[number]'] :\n IsInteger(type) ? ['[number]'] :\n []))];\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { IndexPropertyKeys } from './indexed-property-keys.mjs';\nimport { Index } from './index.mjs';\n// prettier-ignore\nfunction FromProperties(type, properties, options) {\n const result = {};\n for (const K2 of Object.getOwnPropertyNames(properties)) {\n result[K2] = Index(type, IndexPropertyKeys(properties[K2]), options);\n }\n return result;\n}\n// prettier-ignore\nfunction FromMappedResult(type, mappedResult, options) {\n return FromProperties(type, mappedResult.properties, options);\n}\n// prettier-ignore\nexport function IndexFromMappedResult(type, mappedResult, options) {\n const properties = FromMappedResult(type, mappedResult, options);\n return MappedResult(properties);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { TypeBoxError } from '../error/index.mjs';\nimport { Computed } from '../computed/index.mjs';\nimport { Never } from '../never/index.mjs';\nimport { IntersectEvaluated } from '../intersect/index.mjs';\nimport { UnionEvaluated } from '../union/index.mjs';\nimport { IndexPropertyKeys } from './indexed-property-keys.mjs';\nimport { IndexFromMappedKey } from './indexed-from-mapped-key.mjs';\nimport { IndexFromMappedResult } from './indexed-from-mapped-result.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsArray, IsIntersect, IsObject, IsMappedKey, IsMappedResult, IsNever, IsSchema, IsTuple, IsUnion, IsRef } from '../guard/kind.mjs';\n// prettier-ignore\nfunction FromRest(types, key) {\n return types.map(type => IndexFromPropertyKey(type, key));\n}\n// prettier-ignore\nfunction FromIntersectRest(types) {\n return types.filter(type => !IsNever(type));\n}\n// prettier-ignore\nfunction FromIntersect(types, key) {\n return (IntersectEvaluated(FromIntersectRest(FromRest(types, key))));\n}\n// prettier-ignore\nfunction FromUnionRest(types) {\n return (types.some(L => IsNever(L))\n ? []\n : types);\n}\n// prettier-ignore\nfunction FromUnion(types, key) {\n return (UnionEvaluated(FromUnionRest(FromRest(types, key))));\n}\n// prettier-ignore\nfunction FromTuple(types, key) {\n return (key in types ? types[key] :\n key === '[number]' ? UnionEvaluated(types) :\n Never());\n}\n// prettier-ignore\nfunction FromArray(type, key) {\n return (key === '[number]'\n ? type\n : Never());\n}\n// prettier-ignore\nfunction FromProperty(properties, propertyKey) {\n return (propertyKey in properties ? properties[propertyKey] : Never());\n}\n// prettier-ignore\nexport function IndexFromPropertyKey(type, propertyKey) {\n return (IsIntersect(type) ? FromIntersect(type.allOf, propertyKey) :\n IsUnion(type) ? FromUnion(type.anyOf, propertyKey) :\n IsTuple(type) ? FromTuple(type.items ?? [], propertyKey) :\n IsArray(type) ? FromArray(type.items, propertyKey) :\n IsObject(type) ? FromProperty(type.properties, propertyKey) :\n Never());\n}\n// prettier-ignore\nexport function IndexFromPropertyKeys(type, propertyKeys) {\n return propertyKeys.map(propertyKey => IndexFromPropertyKey(type, propertyKey));\n}\n// prettier-ignore\nfunction FromSchema(type, propertyKeys) {\n return (UnionEvaluated(IndexFromPropertyKeys(type, propertyKeys)));\n}\n// prettier-ignore\nexport function IndexFromComputed(type, key) {\n return Computed('Index', [type, key]);\n}\n/** `[Json]` Returns an Indexed property type for the given keys */\nexport function Index(type, key, options) {\n // computed-type\n if (IsRef(type) || IsRef(key)) {\n const error = `Index types using Ref parameters require both Type and Key to be of TSchema`;\n if (!IsSchema(type) || !IsSchema(key))\n throw new TypeBoxError(error);\n return Computed('Index', [type, key]);\n }\n // mapped-types\n if (IsMappedResult(key))\n return IndexFromMappedResult(type, key, options);\n if (IsMappedKey(key))\n return IndexFromMappedKey(type, key, options);\n // prettier-ignore\n return CreateType(IsSchema(key)\n ? FromSchema(type, IndexPropertyKeys(key))\n : FromSchema(type, key), options);\n}\n","import { Index } from './indexed.mjs';\nimport { MappedResult } from '../mapped/index.mjs';\nimport { Clone } from '../clone/value.mjs';\n// prettier-ignore\nfunction MappedIndexPropertyKey(type, key, options) {\n return { [key]: Index(type, [key], Clone(options)) };\n}\n// prettier-ignore\nfunction MappedIndexPropertyKeys(type, propertyKeys, options) {\n return propertyKeys.reduce((result, left) => {\n return { ...result, ...MappedIndexPropertyKey(type, left, options) };\n }, {});\n}\n// prettier-ignore\nfunction MappedIndexProperties(type, mappedKey, options) {\n return MappedIndexPropertyKeys(type, mappedKey.keys, options);\n}\n// prettier-ignore\nexport function IndexFromMappedKey(type, mappedKey, options) {\n const properties = MappedIndexProperties(type, mappedKey, options);\n return MappedResult(properties);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[JavaScript]` Creates an Iterator type */\nexport function Iterator(items, options) {\n return CreateType({ [Kind]: 'Iterator', type: 'Iterator', items }, options);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsOptional } from '../guard/kind.mjs';\n/** Creates a RequiredArray derived from the given TProperties value. */\nfunction RequiredArray(properties) {\n return globalThis.Object.keys(properties).filter((key) => !IsOptional(properties[key]));\n}\n/** `[Json]` Creates an Object type */\nfunction _Object(properties, options) {\n const required = RequiredArray(properties);\n const schema = required.length > 0 ? { [Kind]: 'Object', type: 'object', required, properties } : { [Kind]: 'Object', type: 'object', properties };\n return CreateType(schema, options);\n}\n/** `[Json]` Creates an Object type */\nexport var Object = _Object;\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[JavaScript]` Creates a Promise type */\nexport function Promise(item, options) {\n return CreateType({ [Kind]: 'Promise', type: 'Promise', item }, options);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { ReadonlyKind } from '../symbols/index.mjs';\nimport { Discard } from '../discard/index.mjs';\nimport { ReadonlyFromMappedResult } from './readonly-from-mapped-result.mjs';\nimport { IsMappedResult } from '../guard/kind.mjs';\nfunction RemoveReadonly(schema) {\n return CreateType(Discard(schema, [ReadonlyKind]));\n}\nfunction AddReadonly(schema) {\n return CreateType({ ...schema, [ReadonlyKind]: 'Readonly' });\n}\n// prettier-ignore\nfunction ReadonlyWithFlag(schema, F) {\n return (F === false\n ? RemoveReadonly(schema)\n : AddReadonly(schema));\n}\n/** `[Json]` Creates a Readonly property */\nexport function Readonly(schema, enable) {\n const F = enable ?? true;\n return IsMappedResult(schema) ? ReadonlyFromMappedResult(schema, F) : ReadonlyWithFlag(schema, F);\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Readonly } from './readonly.mjs';\n// prettier-ignore\nfunction FromProperties(K, F) {\n const Acc = {};\n for (const K2 of globalThis.Object.getOwnPropertyNames(K))\n Acc[K2] = Readonly(K[K2], F);\n return Acc;\n}\n// prettier-ignore\nfunction FromMappedResult(R, F) {\n return FromProperties(R.properties, F);\n}\n// prettier-ignore\nexport function ReadonlyFromMappedResult(R, F) {\n const P = FromMappedResult(R, F);\n return MappedResult(P);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates a Tuple type */\nexport function Tuple(types, options) {\n // prettier-ignore\n return CreateType(types.length > 0 ?\n { [Kind]: 'Tuple', type: 'array', items: types, additionalItems: false, minItems: types.length, maxItems: types.length } :\n { [Kind]: 'Tuple', type: 'array', minItems: types.length, maxItems: types.length }, options);\n}\n","import { Kind, OptionalKind, ReadonlyKind } from '../symbols/index.mjs';\nimport { Discard } from '../discard/index.mjs';\n// evaluation types\nimport { Array } from '../array/index.mjs';\nimport { AsyncIterator } from '../async-iterator/index.mjs';\nimport { Constructor } from '../constructor/index.mjs';\nimport { Function as FunctionType } from '../function/index.mjs';\nimport { IndexPropertyKeys } from '../indexed/index.mjs';\nimport { Intersect } from '../intersect/index.mjs';\nimport { Iterator } from '../iterator/index.mjs';\nimport { Literal } from '../literal/index.mjs';\nimport { Object } from '../object/index.mjs';\nimport { Optional } from '../optional/index.mjs';\nimport { Promise } from '../promise/index.mjs';\nimport { Readonly } from '../readonly/index.mjs';\nimport { Tuple } from '../tuple/index.mjs';\nimport { Union } from '../union/index.mjs';\n// operator\nimport { SetIncludes } from '../sets/index.mjs';\n// mapping types\nimport { MappedResult } from './mapped-result.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsArray, IsAsyncIterator, IsConstructor, IsFunction, IsIntersect, IsIterator, IsReadonly, IsMappedResult, IsMappedKey, IsObject, IsOptional, IsPromise, IsSchema, IsTuple, IsUnion } from '../guard/kind.mjs';\n// prettier-ignore\nfunction FromMappedResult(K, P) {\n return (K in P\n ? FromSchemaType(K, P[K])\n : MappedResult(P));\n}\n// prettier-ignore\nfunction MappedKeyToKnownMappedResultProperties(K) {\n return { [K]: Literal(K) };\n}\n// prettier-ignore\nfunction MappedKeyToUnknownMappedResultProperties(P) {\n const Acc = {};\n for (const L of P)\n Acc[L] = Literal(L);\n return Acc;\n}\n// prettier-ignore\nfunction MappedKeyToMappedResultProperties(K, P) {\n return (SetIncludes(P, K)\n ? MappedKeyToKnownMappedResultProperties(K)\n : MappedKeyToUnknownMappedResultProperties(P));\n}\n// prettier-ignore\nfunction FromMappedKey(K, P) {\n const R = MappedKeyToMappedResultProperties(K, P);\n return FromMappedResult(K, R);\n}\n// prettier-ignore\nfunction FromRest(K, T) {\n return T.map(L => FromSchemaType(K, L));\n}\n// prettier-ignore\nfunction FromProperties(K, T) {\n const Acc = {};\n for (const K2 of globalThis.Object.getOwnPropertyNames(T))\n Acc[K2] = FromSchemaType(K, T[K2]);\n return Acc;\n}\n// prettier-ignore\nfunction FromSchemaType(K, T) {\n // required to retain user defined options for mapped type\n const options = { ...T };\n return (\n // unevaluated modifier types\n IsOptional(T) ? Optional(FromSchemaType(K, Discard(T, [OptionalKind]))) :\n IsReadonly(T) ? Readonly(FromSchemaType(K, Discard(T, [ReadonlyKind]))) :\n // unevaluated mapped types\n IsMappedResult(T) ? FromMappedResult(K, T.properties) :\n IsMappedKey(T) ? FromMappedKey(K, T.keys) :\n // unevaluated types\n IsConstructor(T) ? Constructor(FromRest(K, T.parameters), FromSchemaType(K, T.returns), options) :\n IsFunction(T) ? FunctionType(FromRest(K, T.parameters), FromSchemaType(K, T.returns), options) :\n IsAsyncIterator(T) ? AsyncIterator(FromSchemaType(K, T.items), options) :\n IsIterator(T) ? Iterator(FromSchemaType(K, T.items), options) :\n IsIntersect(T) ? Intersect(FromRest(K, T.allOf), options) :\n IsUnion(T) ? Union(FromRest(K, T.anyOf), options) :\n IsTuple(T) ? Tuple(FromRest(K, T.items ?? []), options) :\n IsObject(T) ? Object(FromProperties(K, T.properties), options) :\n IsArray(T) ? Array(FromSchemaType(K, T.items), options) :\n IsPromise(T) ? Promise(FromSchemaType(K, T.item), options) :\n T);\n}\n// prettier-ignore\nexport function MappedFunctionReturnType(K, T) {\n const Acc = {};\n for (const L of K)\n Acc[L] = FromSchemaType(L, T);\n return Acc;\n}\n/** `[Json]` Creates a Mapped object type */\nexport function Mapped(key, map, options) {\n const K = IsSchema(key) ? IndexPropertyKeys(key) : key;\n const RT = map({ [Kind]: 'MappedKey', keys: K });\n const R = MappedFunctionReturnType(K, RT);\n return Object(R, options);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { OptionalKind } from '../symbols/index.mjs';\nimport { Discard } from '../discard/index.mjs';\nimport { OptionalFromMappedResult } from './optional-from-mapped-result.mjs';\nimport { IsMappedResult } from '../guard/kind.mjs';\nfunction RemoveOptional(schema) {\n return CreateType(Discard(schema, [OptionalKind]));\n}\nfunction AddOptional(schema) {\n return CreateType({ ...schema, [OptionalKind]: 'Optional' });\n}\n// prettier-ignore\nfunction OptionalWithFlag(schema, F) {\n return (F === false\n ? RemoveOptional(schema)\n : AddOptional(schema));\n}\n/** `[Json]` Creates a Optional property */\nexport function Optional(schema, enable) {\n const F = enable ?? true;\n return IsMappedResult(schema) ? OptionalFromMappedResult(schema, F) : OptionalWithFlag(schema, F);\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Optional } from './optional.mjs';\n// prettier-ignore\nfunction FromProperties(P, F) {\n const Acc = {};\n for (const K2 of globalThis.Object.getOwnPropertyNames(P))\n Acc[K2] = Optional(P[K2], F);\n return Acc;\n}\n// prettier-ignore\nfunction FromMappedResult(R, F) {\n return FromProperties(R.properties, F);\n}\n// prettier-ignore\nexport function OptionalFromMappedResult(R, F) {\n const P = FromMappedResult(R, F);\n return MappedResult(P);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsObject, IsSchema } from '../guard/kind.mjs';\n// ------------------------------------------------------------------\n// IntersectCreate\n// ------------------------------------------------------------------\n// prettier-ignore\nexport function IntersectCreate(T, options = {}) {\n const allObjects = T.every((schema) => IsObject(schema));\n const clonedUnevaluatedProperties = IsSchema(options.unevaluatedProperties)\n ? { unevaluatedProperties: options.unevaluatedProperties }\n : {};\n return CreateType((options.unevaluatedProperties === false || IsSchema(options.unevaluatedProperties) || allObjects\n ? { ...clonedUnevaluatedProperties, [Kind]: 'Intersect', type: 'object', allOf: T }\n : { ...clonedUnevaluatedProperties, [Kind]: 'Intersect', allOf: T }), options);\n}\n","import { OptionalKind } from '../symbols/index.mjs';\nimport { CreateType } from '../create/type.mjs';\nimport { Discard } from '../discard/index.mjs';\nimport { Never } from '../never/index.mjs';\nimport { Optional } from '../optional/index.mjs';\nimport { IntersectCreate } from './intersect-create.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsOptional, IsTransform } from '../guard/kind.mjs';\n// prettier-ignore\nfunction IsIntersectOptional(types) {\n return types.every(left => IsOptional(left));\n}\n// prettier-ignore\nfunction RemoveOptionalFromType(type) {\n return (Discard(type, [OptionalKind]));\n}\n// prettier-ignore\nfunction RemoveOptionalFromRest(types) {\n return types.map(left => IsOptional(left) ? RemoveOptionalFromType(left) : left);\n}\n// prettier-ignore\nfunction ResolveIntersect(types, options) {\n return (IsIntersectOptional(types)\n ? Optional(IntersectCreate(RemoveOptionalFromRest(types), options))\n : IntersectCreate(RemoveOptionalFromRest(types), options));\n}\n/** `[Json]` Creates an evaluated Intersect type */\nexport function IntersectEvaluated(types, options = {}) {\n if (types.length === 1)\n return CreateType(types[0], options);\n if (types.length === 0)\n return Never(options);\n if (types.some((schema) => IsTransform(schema)))\n throw new Error('Cannot intersect transform types');\n return ResolveIntersect(types, options);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Never } from '../never/index.mjs';\nimport { IntersectCreate } from './intersect-create.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsTransform } from '../guard/kind.mjs';\n/** `[Json]` Creates an evaluated Intersect type */\nexport function Intersect(types, options) {\n if (types.length === 1)\n return CreateType(types[0], options);\n if (types.length === 0)\n return Never(options);\n if (types.some((schema) => IsTransform(schema)))\n throw new Error('Cannot intersect transform types');\n return IntersectCreate(types, options);\n}\n","import { TypeBoxError } from '../error/index.mjs';\nimport { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates a Ref type. The referenced type must contain a $id */\nexport function Ref(...args) {\n const [$ref, options] = typeof args[0] === 'string' ? [args[0], args[1]] : [args[0].$id, args[1]];\n if (typeof $ref !== 'string')\n throw new TypeBoxError('Ref: $ref must be a string');\n return CreateType({ [Kind]: 'Ref', $ref }, options);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Computed } from '../computed/index.mjs';\nimport { Intersect } from '../intersect/index.mjs';\nimport { Union } from '../union/index.mjs';\nimport { Ref } from '../ref/index.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsIntersect, IsUnion, IsPromise, IsRef, IsComputed } from '../guard/kind.mjs';\n// prettier-ignore\nfunction FromComputed(target, parameters) {\n return Computed('Awaited', [Computed(target, parameters)]);\n}\n// prettier-ignore\nfunction FromRef($ref) {\n return Computed('Awaited', [Ref($ref)]);\n}\n// prettier-ignore\nfunction FromIntersect(types) {\n return Intersect(FromRest(types));\n}\n// prettier-ignore\nfunction FromUnion(types) {\n return Union(FromRest(types));\n}\n// prettier-ignore\nfunction FromPromise(type) {\n return Awaited(type);\n}\n// prettier-ignore\nfunction FromRest(types) {\n return types.map(type => Awaited(type));\n}\n/** `[JavaScript]` Constructs a type by recursively unwrapping Promise types */\nexport function Awaited(type, options) {\n return CreateType(IsComputed(type) ? FromComputed(type.target, type.parameters) : IsIntersect(type) ? FromIntersect(type.allOf) : IsUnion(type) ? FromUnion(type.anyOf) : IsPromise(type) ? FromPromise(type.item) : IsRef(type) ? FromRef(type.$ref) : type, options);\n}\n","import { SetUnionMany, SetIntersectMany } from '../sets/index.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsIntersect, IsUnion, IsTuple, IsArray, IsObject, IsRecord } from '../guard/kind.mjs';\n// prettier-ignore\nfunction FromRest(types) {\n const result = [];\n for (const L of types)\n result.push(KeyOfPropertyKeys(L));\n return result;\n}\n// prettier-ignore\nfunction FromIntersect(types) {\n const propertyKeysArray = FromRest(types);\n const propertyKeys = SetUnionMany(propertyKeysArray);\n return propertyKeys;\n}\n// prettier-ignore\nfunction FromUnion(types) {\n const propertyKeysArray = FromRest(types);\n const propertyKeys = SetIntersectMany(propertyKeysArray);\n return propertyKeys;\n}\n// prettier-ignore\nfunction FromTuple(types) {\n return types.map((_, indexer) => indexer.toString());\n}\n// prettier-ignore\nfunction FromArray(_) {\n return (['[number]']);\n}\n// prettier-ignore\nfunction FromProperties(T) {\n return (globalThis.Object.getOwnPropertyNames(T));\n}\n// ------------------------------------------------------------------\n// FromPatternProperties\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromPatternProperties(patternProperties) {\n if (!includePatternProperties)\n return [];\n const patternPropertyKeys = globalThis.Object.getOwnPropertyNames(patternProperties);\n return patternPropertyKeys.map(key => {\n return (key[0] === '^' && key[key.length - 1] === '$')\n ? key.slice(1, key.length - 1)\n : key;\n });\n}\n/** Returns a tuple of PropertyKeys derived from the given TSchema. */\n// prettier-ignore\nexport function KeyOfPropertyKeys(type) {\n return (IsIntersect(type) ? FromIntersect(type.allOf) :\n IsUnion(type) ? FromUnion(type.anyOf) :\n IsTuple(type) ? FromTuple(type.items ?? []) :\n IsArray(type) ? FromArray(type.items) :\n IsObject(type) ? FromProperties(type.properties) :\n IsRecord(type) ? FromPatternProperties(type.patternProperties) :\n []);\n}\n// ----------------------------------------------------------------\n// KeyOfPattern\n// ----------------------------------------------------------------\nlet includePatternProperties = false;\n/** Returns a regular expression pattern derived from the given TSchema */\nexport function KeyOfPattern(schema) {\n includePatternProperties = true;\n const keys = KeyOfPropertyKeys(schema);\n includePatternProperties = false;\n const pattern = keys.map((key) => `(${key})`);\n return `^(${pattern.join('|')})$`;\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Literal } from '../literal/index.mjs';\nimport { Number } from '../number/index.mjs';\nimport { Computed } from '../computed/index.mjs';\nimport { Ref } from '../ref/index.mjs';\nimport { KeyOfPropertyKeys } from './keyof-property-keys.mjs';\nimport { UnionEvaluated } from '../union/index.mjs';\nimport { KeyOfFromMappedResult } from './keyof-from-mapped-result.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsMappedResult, IsRef, IsComputed } from '../guard/kind.mjs';\n// prettier-ignore\nfunction FromComputed(target, parameters) {\n return Computed('KeyOf', [Computed(target, parameters)]);\n}\n// prettier-ignore\nfunction FromRef($ref) {\n return Computed('KeyOf', [Ref($ref)]);\n}\n// prettier-ignore\nfunction KeyOfFromType(type, options) {\n const propertyKeys = KeyOfPropertyKeys(type);\n const propertyKeyTypes = KeyOfPropertyKeysToRest(propertyKeys);\n const result = UnionEvaluated(propertyKeyTypes);\n return CreateType(result, options);\n}\n// prettier-ignore\nexport function KeyOfPropertyKeysToRest(propertyKeys) {\n return propertyKeys.map(L => L === '[number]' ? Number() : Literal(L));\n}\n/** `[Json]` Creates a KeyOf type */\nexport function KeyOf(type, options) {\n return (IsComputed(type) ? FromComputed(type.target, type.parameters) : IsRef(type) ? FromRef(type.$ref) : IsMappedResult(type) ? KeyOfFromMappedResult(type, options) : KeyOfFromType(type, options));\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { KeyOf } from './keyof.mjs';\nimport { Clone } from '../clone/value.mjs';\n// prettier-ignore\nfunction FromProperties(properties, options) {\n const result = {};\n for (const K2 of globalThis.Object.getOwnPropertyNames(properties))\n result[K2] = KeyOf(properties[K2], Clone(options));\n return result;\n}\n// prettier-ignore\nfunction FromMappedResult(mappedResult, options) {\n return FromProperties(mappedResult.properties, options);\n}\n// prettier-ignore\nexport function KeyOfFromMappedResult(mappedResult, options) {\n const properties = FromMappedResult(mappedResult, options);\n return MappedResult(properties);\n}\n","import { IntersectEvaluated } from '../intersect/index.mjs';\nimport { IndexFromPropertyKeys } from '../indexed/index.mjs';\nimport { KeyOfPropertyKeys } from '../keyof/index.mjs';\nimport { Object } from '../object/index.mjs';\nimport { SetDistinct } from '../sets/index.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsNever } from '../guard/kind.mjs';\n// prettier-ignore\nfunction CompositeKeys(T) {\n const Acc = [];\n for (const L of T)\n Acc.push(...KeyOfPropertyKeys(L));\n return SetDistinct(Acc);\n}\n// prettier-ignore\nfunction FilterNever(T) {\n return T.filter(L => !IsNever(L));\n}\n// prettier-ignore\nfunction CompositeProperty(T, K) {\n const Acc = [];\n for (const L of T)\n Acc.push(...IndexFromPropertyKeys(L, [K]));\n return FilterNever(Acc);\n}\n// prettier-ignore\nfunction CompositeProperties(T, K) {\n const Acc = {};\n for (const L of K) {\n Acc[L] = IntersectEvaluated(CompositeProperty(T, L));\n }\n return Acc;\n}\n// prettier-ignore\nexport function Composite(T, options) {\n const K = CompositeKeys(T);\n const P = CompositeProperties(T, K);\n const R = Object(P, options);\n return R;\n}\n","import { Kind } from '../symbols/index.mjs';\nimport { CreateType } from '../create/type.mjs';\n/** `[JavaScript]` Creates a Date type */\nexport function Date(options) {\n return CreateType({ [Kind]: 'Date', type: 'Date' }, options);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates a Null type */\nexport function Null(options) {\n return CreateType({ [Kind]: 'Null', type: 'null' }, options);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[JavaScript]` Creates a Symbol type */\nexport function Symbol(options) {\n return CreateType({ [Kind]: 'Symbol', type: 'symbol' }, options);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[JavaScript]` Creates a Undefined type */\nexport function Undefined(options) {\n return CreateType({ [Kind]: 'Undefined', type: 'undefined' }, options);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[JavaScript]` Creates a Uint8Array type */\nexport function Uint8Array(options) {\n return CreateType({ [Kind]: 'Uint8Array', type: 'Uint8Array' }, options);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates an Unknown type */\nexport function Unknown(options) {\n return CreateType({ [Kind]: 'Unknown' }, options);\n}\n","import { Any } from '../any/index.mjs';\nimport { BigInt } from '../bigint/index.mjs';\nimport { Date } from '../date/index.mjs';\nimport { Function as FunctionType } from '../function/index.mjs';\nimport { Literal } from '../literal/index.mjs';\nimport { Null } from '../null/index.mjs';\nimport { Object } from '../object/index.mjs';\nimport { Symbol } from '../symbol/index.mjs';\nimport { Tuple } from '../tuple/index.mjs';\nimport { Readonly } from '../readonly/index.mjs';\nimport { Undefined } from '../undefined/index.mjs';\nimport { Uint8Array } from '../uint8array/index.mjs';\nimport { Unknown } from '../unknown/index.mjs';\nimport { CreateType } from '../create/index.mjs';\n// ------------------------------------------------------------------\n// ValueGuard\n// ------------------------------------------------------------------\nimport { IsArray, IsNumber, IsBigInt, IsUint8Array, IsDate, IsIterator, IsObject, IsAsyncIterator, IsFunction, IsUndefined, IsNull, IsSymbol, IsBoolean, IsString } from '../guard/value.mjs';\n// prettier-ignore\nfunction FromArray(T) {\n return T.map(L => FromValue(L, false));\n}\n// prettier-ignore\nfunction FromProperties(value) {\n const Acc = {};\n for (const K of globalThis.Object.getOwnPropertyNames(value))\n Acc[K] = Readonly(FromValue(value[K], false));\n return Acc;\n}\nfunction ConditionalReadonly(T, root) {\n return (root === true ? T : Readonly(T));\n}\n// prettier-ignore\nfunction FromValue(value, root) {\n return (IsAsyncIterator(value) ? ConditionalReadonly(Any(), root) :\n IsIterator(value) ? ConditionalReadonly(Any(), root) :\n IsArray(value) ? Readonly(Tuple(FromArray(value))) :\n IsUint8Array(value) ? Uint8Array() :\n IsDate(value) ? Date() :\n IsObject(value) ? ConditionalReadonly(Object(FromProperties(value)), root) :\n IsFunction(value) ? ConditionalReadonly(FunctionType([], Unknown()), root) :\n IsUndefined(value) ? Undefined() :\n IsNull(value) ? Null() :\n IsSymbol(value) ? Symbol() :\n IsBigInt(value) ? BigInt() :\n IsNumber(value) ? Literal(value) :\n IsBoolean(value) ? Literal(value) :\n IsString(value) ? Literal(value) :\n Object({}));\n}\n/** `[JavaScript]` Creates a readonly const type from the given value. */\nexport function Const(T, options) {\n return CreateType(FromValue(T, true), options);\n}\n","import { Tuple } from '../tuple/index.mjs';\nimport { Never } from '../never/index.mjs';\nimport * as KindGuard from '../guard/kind.mjs';\n/** `[JavaScript]` Extracts the ConstructorParameters from the given Constructor type */\nexport function ConstructorParameters(schema, options) {\n return (KindGuard.IsConstructor(schema) ? Tuple(schema.parameters, options) : Never(options));\n}\n","import { Literal } from '../literal/index.mjs';\nimport { Kind, Hint } from '../symbols/index.mjs';\nimport { Union } from '../union/index.mjs';\n// ------------------------------------------------------------------\n// ValueGuard\n// ------------------------------------------------------------------\nimport { IsUndefined } from '../guard/value.mjs';\n/** `[Json]` Creates a Enum type */\nexport function Enum(item, options) {\n if (IsUndefined(item))\n throw new Error('Enum undefined or empty');\n const values1 = globalThis.Object.getOwnPropertyNames(item)\n .filter((key) => isNaN(key))\n .map((key) => item[key]);\n const values2 = [...new Set(values1)];\n const anyOf = values2.map((value) => Literal(value));\n return Union(anyOf, { ...options, [Hint]: 'Enum' });\n}\n","import { Any } from '../any/index.mjs';\nimport { Function as FunctionType } from '../function/index.mjs';\nimport { Number } from '../number/index.mjs';\nimport { String } from '../string/index.mjs';\nimport { Unknown } from '../unknown/index.mjs';\nimport { TemplateLiteralToUnion } from '../template-literal/index.mjs';\nimport { PatternNumberExact, PatternStringExact } from '../patterns/index.mjs';\nimport { Kind, Hint } from '../symbols/index.mjs';\nimport { TypeBoxError } from '../error/index.mjs';\nimport { TypeGuard, ValueGuard } from '../guard/index.mjs';\nexport class ExtendsResolverError extends TypeBoxError {\n}\nexport var ExtendsResult;\n(function (ExtendsResult) {\n ExtendsResult[ExtendsResult[\"Union\"] = 0] = \"Union\";\n ExtendsResult[ExtendsResult[\"True\"] = 1] = \"True\";\n ExtendsResult[ExtendsResult[\"False\"] = 2] = \"False\";\n})(ExtendsResult || (ExtendsResult = {}));\n// ------------------------------------------------------------------\n// IntoBooleanResult\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction IntoBooleanResult(result) {\n return result === ExtendsResult.False ? result : ExtendsResult.True;\n}\n// ------------------------------------------------------------------\n// Throw\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction Throw(message) {\n throw new ExtendsResolverError(message);\n}\n// ------------------------------------------------------------------\n// StructuralRight\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction IsStructuralRight(right) {\n return (TypeGuard.IsNever(right) ||\n TypeGuard.IsIntersect(right) ||\n TypeGuard.IsUnion(right) ||\n TypeGuard.IsUnknown(right) ||\n TypeGuard.IsAny(right));\n}\n// prettier-ignore\nfunction StructuralRight(left, right) {\n return (TypeGuard.IsNever(right) ? FromNeverRight(left, right) :\n TypeGuard.IsIntersect(right) ? FromIntersectRight(left, right) :\n TypeGuard.IsUnion(right) ? FromUnionRight(left, right) :\n TypeGuard.IsUnknown(right) ? FromUnknownRight(left, right) :\n TypeGuard.IsAny(right) ? FromAnyRight(left, right) :\n Throw('StructuralRight'));\n}\n// ------------------------------------------------------------------\n// Any\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromAnyRight(left, right) {\n return ExtendsResult.True;\n}\n// prettier-ignore\nfunction FromAny(left, right) {\n return (TypeGuard.IsIntersect(right) ? FromIntersectRight(left, right) :\n (TypeGuard.IsUnion(right) && right.anyOf.some((schema) => TypeGuard.IsAny(schema) || TypeGuard.IsUnknown(schema))) ? ExtendsResult.True :\n TypeGuard.IsUnion(right) ? ExtendsResult.Union :\n TypeGuard.IsUnknown(right) ? ExtendsResult.True :\n TypeGuard.IsAny(right) ? ExtendsResult.True :\n ExtendsResult.Union);\n}\n// ------------------------------------------------------------------\n// Array\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromArrayRight(left, right) {\n return (TypeGuard.IsUnknown(left) ? ExtendsResult.False :\n TypeGuard.IsAny(left) ? ExtendsResult.Union :\n TypeGuard.IsNever(left) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// prettier-ignore\nfunction FromArray(left, right) {\n return (TypeGuard.IsObject(right) && IsObjectArrayLike(right) ? ExtendsResult.True :\n IsStructuralRight(right) ? StructuralRight(left, right) :\n !TypeGuard.IsArray(right) ? ExtendsResult.False :\n IntoBooleanResult(Visit(left.items, right.items)));\n}\n// ------------------------------------------------------------------\n// AsyncIterator\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromAsyncIterator(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n !TypeGuard.IsAsyncIterator(right) ? ExtendsResult.False :\n IntoBooleanResult(Visit(left.items, right.items)));\n}\n// ------------------------------------------------------------------\n// BigInt\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromBigInt(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsRecord(right) ? FromRecordRight(left, right) :\n TypeGuard.IsBigInt(right) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// Boolean\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromBooleanRight(left, right) {\n return (TypeGuard.IsLiteralBoolean(left) ? ExtendsResult.True :\n TypeGuard.IsBoolean(left) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// prettier-ignore\nfunction FromBoolean(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsRecord(right) ? FromRecordRight(left, right) :\n TypeGuard.IsBoolean(right) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// Constructor\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromConstructor(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n !TypeGuard.IsConstructor(right) ? ExtendsResult.False :\n left.parameters.length > right.parameters.length ? ExtendsResult.False :\n (!left.parameters.every((schema, index) => IntoBooleanResult(Visit(right.parameters[index], schema)) === ExtendsResult.True)) ? ExtendsResult.False :\n IntoBooleanResult(Visit(left.returns, right.returns)));\n}\n// ------------------------------------------------------------------\n// Date\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromDate(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsRecord(right) ? FromRecordRight(left, right) :\n TypeGuard.IsDate(right) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// Function\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromFunction(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n !TypeGuard.IsFunction(right) ? ExtendsResult.False :\n left.parameters.length > right.parameters.length ? ExtendsResult.False :\n (!left.parameters.every((schema, index) => IntoBooleanResult(Visit(right.parameters[index], schema)) === ExtendsResult.True)) ? ExtendsResult.False :\n IntoBooleanResult(Visit(left.returns, right.returns)));\n}\n// ------------------------------------------------------------------\n// Integer\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromIntegerRight(left, right) {\n return (TypeGuard.IsLiteral(left) && ValueGuard.IsNumber(left.const) ? ExtendsResult.True :\n TypeGuard.IsNumber(left) || TypeGuard.IsInteger(left) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// prettier-ignore\nfunction FromInteger(left, right) {\n return (TypeGuard.IsInteger(right) || TypeGuard.IsNumber(right) ? ExtendsResult.True :\n IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsRecord(right) ? FromRecordRight(left, right) :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// Intersect\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromIntersectRight(left, right) {\n return right.allOf.every((schema) => Visit(left, schema) === ExtendsResult.True)\n ? ExtendsResult.True\n : ExtendsResult.False;\n}\n// prettier-ignore\nfunction FromIntersect(left, right) {\n return left.allOf.some((schema) => Visit(schema, right) === ExtendsResult.True)\n ? ExtendsResult.True\n : ExtendsResult.False;\n}\n// ------------------------------------------------------------------\n// Iterator\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromIterator(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n !TypeGuard.IsIterator(right) ? ExtendsResult.False :\n IntoBooleanResult(Visit(left.items, right.items)));\n}\n// ------------------------------------------------------------------\n// Literal\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromLiteral(left, right) {\n return (TypeGuard.IsLiteral(right) && right.const === left.const ? ExtendsResult.True :\n IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsRecord(right) ? FromRecordRight(left, right) :\n TypeGuard.IsString(right) ? FromStringRight(left, right) :\n TypeGuard.IsNumber(right) ? FromNumberRight(left, right) :\n TypeGuard.IsInteger(right) ? FromIntegerRight(left, right) :\n TypeGuard.IsBoolean(right) ? FromBooleanRight(left, right) :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// Never\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromNeverRight(left, right) {\n return ExtendsResult.False;\n}\n// prettier-ignore\nfunction FromNever(left, right) {\n return ExtendsResult.True;\n}\n// ------------------------------------------------------------------\n// Not\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction UnwrapTNot(schema) {\n let [current, depth] = [schema, 0];\n while (true) {\n if (!TypeGuard.IsNot(current))\n break;\n current = current.not;\n depth += 1;\n }\n return depth % 2 === 0 ? current : Unknown();\n}\n// prettier-ignore\nfunction FromNot(left, right) {\n // TypeScript has no concept of negated types, and attempts to correctly check the negated\n // type at runtime would put TypeBox at odds with TypeScripts ability to statically infer\n // the type. Instead we unwrap to either unknown or T and continue evaluating.\n // prettier-ignore\n return (TypeGuard.IsNot(left) ? Visit(UnwrapTNot(left), right) :\n TypeGuard.IsNot(right) ? Visit(left, UnwrapTNot(right)) :\n Throw('Invalid fallthrough for Not'));\n}\n// ------------------------------------------------------------------\n// Null\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromNull(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsRecord(right) ? FromRecordRight(left, right) :\n TypeGuard.IsNull(right) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// Number\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromNumberRight(left, right) {\n return (TypeGuard.IsLiteralNumber(left) ? ExtendsResult.True :\n TypeGuard.IsNumber(left) || TypeGuard.IsInteger(left) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// prettier-ignore\nfunction FromNumber(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsRecord(right) ? FromRecordRight(left, right) :\n TypeGuard.IsInteger(right) || TypeGuard.IsNumber(right) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// Object\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction IsObjectPropertyCount(schema, count) {\n return Object.getOwnPropertyNames(schema.properties).length === count;\n}\n// prettier-ignore\nfunction IsObjectStringLike(schema) {\n return IsObjectArrayLike(schema);\n}\n// prettier-ignore\nfunction IsObjectSymbolLike(schema) {\n return IsObjectPropertyCount(schema, 0) || (IsObjectPropertyCount(schema, 1) && 'description' in schema.properties && TypeGuard.IsUnion(schema.properties.description) && schema.properties.description.anyOf.length === 2 && ((TypeGuard.IsString(schema.properties.description.anyOf[0]) &&\n TypeGuard.IsUndefined(schema.properties.description.anyOf[1])) || (TypeGuard.IsString(schema.properties.description.anyOf[1]) &&\n TypeGuard.IsUndefined(schema.properties.description.anyOf[0]))));\n}\n// prettier-ignore\nfunction IsObjectNumberLike(schema) {\n return IsObjectPropertyCount(schema, 0);\n}\n// prettier-ignore\nfunction IsObjectBooleanLike(schema) {\n return IsObjectPropertyCount(schema, 0);\n}\n// prettier-ignore\nfunction IsObjectBigIntLike(schema) {\n return IsObjectPropertyCount(schema, 0);\n}\n// prettier-ignore\nfunction IsObjectDateLike(schema) {\n return IsObjectPropertyCount(schema, 0);\n}\n// prettier-ignore\nfunction IsObjectUint8ArrayLike(schema) {\n return IsObjectArrayLike(schema);\n}\n// prettier-ignore\nfunction IsObjectFunctionLike(schema) {\n const length = Number();\n return IsObjectPropertyCount(schema, 0) || (IsObjectPropertyCount(schema, 1) && 'length' in schema.properties && IntoBooleanResult(Visit(schema.properties['length'], length)) === ExtendsResult.True);\n}\n// prettier-ignore\nfunction IsObjectConstructorLike(schema) {\n return IsObjectPropertyCount(schema, 0);\n}\n// prettier-ignore\nfunction IsObjectArrayLike(schema) {\n const length = Number();\n return IsObjectPropertyCount(schema, 0) || (IsObjectPropertyCount(schema, 1) && 'length' in schema.properties && IntoBooleanResult(Visit(schema.properties['length'], length)) === ExtendsResult.True);\n}\n// prettier-ignore\nfunction IsObjectPromiseLike(schema) {\n const then = FunctionType([Any()], Any());\n return IsObjectPropertyCount(schema, 0) || (IsObjectPropertyCount(schema, 1) && 'then' in schema.properties && IntoBooleanResult(Visit(schema.properties['then'], then)) === ExtendsResult.True);\n}\n// ------------------------------------------------------------------\n// Property\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction Property(left, right) {\n return (Visit(left, right) === ExtendsResult.False ? ExtendsResult.False :\n TypeGuard.IsOptional(left) && !TypeGuard.IsOptional(right) ? ExtendsResult.False :\n ExtendsResult.True);\n}\n// prettier-ignore\nfunction FromObjectRight(left, right) {\n return (TypeGuard.IsUnknown(left) ? ExtendsResult.False :\n TypeGuard.IsAny(left) ? ExtendsResult.Union : (TypeGuard.IsNever(left) ||\n (TypeGuard.IsLiteralString(left) && IsObjectStringLike(right)) ||\n (TypeGuard.IsLiteralNumber(left) && IsObjectNumberLike(right)) ||\n (TypeGuard.IsLiteralBoolean(left) && IsObjectBooleanLike(right)) ||\n (TypeGuard.IsSymbol(left) && IsObjectSymbolLike(right)) ||\n (TypeGuard.IsBigInt(left) && IsObjectBigIntLike(right)) ||\n (TypeGuard.IsString(left) && IsObjectStringLike(right)) ||\n (TypeGuard.IsSymbol(left) && IsObjectSymbolLike(right)) ||\n (TypeGuard.IsNumber(left) && IsObjectNumberLike(right)) ||\n (TypeGuard.IsInteger(left) && IsObjectNumberLike(right)) ||\n (TypeGuard.IsBoolean(left) && IsObjectBooleanLike(right)) ||\n (TypeGuard.IsUint8Array(left) && IsObjectUint8ArrayLike(right)) ||\n (TypeGuard.IsDate(left) && IsObjectDateLike(right)) ||\n (TypeGuard.IsConstructor(left) && IsObjectConstructorLike(right)) ||\n (TypeGuard.IsFunction(left) && IsObjectFunctionLike(right))) ? ExtendsResult.True :\n (TypeGuard.IsRecord(left) && TypeGuard.IsString(RecordKey(left))) ? (() => {\n // When expressing a Record with literal key values, the Record is converted into a Object with\n // the Hint assigned as `Record`. This is used to invert the extends logic.\n return right[Hint] === 'Record' ? ExtendsResult.True : ExtendsResult.False;\n })() :\n (TypeGuard.IsRecord(left) && TypeGuard.IsNumber(RecordKey(left))) ? (() => {\n return IsObjectPropertyCount(right, 0) ? ExtendsResult.True : ExtendsResult.False;\n })() :\n ExtendsResult.False);\n}\n// prettier-ignore\nfunction FromObject(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsRecord(right) ? FromRecordRight(left, right) :\n !TypeGuard.IsObject(right) ? ExtendsResult.False :\n (() => {\n for (const key of Object.getOwnPropertyNames(right.properties)) {\n if (!(key in left.properties) && !TypeGuard.IsOptional(right.properties[key])) {\n return ExtendsResult.False;\n }\n if (TypeGuard.IsOptional(right.properties[key])) {\n return ExtendsResult.True;\n }\n if (Property(left.properties[key], right.properties[key]) === ExtendsResult.False) {\n return ExtendsResult.False;\n }\n }\n return ExtendsResult.True;\n })());\n}\n// ------------------------------------------------------------------\n// Promise\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromPromise(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) && IsObjectPromiseLike(right) ? ExtendsResult.True :\n !TypeGuard.IsPromise(right) ? ExtendsResult.False :\n IntoBooleanResult(Visit(left.item, right.item)));\n}\n// ------------------------------------------------------------------\n// Record\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction RecordKey(schema) {\n return (PatternNumberExact in schema.patternProperties ? Number() :\n PatternStringExact in schema.patternProperties ? String() :\n Throw('Unknown record key pattern'));\n}\n// prettier-ignore\nfunction RecordValue(schema) {\n return (PatternNumberExact in schema.patternProperties ? schema.patternProperties[PatternNumberExact] :\n PatternStringExact in schema.patternProperties ? schema.patternProperties[PatternStringExact] :\n Throw('Unable to get record value schema'));\n}\n// prettier-ignore\nfunction FromRecordRight(left, right) {\n const [Key, Value] = [RecordKey(right), RecordValue(right)];\n return ((TypeGuard.IsLiteralString(left) && TypeGuard.IsNumber(Key) && IntoBooleanResult(Visit(left, Value)) === ExtendsResult.True) ? ExtendsResult.True :\n TypeGuard.IsUint8Array(left) && TypeGuard.IsNumber(Key) ? Visit(left, Value) :\n TypeGuard.IsString(left) && TypeGuard.IsNumber(Key) ? Visit(left, Value) :\n TypeGuard.IsArray(left) && TypeGuard.IsNumber(Key) ? Visit(left, Value) :\n TypeGuard.IsObject(left) ? (() => {\n for (const key of Object.getOwnPropertyNames(left.properties)) {\n if (Property(Value, left.properties[key]) === ExtendsResult.False) {\n return ExtendsResult.False;\n }\n }\n return ExtendsResult.True;\n })() :\n ExtendsResult.False);\n}\n// prettier-ignore\nfunction FromRecord(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n !TypeGuard.IsRecord(right) ? ExtendsResult.False :\n Visit(RecordValue(left), RecordValue(right)));\n}\n// ------------------------------------------------------------------\n// RegExp\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromRegExp(left, right) {\n // Note: RegExp types evaluate as strings, not RegExp objects.\n // Here we remap either into string and continue evaluating.\n const L = TypeGuard.IsRegExp(left) ? String() : left;\n const R = TypeGuard.IsRegExp(right) ? String() : right;\n return Visit(L, R);\n}\n// ------------------------------------------------------------------\n// String\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromStringRight(left, right) {\n return (TypeGuard.IsLiteral(left) && ValueGuard.IsString(left.const) ? ExtendsResult.True :\n TypeGuard.IsString(left) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// prettier-ignore\nfunction FromString(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsRecord(right) ? FromRecordRight(left, right) :\n TypeGuard.IsString(right) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// Symbol\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromSymbol(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsRecord(right) ? FromRecordRight(left, right) :\n TypeGuard.IsSymbol(right) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// TemplateLiteral\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromTemplateLiteral(left, right) {\n // TemplateLiteral types are resolved to either unions for finite expressions or string\n // for infinite expressions. Here we call to TemplateLiteralResolver to resolve for\n // either type and continue evaluating.\n return (TypeGuard.IsTemplateLiteral(left) ? Visit(TemplateLiteralToUnion(left), right) :\n TypeGuard.IsTemplateLiteral(right) ? Visit(left, TemplateLiteralToUnion(right)) :\n Throw('Invalid fallthrough for TemplateLiteral'));\n}\n// ------------------------------------------------------------------\n// Tuple\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction IsArrayOfTuple(left, right) {\n return (TypeGuard.IsArray(right) &&\n left.items !== undefined &&\n left.items.every((schema) => Visit(schema, right.items) === ExtendsResult.True));\n}\n// prettier-ignore\nfunction FromTupleRight(left, right) {\n return (TypeGuard.IsNever(left) ? ExtendsResult.True :\n TypeGuard.IsUnknown(left) ? ExtendsResult.False :\n TypeGuard.IsAny(left) ? ExtendsResult.Union :\n ExtendsResult.False);\n}\n// prettier-ignore\nfunction FromTuple(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) && IsObjectArrayLike(right) ? ExtendsResult.True :\n TypeGuard.IsArray(right) && IsArrayOfTuple(left, right) ? ExtendsResult.True :\n !TypeGuard.IsTuple(right) ? ExtendsResult.False :\n (ValueGuard.IsUndefined(left.items) && !ValueGuard.IsUndefined(right.items)) || (!ValueGuard.IsUndefined(left.items) && ValueGuard.IsUndefined(right.items)) ? ExtendsResult.False :\n (ValueGuard.IsUndefined(left.items) && !ValueGuard.IsUndefined(right.items)) ? ExtendsResult.True :\n left.items.every((schema, index) => Visit(schema, right.items[index]) === ExtendsResult.True) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// Uint8Array\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromUint8Array(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsRecord(right) ? FromRecordRight(left, right) :\n TypeGuard.IsUint8Array(right) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// Undefined\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromUndefined(left, right) {\n return (IsStructuralRight(right) ? StructuralRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsRecord(right) ? FromRecordRight(left, right) :\n TypeGuard.IsVoid(right) ? FromVoidRight(left, right) :\n TypeGuard.IsUndefined(right) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// Union\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromUnionRight(left, right) {\n return right.anyOf.some((schema) => Visit(left, schema) === ExtendsResult.True)\n ? ExtendsResult.True\n : ExtendsResult.False;\n}\n// prettier-ignore\nfunction FromUnion(left, right) {\n return left.anyOf.every((schema) => Visit(schema, right) === ExtendsResult.True)\n ? ExtendsResult.True\n : ExtendsResult.False;\n}\n// ------------------------------------------------------------------\n// Unknown\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromUnknownRight(left, right) {\n return ExtendsResult.True;\n}\n// prettier-ignore\nfunction FromUnknown(left, right) {\n return (TypeGuard.IsNever(right) ? FromNeverRight(left, right) :\n TypeGuard.IsIntersect(right) ? FromIntersectRight(left, right) :\n TypeGuard.IsUnion(right) ? FromUnionRight(left, right) :\n TypeGuard.IsAny(right) ? FromAnyRight(left, right) :\n TypeGuard.IsString(right) ? FromStringRight(left, right) :\n TypeGuard.IsNumber(right) ? FromNumberRight(left, right) :\n TypeGuard.IsInteger(right) ? FromIntegerRight(left, right) :\n TypeGuard.IsBoolean(right) ? FromBooleanRight(left, right) :\n TypeGuard.IsArray(right) ? FromArrayRight(left, right) :\n TypeGuard.IsTuple(right) ? FromTupleRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsUnknown(right) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// ------------------------------------------------------------------\n// Void\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromVoidRight(left, right) {\n return (TypeGuard.IsUndefined(left) ? ExtendsResult.True :\n TypeGuard.IsUndefined(left) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// prettier-ignore\nfunction FromVoid(left, right) {\n return (TypeGuard.IsIntersect(right) ? FromIntersectRight(left, right) :\n TypeGuard.IsUnion(right) ? FromUnionRight(left, right) :\n TypeGuard.IsUnknown(right) ? FromUnknownRight(left, right) :\n TypeGuard.IsAny(right) ? FromAnyRight(left, right) :\n TypeGuard.IsObject(right) ? FromObjectRight(left, right) :\n TypeGuard.IsVoid(right) ? ExtendsResult.True :\n ExtendsResult.False);\n}\n// prettier-ignore\nfunction Visit(left, right) {\n return (\n // resolvable\n (TypeGuard.IsTemplateLiteral(left) || TypeGuard.IsTemplateLiteral(right)) ? FromTemplateLiteral(left, right) :\n (TypeGuard.IsRegExp(left) || TypeGuard.IsRegExp(right)) ? FromRegExp(left, right) :\n (TypeGuard.IsNot(left) || TypeGuard.IsNot(right)) ? FromNot(left, right) :\n // standard\n TypeGuard.IsAny(left) ? FromAny(left, right) :\n TypeGuard.IsArray(left) ? FromArray(left, right) :\n TypeGuard.IsBigInt(left) ? FromBigInt(left, right) :\n TypeGuard.IsBoolean(left) ? FromBoolean(left, right) :\n TypeGuard.IsAsyncIterator(left) ? FromAsyncIterator(left, right) :\n TypeGuard.IsConstructor(left) ? FromConstructor(left, right) :\n TypeGuard.IsDate(left) ? FromDate(left, right) :\n TypeGuard.IsFunction(left) ? FromFunction(left, right) :\n TypeGuard.IsInteger(left) ? FromInteger(left, right) :\n TypeGuard.IsIntersect(left) ? FromIntersect(left, right) :\n TypeGuard.IsIterator(left) ? FromIterator(left, right) :\n TypeGuard.IsLiteral(left) ? FromLiteral(left, right) :\n TypeGuard.IsNever(left) ? FromNever(left, right) :\n TypeGuard.IsNull(left) ? FromNull(left, right) :\n TypeGuard.IsNumber(left) ? FromNumber(left, right) :\n TypeGuard.IsObject(left) ? FromObject(left, right) :\n TypeGuard.IsRecord(left) ? FromRecord(left, right) :\n TypeGuard.IsString(left) ? FromString(left, right) :\n TypeGuard.IsSymbol(left) ? FromSymbol(left, right) :\n TypeGuard.IsTuple(left) ? FromTuple(left, right) :\n TypeGuard.IsPromise(left) ? FromPromise(left, right) :\n TypeGuard.IsUint8Array(left) ? FromUint8Array(left, right) :\n TypeGuard.IsUndefined(left) ? FromUndefined(left, right) :\n TypeGuard.IsUnion(left) ? FromUnion(left, right) :\n TypeGuard.IsUnknown(left) ? FromUnknown(left, right) :\n TypeGuard.IsVoid(left) ? FromVoid(left, right) :\n Throw(`Unknown left type operand '${left[Kind]}'`));\n}\nexport function ExtendsCheck(left, right) {\n return Visit(left, right);\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Extends } from './extends.mjs';\nimport { Clone } from '../clone/value.mjs';\n// prettier-ignore\nfunction FromProperties(P, Right, True, False, options) {\n const Acc = {};\n for (const K2 of globalThis.Object.getOwnPropertyNames(P))\n Acc[K2] = Extends(P[K2], Right, True, False, Clone(options));\n return Acc;\n}\n// prettier-ignore\nfunction FromMappedResult(Left, Right, True, False, options) {\n return FromProperties(Left.properties, Right, True, False, options);\n}\n// prettier-ignore\nexport function ExtendsFromMappedResult(Left, Right, True, False, options) {\n const P = FromMappedResult(Left, Right, True, False, options);\n return MappedResult(P);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Union } from '../union/index.mjs';\nimport { ExtendsCheck, ExtendsResult } from './extends-check.mjs';\nimport { ExtendsFromMappedKey } from './extends-from-mapped-key.mjs';\nimport { ExtendsFromMappedResult } from './extends-from-mapped-result.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsMappedKey, IsMappedResult } from '../guard/kind.mjs';\n// prettier-ignore\nfunction ExtendsResolve(left, right, trueType, falseType) {\n const R = ExtendsCheck(left, right);\n return (R === ExtendsResult.Union ? Union([trueType, falseType]) :\n R === ExtendsResult.True ? trueType :\n falseType);\n}\n/** `[Json]` Creates a Conditional type */\nexport function Extends(L, R, T, F, options) {\n // prettier-ignore\n return (IsMappedResult(L) ? ExtendsFromMappedResult(L, R, T, F, options) :\n IsMappedKey(L) ? CreateType(ExtendsFromMappedKey(L, R, T, F, options)) :\n CreateType(ExtendsResolve(L, R, T, F), options));\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Literal } from '../literal/index.mjs';\nimport { Extends } from './extends.mjs';\nimport { Clone } from '../clone/value.mjs';\n// prettier-ignore\nfunction FromPropertyKey(K, U, L, R, options) {\n return {\n [K]: Extends(Literal(K), U, L, R, Clone(options))\n };\n}\n// prettier-ignore\nfunction FromPropertyKeys(K, U, L, R, options) {\n return K.reduce((Acc, LK) => {\n return { ...Acc, ...FromPropertyKey(LK, U, L, R, options) };\n }, {});\n}\n// prettier-ignore\nfunction FromMappedKey(K, U, L, R, options) {\n return FromPropertyKeys(K.keys, U, L, R, options);\n}\n// prettier-ignore\nexport function ExtendsFromMappedKey(T, U, L, R, options) {\n const P = FromMappedKey(T, U, L, R, options);\n return MappedResult(P);\n}\n","import { Exclude } from './exclude.mjs';\nimport { TemplateLiteralToUnion } from '../template-literal/index.mjs';\nexport function ExcludeFromTemplateLiteral(L, R) {\n return Exclude(TemplateLiteralToUnion(L), R);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Union } from '../union/index.mjs';\nimport { Never } from '../never/index.mjs';\nimport { ExtendsCheck, ExtendsResult } from '../extends/index.mjs';\nimport { ExcludeFromMappedResult } from './exclude-from-mapped-result.mjs';\nimport { ExcludeFromTemplateLiteral } from './exclude-from-template-literal.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsMappedResult, IsTemplateLiteral, IsUnion } from '../guard/kind.mjs';\nfunction ExcludeRest(L, R) {\n const excluded = L.filter((inner) => ExtendsCheck(inner, R) === ExtendsResult.False);\n return excluded.length === 1 ? excluded[0] : Union(excluded);\n}\n/** `[Json]` Constructs a type by excluding from unionType all union members that are assignable to excludedMembers */\nexport function Exclude(L, R, options = {}) {\n // overloads\n if (IsTemplateLiteral(L))\n return CreateType(ExcludeFromTemplateLiteral(L, R), options);\n if (IsMappedResult(L))\n return CreateType(ExcludeFromMappedResult(L, R), options);\n // prettier-ignore\n return CreateType(IsUnion(L) ? ExcludeRest(L.anyOf, R) :\n ExtendsCheck(L, R) !== ExtendsResult.False ? Never() : L, options);\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Exclude } from './exclude.mjs';\n// prettier-ignore\nfunction FromProperties(P, U) {\n const Acc = {};\n for (const K2 of globalThis.Object.getOwnPropertyNames(P))\n Acc[K2] = Exclude(P[K2], U);\n return Acc;\n}\n// prettier-ignore\nfunction FromMappedResult(R, T) {\n return FromProperties(R.properties, T);\n}\n// prettier-ignore\nexport function ExcludeFromMappedResult(R, T) {\n const P = FromMappedResult(R, T);\n return MappedResult(P);\n}\n","import { Extract } from './extract.mjs';\nimport { TemplateLiteralToUnion } from '../template-literal/index.mjs';\nexport function ExtractFromTemplateLiteral(L, R) {\n return Extract(TemplateLiteralToUnion(L), R);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Union } from '../union/index.mjs';\nimport { Never } from '../never/index.mjs';\nimport { ExtendsCheck, ExtendsResult } from '../extends/index.mjs';\nimport { ExtractFromMappedResult } from './extract-from-mapped-result.mjs';\nimport { ExtractFromTemplateLiteral } from './extract-from-template-literal.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsMappedResult, IsTemplateLiteral, IsUnion } from '../guard/kind.mjs';\nfunction ExtractRest(L, R) {\n const extracted = L.filter((inner) => ExtendsCheck(inner, R) !== ExtendsResult.False);\n return extracted.length === 1 ? extracted[0] : Union(extracted);\n}\n/** `[Json]` Constructs a type by extracting from type all union members that are assignable to union */\nexport function Extract(L, R, options) {\n // overloads\n if (IsTemplateLiteral(L))\n return CreateType(ExtractFromTemplateLiteral(L, R), options);\n if (IsMappedResult(L))\n return CreateType(ExtractFromMappedResult(L, R), options);\n // prettier-ignore\n return CreateType(IsUnion(L) ? ExtractRest(L.anyOf, R) :\n ExtendsCheck(L, R) !== ExtendsResult.False ? L : Never(), options);\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Extract } from './extract.mjs';\n// prettier-ignore\nfunction FromProperties(P, T) {\n const Acc = {};\n for (const K2 of globalThis.Object.getOwnPropertyNames(P))\n Acc[K2] = Extract(P[K2], T);\n return Acc;\n}\n// prettier-ignore\nfunction FromMappedResult(R, T) {\n return FromProperties(R.properties, T);\n}\n// prettier-ignore\nexport function ExtractFromMappedResult(R, T) {\n const P = FromMappedResult(R, T);\n return MappedResult(P);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Never } from '../never/index.mjs';\nimport * as KindGuard from '../guard/kind.mjs';\n/** `[JavaScript]` Extracts the InstanceType from the given Constructor type */\nexport function InstanceType(schema, options) {\n return (KindGuard.IsConstructor(schema) ? CreateType(schema.returns, options) : Never(options));\n}\n","import { Readonly } from '../readonly/index.mjs';\nimport { Optional } from '../optional/index.mjs';\n/** `[Json]` Creates a Readonly and Optional property */\nexport function ReadonlyOptional(schema) {\n return Readonly(Optional(schema));\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind, Hint } from '../symbols/index.mjs';\nimport { Never } from '../never/index.mjs';\nimport { Number } from '../number/index.mjs';\nimport { Object } from '../object/index.mjs';\nimport { String } from '../string/index.mjs';\nimport { Union } from '../union/index.mjs';\nimport { IsTemplateLiteralFinite } from '../template-literal/index.mjs';\nimport { PatternStringExact, PatternNumberExact, PatternNeverExact } from '../patterns/index.mjs';\nimport { IndexPropertyKeys } from '../indexed/index.mjs';\n// ------------------------------------------------------------------\n// ValueGuard\n// ------------------------------------------------------------------\nimport { IsUndefined } from '../guard/value.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsInteger, IsLiteral, IsAny, IsBoolean, IsNever, IsNumber, IsString, IsRegExp, IsTemplateLiteral, IsUnion } from '../guard/kind.mjs';\n// ------------------------------------------------------------------\n// RecordCreateFromPattern\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction RecordCreateFromPattern(pattern, T, options) {\n return CreateType({ [Kind]: 'Record', type: 'object', patternProperties: { [pattern]: T } }, options);\n}\n// ------------------------------------------------------------------\n// RecordCreateFromKeys\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction RecordCreateFromKeys(K, T, options) {\n const result = {};\n for (const K2 of K)\n result[K2] = T;\n return Object(result, { ...options, [Hint]: 'Record' });\n}\n// prettier-ignore\nfunction FromTemplateLiteralKey(K, T, options) {\n return (IsTemplateLiteralFinite(K)\n ? RecordCreateFromKeys(IndexPropertyKeys(K), T, options)\n : RecordCreateFromPattern(K.pattern, T, options));\n}\n// prettier-ignore\nfunction FromUnionKey(key, type, options) {\n return RecordCreateFromKeys(IndexPropertyKeys(Union(key)), type, options);\n}\n// prettier-ignore\nfunction FromLiteralKey(key, type, options) {\n return RecordCreateFromKeys([key.toString()], type, options);\n}\n// prettier-ignore\nfunction FromRegExpKey(key, type, options) {\n return RecordCreateFromPattern(key.source, type, options);\n}\n// prettier-ignore\nfunction FromStringKey(key, type, options) {\n const pattern = IsUndefined(key.pattern) ? PatternStringExact : key.pattern;\n return RecordCreateFromPattern(pattern, type, options);\n}\n// prettier-ignore\nfunction FromAnyKey(_, type, options) {\n return RecordCreateFromPattern(PatternStringExact, type, options);\n}\n// prettier-ignore\nfunction FromNeverKey(_key, type, options) {\n return RecordCreateFromPattern(PatternNeverExact, type, options);\n}\n// prettier-ignore\nfunction FromBooleanKey(_key, type, options) {\n return Object({ true: type, false: type }, options);\n}\n// prettier-ignore\nfunction FromIntegerKey(_key, type, options) {\n return RecordCreateFromPattern(PatternNumberExact, type, options);\n}\n// prettier-ignore\nfunction FromNumberKey(_, type, options) {\n return RecordCreateFromPattern(PatternNumberExact, type, options);\n}\n// ------------------------------------------------------------------\n// TRecordOrObject\n// ------------------------------------------------------------------\n/** `[Json]` Creates a Record type */\nexport function Record(key, type, options = {}) {\n // prettier-ignore\n return (IsUnion(key) ? FromUnionKey(key.anyOf, type, options) :\n IsTemplateLiteral(key) ? FromTemplateLiteralKey(key, type, options) :\n IsLiteral(key) ? FromLiteralKey(key.const, type, options) :\n IsBoolean(key) ? FromBooleanKey(key, type, options) :\n IsInteger(key) ? FromIntegerKey(key, type, options) :\n IsNumber(key) ? FromNumberKey(key, type, options) :\n IsRegExp(key) ? FromRegExpKey(key, type, options) :\n IsString(key) ? FromStringKey(key, type, options) :\n IsAny(key) ? FromAnyKey(key, type, options) :\n IsNever(key) ? FromNeverKey(key, type, options) :\n Never(options));\n}\n// ------------------------------------------------------------------\n// Record Utilities\n// ------------------------------------------------------------------\n/** Gets the Records Pattern */\nexport function RecordPattern(record) {\n return globalThis.Object.getOwnPropertyNames(record.patternProperties)[0];\n}\n/** Gets the Records Key Type */\n// prettier-ignore\nexport function RecordKey(type) {\n const pattern = RecordPattern(type);\n return (pattern === PatternStringExact ? String() :\n pattern === PatternNumberExact ? Number() :\n String({ pattern }));\n}\n/** Gets a Record Value Type */\n// prettier-ignore\nexport function RecordValue(type) {\n return type.patternProperties[RecordPattern(type)];\n}\n","import { CloneType } from '../clone/type.mjs';\nimport { Unknown } from '../unknown/index.mjs';\nimport { ReadonlyOptional } from '../readonly-optional/index.mjs';\nimport { Readonly } from '../readonly/index.mjs';\nimport { Optional } from '../optional/index.mjs';\nimport { Object } from '../object/index.mjs';\nimport { Record, RecordKey, RecordValue } from '../record/index.mjs';\nimport * as ValueGuard from '../guard/value.mjs';\nimport * as KindGuard from '../guard/kind.mjs';\n// prettier-ignore\nfunction FromConstructor(args, type) {\n type.parameters = FromTypes(args, type.parameters);\n type.returns = FromType(args, type.returns);\n return type;\n}\n// prettier-ignore\nfunction FromFunction(args, type) {\n type.parameters = FromTypes(args, type.parameters);\n type.returns = FromType(args, type.returns);\n return type;\n}\n// prettier-ignore\nfunction FromIntersect(args, type) {\n type.allOf = FromTypes(args, type.allOf);\n return type;\n}\n// prettier-ignore\nfunction FromUnion(args, type) {\n type.anyOf = FromTypes(args, type.anyOf);\n return type;\n}\n// prettier-ignore\nfunction FromTuple(args, type) {\n if (ValueGuard.IsUndefined(type.items))\n return type;\n type.items = FromTypes(args, type.items);\n return type;\n}\n// prettier-ignore\nfunction FromArray(args, type) {\n type.items = FromType(args, type.items);\n return type;\n}\n// prettier-ignore\nfunction FromAsyncIterator(args, type) {\n type.items = FromType(args, type.items);\n return type;\n}\n// prettier-ignore\nfunction FromIterator(args, type) {\n type.items = FromType(args, type.items);\n return type;\n}\n// prettier-ignore\nfunction FromPromise(args, type) {\n type.item = FromType(args, type.item);\n return type;\n}\n// prettier-ignore\nfunction FromObject(args, type) {\n const mappedProperties = FromProperties(args, type.properties);\n return { ...type, ...Object(mappedProperties) }; // retain options\n}\n// prettier-ignore\nfunction FromRecord(args, type) {\n const mappedKey = FromType(args, RecordKey(type));\n const mappedValue = FromType(args, RecordValue(type));\n const result = Record(mappedKey, mappedValue);\n return { ...type, ...result }; // retain options\n}\n// prettier-ignore\nfunction FromArgument(args, argument) {\n return argument.index in args ? args[argument.index] : Unknown();\n}\n// prettier-ignore\nfunction FromProperty(args, type) {\n const isReadonly = KindGuard.IsReadonly(type);\n const isOptional = KindGuard.IsOptional(type);\n const mapped = FromType(args, type);\n return (isReadonly && isOptional ? ReadonlyOptional(mapped) :\n isReadonly && !isOptional ? Readonly(mapped) :\n !isReadonly && isOptional ? Optional(mapped) :\n mapped);\n}\n// prettier-ignore\nfunction FromProperties(args, properties) {\n return globalThis.Object.getOwnPropertyNames(properties).reduce((result, key) => {\n return { ...result, [key]: FromProperty(args, properties[key]) };\n }, {});\n}\n// prettier-ignore\nexport function FromTypes(args, types) {\n return types.map(type => FromType(args, type));\n}\n// prettier-ignore\nfunction FromType(args, type) {\n return (KindGuard.IsConstructor(type) ? FromConstructor(args, type) :\n KindGuard.IsFunction(type) ? FromFunction(args, type) :\n KindGuard.IsIntersect(type) ? FromIntersect(args, type) :\n KindGuard.IsUnion(type) ? FromUnion(args, type) :\n KindGuard.IsTuple(type) ? FromTuple(args, type) :\n KindGuard.IsArray(type) ? FromArray(args, type) :\n KindGuard.IsAsyncIterator(type) ? FromAsyncIterator(args, type) :\n KindGuard.IsIterator(type) ? FromIterator(args, type) :\n KindGuard.IsPromise(type) ? FromPromise(args, type) :\n KindGuard.IsObject(type) ? FromObject(args, type) :\n KindGuard.IsRecord(type) ? FromRecord(args, type) :\n KindGuard.IsArgument(type) ? FromArgument(args, type) :\n type);\n}\n/** `[JavaScript]` Instantiates a type with the given parameters */\n// prettier-ignore\nexport function Instantiate(type, args) {\n return FromType(args, CloneType(type));\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates an Integer type */\nexport function Integer(options) {\n return CreateType({ [Kind]: 'Integer', type: 'integer' }, options);\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Intrinsic } from './intrinsic.mjs';\nimport { Literal } from '../literal/index.mjs';\nimport { Clone } from '../clone/value.mjs';\n// prettier-ignore\nfunction MappedIntrinsicPropertyKey(K, M, options) {\n return {\n [K]: Intrinsic(Literal(K), M, Clone(options))\n };\n}\n// prettier-ignore\nfunction MappedIntrinsicPropertyKeys(K, M, options) {\n const result = K.reduce((Acc, L) => {\n return { ...Acc, ...MappedIntrinsicPropertyKey(L, M, options) };\n }, {});\n return result;\n}\n// prettier-ignore\nfunction MappedIntrinsicProperties(T, M, options) {\n return MappedIntrinsicPropertyKeys(T['keys'], M, options);\n}\n// prettier-ignore\nexport function IntrinsicFromMappedKey(T, M, options) {\n const P = MappedIntrinsicProperties(T, M, options);\n return MappedResult(P);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { TemplateLiteral, TemplateLiteralParseExact, IsTemplateLiteralExpressionFinite, TemplateLiteralExpressionGenerate } from '../template-literal/index.mjs';\nimport { IntrinsicFromMappedKey } from './intrinsic-from-mapped-key.mjs';\nimport { Literal } from '../literal/index.mjs';\nimport { Union } from '../union/index.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsMappedKey, IsTemplateLiteral, IsUnion, IsLiteral } from '../guard/kind.mjs';\n// ------------------------------------------------------------------\n// Apply\n// ------------------------------------------------------------------\nfunction ApplyUncapitalize(value) {\n const [first, rest] = [value.slice(0, 1), value.slice(1)];\n return [first.toLowerCase(), rest].join('');\n}\nfunction ApplyCapitalize(value) {\n const [first, rest] = [value.slice(0, 1), value.slice(1)];\n return [first.toUpperCase(), rest].join('');\n}\nfunction ApplyUppercase(value) {\n return value.toUpperCase();\n}\nfunction ApplyLowercase(value) {\n return value.toLowerCase();\n}\nfunction FromTemplateLiteral(schema, mode, options) {\n // note: template literals require special runtime handling as they are encoded in string patterns.\n // This diverges from the mapped type which would otherwise map on the template literal kind.\n const expression = TemplateLiteralParseExact(schema.pattern);\n const finite = IsTemplateLiteralExpressionFinite(expression);\n if (!finite)\n return { ...schema, pattern: FromLiteralValue(schema.pattern, mode) };\n const strings = [...TemplateLiteralExpressionGenerate(expression)];\n const literals = strings.map((value) => Literal(value));\n const mapped = FromRest(literals, mode);\n const union = Union(mapped);\n return TemplateLiteral([union], options);\n}\n// prettier-ignore\nfunction FromLiteralValue(value, mode) {\n return (typeof value === 'string' ? (mode === 'Uncapitalize' ? ApplyUncapitalize(value) :\n mode === 'Capitalize' ? ApplyCapitalize(value) :\n mode === 'Uppercase' ? ApplyUppercase(value) :\n mode === 'Lowercase' ? ApplyLowercase(value) :\n value) : value.toString());\n}\n// prettier-ignore\nfunction FromRest(T, M) {\n return T.map(L => Intrinsic(L, M));\n}\n/** Applies an intrinsic string manipulation to the given type. */\nexport function Intrinsic(schema, mode, options = {}) {\n // prettier-ignore\n return (\n // Intrinsic-Mapped-Inference\n IsMappedKey(schema) ? IntrinsicFromMappedKey(schema, mode, options) :\n // Standard-Inference\n IsTemplateLiteral(schema) ? FromTemplateLiteral(schema, mode, options) :\n IsUnion(schema) ? Union(FromRest(schema.anyOf, mode), options) :\n IsLiteral(schema) ? Literal(FromLiteralValue(schema.const, mode), options) :\n // Default Type\n CreateType(schema, options));\n}\n","import { Intrinsic } from './intrinsic.mjs';\n/** `[Json]` Intrinsic function to Capitalize LiteralString types */\nexport function Capitalize(T, options = {}) {\n return Intrinsic(T, 'Capitalize', options);\n}\n","import { Intrinsic } from './intrinsic.mjs';\n/** `[Json]` Intrinsic function to Lowercase LiteralString types */\nexport function Lowercase(T, options = {}) {\n return Intrinsic(T, 'Lowercase', options);\n}\n","import { Intrinsic } from './intrinsic.mjs';\n/** `[Json]` Intrinsic function to Uncapitalize LiteralString types */\nexport function Uncapitalize(T, options = {}) {\n return Intrinsic(T, 'Uncapitalize', options);\n}\n","import { Intrinsic } from './intrinsic.mjs';\n/** `[Json]` Intrinsic function to Uppercase LiteralString types */\nexport function Uppercase(T, options = {}) {\n return Intrinsic(T, 'Uppercase', options);\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Omit } from './omit.mjs';\nimport { Clone } from '../clone/value.mjs';\n// prettier-ignore\nfunction FromProperties(properties, propertyKeys, options) {\n const result = {};\n for (const K2 of globalThis.Object.getOwnPropertyNames(properties))\n result[K2] = Omit(properties[K2], propertyKeys, Clone(options));\n return result;\n}\n// prettier-ignore\nfunction FromMappedResult(mappedResult, propertyKeys, options) {\n return FromProperties(mappedResult.properties, propertyKeys, options);\n}\n// prettier-ignore\nexport function OmitFromMappedResult(mappedResult, propertyKeys, options) {\n const properties = FromMappedResult(mappedResult, propertyKeys, options);\n return MappedResult(properties);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Discard } from '../discard/discard.mjs';\nimport { TransformKind } from '../symbols/symbols.mjs';\nimport { Computed } from '../computed/index.mjs';\nimport { Literal } from '../literal/index.mjs';\nimport { IndexPropertyKeys } from '../indexed/index.mjs';\nimport { Intersect } from '../intersect/index.mjs';\nimport { Union } from '../union/index.mjs';\nimport { Object } from '../object/index.mjs';\n// ------------------------------------------------------------------\n// Mapped\n// ------------------------------------------------------------------\nimport { OmitFromMappedKey } from './omit-from-mapped-key.mjs';\nimport { OmitFromMappedResult } from './omit-from-mapped-result.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsMappedKey, IsIntersect, IsUnion, IsObject, IsSchema, IsMappedResult, IsLiteralValue, IsRef } from '../guard/kind.mjs';\nimport { IsArray as IsArrayValue } from '../guard/value.mjs';\n// prettier-ignore\nfunction FromIntersect(types, propertyKeys) {\n return types.map((type) => OmitResolve(type, propertyKeys));\n}\n// prettier-ignore\nfunction FromUnion(types, propertyKeys) {\n return types.map((type) => OmitResolve(type, propertyKeys));\n}\n// ------------------------------------------------------------------\n// FromProperty\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction FromProperty(properties, key) {\n const { [key]: _, ...R } = properties;\n return R;\n}\n// prettier-ignore\nfunction FromProperties(properties, propertyKeys) {\n return propertyKeys.reduce((T, K2) => FromProperty(T, K2), properties);\n}\n// prettier-ignore\nfunction FromObject(type, propertyKeys, properties) {\n const options = Discard(type, [TransformKind, '$id', 'required', 'properties']);\n const mappedProperties = FromProperties(properties, propertyKeys);\n return Object(mappedProperties, options);\n}\n// prettier-ignore\nfunction UnionFromPropertyKeys(propertyKeys) {\n const result = propertyKeys.reduce((result, key) => IsLiteralValue(key) ? [...result, Literal(key)] : result, []);\n return Union(result);\n}\n// prettier-ignore\nfunction OmitResolve(type, propertyKeys) {\n return (IsIntersect(type) ? Intersect(FromIntersect(type.allOf, propertyKeys)) :\n IsUnion(type) ? Union(FromUnion(type.anyOf, propertyKeys)) :\n IsObject(type) ? FromObject(type, propertyKeys, type.properties) :\n Object({}));\n}\n/** `[Json]` Constructs a type whose keys are picked from the given type */\n// prettier-ignore\nexport function Omit(type, key, options) {\n const typeKey = IsArrayValue(key) ? UnionFromPropertyKeys(key) : key;\n const propertyKeys = IsSchema(key) ? IndexPropertyKeys(key) : key;\n const isTypeRef = IsRef(type);\n const isKeyRef = IsRef(key);\n return (IsMappedResult(type) ? OmitFromMappedResult(type, propertyKeys, options) :\n IsMappedKey(key) ? OmitFromMappedKey(type, key, options) :\n (isTypeRef && isKeyRef) ? Computed('Omit', [type, typeKey], options) :\n (!isTypeRef && isKeyRef) ? Computed('Omit', [type, typeKey], options) :\n (isTypeRef && !isKeyRef) ? Computed('Omit', [type, typeKey], options) :\n CreateType({ ...OmitResolve(type, propertyKeys), ...options }));\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Omit } from './omit.mjs';\nimport { Clone } from '../clone/value.mjs';\n// prettier-ignore\nfunction FromPropertyKey(type, key, options) {\n return { [key]: Omit(type, [key], Clone(options)) };\n}\n// prettier-ignore\nfunction FromPropertyKeys(type, propertyKeys, options) {\n return propertyKeys.reduce((Acc, LK) => {\n return { ...Acc, ...FromPropertyKey(type, LK, options) };\n }, {});\n}\n// prettier-ignore\nfunction FromMappedKey(type, mappedKey, options) {\n return FromPropertyKeys(type, mappedKey.keys, options);\n}\n// prettier-ignore\nexport function OmitFromMappedKey(type, mappedKey, options) {\n const properties = FromMappedKey(type, mappedKey, options);\n return MappedResult(properties);\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Pick } from './pick.mjs';\nimport { Clone } from '../clone/value.mjs';\n// prettier-ignore\nfunction FromProperties(properties, propertyKeys, options) {\n const result = {};\n for (const K2 of globalThis.Object.getOwnPropertyNames(properties))\n result[K2] = Pick(properties[K2], propertyKeys, Clone(options));\n return result;\n}\n// prettier-ignore\nfunction FromMappedResult(mappedResult, propertyKeys, options) {\n return FromProperties(mappedResult.properties, propertyKeys, options);\n}\n// prettier-ignore\nexport function PickFromMappedResult(mappedResult, propertyKeys, options) {\n const properties = FromMappedResult(mappedResult, propertyKeys, options);\n return MappedResult(properties);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Discard } from '../discard/discard.mjs';\nimport { Computed } from '../computed/index.mjs';\nimport { Intersect } from '../intersect/index.mjs';\nimport { Literal } from '../literal/index.mjs';\nimport { Object } from '../object/index.mjs';\nimport { Union } from '../union/index.mjs';\nimport { IndexPropertyKeys } from '../indexed/index.mjs';\nimport { TransformKind } from '../symbols/symbols.mjs';\n// ------------------------------------------------------------------\n// Guards\n// ------------------------------------------------------------------\nimport { IsMappedKey, IsMappedResult, IsIntersect, IsUnion, IsObject, IsSchema, IsLiteralValue, IsRef } from '../guard/kind.mjs';\nimport { IsArray as IsArrayValue } from '../guard/value.mjs';\n// ------------------------------------------------------------------\n// Infrastructure\n// ------------------------------------------------------------------\nimport { PickFromMappedKey } from './pick-from-mapped-key.mjs';\nimport { PickFromMappedResult } from './pick-from-mapped-result.mjs';\nfunction FromIntersect(types, propertyKeys) {\n return types.map((type) => PickResolve(type, propertyKeys));\n}\n// prettier-ignore\nfunction FromUnion(types, propertyKeys) {\n return types.map((type) => PickResolve(type, propertyKeys));\n}\n// prettier-ignore\nfunction FromProperties(properties, propertyKeys) {\n const result = {};\n for (const K2 of propertyKeys)\n if (K2 in properties)\n result[K2] = properties[K2];\n return result;\n}\n// prettier-ignore\nfunction FromObject(Type, keys, properties) {\n const options = Discard(Type, [TransformKind, '$id', 'required', 'properties']);\n const mappedProperties = FromProperties(properties, keys);\n return Object(mappedProperties, options);\n}\n// prettier-ignore\nfunction UnionFromPropertyKeys(propertyKeys) {\n const result = propertyKeys.reduce((result, key) => IsLiteralValue(key) ? [...result, Literal(key)] : result, []);\n return Union(result);\n}\n// prettier-ignore\nfunction PickResolve(type, propertyKeys) {\n return (IsIntersect(type) ? Intersect(FromIntersect(type.allOf, propertyKeys)) :\n IsUnion(type) ? Union(FromUnion(type.anyOf, propertyKeys)) :\n IsObject(type) ? FromObject(type, propertyKeys, type.properties) :\n Object({}));\n}\n/** `[Json]` Constructs a type whose keys are picked from the given type */\n// prettier-ignore\nexport function Pick(type, key, options) {\n const typeKey = IsArrayValue(key) ? UnionFromPropertyKeys(key) : key;\n const propertyKeys = IsSchema(key) ? IndexPropertyKeys(key) : key;\n const isTypeRef = IsRef(type);\n const isKeyRef = IsRef(key);\n return (IsMappedResult(type) ? PickFromMappedResult(type, propertyKeys, options) :\n IsMappedKey(key) ? PickFromMappedKey(type, key, options) :\n (isTypeRef && isKeyRef) ? Computed('Pick', [type, typeKey], options) :\n (!isTypeRef && isKeyRef) ? Computed('Pick', [type, typeKey], options) :\n (isTypeRef && !isKeyRef) ? Computed('Pick', [type, typeKey], options) :\n CreateType({ ...PickResolve(type, propertyKeys), ...options }));\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Pick } from './pick.mjs';\nimport { Clone } from '../clone/value.mjs';\n// prettier-ignore\nfunction FromPropertyKey(type, key, options) {\n return {\n [key]: Pick(type, [key], Clone(options))\n };\n}\n// prettier-ignore\nfunction FromPropertyKeys(type, propertyKeys, options) {\n return propertyKeys.reduce((result, leftKey) => {\n return { ...result, ...FromPropertyKey(type, leftKey, options) };\n }, {});\n}\n// prettier-ignore\nfunction FromMappedKey(type, mappedKey, options) {\n return FromPropertyKeys(type, mappedKey.keys, options);\n}\n// prettier-ignore\nexport function PickFromMappedKey(type, mappedKey, options) {\n const properties = FromMappedKey(type, mappedKey, options);\n return MappedResult(properties);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Computed } from '../computed/index.mjs';\nimport { Optional } from '../optional/index.mjs';\nimport { Object } from '../object/index.mjs';\nimport { Intersect } from '../intersect/index.mjs';\nimport { Union } from '../union/index.mjs';\nimport { Ref } from '../ref/index.mjs';\nimport { Discard } from '../discard/index.mjs';\nimport { TransformKind } from '../symbols/index.mjs';\nimport { PartialFromMappedResult } from './partial-from-mapped-result.mjs';\n// ------------------------------------------------------------------\n// KindGuard\n// ------------------------------------------------------------------\nimport * as KindGuard from '../guard/kind.mjs';\n// prettier-ignore\nfunction FromComputed(target, parameters) {\n return Computed('Partial', [Computed(target, parameters)]);\n}\n// prettier-ignore\nfunction FromRef($ref) {\n return Computed('Partial', [Ref($ref)]);\n}\n// prettier-ignore\nfunction FromProperties(properties) {\n const partialProperties = {};\n for (const K of globalThis.Object.getOwnPropertyNames(properties))\n partialProperties[K] = Optional(properties[K]);\n return partialProperties;\n}\n// prettier-ignore\nfunction FromObject(type, properties) {\n const options = Discard(type, [TransformKind, '$id', 'required', 'properties']);\n const mappedProperties = FromProperties(properties);\n return Object(mappedProperties, options);\n}\n// prettier-ignore\nfunction FromRest(types) {\n return types.map(type => PartialResolve(type));\n}\n// ------------------------------------------------------------------\n// PartialResolve\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction PartialResolve(type) {\n return (\n // Mappable\n KindGuard.IsComputed(type) ? FromComputed(type.target, type.parameters) :\n KindGuard.IsRef(type) ? FromRef(type.$ref) :\n KindGuard.IsIntersect(type) ? Intersect(FromRest(type.allOf)) :\n KindGuard.IsUnion(type) ? Union(FromRest(type.anyOf)) :\n KindGuard.IsObject(type) ? FromObject(type, type.properties) :\n // Intrinsic\n KindGuard.IsBigInt(type) ? type :\n KindGuard.IsBoolean(type) ? type :\n KindGuard.IsInteger(type) ? type :\n KindGuard.IsLiteral(type) ? type :\n KindGuard.IsNull(type) ? type :\n KindGuard.IsNumber(type) ? type :\n KindGuard.IsString(type) ? type :\n KindGuard.IsSymbol(type) ? type :\n KindGuard.IsUndefined(type) ? type :\n // Passthrough\n Object({}));\n}\n/** `[Json]` Constructs a type where all properties are optional */\nexport function Partial(type, options) {\n if (KindGuard.IsMappedResult(type)) {\n return PartialFromMappedResult(type, options);\n }\n else {\n // special: mapping types require overridable options\n return CreateType({ ...PartialResolve(type), ...options });\n }\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Partial } from './partial.mjs';\nimport { Clone } from '../clone/value.mjs';\n// prettier-ignore\nfunction FromProperties(K, options) {\n const Acc = {};\n for (const K2 of globalThis.Object.getOwnPropertyNames(K))\n Acc[K2] = Partial(K[K2], Clone(options));\n return Acc;\n}\n// prettier-ignore\nfunction FromMappedResult(R, options) {\n return FromProperties(R.properties, options);\n}\n// prettier-ignore\nexport function PartialFromMappedResult(R, options) {\n const P = FromMappedResult(R, options);\n return MappedResult(P);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Computed } from '../computed/index.mjs';\nimport { Object } from '../object/index.mjs';\nimport { Intersect } from '../intersect/index.mjs';\nimport { Union } from '../union/index.mjs';\nimport { Ref } from '../ref/index.mjs';\nimport { OptionalKind, TransformKind } from '../symbols/index.mjs';\nimport { Discard } from '../discard/index.mjs';\nimport { RequiredFromMappedResult } from './required-from-mapped-result.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport * as KindGuard from '../guard/kind.mjs';\n// prettier-ignore\nfunction FromComputed(target, parameters) {\n return Computed('Required', [Computed(target, parameters)]);\n}\n// prettier-ignore\nfunction FromRef($ref) {\n return Computed('Required', [Ref($ref)]);\n}\n// prettier-ignore\nfunction FromProperties(properties) {\n const requiredProperties = {};\n for (const K of globalThis.Object.getOwnPropertyNames(properties))\n requiredProperties[K] = Discard(properties[K], [OptionalKind]);\n return requiredProperties;\n}\n// prettier-ignore\nfunction FromObject(type, properties) {\n const options = Discard(type, [TransformKind, '$id', 'required', 'properties']);\n const mappedProperties = FromProperties(properties);\n return Object(mappedProperties, options);\n}\n// prettier-ignore\nfunction FromRest(types) {\n return types.map(type => RequiredResolve(type));\n}\n// ------------------------------------------------------------------\n// RequiredResolve\n// ------------------------------------------------------------------\n// prettier-ignore\nfunction RequiredResolve(type) {\n return (\n // Mappable\n KindGuard.IsComputed(type) ? FromComputed(type.target, type.parameters) :\n KindGuard.IsRef(type) ? FromRef(type.$ref) :\n KindGuard.IsIntersect(type) ? Intersect(FromRest(type.allOf)) :\n KindGuard.IsUnion(type) ? Union(FromRest(type.anyOf)) :\n KindGuard.IsObject(type) ? FromObject(type, type.properties) :\n // Intrinsic\n KindGuard.IsBigInt(type) ? type :\n KindGuard.IsBoolean(type) ? type :\n KindGuard.IsInteger(type) ? type :\n KindGuard.IsLiteral(type) ? type :\n KindGuard.IsNull(type) ? type :\n KindGuard.IsNumber(type) ? type :\n KindGuard.IsString(type) ? type :\n KindGuard.IsSymbol(type) ? type :\n KindGuard.IsUndefined(type) ? type :\n // Passthrough\n Object({}));\n}\n/** `[Json]` Constructs a type where all properties are required */\nexport function Required(type, options) {\n if (KindGuard.IsMappedResult(type)) {\n return RequiredFromMappedResult(type, options);\n }\n else {\n // special: mapping types require overridable options\n return CreateType({ ...RequiredResolve(type), ...options });\n }\n}\n","import { MappedResult } from '../mapped/index.mjs';\nimport { Required } from './required.mjs';\n// prettier-ignore\nfunction FromProperties(P, options) {\n const Acc = {};\n for (const K2 of globalThis.Object.getOwnPropertyNames(P))\n Acc[K2] = Required(P[K2], options);\n return Acc;\n}\n// prettier-ignore\nfunction FromMappedResult(R, options) {\n return FromProperties(R.properties, options);\n}\n// prettier-ignore\nexport function RequiredFromMappedResult(R, options) {\n const P = FromMappedResult(R, options);\n return MappedResult(P);\n}\n","import { CreateType } from '../create/index.mjs';\nimport { CloneType } from '../clone/index.mjs';\nimport { Discard } from '../discard/index.mjs';\nimport { Array } from '../array/index.mjs';\nimport { Awaited } from '../awaited/index.mjs';\nimport { AsyncIterator } from '../async-iterator/index.mjs';\nimport { Constructor } from '../constructor/index.mjs';\nimport { Index } from '../indexed/index.mjs';\nimport { Function as FunctionType } from '../function/index.mjs';\nimport { Intersect } from '../intersect/index.mjs';\nimport { Iterator } from '../iterator/index.mjs';\nimport { KeyOf } from '../keyof/index.mjs';\nimport { Object } from '../object/index.mjs';\nimport { Omit } from '../omit/index.mjs';\nimport { Pick } from '../pick/index.mjs';\nimport { Never } from '../never/index.mjs';\nimport { Partial } from '../partial/index.mjs';\nimport { RecordValue, RecordPattern } from '../record/index.mjs';\nimport { Required } from '../required/index.mjs';\nimport { Tuple } from '../tuple/index.mjs';\nimport { Union } from '../union/index.mjs';\n// ------------------------------------------------------------------\n// Symbols\n// ------------------------------------------------------------------\nimport { TransformKind, OptionalKind, ReadonlyKind } from '../symbols/index.mjs';\n// ------------------------------------------------------------------\n// KindGuard\n// ------------------------------------------------------------------\nimport * as KindGuard from '../guard/kind.mjs';\n// prettier-ignore\nfunction DereferenceParameters(moduleProperties, types) {\n return types.map((type) => {\n return KindGuard.IsRef(type)\n ? Dereference(moduleProperties, type.$ref)\n : FromType(moduleProperties, type);\n });\n}\n// prettier-ignore\nfunction Dereference(moduleProperties, ref) {\n return (ref in moduleProperties\n ? KindGuard.IsRef(moduleProperties[ref])\n ? Dereference(moduleProperties, moduleProperties[ref].$ref)\n : FromType(moduleProperties, moduleProperties[ref])\n : Never());\n}\n// prettier-ignore\nfunction FromAwaited(parameters) {\n return Awaited(parameters[0]);\n}\n// prettier-ignore\nfunction FromIndex(parameters) {\n return Index(parameters[0], parameters[1]);\n}\n// prettier-ignore\nfunction FromKeyOf(parameters) {\n return KeyOf(parameters[0]);\n}\n// prettier-ignore\nfunction FromPartial(parameters) {\n return Partial(parameters[0]);\n}\n// prettier-ignore\nfunction FromOmit(parameters) {\n return Omit(parameters[0], parameters[1]);\n}\n// prettier-ignore\nfunction FromPick(parameters) {\n return Pick(parameters[0], parameters[1]);\n}\n// prettier-ignore\nfunction FromRequired(parameters) {\n return Required(parameters[0]);\n}\n// prettier-ignore\nfunction FromComputed(moduleProperties, target, parameters) {\n const dereferenced = DereferenceParameters(moduleProperties, parameters);\n return (target === 'Awaited' ? FromAwaited(dereferenced) :\n target === 'Index' ? FromIndex(dereferenced) :\n target === 'KeyOf' ? FromKeyOf(dereferenced) :\n target === 'Partial' ? FromPartial(dereferenced) :\n target === 'Omit' ? FromOmit(dereferenced) :\n target === 'Pick' ? FromPick(dereferenced) :\n target === 'Required' ? FromRequired(dereferenced) :\n Never());\n}\nfunction FromArray(moduleProperties, type) {\n return Array(FromType(moduleProperties, type));\n}\nfunction FromAsyncIterator(moduleProperties, type) {\n return AsyncIterator(FromType(moduleProperties, type));\n}\n// prettier-ignore\nfunction FromConstructor(moduleProperties, parameters, instanceType) {\n return Constructor(FromTypes(moduleProperties, parameters), FromType(moduleProperties, instanceType));\n}\n// prettier-ignore\nfunction FromFunction(moduleProperties, parameters, returnType) {\n return FunctionType(FromTypes(moduleProperties, parameters), FromType(moduleProperties, returnType));\n}\nfunction FromIntersect(moduleProperties, types) {\n return Intersect(FromTypes(moduleProperties, types));\n}\nfunction FromIterator(moduleProperties, type) {\n return Iterator(FromType(moduleProperties, type));\n}\nfunction FromObject(moduleProperties, properties) {\n return Object(globalThis.Object.keys(properties).reduce((result, key) => {\n return { ...result, [key]: FromType(moduleProperties, properties[key]) };\n }, {}));\n}\n// prettier-ignore\nfunction FromRecord(moduleProperties, type) {\n const [value, pattern] = [FromType(moduleProperties, RecordValue(type)), RecordPattern(type)];\n const result = CloneType(type);\n result.patternProperties[pattern] = value;\n return result;\n}\n// prettier-ignore\nfunction FromTransform(moduleProperties, transform) {\n return (KindGuard.IsRef(transform))\n ? { ...Dereference(moduleProperties, transform.$ref), [TransformKind]: transform[TransformKind] }\n : transform;\n}\nfunction FromTuple(moduleProperties, types) {\n return Tuple(FromTypes(moduleProperties, types));\n}\nfunction FromUnion(moduleProperties, types) {\n return Union(FromTypes(moduleProperties, types));\n}\nfunction FromTypes(moduleProperties, types) {\n return types.map((type) => FromType(moduleProperties, type));\n}\n// prettier-ignore\nexport function FromType(moduleProperties, type) {\n return (\n // Modifiers\n KindGuard.IsOptional(type) ? CreateType(FromType(moduleProperties, Discard(type, [OptionalKind])), type) :\n KindGuard.IsReadonly(type) ? CreateType(FromType(moduleProperties, Discard(type, [ReadonlyKind])), type) :\n // Transform\n KindGuard.IsTransform(type) ? CreateType(FromTransform(moduleProperties, type), type) :\n // Types\n KindGuard.IsArray(type) ? CreateType(FromArray(moduleProperties, type.items), type) :\n KindGuard.IsAsyncIterator(type) ? CreateType(FromAsyncIterator(moduleProperties, type.items), type) :\n KindGuard.IsComputed(type) ? CreateType(FromComputed(moduleProperties, type.target, type.parameters)) :\n KindGuard.IsConstructor(type) ? CreateType(FromConstructor(moduleProperties, type.parameters, type.returns), type) :\n KindGuard.IsFunction(type) ? CreateType(FromFunction(moduleProperties, type.parameters, type.returns), type) :\n KindGuard.IsIntersect(type) ? CreateType(FromIntersect(moduleProperties, type.allOf), type) :\n KindGuard.IsIterator(type) ? CreateType(FromIterator(moduleProperties, type.items), type) :\n KindGuard.IsObject(type) ? CreateType(FromObject(moduleProperties, type.properties), type) :\n KindGuard.IsRecord(type) ? CreateType(FromRecord(moduleProperties, type)) :\n KindGuard.IsTuple(type) ? CreateType(FromTuple(moduleProperties, type.items || []), type) :\n KindGuard.IsUnion(type) ? CreateType(FromUnion(moduleProperties, type.anyOf), type) :\n type);\n}\n// prettier-ignore\nexport function ComputeType(moduleProperties, key) {\n return (key in moduleProperties\n ? FromType(moduleProperties, moduleProperties[key])\n : Never());\n}\n// prettier-ignore\nexport function ComputeModuleProperties(moduleProperties) {\n return globalThis.Object.getOwnPropertyNames(moduleProperties).reduce((result, key) => {\n return { ...result, [key]: ComputeType(moduleProperties, key) };\n }, {});\n}\n","import { CreateType } from '../create/index.mjs';\nimport { Kind } from '../symbols/index.mjs';\n// ------------------------------------------------------------------\n// Module Infrastructure Types\n// ------------------------------------------------------------------\nimport { ComputeModuleProperties } from './compute.mjs';\n// ------------------------------------------------------------------\n// Module\n// ------------------------------------------------------------------\n// prettier-ignore\nexport class TModule {\n constructor($defs) {\n const computed = ComputeModuleProperties($defs);\n const identified = this.WithIdentifiers(computed);\n this.$defs = identified;\n }\n /** `[Json]` Imports a Type by Key. */\n Import(key, options) {\n const $defs = { ...this.$defs, [key]: CreateType(this.$defs[key], options) };\n return CreateType({ [Kind]: 'Import', $defs, $ref: key });\n }\n // prettier-ignore\n WithIdentifiers($defs) {\n return globalThis.Object.getOwnPropertyNames($defs).reduce((result, key) => {\n return { ...result, [key]: { ...$defs[key], $id: key } };\n }, {});\n }\n}\n/** `[Json]` Creates a Type Definition Module. */\nexport function Module(properties) {\n return new TModule(properties);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates a Not type */\nexport function Not(type, options) {\n return CreateType({ [Kind]: 'Not', not: type }, options);\n}\n","import { Tuple } from '../tuple/index.mjs';\nimport { Never } from '../never/index.mjs';\nimport * as KindGuard from '../guard/kind.mjs';\n/** `[JavaScript]` Extracts the Parameters from the given Function type */\nexport function Parameters(schema, options) {\n return (KindGuard.IsFunction(schema) ? Tuple(schema.parameters, options) : Never());\n}\n","import { CloneType } from '../clone/type.mjs';\nimport { CreateType } from '../create/type.mjs';\nimport { IsUndefined } from '../guard/value.mjs';\nimport { Kind, Hint } from '../symbols/index.mjs';\n// Auto Tracked For Recursive Types without ID's\nlet Ordinal = 0;\n/** `[Json]` Creates a Recursive type */\nexport function Recursive(callback, options = {}) {\n if (IsUndefined(options.$id))\n options.$id = `T${Ordinal++}`;\n const thisType = CloneType(callback({ [Kind]: 'This', $ref: `${options.$id}` }));\n thisType.$id = options.$id;\n // prettier-ignore\n return CreateType({ [Hint]: 'Recursive', ...thisType }, options);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { IsString } from '../guard/value.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[JavaScript]` Creates a RegExp type */\nexport function RegExp(unresolved, options) {\n const expr = IsString(unresolved) ? new globalThis.RegExp(unresolved) : unresolved;\n return CreateType({ [Kind]: 'RegExp', type: 'RegExp', source: expr.source, flags: expr.flags }, options);\n}\n","// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsIntersect, IsUnion, IsTuple } from '../guard/kind.mjs';\n// prettier-ignore\nfunction RestResolve(T) {\n return (IsIntersect(T) ? T.allOf :\n IsUnion(T) ? T.anyOf :\n IsTuple(T) ? T.items ?? [] :\n []);\n}\n/** `[Json]` Extracts interior Rest elements from Tuple, Intersect and Union types */\nexport function Rest(T) {\n return RestResolve(T);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Never } from '../never/index.mjs';\nimport * as KindGuard from '../guard/kind.mjs';\n/** `[JavaScript]` Extracts the ReturnType from the given Function type */\nexport function ReturnType(schema, options) {\n return (KindGuard.IsFunction(schema) ? CreateType(schema.returns, options) : Never(options));\n}\n","import { TransformKind } from '../symbols/index.mjs';\n// ------------------------------------------------------------------\n// TypeGuard\n// ------------------------------------------------------------------\nimport { IsTransform } from '../guard/kind.mjs';\n// ------------------------------------------------------------------\n// TransformBuilders\n// ------------------------------------------------------------------\nexport class TransformDecodeBuilder {\n constructor(schema) {\n this.schema = schema;\n }\n Decode(decode) {\n return new TransformEncodeBuilder(this.schema, decode);\n }\n}\n// prettier-ignore\nexport class TransformEncodeBuilder {\n constructor(schema, decode) {\n this.schema = schema;\n this.decode = decode;\n }\n EncodeTransform(encode, schema) {\n const Encode = (value) => schema[TransformKind].Encode(encode(value));\n const Decode = (value) => this.decode(schema[TransformKind].Decode(value));\n const Codec = { Encode: Encode, Decode: Decode };\n return { ...schema, [TransformKind]: Codec };\n }\n EncodeSchema(encode, schema) {\n const Codec = { Decode: this.decode, Encode: encode };\n return { ...schema, [TransformKind]: Codec };\n }\n Encode(encode) {\n return (IsTransform(this.schema) ? this.EncodeTransform(encode, this.schema) : this.EncodeSchema(encode, this.schema));\n }\n}\n/** `[Json]` Creates a Transform type */\nexport function Transform(schema) {\n return new TransformDecodeBuilder(schema);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[Json]` Creates a Unsafe type that will infers as the generic argument T */\nexport function Unsafe(options = {}) {\n return CreateType({ [Kind]: options[Kind] ?? 'Unsafe' }, options);\n}\n","import { CreateType } from '../create/type.mjs';\nimport { Kind } from '../symbols/index.mjs';\n/** `[JavaScript]` Creates a Void type */\nexport function Void(options) {\n return CreateType({ [Kind]: 'Void', type: 'void' }, options);\n}\n","// ------------------------------------------------------------------\n// Type: Module\n// ------------------------------------------------------------------\nexport { Any } from '../any/index.mjs';\nexport { Argument } from '../argument/index.mjs';\nexport { Array } from '../array/index.mjs';\nexport { AsyncIterator } from '../async-iterator/index.mjs';\nexport { Awaited } from '../awaited/index.mjs';\nexport { BigInt } from '../bigint/index.mjs';\nexport { Boolean } from '../boolean/index.mjs';\nexport { Composite } from '../composite/index.mjs';\nexport { Const } from '../const/index.mjs';\nexport { Constructor } from '../constructor/index.mjs';\nexport { ConstructorParameters } from '../constructor-parameters/index.mjs';\nexport { Date } from '../date/index.mjs';\nexport { Enum } from '../enum/index.mjs';\nexport { Exclude } from '../exclude/index.mjs';\nexport { Extends } from '../extends/index.mjs';\nexport { Extract } from '../extract/index.mjs';\nexport { Function } from '../function/index.mjs';\nexport { Index } from '../indexed/index.mjs';\nexport { InstanceType } from '../instance-type/index.mjs';\nexport { Instantiate } from '../instantiate/index.mjs';\nexport { Integer } from '../integer/index.mjs';\nexport { Intersect } from '../intersect/index.mjs';\nexport { Capitalize, Uncapitalize, Lowercase, Uppercase } from '../intrinsic/index.mjs';\nexport { Iterator } from '../iterator/index.mjs';\nexport { KeyOf } from '../keyof/index.mjs';\nexport { Literal } from '../literal/index.mjs';\nexport { Mapped } from '../mapped/index.mjs';\nexport { Module } from '../module/index.mjs';\nexport { Never } from '../never/index.mjs';\nexport { Not } from '../not/index.mjs';\nexport { Null } from '../null/index.mjs';\nexport { Number } from '../number/index.mjs';\nexport { Object } from '../object/index.mjs';\nexport { Omit } from '../omit/index.mjs';\nexport { Optional } from '../optional/index.mjs';\nexport { Parameters } from '../parameters/index.mjs';\nexport { Partial } from '../partial/index.mjs';\nexport { Pick } from '../pick/index.mjs';\nexport { Promise } from '../promise/index.mjs';\nexport { Readonly } from '../readonly/index.mjs';\nexport { ReadonlyOptional } from '../readonly-optional/index.mjs';\nexport { Record } from '../record/index.mjs';\nexport { Recursive } from '../recursive/index.mjs';\nexport { Ref } from '../ref/index.mjs';\nexport { RegExp } from '../regexp/index.mjs';\nexport { Required } from '../required/index.mjs';\nexport { Rest } from '../rest/index.mjs';\nexport { ReturnType } from '../return-type/index.mjs';\nexport { String } from '../string/index.mjs';\nexport { Symbol } from '../symbol/index.mjs';\nexport { TemplateLiteral } from '../template-literal/index.mjs';\nexport { Transform } from '../transform/index.mjs';\nexport { Tuple } from '../tuple/index.mjs';\nexport { Uint8Array } from '../uint8array/index.mjs';\nexport { Undefined } from '../undefined/index.mjs';\nexport { Union } from '../union/index.mjs';\nexport { Unknown } from '../unknown/index.mjs';\nexport { Unsafe } from '../unsafe/index.mjs';\nexport { Void } from '../void/index.mjs';\n","// ------------------------------------------------------------------\n// JsonTypeBuilder\n// ------------------------------------------------------------------\nexport { JsonTypeBuilder } from './json.mjs';\n// ------------------------------------------------------------------\n// JavaScriptTypeBuilder\n// ------------------------------------------------------------------\nimport * as TypeBuilder from './type.mjs';\nimport { JavaScriptTypeBuilder } from './javascript.mjs';\n/** JavaScript Type Builder with Static Resolution for TypeScript */\nconst Type = TypeBuilder;\nexport { JavaScriptTypeBuilder };\nexport { Type };\n","/**\n * LLM-Facing Definitions — single source of truth.\n *\n * Every string an LLM sees (tool names, descriptions, parameter descriptions,\n * channel metadata, hints, status messages) lives here.\n *\n * Also see: packages/core/src/tools.ts (tool implementations)\n */\nimport { Type } from '@sinclair/typebox';\n\n// ─── Orchestrator Tools (3) ───────────────────────────────────\n// The orchestrator assesses state, proposes plans, and sends messages.\n// It does NOT claim tasks — sub-agents do that via WORKER_TOOLS.\n\nexport const ORCHESTRATOR_TOOLS = {\n STATE: {\n name: 'deskfree_state',\n description:\n 'Get full workspace state — all tasks, recently done tasks, memory, and files. Use to assess what needs attention.',\n parameters: Type.Object({}),\n },\n SCHEDULE_TASK: {\n name: 'deskfree_schedule_task',\n description:\n 'Schedule or reschedule a task. Pass a future ISO datetime to defer the task until that time. Pass null to activate it immediately. Use when the human asks to defer, park, or reschedule a task.',\n parameters: Type.Object({\n taskId: Type.String({ description: 'Task UUID to schedule' }),\n scheduledFor: Type.Union([Type.String(), Type.Null()], {\n description:\n 'ISO 8601 datetime for when the task should activate. Pass null to activate immediately.',\n }),\n reason: Type.String({\n description: 'Brief explanation (shown in task thread)',\n }),\n }),\n },\n REOPEN_TASK: {\n name: 'deskfree_reopen_task',\n description:\n 'Reopen a task (from review or done) back to pending. Use when more work is needed on a task. Works on both completed and in-review tasks.',\n parameters: Type.Object({\n taskId: Type.String({ description: 'Task UUID to reopen' }),\n reason: Type.Optional(\n Type.String({\n description:\n 'Why this task is being reopened (shown in task thread as system message)',\n }),\n ),\n }),\n },\n SEND_MESSAGE: {\n name: 'deskfree_send_message',\n description:\n 'Send a message to the human. Keep it short — 1-3 sentences. No walls of text.',\n parameters: Type.Object({\n type: Type.Union([Type.Literal('notify'), Type.Literal('ask')], {\n description:\n 'notify = general update (quiet). ask = needs human attention (surfaces prominently).',\n }),\n content: Type.String({\n description: 'Message content.',\n }),\n taskId: Type.Optional(\n Type.String({\n description: 'Task UUID (optional — threads into task if provided)',\n }),\n ),\n }),\n },\n PROPOSE: {\n name: 'deskfree_propose',\n description:\n 'Propose a plan for human approval. Nothing is created until the human reviews and approves in a modal. Put all details in the instructions field using simple markdown (bold, lists, inline code). Do NOT use markdown headers (#) — use **bold text** instead for section labels.',\n parameters: Type.Object({\n context: Type.Optional(\n Type.String({\n description:\n 'Why this plan is being proposed — helps the human understand the reasoning behind the proposal',\n }),\n ),\n tasks: Type.Array(\n Type.Object({\n title: Type.String({\n description: 'Task title — short, action-oriented (max 200 chars)',\n }),\n instructions: Type.Optional(\n Type.String({\n description:\n 'Detailed instructions, constraints, or context for the task.',\n }),\n ),\n\n estimatedTokens: Type.Optional(\n Type.Number({\n description:\n 'Estimated token cost — consider files to read, reasoning, output',\n }),\n ),\n scheduledFor: Type.Optional(\n Type.String({\n description:\n 'ISO-8601 date for when this task should become available. Use for future-dated or recurring work.',\n }),\n ),\n inputFileIds: Type.Optional(\n Type.Array(\n Type.String({ description: 'File ID to pre-load as context' }),\n {\n description: 'File IDs to read as context input for this task',\n maxItems: 20,\n },\n ),\n ),\n outputFileIds: Type.Optional(\n Type.Array(\n Type.String({ description: 'File ID to update as deliverable' }),\n {\n description: 'File IDs this task will produce or update',\n maxItems: 10,\n },\n ),\n ),\n }),\n {\n description: 'Array of tasks to propose (1-20)',\n minItems: 1,\n maxItems: 20,\n },\n ),\n taskId: Type.Optional(\n Type.String({\n description:\n 'Task ID to thread this proposal into (for follow-up proposals from within a task)',\n }),\n ),\n }),\n },\n} as const;\n\n// ─── Shared Tool Definitions ──────────────────────────────────\n// Full definitions used by WORKER_TOOLS. Defined separately so\n// ORCHESTRATOR_TOOLS stays lean (5 tools) while workers get the full set.\n\nconst SHARED_TOOLS = {\n UPDATE_FILE: {\n name: 'deskfree_update_file',\n description:\n 'Update a file\\'s content. Use this to save work to a persistent file linked to your task. Call incrementally as you build content. Use format=\"html\" for rich web content; use format=\"markdown\" (default) for everything else.',\n parameters: Type.Object({\n fileId: Type.String({ description: 'File ID to update' }),\n content: Type.String({\n description: 'Full file content (replaces previous)',\n }),\n contentFormat: Type.Optional(\n Type.Union([Type.Literal('markdown'), Type.Literal('html')], {\n description:\n '\"markdown\" (default) for text/documents, \"html\" for rich web content.',\n }),\n ),\n taskId: Type.Optional(\n Type.String({\n description: 'Task ID — threads file update notification into task',\n }),\n ),\n }),\n },\n COMPLETE_TASK: {\n name: 'deskfree_complete_task',\n description:\n 'Mark a task as done. Only call when truly finished and human confirmed.',\n parameters: Type.Object({\n taskId: Type.String({ description: 'Task UUID' }),\n humanApproved: Type.Boolean({\n description:\n 'Must be true. Confirms the human reviewed and approved completion. Backend validates a human message exists after your last ask.',\n }),\n }),\n },\n SEND_MESSAGE: {\n name: 'deskfree_send_message',\n description:\n 'Send a message in the task thread. Keep it short — 1-3 sentences.',\n parameters: Type.Object({\n type: Type.Union([Type.Literal('notify'), Type.Literal('ask')], {\n description:\n 'notify = progress update (quiet, collapsible). ask = needs human attention (surfaces to main thread). Terminate after sending an ask.',\n }),\n content: Type.String({\n description: 'Message content.',\n }),\n taskId: Type.Optional(\n Type.String({\n description: 'Task UUID (optional if context provides it)',\n }),\n ),\n }),\n },\n PROPOSE: {\n name: 'deskfree_propose',\n description:\n 'Propose a plan for human approval. Nothing is created until the human reviews and approves in a modal. Put all details in the instructions field using simple markdown (bold, lists, inline code). Do NOT use markdown headers (#) — use **bold text** instead for section labels.',\n parameters: Type.Object({\n context: Type.Optional(\n Type.String({\n description:\n 'Why this plan is being proposed — helps the human understand the reasoning behind the proposal',\n }),\n ),\n tasks: Type.Array(\n Type.Object({\n title: Type.String({\n description: 'Task title — short, action-oriented (max 200 chars)',\n }),\n instructions: Type.Optional(\n Type.String({\n description:\n 'Detailed instructions, constraints, or context for the task.',\n }),\n ),\n\n estimatedTokens: Type.Optional(\n Type.Number({\n description:\n 'Estimated token cost — consider files to read, reasoning, output',\n }),\n ),\n scheduledFor: Type.Optional(\n Type.String({\n description:\n 'ISO-8601 date for when this task should become available. Use for future-dated or recurring work.',\n }),\n ),\n inputFileIds: Type.Optional(\n Type.Array(\n Type.String({ description: 'File ID to pre-load as context' }),\n {\n description: 'File IDs to read as context input for this task',\n maxItems: 20,\n },\n ),\n ),\n outputFileIds: Type.Optional(\n Type.Array(\n Type.String({ description: 'File ID to update as deliverable' }),\n {\n description: 'File IDs this task will produce or update',\n maxItems: 10,\n },\n ),\n ),\n }),\n {\n description: 'Array of tasks to propose (1-20)',\n minItems: 1,\n maxItems: 20,\n },\n ),\n taskId: Type.Optional(\n Type.String({\n description:\n 'Task ID to thread this proposal into (for follow-up proposals from within a task)',\n }),\n ),\n }),\n },\n} as const;\n\n// ─── Worker Tools ─────────────────────────────────────────────\n// Tool set for worker sub-agents.\n// Workers claim their own tasks via START_TASK and complete them.\n\nexport const WORKER_TOOLS = {\n START_TASK: {\n name: 'deskfree_start_task',\n description:\n 'Claim a pending task and start working. Returns full context (instructions, message history). Use deskfree_read_file to load any relevant files.',\n parameters: Type.Object({\n taskId: Type.String({ description: 'Task UUID to claim' }),\n }),\n },\n READ_FILE: {\n name: 'deskfree_read_file',\n description:\n \"Read a file's full content by ID. Use during orientation to load existing work, or mid-task to reference other files. File IDs are visible in workspace state.\",\n parameters: Type.Object({\n fileId: Type.String({ description: 'File ID to read' }),\n }),\n },\n CREATE_FILE: {\n name: 'deskfree_create_file',\n description:\n 'Create a new persistent file. Use when your task produces a new deliverable. Returns the fileId for subsequent updates via deskfree_update_file.',\n parameters: Type.Object({\n name: Type.String({ description: 'File name (max 200 chars)' }),\n description: Type.Optional(\n Type.String({ description: \"Brief description of the file's purpose\" }),\n ),\n content: Type.Optional(\n Type.String({\n description:\n 'Initial content (or leave empty and update incrementally)',\n }),\n ),\n contentFormat: Type.Optional(\n Type.Union([Type.Literal('markdown'), Type.Literal('html')], {\n description: '\"markdown\" (default) or \"html\" for rich web content.',\n }),\n ),\n taskId: Type.Optional(\n Type.String({\n description: 'Task ID — threads file creation notification into task',\n }),\n ),\n }),\n },\n UPDATE_FILE: SHARED_TOOLS.UPDATE_FILE,\n LEARNING: {\n name: 'deskfree_learning',\n description:\n 'Record a learning — an observation worth remembering for future tasks. Saved to a daily log and consolidated into Memory during the nightly sleep cycle. Call as many times as needed.',\n parameters: Type.Object({\n content: Type.String({\n description:\n 'What you learned. Prefix with importance: [!] for critical (corrections, constraints), [~] for notable (preferences, patterns), or nothing for routine observations. Focus on: PREFERENCES, CORRECTIONS, PATTERNS, DOMAIN FACTS. Be specific. Bad: \"Created a table\". Good: \"[!] User corrected: never use semicolons in this codebase\".',\n }),\n taskId: Type.Optional(\n Type.String({\n description: 'Task ID (optional if context provides it)',\n }),\n ),\n }),\n },\n COMPLETE_TASK: SHARED_TOOLS.COMPLETE_TASK,\n SEND_MESSAGE: SHARED_TOOLS.SEND_MESSAGE,\n PROPOSE: SHARED_TOOLS.PROPOSE,\n} as const;\n\n// ─── Channel ──────────────────────────────────────────────────\n\nexport const CHANNEL_META = {\n name: 'DeskFree',\n description: '1:1 messaging channel for DeskFree bots',\n} as const;\n\nexport const CHANNEL_HINTS = {\n targetResolver: 'Use a DeskFree ID (e.g. U9QF3C6X1A)',\n onboardingSelection: 'Connect to a DeskFree instance for 1:1 bot messaging',\n} as const;\n\nexport const STATUS_MESSAGES = {\n probeNotConfigured: 'Account not configured',\n notConfigured: {\n message: 'Account is not configured',\n fix: 'Run onboarding to set bot token and API URL',\n },\n disabled: {\n message: 'Account is disabled',\n fix: 'Set enabled: true in config',\n },\n notRunning: {\n message: 'Gateway is not running',\n },\n probeFailed: {\n fix: 'Check bot token and API URL',\n },\n} as const;\n","/**\n * DeskFree Agent Tools Implementation\n *\n * This module implements the DeskFree integration for AI agents,\n * providing tools for task management, message sending, and bot collaboration.\n *\n * Architecture:\n * - createOrchestratorTools() - tool set for orchestrator agents\n * - createWorkerTools() - tool set for worker sub-agents (also used by one-shot cycles)\n *\n * This is the runtime-agnostic core implementation that works with\n * any AI SDK or agent framework.\n */\nimport { DeskFreeClient } from './client';\nimport { ORCHESTRATOR_TOOLS, WORKER_TOOLS } from './llm-definitions';\nimport type { Task, TaskWithContext } from './types';\nimport { toErrorMessage } from './util.toErrorMessage';\n\n// ── Core interfaces ─────────────────────────────────────────────\n\n/** A DeskFree tool that can be registered with any AI agent framework. */\nexport interface DeskFreeTool {\n name: string;\n description: string;\n /** JSON Schema describing the tool's input parameters. */\n parameters: Record<string, unknown>;\n /** Execute the tool with the given LLM-provided parameters. */\n execute: (params: Record<string, unknown>) => Promise<ToolResult>;\n}\n\n/** The structured result returned by every tool execution. */\nexport interface ToolResult {\n content: Array<{ type: 'text'; text: string }>;\n /** When `true`, the content describes an error (shown to the LLM as a failure). */\n isError?: boolean;\n}\n\n/** Optional callbacks for lifecycle events during tool execution. */\nexport interface ToolOptions {\n /** Fired when a worker claims a task via `deskfree_start_task`. */\n onTaskStarted?: (taskId: string) => void;\n /** Fired when a worker completes a task via `deskfree_complete_task`. */\n onTaskCompleted?: (taskId: string) => void;\n /** Called when a learning is recorded — runtime writes to local daily log. */\n onLearning?: (content: string, taskId?: string) => void;\n}\n\n// ── Context budget helpers ─────────────────────────────────────────────\n\n/** Maximum number of full messages to include. Earlier messages are summarized. */\nconst MAX_FULL_MESSAGES = 15;\n\n/**\n * Trim a TaskWithContext to fit within a token budget.\n *\n * Strategy:\n * 1. Always include: title, instructions, status, fileId, parentContext summary\n * 2. Messages: keep last MAX_FULL_MESSAGES in full, summarize earlier ones as \"[N earlier messages]\"\n * 3. File content: truncate to MAX_FILE_CONTENT_CHARS with note\n * 4. Strip fields the agent doesn't need (internal timestamps, etc.)\n */\nexport function trimTaskContext(\n result: TaskWithContext,\n): Record<string, unknown> {\n // Core task fields the agent needs\n const trimmed: Record<string, unknown> = {\n taskId: result.taskId,\n title: result.title,\n status: result.status,\n instructions: result.instructions,\n };\n\n // Parent context - always include (small)\n if (result.parentContext) {\n trimmed.parentContext = result.parentContext;\n }\n\n // File IDs for input/output linking\n if (result.inputFileIds && result.inputFileIds.length > 0) {\n trimmed.inputFileIds = result.inputFileIds;\n }\n if (result.outputFileIds && result.outputFileIds.length > 0) {\n trimmed.outputFileIds = result.outputFileIds;\n }\n\n // Messages - keep last N full, summarize the rest\n if (result.messages && result.messages.length > 0) {\n if (result.messages.length <= MAX_FULL_MESSAGES) {\n trimmed.messages = result.messages;\n } else {\n const omitted = result.messages.length - MAX_FULL_MESSAGES;\n const recentMessages = result.messages.slice(-MAX_FULL_MESSAGES);\n trimmed.messages = recentMessages;\n trimmed.messagesOmitted = `${omitted} earlier message(s) omitted - use deskfree_send_message to ask about history if needed`;\n }\n }\n\n return trimmed;\n}\n\n// ── Validation helpers ─────────────────────────────────────────────\n\n/**\n * Extract and validate a string parameter from a tool-call params bag.\n *\n * Throws a descriptive `Error` if `required` is `true` and the value is\n * missing, empty, or not a string. When `required` is `false`, returns\n * `undefined` for missing values.\n *\n * @param params - Raw key-value params from the LLM tool call\n * @param key - The parameter name to extract\n * @param required - Whether the parameter is mandatory\n */\nexport function validateStringParam(\n params: Record<string, unknown>,\n key: string,\n required: true,\n): string;\nexport function validateStringParam(\n params: Record<string, unknown>,\n key: string,\n required: false,\n): string | undefined;\nexport function validateStringParam(\n params: Record<string, unknown>,\n key: string,\n required: boolean,\n): string | undefined {\n const value = params?.[key];\n if (required && (value === undefined || value === null || value === '')) {\n throw new Error(`Missing required parameter: ${key}`);\n }\n if (value !== undefined && value !== null && typeof value !== 'string') {\n throw new Error(`Parameter ${key} must be a string`);\n }\n return value as string | undefined;\n}\n\n/**\n * Extract and validate an enum parameter from a tool-call params bag.\n *\n * Throws a descriptive `Error` listing the allowed values when the\n * supplied value is not in `values`, or when `required` is `true` and\n * the value is missing. Returns `undefined` for optional missing values.\n *\n * @param params - Raw key-value params from the LLM tool call\n * @param key - The parameter name to extract\n * @param values - Allowed enum members\n * @param required - Whether the parameter is mandatory\n */\nexport function validateEnumParam<T extends string>(\n params: Record<string, unknown>,\n key: string,\n values: T[],\n required: true,\n): T;\nexport function validateEnumParam<T extends string>(\n params: Record<string, unknown>,\n key: string,\n values: T[],\n required: false,\n): T | undefined;\nexport function validateEnumParam<T extends string>(\n params: Record<string, unknown>,\n key: string,\n values: T[],\n required: boolean,\n): T | undefined {\n const value = params?.[key];\n if (required && (value === undefined || value === null)) {\n throw new Error(`Missing required parameter: ${key}`);\n }\n if (value !== undefined && value !== null && !values.includes(value as T)) {\n throw new Error(\n `Parameter ${key} must be one of: ${values.join(', ')}. Got: ${value}`,\n );\n }\n return value as T | undefined;\n}\n\n// ── Response formatting ─────────────────────────────────────────────\n\nfunction errorResult(err: unknown): ToolResult {\n const message = toErrorMessage(err);\n return {\n content: [{ type: 'text', text: `Error: ${message}` }],\n isError: true,\n };\n}\n\nfunction formatTaskResponse(\n task: Task,\n summary: string,\n details?: string[],\n): ToolResult {\n const lines = [summary];\n if (details && details.length > 0) {\n lines.push(...details);\n }\n return { content: [{ type: 'text', text: lines.join('\\n') }] };\n}\n\n// ── Tool factory ─────────────────────────────────────────────\n\nfunction createTool<D extends Omit<DeskFreeTool, 'execute'>>(\n definition: D,\n execute: DeskFreeTool['execute'],\n): DeskFreeTool {\n return { ...definition, execute };\n}\n\n// ── Public API ─────────────────────────────────────────────\n\n/**\n * Create the set of tools available to the **orchestrator** agent.\n *\n * The orchestrator is the primary agent that talks to the human. It can:\n * - Inspect workspace state (`deskfree_state`)\n * - Propose tasks for approval (`deskfree_propose`)\n * - Send messages to task threads (`deskfree_send_message`)\n *\n * It intentionally does **not** have `start_task` or `complete_task` —\n * those are worker-only tools dispatched via sub-agents.\n *\n * @param client - Authenticated DeskFree API client\n * @param _options - Reserved for future per-tool configuration\n */\nexport function createOrchestratorTools(\n client: DeskFreeClient,\n _options?: ToolOptions,\n): DeskFreeTool[] {\n return [\n createTool(ORCHESTRATOR_TOOLS.STATE, async (_params) => {\n try {\n const state = await client.getState();\n return {\n content: [{ type: 'text', text: JSON.stringify(state, null, 2) }],\n };\n } catch (err) {\n return errorResult(err);\n }\n }),\n\n createTool(ORCHESTRATOR_TOOLS.SCHEDULE_TASK, async (params) => {\n try {\n const taskId = validateStringParam(params, 'taskId', true);\n const reason = validateStringParam(params, 'reason', true);\n\n // Validate scheduledFor: must be null or a valid ISO 8601 datetime\n const rawScheduledFor = params?.scheduledFor;\n let scheduledFor: string | null = null;\n if (rawScheduledFor !== undefined && rawScheduledFor !== null) {\n if (typeof rawScheduledFor !== 'string') {\n throw new Error(\n 'scheduledFor must be a string (ISO 8601 datetime) or null',\n );\n }\n const parsed = new Date(rawScheduledFor);\n if (isNaN(parsed.getTime())) {\n throw new Error(\n `scheduledFor is not a valid datetime: \"${rawScheduledFor}\". Use ISO 8601 format (e.g. \"2025-03-15T09:00:00Z\").`,\n );\n }\n if (parsed.getTime() < Date.now()) {\n throw new Error(\n `scheduledFor must be in the future. Got: \"${rawScheduledFor}\". To activate immediately, pass null instead.`,\n );\n }\n scheduledFor = rawScheduledFor;\n }\n\n if (scheduledFor) {\n // Schedule for future time\n const result = await client.snoozeTask({\n taskId,\n scheduledFor,\n initiator: 'human_request',\n reason,\n });\n return formatTaskResponse(\n result,\n `Task \"${result.title}\" scheduled for ${new Date(scheduledFor).toLocaleString()}`,\n [\n `Reason: ${reason}`,\n 'Task will resurface automatically at the scheduled time',\n ],\n );\n } else {\n // Activate immediately\n const result = await client.unsnoozeTask({ taskId });\n return formatTaskResponse(\n result,\n `Task \"${result.title}\" activated immediately`,\n ['Task is now available in the active queue'],\n );\n }\n } catch (err) {\n return errorResult(err);\n }\n }),\n\n createTool(ORCHESTRATOR_TOOLS.PROPOSE, async (params) => {\n try {\n const context = validateStringParam(params, 'context', false);\n const taskId = validateStringParam(params, 'taskId', false);\n\n // Validate tasks array\n const rawTasks = params.tasks;\n if (!Array.isArray(rawTasks) || rawTasks.length === 0) {\n throw new Error('tasks must be a non-empty array of task objects');\n }\n const tasks = rawTasks as Array<{\n title?: string;\n instructions?: string;\n }>;\n for (let i = 0; i < tasks.length; i++) {\n const task = tasks[i];\n if (!task || typeof task !== 'object') {\n throw new Error(`tasks[${i}] must be an object`);\n }\n if (\n !task.title ||\n typeof task.title !== 'string' ||\n task.title.trim() === ''\n ) {\n throw new Error(`tasks[${i}].title must be a non-empty string`);\n }\n }\n\n await client.proposePlan({\n context,\n tasks,\n taskId,\n });\n\n return {\n content: [\n {\n type: 'text',\n text: `Proposal created with ${tasks.length} task(s)`,\n },\n ],\n };\n } catch (err) {\n return errorResult(err);\n }\n }),\n\n createTool(ORCHESTRATOR_TOOLS.SEND_MESSAGE, async (params) => {\n try {\n const content = validateStringParam(params, 'content', true);\n const taskId = validateStringParam(params, 'taskId', false);\n\n await client.sendMessage({ content, taskId });\n return {\n content: [{ type: 'text', text: 'Message sent successfully' }],\n };\n } catch (err) {\n return errorResult(err);\n }\n }),\n\n createTool(ORCHESTRATOR_TOOLS.REOPEN_TASK, async (params) => {\n try {\n const taskId = validateStringParam(params, 'taskId', true);\n const reason = validateStringParam(params, 'reason', false);\n\n const result = await client.reopenTask({ taskId, reason });\n return formatTaskResponse(\n result,\n `Task \"${result.title}\" reopened`,\n reason ? [`Reason: ${reason}`] : [],\n );\n } catch (err) {\n return errorResult(err);\n }\n }),\n ];\n}\n\n/**\n * Create the set of tools available to **worker** sub-agents.\n *\n * Workers are spawned per-task and can:\n * - Claim a task and load its context (`deskfree_start_task`)\n * - Write/update linked files (`deskfree_update_file`)\n * - Send messages in the task thread (`deskfree_send_message`)\n * - Propose follow-up work (`deskfree_propose`)\n * - Complete a task (`deskfree_complete_task`)\n *\n * Workers also have `deskfree_state` — used by one-shot cycles (sleep, dusk)\n * that run on the worker tool set.\n *\n * @param client - Authenticated DeskFree API client\n * @param options - Optional configuration (e.g. onTaskStarted callback)\n */\nexport function createWorkerTools(\n client: DeskFreeClient,\n options?: ToolOptions,\n): DeskFreeTool[] {\n return [\n createTool(ORCHESTRATOR_TOOLS.STATE, async (_params) => {\n try {\n const state = await client.getState();\n return {\n content: [{ type: 'text', text: JSON.stringify(state, null, 2) }],\n };\n } catch (err) {\n return errorResult(err);\n }\n }),\n createTool(WORKER_TOOLS.START_TASK, async (params) => {\n try {\n const taskId = validateStringParam(params, 'taskId', true);\n\n const result = await client.claimTask({ taskId });\n\n // onTaskStarted is a state management callback (e.g. setting activeTaskId).\n // Call it after the API succeeds to avoid setting state for a failed claim.\n // If it throws, don't propagate — the task was already claimed server-side.\n try {\n options?.onTaskStarted?.(taskId);\n } catch {\n // Best-effort state update — task claim was already persisted\n }\n\n const trimmed = trimTaskContext(result);\n\n return {\n content: [{ type: 'text', text: JSON.stringify(trimmed, null, 2) }],\n };\n } catch (err) {\n return errorResult(err);\n }\n }),\n createTool(WORKER_TOOLS.SEND_MESSAGE, async (params) => {\n try {\n const content = validateStringParam(params, 'content', true);\n const taskId = validateStringParam(params, 'taskId', false);\n\n await client.sendMessage({ content, taskId });\n return {\n content: [{ type: 'text', text: 'Message sent successfully' }],\n };\n } catch (err) {\n return errorResult(err);\n }\n }),\n\n createTool(WORKER_TOOLS.READ_FILE, async (params) => {\n try {\n const fileId = validateStringParam(params, 'fileId', true);\n const file = await client.getFile({ fileId });\n return {\n content: [{ type: 'text', text: JSON.stringify(file, null, 2) }],\n };\n } catch (err) {\n return errorResult(err);\n }\n }),\n\n createTool(WORKER_TOOLS.CREATE_FILE, async (params) => {\n try {\n const name = validateStringParam(params, 'name', true);\n const description = validateStringParam(params, 'description', false);\n const content = validateStringParam(params, 'content', false);\n const contentFormat = validateEnumParam(\n params,\n 'contentFormat',\n ['markdown', 'html'],\n false,\n );\n const taskId = validateStringParam(params, 'taskId', false);\n const result = await client.createFile({\n name,\n description,\n content,\n contentFormat,\n taskId,\n });\n return {\n content: [\n {\n type: 'text',\n text: `File created: ${result.name} (${result.fileId})`,\n },\n ],\n };\n } catch (err) {\n return errorResult(err);\n }\n }),\n\n createTool(WORKER_TOOLS.UPDATE_FILE, async (params) => {\n try {\n const fileId = validateStringParam(params, 'fileId', true);\n const content = validateStringParam(params, 'content', true);\n const contentFormat = validateEnumParam(\n params,\n 'contentFormat',\n ['markdown', 'html'],\n false,\n );\n const taskId = validateStringParam(params, 'taskId', false);\n\n await client.updateFile({\n fileId,\n content,\n contentFormat,\n taskId,\n });\n\n return {\n content: [\n {\n type: 'text',\n text: `File updated successfully`,\n },\n ],\n };\n } catch (err) {\n return errorResult(err);\n }\n }),\n\n createTool(WORKER_TOOLS.LEARNING, async (params) => {\n try {\n const content = validateStringParam(params, 'content', true);\n const taskId = validateStringParam(params, 'taskId', false);\n\n // Write to local daily log (fast, no network)\n options?.onLearning?.(content, taskId ?? undefined);\n\n // Notify backend for UI visibility (system message in chat)\n await client.reportLearning({ content, taskId });\n return {\n content: [{ type: 'text', text: 'Learning recorded' }],\n };\n } catch (err) {\n return errorResult(err);\n }\n }),\n\n createTool(WORKER_TOOLS.COMPLETE_TASK, async (params) => {\n try {\n const taskId = validateStringParam(params, 'taskId', true);\n const humanApproved = Boolean(params.humanApproved);\n\n const result = await client.completeTask({\n taskId,\n humanApproved,\n });\n\n // onTaskCompleted is a state management callback (e.g. clearing activeTaskId).\n // If it throws, the task is already completed server-side — don't propagate\n // the error to the agent or it may retry completing an already-done task.\n try {\n options?.onTaskCompleted?.(taskId);\n } catch {\n // Best-effort state cleanup — task completion was already persisted\n }\n\n return formatTaskResponse(\n result,\n `Task \"${result.title}\" completed successfully`,\n [humanApproved ? 'Status: Human approved' : 'Status: Completed'],\n );\n } catch (err) {\n return errorResult(err);\n }\n }),\n ];\n}\n","/**\n * DeskFree directive injected into agent context via before_agent_start hook.\n * This replaces the old AGENTS.md file injection approach, ensuring the directive\n * is always present from the first turn (no race condition with file writes).\n */\nexport const DESKFREE_AGENT_DIRECTIVE = `## DeskFree — Orchestrator\nYou are the orchestrator. Your job: turn human intent into approved tasks, then dispatch work.\n\n**Main thread = short and snappy.** Keep responses to 1-3 sentences. Quick back-and-forth conversation is great — clarify, riff, brainstorm in short messages like a real chat. But if something needs deep research, multiple rounds of clarification, or a deliverable — propose a task and move the work to a thread.\n\n**The core loop: propose → approve → work.**\n\n1. **Check state** → \\`deskfree_state\\` — see tasks, memory (a pinned file with accumulated knowledge), and files.\n2. **Propose** → \\`deskfree_propose\\` — turn requests into concrete tasks for approval.\n3. **Dispatch** → \\`deskfree_dispatch_worker\\` with the taskId.\n4. **Communicate** → \\`deskfree_send_message\\` for updates outside task threads.\n\n**Before proposing, qualify the request.** Figure out what kind of thing this is:\n- **One-off task** (\"proofread this\") → propose a task directly.\n- **New aspiration** (\"I want to start posting on LinkedIn\") → don't rush to propose. Ask 1-2 short qualifying questions to understand the real goal.\n- Never call \\`deskfree_propose\\` as your very first action — qualify first, even if briefly.\n\n**Match the human's energy.** Short message → short reply. Casual tone → casual response. Don't over-explain, don't lecture, don't pad responses.\n\nYou do NOT claim tasks, complete tasks, or do work directly — you have no access to deskfree_start_task or deskfree_complete_task. Use \\`deskfree_dispatch_worker\\` to dispatch a worker for each approved task.\n- When a human writes in a task thread, decide: does it need bot action? If yes → reopen and dispatch a worker. If it's just confirmation or deferred — leave it for now.\n- Estimate token cost per task — consider files to read, reasoning, output.`;\n\n/**\n * Shorter directive for worker sub-agents.\n * Workers get task-specific instructions from deskfree_start_task,\n * so they only need minimal orientation — not the full work loop.\n */\nexport const DESKFREE_WORKER_DIRECTIVE = `## DeskFree Worker\nYou are a worker sub-agent. Your first message contains pre-loaded context — use it directly.\nTools: deskfree_state, deskfree_start_task, deskfree_read_file, deskfree_create_file, deskfree_update_file, deskfree_learning, deskfree_complete_task, deskfree_send_message, deskfree_propose.\n\n**Context loading:**\n- If your first message contains \\`<task_context>\\`, the task is already claimed and context is pre-loaded. Do NOT call deskfree_start_task — start working immediately.\n- If your first message contains \\`<workspace_state>\\`, use it for situational awareness (other tasks, memory, files).\n- If no pre-loaded context (edge case/fallback), call \\`deskfree_start_task\\` with your taskId to claim and load context.\n- If continuing from a previous conversation (you can see prior tool calls and context), respond directly to the human's latest message — do NOT call deskfree_start_task again.\n\n**Orient → Align → Work.** Every new task follows this rhythm:\n\n1. **Orient** — Scan workspace state for relevant files. Read the Memory file for context on preferences and past patterns. Read any other files that are useful context with \\`deskfree_read_file\\`. Don't read everything — just what's relevant to this task.\n2. **Align** — Send a brief \\`notify\\` message: what you found, what you'll produce. One or two sentences. (\"I'll build on the existing brand guide and create a new tone reference.\") Then proceed — don't wait for a response.\n3. **Work** — Execute the task. Update existing files with \\`deskfree_update_file\\` or create new ones with \\`deskfree_create_file\\`. Pass your taskId so updates appear in the thread. Build content incrementally — start with structure, then flesh out.\n4. **Deliver** — Send an \\`ask\\` message when work is ready for review. Only complete (\\`deskfree_complete_task\\` with humanApproved: true) after the human has confirmed. Never self-complete.\n\n**File rules:**\n- Create files when your task naturally produces them. Don't be afraid to create multiple files if the work calls for it.\n- Always pass \\`taskId\\` when creating or updating files — this threads notifications into the task.\n- If you discover work that falls outside your task's scope, use \\`deskfree_propose\\` to suggest follow-up tasks immediately — don't wait until completion. Propose as you discover, then stay focused on your current task.\n\n**Learnings:**\n- Use \\`deskfree_learning\\` to record observations worth remembering. A nightly sleep cycle consolidates these into the Memory file. Record:\n - **Preferences**: how the human wants things done (\"prefers X over Y\")\n - **Corrections**: when the human corrects you (\"actually, do X not Y\")\n - **Patterns**: recurring approaches that work (\"for this type of task, always...\")\n - **Domain facts**: business-specific knowledge not in project docs\n- Prefix critical observations with [!] (corrections, constraints, errors).\n- Prefix notable observations with [~] (preferences, patterns).\n- Leave routine observations unprefixed.\n- Do NOT record one-time task details, things in project docs, or obvious/generic knowledge.\n- If your first message contains \\`<daily_observations>\\`, these are recent raw observations not yet consolidated into Memory. Use them as additional context.\n\n**Sub-agents & delegation:**\n- Your context window is finite. Delegate research, analysis, large file processing, and content drafting to sub-agents — preserve your context for orchestration and DeskFree tool calls.\n- Sub-agents get a fresh context window with standard tools (Read, Write, Bash, Grep, WebSearch, etc.) but NO DeskFree tools. Pre-load any file content they need into the prompt.\n- Use \\`run_in_background: true\\` for parallel independent work.\n- During Orient, check Memory for sub-agent helper patterns. Inject relevant ones into the sub-agent prompt alongside the task.\n- After a sub-agent completes, reflect: did this reveal a useful delegation pattern? Something to do differently? Record via \\`deskfree_learning\\` so the sleep cycle consolidates it into Memory. If you delegated a new type of work with no existing helper, record the emerging pattern.\n- Don't over-delegate: quick reads, simple lookups, and anything requiring DeskFree tools are faster inline.\n\n**Completing tasks:**\n- On 409 or 404 errors: STOP. Do not retry. Call deskfree_state to find available tasks.`;\n\n/**\n * DeskFree heartbeat checklist injected into agent context for heartbeat turns.\n */\nexport const DESKFREE_HEARTBEAT_DIRECTIVE = `## DeskFree Heartbeat\nOn each heartbeat, run through this checklist:\n\n### 1. Work the queue\n- Run \\`deskfree_state\\` to get the full workspace snapshot.\n- Any open tasks with awaiting=bot? Use \\`deskfree_dispatch_worker\\` to dispatch a worker for each. Pass the taskId.\n- Any open tasks that seem stalled (claimed but no recent activity)? Check on them.\n\n### 2. Proactive assessment\nAfter handling the queue, step back and think about the bigger picture. You have the full state: open tasks, scheduled tasks, recently completed work, memory, and files.\n\n**Think through:**\n- What momentum exists? What was recently accomplished, and what naturally follows?\n- What is stalled or falling behind? Anything open too long without progress?\n- What is scheduled soon? Does anything need prep work before it lands?\n- What is the single highest-leverage thing that could happen next?\n\n**Then act — but only if you have something genuinely useful:**\n\n*Things the bot can do* — research, drafts, analysis, prep. Propose as a task via \\`deskfree_propose\\`. One focused task, not a batch.\n\n*Things the human should do* — nudges, reminders, conversation starters. Send via \\`deskfree_send_message\\`. Keep it brief and genuinely helpful, not nagging.\n\n**Rules:**\n- Do not suggest things that are already open or scheduled — check first.\n- Do not repeat suggestions the human ignored or rejected recently.\n- Quality over quantity. One good insight beats five generic nudges.\n- If everything looks healthy and active, do nothing. Silence is fine.`;\n\n/**\n * Sleep directive — nightly reflection and memory consolidation.\n *\n * The sleep agent runs once per day at the configured local hour.\n * It consolidates daily observations into Memory, checks recurring\n * commitments, and optionally proposes proactive work.\n */\nexport const DESKFREE_SLEEP_DIRECTIVE = `## DeskFree — Nightly Sleep Cycle\nYou are the sleep agent. You run once per day to reflect, consolidate memory, and prepare for tomorrow.\n\nTools available: deskfree_state, deskfree_propose, deskfree_send_message, deskfree_read_file, deskfree_update_file.\n\n---\n\n### 1. REFLECT & CONSOLIDATE\n\nYour primary job: merge daily observations into the Memory file using strength-scored entries.\n\nYour prompt contains both \\`<current_memory>\\` (the current Memory file content) and \\`<daily_observations>\\` (raw daily logs) inline — you have everything you need upfront.\n\n**Steps:**\n1. Review the current memory and daily observations from your prompt.\n2. Apply the memory curation rules below.\n3. Update the Memory file via \\`deskfree_update_file\\` using the file ID from your prompt.\n4. After updating, send a brief main-thread message via \\`deskfree_send_message\\` noting what was consolidated (e.g. \"Reflected on yesterday — updated my notes on your brand voice preferences and the weekly review pattern.\"). Keep it to 1-2 sentences.\n5. If nothing meaningful changed, skip the update and send a brief message like \"Quiet day — nothing new to consolidate.\"\n\n**Memory Types**\n\nEach memory item carries a type tag and strength score: \\`[type:X, strength:N]\\`\n\n| Type | What it captures | Decay rate |\n|------|-----------------|------------|\n| \\`correction\\` | Explicit \"do X not Y\" from human | Very slow (−1 when strength ≥10, else no decay) |\n| \\`preference\\` | How the human wants things done | Slow (−1 when strength ≥6, else no decay) |\n| \\`pattern\\` | Approaches/workflows that work | Normal (see decay rules) |\n| \\`domain\\` | Business/project-specific facts | Slow (−1 when strength ≥6, else no decay) |\n| \\`insight\\` | Meta-observations from reflection | Normal (see decay rules) |\n\nCorrections and domain facts are durable — they rarely become irrelevant.\nPatterns and insights decay normally — stale approaches should be forgotten.\nPreferences sit in between — slow decay, but they can evolve.\n\n**Strength Scoring Rules**\n\nStrength uses Ebbinghaus-inspired logarithmic decay — strong memories resist forgetting:\n\n**Reinforcement (observation matches existing memory):**\n- strength +2\n\n**Explicit correction (\"actually do X not Y\"):**\n- Replace old memory, new one starts at [strength: 3, type: correction]\n\n**Decay (memory NOT referenced by any daily observation):**\n- strength ≥ 10: decay by −1 (deeply encoded, slow forgetting)\n- strength 5-9: decay by −2 (moderately encoded)\n- strength 1-4: decay by −3 (weakly encoded, fast forgetting)\n- EXCEPT: corrections and domain facts with strength ≥6 decay at −1 max (durable memories)\n- EXCEPT: preferences with strength ≥6 decay at −1 max\n\n**Removal:**\n- Strength reaches 0 → move to a ## Fading section at the bottom (one-line summaries only, no strength tags). Keep max 10 fading memories. If Fading section is full, oldest entries are permanently forgotten. You may rescue a fading memory back to active if it becomes relevant again (re-add with [strength: 2]).\n\n**New observation:**\n- Assess importance: how consequential is this for future tasks?\n- Look for [!] prefix (critical) or [~] prefix (notable) as importance signals from the worker.\n- Low importance (casual mention, routine) → [strength: 1, type: <appropriate>]\n- Medium importance (useful preference, [~] prefix) → [strength: 2, type: <appropriate>]\n- High importance (explicit correction, strong constraint, [!] prefix) → [strength: 4, type: <appropriate>]\n- Critical (production error, absolute rule) → [strength: 6, type: <appropriate>]\n\n**Consolidation rules:**\n- Classify each memory with the correct type. Only keep genuinely reusable knowledge.\n- Discard noise and one-off task details.\n- If the same episodic observation appears 3+ times across different days, promote it to a \\`pattern\\` or \\`domain\\` fact with [strength: 5]. Remove the individual episodes.\n- Look for meta-patterns: approaches that consistently work/fail, implicit preferences, recurring corrections.\n- If you find non-obvious insights, add them as \\`[type: insight, strength: 2]\\` memories.\n- Merge near-duplicates, remove items at [strength: 0], trim verbose entries.\n- Keep total document under ~4000 words.\n- Use ## headers for sections — let them emerge organically from content.\n\n### 2. CHECK RECURRING COMMITMENTS\n\nAfter memory consolidation:\n1. Call \\`deskfree_state\\` to see the board.\n2. Cross-reference memory for recurring patterns (daily audits, weekly reviews, etc.).\n3. If a recurring commitment has no upcoming scheduled task, propose it via \\`deskfree_propose\\` with appropriate \\`scheduledFor\\`.\n4. Don't propose things already on the board or that were recently completed/ignored.\n\n### 3. PROACTIVE OPPORTUNITIES\n\nBased on recent work, completed tasks, and patterns in memory — is there something genuinely useful to propose or a message worth sending?\n- One focused proposal max. Skip if nothing merits it.\n- Quality over quantity. Don't force it.\n\n### Rules\n- Keep main thread messages short (1-2 sentences).\n- Do NOT propose things the human has previously ignored or rejected.\n- Use \\`deskfree_read_file\\` only if you need to re-read the Memory file after your own update (verification). The current content is already in your prompt.`;\n\n/**\n * Dusk directive — evening planning and overnight work proposals.\n *\n * The dusk agent runs once per day at the configured local hour (default ~4 PM).\n * It reviews the day's work, proposes focused overnight autonomous tasks,\n * and briefs the human before they check out.\n */\nexport const DESKFREE_DUSK_DIRECTIVE = `## DeskFree — Evening Dusk Cycle\nYou are the dusk agent. You run once per day in the evening to review the day, propose overnight work, and brief the human.\n\nTools available: deskfree_state, deskfree_propose, deskfree_send_message, deskfree_read_file, deskfree_update_file.\n\n---\n\n### 1. REVIEW THE DAY\n\nYour prompt contains both \\`<current_memory>\\` (the current Memory file content) and \\`<daily_observations>\\` (raw daily logs) inline — you have everything you need upfront.\n\n**Steps:**\n1. Review the current memory and daily observations from your prompt.\n2. Call \\`deskfree_state\\` to see the current board — open tasks, recently completed work, files.\n3. Build a mental model of what happened today: what was accomplished, what's in progress, what's stalled.\n\n### 2. IDENTIFY OVERNIGHT OPPORTUNITIES\n\nThink about work that can be done autonomously overnight — WITHOUT human judgment or approval mid-task.\n\n**Good overnight work:**\n- Research and analysis (market research, competitive analysis, reading material)\n- Content drafts (blog posts, reports, documentation)\n- File updates (updating recurring reports, preparing templates)\n- Prep work for tomorrow (gathering context, pre-reading for scheduled meetings)\n- Recurring tasks that are due (weekly reviews, daily audits)\n\n**NOT good overnight work:**\n- Anything requiring human decisions mid-task\n- Tasks that depend on external input not yet received\n- Creative work where the human has strong opinions on direction\n- Anything the human explicitly said to wait on\n\n### 3. PROPOSE THE PLAN\n\nIf you identified useful overnight work:\n1. Use \\`deskfree_propose\\` with 1-3 well-scoped tasks. Quality over quantity.\n2. Each task should be self-contained — a worker must be able to complete it without human input.\n3. Set \\`scheduledFor\\` if work should start at a specific time (e.g. early morning).\n4. If nothing genuinely useful can be done overnight, skip the proposal entirely. Don't force it.\n\n### 4. BRIEF THE HUMAN\n\nSend a brief main-thread message via \\`deskfree_send_message\\`:\n- 2-3 sentence summary: what happened today + what you're proposing for overnight (if anything).\n- Keep it conversational and useful — this is the human's \"end of day\" touchpoint.\n- If no proposals, still send a brief day summary.\n\n### Rules\n- Do NOT propose things already on the board or recently completed.\n- Do NOT repeat suggestions the human previously ignored or rejected.\n- Quality over quantity. One good task beats three mediocre ones.\n- Keep the briefing message short and actionable.\n- Cross-reference memory for recurring patterns — if something is due, propose it.\n- Use \\`deskfree_read_file\\` only if you need file content beyond what's in your prompt.`;\n\n/**\n * Returns the context to prepend to an agent turn.\n * Sub-agents get a shorter directive to save ~250 tokens per turn.\n */\nexport function getDeskFreeContext(sessionKey?: string): string {\n const isWorker =\n sessionKey &&\n (sessionKey.includes(':sub:') ||\n sessionKey.includes(':spawn:') ||\n sessionKey.includes(':run:'));\n const directive = isWorker\n ? DESKFREE_WORKER_DIRECTIVE\n : DESKFREE_AGENT_DIRECTIVE;\n return directive;\n}\n","import type { DeskFreeClient } from './client';\nimport type { PluginLogger } from './types';\nimport { toErrorMessage } from './util.toErrorMessage';\n\n/** Minimum interval between flush calls (ms). */\nconst THROTTLE_MS = 300;\n\n/** Character buffer threshold — flush when buffer reaches this size. */\nconst CHAR_BUFFER_SIZE = 256;\n\n/** Maximum retries for close() with exponential backoff. */\nconst CLOSE_MAX_RETRIES = 3;\n\n/**\n * Manages a streaming message session for DeskFree.\n *\n * Delta-based architecture (inspired by Slack's streaming API):\n * 1. First chunk → `start()` sends a new message via Postgres INSERT\n * 2. Subsequent chunks → `push()` buffers deltas, flushes via `streamChunk`\n * (WS broadcast + async DynamoDB, zero Postgres writes)\n * 3. Final → `close()` sends FULL final content via `updateMessage`\n * (Postgres UPDATE + WS broadcast with streaming=false)\n *\n * Buffering: flushes on EITHER condition (whichever comes first):\n * - Character buffer reaches CHAR_BUFFER_SIZE (256 chars)\n * - Time throttle expires (THROTTLE_MS = 300ms)\n */\nexport class DeskFreeStreamingSession {\n private client: DeskFreeClient;\n private log: PluginLogger;\n private sendViaWs?: (\n messageId: string,\n delta: string,\n fullContent: string,\n taskId?: string,\n ) => boolean;\n private messageId: string | null = null;\n private taskId: string | undefined;\n private currentText = '';\n private closed = false;\n private lastUpdateTime = 0;\n private pendingDelta = '';\n private pendingTimer: ReturnType<typeof setTimeout> | null = null;\n private queue: Promise<void> = Promise.resolve();\n /** Full accumulated text (currentText + pendingDelta) */\n private fullText = '';\n\n constructor(\n client: DeskFreeClient,\n log: PluginLogger,\n sendViaWs?: (\n messageId: string,\n delta: string,\n fullContent: string,\n taskId?: string,\n ) => boolean,\n ) {\n this.client = client;\n this.log = log;\n this.sendViaWs = sendViaWs;\n }\n\n /**\n * Send the first chunk as a new message.\n * Returns the messageId for subsequent updates.\n */\n async start(content: string, taskId?: string): Promise<string> {\n if (this.messageId) {\n throw new Error('Streaming session already started');\n }\n\n const result = await this.client.sendMessage({ content, taskId });\n this.messageId = result.messageId;\n this.taskId = taskId;\n this.currentText = content;\n this.fullText = content;\n this.lastUpdateTime = Date.now();\n\n this.log.info(`Streaming started: messageId=${this.messageId}`);\n\n return this.messageId;\n }\n\n /**\n * Push new text (appended to the stream). Buffers and flushes as delta.\n * Content should be the FULL accumulated message text.\n */\n async update(fullText: string): Promise<void> {\n if (!this.messageId || this.closed) return;\n if (fullText === this.fullText) return;\n\n // Calculate the delta (new text since last known full text)\n const delta = fullText.slice(this.fullText.length);\n if (!delta) return;\n\n this.fullText = fullText;\n this.pendingDelta += delta;\n\n const now = Date.now();\n const elapsed = now - this.lastUpdateTime;\n const bufferFull = this.pendingDelta.length >= CHAR_BUFFER_SIZE;\n const throttleExpired = elapsed >= THROTTLE_MS;\n\n if (bufferFull || throttleExpired) {\n this.flush();\n } else if (!this.pendingTimer) {\n this.pendingTimer = setTimeout(() => {\n this.pendingTimer = null;\n this.flush();\n }, THROTTLE_MS - elapsed);\n }\n }\n\n /**\n * Finalize the streaming session with the final content.\n * Retries up to 3 times with exponential backoff.\n */\n async close(finalText?: string): Promise<void> {\n if (this.closed) return;\n\n // Clear any pending throttled flush\n if (this.pendingTimer) {\n clearTimeout(this.pendingTimer);\n this.pendingTimer = null;\n }\n\n // Flush any remaining buffered delta BEFORE setting closed flag,\n // because flush() bails early when this.closed is true.\n this.flush();\n\n this.closed = true;\n\n // Wait for any in-flight operations\n await this.queue;\n\n const text = finalText ?? (this.fullText || this.currentText);\n\n if (this.messageId) {\n // Retry close up to 3 times with exponential backoff\n for (let attempt = 0; attempt < CLOSE_MAX_RETRIES; attempt++) {\n try {\n await this.client.updateMessage({\n messageId: this.messageId,\n content: text,\n streaming: false,\n });\n break;\n } catch (err) {\n const msg = toErrorMessage(err);\n if (attempt < CLOSE_MAX_RETRIES - 1) {\n this.log.warn(\n `Streaming close attempt ${attempt + 1} failed: ${msg}, retrying...`,\n );\n await new Promise((r) => setTimeout(r, 1000 * (attempt + 1)));\n } else {\n this.log.error(\n `Streaming close failed after ${CLOSE_MAX_RETRIES} attempts: ${msg}. Recovery worker will finalize.`,\n );\n }\n }\n }\n }\n\n this.log.info(`Streaming closed: messageId=${this.messageId}`);\n }\n\n isActive(): boolean {\n return this.messageId !== null && !this.closed;\n }\n\n getMessageId(): string | null {\n return this.messageId;\n }\n\n /**\n * Flush the pending delta buffer via streamChunk.\n */\n private flush(): void {\n if (this.pendingTimer) {\n clearTimeout(this.pendingTimer);\n this.pendingTimer = null;\n }\n\n const delta = this.pendingDelta;\n if (!delta || !this.messageId || this.closed) return;\n\n this.pendingDelta = '';\n const fullContent = this.fullText;\n\n const messageId = this.messageId!;\n this.queue = this.queue.then(async () => {\n try {\n // Try WS first (near-zero latency), fall back to HTTP tRPC\n const sentViaWs = this.sendViaWs?.(\n messageId,\n delta,\n fullContent,\n this.taskId,\n );\n if (!sentViaWs) {\n await this.client.streamChunk({ messageId, delta, fullContent });\n }\n this.currentText = fullContent;\n this.lastUpdateTime = Date.now();\n } catch (err) {\n const msg = toErrorMessage(err);\n this.log.warn(`Streaming delta failed: ${msg}`);\n }\n });\n }\n}\n","import createWebSocketStream from './lib/stream.js';\nimport Receiver from './lib/receiver.js';\nimport Sender from './lib/sender.js';\nimport WebSocket from './lib/websocket.js';\nimport WebSocketServer from './lib/websocket-server.js';\n\nexport { createWebSocketStream, Receiver, Sender, WebSocket, WebSocketServer };\nexport default WebSocket;\n","import WebSocket from 'ws';\n\n// ── WebSocket Ack ─────────────────────────────────────────────────────\n\n/**\n * Module-level WebSocket reference for the active bot connection.\n *\n * Used to send delivery receipts, thinking indicators, and streaming\n * chunks over the existing WS connection (avoids HTTP round-trips\n * through Lambda). Set to `null` when disconnected.\n */\nexport let activeWs: WebSocket | null = null;\n\n/**\n * Update the active WebSocket reference.\n *\n * Called by the gateway connection manager when a new WS connection\n * is established (`ws`) or torn down (`null`).\n */\nexport function setActiveWs(ws: WebSocket | null): void {\n activeWs = ws;\n}\n\n/**\n * Signal to the frontend that the bot is processing (thinking).\n * Best-effort — silently ignores failures.\n */\nexport function sendWsThinking(taskId?: string): void {\n if (activeWs?.readyState === WebSocket.OPEN) {\n try {\n activeWs.send(\n JSON.stringify({ action: 'thinking', ...(taskId ? { taskId } : {}) }),\n );\n } catch {\n // Best-effort — don't propagate errors\n }\n }\n}\n\n// ── Active Task Tracking ──────────────────────────────────────────────\n\n/**\n * The currently active task ID for automatic message threading.\n *\n * When a bot is working on a task, outbound messages (tool responses,\n * status updates) are automatically threaded into it without requiring\n * an explicit `taskId` parameter. The threading cascade is:\n *\n * activeTaskId → completedTaskId → inboundThreadId\n *\n * After task completion, the ID is preserved in `completedTaskId` so\n * the orchestrator's follow-up reply still threads correctly. It's\n * cleared when a new inbound message arrives.\n */\nlet activeTaskId: string | null = null;\nlet completedTaskId: string | null = null;\nlet inboundThreadId: string | null = null;\n\n/**\n * Set or clear the active task ID.\n *\n * When clearing (`null`), the current active ID is preserved in\n * `completedTaskId` for follow-up threading. Call\n * {@link clearCompletedTaskId} when a new inbound message arrives.\n */\nexport function setActiveTaskId(taskId: string | null): void {\n if (taskId === null && activeTaskId !== null) {\n // Task completed — preserve ID for follow-up threading\n completedTaskId = activeTaskId;\n }\n activeTaskId = taskId;\n}\n\n/**\n * Get the current task ID for message threading.\n *\n * Returns the first non-null value from the cascade:\n * 1. `activeTaskId` — currently working on a task\n * 2. `completedTaskId` — just finished a task, follow-up reply\n * 3. `inboundThreadId` — inferred from the current inbound message\n *\n * @returns The task ID to thread into, or `null` for the main stream.\n */\nexport function getActiveTaskId(): string | null {\n return activeTaskId ?? completedTaskId ?? inboundThreadId;\n}\n\n/**\n * Clear the completed task ID. Call this when a new inbound message\n * arrives so subsequent replies go to main thread.\n */\nexport function clearCompletedTaskId(): void {\n completedTaskId = null;\n}\n\n/**\n * Set the inbound thread ID from the current message's taskId.\n * This is the last-resort fallback in getActiveTaskId() so that\n * tool-based replies (which don't have an explicit taskId) still\n * thread into the correct task conversation.\n */\nexport function setInboundThreadId(taskId: string | null): void {\n inboundThreadId = taskId;\n}\n\n/**\n * Send a streaming chunk over the active WebSocket connection.\n * Returns true if the chunk was sent, false if WS is unavailable (caller falls back to HTTP).\n */\nexport function sendWsStreamChunk(\n messageId: string,\n delta: string,\n fullContent: string,\n taskId?: string,\n): boolean {\n if (!activeWs || activeWs.readyState !== WebSocket.OPEN) return false;\n try {\n activeWs.send(\n JSON.stringify({\n action: 'streamChunk',\n messageId,\n delta,\n fullContent,\n ...(taskId ? { taskId } : {}),\n }),\n );\n return true;\n } catch {\n return false;\n }\n}\n","import type { DeskFreeClient } from './client';\nimport type { PluginLogger } from './types';\n\n/** A queued error entry waiting to be flushed to the backend. */\ninterface ErrorEntry {\n message: string;\n level: 'warn' | 'error' | 'fatal';\n timestamp: string;\n metadata?: Record<string, unknown>;\n}\n\nconst FLUSH_INTERVAL_MS = 10_000;\nconst MAX_BATCH_SIZE = 50;\nconst MAX_QUEUE_SIZE = 200;\n\n// ── Singleton access ──────────────────────────────────────────────────\nlet _instance: ErrorReporter | null = null;\n\n/**\n * Initialize the global ErrorReporter singleton.\n * Called once when the DeskFree gateway connection starts.\n */\nexport function initErrorReporter(\n client: DeskFreeClient,\n logger: PluginLogger,\n): ErrorReporter {\n if (_instance) {\n _instance.dispose();\n }\n _instance = new ErrorReporter(client, logger);\n return _instance;\n}\n\n/**\n * Get the global ErrorReporter instance, or null if not yet initialized.\n * Use this from any module to report errors without passing the instance around.\n */\nexport function getErrorReporter(): ErrorReporter | null {\n return _instance;\n}\n\n/**\n * Convenience: report an error if the reporter is initialized.\n * No-op if called before initErrorReporter(). Never throws.\n */\nexport function reportError(\n level: 'warn' | 'error' | 'fatal',\n message: string,\n metadata?: Record<string, unknown>,\n): void {\n _instance?.report(level, message, metadata);\n}\n\n/**\n * Batched, async, fire-and-forget error reporter that sends plugin errors\n * to the DeskFree backend via `agent.reportError`.\n *\n * Errors are queued in memory and flushed periodically or when the batch\n * reaches MAX_BATCH_SIZE. Reporting failures are silently swallowed to\n * never block the plugin.\n */\nexport class ErrorReporter {\n private queue: ErrorEntry[] = [];\n private flushTimer: ReturnType<typeof setInterval> | null = null;\n private client: DeskFreeClient;\n private logger: PluginLogger;\n\n constructor(client: DeskFreeClient, logger: PluginLogger) {\n this.client = client;\n this.logger = logger;\n\n this.flushTimer = setInterval(() => void this.flush(), FLUSH_INTERVAL_MS);\n if (\n this.flushTimer &&\n typeof this.flushTimer === 'object' &&\n 'unref' in this.flushTimer\n ) {\n this.flushTimer.unref();\n }\n }\n\n /** Enqueue an error for reporting. Never throws. */\n report(\n level: 'warn' | 'error' | 'fatal',\n message: string,\n metadata?: Record<string, unknown>,\n ): void {\n // Drop oldest entries if queue is full to bound memory\n if (this.queue.length >= MAX_QUEUE_SIZE) {\n this.queue.splice(0, this.queue.length - MAX_QUEUE_SIZE + 1);\n }\n\n this.queue.push({\n message: message.slice(0, 4000),\n level,\n timestamp: new Date().toISOString(),\n metadata,\n });\n\n if (this.queue.length >= MAX_BATCH_SIZE) {\n void this.flush();\n }\n }\n\n /** Flush queued errors to the backend. Fire-and-forget. */\n async flush(): Promise<void> {\n if (this.queue.length === 0) return;\n\n const batch = this.queue.splice(0, MAX_BATCH_SIZE);\n\n try {\n await this.client.reportError({ errors: batch });\n } catch {\n // Fire-and-forget — never block the plugin\n this.logger.debug(\n `[error-reporter] Failed to flush ${batch.length} error(s) to backend`,\n );\n }\n }\n\n /** Stop the periodic flush timer. */\n dispose(): void {\n if (this.flushTimer) {\n clearInterval(this.flushTimer);\n this.flushTimer = null;\n }\n if (_instance === this) {\n _instance = null;\n }\n }\n}\n","import type { PluginLogger } from './types';\n\nexport interface ConnectionHealth {\n connectionStartTime: number;\n totalReconnects: number;\n lastReconnectAt: number | null;\n avgReconnectInterval: number;\n totalMessagesDelivered: number;\n lastMessageAt: number | null;\n currentMode: 'websocket' | 'polling';\n}\n\n// Module-level health state persists across reconnects\nexport const accountHealth = new Map<string, ConnectionHealth>();\n\nexport function initializeHealth(accountId: string): void {\n if (!accountHealth.has(accountId)) {\n accountHealth.set(accountId, {\n connectionStartTime: Date.now(),\n totalReconnects: 0,\n lastReconnectAt: null,\n avgReconnectInterval: 0,\n totalMessagesDelivered: 0,\n lastMessageAt: null,\n currentMode: 'websocket',\n });\n }\n}\n\nexport function updateHealthMode(\n accountId: string,\n mode: 'websocket' | 'polling',\n): void {\n const health = accountHealth.get(accountId);\n if (health) {\n health.currentMode = mode;\n }\n}\n\nexport function recordReconnect(accountId: string): void {\n const health = accountHealth.get(accountId);\n if (health) {\n const now = Date.now();\n if (health.lastReconnectAt) {\n const interval = now - health.lastReconnectAt;\n health.avgReconnectInterval =\n (health.avgReconnectInterval * health.totalReconnects + interval) /\n (health.totalReconnects + 1);\n }\n health.totalReconnects++;\n health.lastReconnectAt = now;\n }\n}\n\nexport function recordMessageDelivery(accountId: string, count: number): void {\n const health = accountHealth.get(accountId);\n if (health) {\n health.totalMessagesDelivered += count;\n health.lastMessageAt = Date.now();\n }\n}\n\nexport function formatDuration(ms: number): string {\n const seconds = Math.floor(ms / 1000);\n const minutes = Math.floor(seconds / 60);\n const hours = Math.floor(minutes / 60);\n\n if (hours > 0) {\n return `${hours}h${minutes % 60}m`;\n } else if (minutes > 0) {\n return `${minutes}m${seconds % 60}s`;\n } else {\n return `${seconds}s`;\n }\n}\n\nexport function logHealthSummary(accountId: string, log: PluginLogger): void {\n const health = accountHealth.get(accountId);\n if (!health) return;\n\n const uptime = Date.now() - health.connectionStartTime;\n log.info(\n `DeskFree health: uptime=${formatDuration(uptime)}, ` +\n `reconnects=${health.totalReconnects}, ` +\n `messages=${health.totalMessagesDelivered}, ` +\n `mode=${health.currentMode}`,\n );\n}\n","import type { ChannelGatewayContext, PluginLogger } from './types';\nimport { toErrorMessage } from './util.toErrorMessage';\nimport { mkdirSync, readFileSync, writeFileSync } from 'node:fs';\nimport { dirname, join } from 'node:path';\n\n/**\n * Persistent cursor management.\n * Stores cursor on disk so we can resume from the right position after restart.\n */\nexport function loadCursor(\n ctx: ChannelGatewayContext,\n storagePath: string,\n): string | null {\n try {\n const cursorPath = join(storagePath, `cursors/${ctx.accountId}/cursor`);\n return readFileSync(cursorPath, 'utf-8').trim() || null;\n } catch {\n return null;\n }\n}\n\nexport function saveCursor(\n ctx: ChannelGatewayContext,\n cursor: string,\n storagePath: string,\n log?: PluginLogger,\n): void {\n try {\n const filePath = join(storagePath, `cursors/${ctx.accountId}/cursor`);\n const dir = dirname(filePath);\n mkdirSync(dir, { recursive: true });\n writeFileSync(filePath, cursor, 'utf-8');\n } catch (err) {\n // Non-fatal — we'll just re-process some messages on restart\n const message = toErrorMessage(err);\n log?.warn(`Failed to persist cursor: ${message}`);\n }\n}\n","/**\n * Validation helpers for DeskFree channel configuration fields.\n */\n\ninterface ValidateFieldOpts {\n value: unknown;\n name: string;\n /** Minimum character length (after trimming) */\n minLength?: number;\n /** Maximum character length (after trimming) */\n maxLength?: number;\n /** Regex the trimmed value must match */\n pattern?: RegExp;\n /** Error message when pattern doesn't match */\n patternMessage?: string;\n}\n\n/**\n * Validate a string field: checks for presence, correct type, no surrounding\n * whitespace, and optional min/max length + regex pattern.\n * Returns an error string or null on success.\n */\nexport function validateField(opts: ValidateFieldOpts): string | null {\n const { value, name, minLength, maxLength, pattern, patternMessage } = opts;\n\n if (!value) return `${name} is required`;\n if (typeof value !== 'string') return `${name} must be a string`;\n\n const trimmed = value.trim();\n if (trimmed !== value)\n return `${name} must not have leading or trailing whitespace`;\n\n if (minLength !== undefined && trimmed.length < minLength)\n return `${name} appears to be incomplete (minimum ${minLength} characters expected)`;\n\n if (maxLength !== undefined && trimmed.length > maxLength)\n return `${name} appears to be invalid (maximum ${maxLength} characters expected)`;\n\n if (pattern !== undefined && !pattern.test(trimmed))\n return patternMessage ?? `${name} contains invalid characters`;\n\n return null;\n}\n\n/**\n * Check if a hostname appears to be a development/local environment.\n */\nexport function isLocalDevelopmentHost(hostname: string): boolean {\n return (\n hostname === 'localhost' ||\n hostname === '127.0.0.1' ||\n hostname === '::1' ||\n hostname.endsWith('.local') ||\n hostname.endsWith('.localhost') ||\n /^192\\.168\\./.test(hostname) ||\n /^10\\./.test(hostname) ||\n /^172\\.(1[6-9]|2\\d|3[01])\\./.test(hostname)\n );\n}\n\n/**\n * Validate bot token format and content.\n */\nexport function validateBotToken(value: unknown): string | null {\n // Basic field checks\n const fieldError = validateField({ value, name: 'Bot token' });\n if (fieldError) return fieldError;\n\n const trimmed = (value as string).trim();\n\n if (!trimmed.startsWith('bot_')) {\n return 'Bot token must start with \"bot_\" (check your DeskFree bot configuration)';\n }\n\n const patternError = validateField({\n value,\n name: 'Bot token',\n minLength: 10,\n maxLength: 200,\n pattern: /^bot_[a-zA-Z0-9_-]+$/,\n patternMessage:\n 'Bot token contains invalid characters. Only alphanumeric, underscore, and dash are allowed after \"bot_\"',\n });\n if (patternError) return patternError;\n\n // Check for common copy-paste errors\n if (\n trimmed.includes(' ') ||\n trimmed.includes('\\n') ||\n trimmed.includes('\\t')\n ) {\n return 'Bot token contains whitespace characters. Please copy the token exactly as shown in DeskFree.';\n }\n\n if (trimmed === 'bot_your_token_here' || trimmed === 'bot_example') {\n return 'Please replace the placeholder with your actual bot token from DeskFree';\n }\n\n return null;\n}\n\n/**\n * Shared URL validation logic for API and WebSocket URLs.\n *\n * Parses the URL, validates the protocol against the allowed set,\n * checks hostname validity, and blocks local/private hosts in production.\n *\n * @param value - Raw config value to validate\n * @param name - Human-readable field name for error messages (e.g. \"API URL\")\n * @param allowedProtocols - Set of allowed URL protocols (e.g. `['https:']`)\n * @param protocolError - Error message when the protocol doesn't match\n * @returns Error string or null on success\n */\nfunction validateUrl(\n value: unknown,\n name: string,\n allowedProtocols: string[],\n protocolError: string,\n): string | null {\n const fieldError = validateField({ value, name });\n if (fieldError) return fieldError;\n\n const trimmed = (value as string).trim();\n\n let url: URL;\n try {\n url = new URL(trimmed);\n } catch (err) {\n const message = err instanceof Error ? err.message : 'Invalid URL format';\n return `${name} must be a valid URL: ${message}`;\n }\n\n if (!allowedProtocols.includes(url.protocol)) {\n return protocolError;\n }\n\n if (!url.hostname) {\n return `${name} must have a valid hostname`;\n }\n\n if (isLocalDevelopmentHost(url.hostname)) {\n if (process.env.NODE_ENV === 'production') {\n return `${name} cannot use localhost or private IP addresses in production. Please use a publicly accessible URL.`;\n }\n }\n\n if (url.hostname.includes('..') || url.hostname.startsWith('.')) {\n return `${name} hostname appears to be malformed. Please check for typos.`;\n }\n\n return null;\n}\n\n/**\n * Validate API URL format, protocol, and accessibility.\n *\n * Ensures the value is a valid HTTPS URL with a reachable hostname.\n * Blocks localhost and private network addresses in production.\n *\n * @param value - Raw config value to validate\n * @returns Error string or null on success\n */\nexport function validateApiUrl(value: unknown): string | null {\n return validateUrl(\n value,\n 'API URL',\n ['https:'],\n 'API URL must use HTTPS protocol for security. Make sure your DeskFree deployment supports HTTPS.',\n );\n}\n\n/**\n * Validate WebSocket URL format, protocol, and accessibility.\n *\n * Ensures the value is a valid ws:// or wss:// URL with a reachable hostname.\n * Blocks localhost and private network addresses in production.\n *\n * @param value - Raw config value to validate\n * @returns Error string or null on success\n */\nexport function validateWebSocketUrl(value: unknown): string | null {\n return validateUrl(\n value,\n 'WebSocket URL',\n ['ws:', 'wss:'],\n 'WebSocket URL must use ws:// or wss:// protocol',\n );\n}\n\n/**\n * Validate DeskFree User ID format.\n */\nexport function validateUserId(value: unknown): string | null {\n const fieldError = validateField({ value, name: 'User ID' });\n if (fieldError) return fieldError;\n\n const trimmed = (value as string).trim();\n const normalizedUserId = trimmed.toUpperCase();\n\n if (normalizedUserId !== trimmed) {\n return 'User ID should be uppercase (will be automatically converted)';\n }\n\n if (!/^[UBPT][A-Z0-9]{10}$/.test(normalizedUserId)) {\n if (normalizedUserId.length !== 11) {\n return `User ID must be exactly 11 characters long (got: ${normalizedUserId.length}). Example: U9QF3C6X1A`;\n }\n\n const prefix = normalizedUserId.charAt(0);\n if (!'UBPT'.includes(prefix)) {\n return `User ID must start with U (user), B (bot), P (project), or T (team). Got: \"${prefix}\". Check your DeskFree account settings.`;\n }\n\n if (!/^[A-Z0-9]+$/.test(normalizedUserId.slice(1))) {\n return 'User ID contains invalid characters. Only letters A-Z and numbers 0-9 are allowed after the prefix.';\n }\n\n return 'User ID must be a valid DeskFree ID format: one letter (U/B/P/T) + 10 alphanumeric characters (e.g. U9QF3C6X1A)';\n }\n\n if (\n ['U0000000000', 'B0000000000', 'P0000000000', 'T0000000000'].includes(\n normalizedUserId,\n )\n ) {\n return 'Please replace the placeholder with your actual User ID from DeskFree account settings';\n }\n\n return null;\n}\n","/**\n * Orchestrator Agent\n *\n * Top-level agent that manages workspace state, proposes plans,\n * and dispatches task execution via the deskfree_dispatch_worker\n * MCP tool (which creates long-lived workers via WorkerManager).\n *\n * Uses the Agent SDK's query() with:\n * - In-process MCP server for DeskFree orchestrator tools\n * - Session persistence for multi-turn conversations\n */\nimport { query } from '@anthropic-ai/claude-agent-sdk';\nimport type {\n McpSdkServerConfigWithInstance,\n SDKMessage,\n} from '@anthropic-ai/claude-agent-sdk';\nimport { DESKFREE_AGENT_DIRECTIVE } from '@deskfree/core';\n\n/** Maximum agentic turns for the orchestrator (one full reasoning loop). */\nconst MAX_ORCHESTRATOR_TURNS = 20;\n\n/** Built-in Claude Code tools that cannot work in a headless agent context. */\nconst DISALLOWED_BUILTIN_TOOLS = [\n 'TodoWrite',\n 'AskUserQuestion',\n 'ExitPlanMode',\n 'EnterWorktree',\n 'ListMcpResources',\n 'ReadMcpResource',\n 'TaskOutput',\n 'TaskStop',\n 'Agent',\n];\n\nexport interface OrchestratorQueryOptions {\n prompt: string;\n orchestratorServer: McpSdkServerConfigWithInstance;\n model: string;\n /** Agent SDK session ID to resume (for multi-turn conversations). */\n sessionId?: string;\n}\n\n/**\n * Run the orchestrator agent. Returns an async iterable of SDKMessage events.\n *\n * The orchestrator:\n * - Uses DeskFree orchestrator tools via MCP\n * - Dispatches workers via the deskfree_dispatch_worker MCP tool\n * - Persists sessions for multi-turn conversations\n */\nexport function runOrchestrator(\n opts: OrchestratorQueryOptions,\n): AsyncGenerator<SDKMessage, void> {\n const { prompt, orchestratorServer, model, sessionId } = opts;\n\n return query({\n prompt,\n options: {\n debug: true,\n debugFile: '/dev/stderr',\n stderr: (data: string) => {\n process.stderr.write(`[orchestrator-sdk] ${data}\\n`);\n },\n systemPrompt: DESKFREE_AGENT_DIRECTIVE,\n model,\n maxTurns: MAX_ORCHESTRATOR_TURNS,\n permissionMode: 'bypassPermissions',\n allowDangerouslySkipPermissions: true,\n includePartialMessages: true,\n persistSession: true,\n ...(sessionId ? { resume: sessionId } : {}),\n mcpServers: {\n 'deskfree-orchestrator': orchestratorServer,\n },\n tools: [],\n allowedTools: [\n 'mcp__deskfree-orchestrator__*',\n 'Read',\n 'Write',\n 'Edit',\n 'Bash',\n 'Glob',\n 'Grep',\n 'WebSearch',\n 'WebFetch',\n 'NotebookEdit',\n ],\n disallowedTools: DISALLOWED_BUILTIN_TOOLS,\n },\n });\n}\n\nexport interface HeartbeatOptions {\n prompt: string;\n orchestratorServer: McpSdkServerConfigWithInstance;\n model: string;\n}\n\n/**\n * Run a one-shot heartbeat query (no session persistence).\n */\nexport function runHeartbeat(\n opts: HeartbeatOptions,\n): AsyncGenerator<SDKMessage, void> {\n const { prompt, orchestratorServer, model } = opts;\n\n return query({\n prompt,\n options: {\n systemPrompt: DESKFREE_AGENT_DIRECTIVE,\n model,\n maxTurns: MAX_ORCHESTRATOR_TURNS,\n permissionMode: 'bypassPermissions',\n allowDangerouslySkipPermissions: true,\n persistSession: false,\n mcpServers: {\n 'deskfree-orchestrator': orchestratorServer,\n },\n tools: [],\n allowedTools: [\n 'mcp__deskfree-orchestrator__*',\n 'Read',\n 'Write',\n 'Edit',\n 'Bash',\n 'Glob',\n 'Grep',\n 'WebSearch',\n 'WebFetch',\n 'NotebookEdit',\n ],\n disallowedTools: DISALLOWED_BUILTIN_TOOLS,\n },\n });\n}\n\nexport interface OneShotWorkerOptions {\n prompt: string;\n systemPrompt: string;\n workerServer: McpSdkServerConfigWithInstance;\n model: string;\n}\n\n/**\n * Run a one-shot worker query (no session persistence).\n *\n * Generic replacement for runSleep/runDusk — any daily cycle can\n * use the full worker tool set with a cycle-specific system prompt.\n */\nexport function runOneShotWorker(\n opts: OneShotWorkerOptions,\n): AsyncGenerator<SDKMessage, void> {\n const { prompt, systemPrompt, workerServer, model } = opts;\n\n return query({\n prompt,\n options: {\n systemPrompt,\n model,\n maxTurns: MAX_ORCHESTRATOR_TURNS,\n permissionMode: 'bypassPermissions',\n allowDangerouslySkipPermissions: true,\n persistSession: false,\n mcpServers: { 'deskfree-worker': workerServer },\n tools: [],\n allowedTools: ['mcp__deskfree-worker__*'],\n disallowedTools: DISALLOWED_BUILTIN_TOOLS,\n },\n });\n}\n","import { validateApiUrl, validateBotToken } from '@deskfree/core';\nimport type { RuntimeBootstrapConfig } from '@deskfree/core';\nimport { existsSync } from 'node:fs';\n\n/**\n * Local config: values known before connecting to the API.\n * Only botToken + apiUrl are required. Everything else has sensible defaults.\n */\nexport interface LocalConfig {\n /** Bot authentication token (required) */\n botToken: string;\n /** DeskFree backend API URL (required) */\n apiUrl: string;\n /** Directory for cursor + media storage */\n stateDir: string;\n /** Directory for dynamic tool installs */\n toolsDir: string;\n /** Log level */\n logLevel: 'debug' | 'info' | 'warn' | 'error';\n /** HTTP port for health check endpoint */\n healthPort: number;\n}\n\n/**\n * Full runtime config: local config + API-bootstrapped values.\n * Built by merging LocalConfig with the config.get response.\n * Env var overrides take precedence over API values.\n */\nexport interface RuntimeConfig extends LocalConfig {\n /** DeskFree WebSocket URL */\n wsUrl: string;\n /** Model ID (Bedrock or Anthropic format) */\n model: string;\n /** AWS region for Bedrock */\n awsRegion: string;\n /** Heartbeat interval in ms (0 = disabled) */\n heartbeatIntervalMs: number;\n /** Tool packages to install */\n tools: Array<{ package: string; version: string }>;\n /** Account ID (set after first API call) */\n accountId: string;\n /** LLM provider: bedrock (default), anthropic, ollama, or claude-code */\n provider: 'bedrock' | 'anthropic' | 'ollama' | 'claude-code';\n /** Anthropic API key (only set when provider is 'anthropic') */\n anthropicApiKey?: string;\n /** Base URL for Ollama-compatible API (only set when provider is 'ollama') */\n baseUrl?: string;\n /** Bot ID for this runtime instance */\n botId: string;\n /** File ID for the bot's Memory file (null if not created yet) */\n memoryFileId: string | null;\n /** Hour of day (0-23) in local time for the nightly sleep cycle (null = disabled) */\n sleepHour: number | null;\n /** Hour of day (0-23) in local time for the evening dusk planning cycle (null = disabled) */\n duskHour: number | null;\n /** IANA timezone string (e.g. 'America/New_York') for sleep scheduling */\n timezone: string | null;\n}\n\nconst isDocker = process.env['DOCKER'] === '1' || existsSync('/.dockerenv');\n\nconst DEFAULTS = {\n stateDir: isDocker ? '/app/state' : '.deskfree/state',\n toolsDir: isDocker ? '/app/tools' : '.deskfree/tools',\n logLevel: 'info' as const,\n healthPort: 3100,\n};\n\nfunction requireEnv(key: string): string {\n const val = process.env[key];\n if (!val) {\n throw new Error(`Required environment variable ${key} is not set`);\n }\n return val;\n}\n\n/**\n * Load local config from environment variables.\n *\n * Checks DESKFREE_LAUNCH first — a base64-encoded JSON with { botToken, apiUrl }.\n * Falls back to individual env vars DESKFREE_BOT_TOKEN and DESKFREE_API_URL.\n */\nexport function loadConfig(): LocalConfig {\n let botToken: string;\n let apiUrl: string;\n\n const launch = process.env['DESKFREE_LAUNCH'];\n if (launch) {\n try {\n const decoded = JSON.parse(\n Buffer.from(launch, 'base64').toString('utf8'),\n );\n botToken = decoded.botToken;\n apiUrl = decoded.apiUrl;\n if (!botToken || !apiUrl) {\n throw new Error(\n 'Missing botToken or apiUrl in DESKFREE_LAUNCH payload',\n );\n }\n } catch (err) {\n if (err instanceof SyntaxError) {\n throw new Error('DESKFREE_LAUNCH is not valid base64-encoded JSON');\n }\n throw err;\n }\n } else {\n botToken = requireEnv('DESKFREE_BOT_TOKEN');\n apiUrl = requireEnv('DESKFREE_API_URL');\n }\n\n const tokenError = validateBotToken(botToken);\n if (tokenError !== null) {\n throw new Error(`Invalid bot token: ${tokenError}`);\n }\n\n const apiUrlError = validateApiUrl(apiUrl);\n if (apiUrlError !== null) {\n throw new Error(`Invalid API URL: ${apiUrlError}`);\n }\n\n const logLevelRaw = process.env['DESKFREE_LOG_LEVEL'] ?? DEFAULTS.logLevel;\n const validLevels = ['debug', 'info', 'warn', 'error'] as const;\n const logLevel = validLevels.includes(\n logLevelRaw as (typeof validLevels)[number],\n )\n ? (logLevelRaw as LocalConfig['logLevel'])\n : DEFAULTS.logLevel;\n\n const healthPortRaw =\n process.env['HEALTH_PORT'] ?? String(DEFAULTS.healthPort);\n const healthPort = parseInt(healthPortRaw, 10);\n if (isNaN(healthPort) || healthPort < 1 || healthPort > 65535) {\n throw new Error(`Invalid HEALTH_PORT: ${healthPortRaw}`);\n }\n\n return {\n botToken,\n apiUrl,\n stateDir: process.env['DESKFREE_STATE_DIR'] ?? DEFAULTS.stateDir,\n toolsDir: process.env['DESKFREE_TOOLS_DIR'] ?? DEFAULTS.toolsDir,\n logLevel,\n healthPort,\n };\n}\n\n/**\n * Merge local config with API-bootstrapped config.\n * Env var overrides take precedence over API values for debugging/testing.\n */\nexport function mergeWithRemoteConfig(\n local: LocalConfig,\n remote: RuntimeBootstrapConfig,\n): RuntimeConfig {\n return {\n ...local,\n wsUrl: process.env['DESKFREE_WS_URL'] ?? remote.wsUrl,\n model: process.env['DESKFREE_MODEL'] ?? remote.model,\n awsRegion: process.env['AWS_REGION'] ?? remote.awsRegion,\n heartbeatIntervalMs: process.env['DESKFREE_HEARTBEAT_INTERVAL_MS']\n ? parseInt(process.env['DESKFREE_HEARTBEAT_INTERVAL_MS'], 10)\n : remote.heartbeatIntervalMs,\n tools: remote.tools,\n accountId: 'unknown',\n provider: remote.provider,\n anthropicApiKey: remote.anthropicApiKey,\n baseUrl: process.env['DESKFREE_BASE_URL'] ?? remote.baseUrl,\n botId: remote.botId,\n memoryFileId: remote.memoryFileId,\n sleepHour: remote.sleepHour,\n duskHour: remote.duskHour,\n timezone: remote.timezone,\n };\n}\n","/**\n * Shared health state — updated by router, gateway, and entrypoint.\n * Read by the health server for the /health endpoint.\n */\nexport interface HealthState {\n wsConnected: boolean;\n lastMessageAt: string | null;\n sessionCount: number;\n toolsLoaded: number;\n uptimeSeconds: number;\n mode: 'websocket' | 'polling' | 'disconnected';\n}\n\nconst startTime = Date.now();\n\nconst state = {\n wsConnected: false,\n lastMessageAt: null as string | null,\n sessionCount: 0,\n toolsLoaded: 0,\n mode: 'disconnected' as HealthState['mode'],\n};\n\nexport function setWsConnected(connected: boolean): void {\n state.wsConnected = connected;\n if (!connected && state.mode === 'websocket') {\n state.mode = 'disconnected';\n }\n}\n\nexport function setHealthMode(mode: HealthState['mode']): void {\n state.mode = mode;\n}\n\nexport function recordMessageReceived(): void {\n state.lastMessageAt = new Date().toISOString();\n}\n\nexport function setSessionCount(count: number): void {\n state.sessionCount = count;\n}\n\nexport function setToolsLoaded(count: number): void {\n state.toolsLoaded = count;\n}\n\nexport function getHealthState(): HealthState {\n return {\n ...state,\n uptimeSeconds: Math.floor((Date.now() - startTime) / 1000),\n };\n}\n","import {\n clearCompletedTaskId,\n recordMessageDelivery,\n reportError,\n saveCursor,\n setInboundThreadId,\n} from '@deskfree/core';\nimport type { ChatMessage, DeskFreeClient, PluginLogger } from '@deskfree/core';\n\nexport interface PollResult {\n /** New cursor value after this poll, or null if unchanged. */\n cursor: string | null;\n /** Whether the poll completed without errors. */\n ok: boolean;\n}\n\n// Dedup set to prevent re-delivering messages due to cursor precision issues\n// (Postgres microsecond timestamps vs JS millisecond Date precision).\nconst deliveredMessageIds = new Set<string>();\n\n/**\n * Poll the messages endpoint and deliver new messages via the onMessage callback.\n *\n * On first run (cursor === null), seeds the cursor without delivering old messages\n * so we only process messages arriving after startup.\n *\n * @param stateDir - Directory for persisting the cursor file\n */\nexport async function pollAndDeliver(\n client: DeskFreeClient,\n accountId: string,\n stateDir: string,\n cursor: string | null,\n onMessage: (msg: ChatMessage) => Promise<void>,\n log: PluginLogger,\n): Promise<PollResult> {\n const ctx = { accountId };\n\n try {\n const isFirstRun = !cursor;\n\n const response = await client.listMessages(cursor ? { cursor } : {});\n\n // First run: seed cursor without delivering history\n if (isFirstRun) {\n const seedCursor = response.cursor ?? new Date().toISOString();\n if (response.cursor) {\n log.info(\n `First run: skipping ${response.items.length} existing message(s), seeding cursor.`,\n );\n } else {\n log.info('First run: empty inbox, seeding cursor with current time.');\n }\n saveCursor(ctx, seedCursor, stateDir, log);\n return { cursor: seedCursor, ok: true };\n }\n\n if (response.items.length === 0) {\n return { cursor: null, ok: true };\n }\n\n // Filter duplicates (cursor precision issues)\n const newItems = response.items.filter(\n (m: ChatMessage) => !deliveredMessageIds.has(m.messageId),\n );\n\n if (newItems.length === 0) {\n log.debug(\n `Poll returned ${response.items.length} item(s), all already delivered.`,\n );\n if (response.cursor) {\n saveCursor(ctx, response.cursor, stateDir, log);\n }\n return { cursor: response.cursor, ok: true };\n }\n\n log.info(\n `Received ${newItems.length} new message(s) (${response.items.length - newItems.length} duplicate(s) skipped).`,\n );\n\n let deliveredCount = 0;\n for (const message of newItems) {\n // Mark as delivered BEFORE processing to prevent concurrent polls\n // from dispatching the same message while onMessage is in-flight.\n deliveredMessageIds.add(message.messageId);\n\n // Skip bot's own messages (echo prevention)\n if (message.authorType === 'bot') {\n continue;\n }\n\n clearCompletedTaskId();\n setInboundThreadId(message.taskId ?? null);\n\n try {\n await onMessage(message);\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n log.warn(`Failed to deliver message ${message.messageId}: ${msg}`);\n reportError('error', `Message delivery failed: ${msg}`, {\n component: 'polling',\n event: 'delivery_failed',\n messageId: message.messageId,\n });\n }\n\n deliveredCount++;\n }\n\n // Cap dedup set to prevent unbounded memory growth\n if (deliveredMessageIds.size > 1000) {\n const entries = Array.from(deliveredMessageIds);\n deliveredMessageIds.clear();\n for (const id of entries.slice(-500)) {\n deliveredMessageIds.add(id);\n }\n }\n\n if (deliveredCount > 0) {\n recordMessageDelivery(accountId, deliveredCount);\n }\n\n if (response.cursor) {\n saveCursor(ctx, response.cursor, stateDir, log);\n }\n\n return { cursor: response.cursor, ok: true };\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n log.warn(`Poll failed: ${msg}`);\n reportError('warn', `Message poll failed: ${msg}`, {\n component: 'polling',\n event: 'poll_failed',\n });\n return { cursor: null, ok: false };\n }\n}\n","import { setHealthMode, setWsConnected } from '../service/health-state.js';\nimport { pollAndDeliver } from './polling.js';\nimport {\n loadCursor,\n logHealthSummary,\n recordReconnect,\n reportError,\n saveCursor,\n setActiveWs,\n updateHealthMode,\n} from '@deskfree/core';\nimport type {\n ChatMessage,\n DeskFreeClient,\n PluginLogger,\n WsNotification,\n} from '@deskfree/core';\nimport WebSocket from 'ws';\n\n// ── Constants ──────────────────────────────────────────────────────────────\n\nconst PING_INTERVAL_MS = 5 * 60 * 1000; // 5 min (API GW idle timeout = 10 min)\nconst POLL_FALLBACK_INTERVAL_MS = 30_000; // 30s fallback polling interval\nconst WS_CONNECTION_TIMEOUT_MS = 30_000; // 30s to connect\nconst WS_PONG_TIMEOUT_MS = 10_000; // 10s waiting for pong\nconst NOTIFY_DEBOUNCE_MS = 200; // batch rapid notifications\nconst HEALTH_LOG_INTERVAL_MS = 30 * 60 * 1000; // 30 min\nconst MAX_POLLING_ITERATIONS = 10; // after 10 polls (~5 min), retry WS\nconst MAX_CONSECUTIVE_POLL_FAILURES = 5;\n\nconst BACKOFF_INITIAL_MS = 2000;\nconst BACKOFF_MAX_MS = 30_000;\nconst BACKOFF_FACTOR = 1.8;\n\n// ── Backoff ────────────────────────────────────────────────────────────────\n\ninterface BackoffState {\n attempt: number;\n}\n\nfunction nextBackoff(state: BackoffState): number {\n const delay = Math.min(\n BACKOFF_INITIAL_MS * Math.pow(BACKOFF_FACTOR, state.attempt),\n BACKOFF_MAX_MS,\n );\n const jitter = delay * 0.25 * Math.random();\n state.attempt++;\n return delay + jitter;\n}\n\nfunction resetBackoff(state: BackoffState): void {\n state.attempt = 0;\n}\n\n// ── Sleep with abort ───────────────────────────────────────────────────────\n\nfunction sleepWithAbort(ms: number, signal: AbortSignal): Promise<void> {\n return new Promise((resolve) => {\n const onAbort = () => {\n clearTimeout(timer);\n resolve();\n };\n const timer = setTimeout(() => {\n signal.removeEventListener('abort', onAbort);\n resolve();\n }, ms);\n signal.addEventListener('abort', onAbort, { once: true });\n });\n}\n\n// ── Gateway Config ─────────────────────────────────────────────────────────\n\nexport interface WorkerStatus {\n activeWorkers: number;\n queuedTasks: number;\n maxConcurrency: number;\n}\n\nexport interface GatewayConfig {\n client: DeskFreeClient;\n wsUrl: string;\n accountId: string;\n stateDir: string;\n log: PluginLogger;\n abortSignal: AbortSignal;\n onMessage: (message: ChatMessage) => Promise<void>;\n getWorkerStatus?: () => WorkerStatus;\n}\n\n/**\n * Start the WS gateway — reconnection loop with backoff.\n *\n * Loop: getWsTicket() → connect → listen for notify → poll messages → deliver\n * On disconnect: backoff → reconnect\n * Fallback: interval-based polling when WS is unavailable\n */\nexport async function startGateway(config: GatewayConfig): Promise<void> {\n const { client, accountId, stateDir, log, abortSignal } = config;\n const ctx = { accountId };\n let cursor = loadCursor(ctx, stateDir);\n let totalReconnects = 0;\n const backoff: BackoffState = { attempt: 0 };\n\n // Health summary timer\n const healthInterval = setInterval(() => {\n if (!abortSignal.aborted) {\n logHealthSummary(accountId, log);\n }\n }, HEALTH_LOG_INTERVAL_MS);\n abortSignal.addEventListener('abort', () => clearInterval(healthInterval), {\n once: true,\n });\n\n while (!abortSignal.aborted) {\n try {\n const { ticket, wsUrl } = await client.getWsTicket();\n resetBackoff(backoff);\n\n if (totalReconnects > 0) {\n log.info(\n `Got WS ticket, reconnecting to ${wsUrl}... (reconnect #${totalReconnects})`,\n );\n recordReconnect(accountId);\n } else {\n log.info(`Got WS ticket, connecting to ${wsUrl}...`);\n }\n\n updateHealthMode(accountId, 'websocket');\n\n cursor = await runWebSocketConnection({\n ticket,\n wsUrl,\n client,\n accountId,\n stateDir,\n cursor,\n log,\n abortSignal,\n onMessage: config.onMessage,\n getWorkerStatus: config.getWorkerStatus,\n });\n\n totalReconnects++;\n } catch (err) {\n totalReconnects++;\n const message = err instanceof Error ? err.message : String(err);\n\n // WS ticket fetch failure — fall back to polling temporarily\n if (\n message.includes('API error') ||\n message.includes('authentication failed') ||\n message.includes('server error')\n ) {\n log.warn(\n `Ticket fetch failed (attempt #${totalReconnects}): ${message}. Falling back to polling.`,\n );\n reportError('error', `WS ticket fetch failed: ${message}`, {\n component: 'gateway',\n event: 'ticket_fetch_failed',\n attempt: totalReconnects,\n });\n recordReconnect(accountId);\n updateHealthMode(accountId, 'polling');\n cursor = await runPollingFallback({\n client,\n accountId,\n stateDir,\n cursor,\n log,\n abortSignal,\n onMessage: config.onMessage,\n });\n } else {\n log.warn(`Connection error (attempt #${totalReconnects}): ${message}`);\n reportError('warn', `WS connection error: ${message}`, {\n component: 'gateway',\n event: 'connection_error',\n attempt: totalReconnects,\n });\n recordReconnect(accountId);\n }\n\n if (abortSignal.aborted) break;\n\n const delay = nextBackoff(backoff);\n log.info(\n `Reconnecting in ${Math.round(delay / 1000)}s (attempt #${totalReconnects + 1})...`,\n );\n await sleepWithAbort(delay, abortSignal);\n }\n }\n\n log.info(`Gateway loop exited after ${totalReconnects} reconnect(s).`);\n}\n\n// ── WebSocket Connection ───────────────────────────────────────────────────\n\ninterface WsConnectionOptions {\n ticket: string;\n wsUrl: string;\n client: DeskFreeClient;\n accountId: string;\n stateDir: string;\n cursor: string | null;\n log: PluginLogger;\n abortSignal: AbortSignal;\n onMessage: (msg: ChatMessage) => Promise<void>;\n getWorkerStatus?: () => WorkerStatus;\n}\n\nasync function runWebSocketConnection(\n opts: WsConnectionOptions,\n): Promise<string | null> {\n const { ticket, wsUrl, client, accountId, stateDir, log, abortSignal } = opts;\n const ctx = { accountId };\n let cursor = opts.cursor;\n\n return new Promise<string | null>((resolve, reject) => {\n const ws = new WebSocket(`${wsUrl}?ticket=${ticket}`);\n let pingInterval: ReturnType<typeof setInterval> | undefined;\n let connectionTimer: ReturnType<typeof setTimeout> | undefined;\n let pongTimer: ReturnType<typeof setTimeout> | undefined;\n let notifyDebounceTimer: ReturnType<typeof setTimeout> | undefined;\n let isConnected = false;\n\n // Centralized cleanup — prevents timer leaks\n const cleanup = () => {\n if (pingInterval !== undefined) {\n clearInterval(pingInterval);\n pingInterval = undefined;\n }\n if (connectionTimer !== undefined) {\n clearTimeout(connectionTimer);\n connectionTimer = undefined;\n }\n if (pongTimer !== undefined) {\n clearTimeout(pongTimer);\n pongTimer = undefined;\n }\n if (notifyDebounceTimer !== undefined) {\n clearTimeout(notifyDebounceTimer);\n notifyDebounceTimer = undefined;\n }\n };\n\n // Connection timeout\n connectionTimer = setTimeout(() => {\n if (!isConnected) {\n cleanup();\n try {\n ws.close();\n } catch {\n /* ignore */\n }\n reject(\n new Error(\n `WebSocket connection timeout after ${WS_CONNECTION_TIMEOUT_MS}ms`,\n ),\n );\n }\n }, WS_CONNECTION_TIMEOUT_MS);\n\n ws.on('open', () => {\n isConnected = true;\n setActiveWs(ws);\n if (connectionTimer !== undefined) {\n clearTimeout(connectionTimer);\n connectionTimer = undefined;\n }\n\n log.info('WebSocket connected.');\n setWsConnected(true);\n setHealthMode('websocket');\n\n // Keepalive ping every 5 min\n pingInterval = setInterval(() => {\n if (ws.readyState === WebSocket.OPEN) {\n try {\n ws.send(JSON.stringify({ action: 'ping' }));\n pongTimer = setTimeout(() => {\n log.warn('Pong timeout — closing WebSocket');\n try {\n ws.close(1002, 'pong timeout');\n } catch {\n /* ignore */\n }\n }, WS_PONG_TIMEOUT_MS);\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n log.warn(`Failed to send ping: ${msg}`);\n }\n }\n }, PING_INTERVAL_MS);\n\n // Send initial heartbeat so humans see the bot as online immediately\n if (opts.getWorkerStatus) {\n try {\n const status = opts.getWorkerStatus();\n ws.send(\n JSON.stringify({\n action: 'heartbeatResponse',\n ...status,\n }),\n );\n } catch (err) {\n const errMsg = err instanceof Error ? err.message : String(err);\n log.warn(`Failed to send initial heartbeat: ${errMsg}`);\n }\n }\n\n // Initial catch-up poll\n void pollAndDeliver(\n client,\n accountId,\n stateDir,\n cursor,\n opts.onMessage,\n log,\n )\n .then((result) => {\n if (result.cursor) {\n cursor = result.cursor;\n saveCursor(ctx, cursor, stateDir, log);\n }\n })\n .catch((err) => {\n const msg = err instanceof Error ? err.message : String(err);\n log.warn(`Initial poll failed: ${msg}`);\n });\n });\n\n ws.on('message', (data) => {\n try {\n const raw = data.toString();\n\n if (!raw || raw.length > 65536) {\n if (raw && raw.length > 65536) {\n log.warn(`Ignoring oversized WS message (${raw.length} bytes)`);\n }\n return;\n }\n\n const msg = JSON.parse(raw) as WsNotification | { action: string };\n\n if (!msg || typeof msg.action !== 'string') {\n log.warn('Ignoring WS message with missing action field');\n return;\n }\n\n if (msg.action === 'notify') {\n // Debounce: batch rapid-fire notifies into one poll\n if (notifyDebounceTimer !== undefined)\n clearTimeout(notifyDebounceTimer);\n notifyDebounceTimer = setTimeout(() => {\n notifyDebounceTimer = undefined;\n void pollAndDeliver(\n client,\n accountId,\n stateDir,\n cursor,\n opts.onMessage,\n log,\n )\n .then((result) => {\n if (result.cursor) {\n cursor = result.cursor;\n saveCursor(ctx, cursor, stateDir, log);\n }\n })\n .catch((err) => {\n const errMsg = err instanceof Error ? err.message : String(err);\n log.warn(`Notify poll failed: ${errMsg}`);\n });\n }, NOTIFY_DEBOUNCE_MS);\n } else if (msg.action === 'pong') {\n if (pongTimer !== undefined) {\n clearTimeout(pongTimer);\n pongTimer = undefined;\n }\n log.debug('Received pong — connection healthy');\n } else if (msg.action === 'heartbeatRequest') {\n // Backend is requesting worker status on behalf of a human\n if (opts.getWorkerStatus && ws.readyState === WebSocket.OPEN) {\n try {\n const status = opts.getWorkerStatus();\n ws.send(\n JSON.stringify({\n action: 'heartbeatResponse',\n ...status,\n }),\n );\n } catch (err) {\n const errMsg = err instanceof Error ? err.message : String(err);\n log.warn(`Failed to send heartbeat response: ${errMsg}`);\n }\n }\n } else if (msg.action === 'reload') {\n // Hot-reload signal from backend — trigger SIGTERM to run\n // the existing signal handlers in bin.ts for proper cleanup\n log.info(\n 'Received reload signal — triggering SIGTERM for clean shutdown',\n );\n cleanup();\n ws.close(1000, 'reload');\n process.kill(process.pid, 'SIGTERM');\n }\n // Ignore other action types\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n log.warn(`Error processing WS message: ${message}`);\n }\n });\n\n ws.on('close', (code, reason) => {\n cleanup();\n isConnected = false;\n setActiveWs(null);\n setWsConnected(false);\n\n if (code === 1000 || code === 1001) {\n log.info(`WebSocket closed: ${code} ${reason.toString()}`);\n } else if (code >= 1002 && code <= 1011) {\n log.warn(`WebSocket closed with error: ${code} ${reason.toString()}`);\n reportError(\n 'error',\n `WebSocket closed with error: ${code} ${reason.toString()}`,\n {\n component: 'gateway',\n event: 'ws_close_error',\n closeCode: code,\n },\n );\n } else if (code >= 4000) {\n log.warn(`WebSocket application error: ${code} ${reason.toString()}`);\n reportError(\n 'error',\n `WebSocket application error: ${code} ${reason.toString()}`,\n {\n component: 'gateway',\n event: 'ws_close_app_error',\n closeCode: code,\n },\n );\n } else {\n log.info(`WebSocket closed: ${code} ${reason.toString()}`);\n }\n\n resolve(cursor);\n });\n\n ws.on('error', (err) => {\n cleanup();\n isConnected = false;\n setActiveWs(null);\n setWsConnected(false);\n const errorMessage = err instanceof Error ? err.message : String(err);\n log.error(`WebSocket error: ${errorMessage}`);\n reportError('error', `WebSocket error: ${errorMessage}`, {\n component: 'gateway',\n event: 'ws_error',\n });\n reject(err);\n });\n\n // Clean shutdown on abort\n abortSignal.addEventListener(\n 'abort',\n () => {\n log.info('Shutdown requested — closing WebSocket');\n cleanup();\n try {\n if (\n ws.readyState === WebSocket.OPEN ||\n ws.readyState === WebSocket.CONNECTING\n ) {\n ws.close(1000, 'shutdown');\n }\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n log.warn(`Error closing WebSocket during shutdown: ${msg}`);\n }\n },\n { once: true },\n );\n });\n}\n\n// ── Polling Fallback ───────────────────────────────────────────────────────\n\ninterface PollingFallbackOptions {\n client: DeskFreeClient;\n accountId: string;\n stateDir: string;\n cursor: string | null;\n log: PluginLogger;\n abortSignal: AbortSignal;\n onMessage: (msg: ChatMessage) => Promise<void>;\n}\n\nasync function runPollingFallback(\n opts: PollingFallbackOptions,\n): Promise<string | null> {\n const { client, accountId, stateDir, log, abortSignal } = opts;\n let cursor = opts.cursor;\n let iterations = 0;\n let consecutiveFailures = 0;\n\n log.info('Running in polling fallback mode.');\n setHealthMode('polling');\n\n while (!abortSignal.aborted && iterations < MAX_POLLING_ITERATIONS) {\n const result = await pollAndDeliver(\n client,\n accountId,\n stateDir,\n cursor,\n opts.onMessage,\n log,\n );\n\n if (result.ok) {\n if (result.cursor) cursor = result.cursor;\n consecutiveFailures = 0;\n } else {\n consecutiveFailures++;\n if (consecutiveFailures >= MAX_CONSECUTIVE_POLL_FAILURES) {\n log.warn(\n `${consecutiveFailures} consecutive poll failures, breaking to retry WebSocket`,\n );\n reportError(\n 'error',\n `${consecutiveFailures} consecutive poll failures, switching to WS retry`,\n {\n component: 'gateway',\n event: 'poll_max_failures',\n consecutiveFailures,\n },\n );\n break;\n }\n }\n\n iterations++;\n const jitter = Math.random() * POLL_FALLBACK_INTERVAL_MS * 0.2;\n await sleepWithAbort(POLL_FALLBACK_INTERVAL_MS + jitter, abortSignal);\n }\n\n return cursor;\n}\n","/**\n * MCP Tool Adapter\n *\n * Converts DeskFreeTool[] into Agent SDK tool() definitions.\n * JSON Schema parameters are converted to Zod schemas for the SDK's\n * type-safe tool() function.\n */\nimport { tool } from '@anthropic-ai/claude-agent-sdk';\nimport type { DeskFreeTool, ToolResult } from '@deskfree/core';\nimport { z } from 'zod';\nimport type { ZodType } from 'zod';\n\ntype AgentSdkTool = ReturnType<typeof tool>;\n\n/**\n * Convert a JSON Schema property definition to a Zod schema.\n *\n * Handles the subset of JSON Schema used by DeskFree tools:\n * string, number, boolean, object, array, anyOf/oneOf (unions).\n */\nfunction jsonSchemaPropertyToZod(prop: Record<string, unknown>): ZodType {\n const description =\n typeof prop['description'] === 'string' ? prop['description'] : undefined;\n\n // Handle anyOf / oneOf (union types)\n const unionVariants = (prop['anyOf'] ?? prop['oneOf']) as\n | Record<string, unknown>[]\n | undefined;\n if (Array.isArray(unionVariants) && unionVariants.length > 0) {\n if (unionVariants.length === 1) {\n const schema = jsonSchemaPropertyToZod(unionVariants[0]!);\n return description ? schema.describe(description) : schema;\n }\n const schemas = unionVariants.map((v) => jsonSchemaPropertyToZod(v)) as [\n ZodType,\n ZodType,\n ...ZodType[],\n ];\n const union = z.union(schemas);\n return description ? union.describe(description) : union;\n }\n\n const type = prop['type'] as string | undefined;\n\n switch (type) {\n case 'string': {\n // Handle enum strings (literals)\n const enumValues = prop['enum'] as string[] | undefined;\n if (enumValues && enumValues.length > 0) {\n if (enumValues.length === 1) {\n const lit = z.literal(enumValues[0]!);\n return description ? lit.describe(description) : lit;\n }\n const literals = enumValues.map((v) => z.literal(v)) as [\n z.ZodLiteral<string>,\n z.ZodLiteral<string>,\n ...z.ZodLiteral<string>[],\n ];\n const union = z.union(literals);\n return description ? union.describe(description) : union;\n }\n const str = z.string();\n return description ? str.describe(description) : str;\n }\n case 'number':\n case 'integer': {\n const num = z.number();\n return description ? num.describe(description) : num;\n }\n case 'boolean': {\n const bool = z.boolean();\n return description ? bool.describe(description) : bool;\n }\n case 'null': {\n const nil = z.null();\n return description ? nil.describe(description) : nil;\n }\n case 'array': {\n const items = prop['items'] as Record<string, unknown> | undefined;\n const itemSchema = items ? jsonSchemaPropertyToZod(items) : z.unknown();\n const arr = z.array(itemSchema);\n return description ? arr.describe(description) : arr;\n }\n case 'object': {\n const properties = prop['properties'] as\n | Record<string, Record<string, unknown>>\n | undefined;\n if (properties) {\n const shape = jsonSchemaPropertiesToZodShape(\n properties,\n (prop['required'] as string[]) ?? [],\n );\n const obj = z.object(shape);\n return description ? obj.describe(description) : obj;\n }\n // Generic object with no defined properties\n const rec = z.record(z.string(), z.unknown());\n return description ? rec.describe(description) : rec;\n }\n default: {\n // Fallback for unrecognized or missing types\n const unk = z.unknown();\n return description ? unk.describe(description) : unk;\n }\n }\n}\n\n/**\n * Convert JSON Schema `properties` + `required` into a Zod raw shape.\n */\nfunction jsonSchemaPropertiesToZodShape(\n properties: Record<string, Record<string, unknown>>,\n required: string[],\n): Record<string, ZodType> {\n const shape: Record<string, ZodType> = {};\n for (const [key, prop] of Object.entries(properties)) {\n let schema = jsonSchemaPropertyToZod(prop);\n if (!required.includes(key)) {\n schema = schema.optional();\n }\n shape[key] = schema;\n }\n return shape;\n}\n\n/**\n * Adapt a single DeskFreeTool into an Agent SDK tool() definition.\n *\n * The handler delegates to `tool.execute()` which returns a `ToolResult`\n * — this is already compatible with the MCP `CallToolResult` shape:\n * `{ content: Array<{ type: 'text', text: string }>, isError?: boolean }`\n */\nexport function adaptTool(deskfreeTool: DeskFreeTool): AgentSdkTool {\n const params = deskfreeTool.parameters;\n const properties = (params['properties'] ?? {}) as Record<\n string,\n Record<string, unknown>\n >;\n const required = (params['required'] ?? []) as string[];\n\n const zodShape = jsonSchemaPropertiesToZodShape(properties, required);\n\n return tool(\n deskfreeTool.name,\n deskfreeTool.description,\n zodShape,\n async (args) => {\n const result: ToolResult = await deskfreeTool.execute(\n args as Record<string, unknown>,\n );\n return {\n content: result.content,\n isError: result.isError,\n };\n },\n );\n}\n\n/**\n * Adapt an array of DeskFree tools into Agent SDK tool() definitions.\n */\nexport function adaptTools(tools: DeskFreeTool[]): AgentSdkTool[] {\n return tools.map(adaptTool);\n}\n","/**\n * Orchestrator MCP Server\n *\n * In-process MCP server that exposes orchestrator tools\n * (deskfree_state, deskfree_propose, deskfree_send_message, etc.)\n * plus any custom tools from the tool registry, and the\n * deskfree_dispatch_worker tool for spawning long-lived workers.\n */\nimport type { WorkerManager } from '../service/worker-manager.js';\nimport { adaptTools } from './adapt.js';\nimport { createSdkMcpServer } from '@anthropic-ai/claude-agent-sdk';\nimport { createOrchestratorTools } from '@deskfree/core';\nimport type { DeskFreeClient, DeskFreeTool } from '@deskfree/core';\n\n/**\n * Create an in-process MCP server with orchestrator tools.\n *\n * When a WorkerManager is provided, adds the deskfree_dispatch_worker\n * tool that lets the orchestrator dispatch long-lived workers for tasks.\n */\nexport function createOrchestratorMcpServer(\n client: DeskFreeClient,\n customTools: DeskFreeTool[] = [],\n workerManager?: WorkerManager,\n) {\n const coreTools = createOrchestratorTools(client);\n const allTools: DeskFreeTool[] = [...coreTools, ...customTools];\n\n if (workerManager) {\n allTools.push(createDispatchWorkerTool(workerManager));\n }\n\n const sdkTools = adaptTools(allTools);\n\n return createSdkMcpServer({\n name: 'deskfree-orchestrator',\n tools: sdkTools,\n });\n}\n\n/**\n * Create the deskfree_dispatch_worker tool.\n *\n * Dispatches a long-lived worker for a task. The worker starts a\n * query() with an async iterable channel — subsequent messages in\n * the task thread are pushed directly into the worker's channel.\n */\nfunction createDispatchWorkerTool(workerManager: WorkerManager): DeskFreeTool {\n return {\n name: 'deskfree_dispatch_worker',\n description:\n 'Dispatch a long-lived worker to claim and execute a task. ' +\n 'The worker will start, claim the task via deskfree_start_task, ' +\n 'and remain active for follow-up messages in the task thread. ' +\n 'Pass the taskId of the approved task.',\n parameters: {\n type: 'object',\n properties: {\n taskId: {\n type: 'string',\n description: 'The ID of the task to dispatch a worker for.',\n },\n },\n required: ['taskId'],\n },\n execute: async (params: Record<string, unknown>) => {\n const taskId = params['taskId'] as string;\n if (!taskId) {\n return {\n content: [\n {\n type: 'text' as const,\n text: 'Missing required parameter: taskId',\n },\n ],\n isError: true,\n };\n }\n\n const result = await workerManager.dispatch(taskId);\n\n if (result === 'already_running') {\n return {\n content: [\n {\n type: 'text' as const,\n text: `Worker already running for task ${taskId}. Messages in the task thread will be delivered to the active worker.`,\n },\n ],\n };\n }\n\n if (result === 'queued') {\n return {\n content: [\n {\n type: 'text' as const,\n text: `All worker slots are busy. Task ${taskId} has been queued and will start automatically when a slot opens.`,\n },\n ],\n };\n }\n\n return {\n content: [\n {\n type: 'text' as const,\n text: `Worker dispatched for task ${taskId}. The worker will claim the task and begin working. Follow-up messages in the task thread will be delivered to this worker.`,\n },\n ],\n };\n },\n };\n}\n","import type { PluginLogger } from '@deskfree/core';\n\n/**\n * Patterns that indicate potential prompt injection in file content.\n * Applied when the worker writes to DeskFree files via deskfree_update_file.\n */\nconst INJECTION_PATTERNS: RegExp[] = [\n // System prompt override attempts\n /\\bignore (all |previous |above )?(instructions?|prompt|context)\\b/i,\n /\\byou are now\\b/i,\n /\\bnew (system|persona|role|identity)\\b.*:/i,\n // Delimiter injection\n /<\\|.*?\\|>/,\n /\\[INST\\]|\\[\\/INST\\]/,\n /<<SYS>>|<<\\/SYS>>/,\n // Jailbreak patterns\n /\\bDAN mode\\b/i,\n /\\bjailbreak\\b/i,\n];\n\n/**\n * Scan content for prompt injection patterns.\n * Returns true if suspicious content is detected.\n */\nfunction containsInjectionPattern(content: string): boolean {\n return INJECTION_PATTERNS.some((pattern) => pattern.test(content));\n}\n\nexport interface ContentScanner {\n scan(content: string): Promise<ScanResult>;\n}\n\nexport interface ScanResult {\n safe: boolean;\n reason?: string;\n}\n\n/**\n * Default content scanner — applies heuristic injection pattern detection.\n * In production the backend may provide a more sophisticated scanner.\n */\nexport class DefaultContentScanner implements ContentScanner {\n constructor(private readonly log?: PluginLogger) {}\n\n async scan(content: string): Promise<ScanResult> {\n if (containsInjectionPattern(content)) {\n this.log?.warn(\n 'Content scanner: detected potential prompt injection pattern in content',\n );\n return {\n safe: false,\n reason: 'Content contains patterns that may indicate prompt injection',\n };\n }\n return { safe: true };\n }\n}\n\n/**\n * Wrap a tool's execute function with content scan verification.\n * Used to gate file write operations.\n *\n * @param execute - The original tool execute function\n * @param extractContent - Function to extract the text content to scan from args\n * @param scanner - ContentScanner implementation\n */\nexport function withContentScan<TArgs extends Record<string, unknown>>(\n execute: (args: TArgs) => Promise<unknown>,\n extractContent: (args: TArgs) => string | null | undefined,\n scanner: ContentScanner,\n): (args: TArgs) => Promise<unknown> {\n return async (args: TArgs) => {\n const content = extractContent(args);\n if (content) {\n const result = await scanner.scan(content);\n if (!result.safe) {\n return `Security check failed: ${result.reason ?? 'content rejected'}. File not updated.`;\n }\n }\n return execute(args);\n };\n}\n\n// ── SSRF Protection ───────────────────────────────────────────────────────\n\n/**\n * Block list of private/reserved IP patterns for SSRF protection.\n */\nconst PRIVATE_IPV4_PATTERNS: RegExp[] = [\n /^10\\./, // 10.0.0.0/8\n /^192\\.168\\./, // 192.168.0.0/16\n /^172\\.(1[6-9]|2[0-9]|3[0-1])\\./, // 172.16.0.0/12\n /^169\\.254\\./, // Link-local 169.254.0.0/16\n /^0\\./, // Current network\n /^127\\./, // Loopback\n];\n\nconst PRIVATE_IPV6_PATTERNS: RegExp[] = [\n /^fe80:/i, // Link-local fe80::/10\n /^fc00:/i, // Unique Local Address fc00::/7\n /^fd/i, // Unique Local Address fd00::/8\n /^::$/i, // Unspecified address ::\n /^::ffff:/i, // IPv4-mapped IPv6\n /^100::/i, // Discard prefix\n /^2001:db8:/i, // Documentation\n /^ff0[0-9a-f]:/i, // Multicast\n];\n\n/**\n * Validate a URL is safe to fetch (HTTPS only, no private IPs).\n * Throws an error with a descriptive message if validation fails.\n */\nexport function validateDownloadUrl(url: string): void {\n if (url.length > 2048) {\n throw new Error('URL too long (max 2048 characters)');\n }\n\n let parsed: URL;\n try {\n parsed = new URL(url);\n } catch {\n throw new Error('Invalid URL format');\n }\n\n if (parsed.protocol !== 'https:') {\n throw new Error('Only HTTPS URLs are allowed');\n }\n\n const hostname = parsed.hostname.toLowerCase();\n const bareHostname = hostname.replace(/^\\[|\\]$/g, ''); // Strip IPv6 brackets\n\n if (\n bareHostname === 'localhost' ||\n bareHostname === '127.0.0.1' ||\n bareHostname === '::1'\n ) {\n throw new Error('Local URLs are not allowed');\n }\n\n for (const pattern of PRIVATE_IPV4_PATTERNS) {\n if (pattern.test(hostname)) {\n throw new Error('Private IP addresses are not allowed');\n }\n }\n\n for (const pattern of PRIVATE_IPV6_PATTERNS) {\n if (pattern.test(bareHostname)) {\n throw new Error('Private IPv6 addresses are not allowed');\n }\n }\n}\n\n// ── Allowed content types for attachment downloads ─────────────────────────\n\nconst ALLOWED_CONTENT_TYPE_PREFIXES = [\n 'image/',\n 'video/',\n 'audio/',\n 'application/pdf',\n 'text/',\n 'application/json',\n 'application/xml',\n 'application/zip',\n 'application/x-zip-compressed',\n 'application/gzip',\n 'application/msword',\n 'application/vnd.openxmlformats-officedocument',\n 'application/vnd.ms-excel',\n 'application/vnd.ms-powerpoint',\n];\n\n/**\n * Check whether a content type is allowed for attachment downloads.\n */\nexport function isContentTypeAllowed(contentType: string): boolean {\n const normalized = contentType.toLowerCase().split(';')[0]?.trim() ?? '';\n return ALLOWED_CONTENT_TYPE_PREFIXES.some((prefix) =>\n normalized.startsWith(prefix),\n );\n}\n\n/**\n * Sanitize a filename to prevent directory traversal and injection.\n */\nexport function sanitizeFileName(fileName: string): string {\n return fileName\n .replace(/[^a-zA-Z0-9._-]/g, '_')\n .replace(/\\.+/g, '.')\n .replace(/^\\./, '_')\n .substring(0, 100);\n}\n","/**\n * Worker MCP Server\n *\n * In-process MCP server that exposes worker tools\n * (deskfree_start_task, deskfree_update_file, deskfree_complete_task, etc.)\n * plus any custom tools from the tool registry.\n *\n * The deskfree_update_file tool is wrapped with prompt injection scanning\n * when a ContentScanner is provided.\n */\nimport type { DailyLogManager } from '../memory/daily-log.js';\nimport { withContentScan } from '../tools/security.js';\nimport type { ContentScanner } from '../tools/security.js';\nimport { adaptTools } from './adapt.js';\nimport { createSdkMcpServer } from '@anthropic-ai/claude-agent-sdk';\nimport { createWorkerTools } from '@deskfree/core';\nimport type { DeskFreeClient, DeskFreeTool, ToolResult } from '@deskfree/core';\n\n/**\n * Create an in-process MCP server with worker tools.\n *\n * If a ContentScanner is provided, the deskfree_update_file tool's execute\n * function is wrapped to scan file content for prompt injection before\n * allowing the write.\n */\nexport function createWorkerMcpServer(\n client: DeskFreeClient,\n customTools: DeskFreeTool[] = [],\n contentScanner?: ContentScanner,\n dailyLog?: DailyLogManager,\n) {\n const coreTools = createWorkerTools(client, {\n onLearning: dailyLog\n ? (content: string, taskId?: string) => {\n dailyLog.appendLearning(content, taskId).catch(() => {});\n }\n : undefined,\n });\n\n // Wrap file-writing tools with content scan if scanner is provided\n const wrappedTools = coreTools.map((t: DeskFreeTool): DeskFreeTool => {\n if (\n (t.name === 'deskfree_update_file' ||\n t.name === 'deskfree_create_file') &&\n contentScanner\n ) {\n const wrappedExecute = withContentScan(\n t.execute,\n (args) =>\n typeof args['content'] === 'string' ? args['content'] : null,\n contentScanner,\n );\n return {\n ...t,\n execute: wrappedExecute as (\n params: Record<string, unknown>,\n ) => Promise<ToolResult>,\n };\n }\n return t;\n });\n\n const allTools = [...wrappedTools, ...customTools];\n const sdkTools = adaptTools(allTools);\n\n return createSdkMcpServer({\n name: 'deskfree-worker',\n tools: sdkTools,\n });\n}\n","import { existsSync, mkdirSync, readdirSync, unlinkSync } from 'node:fs';\nimport { appendFile, readFile } from 'node:fs/promises';\nimport { join } from 'node:path';\n\n/**\n * Manages daily log files for memory observations.\n *\n * Logs are stored at `{stateDir}/memory/{botId}/daily/YYYY-MM-DD.md`.\n * Each entry is a single line: `- [ISO timestamp] (task: {taskId}) {content}`\n *\n * Appends are atomic via O_APPEND flag (safe for writes <4KB on Linux).\n */\nexport class DailyLogManager {\n private readonly dailyDir: string;\n\n constructor(stateDir: string, botId: string) {\n this.dailyDir = join(stateDir, 'memory', botId, 'daily');\n }\n\n /** Ensure the daily log directory exists. */\n init(): void {\n mkdirSync(this.dailyDir, { recursive: true });\n }\n\n /** Append a learning entry to today's log file. */\n async appendLearning(content: string, taskId?: string): Promise<void> {\n const filePath = this.todayPath();\n const timestamp = new Date().toISOString();\n const taskRef = taskId ? ` (task: ${taskId})` : '';\n const line = `- [${timestamp}]${taskRef} ${content}\\n`;\n await appendFile(filePath, line, { flag: 'a' });\n }\n\n /** Read today's daily log, or null if it doesn't exist. */\n async readToday(): Promise<string | null> {\n const filePath = this.todayPath();\n if (!existsSync(filePath)) return null;\n const content = await readFile(filePath, 'utf-8');\n return content.trim() || null;\n }\n\n /** Read all daily logs, concatenated with date headers. */\n async readAllLogs(): Promise<string | null> {\n if (!existsSync(this.dailyDir)) return null;\n\n const files = readdirSync(this.dailyDir)\n .filter((f) => f.endsWith('.md'))\n .sort(); // chronological order\n\n if (files.length === 0) return null;\n\n const sections: string[] = [];\n for (const file of files) {\n const date = file.replace('.md', '');\n const content = await readFile(join(this.dailyDir, file), 'utf-8');\n if (content.trim()) {\n sections.push(`### ${date}\\n${content.trim()}`);\n }\n }\n\n return sections.length > 0 ? sections.join('\\n\\n') : null;\n }\n\n /**\n * Read recent daily logs up to a character budget (newest first).\n * Returns as many days as fit. Quiet week → 14 days. Busy day → just today.\n */\n async readRecentWithBudget(maxChars: number): Promise<string | null> {\n if (!existsSync(this.dailyDir)) return null;\n\n const files = readdirSync(this.dailyDir)\n .filter((f) => f.endsWith('.md'))\n .sort()\n .reverse(); // newest first\n\n if (files.length === 0) return null;\n\n const sections: string[] = [];\n let totalChars = 0;\n\n for (const file of files) {\n const date = file.replace('.md', '');\n const content = await readFile(join(this.dailyDir, file), 'utf-8');\n const trimmed = content.trim();\n if (!trimmed) continue;\n\n const section = `### ${date}\\n${trimmed}`;\n if (totalChars + section.length > maxChars && sections.length > 0) break;\n\n sections.push(section);\n totalChars += section.length;\n }\n\n // Reverse back to chronological order for readability\n sections.reverse();\n return sections.length > 0 ? sections.join('\\n\\n') : null;\n }\n\n /** Delete daily log files older than the given number of days. */\n pruneOlderThan(days: number): void {\n if (!existsSync(this.dailyDir)) return;\n\n const cutoff = new Date();\n cutoff.setDate(cutoff.getDate() - days);\n const cutoffStr = formatDate(cutoff);\n\n const files = readdirSync(this.dailyDir).filter((f) => f.endsWith('.md'));\n for (const file of files) {\n const date = file.replace('.md', '');\n if (date < cutoffStr) {\n unlinkSync(join(this.dailyDir, file));\n }\n }\n }\n\n private todayPath(): string {\n return join(this.dailyDir, `${formatDate(new Date())}.md`);\n }\n}\n\nfunction formatDate(d: Date): string {\n return d.toISOString().slice(0, 10);\n}\n","import type { PluginLogger } from '@deskfree/core';\n\n/**\n * Schedule a daily cycle (sleep, dusk, etc.) using recursive setTimeout.\n * Same pattern as the heartbeat scheduler in entrypoint.ts.\n *\n * @param label - Human-readable label for logging (e.g. 'Sleep', 'Dusk')\n * @param run - The async function to execute each cycle\n * @param hour - Target hour in local time (0-23)\n * @param timezone - IANA timezone string (e.g. 'America/New_York')\n * @param signal - AbortSignal for clean shutdown\n * @param log - Logger instance\n */\nexport function scheduleDailyCycle(\n label: string,\n run: () => Promise<void>,\n hour: number,\n timezone: string,\n signal: AbortSignal,\n log: PluginLogger,\n): void {\n let running = false;\n\n async function tick(): Promise<void> {\n if (running || signal.aborted) return;\n running = true;\n try {\n log.info(`${label} cycle: starting...`);\n await run();\n log.info(`${label} cycle: complete`);\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n log.warn(`${label} cycle failed: ${msg}`);\n } finally {\n running = false;\n if (!signal.aborted) {\n const delayMs = msUntilNextLocalHour(hour, timezone);\n log.info(\n `${label} cycle: next run in ${Math.round(delayMs / 1000 / 60)} minutes`,\n );\n setTimeout(() => void tick(), delayMs);\n }\n }\n }\n\n const delayMs = msUntilNextLocalHour(hour, timezone);\n log.info(\n `${label} cycle scheduled for ${hour}:00 ${timezone} (first run in ${Math.round(delayMs / 1000 / 60)} minutes)`,\n );\n setTimeout(() => void tick(), delayMs);\n}\n\n/**\n * Calculate milliseconds until the next occurrence of the target local hour\n * in the given timezone. Handles DST spring-forward and fall-back correctly\n * by scanning forward hour-by-hour using Intl.DateTimeFormat.\n */\nfunction msUntilNextLocalHour(hour: number, timezone: string): number {\n const now = Date.now();\n const fmt = new Intl.DateTimeFormat('en-US', {\n timeZone: timezone,\n hour: 'numeric',\n hour12: false,\n });\n\n // Scan forward up to 25 hours (handles DST transitions)\n for (let offsetMs = 60_000; offsetMs <= 25 * 3600_000; offsetMs += 3600_000) {\n const candidateMs = now + offsetMs;\n const parts = fmt.formatToParts(new Date(candidateMs));\n const hourPart = parts.find((p) => p.type === 'hour');\n const candidateHour = parseInt(hourPart?.value ?? '-1', 10);\n\n if (candidateHour === hour) {\n // Snap to the top of the hour\n const candidate = new Date(candidateMs);\n candidate.setUTCMinutes(0, 0, 0);\n // Adjust: the snapped time might be slightly before the actual\n // top-of-hour in the target timezone, so re-verify\n const snappedMs = candidate.getTime();\n return Math.max(snappedMs - now, 60_000); // minimum 1 minute\n }\n }\n\n // Fallback: shouldn't happen, but schedule for ~24h\n return 24 * 3600_000;\n}\n","import type { DeskFreeTool } from '@deskfree/core';\nimport type { PluginLogger } from '@deskfree/core';\nimport { execFile } from 'node:child_process';\nimport { existsSync, mkdirSync, writeFileSync } from 'node:fs';\nimport { join } from 'node:path';\n\nexport interface ToolPackageConfig {\n package: string;\n version: string;\n}\n\n/**\n * Install tool packages into an isolated directory.\n * Creates a minimal package.json and runs `bun install`.\n *\n * Tool packages are pre-bundled single files with zero deps —\n * install is fast (~2-5s for a handful of tools).\n *\n * Security: only @deskfree/tool-* packages are allowed.\n */\nexport async function installTools(\n tools: ToolPackageConfig[],\n toolsDir: string,\n log?: PluginLogger,\n): Promise<void> {\n if (tools.length === 0) return;\n\n mkdirSync(toolsDir, { recursive: true });\n\n const deps: Record<string, string> = {};\n for (const t of tools) {\n // Allowlist: only @deskfree/tool-* packages\n if (!t.package.startsWith('@deskfree/tool-')) {\n throw new Error(\n `Invalid tool package: \"${t.package}\" — must start with @deskfree/tool-`,\n );\n }\n deps[t.package] = t.version;\n }\n\n const pkgJson = JSON.stringify(\n { name: 'deskfree-tools', private: true, dependencies: deps },\n null,\n 2,\n );\n writeFileSync(join(toolsDir, 'package.json'), pkgJson);\n\n log?.info(\n `Installing tool packages into ${toolsDir}: ${Object.keys(deps).join(', ')}`,\n );\n\n // Install tool packages in the isolated directory.\n await new Promise<void>((resolve, reject) => {\n const child = execFile(\n 'npm',\n ['install', '--omit=dev'],\n { cwd: toolsDir, timeout: 60_000 },\n (error, _stdout, stderr) => {\n if (error) {\n reject(\n new Error(\n `npm install failed: ${error.message}${stderr ? `\\n${stderr}` : ''}`,\n ),\n );\n } else {\n resolve();\n }\n },\n );\n child.unref();\n });\n\n log?.info(`Tool packages installed successfully.`);\n}\n\n/**\n * Load installed tool packages and extract DeskFreeTool definitions.\n *\n * Each @deskfree/tool-* package must export one of:\n * export const tools: DeskFreeTool[]\n * export function createTools(): DeskFreeTool[]\n */\nexport async function loadToolModules(\n tools: ToolPackageConfig[],\n toolsDir: string,\n log?: PluginLogger,\n): Promise<DeskFreeTool[]> {\n if (tools.length === 0) return [];\n\n const allTools: DeskFreeTool[] = [];\n\n for (const t of tools) {\n const modulePath = join(toolsDir, 'node_modules', t.package);\n\n if (!existsSync(modulePath)) {\n log?.warn(\n `Tool package ${t.package} not found at ${modulePath}, skipping.`,\n );\n continue;\n }\n\n try {\n // Dynamic import of the installed package\n const mod = (await import(/* @vite-ignore */ modulePath)) as Record<\n string,\n unknown\n >;\n\n if (typeof mod['createTools'] === 'function') {\n const created = (mod['createTools'] as () => DeskFreeTool[])();\n allTools.push(...created);\n log?.info(\n `Loaded ${created.length} tool(s) from ${t.package} (createTools)`,\n );\n } else if (Array.isArray(mod['tools'])) {\n const toolList = mod['tools'] as DeskFreeTool[];\n allTools.push(...toolList);\n log?.info(\n `Loaded ${toolList.length} tool(s) from ${t.package} (tools export)`,\n );\n } else {\n log?.warn(\n `Package ${t.package} does not export \"tools: DeskFreeTool[]\" or \"createTools(): DeskFreeTool[]\" — skipping.`,\n );\n }\n } catch (err) {\n // Non-fatal — broken tool packages should not crash the runtime\n const msg = err instanceof Error ? err.message : String(err);\n log?.warn(`Failed to load tool package ${t.package}: ${msg}`);\n }\n }\n\n return allTools;\n}\n","import type { PluginLogger } from '@deskfree/core';\n\nexport type LogLevel = 'debug' | 'info' | 'warn' | 'error';\n\nconst LEVELS: Record<LogLevel, number> = {\n debug: 0,\n info: 1,\n warn: 2,\n error: 3,\n};\n\n/**\n * Structured JSON logger that satisfies the PluginLogger interface.\n * Writes newline-delimited JSON to stdout/stderr.\n *\n * Supports optional structured fields that are merged into the JSON entry:\n * log.info('message routed', { sessionKey: 'dm:abc', target: 'orchestrator' })\n */\nexport function createLogger(\n component: string,\n minLevel: LogLevel = 'info',\n): PluginLogger {\n const minLevelNum = LEVELS[minLevel];\n\n function log(\n level: LogLevel,\n message: string,\n fields?: Record<string, unknown>,\n ): void {\n if (LEVELS[level] < minLevelNum) return;\n const entry: Record<string, unknown> = {\n ts: new Date().toISOString(),\n level,\n component,\n msg: message,\n ...fields,\n };\n const line = JSON.stringify(entry);\n if (level === 'error' || level === 'warn') {\n process.stderr.write(line + '\\n');\n } else {\n process.stdout.write(line + '\\n');\n }\n }\n\n return {\n debug: (msg: string, fields?: Record<string, unknown>) =>\n log('debug', msg, fields),\n info: (msg: string, fields?: Record<string, unknown>) =>\n log('info', msg, fields),\n warn: (msg: string, fields?: Record<string, unknown>) =>\n log('warn', msg, fields),\n error: (msg: string, fields?: Record<string, unknown>) =>\n log('error', msg, fields),\n };\n}\n\n/** Default logger for the root process. */\nexport const logger = createLogger('runtime');\n","import { runOrchestrator } from '../agents/orchestrator.js';\nimport {\n isContentTypeAllowed,\n sanitizeFileName,\n validateDownloadUrl,\n} from '../tools/security.js';\nimport type { SessionStore } from './sessions.js';\nimport type { WorkerManager } from './worker-manager.js';\nimport type { McpSdkServerConfigWithInstance } from '@anthropic-ai/claude-agent-sdk';\nimport type { SDKMessage } from '@anthropic-ai/claude-agent-sdk';\nimport {\n clearCompletedTaskId,\n DeskFreeStreamingSession,\n getActiveTaskId,\n reportError,\n sendWsStreamChunk,\n sendWsThinking,\n setInboundThreadId,\n} from '@deskfree/core';\nimport type {\n ChatMessage,\n ChatMessageAttachment,\n DeskFreeClient,\n PluginLogger,\n TaskSummary,\n} from '@deskfree/core';\nimport { randomUUID } from 'node:crypto';\nimport { createWriteStream } from 'node:fs';\nimport { mkdir, unlink } from 'node:fs/promises';\nimport { dirname, extname } from 'node:path';\nimport { join } from 'node:path';\nimport { Readable } from 'node:stream';\nimport { pipeline } from 'node:stream/promises';\n\n// ── Constants ─────────────────────────────────────────────────────────────\n\nconst MAX_MESSAGE_CONTENT_LENGTH = 32 * 1024; // 32KB\nconst MAX_ATTACHMENT_SIZE = 10 * 1024 * 1024; // 10MB per file\nconst MAX_TOTAL_DOWNLOAD_SIZE = 50 * 1024 * 1024; // 50MB per message\nconst MAX_ATTACHMENTS_PER_MESSAGE = 10;\nconst DOWNLOAD_TIMEOUT_MS = 30_000; // 30s\n\n// Per-user rate limiting: 10 messages per minute sliding window\nconst RATE_LIMIT_WINDOW_MS = 60_000;\nconst RATE_LIMIT_MAX_MESSAGES = 10;\n\n// ── Rate Limiter ─────────────────────────────────────────────────────────\n\ninterface RateLimitEntry {\n count: number;\n windowStart: number;\n}\n\nconst rateLimitMap = new Map<string, RateLimitEntry>();\n\n// Periodic cleanup of stale rate limit entries to prevent unbounded growth.\n// Runs every 60s, .unref() so it doesn't prevent process exit.\nconst _rateLimitCleanupTimer = setInterval(() => {\n const now = Date.now();\n for (const [key, entry] of rateLimitMap) {\n if (now - entry.windowStart >= RATE_LIMIT_WINDOW_MS) {\n rateLimitMap.delete(key);\n }\n }\n}, 60_000);\n_rateLimitCleanupTimer.unref();\n\nfunction checkRateLimit(userId: string): boolean {\n const now = Date.now();\n const entry = rateLimitMap.get(userId);\n\n if (!entry || now - entry.windowStart >= RATE_LIMIT_WINDOW_MS) {\n rateLimitMap.set(userId, { count: 1, windowStart: now });\n return true;\n }\n\n if (entry.count >= RATE_LIMIT_MAX_MESSAGES) {\n return false;\n }\n\n entry.count++;\n return true;\n}\n\n// ── Message Validation ────────────────────────────────────────────────────\n\nfunction validateInboundMessage(msg: ChatMessage): void {\n if (!msg.messageId || !msg.humanId) {\n throw new Error(\n 'Malformed message — missing required fields (messageId, humanId)',\n );\n }\n // Truncate oversized content\n if (msg.content.length > MAX_MESSAGE_CONTENT_LENGTH) {\n msg.content =\n msg.content.slice(0, MAX_MESSAGE_CONTENT_LENGTH) + '…[truncated]';\n }\n}\n\n// ── Attachment Download ────────────────────────────────────────────────────\n\nasync function downloadAttachment(\n attachment: ChatMessageAttachment,\n stateDir: string,\n log: PluginLogger,\n): Promise<string | null> {\n if (!attachment.url || !attachment.name || !attachment.contentType) {\n log.warn('Skipping attachment: missing url, name, or contentType');\n return null;\n }\n\n try {\n validateDownloadUrl(attachment.url);\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n log.warn(`Skipping attachment ${attachment.name}: invalid URL — ${msg}`);\n return null;\n }\n\n if (!isContentTypeAllowed(attachment.contentType)) {\n log.warn(\n `Skipping attachment ${attachment.name}: content type not allowed — ${attachment.contentType}`,\n );\n return null;\n }\n\n if (attachment.size > MAX_ATTACHMENT_SIZE) {\n log.warn(\n `Skipping attachment ${attachment.name}: too large (${attachment.size} bytes)`,\n );\n return null;\n }\n\n const sanitized = sanitizeFileName(attachment.name);\n if (\n sanitized.includes('..') ||\n sanitized.includes('/') ||\n sanitized.includes('\\\\')\n ) {\n log.warn(`Skipping attachment ${attachment.name}: invalid filename`);\n return null;\n }\n\n const hasExt = extname(sanitized).length > 0;\n const fileName = hasExt\n ? `${randomUUID()}_${sanitized}`\n : `${randomUUID()}_${sanitized}${extname(attachment.name) || '.bin'}`;\n\n const filePath = join(stateDir, 'media', 'inbound', fileName);\n await mkdir(dirname(filePath), { recursive: true });\n\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), DOWNLOAD_TIMEOUT_MS);\n let fileStream: ReturnType<typeof createWriteStream> | null = null;\n\n try {\n const response = await fetch(attachment.url, {\n signal: controller.signal,\n headers: { 'User-Agent': 'DeskFree-Runtime/0.1' },\n });\n\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n }\n\n if (!response.body) {\n throw new Error('Empty response body');\n }\n\n const responseContentType = response.headers.get('content-type');\n if (responseContentType && !isContentTypeAllowed(responseContentType)) {\n throw new Error(\n `Response content type not allowed: ${responseContentType}`,\n );\n }\n\n const contentLength = response.headers.get('content-length');\n if (contentLength) {\n const size = parseInt(contentLength, 10);\n if (size > MAX_ATTACHMENT_SIZE) {\n throw new Error(`Content-Length too large: ${size} bytes`);\n }\n }\n\n const nodeStream = Readable.fromWeb(response.body as never);\n fileStream = createWriteStream(filePath);\n\n let bytesWritten = 0;\n nodeStream.on('data', (chunk: Buffer) => {\n bytesWritten += chunk.length;\n if (bytesWritten > MAX_ATTACHMENT_SIZE) {\n nodeStream.destroy(\n new Error('File size limit exceeded during download'),\n );\n }\n });\n\n await pipeline(nodeStream, fileStream);\n return filePath;\n } catch (err) {\n if (fileStream && !fileStream.destroyed) fileStream.destroy();\n try {\n await unlink(filePath);\n } catch {\n /* ignore */\n }\n const msg = err instanceof Error ? err.message : String(err);\n log.warn(`Failed to download attachment ${attachment.name}: ${msg}`);\n return null;\n } finally {\n clearTimeout(timeout);\n if (fileStream && !fileStream.destroyed) fileStream.destroy();\n }\n}\n\n// ── Task Routing ──────────────────────────────────────────────────────────\n\ntype RoutingTarget = 'runner' | 'orchestrator' | 'auto-reopen';\n\nfunction resolveTaskRouting(\n task: TaskSummary,\n hasAttachments: boolean,\n): RoutingTarget {\n if (task.status === 'open') return 'runner';\n if (hasAttachments && task.status === 'done') return 'auto-reopen';\n return 'orchestrator';\n}\n\n// ── Context Builder ───────────────────────────────────────────────────────\n\nconst MAX_INSTRUCTIONS_LENGTH = 500;\n\nfunction truncateAtWord(text: string, maxLen: number): string {\n if (text.length <= maxLen) return text;\n const truncated = text.slice(0, maxLen);\n const lastSpace = truncated.lastIndexOf(' ');\n return (lastSpace > 0 ? truncated.slice(0, lastSpace) : truncated) + '…';\n}\n\nfunction buildContextualPrompt(\n message: ChatMessage,\n task: TaskSummary | null,\n): string {\n if (!task) {\n return `<user_message>${message.content}</user_message>`;\n }\n\n let context = `[Task thread: \"${task.title}\" | taskId: ${task.taskId} | status: ${task.status}]`;\n if (task.instructions) {\n context +=\n '\\n<task_instructions>' +\n truncateAtWord(task.instructions, MAX_INSTRUCTIONS_LENGTH) +\n '</task_instructions>';\n }\n return context + '\\n\\n<user_message>' + message.content + '</user_message>';\n}\n\n// ── SDKMessage Text Extraction ────────────────────────────────────────────\n\n/**\n * Extract text delta from a streaming SDKMessage event.\n *\n * Agent SDK emits several message types. For streaming text to the user,\n * we care about:\n * - stream_event: partial assistant messages with content_block_delta\n * - assistant: complete assistant messages (extract full text)\n * - result: final result with session_id\n */\nfunction extractTextDelta(message: SDKMessage): string | null {\n // Partial streaming events (when includePartialMessages is true)\n if (message.type === 'stream_event') {\n const event = (message as Record<string, unknown>)['event'] as\n | Record<string, unknown>\n | undefined;\n if (!event) return null;\n\n // content_block_delta with text_delta\n if (event['type'] === 'content_block_delta') {\n const delta = event['delta'] as Record<string, unknown> | undefined;\n if (\n delta?.['type'] === 'text_delta' &&\n typeof delta['text'] === 'string'\n ) {\n return delta['text'];\n }\n }\n return null;\n }\n return null;\n}\n\n/**\n * Extract the session ID from an SDKMessage.\n */\nfunction extractSessionId(message: SDKMessage): string | null {\n if (\n message.type === 'system' &&\n (message as Record<string, unknown>)['subtype'] === 'init'\n ) {\n return (\n ((message as Record<string, unknown>)['session_id'] as string) ?? null\n );\n }\n if (message.type === 'result') {\n return (\n ((message as Record<string, unknown>)['session_id'] as string) ?? null\n );\n }\n return null;\n}\n\n// ── Main Router ───────────────────────────────────────────────────────────\n\nexport interface RouterConfig {\n stateDir: string;\n log: PluginLogger;\n}\n\nexport interface RouterDeps {\n createOrchestratorServer: () => McpSdkServerConfigWithInstance;\n workerManager: WorkerManager;\n model: string;\n}\n\n/**\n * Route an inbound ChatMessage to the appropriate agent.\n *\n * Routing rules:\n * - Bot messages are skipped (echo prevention)\n * - Rate-limited users get a polite rejection\n * - Task thread messages with active worker → worker agent\n * - Task thread messages without active worker → orchestrator\n * - DM messages → orchestrator\n * - Auto-reopen: attachments on done tasks trigger reopenTask\n */\nexport async function routeMessage(\n message: ChatMessage,\n client: DeskFreeClient,\n deps: RouterDeps,\n sessionStore: SessionStore,\n config: RouterConfig,\n): Promise<void> {\n const { stateDir, log } = config;\n\n // Skip bot's own messages (echo prevention)\n if (message.authorType === 'bot') {\n log.debug(`Skipping bot message ${message.messageId}`);\n return;\n }\n\n // Per-user rate limiting\n if (!checkRateLimit(message.humanId)) {\n log.warn(\n `Rate limit exceeded for user ${message.humanId}, dropping message ${message.messageId}`,\n );\n try {\n await client.sendMessage({\n content:\n \"I'm receiving messages too quickly. Please wait a moment before sending more.\",\n taskId: message.taskId ?? undefined,\n });\n } catch {\n /* best effort */\n }\n return;\n }\n\n // Validate and sanitize\n try {\n validateInboundMessage(message);\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n log.warn(`Dropping malformed message ${message.messageId}: ${msg}`);\n return;\n }\n\n // Update task threading state for reply routing\n clearCompletedTaskId();\n setInboundThreadId(message.taskId ?? null);\n\n log.info(`Routing message`, {\n messageId: message.messageId,\n from: message.userName ?? message.humanId,\n taskId: message.taskId ?? undefined,\n contentPreview: message.content.slice(0, 80),\n });\n\n // ── Download attachments ───────────────────────────────────────────────\n const attachments = message.attachments ?? [];\n const totalSize = attachments\n .slice(0, MAX_ATTACHMENTS_PER_MESSAGE)\n .reduce((sum: number, att: { size?: number }) => sum + (att.size || 0), 0);\n\n if (totalSize > MAX_TOTAL_DOWNLOAD_SIZE) {\n log.warn(\n `Total attachment size ${totalSize} exceeds ${MAX_TOTAL_DOWNLOAD_SIZE} limit`,\n );\n }\n\n const mediaPaths: string[] = [];\n for (const [i, att] of attachments\n .slice(0, MAX_ATTACHMENTS_PER_MESSAGE)\n .entries()) {\n const path = await downloadAttachment(att, stateDir, log);\n if (path) {\n mediaPaths.push(path);\n } else {\n log.debug(`Attachment ${i} (${att.name}) skipped`);\n }\n }\n\n // ── Fetch task context and determine routing ───────────────────────────\n let task: TaskSummary | null = null;\n let routingTarget: RoutingTarget = 'orchestrator';\n\n if (message.taskId) {\n try {\n task = await client.getTask({ taskId: message.taskId });\n routingTarget = resolveTaskRouting(task, mediaPaths.length > 0);\n\n if (routingTarget === 'auto-reopen') {\n log.info(\n `Auto-reopening task ${message.taskId} (attachment on ${task.status} task)`,\n );\n try {\n await client.reopenTask({\n taskId: message.taskId,\n reason: 'Human sent an attachment — reopening for further work',\n });\n routingTarget = 'orchestrator';\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n log.warn(`Failed to auto-reopen task ${message.taskId}: ${msg}`);\n routingTarget = 'orchestrator';\n }\n }\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n log.warn(`Failed to fetch task context for ${message.taskId}: ${msg}`);\n // Non-fatal — deliver without task context\n }\n }\n\n // ── Build contextual prompt ────────────────────────────────────────────\n const prompt = buildContextualPrompt(message, task);\n\n // ── Send thinking signal ───────────────────────────────────────────────\n const replyTaskId = message.taskId ?? getActiveTaskId() ?? undefined;\n sendWsThinking(replyTaskId);\n\n // ── Route to worker (task thread) ──────────────────────────────────────\n if (routingTarget === 'runner' && message.taskId) {\n const { workerManager } = deps;\n\n if (workerManager.has(message.taskId)) {\n // Active worker exists — push message into its channel\n workerManager.pushMessage(message.taskId, prompt);\n log.info(`Pushed message to active worker for task ${message.taskId}`);\n } else {\n // No active worker — dispatch with raw user content (dispatch handles claim + context)\n const result = await workerManager.dispatch(\n message.taskId,\n message.content,\n );\n log.info(`Worker dispatch for task ${message.taskId}: ${result}`);\n }\n return;\n }\n\n // ── Route to orchestrator (DM or non-runner task thread) ───────────────\n const peerId = message.humanId.toLowerCase().trim();\n const sessionKey = `dm:${peerId}`;\n\n log.info(`Dispatching to orchestrator`, { sessionKey });\n\n const existingSessionId = sessionStore.getSessionId(sessionKey);\n\n // ── Streaming session for progressive replies ──────────────────────────\n let streamingSession = new DeskFreeStreamingSession(\n client,\n log,\n sendWsStreamChunk,\n );\n let streamStarted = false;\n\n try {\n const queryResult = runOrchestrator({\n prompt,\n orchestratorServer: deps.createOrchestratorServer(),\n model: deps.model,\n sessionId: existingSessionId,\n });\n\n let fullText = '';\n let capturedSessionId: string | null = null;\n\n // Process SDKMessage events\n for await (const message of queryResult) {\n // Capture session ID from init or result\n const sid = extractSessionId(message);\n if (sid) {\n capturedSessionId = sid;\n }\n\n // Extract streaming text deltas\n const delta = extractTextDelta(message);\n if (delta) {\n fullText += delta;\n if (!streamStarted) {\n await streamingSession.start(fullText, replyTaskId);\n streamStarted = true;\n } else {\n await streamingSession.update(fullText);\n }\n }\n\n // Assistant message = turn boundary (agent finished one response)\n if (message.type === 'assistant') {\n if (streamStarted && streamingSession.isActive()) {\n // Close current streaming message before tools run or next turn starts\n await streamingSession.close(fullText || undefined);\n streamStarted = false;\n fullText = '';\n streamingSession = new DeskFreeStreamingSession(\n client,\n log,\n sendWsStreamChunk,\n );\n } else if (!streamStarted) {\n // Non-streaming fallback: extract full text from complete assistant messages\n const assistantMsg = message as Record<string, unknown>;\n const betaMessage = assistantMsg['message'] as\n | Record<string, unknown>\n | undefined;\n if (betaMessage) {\n const content = betaMessage['content'] as\n | Array<Record<string, unknown>>\n | undefined;\n if (content) {\n for (const block of content) {\n if (\n block['type'] === 'text' &&\n typeof block['text'] === 'string'\n ) {\n fullText += block['text'];\n }\n }\n }\n }\n }\n }\n }\n\n // Close streaming session\n if (streamStarted && streamingSession.isActive()) {\n await streamingSession.close(fullText || undefined);\n } else if (!streamStarted && fullText) {\n await client.sendMessage({ content: fullText, taskId: replyTaskId });\n }\n\n // Store session ID for resume\n if (capturedSessionId) {\n sessionStore.setSessionId(sessionKey, capturedSessionId);\n }\n\n log.info(`Message handled successfully.`);\n } catch (err) {\n // Best-effort: close any open streaming session\n if (streamStarted && streamingSession.isActive()) {\n try {\n await streamingSession.close(undefined);\n } catch {\n /* ignore */\n }\n }\n\n const errMsg = err instanceof Error ? err.message : String(err);\n const errStderr = (err as Record<string, unknown>)?.['stderr'] ?? '';\n log.warn(`Failed to handle message: ${errMsg}`, {\n stderr: errStderr ? String(errStderr).slice(0, 2000) : undefined,\n exitCode: (err as Record<string, unknown>)?.['exit_code'],\n });\n reportError('error', `Message routing failed: ${errMsg}`, {\n component: 'router',\n event: 'route_failed',\n messageId: message.messageId,\n });\n\n // Notify user of failure\n try {\n await client.sendMessage({\n content:\n 'Sorry, I encountered an error processing your message. Please try again.',\n taskId: replyTaskId,\n });\n } catch {\n /* best effort */\n }\n }\n}\n","/**\n * Session Store — maps DeskFree session keys to Agent SDK session IDs.\n *\n * Session keys:\n * dm:<peerId> — DM messages routed to orchestrator\n * task:<taskId> — Task thread messages routed to worker\n *\n * The Agent SDK handles conversation history internally via session\n * persistence. We only need to track the mapping from our session keys\n * to the Agent SDK session IDs.\n *\n * Why in-memory is fine:\n * - Container restarts are clean — agents re-claim context from backend\n * - Session ID mapping is a performance optimization, not state of record\n * - Backend stores all messages persistently\n */\n\nexport interface SessionEntry {\n /** Agent SDK session ID for resuming conversations. */\n agentSessionId: string;\n /** Timestamp of last activity (for TTL eviction). */\n lastActivityAt: number;\n}\n\nexport class SessionStore {\n private readonly sessions = new Map<string, SessionEntry>();\n private cleanupTimer: ReturnType<typeof setInterval>;\n\n constructor(\n private readonly staleTtlMs = 30 * 60 * 1000, // 30 min TTL\n private readonly maxSessions = 200, // LRU cap\n ) {\n // Run cleanup every minute; unref so it doesn't prevent process exit\n this.cleanupTimer = setInterval(() => this.cleanup(), 60_000);\n this.cleanupTimer.unref();\n }\n\n /**\n * Get the Agent SDK session ID for a given key.\n * Returns undefined if no session exists or it has expired.\n */\n getSessionId(key: string): string | undefined {\n const entry = this.sessions.get(key);\n if (!entry) return undefined;\n entry.lastActivityAt = Date.now();\n return entry.agentSessionId;\n }\n\n /**\n * Store an Agent SDK session ID for a given key.\n */\n setSessionId(key: string, agentSessionId: string): void {\n if (this.sessions.size >= this.maxSessions && !this.sessions.has(key)) {\n this.evictOldest();\n }\n this.sessions.set(key, {\n agentSessionId,\n lastActivityAt: Date.now(),\n });\n }\n\n /** Delete a specific session. */\n delete(key: string): void {\n this.sessions.delete(key);\n }\n\n /** Number of active sessions. */\n get size(): number {\n return this.sessions.size;\n }\n\n /** Remove sessions that haven't been active within the TTL. */\n private cleanup(): void {\n const now = Date.now();\n for (const [key, entry] of this.sessions) {\n if (now - entry.lastActivityAt > this.staleTtlMs) {\n this.sessions.delete(key);\n }\n }\n }\n\n /** Evict the session with the oldest lastActivityAt. */\n private evictOldest(): void {\n let oldestKey: string | undefined;\n let oldestTime = Infinity;\n for (const [key, entry] of this.sessions) {\n if (entry.lastActivityAt < oldestTime) {\n oldestTime = entry.lastActivityAt;\n oldestKey = key;\n }\n }\n if (oldestKey) {\n this.sessions.delete(oldestKey);\n }\n }\n\n /** Dispose — clear the cleanup timer. */\n dispose(): void {\n clearInterval(this.cleanupTimer);\n this.sessions.clear();\n }\n}\n","/**\n * Worker Agent\n *\n * Sub-agent for direct task execution. Used when the router\n * routes a message to the 'runner' target (task thread with\n * an open task).\n *\n * Uses the Agent SDK's query() with:\n * - In-process MCP server for DeskFree worker tools\n * - Session persistence for multi-turn task conversations\n * - String prompt (one-shot) or AsyncIterable (long-lived channel)\n */\nimport { query } from '@anthropic-ai/claude-agent-sdk';\nimport type {\n McpSdkServerConfigWithInstance,\n Query,\n SDKUserMessage,\n} from '@anthropic-ai/claude-agent-sdk';\nimport { DESKFREE_WORKER_DIRECTIVE } from '@deskfree/core';\n\n/** Maximum agentic turns for a worker agent (one task execution). */\nconst MAX_WORKER_TURNS = 30;\n\n/** Built-in Claude Code tools that cannot work in a headless agent context. */\nconst DISALLOWED_BUILTIN_TOOLS = [\n 'TodoWrite',\n 'AskUserQuestion',\n 'ExitPlanMode',\n 'EnterWorktree',\n 'ListMcpResources',\n 'ReadMcpResource',\n];\n\nexport interface WorkerQueryOptions {\n prompt: string | AsyncIterable<SDKUserMessage>;\n workerServer: McpSdkServerConfigWithInstance;\n model: string;\n /** Agent SDK session ID to resume (for multi-turn task conversations). */\n sessionId?: string;\n}\n\n/**\n * Run the worker agent directly. Returns a Query (async iterable of\n * SDKMessage events with a .close() method for teardown).\n *\n * Used for task thread messages where the router routes to 'runner'.\n * The worker:\n * - Claims a task and loads its context\n * - Executes work (update files, steps, send messages)\n * - Completes the task\n */\nexport function runWorker(opts: WorkerQueryOptions): Query {\n const { prompt, workerServer, model, sessionId } = opts;\n\n return query({\n prompt,\n options: {\n debug: true,\n debugFile: '/dev/stderr',\n stderr: (data: string) => {\n process.stderr.write(`[worker-sdk] ${data}\\n`);\n },\n systemPrompt: DESKFREE_WORKER_DIRECTIVE,\n model,\n maxTurns: MAX_WORKER_TURNS,\n permissionMode: 'bypassPermissions',\n allowDangerouslySkipPermissions: true,\n includePartialMessages: true,\n persistSession: true,\n ...(sessionId ? { resume: sessionId } : {}),\n mcpServers: {\n 'deskfree-worker': workerServer,\n },\n allowedTools: [\n 'mcp__deskfree-worker__*',\n 'Read',\n 'Write',\n 'Edit',\n 'Bash',\n 'Glob',\n 'Grep',\n 'WebSearch',\n 'WebFetch',\n 'NotebookEdit',\n 'Agent',\n 'TaskOutput',\n 'TaskStop',\n ],\n disallowedTools: DISALLOWED_BUILTIN_TOOLS,\n },\n });\n}\n","/**\n * MessageChannel — async generator with push/resolve pattern.\n *\n * Allows pushing messages into a channel that an async iterator\n * (the SDK's query() input) consumes on demand. When no message\n * is buffered, the iterator awaits until one is pushed.\n */\nimport type { SDKUserMessage } from '@anthropic-ai/claude-agent-sdk';\n\nexport class MessageChannel {\n private buffer: SDKUserMessage[] = [];\n private waiter: ((msg: SDKUserMessage | null) => void) | null = null;\n private closed = false;\n\n /** Push a message into the channel. Resolves a pending waiter or enqueues. */\n push(msg: SDKUserMessage): void {\n if (this.closed) return;\n if (this.waiter) {\n const resolve = this.waiter;\n this.waiter = null;\n resolve(msg);\n } else {\n this.buffer.push(msg);\n }\n }\n\n /** Signal end-of-stream. The iterator will finish after draining the buffer. */\n close(): void {\n this.closed = true;\n if (this.waiter) {\n const resolve = this.waiter;\n this.waiter = null;\n resolve(null);\n }\n }\n\n async *[Symbol.asyncIterator](): AsyncGenerator<SDKUserMessage, void> {\n while (true) {\n if (this.buffer.length > 0) {\n yield this.buffer.shift()!;\n continue;\n }\n if (this.closed) return;\n const msg = await new Promise<SDKUserMessage | null>((resolve) => {\n if (this.closed) {\n resolve(null);\n return;\n }\n this.waiter = resolve;\n });\n if (msg === null) return;\n yield msg;\n }\n }\n}\n","/**\n * WorkerManager — lifecycle manager for long-lived worker query() instances.\n *\n * Each dispatched worker gets a MessageChannel that feeds messages into\n * the SDK's query() as an AsyncIterable<SDKUserMessage>. A background\n * drain loop processes the query output (text deltas, session IDs, results)\n * and streams them back to DeskFree via DeskFreeStreamingSession.\n *\n * Workers are kept alive until:\n * - The channel is closed (explicitly or via idle timeout)\n * - The drain loop completes (query finishes)\n * - An error occurs\n */\nimport { runWorker } from '../agents/worker.js';\nimport type { DailyLogManager } from '../memory/daily-log.js';\nimport { MessageChannel } from './channel.js';\nimport type {\n McpSdkServerConfigWithInstance,\n Query,\n SDKMessage,\n SDKResultMessage,\n SDKUserMessage,\n} from '@anthropic-ai/claude-agent-sdk';\nimport {\n DeskFreeStreamingSession,\n sendWsStreamChunk,\n setInboundThreadId,\n trimTaskContext,\n} from '@deskfree/core';\nimport type { DeskFreeClient, PluginLogger } from '@deskfree/core';\nimport { readFileSync, writeFileSync } from 'node:fs';\n\n/** 10-minute idle timeout before tearing down a worker. */\nconst IDLE_TIMEOUT_MS = 10 * 60 * 1000;\n\n/** Default max concurrent workers if not configured. */\nconst DEFAULT_MAX_CONCURRENT_WORKERS = 5;\n\n// ── SDKMessage helpers (duplicated from router.ts to keep self-contained) ──\n\nfunction extractTextDelta(message: SDKMessage): string | null {\n if (message.type === 'stream_event') {\n const event = (message as Record<string, unknown>)['event'] as\n | Record<string, unknown>\n | undefined;\n if (!event) return null;\n if (event['type'] === 'content_block_delta') {\n const delta = event['delta'] as Record<string, unknown> | undefined;\n if (\n delta?.['type'] === 'text_delta' &&\n typeof delta['text'] === 'string'\n ) {\n return delta['text'];\n }\n }\n }\n return null;\n}\n\nfunction extractSessionId(message: SDKMessage): string | null {\n if (\n message.type === 'system' &&\n (message as Record<string, unknown>)['subtype'] === 'init'\n ) {\n return (\n ((message as Record<string, unknown>)['session_id'] as string) ?? null\n );\n }\n if (message.type === 'result') {\n return (\n ((message as Record<string, unknown>)['session_id'] as string) ?? null\n );\n }\n return null;\n}\n\n// ── Types ──────────────────────────────────────────────────────────────────\n\ninterface WorkerHandle {\n taskId: string;\n channel: MessageChannel;\n queryInstance: Query;\n sessionId: string | undefined;\n idleTimer: ReturnType<typeof setTimeout>;\n drainPromise: Promise<void>;\n}\n\nexport interface WorkerManagerDeps {\n client: DeskFreeClient;\n createWorkerServer: () => McpSdkServerConfigWithInstance;\n model: string;\n log: PluginLogger;\n /** Max concurrent workers. Defaults to 5. */\n maxConcurrentWorkers?: number;\n /** DailyLogManager for injecting recent observations into worker context. */\n dailyLog?: DailyLogManager;\n /** Character budget for daily log injection (~4 chars/token). Defaults to 16000. */\n dailyLogCharBudget?: number;\n /** Path to persist session history JSON (taskId → sessionId). */\n sessionHistoryPath?: string;\n}\n\n// ── WorkerManager ──────────────────────────────────────────────────────────\n\nexport class WorkerManager {\n private workers = new Map<string, WorkerHandle>();\n /** Persists taskId → sessionId across worker restarts for session resume. */\n private sessionHistory = new Map<string, string>();\n private pendingQueue = new Map<string, string | undefined>();\n private deps: WorkerManagerDeps;\n private maxConcurrent: number;\n\n constructor(deps: WorkerManagerDeps) {\n this.deps = deps;\n this.maxConcurrent =\n deps.maxConcurrentWorkers ?? DEFAULT_MAX_CONCURRENT_WORKERS;\n this.loadSessionHistory();\n }\n\n /** Check if a worker is currently active for a task. */\n has(taskId: string): boolean {\n return this.workers.has(taskId);\n }\n\n /**\n * Dispatch a new long-lived worker for a task.\n * Claims the task and loads workspace state server-side, then builds\n * an enriched first message so the worker can start immediately.\n *\n * If at capacity, queues the dispatch and notifies the user.\n * If a worker already exists for this taskId, returns 'already_running'.\n */\n async dispatch(\n taskId: string,\n userMessage?: string,\n ): Promise<'started' | 'already_running' | 'queued'> {\n if (this.workers.has(taskId)) {\n return 'already_running';\n }\n\n // At capacity — queue for later (latest message per task wins)\n if (this.workers.size >= this.maxConcurrent) {\n this.pendingQueue.set(taskId, userMessage);\n this.deps.log.info(\n `Worker queue full (${this.workers.size}/${this.maxConcurrent}), queued task ${taskId} (queue size: ${this.pendingQueue.size})`,\n );\n\n // Notify user so they're not staring at silence\n try {\n await this.deps.client.sendMessage({\n content:\n \"I'm working on other tasks right now — I'll get to this shortly.\",\n taskId,\n });\n } catch {\n /* best effort */\n }\n\n return 'queued';\n }\n\n await this.startWorker(taskId, userMessage);\n return 'started';\n }\n\n /** Number of active workers. */\n get activeCount(): number {\n return this.workers.size;\n }\n\n /** Number of queued dispatches waiting for a slot. */\n get queuedCount(): number {\n return this.pendingQueue.size;\n }\n\n /** Maximum number of concurrent workers allowed. */\n get maxConcurrentWorkers(): number {\n return this.maxConcurrent;\n }\n\n /**\n * Push a message into an active worker's channel.\n * Resets the idle timer.\n */\n pushMessage(taskId: string, content: string): void {\n const handle = this.workers.get(taskId);\n if (!handle) {\n this.deps.log.warn(`pushMessage called for unknown worker: ${taskId}`);\n return;\n }\n\n // Reset idle timer\n clearTimeout(handle.idleTimer);\n handle.idleTimer = this.startIdleTimer(taskId);\n\n handle.channel.push(this.buildUserMessage(content, taskId));\n this.deps.log.info(`Message pushed to worker for task ${taskId}`);\n }\n\n /** Tear down a specific worker. */\n teardown(taskId: string): void {\n const handle = this.workers.get(taskId);\n if (!handle) return;\n\n clearTimeout(handle.idleTimer);\n if (handle.sessionId) {\n this.sessionHistory.set(taskId, handle.sessionId);\n this.saveSessionHistory();\n }\n handle.channel.close();\n handle.queryInstance.close();\n this.workers.delete(taskId);\n this.deps.log.info(`Worker torn down for task ${taskId}`);\n }\n\n /** Tear down all active workers and clear the queue (shutdown hook). */\n teardownAll(): void {\n this.pendingQueue.clear();\n for (const taskId of [...this.workers.keys()]) {\n try {\n this.teardown(taskId);\n } catch (err) {\n this.deps.log.warn(`Failed to teardown worker for task ${taskId}`, {\n error: err,\n });\n }\n }\n }\n\n // ── Private ────────────────────────────────────────────────────────────\n\n /** Core worker startup logic (no capacity check — callers must check first). */\n private async startWorker(\n taskId: string,\n userMessage?: string,\n ): Promise<void> {\n const { client, createWorkerServer, model, log } = this.deps;\n\n // Check for a previous session to resume\n const previousSessionId = this.sessionHistory.get(taskId);\n let enrichedPrompt: string | undefined;\n\n if (previousSessionId) {\n // Resume — re-claim (best effort) and pass only the new message.\n // The old session already has workspace state, task context, and file contents.\n log.info(\n `Resuming previous session for task ${taskId} (session: ${previousSessionId})`,\n );\n try {\n await client.claimTask({ taskId });\n } catch {\n /* best effort — task is already claimed from original run */\n }\n enrichedPrompt =\n userMessage ?? 'Continue working on this task — check for updates.';\n } else {\n // Fresh start — full enriched context\n try {\n const [claimResult, stateResult] = await Promise.all([\n client.claimTask({ taskId }),\n client.getState(),\n ]);\n\n const trimmedContext = trimTaskContext(claimResult);\n\n // Fetch input files to embed as context\n const inputFileIds = (claimResult.inputFileIds ?? []) as string[];\n let inputFilesContent: Array<{\n fileId: string;\n name: string;\n content: string;\n }> = [];\n if (inputFileIds.length > 0) {\n const results = await Promise.allSettled(\n inputFileIds.map((fid) => client.getFile({ fileId: fid })),\n );\n inputFilesContent = results\n .filter(\n (\n r,\n ): r is PromiseFulfilledResult<{\n fileId: string;\n name: string;\n description: string;\n content: string;\n contentFormat: string;\n version: number;\n }> => r.status === 'fulfilled',\n )\n .map((r) => ({\n fileId: r.value.fileId,\n name: r.value.name,\n content: r.value.content,\n }));\n }\n\n const sections: string[] = [\n `<workspace_state>\\n${JSON.stringify(stateResult, null, 2)}\\n</workspace_state>`,\n `<task_context>\\n${JSON.stringify(trimmedContext, null, 2)}\\n</task_context>`,\n ];\n\n if (inputFilesContent.length > 0) {\n sections.push(\n `<input_files>\\n${JSON.stringify(inputFilesContent, null, 2)}\\n</input_files>`,\n );\n }\n\n if (this.deps.dailyLog) {\n const recentLog = await this.deps.dailyLog.readRecentWithBudget(\n this.deps.dailyLogCharBudget ?? 16_000,\n );\n if (recentLog) {\n sections.push(\n `<daily_observations>\\nRecent observations (not yet consolidated into Memory):\\n${recentLog}\\n</daily_observations>`,\n );\n }\n }\n\n if (userMessage) {\n sections.push(`<user_message>\\n${userMessage}\\n</user_message>`);\n }\n\n enrichedPrompt = sections.join('\\n\\n');\n log.info(`Server-side claim + state loaded for task ${taskId}`);\n } catch (err) {\n const errMsg = err instanceof Error ? err.message : String(err);\n log.warn(\n `Server-side claim failed for task ${taskId}: ${errMsg} — falling back to user prompt`,\n );\n enrichedPrompt = userMessage;\n }\n }\n\n const channel = new MessageChannel();\n const workerServer = createWorkerServer();\n\n if (enrichedPrompt) {\n channel.push(this.buildUserMessage(enrichedPrompt, taskId));\n }\n\n const queryInstance = runWorker({\n prompt: channel,\n workerServer,\n model,\n sessionId: previousSessionId,\n });\n\n const idleTimer = this.startIdleTimer(taskId);\n\n const drainPromise = this.drainLoop(\n taskId,\n queryInstance,\n log,\n client,\n model,\n );\n\n const handle: WorkerHandle = {\n taskId,\n channel,\n queryInstance,\n sessionId: undefined,\n idleTimer,\n drainPromise,\n };\n this.workers.set(taskId, handle);\n\n log.info(\n `Worker dispatched for task ${taskId} (${this.workers.size}/${this.maxConcurrent})`,\n );\n }\n\n /** Drain the pending queue — called when a worker finishes. */\n private drainQueue(): void {\n if (this.pendingQueue.size === 0) return;\n if (this.workers.size >= this.maxConcurrent) return;\n\n // FIFO: Map preserves insertion order\n const [taskId, userMessage] = this.pendingQueue.entries().next().value!;\n this.pendingQueue.delete(taskId);\n\n this.deps.log.info(\n `Draining queue: dispatching task ${taskId} (remaining: ${this.pendingQueue.size})`,\n );\n\n // Fire and forget — startWorker handles its own errors\n this.startWorker(taskId, userMessage).catch((err) => {\n const errMsg = err instanceof Error ? err.message : String(err);\n this.deps.log.warn(`Failed to dispatch queued task ${taskId}: ${errMsg}`);\n });\n }\n\n private startIdleTimer(taskId: string): ReturnType<typeof setTimeout> {\n return setTimeout(() => {\n this.deps.log.info(\n `Worker idle timeout for task ${taskId}, tearing down`,\n );\n const handle = this.workers.get(taskId);\n if (handle) {\n handle.channel.close();\n // Drain loop will detect completion and clean up\n }\n }, IDLE_TIMEOUT_MS);\n }\n\n /**\n * Background drain loop — processes query output and streams it back\n * to DeskFree via DeskFreeStreamingSession.\n */\n private async drainLoop(\n taskId: string,\n queryInstance: Query,\n log: PluginLogger,\n client: DeskFreeClient,\n _model: string,\n ): Promise<void> {\n // Each response turn gets a fresh streaming session because\n // DeskFreeStreamingSession is single-use (messageId persists after close).\n let streamingSession = new DeskFreeStreamingSession(\n client,\n log,\n sendWsStreamChunk,\n );\n let streamStarted = false;\n let fullText = '';\n\n try {\n for await (const message of queryInstance) {\n // Capture session ID\n const sid = extractSessionId(message);\n if (sid) {\n const handle = this.workers.get(taskId);\n if (handle) handle.sessionId = sid;\n }\n\n // Extract streaming text deltas\n const delta = extractTextDelta(message);\n if (delta) {\n fullText += delta;\n if (!streamStarted) {\n // Set inbound thread so replies go to the right task\n setInboundThreadId(taskId);\n await streamingSession.start(fullText, taskId);\n streamStarted = true;\n } else {\n await streamingSession.update(fullText);\n }\n }\n\n // On result message, close current streaming session and reset for next turn\n if (message.type === 'result') {\n if (streamStarted && streamingSession.isActive()) {\n await streamingSession.close(fullText || undefined);\n }\n\n // Report usage/cost — fire-and-forget, must never crash the worker\n const result = message as SDKResultMessage;\n if (result.total_cost_usd > 0) {\n try {\n await client.reportUsage({\n taskId,\n estimatedCost: result.total_cost_usd,\n });\n } catch {\n log.warn(`Failed to report usage for task ${taskId}`);\n }\n }\n\n // Reset for next turn — fresh session instance\n streamStarted = false;\n fullText = '';\n streamingSession = new DeskFreeStreamingSession(\n client,\n log,\n sendWsStreamChunk,\n );\n }\n\n // Assistant message = turn boundary (agent finished one response)\n if (message.type === 'assistant') {\n if (streamStarted && streamingSession.isActive()) {\n // Close current streaming message before tools run or next turn starts\n await streamingSession.close(fullText || undefined);\n streamStarted = false;\n fullText = '';\n streamingSession = new DeskFreeStreamingSession(\n client,\n log,\n sendWsStreamChunk,\n );\n } else if (!streamStarted) {\n // Non-streaming fallback: extract full text from complete assistant messages\n const assistantMsg = message as Record<string, unknown>;\n const betaMessage = assistantMsg['message'] as\n | Record<string, unknown>\n | undefined;\n if (betaMessage) {\n const content = betaMessage['content'] as\n | Array<Record<string, unknown>>\n | undefined;\n if (content) {\n for (const block of content) {\n if (\n block['type'] === 'text' &&\n typeof block['text'] === 'string'\n ) {\n fullText += block['text'];\n }\n }\n }\n }\n }\n }\n }\n\n // Iterator completed — close any remaining streaming session\n if (streamStarted && streamingSession.isActive()) {\n await streamingSession.close(fullText || undefined);\n }\n } catch (err) {\n // Close streaming session on error\n if (streamStarted && streamingSession.isActive()) {\n try {\n await streamingSession.close(undefined);\n } catch {\n /* ignore */\n }\n }\n\n const errMsg = err instanceof Error ? err.message : String(err);\n log.warn(`Worker drain loop error for task ${taskId}: ${errMsg}`);\n\n // Notify user of failure\n try {\n await client.sendMessage({\n content:\n 'Sorry, I encountered an error while working on this task. Please try again.',\n taskId,\n });\n } catch {\n /* best effort */\n }\n } finally {\n // Stash session ID for resume, then cleanup handle\n const handle = this.workers.get(taskId);\n if (handle) {\n clearTimeout(handle.idleTimer);\n if (handle.sessionId) {\n this.sessionHistory.set(taskId, handle.sessionId);\n this.saveSessionHistory();\n }\n this.workers.delete(taskId);\n }\n log.info(`Worker drain loop ended for task ${taskId}`);\n\n // Dispatch next queued worker if a slot is now free\n this.drainQueue();\n }\n }\n\n /** Load session history from disk (best-effort). */\n private loadSessionHistory(): void {\n const path = this.deps.sessionHistoryPath;\n if (!path) return;\n try {\n const data = JSON.parse(readFileSync(path, 'utf-8')) as Record<\n string,\n string\n >;\n for (const [taskId, sessionId] of Object.entries(data)) {\n this.sessionHistory.set(taskId, sessionId);\n }\n this.deps.log.info(\n `Loaded ${this.sessionHistory.size} session(s) from disk`,\n );\n } catch {\n /* file missing or corrupt — start fresh */\n }\n }\n\n /** Persist session history to disk (best-effort). */\n private saveSessionHistory(): void {\n const path = this.deps.sessionHistoryPath;\n if (!path) return;\n try {\n writeFileSync(\n path,\n JSON.stringify(Object.fromEntries(this.sessionHistory)),\n );\n } catch {\n /* best effort — non-critical */\n }\n }\n\n /** Build an SDKUserMessage from plain text content. */\n private buildUserMessage(content: string, _taskId: string): SDKUserMessage {\n return {\n type: 'user',\n message: {\n role: 'user',\n content,\n },\n parent_tool_use_id: null,\n session_id: '',\n };\n }\n}\n","import { runHeartbeat, runOneShotWorker } from '../agents/orchestrator.js';\nimport { loadConfig, mergeWithRemoteConfig } from '../config.js';\nimport type { RuntimeConfig } from '../config.js';\nimport { startGateway } from '../gateway/ws-gateway.js';\nimport { createOrchestratorMcpServer } from '../mcp/orchestrator-server.js';\nimport { createWorkerMcpServer } from '../mcp/worker-server.js';\nimport { DailyLogManager } from '../memory/daily-log.js';\nimport { scheduleDailyCycle } from '../memory/sleep-scheduler.js';\nimport { installTools, loadToolModules } from '../tools/registry.js';\nimport { DefaultContentScanner } from '../tools/security.js';\nimport { createLogger } from '../util/logger.js';\nimport {\n getHealthState,\n recordMessageReceived,\n setSessionCount,\n setToolsLoaded,\n} from './health-state.js';\nimport { routeMessage } from './router.js';\nimport { SessionStore } from './sessions.js';\nimport { WorkerManager } from './worker-manager.js';\nimport {\n DESKFREE_DUSK_DIRECTIVE,\n DESKFREE_HEARTBEAT_DIRECTIVE,\n DESKFREE_SLEEP_DIRECTIVE,\n DeskFreeClient,\n initErrorReporter,\n initializeHealth,\n} from '@deskfree/core';\nimport type { PluginLogger } from '@deskfree/core';\nimport { mkdirSync } from 'node:fs';\nimport { createServer } from 'node:http';\nimport { join } from 'node:path';\n\n// ── Health Server ──────────────────────────────────────────────────────────\n\ninterface HealthServer {\n close(): void;\n}\n\nfunction startHealthServer(port: number, log: PluginLogger): HealthServer {\n const server = createServer((req, res) => {\n if (req.url === '/health' && req.method === 'GET') {\n const health = getHealthState();\n res.writeHead(200, { 'Content-Type': 'application/json' });\n res.end(\n JSON.stringify({\n status: 'ok',\n ts: new Date().toISOString(),\n ...health,\n }),\n );\n } else {\n res.writeHead(404);\n res.end();\n }\n });\n\n server.listen(port, () => {\n log.info(`Health server listening on port ${port}`);\n });\n\n server.on('error', (err) => {\n log.warn(`Health server error: ${err.message}`);\n });\n\n return {\n close() {\n server.close();\n },\n };\n}\n\n// ── Heartbeat Loop ─────────────────────────────────────────────────────────\n\nfunction scheduleHeartbeat(\n createOrchServer: () => ReturnType<typeof createOrchestratorMcpServer>,\n model: string,\n intervalMs: number,\n signal: AbortSignal,\n log: PluginLogger,\n): void {\n if (intervalMs <= 0) return;\n\n let running = false;\n\n async function tick(): Promise<void> {\n if (running || signal.aborted) return;\n running = true;\n try {\n log.debug('Heartbeat tick: checking for pending work...');\n const result = runHeartbeat({\n prompt: DESKFREE_HEARTBEAT_DIRECTIVE,\n orchestratorServer: createOrchServer(),\n model,\n });\n // Drain stream to completion\n for await (const _ of result) {\n /* consume */\n }\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n log.warn(`Heartbeat failed: ${msg}`);\n } finally {\n running = false;\n if (!signal.aborted) {\n setTimeout(() => void tick(), intervalMs);\n }\n }\n }\n\n setTimeout(() => void tick(), intervalMs);\n log.info(`Heartbeat scheduled every ${Math.round(intervalMs / 1000)}s`);\n}\n\n// ── Main Entrypoint ────────────────────────────────────────────────────────\n\nexport interface StartAgentOptions {\n log?: PluginLogger;\n}\n\n/** Dispose function returned by startAgent — call to shut down cleanly. */\nexport type DisposeAgent = () => void;\n\n/**\n * Full agent startup sequence:\n *\n * 1. Load local config (token + apiUrl from env)\n * 2. Create DeskFree client\n * 3. Bootstrap: fetch config from API (wsUrl, model, region, tools)\n * 4. Install enabled tool packages\n * 5. Configure Agent SDK env vars (Bedrock, region, model)\n * 6. Create MCP servers\n * 7. Start health server + WS gateway + heartbeat\n */\nexport async function startAgent(\n opts?: StartAgentOptions,\n): Promise<DisposeAgent> {\n const localConfig = loadConfig();\n const log = opts?.log ?? createLogger('agent', localConfig.logLevel);\n const abortController = new AbortController();\n\n log.info('DeskFree Agent Runtime starting...');\n\n // Ensure state + tools directories exist\n mkdirSync(localConfig.stateDir, { recursive: true });\n mkdirSync(localConfig.toolsDir, { recursive: true });\n\n // ── 1. Create DeskFree client ────────────────────────────────────────────\n const client = new DeskFreeClient(localConfig.botToken, localConfig.apiUrl);\n\n // ── 2. Initialize error reporter ─────────────────────────────────────────\n const errorReporter = initErrorReporter(client, log);\n initializeHealth('unknown');\n\n // ── 3. Bootstrap config from API ─────────────────────────────────────────\n log.info('Bootstrapping from API...', { apiUrl: localConfig.apiUrl });\n\n let config: RuntimeConfig;\n try {\n const remoteConfig = await client.getConfig();\n config = mergeWithRemoteConfig(localConfig, remoteConfig);\n log.info('Config bootstrapped from API', {\n wsUrl: config.wsUrl,\n model: config.model,\n region: config.awsRegion,\n tools: config.tools.length,\n });\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n throw new Error(`Failed to bootstrap config from API: ${msg}`);\n }\n\n // ── 4. Install enabled tool packages ─────────────────────────────────────\n if (config.tools.length > 0) {\n log.info(`Installing ${config.tools.length} tool package(s)...`);\n await installTools(config.tools, config.toolsDir, log);\n }\n const customTools = await loadToolModules(config.tools, config.toolsDir, log);\n setToolsLoaded(customTools.length);\n if (customTools.length > 0) {\n log.info(`Loaded ${customTools.length} custom tool(s)`, {\n tools: customTools.map((t) => t.name),\n });\n }\n\n // ── 5. Configure Agent SDK environment ───────────────────────────────────\n // Agent SDK uses env vars for provider configuration\n process.env['ANTHROPIC_MODEL'] = config.model;\n\n if (config.provider === 'ollama') {\n // Ollama serves an Anthropic-compatible Messages API\n delete process.env['CLAUDE_CODE_USE_BEDROCK'];\n process.env['ANTHROPIC_BASE_URL'] =\n config.baseUrl ?? 'http://localhost:11434';\n process.env['ANTHROPIC_API_KEY'] = 'ollama'; // dummy — SDK requires non-empty\n log.info(\n `Using model: ${config.model} (Ollama, base URL: ${config.baseUrl ?? 'http://localhost:11434'})`,\n );\n } else if (config.provider === 'claude-code') {\n // Local only: uses existing Claude Code OAuth from ~/.claude/\n delete process.env['CLAUDE_CODE_USE_BEDROCK'];\n log.info(`Using model: ${config.model} (Claude Code, native OAuth)`);\n } else if (config.provider === 'anthropic') {\n delete process.env['CLAUDE_CODE_USE_BEDROCK'];\n if (!config.anthropicApiKey) {\n throw new Error('Anthropic provider requires an API key');\n }\n process.env['ANTHROPIC_API_KEY'] = config.anthropicApiKey;\n log.info(`Using model: ${config.model} (Anthropic API key)`);\n } else {\n // bedrock — only used by customer-hosted instances with explicit provider\n process.env['CLAUDE_CODE_USE_BEDROCK'] = '1';\n process.env['AWS_REGION'] = config.awsRegion;\n log.info(\n `Using model: ${config.model} (Bedrock, region: ${config.awsRegion})`,\n );\n }\n\n // ── 5b. Initialize memory system ──────────────────────────────────────────\n const dailyLog = new DailyLogManager(config.stateDir, config.botId);\n dailyLog.init();\n\n // ── 6. MCP server factories + WorkerManager ──────────────────────────────\n // Each query() call connects a transport to the MCP server, so we need\n // fresh instances per query to avoid \"Already connected\" errors.\n const contentScanner = new DefaultContentScanner(log);\n\n const createWorkServer = () =>\n createWorkerMcpServer(client, customTools, contentScanner, dailyLog);\n\n const workerManager = new WorkerManager({\n client,\n createWorkerServer: createWorkServer,\n model: config.model,\n log,\n dailyLog,\n dailyLogCharBudget: 16_000, // ~4000 tokens\n sessionHistoryPath: join(\n config.stateDir,\n 'memory',\n config.botId,\n 'session-history.json',\n ),\n });\n\n const createOrchServer = () =>\n createOrchestratorMcpServer(client, customTools, workerManager);\n\n // ── 7. Start health server ───────────────────────────────────────────────\n const healthServer = startHealthServer(config.healthPort, log);\n\n // ── 8. Session store ─────────────────────────────────────────────────────\n const sessionStore = new SessionStore();\n\n // ── 9. Start WS gateway ──────────────────────────────────────────────────\n log.info('Starting gateway', { wsUrl: config.wsUrl, apiUrl: config.apiUrl });\n\n void startGateway({\n client,\n wsUrl: config.wsUrl,\n accountId: config.accountId,\n stateDir: config.stateDir,\n log,\n abortSignal: abortController.signal,\n getWorkerStatus: () => ({\n activeWorkers: workerManager.activeCount,\n queuedTasks: workerManager.queuedCount,\n maxConcurrency: workerManager.maxConcurrentWorkers,\n }),\n onMessage: (msg) => {\n recordMessageReceived();\n setSessionCount(sessionStore.size);\n return routeMessage(\n msg,\n client,\n {\n createOrchestratorServer: createOrchServer,\n workerManager,\n model: config.model,\n },\n sessionStore,\n {\n stateDir: config.stateDir,\n log,\n },\n );\n },\n });\n\n // ── 10. Heartbeat loop ─────────────────────────────────────────────────────\n scheduleHeartbeat(\n createOrchServer,\n config.model,\n config.heartbeatIntervalMs,\n abortController.signal,\n log,\n );\n\n // ── 11. Sleep cycle scheduler ─────────────────────────────────────────────\n if (config.memoryFileId && config.sleepHour !== null && config.timezone) {\n const memoryFileId = config.memoryFileId;\n\n scheduleDailyCycle(\n 'Sleep',\n async () => {\n // 1. Read daily logs\n const dailyLogs = await dailyLog.readAllLogs();\n if (!dailyLogs) {\n log.info('Sleep cycle: no daily logs to process, skipping');\n return;\n }\n\n // 2. Fetch current memory content\n let currentMemory = '';\n try {\n const file = await client.getFile({ fileId: memoryFileId });\n currentMemory = file.content ?? '';\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n log.warn(`Sleep cycle: could not fetch Memory file: ${msg}`);\n }\n\n // 3. Build prompt with memory content + daily observations inline\n const prompt = [\n `Memory file ID: ${memoryFileId}`,\n '',\n '<current_memory>',\n currentMemory || '(empty — first consolidation)',\n '</current_memory>',\n '',\n '<daily_observations>',\n dailyLogs,\n '</daily_observations>',\n '',\n 'Run your nightly sleep cycle now.',\n ].join('\\n');\n\n // 3. Run sleep agent\n log.info('Sleep cycle: invoking sleep agent...');\n const workerServer = createWorkServer();\n const result = runOneShotWorker({\n prompt,\n systemPrompt: DESKFREE_SLEEP_DIRECTIVE,\n workerServer,\n model: config.model,\n });\n\n // Drain stream to completion\n for await (const _ of result) {\n /* consume */\n }\n\n // 4. Prune daily logs older than 7 days\n dailyLog.pruneOlderThan(7);\n log.info('Sleep cycle: pruned daily logs older than 7 days');\n },\n config.sleepHour,\n config.timezone,\n abortController.signal,\n log,\n );\n }\n\n // ── 12. Dusk cycle scheduler ──────────────────────────────────────────────\n if (config.memoryFileId && config.duskHour !== null && config.timezone) {\n const memoryFileId = config.memoryFileId;\n\n scheduleDailyCycle(\n 'Dusk',\n async () => {\n // 1. Read daily logs for context\n const dailyLogs = await dailyLog.readAllLogs();\n\n // 2. Fetch current memory content\n let currentMemory = '';\n try {\n const file = await client.getFile({ fileId: memoryFileId });\n currentMemory = file.content ?? '';\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n log.warn(`Dusk cycle: could not fetch Memory file: ${msg}`);\n }\n\n // 3. Build prompt with memory content + daily observations inline\n const prompt = [\n `Memory file ID: ${memoryFileId}`,\n '',\n '<current_memory>',\n currentMemory || '(empty)',\n '</current_memory>',\n '',\n '<daily_observations>',\n dailyLogs || '(no observations today)',\n '</daily_observations>',\n '',\n 'Run your dusk planning cycle now.',\n ].join('\\n');\n\n // 4. Run dusk agent\n log.info('Dusk cycle: invoking dusk agent...');\n const workerServer = createWorkServer();\n const result = runOneShotWorker({\n prompt,\n systemPrompt: DESKFREE_DUSK_DIRECTIVE,\n workerServer,\n model: config.model,\n });\n\n // Drain stream to completion\n for await (const _ of result) {\n /* consume */\n }\n },\n config.duskHour,\n config.timezone,\n abortController.signal,\n log,\n );\n }\n\n log.info('DeskFree Agent Runtime started successfully.');\n\n // ── Dispose ───────────────────────────────────────────────────────────────\n return () => {\n log.info('Shutting down DeskFree Agent Runtime...');\n abortController.abort();\n workerManager.teardownAll();\n sessionStore.dispose();\n healthServer.close();\n errorReporter.flush().catch(() => {\n /* best effort */\n });\n errorReporter.dispose();\n log.info('Shutdown complete.');\n };\n}\n"]}