@granular-software/sdk 0.4.15 → 0.4.17

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/node-gyp-build/node-gyp-build.js","../../../node_modules/node-gyp-build/index.js","../../../node_modules/bufferutil/fallback.js","../../../node_modules/bufferutil/index.js","../../../node_modules/ws/lib/buffer-util.js","../../../node_modules/ws/lib/limiter.js","../../../node_modules/ws/lib/permessage-deflate.js","../../../node_modules/utf-8-validate/fallback.js","../../../node_modules/utf-8-validate/index.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","../../../node_modules/ws/wrapper.mjs","../src/ws-client.ts","../src/session.ts","../src/endpoints.ts","../src/effect-runtime.ts","../src/manifest-metamodels.ts","../src/client.ts"],"names":["load","dir","platform","arch","runtime","abi","require_node_gyp_build","mask","data","require_fallback","Receiver","Sender","URL","WebSocket","key","createWebSocketStream","err","protocol","WebSocketServer","Automerge","docs","normalizeEffectBehaviorSummary","DEFAULT_METAMODEL_PACKAGES","computeEffectKey"],"mappings":"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;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,MAAG,CAAA;AAAA,MAAG,CAAA;AAAA,MAAG,CAAA;AAAA,MAAG,CAAA;AAAA,MAAG,CAAA;AAAA;AAAA,MAC7C,CAAA;AAAA,MAAG,CAAA;AAAA,MAAG,CAAA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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","var fs = require('fs')\nvar path = require('path')\nvar os = require('os')\n\n// Workaround to fix webpack's build warnings: 'the request of a dependency is an expression'\nvar runtimeRequire = typeof __webpack_require__ === 'function' ? __non_webpack_require__ : require // eslint-disable-line\n\nvar vars = (process.config && process.config.variables) || {}\nvar prebuildsOnly = !!process.env.PREBUILDS_ONLY\nvar abi = process.versions.modules // TODO: support old node where this is undef\nvar runtime = isElectron() ? 'electron' : (isNwjs() ? 'node-webkit' : 'node')\n\nvar arch = process.env.npm_config_arch || os.arch()\nvar platform = process.env.npm_config_platform || os.platform()\nvar libc = process.env.LIBC || (isAlpine(platform) ? 'musl' : 'glibc')\nvar armv = process.env.ARM_VERSION || (arch === 'arm64' ? '8' : vars.arm_version) || ''\nvar uv = (process.versions.uv || '').split('.')[0]\n\nmodule.exports = load\n\nfunction load (dir) {\n return runtimeRequire(load.resolve(dir))\n}\n\nload.resolve = load.path = function (dir) {\n dir = path.resolve(dir || '.')\n\n try {\n var name = runtimeRequire(path.join(dir, 'package.json')).name.toUpperCase().replace(/-/g, '_')\n if (process.env[name + '_PREBUILD']) dir = process.env[name + '_PREBUILD']\n } catch (err) {}\n\n if (!prebuildsOnly) {\n var release = getFirst(path.join(dir, 'build/Release'), matchBuild)\n if (release) return release\n\n var debug = getFirst(path.join(dir, 'build/Debug'), matchBuild)\n if (debug) return debug\n }\n\n var prebuild = resolve(dir)\n if (prebuild) return prebuild\n\n var nearby = resolve(path.dirname(process.execPath))\n if (nearby) return nearby\n\n var target = [\n 'platform=' + platform,\n 'arch=' + arch,\n 'runtime=' + runtime,\n 'abi=' + abi,\n 'uv=' + uv,\n armv ? 'armv=' + armv : '',\n 'libc=' + libc,\n 'node=' + process.versions.node,\n process.versions.electron ? 'electron=' + process.versions.electron : '',\n typeof __webpack_require__ === 'function' ? 'webpack=true' : '' // eslint-disable-line\n ].filter(Boolean).join(' ')\n\n throw new Error('No native build was found for ' + target + '\\n loaded from: ' + dir + '\\n')\n\n function resolve (dir) {\n // Find matching \"prebuilds/<platform>-<arch>\" directory\n var tuples = readdirSync(path.join(dir, 'prebuilds')).map(parseTuple)\n var tuple = tuples.filter(matchTuple(platform, arch)).sort(compareTuples)[0]\n if (!tuple) return\n\n // Find most specific flavor first\n var prebuilds = path.join(dir, 'prebuilds', tuple.name)\n var parsed = readdirSync(prebuilds).map(parseTags)\n var candidates = parsed.filter(matchTags(runtime, abi))\n var winner = candidates.sort(compareTags(runtime))[0]\n if (winner) return path.join(prebuilds, winner.file)\n }\n}\n\nfunction readdirSync (dir) {\n try {\n return fs.readdirSync(dir)\n } catch (err) {\n return []\n }\n}\n\nfunction getFirst (dir, filter) {\n var files = readdirSync(dir).filter(filter)\n return files[0] && path.join(dir, files[0])\n}\n\nfunction matchBuild (name) {\n return /\\.node$/.test(name)\n}\n\nfunction parseTuple (name) {\n // Example: darwin-x64+arm64\n var arr = name.split('-')\n if (arr.length !== 2) return\n\n var platform = arr[0]\n var architectures = arr[1].split('+')\n\n if (!platform) return\n if (!architectures.length) return\n if (!architectures.every(Boolean)) return\n\n return { name, platform, architectures }\n}\n\nfunction matchTuple (platform, arch) {\n return function (tuple) {\n if (tuple == null) return false\n if (tuple.platform !== platform) return false\n return tuple.architectures.includes(arch)\n }\n}\n\nfunction compareTuples (a, b) {\n // Prefer single-arch prebuilds over multi-arch\n return a.architectures.length - b.architectures.length\n}\n\nfunction parseTags (file) {\n var arr = file.split('.')\n var extension = arr.pop()\n var tags = { file: file, specificity: 0 }\n\n if (extension !== 'node') return\n\n for (var i = 0; i < arr.length; i++) {\n var tag = arr[i]\n\n if (tag === 'node' || tag === 'electron' || tag === 'node-webkit') {\n tags.runtime = tag\n } else if (tag === 'napi') {\n tags.napi = true\n } else if (tag.slice(0, 3) === 'abi') {\n tags.abi = tag.slice(3)\n } else if (tag.slice(0, 2) === 'uv') {\n tags.uv = tag.slice(2)\n } else if (tag.slice(0, 4) === 'armv') {\n tags.armv = tag.slice(4)\n } else if (tag === 'glibc' || tag === 'musl') {\n tags.libc = tag\n } else {\n continue\n }\n\n tags.specificity++\n }\n\n return tags\n}\n\nfunction matchTags (runtime, abi) {\n return function (tags) {\n if (tags == null) return false\n if (tags.runtime && tags.runtime !== runtime && !runtimeAgnostic(tags)) return false\n if (tags.abi && tags.abi !== abi && !tags.napi) return false\n if (tags.uv && tags.uv !== uv) return false\n if (tags.armv && tags.armv !== armv) return false\n if (tags.libc && tags.libc !== libc) return false\n\n return true\n }\n}\n\nfunction runtimeAgnostic (tags) {\n return tags.runtime === 'node' && tags.napi\n}\n\nfunction compareTags (runtime) {\n // Precedence: non-agnostic runtime, abi over napi, then by specificity.\n return function (a, b) {\n if (a.runtime !== b.runtime) {\n return a.runtime === runtime ? -1 : 1\n } else if (a.abi !== b.abi) {\n return a.abi ? -1 : 1\n } else if (a.specificity !== b.specificity) {\n return a.specificity > b.specificity ? -1 : 1\n } else {\n return 0\n }\n }\n}\n\nfunction isNwjs () {\n return !!(process.versions && process.versions.nw)\n}\n\nfunction isElectron () {\n if (process.versions && process.versions.electron) return true\n if (process.env.ELECTRON_RUN_AS_NODE) return true\n return typeof window !== 'undefined' && window.process && window.process.type === 'renderer'\n}\n\nfunction isAlpine (platform) {\n return platform === 'linux' && fs.existsSync('/etc/alpine-release')\n}\n\n// Exposed for unit tests\n// TODO: move to lib\nload.parseTags = parseTags\nload.matchTags = matchTags\nload.compareTags = compareTags\nload.parseTuple = parseTuple\nload.matchTuple = matchTuple\nload.compareTuples = compareTuples\n","const runtimeRequire = typeof __webpack_require__ === 'function' ? __non_webpack_require__ : require // eslint-disable-line\nif (typeof runtimeRequire.addon === 'function') { // if the platform supports native resolving prefer that\n module.exports = runtimeRequire.addon.bind(runtimeRequire)\n} else { // else use the runtime version here\n module.exports = require('./node-gyp-build.js')\n}\n","'use strict';\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 */\nconst mask = (source, mask, output, offset, length) => {\n for (var 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 */\nconst unmask = (buffer, mask) => {\n // Required until https://github.com/nodejs/node/issues/9006 is resolved.\n const length = buffer.length;\n for (var i = 0; i < length; i++) {\n buffer[i] ^= mask[i & 3];\n }\n};\n\nmodule.exports = { mask, unmask };\n","'use strict';\n\ntry {\n module.exports = require('node-gyp-build')(__dirname);\n} catch (e) {\n module.exports = require('./fallback');\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\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) === 0x00) { // 0xxxxxxx\n i++;\n } else if ((buf[i] & 0xe0) === 0xc0) { // 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) { // 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) { // 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 || 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\nmodule.exports = isValidUTF8;\n","'use strict';\n\ntry {\n module.exports = require('node-gyp-build')(__dirname);\n} catch (e) {\n module.exports = require('./fallback');\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 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 * as Automerge from '@automerge/automerge';\nimport type {\n WSClientOptions,\n WSDisconnectInfo,\n WSReconnectErrorInfo,\n RPCRequest,\n RPCResponse,\n SyncMessage,\n RPCRequestFromServer\n} from './types';\n\n// Use global WebSocket if available (Browser, Bun, Deno)\nlet GlobalWebSocket: any = undefined;\nif (typeof globalThis !== 'undefined' && (globalThis as any).WebSocket) {\n GlobalWebSocket = (globalThis as any).WebSocket;\n}\n\n// WebSocket.OPEN is always 1\nconst READY_STATE_OPEN = 1;\nconst TOKEN_REFRESH_LEEWAY_MS = 2 * 60 * 1000;\nconst TOKEN_REFRESH_RETRY_MS = 30 * 1000;\nconst MAX_TIMER_DELAY_MS = 2_147_483_647;\n\nexport class WSClient {\n private ws: WebSocket | null = null;\n private url: string;\n private sessionId: string;\n private token: string;\n private messageQueue: Array<{ resolve: (value: unknown) => void; reject: (error: Error) => void; id: string }> = [];\n private syncHandlers: Array<(message: SyncMessage) => void> = [];\n private rpcHandlers: Map<string, (params: unknown) => Promise<unknown>> = new Map();\n private eventHandlers: Map<string, Array<(params: unknown) => void>> = new Map();\n private nextRpcId = 1;\n public doc: Automerge.Doc<Record<string, unknown>> = Automerge.init();\n private syncState: Automerge.SyncState = Automerge.initSyncState();\n private reconnectTimer: ReturnType<typeof setTimeout> | null = null;\n private tokenRefreshTimer: ReturnType<typeof setTimeout> | null = null;\n private isExplicitlyDisconnected = false;\n\n private options: WSClientOptions;\n\n constructor(options: WSClientOptions) {\n this.options = options;\n this.url = options.url;\n this.sessionId = options.sessionId;\n this.token = options.token;\n }\n\n get currentSessionId(): string {\n return this.sessionId;\n }\n\n private clearTokenRefreshTimer(): void {\n if (this.tokenRefreshTimer) {\n clearTimeout(this.tokenRefreshTimer);\n this.tokenRefreshTimer = null;\n }\n }\n\n private decodeBase64Url(payload: string): string {\n const base64 = payload.replace(/-/g, '+').replace(/_/g, '/');\n const padded = base64 + '='.repeat((4 - (base64.length % 4 || 4)) % 4);\n if (typeof atob === 'function') {\n return atob(padded);\n }\n\n const maybeBuffer = (globalThis as unknown as { Buffer?: { from: (data: string, encoding: string) => { toString: (encoding: string) => string } } }).Buffer;\n if (maybeBuffer) {\n return maybeBuffer.from(padded, 'base64').toString('utf8');\n }\n\n throw new Error('No base64 decoder available');\n }\n\n private getTokenExpiryMs(token: string): number | null {\n const parts = token.split('.');\n if (parts.length < 2) {\n return null;\n }\n\n try {\n const payloadRaw = this.decodeBase64Url(parts[1]);\n const payload = JSON.parse(payloadRaw) as { exp?: number };\n if (typeof payload.exp !== 'number' || !Number.isFinite(payload.exp)) {\n return null;\n }\n return payload.exp * 1000;\n } catch {\n return null;\n }\n }\n\n private scheduleTokenRefresh(): void {\n this.clearTokenRefreshTimer();\n if (!this.options.tokenProvider || this.isExplicitlyDisconnected) {\n return;\n }\n\n const expiresAt = this.getTokenExpiryMs(this.token);\n if (!expiresAt) {\n return;\n }\n\n const refreshInMs = Math.max(1_000, expiresAt - Date.now() - TOKEN_REFRESH_LEEWAY_MS);\n const delay = Math.min(refreshInMs, MAX_TIMER_DELAY_MS);\n this.tokenRefreshTimer = setTimeout(() => {\n void this.refreshTokenInBackground();\n }, delay);\n }\n\n private async refreshTokenInBackground(): Promise<void> {\n if (!this.options.tokenProvider || this.isExplicitlyDisconnected) {\n return;\n }\n\n try {\n const refreshedToken = await this.options.tokenProvider();\n if (typeof refreshedToken !== 'string' || refreshedToken.length === 0) {\n throw new Error('Token provider returned no token');\n }\n this.token = refreshedToken;\n this.scheduleTokenRefresh();\n } catch (error) {\n if (this.isExplicitlyDisconnected) {\n return;\n }\n console.warn('[Granular] Token refresh failed, retrying soon:', error);\n this.clearTokenRefreshTimer();\n this.tokenRefreshTimer = setTimeout(() => {\n void this.refreshTokenInBackground();\n }, TOKEN_REFRESH_RETRY_MS);\n }\n }\n\n private async resolveTokenForConnect(): Promise<string> {\n if (!this.options.tokenProvider) {\n return this.token;\n }\n\n const expiresAt = this.getTokenExpiryMs(this.token);\n const shouldRefresh = expiresAt !== null && expiresAt - Date.now() <= TOKEN_REFRESH_LEEWAY_MS;\n if (!shouldRefresh) {\n return this.token;\n }\n\n try {\n const refreshedToken = await this.options.tokenProvider();\n if (typeof refreshedToken !== 'string' || refreshedToken.length === 0) {\n throw new Error('Token provider returned no token');\n }\n this.token = refreshedToken;\n return refreshedToken;\n } catch (error) {\n if (expiresAt > Date.now()) {\n console.warn('[Granular] Token refresh failed, using current token:', error);\n return this.token;\n }\n throw error;\n }\n }\n\n /**\n * Connect to the WebSocket server\n * @returns {Promise<void>} Resolves when connection is open\n */\n async connect(): Promise<void> {\n const token = await this.resolveTokenForConnect();\n this.isExplicitlyDisconnected = false;\n this.scheduleTokenRefresh();\n if (this.reconnectTimer) {\n clearTimeout(this.reconnectTimer);\n this.reconnectTimer = null;\n }\n\n // Determine WebSocket implementation\n let WebSocketClass = this.options.WebSocketCtor || GlobalWebSocket;\n\n if (!WebSocketClass) {\n try {\n // Try to load 'ws' dynamically for Node.js environments\n // @ts-ignore\n const wsModule = await import('ws');\n WebSocketClass = wsModule.default || wsModule;\n } catch (e) {\n // Ignore, handled below\n }\n }\n\n if (!WebSocketClass) {\n throw new Error('No WebSocket implementation found. If using Node.js, please install \"ws\" and pass the constructor to the SDK options: { WebSocketCtor: WebSocket }.');\n }\n\n return new Promise((resolve, reject) => {\n try {\n // Construct URL with query parameters\n const wsUrl = new URL(this.url);\n wsUrl.searchParams.set('sessionId', this.sessionId);\n wsUrl.searchParams.set('token', token);\n\n // @ts-ignore - Dynamic class usage\n this.ws = new WebSocketClass(wsUrl.toString()) as WebSocket;\n\n if (!this.ws) throw new Error('Failed to create WebSocket');\n\n // Standardize event handlers\n const socket = this.ws as any;\n if (typeof socket.on === 'function') {\n // Node 'ws' style\n socket.on('open', () => {\n if (this.reconnectTimer) {\n clearTimeout(this.reconnectTimer);\n this.reconnectTimer = null;\n }\n this.emit('open', {});\n resolve();\n });\n socket.on('message', (data: any) => {\n try {\n const message = JSON.parse(data.toString());\n this.handleMessage(message);\n } catch (error) {\n console.error('[Granular] Failed to parse message:', error);\n }\n });\n socket.on('error', (error: any) => {\n this.emit('error', error);\n if (socket.readyState !== READY_STATE_OPEN) {\n reject(error);\n }\n });\n socket.on('close', (code: number, reason: unknown) => {\n this.handleDisconnect({\n code,\n reason: this.normalizeReason(reason),\n // ws does not provide wasClean on Node-style close callback\n wasClean: code === 1000,\n });\n });\n } else {\n // Browser WebSocket style\n this.ws!.onopen = () => {\n if (this.reconnectTimer) {\n clearTimeout(this.reconnectTimer);\n this.reconnectTimer = null;\n }\n this.emit('open', {});\n resolve();\n };\n\n this.ws!.onmessage = (event: MessageEvent) => {\n try {\n const data = event.data;\n const message = JSON.parse(data.toString());\n this.handleMessage(message);\n } catch (error) {\n console.error('[Granular] Failed to parse message:', error);\n }\n };\n\n this.ws!.onerror = (event: Event) => {\n const error = new Error('WebSocket error');\n (error as any).event = event;\n this.emit('error', error);\n if (this.ws?.readyState !== READY_STATE_OPEN) {\n reject(error);\n }\n };\n\n this.ws!.onclose = (event: CloseEvent) => {\n this.handleDisconnect({\n code: event.code,\n reason: event.reason,\n wasClean: event.wasClean,\n });\n };\n }\n } catch (error) {\n reject(error);\n }\n });\n }\n\n private normalizeReason(reason: unknown): string | undefined {\n if (reason === null || reason === undefined) return undefined;\n if (typeof reason === 'string') return reason;\n if (typeof reason === 'object' && reason && 'toString' in reason) {\n try {\n const text = String((reason as any).toString());\n return text || undefined;\n } catch {\n return undefined;\n }\n }\n return undefined;\n }\n\n private rejectPending(error: Error): void {\n this.messageQueue.forEach((pending) => pending.reject(error));\n this.messageQueue = [];\n }\n\n private buildDisconnectError(info: WSDisconnectInfo): Error {\n const details = [\n info.code !== undefined ? `code=${info.code}` : undefined,\n info.reason ? `reason=${info.reason}` : undefined,\n ].filter(Boolean).join(', ');\n const suffix = details ? ` (${details})` : '';\n return new Error(`WebSocket disconnected${suffix}`);\n }\n\n private handleDisconnect(close: {\n code?: number;\n reason?: string;\n wasClean?: boolean;\n } = {}): void {\n const reconnectDelayMs = 3000;\n const unexpected = !this.isExplicitlyDisconnected;\n const info: WSDisconnectInfo = {\n code: close.code,\n reason: close.reason,\n wasClean: close.wasClean,\n unexpected,\n timestamp: Date.now(),\n reconnectScheduled: false,\n };\n\n this.ws = null;\n this.emit('close', info);\n\n if (this.reconnectTimer) {\n clearTimeout(this.reconnectTimer);\n this.reconnectTimer = null;\n }\n\n if (unexpected) {\n const disconnectError = this.buildDisconnectError(info);\n this.rejectPending(disconnectError);\n this.emit('disconnect', info);\n\n info.reconnectScheduled = true;\n info.reconnectDelayMs = reconnectDelayMs;\n\n if (this.options.onUnexpectedClose) {\n try {\n this.options.onUnexpectedClose(info);\n } catch (callbackError) {\n console.error('[Granular] onUnexpectedClose callback failed:', callbackError);\n }\n }\n\n this.reconnectTimer = setTimeout(() => {\n console.log('[Granular] Attempting reconnect...');\n this.connect().catch(error => {\n console.error('[Granular] Reconnect failed:', error);\n const reconnectInfo: WSReconnectErrorInfo = {\n error: error instanceof Error ? error.message : String(error),\n sessionId: this.sessionId,\n timestamp: Date.now(),\n };\n this.emit('reconnect_error', reconnectInfo);\n if (this.options.onReconnectError) {\n try {\n this.options.onReconnectError(reconnectInfo);\n } catch (callbackError) {\n console.error('[Granular] onReconnectError callback failed:', callbackError);\n }\n }\n });\n }, reconnectDelayMs);\n }\n }\n\n private handleMessage(message: unknown): void {\n if (typeof message !== 'object' || message === null) return;\n\n // Debug: Log all incoming messages\n console.log('[Granular DEBUG] Received message:', JSON.stringify(message).slice(0, 500));\n\n // 1. Handle Sync Messages (Automerge)\n if ('type' in message && message.type === 'sync') {\n const syncMessage = message as SyncMessage;\n let bytes: Uint8Array;\n\n try {\n const payload = syncMessage.message || syncMessage.data;\n\n if (typeof payload === 'string') {\n const binaryString = atob(payload);\n const len = binaryString.length;\n bytes = new Uint8Array(len);\n for (let i = 0; i < len; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n } else if (Array.isArray(payload)) {\n bytes = new Uint8Array(payload);\n } else if (payload instanceof Uint8Array) {\n bytes = payload;\n } else {\n return;\n }\n\n console.log('[Granular DEBUG] Applying sync bytes:', bytes.length);\n\n const [newDoc, newSyncState] = Automerge.receiveSyncMessage(\n this.doc,\n this.syncState,\n bytes\n );\n this.doc = newDoc;\n this.syncState = newSyncState;\n\n // DEBUG: Inspect doc after sync\n const docAny = this.doc as any;\n if (docAny.catalog) {\n console.log('[Granular DEBUG] Doc catalog sync applied. Keys in catalog:', Object.keys(docAny.catalog || {}));\n console.log('[Granular DEBUG] RawToolCatalogs:', Object.keys(docAny.catalog.rawToolCatalogs || {}));\n } else {\n console.log('[Granular DEBUG] Doc synced but no catalog yet. Keys in doc:', Object.keys(docAny));\n }\n\n // Notify sync listeners with the new doc\n this.emit('sync', this.doc);\n } catch (e) {\n // Determine if this is a sync protocol error (e.g. wrong format) -> try applyChanges\n // The server broadcasts raw changes using getLastLocalChange, which receiveSyncMessage rejects.\n try {\n console.log('[Granular DEBUG] receiveSyncMessage failed, trying applyChanges...');\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const [newDoc] = Automerge.applyChanges(this.doc, [bytes!]);\n this.doc = newDoc;\n this.emit('sync', this.doc);\n console.log('[Granular DEBUG] applyChanges succeeded. Doc:', JSON.stringify(Automerge.toJS(this.doc)));\n } catch (applyError) {\n console.warn('[Granular] Failed to apply sync message (both sync & applyChanges)', e, applyError);\n }\n }\n return;\n }\n\n // 1. Handling Automerge Snapshots (Full State)\n if ('type' in message && message.type === 'snapshot') {\n const snapshotMessage = message as { type: string; data: number[] };\n try {\n const bytes = new Uint8Array(snapshotMessage.data);\n console.log('[Granular DEBUG] Loading Automerge session snapshot bytes:', bytes.length);\n this.doc = Automerge.load(bytes);\n this.emit('sync', this.doc);\n console.log('[Granular DEBUG] Automerge session snapshot loaded. Doc:', JSON.stringify(Automerge.toJS(this.doc)));\n } catch (e) {\n console.warn('[Granular] Failed to load snapshot message', e);\n }\n return;\n }\n\n // 1.5 Handle Automerge Changes (Raw)\n if ('type' in message && message.type === 'change') {\n const changeMessage = message as { type: string; data: number[] };\n try {\n const bytes = new Uint8Array(changeMessage.data);\n // console.log('[Granular DEBUG] Applying change bytes:', bytes.length);\n const [newDoc] = Automerge.applyChanges(this.doc, [bytes]);\n this.doc = newDoc;\n this.emit('sync', this.doc);\n // console.log('[Granular DEBUG] Valid change applied. Doc keys:', Object.keys(Automerge.toJS(this.doc)));\n } catch (e) {\n console.warn('[Granular] Failed to apply change message', e);\n }\n return;\n }\n\n // 2. Handle RPC Responses (Results/Errors from calls we made)\n if ('type' in message && (message.type === 'rpc_result' || message.type === 'rpc_error')) {\n const response = message as RPCResponse;\n const pending = this.messageQueue.find((q) => q.id === response.id);\n if (pending) {\n if (response.type === 'rpc_error') {\n pending.reject(\n new Error(`RPC error: ${response.error?.message || 'Unknown error'}`)\n );\n } else {\n pending.resolve(response.result);\n }\n this.messageQueue = this.messageQueue.filter((q) => q.id !== response.id);\n }\n return;\n }\n\n // 3. Handle Incoming RPC Requests (Server calls us, e.g. effect.invoke)\n if ('type' in message && message.type === 'rpc' && 'method' in message && 'id' in message) {\n const request = message as RPCRequestFromServer;\n this.handleIncomingRpc(request).catch((error) => {\n console.error('[Granular] Error handling incoming RPC:', error);\n });\n return;\n }\n\n // 4. Handle Generic Events\n if ('type' in message && typeof message.type === 'string') {\n this.emit(message.type, message);\n }\n }\n\n /**\n * Make an RPC call to the server\n * @param {string} method - RPC method name\n * @param {unknown} params - Request parameters\n * @returns {Promise<unknown>} Response result\n * @throws {Error} If connection is closed or timeout occurs\n */\n async call(method: string, params: unknown): Promise<unknown> {\n if (!this.ws || this.ws.readyState !== READY_STATE_OPEN) {\n throw new Error('WebSocket not connected');\n }\n\n const id = `rpc-${this.nextRpcId++}`;\n const request: RPCRequest = {\n type: 'rpc',\n method,\n params,\n id,\n };\n\n return new Promise((resolve, reject) => {\n this.messageQueue.push({ resolve, reject, id });\n\n this.ws!.send(JSON.stringify(request));\n\n // Timeout after 30 seconds\n setTimeout(() => {\n const pending = this.messageQueue.find((q) => q.id === id);\n if (pending) {\n this.messageQueue = this.messageQueue.filter((q) => q.id !== id);\n reject(new Error(`RPC timeout: ${method}`));\n }\n }, 30000);\n });\n }\n\n private async handleIncomingRpc(request: RPCRequestFromServer): Promise<void> {\n const handler = this.rpcHandlers.get(request.method);\n\n if (!handler) {\n const errorResponse = {\n type: 'rpc_error',\n id: request.id,\n error: {\n code: -32601,\n message: `Method not found: ${request.method}`,\n },\n };\n this.ws?.send(JSON.stringify(errorResponse));\n return;\n }\n\n try {\n const result = await handler(request.params);\n\n // Reverse effect invocations usually resolve by returning a value directly.\n // Only tool-era compatibility flows manage their own response frames.\n if (request.method !== 'tool.invoke') {\n const successResponse = {\n type: 'rpc_result',\n id: request.id,\n result,\n };\n this.ws?.send(JSON.stringify(successResponse));\n }\n } catch (error) {\n const errorResponse = {\n type: 'rpc_error',\n id: request.id,\n error: {\n code: -32000,\n message: error instanceof Error ? error.message : 'Unknown error',\n },\n };\n this.ws?.send(JSON.stringify(errorResponse));\n }\n }\n\n /**\n * Subscribe to client events\n * @param {string} event - Event name\n * @param {Function} handler - Event handler\n */\n on(event: string, handler: (params: unknown) => void): void {\n if (!this.eventHandlers.has(event)) {\n this.eventHandlers.set(event, []);\n }\n this.eventHandlers.get(event)!.push(handler);\n }\n\n /**\n * Register an RPC handler for incoming server requests\n * @param {string} method - RPC method name\n * @param {Function} handler - Handler function\n */\n registerRpcHandler(method: string, handler: (params: unknown) => Promise<unknown>): void {\n this.rpcHandlers.set(method, handler);\n }\n\n /**\n * Unsubscribe from client events\n * @param {string} event - Event name\n * @param {Function} handler - Handler to remove\n */\n off(event: string, handler: (params: unknown) => void): void {\n const handlers = this.eventHandlers.get(event);\n if (handlers) {\n this.eventHandlers.set(\n event,\n handlers.filter((h) => h !== handler)\n );\n }\n }\n\n /**\n * Emit an event locally\n * @param {string} event - Event name\n * @param params - Event data\n */\n emit(event: string, params: unknown): void {\n const handlers = this.eventHandlers.get(event);\n if (handlers) {\n handlers.forEach(handler => handler(params));\n }\n }\n\n /**\n * Disconnect the WebSocket and clear state\n */\n disconnect(): void {\n this.isExplicitlyDisconnected = true;\n if (this.reconnectTimer) {\n clearTimeout(this.reconnectTimer);\n this.reconnectTimer = null;\n }\n this.clearTokenRefreshTimer();\n\n if (this.ws) {\n this.ws.close(1000, 'Client disconnect');\n this.ws = null;\n }\n this.rejectPending(new Error('Client explicitly disconnected'));\n this.rpcHandlers.clear();\n this.emit('disconnect', {});\n }\n}\n","import { WSClient } from './ws-client';\nimport type {\n Job,\n JobFeedbackInput,\n JobFeedbackMetadata,\n JobFeedbackRecord,\n JobFeedbackToolCall,\n JobStatus,\n Prompt,\n ToolWithHandler,\n ToolSchema,\n PublishToolsResult,\n ToolHandler,\n InstanceToolHandler,\n ToolInvokeParams,\n EffectHandlerContext,\n DomainState,\n JobSubmitResult,\n ToolInfo,\n ToolsChangedEvent,\n EffectInfo,\n EffectsChangedEvent,\n} from './types';\nimport type { Doc } from '@automerge/automerge/slim';\n\n// Re-export types that were previously defined here\nexport { ToolWithHandler, ToolSchema, PublishToolsResult, ToolHandler, InstanceToolHandler, DomainState, JobSubmitResult };\n\nexport class Session {\n protected client: WSClient;\n private clientId: string;\n private jobsMap: Map<string, JobImplementation> = new Map();\n private eventListeners: Map<string, Array<(data: unknown) => void>> = new Map();\n private toolHandlers: Map<string, ToolHandler | InstanceToolHandler> = new Map();\n /** Tracks which tools are instance methods (className set, not static) */\n private instanceTools: Set<string> = new Set();\n private currentDomainRevision: string | null = null;\n /** Local effect registry: name → full ToolWithHandler */\n private effects: Map<string, ToolWithHandler> = new Map();\n /** Last known tools for diffing */\n private lastKnownTools: Map<string, ToolInfo> = new Map();\n\n constructor(client: WSClient, clientId?: string) {\n this.client = client;\n this.clientId = clientId || `client_${Date.now()}`;\n this.setupEventHandlers();\n this.setupToolInvokeHandler();\n }\n\n private extractDomainRevisionFromDoc(doc: unknown): string | null {\n const domain = (doc as { domain?: { active?: unknown } } | null | undefined)?.domain;\n const active = domain?.active;\n if (typeof active === 'string' && active.trim()) {\n return active;\n }\n const nestedRevision = (active as { domainRevision?: unknown } | null | undefined)?.domainRevision;\n if (typeof nestedRevision === 'string' && nestedRevision.trim()) {\n return nestedRevision;\n }\n return null;\n }\n\n private buildLegacyEffectContext(): EffectHandlerContext {\n return {\n effectClientId: this.clientId,\n sandboxId: '',\n environmentId: '',\n sessionId: '',\n user: {\n granularId: '',\n userId: '',\n subjectId: '',\n },\n };\n }\n\n // --- Public API ---\n\n get document(): Doc<Record<string, unknown>> {\n return this.client.doc;\n }\n\n get sessionId(): string {\n return this.client.currentSessionId;\n }\n\n get domainRevision(): string | null {\n return this.currentDomainRevision;\n }\n\n /**\n * Make a raw RPC call to the session's Durable Object.\n *\n * Use this when you need to call an RPC method that doesn't have a\n * dedicated wrapper method on the Session/Environment class.\n *\n * @param method - RPC method name (e.g. 'domain.fetchPackagePart')\n * @param params - Request parameters\n * @returns The raw RPC response\n *\n * @example\n * ```typescript\n * const result = await env.rpc('domain.fetchPackagePart', {\n * moduleSpecifier: '@sandbox/domain',\n * part: 'types',\n * });\n * ```\n */\n async rpc<T = unknown>(method: string, params: Record<string, unknown> = {}): Promise<T> {\n return this.client.call(method, params) as Promise<T>;\n }\n\n /**\n * Send client hello to establish the session\n */\n async hello(): Promise<{\n ok: boolean;\n environmentId?: string;\n docId?: string;\n graphContainerStatus?: { lastKeepAliveAt: number; status: 'warming' | 'hot' | 'unknown' };\n }> {\n const result = await this.client.call('client.hello', {\n clientId: this.clientId,\n protocolVersion: '2.0',\n });\n return result as {\n ok: boolean;\n environmentId?: string;\n docId?: string;\n graphContainerStatus?: { lastKeepAliveAt: number; status: 'warming' | 'hot' | 'unknown' };\n };\n }\n\n async publishTools(tools: ToolWithHandler[], revision = '1.0.0'): Promise<PublishToolsResult> {\n void tools;\n void revision;\n throw new Error(\n 'Environment-scoped effect publication was removed. Declare effects in the manifest and register live handlers with granular.registerEffects(environment.sandboxId, effects).',\n );\n }\n\n async publishEffect(effect: ToolWithHandler): Promise<PublishToolsResult> {\n void effect;\n throw new Error(\n 'Environment-scoped effect publication was removed. Use granular.registerEffect(environment.sandboxId, effect).',\n );\n }\n\n async publishEffects(effects: ToolWithHandler[]): Promise<PublishToolsResult> {\n void effects;\n throw new Error(\n 'Environment-scoped effect publication was removed. Use granular.registerEffects(environment.sandboxId, effects).',\n );\n }\n\n async unpublishEffect(name: string): Promise<PublishToolsResult> {\n void name;\n throw new Error(\n 'Environment-scoped effect publication was removed. Use granular.unregisterEffect(environment.sandboxId, effectName).',\n );\n }\n\n async unpublishAllEffects(): Promise<PublishToolsResult> {\n throw new Error(\n 'Environment-scoped effect publication was removed. Use granular.unregisterAllEffects(environment.sandboxId).',\n );\n }\n\n /**\n * Submit a job to execute code in the sandbox.\n *\n * The code can import typed classes from `./sandbox-tools`:\n * ```typescript\n * import { Author, Book, global_search } from './sandbox-tools';\n *\n * const authors = await Author.list({ limit: 10, saveAs: 'recent_authors' });\n * const tolkien = await Author.get({ path: 'author_tolkien' });\n * const bio = await tolkien.get_bio({ detailed: true });\n * const books = await tolkien.get_books();\n * ```\n *\n * Effect calls (instance methods, static methods, global functions) trigger\n * `effect.invoke` RPC back to the sandbox effect host, where the registered handlers\n * execute locally and return the result to the sandbox.\n */\n async submitJob(code: string, domainRevision?: string): Promise<Job> {\n let revision = domainRevision\n || this.currentDomainRevision\n || this.extractDomainRevisionFromDoc(this.client.doc)\n || undefined;\n\n if (!revision) {\n try {\n const summary = await this.getDomain();\n revision = summary.activeDomainRevision || this.extractDomainRevisionFromDoc(this.client.doc) || undefined;\n } catch {\n // Fall through to the existing error below.\n }\n }\n\n if (!revision) {\n throw new Error('No domain revision available. Register live effects or ensure the build schema is activated.');\n }\n\n const result = await this.client.call('job.submit', {\n domainRevision: revision,\n code,\n }) as { jobId?: string };\n\n if (!result.jobId) {\n throw new Error('Failed to submit job: no jobId returned');\n }\n\n const job = new JobImplementation(result.jobId, this.client, {\n code,\n domainRevision: revision,\n createdAt: Date.now(),\n });\n this.jobsMap.set(result.jobId, job);\n return job;\n }\n\n /**\n * Register a handler for a specific tool.\n * @param isInstance - If true, handler will receive (id, params) for instance method dispatch.\n */\n registerToolHandler(name: string, handler: ToolHandler | InstanceToolHandler, isInstance = false): void {\n this.toolHandlers.set(name, handler);\n if (isInstance) {\n this.instanceTools.add(name);\n } else {\n this.instanceTools.delete(name);\n }\n }\n\n /**\n * Respond to a prompt request from the sandbox\n */\n async answerPrompt(promptId: string, answer: unknown): Promise<void> {\n await this.client.call('prompt.answer', { promptId, answer, value: answer });\n }\n\n /**\n * Get the current list of available effects.\n * Consolidates effect declarations and live availability for the session.\n */\n getEffects(): EffectInfo[] {\n const doc: any = this.client.doc;\n const toolMap = new Map<string, ToolInfo>();\n\n // 1. Seed from domain packages (always present after domain activation)\n const domainPkg = doc.domain?.packages?.domain;\n if (domainPkg?.tools && Array.isArray(domainPkg.tools)) {\n for (const tool of domainPkg.tools) {\n if (!tool?.name) continue;\n toolMap.set(tool.name, {\n name: tool.name,\n description: tool.description,\n inputSchema: tool.inputSchema,\n outputSchema: tool.outputSchema,\n className: tool.className || undefined,\n static: tool.static || false,\n ready: false,\n publishedAt: undefined,\n });\n }\n }\n\n // 2. Overlay with live catalogs (has handler readiness info)\n const catalogs = doc.catalog?.rawToolCatalogs || {};\n for (const [clientId, catalog] of Object.entries(catalogs)) {\n const cat = catalog as any;\n if (!cat.tools) continue;\n\n for (const tool of cat.tools) {\n if (!tool?.name) continue;\n const existing = toolMap.get(tool.name);\n // Skip if we already have a newer catalog entry\n if (existing?.publishedAt && cat.publishedAt && existing.publishedAt > cat.publishedAt) continue;\n\n const isLocal = clientId === this.clientId;\n const ready = isLocal\n ? (this.effects.has(tool.name) || this.toolHandlers.has(tool.name) || this.instanceTools.has(tool.name))\n : true;\n\n toolMap.set(tool.name, {\n name: tool.name,\n description: tool.description,\n inputSchema: tool.inputSchema,\n outputSchema: tool.outputSchema,\n className: tool.className || existing?.className,\n static: tool.static || existing?.static || false,\n clientId,\n ready,\n publishedAt: cat.publishedAt,\n });\n }\n }\n\n return Array.from(toolMap.values());\n }\n\n /**\n * Backwards-compatible alias for `getEffects()`.\n */\n getTools(): ToolInfo[] {\n return this.getEffects();\n }\n\n /**\n * Subscribe to effect changes (added, removed, updated).\n * @param callback - Function called with change events\n * @returns Unsubscribe function\n */\n onEffectsChanged(callback: (event: EffectsChangedEvent) => void): () => void {\n const handler = (data: unknown) => callback(data as EffectsChangedEvent);\n if (!this.eventListeners.has('effects:changed')) {\n this.eventListeners.set('effects:changed', []);\n }\n this.eventListeners.get('effects:changed')!.push(handler);\n\n return () => {\n const listeners = this.eventListeners.get('effects:changed');\n if (listeners) {\n this.eventListeners.set('effects:changed', listeners.filter(h => h !== handler));\n }\n };\n }\n\n /**\n * Backwards-compatible alias for `onEffectsChanged()`.\n */\n onToolsChanged(callback: (event: ToolsChangedEvent) => void): () => void {\n const handler = (data: unknown) => callback(data as ToolsChangedEvent);\n if (!this.eventListeners.has('tools:changed')) {\n this.eventListeners.set('tools:changed', []);\n }\n this.eventListeners.get('tools:changed')!.push(handler);\n\n // Return unsubscribe function\n return () => {\n const listeners = this.eventListeners.get('tools:changed');\n if (listeners) {\n this.eventListeners.set('tools:changed', listeners.filter(h => h !== handler));\n }\n };\n }\n\n /**\n * Get the current domain state and available tools\n */\n async getDomain(): Promise<DomainState> {\n const summary = await this.client.call('domain.getSummary', {}) as DomainState;\n if (summary.activeDomainRevision) {\n this.currentDomainRevision = summary.activeDomainRevision;\n } else {\n this.currentDomainRevision = this.extractDomainRevisionFromDoc(this.client.doc);\n }\n return summary;\n }\n\n /**\n * Fetch a domain package part from the backend (no fallback).\n */\n private async fetchDomainPart(part: 'types' | 'docs'): Promise<string> {\n const result = await this.client.call('domain.fetchPackagePart', {\n moduleSpecifier: '@sandbox/domain',\n part,\n }) as { content?: string };\n return result?.content ?? '';\n }\n\n /**\n * Get TypeScript class declarations for the current domain (for LLM/code gen).\n */\n async getDomainTypes(): Promise<string> {\n return this.fetchDomainPart('types');\n }\n\n /**\n * Get Markdown documentation for the current domain (human-readable).\n */\n async getDomainDocs(): Promise<string> {\n return this.fetchDomainPart('docs');\n }\n\n /**\n * Get domain documentation for LLMs. Returns types (preferred) or fallback.\n */\n async getDomainDocumentation(): Promise<string> {\n const types = await this.getDomainTypes();\n if (types && (types.includes('export declare class') || types.includes('export async function'))) {\n return types;\n }\n const summary = await this.getDomain();\n return this.generateFallbackDocs(summary);\n }\n\n /**\n * Generate markdown documentation from the domain summary.\n * Class-aware: groups tools by class with property/relationship info.\n */\n private generateFallbackDocs(summary: DomainState): string {\n const classes = (summary as any).classes as Record<string, any> | undefined;\n const globalTools = (summary as any).globalTools as any[] | undefined;\n const tools = summary.tools || [];\n\n // If we have class data, produce class-aware docs\n if (classes && Object.keys(classes).length > 0) {\n let docs = '# Domain Documentation\\n\\n';\n docs += 'Import classes and tools from `./sandbox-tools`:\\n\\n';\n\n const classNames = Object.keys(classes).map(\n (c) => c.charAt(0).toUpperCase() + c.slice(1),\n );\n const globalNames = (globalTools || []).map((t: any) => t.name);\n const allImports = [...classNames, ...globalNames].join(', ');\n docs += `\\`\\`\\`typescript\\nimport { ${allImports} } from \"./sandbox-tools\";\\n\\`\\`\\`\\n\\n`;\n\n for (const [className, cls] of Object.entries(classes)) {\n const TsName = className.charAt(0).toUpperCase() + className.slice(1);\n docs += `## ${TsName}\\n\\n`;\n if (cls.description) docs += `${cls.description}\\n\\n`;\n\n if (cls.properties?.length > 0) {\n docs += '**Properties:**\\n';\n for (const p of cls.properties) {\n docs += `- \\`${p.name}\\`${p.description ? ': ' + p.description : ''}\\n`;\n }\n docs += '\\n';\n }\n\n if (cls.relationships?.length > 0) {\n docs += '**Relationships:**\\n';\n for (const r of cls.relationships) {\n const fModel = r.foreignModel?.charAt(0).toUpperCase() + r.foreignModel?.slice(1);\n docs += `- \\`${r.localSubmodel}\\` → ${fModel} (${r.kind})\\n`;\n }\n docs += '\\n';\n }\n\n if (cls.methods?.length > 0) {\n docs += '**Methods:**\\n';\n for (const m of cls.methods) {\n docs += `- \\`${TsName}.${m.name}(input)\\``;\n if (m.description) docs += `: ${m.description}`;\n docs += '\\n';\n if (m.inputSchema?.properties) {\n docs += ' ```json\\n ' + JSON.stringify(m.inputSchema, null, 2).replace(/\\n/g, '\\n ') + '\\n ```\\n';\n }\n }\n docs += '\\n';\n }\n }\n\n if (globalTools && globalTools.length > 0) {\n docs += '## Global Effects\\n\\n';\n for (const tool of globalTools) {\n docs += `### ${tool.name}\\n\\n`;\n if (tool.description) docs += `${tool.description}\\n\\n`;\n if (tool.inputSchema) {\n docs += '**Input Schema:**\\n```json\\n';\n docs += JSON.stringify(tool.inputSchema, null, 2);\n docs += '\\n```\\n\\n';\n }\n }\n }\n\n return docs;\n }\n\n // Legacy flat fallback\n if (!tools || tools.length === 0) {\n return 'No effects available in this domain.';\n }\n\n let docs = '# Available Effects\\n\\n';\n docs += 'Import effects from `./sandbox-tools` and call them with await:\\n\\n';\n docs += '```typescript\\nimport { tools } from \"./sandbox-tools\";\\n\\n';\n docs += '// Example:\\n';\n docs += `const result = await tools.${tools[0]?.name || 'example'}(input);\\n`;\n docs += '```\\n\\n';\n\n for (const tool of tools) {\n docs += `## ${tool.name}\\n\\n`;\n if (tool.description) {\n docs += `${tool.description}\\n\\n`;\n }\n if (tool.inputSchema) {\n docs += '**Input Schema:**\\n```json\\n';\n docs += JSON.stringify(tool.inputSchema, null, 2);\n docs += '\\n```\\n\\n';\n }\n if (tool.outputSchema) {\n docs += '**Output Schema:**\\n```json\\n';\n docs += JSON.stringify(tool.outputSchema, null, 2);\n docs += '\\n```\\n\\n';\n }\n }\n\n return docs;\n }\n\n /**\n * Close the session and disconnect from the sandbox\n */\n async disconnect(): Promise<void> {\n try {\n await this.client.call('client.goodbye', {\n clientId: this.clientId,\n timestamp: Date.now(),\n });\n } catch (error) {\n // Best-effort goodbye: abrupt network failures can prevent RPC.\n }\n this.client.disconnect();\n }\n\n // --- Event Handling ---\n\n /**\n * Subscribe to session events\n */\n on(event: string, handler: (data: unknown) => void): void {\n if (!this.eventListeners.has(event)) {\n this.eventListeners.set(event, []);\n }\n this.eventListeners.get(event)!.push(handler);\n }\n\n /**\n * Unsubscribe from session events\n */\n off(event: string, handler: (data: unknown) => void): void {\n const handlers = this.eventListeners.get(event);\n if (handlers) {\n this.eventListeners.set(event, handlers.filter(h => h !== handler));\n }\n }\n\n // --- Internal ---\n\n private setupToolInvokeHandler(): void {\n this.client.registerRpcHandler('tool.invoke', async (params: unknown) => {\n const { callId, toolName, input } = params as ToolInvokeParams;\n\n this.emit('effect:invoke', { callId, effectKey: toolName, toolName, input });\n this.emit('tool:invoke', { callId, toolName, input });\n\n const handler = this.toolHandlers.get(toolName);\n if (!handler) {\n // Send error result back\n await this.client.call('tool.result', {\n callId,\n error: { code: 'TOOL_NOT_FOUND', message: `Tool handler not found: ${toolName}` },\n });\n return;\n }\n\n try {\n let result: unknown;\n const invocationContext = this.buildLegacyEffectContext();\n // Instance methods receive _objectId from the sandbox runtime\n if (this.instanceTools.has(toolName) && input && typeof input === 'object' && '_objectId' in input) {\n const { _objectId, ...restParams } = input as { _objectId: string;[key: string]: any };\n result = await (handler as InstanceToolHandler)(_objectId, restParams, invocationContext);\n } else {\n result = await (handler as ToolHandler)(input, invocationContext);\n }\n this.emit('effect:result', { callId, effectKey: toolName, result });\n this.emit('tool:result', { callId, result });\n\n // Send result back to sandbox\n await this.client.call('tool.result', {\n callId,\n result,\n });\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n this.emit('effect:result', { callId, effectKey: toolName, error: errorMessage });\n this.emit('tool:result', { callId, error: errorMessage });\n\n await this.client.call('tool.result', {\n callId,\n error: { code: 'TOOL_EXECUTION_FAILED', message: errorMessage },\n });\n }\n });\n }\n\n private setupEventHandlers(): void {\n // Pipe client events to session events\n this.client.on('open', (payload: unknown) => this.emit('open', payload || {}));\n this.client.on('sync', (doc: unknown) => {\n this.currentDomainRevision = this.extractDomainRevisionFromDoc(doc);\n this.emit('sync', doc);\n this.checkForToolChanges();\n });\n const emitPrompt = (payload: unknown) => {\n const raw = payload as {\n prompt?: Prompt;\n id?: string;\n promptId?: string;\n type?: string;\n promptType?: string;\n title?: string;\n message?: string;\n options?: Prompt['options'];\n defaultValue?: unknown;\n placeholder?: string;\n allowEmpty?: boolean;\n metadata?: Record<string, unknown>;\n };\n const prompt: Prompt = raw.prompt || {\n id: typeof raw.id === 'string' ? raw.id : String(raw.promptId || ''),\n type: (raw.type === 'confirm' || raw.type === 'choice' || raw.type === 'input'\n ? raw.type\n : raw.promptType === 'confirm' || raw.promptType === 'choice'\n ? raw.promptType\n : 'input'),\n title: typeof raw.title === 'string' ? raw.title : 'Input required',\n message: typeof raw.message === 'string' ? raw.message : '',\n options: raw.options,\n defaultValue: raw.defaultValue,\n placeholder: raw.placeholder,\n allowEmpty: raw.allowEmpty,\n metadata: raw.metadata,\n };\n this.emit('prompt', prompt);\n };\n this.client.on('prompt', emitPrompt);\n this.client.on('prompt.request', emitPrompt);\n this.client.on('disconnect', (payload: unknown) => this.emit('disconnect', payload || {}));\n this.client.on('reconnect_error', (payload: unknown) => this.emit('reconnect_error', payload || {}));\n\n // Job status updates\n this.client.on('job.status', (data: unknown) => {\n this.emit('job:status', data);\n });\n\n // Exec events\n this.client.on('exec.completed', (data: unknown) => {\n this.emit('exec:completed', data);\n });\n this.client.on('exec.progress', (data: unknown) => {\n this.emit('exec:progress', data);\n });\n }\n\n protected emit(event: string, data: unknown): void {\n const handlers = this.eventListeners.get(event);\n if (handlers) {\n handlers.forEach(h => h(data));\n }\n }\n\n /**\n * Check for changes in the effect catalog and emit change events if needed.\n */\n private checkForToolChanges() {\n const currentTools = this.getEffects();\n const currentMap = new Map(currentTools.map(t => [t.name, t]));\n\n const added: string[] = [];\n const removed: string[] = [];\n\n // Check for added or updated tools\n for (const [name, tool] of currentMap) {\n if (!this.lastKnownTools.has(name)) {\n added.push(name);\n }\n }\n\n // Check for removed tools\n for (const name of this.lastKnownTools.keys()) {\n if (!currentMap.has(name)) {\n removed.push(name);\n }\n }\n\n if (added.length > 0 || removed.length > 0) {\n this.lastKnownTools = currentMap;\n this.emit('effects:changed', {\n effects: currentTools,\n tools: currentTools,\n added,\n removed\n });\n this.emit('tools:changed', {\n tools: currentTools,\n added,\n removed\n });\n }\n }\n}\n\n// --- Job Implementation ---\n\nconst MAX_FEEDBACK_STRING_LENGTH = 16_000;\nconst MAX_FEEDBACK_LOG_LINES = 100;\nconst MAX_FEEDBACK_TOOL_CALLS = 50;\nconst MAX_FEEDBACK_ARRAY_ITEMS = 50;\nconst MAX_FEEDBACK_OBJECT_KEYS = 50;\nconst MAX_FEEDBACK_DEPTH = 6;\n\ntype JsonSafeValue =\n | string\n | number\n | boolean\n | null\n | JsonSafeValue[]\n | { [key: string]: JsonSafeValue };\n\nfunction truncateFeedbackString(value: string, maxLength = MAX_FEEDBACK_STRING_LENGTH): string {\n if (value.length <= maxLength) {\n return value;\n }\n return `${value.slice(0, maxLength)}...[truncated ${value.length - maxLength} chars]`;\n}\n\nfunction normalizeJobStatus(status: unknown): JobStatus {\n if (typeof status !== 'string') {\n return 'queued';\n }\n\n switch (status) {\n case 'completed':\n return 'succeeded';\n case 'failed':\n case 'running':\n case 'queued':\n case 'awaitingTool':\n case 'awaitingHuman':\n case 'succeeded':\n case 'timeout':\n case 'canceled':\n return status;\n default:\n return 'queued';\n }\n}\n\nfunction sanitizeFeedbackValue(\n value: unknown,\n depth = 0,\n seen = new WeakSet<object>(),\n): JsonSafeValue {\n if (depth >= MAX_FEEDBACK_DEPTH) {\n return '[Max depth reached]';\n }\n\n if (value === null || value === undefined) {\n return null;\n }\n\n if (typeof value === 'string') {\n return truncateFeedbackString(value);\n }\n\n if (typeof value === 'number' || typeof value === 'boolean') {\n return value;\n }\n\n if (typeof value === 'bigint') {\n return truncateFeedbackString(value.toString());\n }\n\n if (value instanceof Error) {\n return {\n name: truncateFeedbackString(value.name),\n message: truncateFeedbackString(value.message),\n stack: truncateFeedbackString(value.stack || ''),\n };\n }\n\n if (value instanceof Date) {\n return value.toISOString();\n }\n\n if (Array.isArray(value)) {\n return value\n .slice(0, MAX_FEEDBACK_ARRAY_ITEMS)\n .map((entry) => sanitizeFeedbackValue(entry, depth + 1, seen));\n }\n\n if (typeof value === 'object') {\n if (seen.has(value as object)) {\n return '[Circular]';\n }\n seen.add(value as object);\n\n const entries = Object.entries(value as Record<string, unknown>).slice(0, MAX_FEEDBACK_OBJECT_KEYS);\n const sanitized: Record<string, JsonSafeValue> = {};\n\n for (const [key, entryValue] of entries) {\n sanitized[key] = sanitizeFeedbackValue(entryValue, depth + 1, seen);\n }\n\n return sanitized;\n }\n\n return truncateFeedbackString(String(value));\n}\n\nclass JobImplementation implements Job {\n public id: string;\n public client: WSClient;\n public status: JobStatus = 'queued';\n\n private _resultPromise: Promise<unknown>;\n private _resolveResult!: (value: unknown) => void;\n private _rejectResult!: (reason: unknown) => void;\n private eventListeners: Map<string, Array<(data: unknown) => void>> = new Map();\n private metadata: JobFeedbackMetadata;\n\n constructor(\n id: string,\n client: WSClient,\n initialState: {\n code: string;\n domainRevision?: string;\n createdAt: number;\n },\n ) {\n this.id = id;\n this.client = client;\n this.metadata = {\n source: 'sdk',\n status: 'queued',\n code: truncateFeedbackString(initialState.code),\n domainRevision: initialState.domainRevision,\n createdAt: initialState.createdAt,\n stdout: [],\n stderr: [],\n toolCalls: [],\n };\n\n this._resultPromise = new Promise((resolve, reject) => {\n this._resolveResult = resolve;\n this._rejectResult = reject;\n });\n\n // Listen to exec events\n this.client.on('exec.completed', (data: unknown) => {\n const execData = data as { execId?: string; jobId?: string; result?: unknown; error?: unknown };\n if (execData.execId === id || execData.jobId === id) {\n if (execData.error) {\n this.finalize('failed', undefined, execData.error);\n } else {\n this.finalize('succeeded', execData.result);\n }\n this.emit('status', this.status);\n }\n });\n\n this.client.on('exec.progress', (data: unknown) => {\n const progressData = data as { execId?: string; jobId?: string; stdout?: string; stderr?: string };\n if (progressData.execId === id || progressData.jobId === id) {\n if (progressData.stdout) {\n this.markStarted();\n this.metadata.stdout = [...this.metadata.stdout, truncateFeedbackString(progressData.stdout)].slice(-MAX_FEEDBACK_LOG_LINES);\n this.emit('stdout', progressData.stdout);\n }\n if (progressData.stderr) {\n this.markStarted();\n this.metadata.stderr = [...this.metadata.stderr, truncateFeedbackString(progressData.stderr)].slice(-MAX_FEEDBACK_LOG_LINES);\n this.emit('stderr', progressData.stderr);\n }\n }\n });\n\n // Also listen to specific job events if available\n this.client.on(`job.${id}.status`, (status: unknown) => {\n const normalizedStatus = normalizeJobStatus(status);\n this.status = normalizedStatus;\n this.metadata.status = normalizedStatus;\n if (normalizedStatus === 'running') {\n this.markStarted();\n }\n if (normalizedStatus === 'failed' || normalizedStatus === 'timeout' || normalizedStatus === 'canceled') {\n this.finalize(normalizedStatus);\n }\n if (normalizedStatus === 'succeeded') {\n this.finalize('succeeded');\n }\n this.emit('status', normalizedStatus);\n });\n\n this.client.on(`job.${id}.stdout`, (line: unknown) => {\n this.markStarted();\n this.metadata.stdout = [...this.metadata.stdout, truncateFeedbackString(String(line))].slice(-MAX_FEEDBACK_LOG_LINES);\n this.emit('stdout', line);\n });\n\n this.client.on(`job.${id}.stderr`, (line: unknown) => {\n this.markStarted();\n this.metadata.stderr = [...this.metadata.stderr, truncateFeedbackString(String(line))].slice(-MAX_FEEDBACK_LOG_LINES);\n this.emit('stderr', line);\n });\n\n this.client.on(`job.${id}.result`, (result: unknown) => {\n this.finalize('succeeded', result);\n });\n\n this.client.on(`job.${id}.error`, (error: unknown) => {\n this.finalize('failed', undefined, error);\n });\n\n this.client.on('job.status', (data: unknown) => {\n const jobData = data as { jobId?: string; status?: unknown };\n if (jobData.jobId !== id) {\n return;\n }\n const normalizedStatus = normalizeJobStatus(jobData.status);\n this.status = normalizedStatus;\n this.metadata.status = normalizedStatus;\n if (normalizedStatus === 'running') {\n this.markStarted();\n }\n this.emit('status', normalizedStatus);\n });\n\n // Listen for job.completed and job.failed events (generic events from backend)\n this.client.on('job.completed', (data: unknown) => {\n const jobData = data as { jobId?: string; result?: unknown };\n if (jobData.jobId === id) {\n this.finalize('succeeded', jobData.result);\n this.emit('status', this.status);\n }\n });\n\n this.client.on('job.failed', (data: unknown) => {\n const jobData = data as { jobId?: string; error?: unknown };\n if (jobData.jobId === id) {\n this.finalize('failed', undefined, jobData.error || new Error('Job failed'));\n this.emit('status', this.status);\n }\n });\n\n // Live tool call tracking (broadcast by backend to all clients)\n this.client.on('tool.call.start', (data: unknown) => {\n const d = data as { jobId?: string; callId?: string; toolName?: string; input?: unknown; timestamp?: number };\n if (d.jobId === id) {\n this.metadata.toolCalls = this.upsertToolCall({\n callId: d.callId,\n toolName: d.toolName,\n input: sanitizeFeedbackValue(d.input),\n startedAt: d.timestamp || Date.now(),\n });\n this.emit('toolCallStart', { callId: d.callId, toolName: d.toolName, input: d.input, timestamp: d.timestamp });\n }\n });\n\n this.client.on('tool.call.end', (data: unknown) => {\n const d = data as { jobId?: string; callId?: string; toolName?: string; result?: unknown; error?: string; durationMs?: number; timestamp?: number };\n if (d.jobId === id) {\n const completedAt = d.timestamp || Date.now();\n this.metadata.toolCalls = this.upsertToolCall({\n callId: d.callId,\n toolName: d.toolName,\n output: sanitizeFeedbackValue(d.result),\n error: d.error ? truncateFeedbackString(d.error) : undefined,\n completedAt,\n durationMs: typeof d.durationMs === 'number' ? d.durationMs : undefined,\n });\n this.emit('toolCallEnd', { callId: d.callId, toolName: d.toolName, result: d.result, error: d.error, durationMs: d.durationMs, timestamp: d.timestamp });\n }\n });\n }\n\n get result(): Promise<unknown> {\n return this._resultPromise;\n }\n\n async leaveFeedback(input: JobFeedbackInput): Promise<JobFeedbackRecord> {\n const sentiment = input.sentiment;\n if (sentiment !== 'good' && sentiment !== 'bad') {\n throw new Error('Job feedback sentiment must be \"good\" or \"bad\".');\n }\n\n const comment = typeof input.comment === 'string' ? input.comment.trim() : '';\n const response = await this.client.call('job.feedback', {\n jobId: this.id,\n sentiment,\n comment: comment || undefined,\n metadata: this.buildFeedbackMetadata(),\n }) as JobFeedbackRecord;\n\n this.emit('feedback', response);\n return response;\n }\n\n on(event: string, handler: (data: unknown) => void): void {\n if (!this.eventListeners.has(event)) {\n this.eventListeners.set(event, []);\n }\n this.eventListeners.get(event)!.push(handler);\n }\n\n private buildFeedbackMetadata(): JobFeedbackMetadata {\n const startedAt = this.metadata.startedAt;\n const completedAt = this.metadata.completedAt;\n return {\n ...this.metadata,\n durationMs: typeof startedAt === 'number' && typeof completedAt === 'number'\n ? completedAt - startedAt\n : this.metadata.durationMs ?? null,\n stdout: [...this.metadata.stdout],\n stderr: [...this.metadata.stderr],\n toolCalls: this.metadata.toolCalls.slice(0, MAX_FEEDBACK_TOOL_CALLS).map((call) => ({ ...call })),\n };\n }\n\n private markStarted(timestamp = Date.now()): void {\n if (!this.metadata.startedAt) {\n this.metadata.startedAt = timestamp;\n }\n if (this.status === 'queued') {\n this.status = 'running';\n }\n if (this.metadata.status === 'queued') {\n this.metadata.status = 'running';\n }\n }\n\n private finalize(status: JobStatus, result?: unknown, error?: unknown): void {\n if (!this.metadata.startedAt) {\n this.metadata.startedAt = Date.now();\n }\n\n this.status = status;\n this.metadata.status = status;\n this.metadata.completedAt = this.metadata.completedAt || Date.now();\n this.metadata.durationMs = this.metadata.completedAt - this.metadata.startedAt;\n\n if (result !== undefined) {\n this.metadata.result = sanitizeFeedbackValue(result);\n this._resolveResult(result);\n }\n\n if (error !== undefined) {\n const message = error instanceof Error ? error.message : String(error);\n this.metadata.error = truncateFeedbackString(message);\n this._rejectResult(error);\n }\n }\n\n private upsertToolCall(next: Partial<JobFeedbackToolCall> & { callId?: string; toolName?: string }): JobFeedbackToolCall[] {\n const callId = next.callId || `tool-call-${Date.now()}`;\n const existingIndex = this.metadata.toolCalls.findIndex((entry) => entry.callId === callId);\n const existing = existingIndex >= 0 ? this.metadata.toolCalls[existingIndex] : undefined;\n const merged: JobFeedbackToolCall = {\n ...existing,\n ...next,\n callId,\n toolName: next.toolName || existing?.toolName,\n };\n\n if (\n merged.durationMs === undefined\n && typeof merged.startedAt === 'number'\n && typeof merged.completedAt === 'number'\n ) {\n merged.durationMs = merged.completedAt - merged.startedAt;\n }\n\n if (existingIndex >= 0) {\n const updated = [...this.metadata.toolCalls];\n updated[existingIndex] = merged;\n return updated.slice(-MAX_FEEDBACK_TOOL_CALLS);\n }\n\n return [...this.metadata.toolCalls, merged].slice(-MAX_FEEDBACK_TOOL_CALLS);\n }\n\n protected emit(event: string, data: unknown): void {\n const handlers = this.eventListeners.get(event);\n if (handlers) {\n handlers.forEach(h => h(data));\n }\n }\n}\n","import type { EndpointMode } from \"./types\";\n\nexport const LOCAL_API_URL = \"ws://localhost:8787/granular\";\nexport const PRODUCTION_API_URL = \"wss://cf-api-gateway.arthur6084.workers.dev/granular\";\nexport const DEFAULT_LOCAL_API_KEY = \"gn_sk_tenant_default_principal_local_e2e_00000000\";\n\nexport const LOCAL_AUTH_URL = \"http://localhost:3000\";\nexport const PRODUCTION_AUTH_URL = \"https://app.granular.software\";\n\ntype ResolvedEndpointMode = \"local\" | \"production\";\n\nfunction readEnv(name: string): string | undefined {\n if (typeof process === \"undefined\" || !process.env) return undefined;\n return process.env[name];\n}\n\nfunction normalizeMode(value?: string): EndpointMode | undefined {\n if (!value) return undefined;\n const normalized = value.trim().toLowerCase();\n if (normalized === \"local\") return \"local\";\n if (normalized === \"prod\" || normalized === \"production\") return \"production\";\n if (normalized === \"auto\") return \"auto\";\n return undefined;\n}\n\nfunction isTruthy(value?: string): boolean {\n if (!value) return false;\n const normalized = value.trim().toLowerCase();\n return normalized === \"1\" || normalized === \"true\" || normalized === \"yes\" || normalized === \"on\";\n}\n\nexport function isLocalApiUrl(url: string): boolean {\n try {\n const parsed = new URL(url);\n return parsed.hostname === \"localhost\" || parsed.hostname === \"127.0.0.1\";\n } catch {\n return false;\n }\n}\n\nexport function resolveAuthTokenForApiUrl(authToken: string, apiUrl: string): string {\n if (\n !authToken.startsWith(\"sk_\")\n || !isLocalApiUrl(apiUrl)\n || isTruthy(readEnv(\"GRANULAR_DISABLE_LOCAL_API_KEY_FALLBACK\"))\n ) {\n return authToken;\n }\n\n const override = readEnv(\"GRANULAR_LOCAL_API_KEY\")?.trim();\n return override || DEFAULT_LOCAL_API_KEY;\n}\n\nexport function resolveEndpointMode(explicitMode?: EndpointMode): ResolvedEndpointMode {\n const explicit = normalizeMode(explicitMode);\n if (explicit === \"local\" || explicit === \"production\") {\n return explicit;\n }\n\n const envMode = normalizeMode(readEnv(\"GRANULAR_ENDPOINT_MODE\") || readEnv(\"GRANULAR_ENV\"));\n if (envMode === \"local\" || envMode === \"production\") {\n return envMode;\n }\n\n if (isTruthy(readEnv(\"GRANULAR_USE_LOCAL_ENDPOINTS\")) || isTruthy(readEnv(\"GRANULAR_LOCAL\"))) {\n return \"local\";\n }\n if (isTruthy(readEnv(\"GRANULAR_USE_PRODUCTION_ENDPOINTS\")) || isTruthy(readEnv(\"GRANULAR_PROD\"))) {\n return \"production\";\n }\n\n return readEnv(\"NODE_ENV\") === \"development\" ? \"local\" : \"production\";\n}\n\nexport function resolveApiUrl(explicitApiUrl?: string, mode?: EndpointMode): string {\n if (explicitApiUrl) {\n return explicitApiUrl;\n }\n\n return resolveEndpointMode(mode) === \"local\" ? LOCAL_API_URL : PRODUCTION_API_URL;\n}\n\nexport function resolveAuthUrl(explicitAuthUrl?: string, mode?: EndpointMode): string {\n if (explicitAuthUrl) {\n return explicitAuthUrl;\n }\n\n return resolveEndpointMode(mode) === \"local\" ? LOCAL_AUTH_URL : PRODUCTION_AUTH_URL;\n}\n","import { normalizeEffectBehaviorSummary } from '@granular-software/metamodel-effect-behaviors';\nimport type {\n EffectHandlerContext,\n EffectInvocationMode,\n ManifestEffectMetamodelSpec,\n ResolvedEffectBehaviors,\n ToolWithHandler,\n} from './types';\n\ntype EffectRuntimeRequest = {\n effectKey: string;\n effectName: string;\n input: unknown;\n context?: EffectHandlerContext;\n};\n\ntype ResolvedHandler = {\n effect: ToolWithHandler;\n mode: EffectInvocationMode;\n handler: ToolWithHandler['handler'];\n};\n\nfunction computeEffectKey(effect: {\n name: string;\n className?: string | null;\n static?: boolean;\n}): string {\n const attachedClass = effect.className?.trim();\n if (!attachedClass) {\n return `global:${effect.name}`;\n }\n return effect.static\n ? `class:${attachedClass}:static:${effect.name}`\n : `class:${attachedClass}:instance:${effect.name}`;\n}\n\nexport function normalizeEffectBehaviors(\n value?: ManifestEffectMetamodelSpec | ResolvedEffectBehaviors | null,\n): ResolvedEffectBehaviors {\n return (normalizeEffectBehaviorSummary(\n value as Record<string, unknown> | null | undefined,\n ) || {}) as ResolvedEffectBehaviors;\n}\n\nfunction resolveInvocationMode(context?: EffectHandlerContext): EffectInvocationMode {\n const mode = context?.invocation?.mode;\n if (mode === 'dryRun' || mode === 'reverse') {\n return mode;\n }\n return 'execute';\n}\n\nfunction resolveReverseEffect(\n effectMap: Map<string, ToolWithHandler>,\n currentEffect: ToolWithHandler,\n request: EffectRuntimeRequest,\n behaviors: ResolvedEffectBehaviors,\n): ToolWithHandler | undefined {\n const explicitReverseHandler = request.context?.invocation?.reverseHandler?.trim();\n const configuredReverseHandler = behaviors.reverse?.handler?.trim();\n const reverseHandler = explicitReverseHandler || configuredReverseHandler;\n if (!reverseHandler) {\n return undefined;\n }\n\n if (reverseHandler.includes(':')) {\n return effectMap.get(reverseHandler);\n }\n\n const directMatch = effectMap.get(reverseHandler);\n if (directMatch) {\n return directMatch;\n }\n\n const candidateKeys = [\n computeEffectKey({\n name: reverseHandler,\n className: currentEffect.className,\n static: currentEffect.static,\n }),\n computeEffectKey({\n name: reverseHandler,\n }),\n ];\n\n for (const candidateKey of candidateKeys) {\n const candidate = effectMap.get(candidateKey);\n if (candidate) {\n return candidate;\n }\n }\n\n return undefined;\n}\n\nfunction resolveHandlerForMode(\n effectMap: Map<string, ToolWithHandler>,\n effect: ToolWithHandler,\n request: EffectRuntimeRequest,\n): ResolvedHandler {\n const behaviors = normalizeEffectBehaviors(request.context?.behaviors || effect.metamodels || undefined);\n const mode = resolveInvocationMode(request.context);\n\n if (mode === 'dryRun') {\n if (effect.dryRunHandler) {\n return { effect, mode, handler: effect.dryRunHandler };\n }\n if (behaviors.dryRun?.enabled) {\n return { effect, mode, handler: effect.handler };\n }\n throw new Error(`Dry run is not supported for ${request.effectKey}`);\n }\n\n if (mode === 'reverse') {\n if (effect.reverseHandler) {\n return { effect, mode, handler: effect.reverseHandler };\n }\n\n const reverseEffect = resolveReverseEffect(effectMap, effect, request, behaviors);\n if (reverseEffect) {\n return {\n effect: reverseEffect,\n mode,\n handler: reverseEffect.reverseHandler || reverseEffect.handler,\n };\n }\n\n throw new Error(`Reverse execution is not supported for ${request.effectKey}`);\n }\n\n return { effect, mode, handler: effect.handler };\n}\n\nexport async function invokeRegisteredEffect(\n effectMap: Map<string, ToolWithHandler>,\n request: EffectRuntimeRequest,\n): Promise<unknown> {\n const effect = effectMap.get(request.effectKey);\n if (!effect) {\n throw new Error(`Effect handler not found: ${request.effectKey}`);\n }\n\n const resolved = resolveHandlerForMode(effectMap, effect, request);\n const context: EffectHandlerContext = {\n ...(request.context || {}),\n behaviors: normalizeEffectBehaviors(request.context?.behaviors || effect.metamodels || undefined),\n invocation: {\n mode: resolved.mode,\n sourceEffectKey: request.effectKey,\n sourceEffectName: request.effectName,\n ...(request.context?.invocation?.reverseHandler\n ? { reverseHandler: request.context.invocation.reverseHandler }\n : {}),\n },\n } as EffectHandlerContext;\n\n if (\n resolved.effect.className &&\n !resolved.effect.static &&\n request.input &&\n typeof request.input === 'object' &&\n '_objectId' in (request.input as Record<string, unknown>)\n ) {\n const { _objectId, ...rest } = request.input as Record<string, unknown> & { _objectId: string };\n return (resolved.handler as any)(_objectId, rest, context);\n }\n\n return (resolved.handler as any)(request.input, context);\n}\n","import type {\n EffectMetamodelManifestSpec,\n FieldMetamodelManifestSpec,\n MetamodelGraphqlMutation,\n ModelMetamodelManifestSpec,\n} from '@granular-software/metamodel-core';\nimport { DEFAULT_METAMODEL_PACKAGES } from '@granular-software/metamodel-preset-default';\n\nexport function buildFieldMetamodelMutations(\n fieldPath: string,\n spec: FieldMetamodelManifestSpec,\n): MetamodelGraphqlMutation[] {\n return DEFAULT_METAMODEL_PACKAGES.flatMap((pkg) =>\n pkg.manifest?.buildFieldMutations?.(fieldPath, spec) || [],\n );\n}\n\nexport function buildModelMetamodelMutations(\n modelPath: string,\n spec: ModelMetamodelManifestSpec,\n): MetamodelGraphqlMutation[] {\n return DEFAULT_METAMODEL_PACKAGES.flatMap((pkg) =>\n pkg.manifest?.buildModelMutations?.(modelPath, spec) || [],\n );\n}\n\nexport function buildEffectMetamodelMutations(\n toolPath: string,\n spec?: EffectMetamodelManifestSpec,\n): MetamodelGraphqlMutation[] {\n if (!spec) return [];\n return DEFAULT_METAMODEL_PACKAGES.flatMap((pkg) =>\n pkg.manifest?.buildEffectMutations?.(toolPath, spec) || [],\n );\n}\n","import { WSClient } from './ws-client';\nimport { Session, ToolWithHandler, PublishToolsResult } from './session';\nimport { resolveApiUrl, resolveAuthTokenForApiUrl } from './endpoints';\nimport { invokeRegisteredEffect } from './effect-runtime';\nimport {\n buildEffectMetamodelMutations,\n buildFieldMetamodelMutations,\n buildModelMetamodelMutations,\n} from './manifest-metamodels';\nimport type {\n EffectMetamodelManifestSpec,\n FieldMetamodelManifestSpec,\n} from '@granular-software/metamodel-core';\nimport type {\n AccessTokenProvider,\n GranularOptions,\n ConnectOptions,\n SessionHeapSnapshot,\n RecordUserOptions,\n User,\n Subject,\n Sandbox,\n SandboxListResponse,\n CreateSandboxData,\n PermissionProfile,\n PermissionProfileListResponse,\n CreatePermissionProfileData,\n EnvironmentData,\n EnvironmentListResponse,\n CreateEnvironmentData,\n Assignment,\n AssignmentListResponse,\n DeleteResponse,\n GraphQLResult,\n RelationshipInfo,\n ModelRef,\n DefineRelationshipOptions,\n ManifestContent,\n ManifestOperation,\n ManifestPropertySpec,\n ManifestImport,\n ManifestEffectDeclaration,\n RecordObjectOptions,\n RecordObjectResult,\n RecordImport,\n EnvironmentRecordImportSummary,\n RecordImportStatus,\n ToolInfo,\n ToolSchema,\n ToolsChangedEvent,\n ConversationSessionInfo,\n WSDisconnectInfo,\n WSReconnectErrorInfo,\n} from './types';\n\n// ── Built-in modules ──\n\n/**\n * Standard modules: base types available via `imports: [{ alias: \"@std\", name: \"standard_modules\" }]`\n */\nconst STANDARD_MODULES_OPERATIONS: ManifestOperation[] = [\n { create: 'entity', has: { id: { value: 'auto-generated' }, createdAt: { value: undefined } } },\n { create: 'class', extends: 'entity', has: {} },\n { create: 'user', extends: 'entity', has: { email: { value: undefined }, firstName: { value: undefined }, lastName: { value: undefined } } },\n { create: 'company', extends: 'entity', has: { name: { value: undefined }, website: { value: undefined } } },\n { create: 'string', has: { value: { value: undefined } } },\n { create: 'number', has: { value: { value: 0 } } },\n { create: 'boolean', has: { value: { value: false } } },\n { create: 'tool_parameter', has: { name: { value: undefined }, type: { value: 'string' }, description: { value: undefined }, required: { value: false } } },\n];\n\n/**\n * Registry of built-in modules that can be imported in manifests\n */\nconst BUILTIN_MODULES: Record<string, ManifestOperation[]> = {\n 'standard_modules': STANDARD_MODULES_OPERATIONS,\n};\n\nfunction computeEffectKey(effect: {\n name: string;\n className?: string | null;\n static?: boolean;\n}): string {\n const attachedClass = effect.className?.trim();\n if (!attachedClass) {\n return `global:${effect.name}`;\n }\n return effect.static\n ? `class:${attachedClass}:static:${effect.name}`\n : `class:${attachedClass}:instance:${effect.name}`;\n}\n\nfunction buildEffectHostUrl(\n apiUrl: string,\n sandboxId: string,\n effectClientId: string,\n clientId: string,\n): string {\n const url = new URL(apiUrl);\n\n if (url.pathname.endsWith('/granular/ws/connect')) {\n url.pathname = url.pathname.replace(/\\/ws\\/connect$/, '/effects/connect');\n } else if (url.pathname.endsWith('/granular')) {\n url.pathname = `${url.pathname.replace(/\\/$/, '')}/effects/connect`;\n } else if (url.pathname.endsWith('/v2/ws/connect')) {\n url.pathname = url.pathname.replace(/\\/ws\\/connect$/, '/effects/connect');\n } else if (url.pathname.endsWith('/v2/ws')) {\n url.pathname = url.pathname.replace(/\\/ws$/, '/effects/connect');\n } else if (url.pathname.endsWith('/ws/connect')) {\n url.pathname = url.pathname.replace(/\\/ws\\/connect$/, '/effects/connect');\n } else if (url.pathname.endsWith('/ws')) {\n url.pathname = url.pathname.replace(/\\/ws$/, '/effects/connect');\n } else {\n url.pathname = '/granular/effects/connect';\n }\n\n url.search = '';\n url.hash = '';\n url.searchParams.set('sandboxId', sandboxId);\n url.searchParams.set('effectClientId', effectClientId);\n url.searchParams.set('clientId', clientId);\n return url.toString();\n}\n\nfunction createEmptyHeapSnapshot(now = Date.now()): SessionHeapSnapshot {\n return {\n entriesByPath: {},\n listsByName: {},\n variablesByName: {},\n updatedAt: now,\n };\n}\n\nfunction normalizeHeapSnapshot(raw: unknown): SessionHeapSnapshot {\n if (!raw || typeof raw !== 'object') {\n return createEmptyHeapSnapshot();\n }\n\n const heap = raw as Partial<SessionHeapSnapshot>;\n return {\n entriesByPath: heap.entriesByPath && typeof heap.entriesByPath === 'object'\n ? JSON.parse(JSON.stringify(heap.entriesByPath))\n : {},\n listsByName: heap.listsByName && typeof heap.listsByName === 'object'\n ? JSON.parse(JSON.stringify(heap.listsByName))\n : {},\n variablesByName: heap.variablesByName && typeof heap.variablesByName === 'object'\n ? JSON.parse(JSON.stringify(heap.variablesByName))\n : {},\n updatedAt: typeof heap.updatedAt === 'number' ? heap.updatedAt : Date.now(),\n };\n}\n\nfunction normalizeSubject(subject: Subject): Subject {\n const granularId = subject.granularId || subject.subjectId;\n const userId = subject.userId || subject.identityId || granularId;\n return {\n ...subject,\n granularId,\n userId,\n subjectId: granularId,\n identityId: subject.identityId || userId,\n };\n}\n\nfunction normalizeUser(user: User): User {\n const granularId = user.granularId || user.subjectId;\n const userId = user.userId || user.identityId || granularId;\n return {\n ...user,\n granularId,\n userId,\n subjectId: granularId,\n identityId: user.identityId || userId,\n permissions: Array.isArray(user.permissions) ? user.permissions : [],\n };\n}\n\nfunction normalizeEnvironmentData(environment: EnvironmentData): EnvironmentData {\n const buildPolicy = environment.buildPolicy\n || environment.tracking\n || (environment.tagId\n ? { mode: 'tag' as const, tagId: environment.tagId }\n : { mode: 'pinned' as const, versionId: environment.versionId || environment.buildId });\n\n const environmentName = environment.environment || environment.envName || 'prod';\n return {\n ...environment,\n ontologyId: environment.ontologyId || environment.sandboxId,\n versionId: environment.versionId || environment.buildId,\n envName: environmentName,\n environment: environmentName,\n buildPolicy,\n tracking: environment.tracking || buildPolicy,\n };\n}\n\ninterface ResolvedConnectUser {\n granularId: string;\n userId: string;\n name?: string;\n email?: string;\n permissions: string[];\n}\n\ninterface SandboxEffectHost {\n sandboxId: string;\n effectClientId: string;\n clientId: string;\n wsClient: WSClient;\n heartbeatTimer: ReturnType<typeof setInterval> | null;\n heartbeatInFlight: boolean;\n recovering: boolean;\n}\n\n/**\n * Environment represents a connected session to a sandbox for a specific user.\n *\n * After connecting, you can:\n * 1. Define your domain ontology via `applyManifest()` (classes, properties, relationships)\n * 2. Record object instances via `recordObject()` (with fields and relationship attachments)\n * 3. Register sandbox-scoped effects via `granular.registerEffect()` / `granular.registerEffects()`\n * 4. Submit jobs via `submitJob()` that import auto-generated typed classes from `./sandbox-tools`\n * 5. Execute GraphQL queries via `graphql()` (authenticated automatically)\n * 6. List available effects via `getEffects()` and listen for updates via `onEffectsChanged()`\n *\n * Tool calls from the sandbox automatically invoke your handlers via reverse-RPC.\n *\n * Object IDs are unique per class. Internally, the graph path is `{className}_{id}`\n * (e.g., `author_tolkien`). Use `Environment.toGraphPath()` and\n * `Environment.extractIdFromGraphPath()` for conversions.\n */\nexport class Environment extends Session {\n private envData: EnvironmentData;\n private _apiKey: string;\n private _apiEndpoint: string;\n\n constructor(client: WSClient, envData: EnvironmentData, clientId: string, apiKey: string, apiEndpoint: string) {\n super(client, clientId);\n this.envData = envData;\n this._apiKey = apiKey;\n this._apiEndpoint = apiEndpoint;\n }\n\n /** The environment ID */\n get environmentId(): string {\n return this.envData.environmentId;\n }\n\n /** The sandbox ID */\n get sandboxId(): string {\n return this.envData.sandboxId;\n }\n\n /** The ontology ID */\n get ontologyId(): string {\n return this.envData.ontologyId || this.envData.sandboxId;\n }\n\n /** The subject ID */\n get subjectId(): string {\n return this.envData.subjectId;\n }\n\n /** The named environment slot, such as dev or prod */\n get envName(): string {\n return this.envData.envName;\n }\n\n /** The named environment slot, such as dev or prod */\n get environment(): string {\n return this.envData.environment || this.envData.envName;\n }\n\n /** The resolved ontology version backing this environment */\n get versionId(): string {\n return this.envData.versionId || this.envData.buildId;\n }\n\n /** Internal Granular user identifier for this environment */\n get granularId(): string {\n return this.envData.subjectId;\n }\n\n /** The permission profile ID */\n get permissionProfileId(): string {\n return this.envData.permissionProfileId;\n }\n\n /** The GraphQL API endpoint URL */\n get apiEndpoint(): string {\n return this._apiEndpoint;\n }\n\n /**\n * Return a plain JS snapshot of the synced session heap.\n *\n * The heap lives in the Automerge document, so this method does not perform\n * any extra network roundtrip.\n */\n getHeap(): SessionHeapSnapshot {\n const doc = this.document as Record<string, unknown> & {\n heap?: SessionHeapSnapshot;\n };\n return normalizeHeapSnapshot(doc?.heap);\n }\n\n private getRuntimeBaseUrl(): string {\n try {\n const endpoint = new URL(this._apiEndpoint);\n const graphqlSuffix = '/orchestrator/graphql';\n if (endpoint.pathname.endsWith(graphqlSuffix)) {\n endpoint.pathname = endpoint.pathname.slice(0, -graphqlSuffix.length);\n } else if (endpoint.pathname.endsWith('/graphql')) {\n endpoint.pathname = endpoint.pathname.slice(0, -'/graphql'.length);\n }\n endpoint.search = '';\n endpoint.hash = '';\n return endpoint.toString().replace(/\\/$/, '');\n } catch {\n return this._apiEndpoint.replace(/\\/orchestrator\\/graphql$/, '').replace(/\\/$/, '');\n }\n }\n\n private async controlPlaneRequest<T>(path: string, options: RequestInit = {}): Promise<T> {\n const runtimeBase = this.getRuntimeBaseUrl();\n const url = `${runtimeBase}${path}`;\n\n const response = await fetch(url, {\n ...options,\n headers: {\n 'Authorization': `Bearer ${this._apiKey}`,\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n if (!response.ok) {\n throw new Error(`Control Plane API Error (${response.status}): ${await response.text()}`);\n }\n\n return response.json() as Promise<T>;\n }\n\n /**\n * Close the session and disconnect from the sandbox.\n *\n * Sends `client.goodbye` over WebSocket first, then issues an HTTP fallback\n * to the runtime goodbye endpoint if no definitive WS-side runtime notify\n * acknowledgement was observed.\n */\n override async disconnect(): Promise<void> {\n let wsNotifiedRuntime = false;\n\n try {\n const goodbye = await this.rpc<{ ok?: boolean; via?: string }>('client.goodbye', {\n timestamp: Date.now(),\n });\n wsNotifiedRuntime = Boolean(goodbye?.ok && goodbye?.via);\n } catch {\n wsNotifiedRuntime = false;\n }\n\n if (!wsNotifiedRuntime) {\n try {\n const runtimeBase = this.getRuntimeBaseUrl();\n await fetch(\n `${runtimeBase}/orchestrator/runtime/environments/${this.environmentId}/session-goodbye`,\n {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${this._apiKey}`,\n },\n body: JSON.stringify({\n reason: 'sdk_disconnect_http_fallback',\n sessionId: this.client.currentSessionId,\n }),\n },\n );\n } catch {\n // Best effort fallback.\n }\n }\n\n this.client.disconnect();\n }\n\n // ==================== GRAPH CONTAINER READINESS ====================\n\n /** The last known graph container status, updated by checkReadiness() or on heartbeat */\n graphContainerStatus: { lastKeepAliveAt: number; status: 'warming' | 'hot' | 'unknown' } | null = null;\n\n /**\n * Check if the graph container is ready and warm.\n *\n * Sends a lightweight heartbeat RPC to the Session DO which internally\n * pings the FalkorDB container. The response includes `graphContainerStatus`,\n * which is stored locally and emitted as a `readiness` event.\n *\n * Use this method to proactively warm the graph container before any\n * GraphQL query that requires it, or to poll the container's state in\n * the background.\n *\n * @returns The current graph container status object\n *\n * @example\n * ```typescript\n * const status = await env.checkReadiness();\n * console.log(status.status); // 'hot' | 'warming' | 'unknown'\n *\n * // Or listen for live updates\n * env.on('readiness', (status) => {\n * console.log('Graph is now:', status.status);\n * });\n * ```\n */\n async checkReadiness(): Promise<{ lastKeepAliveAt: number; status: 'warming' | 'hot' | 'unknown' }> {\n const result = await this.client.call('client.heartbeat', {}) as {\n status?: string;\n timestamp?: number;\n graphContainerStatus?: { lastKeepAliveAt: number; status: 'warming' | 'hot' | 'unknown' };\n };\n\n const containerStatus = result?.graphContainerStatus ?? {\n lastKeepAliveAt: Date.now(),\n status: 'unknown' as const,\n };\n\n this.graphContainerStatus = containerStatus;\n this.emit('readiness', containerStatus);\n return containerStatus;\n }\n\n // ==================== ID ↔ GRAPH PATH MAPPING ====================\n\n /**\n * Convert a class name + real-world ID into a unique graph path.\n *\n * Two objects of *different* classes may share the same real-world ID,\n * so the graph path must incorporate the class to guarantee uniqueness.\n *\n * Format: `{className}_{id}` — deterministic, human-readable.\n *\n * **Convention**: class names should be simple identifiers without\n * underscores (e.g. `author`, `book`). This ensures the prefix is\n * unambiguously parseable by `extractIdFromGraphPath`.\n */\n static toGraphPath(className: string, id: string): string {\n return `${className}_${id}`;\n }\n\n /**\n * Extract the real-world ID from a graph path, given the class name.\n *\n * Strips the `{className}_` prefix. Returns the raw path if the\n * expected prefix is not found.\n */\n static extractIdFromGraphPath(graphPath: string, className: string): string {\n const prefix = `${className}_`;\n return graphPath.startsWith(prefix) ? graphPath.substring(prefix.length) : graphPath;\n }\n\n /**\n * Execute a GraphQL query against the environment's graph.\n * \n * The query uses the Granular graph query language (based on Cypher/GraphQL).\n * Authentication is handled automatically using the SDK's API key.\n * \n * @param query - The GraphQL query string\n * @param variables - Optional variables for the query\n * @returns The query result data\n * \n * @example\n * ```typescript\n * // Read the workspace\n * const result = await env.graphql(\n * `query { model(path: \"workspace\") { path label submodels { path label } } }`\n * );\n * console.log(result.data);\n * \n * // Create a model\n * const created = await env.graphql(\n * `mutation { at(path: \"workspace\") { create_submodel(subpath: \"my_node\", label: \"My Node\", prototype: \"Model\") { model { path label } } } }`\n * );\n * ```\n */\n async graphql<T = any>(query: string, variables?: Record<string, any>): Promise<GraphQLResult<T>> {\n const response = await fetch(this._apiEndpoint, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${this._apiKey}`,\n },\n body: JSON.stringify({\n environmentId: this.environmentId,\n query,\n variables,\n }),\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(`GraphQL API Error (${response.status}): ${errorText}`);\n }\n\n return response.json() as Promise<GraphQLResult<T>>;\n }\n\n // ==================== RELATIONSHIP METHODS ====================\n\n /**\n * Define a relationship between two model types.\n * \n * Creates both submodels (if they don't exist) and links them with\n * a RelationshipDef node that encodes cardinality.\n * \n * @example\n * ```typescript\n * // Author has many Books, Book has one Author\n * const rel = await env.defineRelationship({\n * model: 'author',\n * localSubmodel: 'books',\n * localIsMany: true,\n * foreignModel: 'book',\n * foreignSubmodel: 'author',\n * foreignIsMany: false,\n * });\n * console.log(rel.relationship_kind); // \"one_to_many\"\n * ```\n */\n async defineRelationship(options: DefineRelationshipOptions): Promise<RelationshipInfo> {\n const result = await this.graphql<{\n at: {\n define_relationship: RelationshipInfo;\n };\n }>(\n `mutation DefineRelationship(\n $localSubmodel: String!,\n $foreignModel: String!,\n $foreignSubmodel: String!,\n $localIsMany: Boolean!,\n $foreignIsMany: Boolean!,\n $name: String\n ) {\n at(path: \"${options.model}\") {\n define_relationship(\n local_submodel: $localSubmodel\n foreign_model: $foreignModel\n foreign_submodel: $foreignSubmodel\n local_is_many: $localIsMany\n foreign_is_many: $foreignIsMany\n name: $name\n ) {\n name\n local_submodel { path label }\n local_is_many\n foreign_submodel { path label }\n foreign_is_many\n foreign_model { path label }\n relationship_kind\n }\n }\n }`,\n {\n localSubmodel: options.localSubmodel,\n foreignModel: options.foreignModel,\n foreignSubmodel: options.foreignSubmodel,\n localIsMany: options.localIsMany,\n foreignIsMany: options.foreignIsMany,\n name: options.name,\n }\n );\n\n if (result.errors?.length) {\n throw new Error(`defineRelationship failed: ${result.errors[0].message}`);\n }\n\n return result.data!.at.define_relationship;\n }\n\n /**\n * Get all relationships for a model type.\n * \n * @param modelPath - The model type path (e.g., \"author\")\n * @returns Array of relationships from this model's perspective\n * \n * @example\n * ```typescript\n * const rels = await env.getRelationships('author');\n * for (const rel of rels) {\n * console.log(`${rel.local_submodel.path} -> ${rel.foreign_model.path} (${rel.relationship_kind})`);\n * }\n * ```\n */\n async getRelationships(modelPath: string): Promise<RelationshipInfo[]> {\n const result = await this.graphql<{\n model: {\n relationships: RelationshipInfo[];\n };\n }>(\n `query GetRelationships($path: String) {\n model(path: $path) {\n relationships {\n name\n local_submodel { path label }\n local_is_many\n foreign_submodel { path label }\n foreign_is_many\n foreign_model { path label }\n relationship_kind\n }\n }\n }`,\n { path: modelPath }\n );\n\n if (result.errors?.length) {\n throw new Error(`getRelationships failed: ${result.errors[0].message}`);\n }\n\n return result.data?.model?.relationships || [];\n }\n\n /**\n * Attach a target model to a relationship submodel.\n * \n * Handles cardinality automatically:\n * - \"One\" side: sets/replaces the reference\n * - \"Many\" side: adds the target to the collection\n * \n * If the target model doesn't exist, it's created as an instance of the foreign type.\n * Bidirectional sync is automatic.\n * \n * @param modelPath - The model instance path (e.g., \"tolkien\")\n * @param submodelPath - The relationship submodel (e.g., \"books\")\n * @param targetPath - The target model to attach (e.g., \"lord_of_the_rings\")\n * \n * @example\n * ```typescript\n * // Attach a book to an author (many side)\n * await env.attach('tolkien', 'books', 'lord_of_the_rings');\n * // This also automatically sets lord_of_the_rings:author -> tolkien\n * ```\n */\n async attach(modelPath: string, submodelPath: string, targetPath: string): Promise<void> {\n const result = await this.graphql(\n `mutation Attach($target: String!) {\n at(path: \"${modelPath}\") {\n at(submodel: \"${submodelPath}\") {\n attach(target: $target) {\n model { path }\n }\n }\n }\n }`,\n { target: targetPath }\n );\n\n if (result.errors?.length) {\n throw new Error(`attach failed: ${result.errors[0].message}`);\n }\n }\n\n /**\n * Detach a target model from a relationship submodel.\n * \n * Handles bidirectional cleanup automatically.\n * \n * @param modelPath - The model instance path\n * @param submodelPath - The relationship submodel\n * @param targetPath - The target to detach (optional for \"one\" side; omit on \"many\" side to detach all)\n * \n * @example\n * ```typescript\n * // Detach a specific book\n * await env.detach('tolkien', 'books', 'lord_of_the_rings');\n * \n * // Detach all books\n * await env.detach('tolkien', 'books');\n * ```\n */\n async detach(modelPath: string, submodelPath: string, targetPath?: string): Promise<void> {\n const targetArg = targetPath ? `target: \"${targetPath}\"` : '';\n const result = await this.graphql(\n `mutation Detach {\n at(path: \"${modelPath}\") {\n at(submodel: \"${submodelPath}\") {\n detach(${targetArg}) {\n model { path }\n }\n }\n }\n }`\n );\n\n if (result.errors?.length) {\n throw new Error(`detach failed: ${result.errors[0].message}`);\n }\n }\n\n /**\n * List all related models through a relationship submodel.\n * \n * @param modelPath - The model instance path\n * @param submodelPath - The relationship submodel\n * @returns Array of related model references\n * \n * @example\n * ```typescript\n * const books = await env.listRelated('tolkien', 'books');\n * console.log(books); // [{ path: \"lord_of_the_rings\", label: \"Lord of the Rings\" }, ...]\n * ```\n */\n async listRelated(modelPath: string, submodelPath: string): Promise<ModelRef[]> {\n const result = await this.graphql<{\n at: {\n at: {\n list_related: ModelRef[];\n };\n };\n }>(\n `mutation ListRelated {\n at(path: \"${modelPath}\") {\n at(submodel: \"${submodelPath}\") {\n list_related { path label }\n }\n }\n }`\n );\n\n if (result.errors?.length) {\n throw new Error(`listRelated failed: ${result.errors[0].message}`);\n }\n\n return result.data?.at?.at?.list_related || [];\n }\n\n /**\n * Apply a manifest to the current environment's graph.\n * \n * Translates each manifest operation into GraphQL mutations and executes them\n * in order. This is the core mechanism for creating classes, fields, and\n * relationships from a declarative manifest.\n * \n * @param manifest - The manifest content to apply\n * @returns Summary of applied operations\n * \n * @example\n * ```typescript\n * await environment.applyManifest({\n * schemaVersion: 2,\n * name: 'my-app',\n * volumes: [{\n * name: 'schema',\n * scope: 'sandbox',\n * operations: [\n * { create: 'author', extends: 'class', has: { name: { type: 'string' } } },\n * { create: 'book', extends: 'class', has: { title: { type: 'string' } } },\n * { defineRelationship: {\n * left: 'author', right: 'book',\n * leftSubmodel: 'books', rightSubmodel: 'author',\n * leftIsMany: true, rightIsMany: false,\n * }},\n * ],\n * }],\n * });\n * ```\n */\n async applyManifest(manifest: ManifestContent): Promise<{ applied: number; errors: string[] }> {\n const errors: string[] = [];\n let applied = 0;\n\n for (const volume of manifest.volumes) {\n // Build alias map from imports\n const aliasMap: Record<string, string> = {};\n\n // Resolve and apply imports first\n if (volume.imports) {\n for (const imp of volume.imports) {\n aliasMap[imp.alias] = imp.name;\n\n const builtinOps = BUILTIN_MODULES[imp.name];\n if (builtinOps) {\n for (const op of builtinOps) {\n try {\n await this._applyOperation(op, {});\n applied++;\n } catch (err: any) {\n // Ignore \"already exists\" errors from re-applying imports\n if (!err.message?.includes('already exists')) {\n errors.push(`Import ${imp.name} operation failed: ${err.message}`);\n }\n }\n }\n } else {\n errors.push(`Unknown module: \"${imp.name}\" (only built-in modules are supported)`);\n }\n }\n }\n\n // Apply volume operations with alias resolution\n for (const op of volume.operations) {\n try {\n await this._applyOperation(op, aliasMap);\n applied++;\n } catch (err: any) {\n errors.push(`Operation failed: ${err.message}`);\n }\n }\n }\n\n return { applied, errors };\n }\n\n /**\n * Resolve an alias reference like \"@std/class\" → \"class\"\n * Strips the alias prefix, returning the bare model path.\n */\n private _resolveAlias(ref: string, aliasMap: Record<string, string>): string {\n if (!ref.startsWith('@')) return ref;\n const slashIdx = ref.indexOf('/');\n if (slashIdx === -1) return ref;\n const alias = ref.substring(0, slashIdx);\n const symbolName = ref.substring(slashIdx + 1);\n if (aliasMap[alias]) {\n return symbolName; // The import was applied, so the symbol exists at its bare name\n }\n return ref; // Unknown alias, return as-is\n }\n\n private async _runGraphql(query: string, label: string): Promise<any> {\n const result = await this.graphql(query);\n if (result.errors?.length) {\n throw new Error(`${label}: ${result.errors[0].message}`);\n }\n return result.data;\n }\n\n private async _applyFieldMetamodels(fieldPath: string, spec: FieldMetamodelManifestSpec): Promise<void> {\n for (const mutation of buildFieldMetamodelMutations(fieldPath, spec)) {\n await this._runGraphql(mutation.query, mutation.label);\n }\n }\n\n private async _applyModelMetamodels(modelPath: string, op: ManifestOperation): Promise<void> {\n for (const mutation of buildModelMetamodelMutations(modelPath, op)) {\n await this._runGraphql(mutation.query, mutation.label);\n }\n }\n\n private async _ensureWorkspaceToolsRoot(): Promise<void> {\n await this._runGraphql(\n `mutation { create_model(path: \"workspace\", label: \"workspace\") { model { path } } }`,\n 'ensure workspace',\n ).catch((error: Error) => {\n if (!error.message.includes('already exists')) throw error;\n });\n\n await this._runGraphql(\n `mutation { at(path: \"workspace\") { create_submodel(subpath: \"tools\", label: \"Tools\") { model { path } } } }`,\n 'ensure workspace:tools',\n ).catch((error: Error) => {\n if (!error.message.includes('already exists')) throw error;\n });\n\n await this._runGraphql(\n `mutation { at(path: \"workspace:tools\") { create_submodel(subpath: \"declared\", label: \"Declared\") { model { path } } } }`,\n 'ensure workspace:tools:declared',\n ).catch((error: Error) => {\n if (!error.message.includes('already exists')) throw error;\n });\n }\n\n private async _storeEffectSchemas(toolPath: string, effect: ManifestEffectDeclaration): Promise<void> {\n await this._runGraphql(\n `mutation { at(path: ${JSON.stringify(toolPath)}) { create_submodel(subpath: \"inputSchema\", label: \"inputSchema\") { set_string_value(value: ${JSON.stringify(JSON.stringify(effect.inputSchema))}) { done } } } }`,\n `store inputSchema on ${toolPath}`,\n ).catch((error: Error) => {\n if (!error.message.includes('already exists')) throw error;\n });\n\n if (effect.outputSchema) {\n await this._runGraphql(\n `mutation { at(path: ${JSON.stringify(toolPath)}) { create_submodel(subpath: \"outputSchema\", label: \"outputSchema\") { set_string_value(value: ${JSON.stringify(JSON.stringify(effect.outputSchema))}) { done } } } }`,\n `store outputSchema on ${toolPath}`,\n ).catch((error: Error) => {\n if (!error.message.includes('already exists')) throw error;\n });\n }\n }\n\n private async _applyEffectMetamodels(toolPath: string, metamodels?: EffectMetamodelManifestSpec): Promise<void> {\n for (const mutation of buildEffectMetamodelMutations(toolPath, metamodels)) {\n await this._runGraphql(mutation.query, mutation.label);\n }\n }\n\n private async _applyEffectDeclaration(effect: ManifestEffectDeclaration, aliasMap: Record<string, string>): Promise<void> {\n let containerPath = 'workspace:tools:declared';\n if (effect.attachedClass) {\n containerPath = this._resolveAlias(effect.attachedClass, aliasMap);\n } else {\n await this._ensureWorkspaceToolsRoot();\n }\n\n await this._runGraphql(\n `mutation { at(path: ${JSON.stringify(containerPath)}) { create_submodel(subpath: ${JSON.stringify(effect.name)}, label: ${JSON.stringify(effect.name)}) { model { path } } } }`,\n `create effect model ${containerPath}:${effect.name}`,\n ).catch((error: Error) => {\n if (!error.message.includes('already exists')) throw error;\n });\n\n const toolPath = `${containerPath}:${effect.name}`;\n if (effect.description) {\n await this._runGraphql(\n `mutation { at(path: ${JSON.stringify(toolPath)}) { set_description(description: ${JSON.stringify(effect.description)}) { done } } }`,\n `set effect description on ${toolPath}`,\n );\n }\n await this._storeEffectSchemas(toolPath, effect);\n await this._applyEffectMetamodels(toolPath, effect.metamodels);\n }\n\n /**\n * Apply a single manifest operation via GraphQL\n */\n private async _applyOperation(op: ManifestOperation, aliasMap: Record<string, string>): Promise<void> {\n // 1. Relationship definition (standalone operation)\n if (op.defineRelationship) {\n const rel = op.defineRelationship;\n await this.defineRelationship({\n model: this._resolveAlias(rel.left, aliasMap),\n localSubmodel: rel.leftSubmodel,\n localIsMany: rel.leftIsMany,\n foreignModel: this._resolveAlias(rel.right, aliasMap),\n foreignSubmodel: rel.rightSubmodel,\n foreignIsMany: rel.rightIsMany,\n name: rel.name,\n });\n return;\n }\n\n // 2. Create a new model (optionally extending another)\n if (op.create) {\n const label = op.create.charAt(0).toUpperCase() + op.create.slice(1);\n const extendsRef = op.extends ? this._resolveAlias(op.extends, aliasMap) : undefined;\n const instanceOfRef = op.instanceOf ? this._resolveAlias(op.instanceOf, aliasMap) : undefined;\n\n if (extendsRef) {\n // Create model that extends a parent class\n await this._runGraphql(\n `mutation { create_model(path: \"${op.create}\", label: \"${label}\") { model { path } } }`,\n `create model ${op.create}`,\n );\n await this._runGraphql(\n `mutation { at(path: \"${op.create}\") { add_superclass(superclass: \"${extendsRef}\") { model { path } } } }`,\n `add superclass ${extendsRef} to ${op.create}`,\n );\n } else if (instanceOfRef) {\n // Create an instance of a type\n await this._runGraphql(\n `mutation { at(path: \"${instanceOfRef}\") { instantiate(path: \"${op.create}\", label: \"${label}\") { model { path } } } }`,\n `instantiate ${op.create} from ${instanceOfRef}`,\n );\n } else {\n // Create a standalone model\n await this._runGraphql(\n `mutation { create_model(path: \"${op.create}\", label: \"${label}\") { model { path } } }`,\n `create model ${op.create}`,\n );\n }\n\n // Apply fields (has) if present\n if (op.has) {\n await this._applyFields(op.create, op.has);\n }\n await this._applyModelMetamodels(op.create, op);\n if (op.withEffect) {\n await this._applyEffectDeclaration(op.withEffect, aliasMap);\n }\n return;\n }\n\n // 3. Modify an existing model\n if (op.on) {\n const target = this._resolveAlias(op.on, aliasMap);\n if (op.has) {\n await this._applyFields(target, op.has);\n }\n await this._applyModelMetamodels(target, op);\n if (op.withEffect) {\n await this._applyEffectDeclaration(op.withEffect, aliasMap);\n }\n return;\n }\n\n if (op.withEffect) {\n await this._applyEffectDeclaration(op.withEffect, aliasMap);\n }\n }\n\n /**\n * Apply field definitions (has) to a model via GraphQL\n */\n private async _applyFields(modelPath: string, fields: Record<string, ManifestPropertySpec>): Promise<void> {\n for (const [fieldName, spec] of Object.entries(fields)) {\n const fieldLabel = fieldName.charAt(0).toUpperCase() + fieldName.slice(1);\n\n // Create the submodel (field) on the model\n await this._runGraphql(\n `mutation {\n at(path: ${JSON.stringify(modelPath)}) {\n create_submodel(subpath: ${JSON.stringify(fieldName)}, label: ${JSON.stringify(fieldLabel)}) {\n model { path }\n }\n }\n }`,\n `create field ${modelPath}.${fieldName}`,\n ).catch((error: Error) => {\n if (!error.message.includes('already exists')) throw error;\n });\n\n // Set type prototype if provided (e.g. 'string', 'number', 'boolean')\n if (spec.type) {\n await this._runGraphql(\n `mutation {\n at(path: ${JSON.stringify(modelPath)}) {\n at(submodel: ${JSON.stringify(fieldName)}) {\n add_prototype(prototype: ${JSON.stringify(spec.type)}) { done }\n }\n }\n }`,\n `set prototype on ${modelPath}:${fieldName}`,\n );\n }\n\n // Set description if provided\n if (spec.description) {\n await this._runGraphql(\n `mutation {\n at(path: ${JSON.stringify(modelPath)}) {\n at(submodel: ${JSON.stringify(fieldName)}) {\n set_description(description: ${JSON.stringify(spec.description)}) { done }\n }\n }\n }`,\n `set description on ${modelPath}:${fieldName}`,\n );\n }\n\n // Set value if provided\n if (spec.value !== undefined && spec.value !== null) {\n if (typeof spec.value === 'string') {\n await this._runGraphql(\n `mutation {\n at(path: ${JSON.stringify(modelPath)}) {\n at(submodel: ${JSON.stringify(fieldName)}) {\n set_string_value(value: ${JSON.stringify(spec.value)}) { done }\n }\n }\n }`,\n `set string value on ${modelPath}:${fieldName}`,\n );\n } else if (typeof spec.value === 'number') {\n await this._runGraphql(\n `mutation {\n at(path: ${JSON.stringify(modelPath)}) {\n at(submodel: ${JSON.stringify(fieldName)}) {\n set_number_value(value: ${spec.value}) { done }\n }\n }\n }`,\n `set number value on ${modelPath}:${fieldName}`,\n );\n } else if (typeof spec.value === 'boolean') {\n await this._runGraphql(\n `mutation {\n at(path: ${JSON.stringify(modelPath)}) {\n at(submodel: ${JSON.stringify(fieldName)}) {\n set_boolean_value(value: ${spec.value}) { done }\n }\n }\n }`,\n `set boolean value on ${modelPath}:${fieldName}`,\n );\n }\n }\n\n // Set reference if provided\n if (spec.ref) {\n await this._runGraphql(\n `mutation {\n at(path: ${JSON.stringify(modelPath)}) {\n at(submodel: ${JSON.stringify(fieldName)}) {\n set_reference(reference: ${JSON.stringify(spec.ref)}) { done }\n }\n }\n }`,\n `set reference on ${modelPath}:${fieldName}`,\n );\n }\n\n await this._applyFieldMetamodels(`${modelPath}:${fieldName}`, spec);\n\n // Recurse into nested has\n if (spec.has) {\n await this._applyFields(`${modelPath}:${fieldName}`, spec.has);\n }\n }\n }\n\n // ==================== RECORD OBJECT ====================\n\n /**\n * Create or update an instance of a class in the graph.\n *\n * Uses `instantiate` under the hood, which has find-or-create semantics:\n * if an instance with the given `id` already exists for the class it is\n * returned; otherwise a new instance is created. Fields are then set\n * (overwriting previous values) and relationships are attached.\n *\n * The graph path is derived as `{className}_{id}` to ensure uniqueness\n * across classes (two objects of different classes may share the same\n * real-world ID). Relationship targets are also resolved automatically\n * using the foreign class from the relationship definition.\n *\n * @param options - The object specification\n * @returns The graph path, real-world ID, and creation status\n *\n * @example\n * ```typescript\n * // Create an author with fields\n * const result = await env.recordObject({\n * className: 'author',\n * id: 'tolkien',\n * label: 'J.R.R. Tolkien',\n * fields: { name: 'J.R.R. Tolkien', birth_year: 1892 },\n * relationships: { books: ['lotr', 'silmarillion'] },\n * });\n * // result.path → 'author_tolkien' (internal graph path)\n * // result.id → 'tolkien' (real-world ID)\n * // result.created → true\n * ```\n */\n async recordObject(options: RecordObjectOptions): Promise<RecordObjectResult> {\n const results = await this.recordObjects([options]);\n return results[0];\n }\n\n /**\n * Batch version of `recordObject()`.\n *\n * Sends several upserts through the control-plane batch endpoint so the\n * server can collapse the graph mutations into far fewer round trips.\n */\n async recordObjects(records: RecordObjectOptions[]): Promise<RecordObjectResult[]> {\n if (!Array.isArray(records) || records.length === 0) {\n return [];\n }\n\n const response = await this.controlPlaneRequest<{\n items: RecordObjectResult[];\n count: number;\n }>(\n `/control/environments/${this.environmentId}/records/batch`,\n {\n method: 'POST',\n body: JSON.stringify({ records }),\n },\n );\n\n return Array.isArray(response.items) ? response.items : [];\n }\n\n /**\n * Queue a background record import for this environment.\n */\n async enqueueRecordImport(\n records: RecordObjectOptions[],\n options: { batchSize?: number } = {},\n ): Promise<RecordImport> {\n return this.controlPlaneRequest<RecordImport>(\n `/control/environments/${this.environmentId}/record-imports`,\n {\n method: 'POST',\n body: JSON.stringify({\n records,\n batchSize: options.batchSize,\n }),\n },\n );\n }\n\n /**\n * List queued or completed record imports for this environment.\n */\n async listRecordImports(status?: RecordImportStatus): Promise<RecordImport[]> {\n const suffix = status ? `?status=${encodeURIComponent(status)}` : '';\n const response = await this.controlPlaneRequest<{ items: RecordImport[] }>(\n `/control/environments/${this.environmentId}/record-imports${suffix}`,\n );\n return Array.isArray(response.items) ? response.items : [];\n }\n\n /**\n * Fetch the latest aggregate import counters for this environment.\n */\n async getRecordImportSummary(): Promise<EnvironmentRecordImportSummary> {\n return this.controlPlaneRequest<EnvironmentRecordImportSummary>(\n `/control/environments/${this.environmentId}/record-imports/summary`,\n );\n }\n\n /**\n * Convenience helper returning queued + processing records for this environment.\n */\n async getAwaitingRecordCount(): Promise<number> {\n const summary = await this.getRecordImportSummary();\n return summary.awaitingRecords;\n }\n\n /**\n * Fetch a single record import by id.\n */\n async getRecordImport(importId: string): Promise<RecordImport> {\n return this.controlPlaneRequest<RecordImport>(`/control/record-imports/${importId}`);\n }\n\n /**\n * Cancel a queued/background record import.\n */\n async cancelRecordImport(importId: string): Promise<RecordImport> {\n return this.controlPlaneRequest<RecordImport>(\n `/control/record-imports/${importId}/cancel`,\n {\n method: 'POST',\n },\n );\n }\n\n // ==================== PUBLISH TOOLS ====================\n\n /**\n * Removed: environment-scoped effect publication is no longer supported.\n */\n async publishTools(tools: ToolWithHandler[], revision = '1.0.0'): Promise<PublishToolsResult> {\n return super.publishTools(tools, revision);\n }\n\n /**\n * Removed: environment-scoped effect publication is no longer supported.\n */\n async publishEffect(effect: ToolWithHandler): Promise<PublishToolsResult> {\n return super.publishEffect(effect);\n }\n\n /**\n * Removed: environment-scoped effect publication is no longer supported.\n */\n async publishEffects(effects: ToolWithHandler[]): Promise<PublishToolsResult> {\n return super.publishEffects(effects);\n }\n\n /**\n * Removed: environment-scoped effect publication is no longer supported.\n */\n async unpublishEffect(name: string): Promise<PublishToolsResult> {\n return super.unpublishEffect(name);\n }\n\n /**\n * Removed: environment-scoped effect publication is no longer supported.\n */\n async unpublishAllEffects(): Promise<PublishToolsResult> {\n return super.unpublishAllEffects();\n }\n}\n\nexport class Granular {\n private apiKey: string;\n private apiUrl: string;\n private httpUrl: string;\n private tokenProvider?: AccessTokenProvider;\n private WebSocketCtor?: any;\n private onUnexpectedClose?: (info: WSDisconnectInfo) => void;\n private onReconnectError?: (info: WSReconnectErrorInfo) => void;\n\n /** Sandbox-level effect registry: sandboxId → (effectKey → ToolWithHandler) */\n private sandboxEffects: Map<string, Map<string, ToolWithHandler>> = new Map();\n /** Live sandbox-scoped effect hosts keyed by sandboxId */\n private sandboxEffectHosts: Map<string, SandboxEffectHost> = new Map();\n /** In-flight host connection promises to avoid duplicate concurrent connects */\n private sandboxEffectHostPromises: Map<string, Promise<SandboxEffectHost>> = new Map();\n\n /**\n * Create a new Granular client\n * @param options - Client configuration\n */\n constructor(options: GranularOptions) {\n const auth = options.token ?? options.apiKey;\n if (!auth) {\n throw new Error('Granular client requires either apiKey or token. Set GRANULAR_API_KEY or GRANULAR_TOKEN, or pass one in options.');\n }\n this.apiUrl = resolveApiUrl(options.apiUrl, options.endpointMode);\n this.apiKey = resolveAuthTokenForApiUrl(auth, this.apiUrl);\n this.tokenProvider = options.tokenProvider;\n this.WebSocketCtor = options.WebSocketCtor;\n this.onUnexpectedClose = options.onUnexpectedClose;\n this.onReconnectError = options.onReconnectError;\n // Convert WebSocket URL to HTTP URL for REST API\n this.httpUrl = this.apiUrl\n .replace(/^wss:\\/\\//, 'https://')\n .replace(/^ws:\\/\\//, 'http://')\n .replace(/\\/ws$/, '');\n }\n\n /**\n * Records/upserts a user and prepares them for sandbox connections\n * \n * @param options - User options\n * @returns The recorded user with both `userId` and `granularId`\n * \n * @example\n * ```typescript\n * const user = await granular.recordUser({\n * userId: 'user_123',\n * name: 'John Doe',\n * permissions: ['agent'],\n * });\n * ```\n */\n async recordUser(options: RecordUserOptions): Promise<User> {\n // Create or get subject via control plane\n const subject = normalizeSubject(await this.request<Subject>('/control/subjects', {\n method: 'POST',\n body: JSON.stringify({\n identityId: options.userId,\n name: options.name,\n email: options.email,\n }),\n }));\n\n return normalizeUser({\n granularId: subject.granularId,\n userId: options.userId,\n subjectId: subject.subjectId,\n identityId: subject.identityId,\n name: options.name || subject.name || undefined,\n email: options.email || subject.email || undefined,\n permissions: options.permissions || [],\n });\n }\n\n private async resolveConnectUser(options: ConnectOptions): Promise<ResolvedConnectUser> {\n if (options.user) {\n const user = normalizeUser(options.user);\n return {\n granularId: user.granularId,\n userId: user.userId,\n name: options.name || user.name,\n email: options.email || user.email,\n permissions: options.permissions || user.permissions,\n };\n }\n\n if (options.userId) {\n const user = await this.recordUser({\n userId: options.userId,\n name: options.name,\n email: options.email,\n permissions: options.permissions,\n });\n return {\n granularId: user.granularId,\n userId: user.userId,\n name: user.name,\n email: user.email,\n permissions: options.permissions || user.permissions,\n };\n }\n\n if (options.granularId) {\n const subject = await this.subjects.get(options.granularId);\n return {\n granularId: subject.granularId,\n userId: subject.userId,\n name: options.name || subject.name || undefined,\n email: options.email || subject.email || undefined,\n permissions: options.permissions || [],\n };\n }\n\n throw new Error('connect() requires either userId, granularId, or a user object returned by recordUser().');\n }\n\n /**\n * Connect to an ontology environment and establish a real-time session.\n * \n * Effects are registered at the sandbox level via `granular.registerEffect()`\n * or `granular.registerEffects()`. Sessions pick up live availability from\n * the sandbox registry automatically.\n * \n * @param options - Connection options\n * @returns An active environment session\n * \n * @example\n * ```typescript\n * const environment = await granular.connect({\n * ontology: 'my-ontology',\n * environment: 'dev',\n * userId: 'user_123',\n * permissions: ['agent'],\n * });\n * \n * await granular.registerEffect('my-sandbox', {\n * name: 'greet',\n * description: 'Say hello',\n * inputSchema: { type: 'object', properties: {} },\n * handler: async () => 'Hello!',\n * });\n * \n * // Submit job\n * const job = await environment.submitJob(`\n * import { tools } from './sandbox-tools';\n * return await tools.greet({});\n * `);\n * \n * console.log(await job.result); // 'Hello!'\n * ```\n */\n async connect(options: ConnectOptions): Promise<Environment> {\n const clientId = options.clientId || `client_${Date.now()}`;\n const ontology = options.ontology;\n if (!ontology) {\n throw new Error('connect() requires `ontology`.');\n }\n\n const environmentName = options.environment;\n if (!environmentName) {\n throw new Error('connect() requires `environment`.');\n }\n const tagName = options.tagName?.trim() || undefined;\n const user = await this.resolveConnectUser(options);\n\n // 1. Find or create the ontology container\n const sandbox = await this.findOrCreateSandbox(ontology);\n\n // 2. Ensure permission profiles and assignments exist for each permission\n for (const profileName of user.permissions) {\n const profileId = await this.ensurePermissionProfile(sandbox.sandboxId, profileName);\n await this.ensureAssignment(user.granularId, sandbox.sandboxId, profileId);\n }\n\n // 3. Create the environment\n const envData = await this.environments.create(sandbox.sandboxId, {\n subjectId: user.granularId,\n environment: environmentName,\n tagName,\n permissionProfileId: null,\n });\n\n // Ensure the runtime graph is loaded before opening the session.\n await this.activateEnvironment(envData.environmentId);\n\n const session = await this.request<{\n sessionId: string;\n docId: string;\n wsUrl: string;\n token: string;\n expiresAt: number;\n }>('/ws/sessions', {\n method: 'POST',\n body: JSON.stringify({\n environmentId: envData.environmentId,\n clientId,\n initialHeap: options.initialHeap,\n }),\n });\n\n return this.bindWebSocketEnvironment(envData, clientId, session);\n }\n\n /**\n * List active (open) sessions for an environment — each session is one agent conversation thread.\n */\n async listOpenSessions(filters: { environmentId: string }): Promise<ConversationSessionInfo[]> {\n return this.listSessionsForEnvironment(filters.environmentId, 'active');\n }\n\n /**\n * List closed sessions for an environment (conversations that have disconnected).\n */\n async listClosedSessions(filters: { environmentId: string }): Promise<ConversationSessionInfo[]> {\n return this.listSessionsForEnvironment(filters.environmentId, 'closed');\n }\n\n private async listSessionsForEnvironment(\n environmentId: string,\n status: 'active' | 'closed',\n ): Promise<ConversationSessionInfo[]> {\n const query = new URLSearchParams({ environmentId, status });\n const res = await this.request<{ items: Record<string, unknown>[] }>(\n `/control/sessions?${query.toString()}`,\n );\n const items = Array.isArray(res.items) ? res.items : [];\n return items.map((row) => this.normalizeConversationSession(row));\n }\n\n private normalizeConversationSession(row: Record<string, unknown>): ConversationSessionInfo {\n const sessionId = String(row.sessionId ?? row.session_id ?? '');\n const environmentId = String(row.environmentId ?? row.environment_id ?? '');\n return {\n sessionId,\n tenantId: row.tenantId != null ? String(row.tenantId) : undefined,\n environmentId,\n versionId: row.versionId != null ? String(row.versionId) : null,\n docId: String(row.docId ?? row.doc_id ?? ''),\n status: (row.status as ConversationSessionInfo['status']) || 'active',\n createdAt: Granular.coerceIsoDate(row.createdAt ?? row.created_at),\n lastSeenAt: Granular.coerceIsoDate(row.lastSeenAt ?? row.last_seen_at),\n summary: row.summary != null ? String(row.summary) : null,\n summaryUpdatedAt: row.summaryUpdatedAt != null || row.summary_updated_at != null\n ? Granular.coerceIsoDate(row.summaryUpdatedAt ?? row.summary_updated_at)\n : null,\n subjectId: row.subjectId != null ? String(row.subjectId) : null,\n jobCount: typeof row.jobCount === 'number' ? row.jobCount : undefined,\n toolCallCount: typeof row.toolCallCount === 'number' ? row.toolCallCount : undefined,\n };\n }\n\n private static coerceIsoDate(value: unknown): string {\n if (value instanceof Date) {\n return value.toISOString();\n }\n if (typeof value === 'number') {\n return new Date(value).toISOString();\n }\n if (typeof value === 'string') {\n return value;\n }\n return new Date(0).toISOString();\n }\n\n /**\n * Create a new session (conversation) for an existing environment and connect to it.\n * The runtime graph is shared across all sessions for the same environment.\n */\n async createSession(options: {\n environmentId: string;\n clientId?: string;\n initialHeap?: ConnectOptions['initialHeap'];\n }): Promise<Environment> {\n const clientId = options.clientId || `client_${Date.now()}`;\n await this.activateEnvironment(options.environmentId);\n const envData = await this.environments.get(options.environmentId);\n const session = await this.request<{\n sessionId: string;\n docId: string;\n wsUrl: string;\n token: string;\n expiresAt: number;\n }>('/ws/sessions', {\n method: 'POST',\n body: JSON.stringify({\n environmentId: options.environmentId,\n clientId,\n initialHeap: options.initialHeap,\n }),\n });\n return this.bindWebSocketEnvironment(envData, clientId, session);\n }\n\n /**\n * Connect to an existing open session (same conversation thread) using a freshly minted WebSocket token.\n */\n async connectSession(options: { sessionId: string; clientId?: string }): Promise<Environment> {\n const clientId = options.clientId || `client_${Date.now()}`;\n const minted = await this.request<{\n sessionId: string;\n environmentId: string;\n wsUrl: string;\n token: string;\n expiresAt: number;\n }>(`/ws/sessions/${encodeURIComponent(options.sessionId)}/token`, {\n method: 'POST',\n body: JSON.stringify({}),\n });\n const envData = await this.environments.get(minted.environmentId);\n return this.bindWebSocketEnvironment(envData, clientId, minted);\n }\n\n /**\n * Mark a session closed in the control plane. If `environment` is the connected handle for that\n * `sessionId`, disconnects the WebSocket so the runtime tears down cleanly.\n */\n async closeSession(sessionId: string, environment?: Environment | null): Promise<void> {\n if (environment && environment.sessionId === sessionId) {\n await environment.disconnect();\n return;\n }\n await this.request(`/control/sessions/${encodeURIComponent(sessionId)}`, {\n method: 'PATCH',\n body: JSON.stringify({\n status: 'closed',\n lastSeenAt: new Date().toISOString(),\n }),\n });\n }\n\n /**\n * Re-open a closed session in the index and connect to its existing runtime document.\n */\n async reopenSession(sessionId: string, options?: { clientId?: string }): Promise<Environment> {\n await this.request(`/control/sessions/${encodeURIComponent(sessionId)}`, {\n method: 'PATCH',\n body: JSON.stringify({\n status: 'active',\n lastSeenAt: new Date().toISOString(),\n }),\n });\n return this.connectSession({ sessionId, clientId: options?.clientId });\n }\n\n private async bindWebSocketEnvironment(\n envData: EnvironmentData,\n clientId: string,\n session: { sessionId: string; wsUrl: string; token: string },\n ): Promise<Environment> {\n const client = new WSClient({\n url: session.wsUrl,\n sessionId: session.sessionId,\n token: session.token,\n tokenProvider: this.tokenProvider,\n WebSocketCtor: this.WebSocketCtor,\n onUnexpectedClose: this.onUnexpectedClose,\n onReconnectError: this.onReconnectError,\n });\n\n await client.connect();\n\n const graphqlEndpoint = `${this.httpUrl}/orchestrator/graphql`;\n const environment = new Environment(client, envData, clientId, this.apiKey, graphqlEndpoint);\n\n await environment.hello();\n\n return environment;\n }\n\n private async activateEnvironment(environmentId: string): Promise<void> {\n await this.request<{\n environmentId: string;\n status: 'active';\n }>(`/orchestrator/runtime/environments/${environmentId}/activate`, {\n method: 'POST',\n body: JSON.stringify({}),\n });\n }\n\n // ── Sandbox-Level Effects ──\n\n private getSandboxEffectMap(sandboxId: string): Map<string, ToolWithHandler> {\n let effects = this.sandboxEffects.get(sandboxId);\n if (!effects) {\n effects = new Map();\n this.sandboxEffects.set(sandboxId, effects);\n }\n return effects;\n }\n\n private serializeEffect(effect: ToolWithHandler): ToolSchema {\n return {\n effectKey: computeEffectKey(effect),\n name: effect.name,\n description: effect.description,\n inputSchema: effect.inputSchema,\n outputSchema: effect.outputSchema,\n stability: effect.stability || 'stable',\n provenance: effect.provenance || { source: 'custom' },\n tags: effect.tags,\n className: effect.className,\n static: effect.static,\n };\n }\n\n private async publishSandboxEffectCatalog(host: SandboxEffectHost): Promise<void> {\n const effects = Array.from(this.getSandboxEffectMap(host.sandboxId).values()).map((effect) =>\n this.serializeEffect(effect),\n );\n\n const result = await host.wsClient.call('effects.publishCatalog', { effects }) as {\n accepted?: boolean;\n acceptedCount?: number;\n rejected?: Array<{ name?: string; reason?: string }>;\n };\n\n const acceptedCount = typeof result?.acceptedCount === 'number'\n ? result.acceptedCount\n : 0;\n const rejected = Array.isArray(result?.rejected) ? result.rejected : [];\n\n if (acceptedCount === 0 && rejected.length > 0) {\n const detail = rejected\n .map((entry) => `${entry.name || 'unknown'}: ${entry.reason || 'rejected'}`)\n .join('; ');\n throw new Error(\n `Failed to publish live effects for sandbox ${host.sandboxId}: ${detail}`,\n );\n }\n\n if (rejected.length > 0) {\n console.warn(\n `[Granular] Some live effects were rejected for sandbox ${host.sandboxId}:`,\n rejected,\n );\n }\n }\n\n private async syncSandboxEffectCatalog(sandboxId: string): Promise<void> {\n const host = await this.ensureSandboxEffectHost(sandboxId);\n await this.publishSandboxEffectCatalog(host);\n }\n\n private recoverEffectHost(host: SandboxEffectHost, error: unknown): void {\n if (host.recovering) {\n return;\n }\n\n if (this.sandboxEffectHosts.get(host.sandboxId) !== host) {\n return;\n }\n\n host.recovering = true;\n this.stopEffectHostHeartbeat(host);\n this.sandboxEffectHosts.delete(host.sandboxId);\n\n try {\n host.wsClient.disconnect();\n } catch (disconnectError) {\n console.warn(\n `[Granular] Failed to disconnect stale effect host for sandbox ${host.sandboxId}:`,\n disconnectError,\n );\n }\n\n void this.ensureSandboxEffectHost(host.sandboxId).catch((reconnectError) => {\n console.error(\n `[Granular] Failed to recover effect host for sandbox ${host.sandboxId} after heartbeat failure:`,\n reconnectError,\n );\n console.error('[Granular] Original heartbeat failure:', error);\n });\n }\n\n private startEffectHostHeartbeat(host: SandboxEffectHost): void {\n if (host.heartbeatTimer) {\n clearInterval(host.heartbeatTimer);\n }\n\n host.heartbeatInFlight = false;\n\n const sendHeartbeat = (failureLabel: string, recoverOnFailure: boolean): void => {\n if (host.heartbeatInFlight || host.recovering) {\n return;\n }\n\n host.heartbeatInFlight = true;\n host.wsClient.call('client.heartbeat', {})\n .catch((error) => {\n console.warn(`${failureLabel} ${host.sandboxId}:`, error);\n if (recoverOnFailure) {\n this.recoverEffectHost(host, error);\n }\n })\n .finally(() => {\n host.heartbeatInFlight = false;\n });\n };\n\n sendHeartbeat('[Granular] Initial effect host heartbeat failed for sandbox', false);\n\n host.heartbeatTimer = setInterval(() => {\n sendHeartbeat('[Granular] Effect host heartbeat failed for sandbox', true);\n }, 10_000);\n }\n\n private stopEffectHostHeartbeat(host?: SandboxEffectHost): void {\n if (!host?.heartbeatTimer) {\n return;\n }\n clearInterval(host.heartbeatTimer);\n host.heartbeatTimer = null;\n host.heartbeatInFlight = false;\n }\n\n private async synchronizeEffectHost(host: SandboxEffectHost): Promise<void> {\n await host.wsClient.call('client.hello', {\n clientId: host.clientId,\n protocolVersion: '2.0',\n });\n this.startEffectHostHeartbeat(host);\n await this.publishSandboxEffectCatalog(host);\n }\n\n private async ensureSandboxEffectHost(sandboxId: string): Promise<SandboxEffectHost> {\n const existing = this.sandboxEffectHosts.get(sandboxId);\n if (existing) {\n return existing;\n }\n\n const inflight = this.sandboxEffectHostPromises.get(sandboxId);\n if (inflight) {\n return inflight;\n }\n\n const connectPromise = (async () => {\n const effectClientId = crypto.randomUUID();\n const clientId = `effect-host:${sandboxId}:${effectClientId}`;\n const wsClient = new WSClient({\n url: buildEffectHostUrl(this.apiUrl, sandboxId, effectClientId, clientId),\n sessionId: `effect-host:${effectClientId}`,\n token: this.apiKey,\n tokenProvider: this.tokenProvider,\n WebSocketCtor: this.WebSocketCtor,\n onUnexpectedClose: this.onUnexpectedClose,\n onReconnectError: this.onReconnectError,\n });\n\n const host: SandboxEffectHost = {\n sandboxId,\n effectClientId,\n clientId,\n wsClient,\n heartbeatTimer: null,\n heartbeatInFlight: false,\n recovering: false,\n };\n\n wsClient.registerRpcHandler('effect.invoke', async (params: unknown) => {\n const request = params as {\n effectKey: string;\n effectName: string;\n input: any;\n context: any;\n };\n return invokeRegisteredEffect(this.getSandboxEffectMap(sandboxId), request);\n });\n\n wsClient.on('open', () => {\n void this.synchronizeEffectHost(host).catch((error) => {\n console.error(\n `[Granular] Failed to re-sync effect host for sandbox ${sandboxId}:`,\n error,\n );\n });\n });\n\n wsClient.on('disconnect', () => {\n this.stopEffectHostHeartbeat(host);\n });\n\n await wsClient.connect();\n await this.synchronizeEffectHost(host);\n this.sandboxEffectHosts.set(sandboxId, host);\n return host;\n })();\n\n this.sandboxEffectHostPromises.set(sandboxId, connectPromise);\n try {\n return await connectPromise;\n } finally {\n this.sandboxEffectHostPromises.delete(sandboxId);\n }\n }\n\n private disconnectSandboxEffectHost(sandboxId: string): void {\n const host = this.sandboxEffectHosts.get(sandboxId);\n if (!host) {\n return;\n }\n\n this.stopEffectHostHeartbeat(host);\n host.wsClient.disconnect();\n this.sandboxEffectHosts.delete(sandboxId);\n }\n\n /**\n * Register an effect (tool) for a specific sandbox.\n *\n * @param sandboxNameOrId - The name or ID of the sandbox\n * @param effect - The tool definition and handler\n */\n async registerEffect(sandboxNameOrId: string, effect: ToolWithHandler): Promise<void> {\n const sandbox = await this.findOrCreateSandbox(sandboxNameOrId);\n const sandboxId = sandbox.sandboxId;\n this.getSandboxEffectMap(sandboxId).set(computeEffectKey(effect), effect);\n await this.syncSandboxEffectCatalog(sandboxId);\n }\n\n /**\n * Register multiple effects (tools) for a specific sandbox.\n * \n * batch version of `registerEffect`.\n */\n async registerEffects(sandboxNameOrId: string, effects: ToolWithHandler[]): Promise<void> {\n const sandbox = await this.findOrCreateSandbox(sandboxNameOrId);\n const sandboxId = sandbox.sandboxId;\n const map = this.getSandboxEffectMap(sandboxId);\n for (const effect of effects) {\n map.set(computeEffectKey(effect), effect);\n }\n await this.syncSandboxEffectCatalog(sandboxId);\n }\n\n /**\n * Unregister an effect from a sandbox.\n * \n * Removes it from the local sandbox registry and updates the\n * sandbox-scoped live catalog.\n */\n async unregisterEffect(sandboxNameOrId: string, name: string): Promise<void> {\n const sandbox = await this.findOrCreateSandbox(sandboxNameOrId);\n const sandboxId = sandbox.sandboxId;\n const currentMap = this.sandboxEffects.get(sandboxId);\n if (!currentMap) {\n return;\n }\n\n const nextEntries = Array.from(currentMap.entries()).filter(\n ([effectKey, effect]) => effectKey !== name && effect.name !== name,\n );\n\n if (nextEntries.length === currentMap.size) {\n return;\n }\n\n const nextMap = new Map(nextEntries);\n this.sandboxEffects.set(sandboxId, nextMap);\n\n if (nextMap.size === 0) {\n this.disconnectSandboxEffectHost(sandboxId);\n this.sandboxEffects.delete(sandboxId);\n return;\n }\n\n await this.syncSandboxEffectCatalog(sandboxId);\n }\n\n /**\n * Disconnect one sandbox-scoped effect host, or all of them when no sandbox is provided.\n *\n * This is primarily useful for long-lived helper processes such as generated\n * `granular-effects.ts` scripts that need to shut down cleanly on SIGINT/SIGTERM.\n */\n async disconnectEffects(sandboxNameOrId?: string): Promise<void> {\n if (sandboxNameOrId) {\n const sandbox = await this.findOrCreateSandbox(sandboxNameOrId);\n this.disconnectSandboxEffectHost(sandbox.sandboxId);\n return;\n }\n\n for (const sandboxId of Array.from(this.sandboxEffectHosts.keys())) {\n this.disconnectSandboxEffectHost(sandboxId);\n }\n }\n\n /**\n * Unregister all effects for a sandbox.\n */\n async unregisterAllEffects(sandboxNameOrId: string): Promise<void> {\n const sandbox = await this.findOrCreateSandbox(sandboxNameOrId);\n const sandboxId = sandbox.sandboxId;\n this.sandboxEffects.delete(sandboxId);\n this.disconnectSandboxEffectHost(sandboxId);\n }\n\n /**\n * Find a sandbox by name or create it if it doesn't exist\n */\n private async findOrCreateSandbox(nameOrId: string): Promise<Sandbox> {\n try {\n // Try to get by ID first\n const sandbox = await this.sandboxes.get(nameOrId);\n return sandbox;\n } catch {\n // If not found by ID, try to find by name or create\n const sandboxes = await this.sandboxes.list();\n const existing = sandboxes.items.find(s => s.name === nameOrId);\n if (existing) {\n return existing;\n }\n\n // Create new sandbox\n const created = await this.sandboxes.create({ name: nameOrId });\n return created;\n }\n }\n\n /**\n * Ensure a permission profile exists for a sandbox, creating it if needed.\n * If profileName matches an existing profile name, returns its ID.\n * Otherwise, creates a new profile with default allow-all rules.\n */\n private async ensurePermissionProfile(\n sandboxId: string,\n profileName: string\n ): Promise<string> {\n try {\n // Check if profile already exists by name\n const profiles = await this.permissionProfiles.list(sandboxId);\n const existing = profiles.find((p) => p.name === profileName);\n if (existing) {\n return existing.permissionProfileId;\n }\n } catch {\n // Ignore lookup errors, try to create\n }\n\n // Create new profile with default rules (allow all tools)\n const created = await this.permissionProfiles.create(sandboxId, {\n name: profileName,\n rules: {\n effects: { allow: ['*'] },\n resources: { allow: ['*'] },\n },\n });\n return created.permissionProfileId;\n }\n\n /**\n * Ensure an assignment exists for a subject in a sandbox with a permission profile\n */\n private async ensureAssignment(\n subjectId: string,\n sandboxId: string,\n permissionProfileId: string\n ): Promise<void> {\n try {\n const assignments = await this.request<AssignmentListResponse>(\n `/control/subjects/${subjectId}/assignments`\n );\n // Check for ANY assignment in this sandbox\n const existing = assignments.items.find(\n (a) => a.sandboxId === sandboxId\n );\n\n if (existing) {\n // If assignment exists with same profile, we are done\n if (existing.permissionProfileId === permissionProfileId) {\n return;\n }\n\n // If assignment exists but with different profile, delete it first\n // This avoids UNIQUE constraint violation when creating the new one\n await this.request<DeleteResponse>(`/control/assignments/${existing.assignmentId}`, {\n method: 'DELETE'\n });\n }\n } catch {\n // Ignore lookup errors\n }\n\n await this.request<Assignment>(`/control/subjects/${subjectId}/assignments`, {\n method: 'POST',\n body: JSON.stringify({\n sandboxId,\n subjectId,\n permissionProfileId,\n }),\n });\n }\n\n /**\n * Sandbox management API\n */\n get sandboxes() {\n return {\n list: async (): Promise<SandboxListResponse> => {\n return this.request<SandboxListResponse>('/control/sandboxes');\n },\n get: async (id: string): Promise<Sandbox> => {\n return this.request<Sandbox>(`/control/sandboxes/${id}`);\n },\n create: async (data: CreateSandboxData): Promise<Sandbox> => {\n return this.request<Sandbox>('/control/sandboxes', {\n method: 'POST',\n body: JSON.stringify(data),\n });\n },\n update: async (id: string, data: Partial<CreateSandboxData>): Promise<Sandbox> => {\n return this.request<Sandbox>(`/control/sandboxes/${id}`, {\n method: 'PATCH',\n body: JSON.stringify(data),\n });\n },\n delete: async (id: string): Promise<DeleteResponse> => {\n return this.request<DeleteResponse>(`/control/sandboxes/${id}`, {\n method: 'DELETE',\n });\n },\n };\n }\n\n /**\n * Permission Profile management for sandboxes\n */\n get permissionProfiles() {\n return {\n list: async (sandboxId: string): Promise<PermissionProfile[]> => {\n const result = await this.request<PermissionProfileListResponse>(\n `/control/sandboxes/${sandboxId}/permission-profiles`\n );\n return result.items;\n },\n get: async (sandboxId: string, profileId: string): Promise<PermissionProfile> => {\n return this.request<PermissionProfile>(\n `/control/sandboxes/${sandboxId}/permission-profiles/${profileId}`\n );\n },\n create: async (\n sandboxId: string,\n data: CreatePermissionProfileData\n ): Promise<PermissionProfile> => {\n return this.request<PermissionProfile>(\n `/control/sandboxes/${sandboxId}/permission-profiles`,\n {\n method: 'POST',\n body: JSON.stringify(data),\n }\n );\n },\n delete: async (sandboxId: string, profileId: string): Promise<DeleteResponse> => {\n return this.request<DeleteResponse>(\n `/control/sandboxes/${sandboxId}/permission-profiles/${profileId}`,\n {\n method: 'DELETE',\n }\n );\n },\n };\n }\n\n /**\n * Environment management\n */\n get environments() {\n return {\n list: async (sandboxId: string): Promise<EnvironmentData[]> => {\n const result = await this.request<EnvironmentListResponse>(\n `/control/sandboxes/${sandboxId}/environments`\n );\n return result.items.map(normalizeEnvironmentData);\n },\n get: async (environmentId: string): Promise<EnvironmentData> => {\n return normalizeEnvironmentData(\n await this.request<EnvironmentData>(`/control/environments/${environmentId}`)\n );\n },\n create: async (\n sandboxId: string,\n data: CreateEnvironmentData\n ): Promise<EnvironmentData> => {\n const environmentName = data.environment || data.envName;\n return normalizeEnvironmentData(await this.request<EnvironmentData>(`/control/sandboxes/${sandboxId}/environments`, {\n method: 'POST',\n body: JSON.stringify({\n ...data,\n envName: environmentName,\n }),\n }));\n },\n delete: async (environmentId: string): Promise<DeleteResponse> => {\n return this.request<DeleteResponse>(`/control/environments/${environmentId}`, {\n method: 'DELETE',\n });\n },\n };\n }\n\n /**\n * Subject management\n */\n get subjects() {\n return {\n get: async (subjectId: string): Promise<Subject> => {\n return normalizeSubject(await this.request<Subject>(`/control/subjects/${subjectId}`));\n },\n listAssignments: async (subjectId: string): Promise<AssignmentListResponse> => {\n return this.request<AssignmentListResponse>(`/control/subjects/${subjectId}/assignments`);\n },\n };\n }\n\n /**\n * @deprecated Use recordUser() instead\n */\n get users() {\n return {\n create: async (data: { id: string; name?: string; email?: string }): Promise<Subject> => {\n return normalizeSubject(await this.request<Subject>('/control/subjects', {\n method: 'POST',\n body: JSON.stringify({\n identityId: data.id,\n name: data.name,\n email: data.email,\n }),\n }));\n },\n get: async (id: string): Promise<Subject> => {\n return normalizeSubject(await this.request<Subject>(`/control/subjects/${id}`));\n },\n };\n }\n\n /**\n * Make an authenticated API request\n */\n private async request<T>(path: string, options: RequestInit = {}): Promise<T> {\n const url = `${this.httpUrl}${path}`;\n console.log(`[SDK] Requesting: ${url}`);\n\n const response = await fetch(url, {\n ...options,\n headers: {\n 'Authorization': `Bearer ${this.apiKey}`,\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(`Granular API Error (${response.status}): ${errorText}`);\n }\n\n if (response.status === 204) {\n return { deleted: true } as T;\n }\n\n return response.json() as Promise<T>;\n }\n}\n"]}
1
+ {"version":3,"sources":["../../../node_modules/ws/lib/constants.js","../../../node_modules/node-gyp-build/node-gyp-build.js","../../../node_modules/node-gyp-build/index.js","../../../node_modules/bufferutil/fallback.js","../../../node_modules/bufferutil/index.js","../../../node_modules/ws/lib/buffer-util.js","../../../node_modules/ws/lib/limiter.js","../../../node_modules/ws/lib/permessage-deflate.js","../../../node_modules/utf-8-validate/fallback.js","../../../node_modules/utf-8-validate/index.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","../../../node_modules/ws/wrapper.mjs","../src/ws-client.ts","../src/session.ts","../src/endpoints.ts","../../../node_modules/zod/v3/external.js","../../../node_modules/zod/v3/helpers/util.js","../../../node_modules/zod/v3/ZodError.js","../../../node_modules/zod/v3/locales/en.js","../../../node_modules/zod/v3/errors.js","../../../node_modules/zod/v3/helpers/parseUtil.js","../../../node_modules/zod/v3/helpers/errorUtil.js","../../../node_modules/zod/v3/types.js","../../metamodel-core/src/manifest-zod.ts","../../metamodel-core/src/index.ts","../../metamodel-effect-behaviors/src/index.ts","../src/effect-runtime.ts","../../metamodel-enum/src/index.ts","../../metamodel-filter-by/src/index.ts","../../metamodel-note/src/index.ts","../../metamodel-required/src/index.ts","../../metamodel-state-machine/src/index.ts","../../metamodel-validation-rule/src/index.ts","../../metamodel-preset-default/src/index.ts","../src/manifest-metamodels.ts","../src/client.ts"],"names":["load","dir","platform","arch","runtime","abi","require_node_gyp_build","mask","data","require_fallback","Receiver","Sender","URL","WebSocket","key","createWebSocketStream","err","protocol","WebSocketServer","Automerge","docs","util","objectUtil","errorUtil","errorMap","ctx","result","issues","elements","processed","r","ZodFirstPartyTypeKind","computeEffectKey"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAA,iBAAA,GAAA,UAAA,CAAA;AAAA,EAAA,wCAAA,CAAA,OAAA,EAAA,MAAA,EAAA;AAEA,IAAA,IAAM,YAAA,GAAe,CAAC,YAAA,EAAc,aAAA,EAAe,WAAW,CAAA;AAC9D,IAAA,IAAM,OAAA,GAAU,OAAO,IAAA,KAAS,WAAA;AAEhC,IAAA,IAAI,OAAA,EAAS,YAAA,CAAa,IAAA,CAAK,MAAM,CAAA;AAErC,IAAA,MAAA,CAAO,OAAA,GAAU;AAAA,MACf,YAAA;AAAA,MACA,aAAA,EAAe,GAAA;AAAA,MACf,YAAA,EAAc,MAAA,CAAO,KAAA,CAAM,CAAC,CAAA;AAAA,MAC5B,IAAA,EAAM,sCAAA;AAAA,MACN,OAAA;AAAA,MACA,oBAAA,EAAsB,OAAO,wBAAwB,CAAA;AAAA,MACrD,SAAA,EAAW,OAAO,WAAW,CAAA;AAAA,MAC7B,WAAA,EAAa,OAAO,aAAa,CAAA;AAAA,MACjC,UAAA,EAAY,OAAO,WAAW,CAAA;AAAA,MAC9B,MAAM,MAAM;AAAA,MAAC;AAAA,KACf;AAAA,EAAA;AAAA,CAAA,CAAA;;;AClBA,IAAA,sBAAA,GAAA,UAAA,CAAA;AAAA,EAAA,qDAAA,CAAA,OAAA,EAAA,MAAA,EAAA;AAAA,IAAA,IAAI,EAAA,GAAK,UAAQ,IAAI,CAAA;AACrB,IAAA,IAAI,IAAA,GAAO,UAAQ,MAAM,CAAA;AACzB,IAAA,IAAI,EAAA,GAAK,UAAQ,IAAI,CAAA;AAGrB,IAAA,IAAI,cAAA,GAAiB,OAAO,mBAAA,KAAwB,UAAA,GAAa,uBAAA,GAA0B,SAAA;AAE3F,IAAA,IAAI,OAAQ,OAAA,CAAQ,MAAA,IAAU,OAAA,CAAQ,MAAA,CAAO,aAAc,EAAC;AAC5D,IAAA,IAAI,aAAA,GAAgB,CAAC,CAAC,OAAA,CAAQ,GAAA,CAAI,cAAA;AAClC,IAAA,IAAI,GAAA,GAAM,QAAQ,QAAA,CAAS,OAAA;AAC3B,IAAA,IAAI,UAAU,UAAA,EAAW,GAAI,UAAA,GAAc,MAAA,KAAW,aAAA,GAAgB,MAAA;AAEtE,IAAA,IAAI,IAAA,GAAO,OAAA,CAAQ,GAAA,CAAI,eAAA,IAAmB,GAAG,IAAA,EAAK;AAClD,IAAA,IAAI,QAAA,GAAW,OAAA,CAAQ,GAAA,CAAI,mBAAA,IAAuB,GAAG,QAAA,EAAS;AAC9D,IAAA,IAAI,OAAO,OAAA,CAAQ,GAAA,CAAI,SAAS,QAAA,CAAS,QAAQ,IAAI,MAAA,GAAS,OAAA,CAAA;AAC9D,IAAA,IAAI,IAAA,GAAO,QAAQ,GAAA,CAAI,WAAA,KAAgB,SAAS,OAAA,GAAU,GAAA,GAAM,KAAK,WAAA,CAAA,IAAgB,EAAA;AACrF,IAAA,IAAI,EAAA,GAAA,CAAM,QAAQ,QAAA,CAAS,EAAA,IAAM,IAAI,KAAA,CAAM,GAAG,EAAE,CAAC,CAAA;AAEjD,IAAA,MAAA,CAAO,OAAA,GAAUA,KAAAA;AAEjB,IAAA,SAASA,MAAM,GAAA,EAAK;AAClB,MAAA,OAAO,cAAA,CAAeA,KAAAA,CAAK,OAAA,CAAQ,GAAG,CAAC,CAAA;AAAA,IACzC;AAEA,IAAAA,KAAAA,CAAK,OAAA,GAAUA,KAAAA,CAAK,IAAA,GAAO,SAAU,GAAA,EAAK;AACxC,MAAA,GAAA,GAAM,IAAA,CAAK,OAAA,CAAQ,GAAA,IAAO,GAAG,CAAA;AAE7B,MAAA,IAAI;AACF,QAAA,IAAI,IAAA,GAAO,cAAA,CAAe,IAAA,CAAK,IAAA,CAAK,GAAA,EAAK,cAAc,CAAC,CAAA,CAAE,IAAA,CAAK,WAAA,EAAY,CAAE,OAAA,CAAQ,MAAM,GAAG,CAAA;AAC9F,QAAA,IAAI,OAAA,CAAQ,IAAI,IAAA,GAAO,WAAW,GAAG,GAAA,GAAM,OAAA,CAAQ,GAAA,CAAI,IAAA,GAAO,WAAW,CAAA;AAAA,MAC3E,SAAS,GAAA,EAAK;AAAA,MAAC;AAEf,MAAA,IAAI,CAAC,aAAA,EAAe;AAClB,QAAA,IAAI,UAAU,QAAA,CAAS,IAAA,CAAK,KAAK,GAAA,EAAK,eAAe,GAAG,UAAU,CAAA;AAClE,QAAA,IAAI,SAAS,OAAO,OAAA;AAEpB,QAAA,IAAI,QAAQ,QAAA,CAAS,IAAA,CAAK,KAAK,GAAA,EAAK,aAAa,GAAG,UAAU,CAAA;AAC9D,QAAA,IAAI,OAAO,OAAO,KAAA;AAAA,MACpB;AAEA,MAAA,IAAI,QAAA,GAAW,QAAQ,GAAG,CAAA;AAC1B,MAAA,IAAI,UAAU,OAAO,QAAA;AAErB,MAAA,IAAI,SAAS,OAAA,CAAQ,IAAA,CAAK,OAAA,CAAQ,OAAA,CAAQ,QAAQ,CAAC,CAAA;AACnD,MAAA,IAAI,QAAQ,OAAO,MAAA;AAEnB,MAAA,IAAI,MAAA,GAAS;AAAA,QACX,WAAA,GAAc,QAAA;AAAA,QACd,OAAA,GAAU,IAAA;AAAA,QACV,UAAA,GAAa,OAAA;AAAA,QACb,MAAA,GAAS,GAAA;AAAA,QACT,KAAA,GAAQ,EAAA;AAAA,QACR,IAAA,GAAO,UAAU,IAAA,GAAO,EAAA;AAAA,QACxB,OAAA,GAAU,IAAA;AAAA,QACV,OAAA,GAAU,QAAQ,QAAA,CAAS,IAAA;AAAA,QAC3B,QAAQ,QAAA,CAAS,QAAA,GAAW,WAAA,GAAc,OAAA,CAAQ,SAAS,QAAA,GAAW,EAAA;AAAA,QACtE,OAAO,mBAAA,KAAwB,UAAA,GAAa,cAAA,GAAiB;AAAA;AAAA,OAC/D,CAAE,MAAA,CAAO,OAAO,CAAA,CAAE,KAAK,GAAG,CAAA;AAE1B,MAAA,MAAM,IAAI,KAAA,CAAM,gCAAA,GAAmC,MAAA,GAAS,qBAAA,GAAwB,MAAM,IAAI,CAAA;AAE9F,MAAA,SAAS,QAASC,IAAAA,EAAK;AAErB,QAAA,IAAI,MAAA,GAAS,YAAY,IAAA,CAAK,IAAA,CAAKA,MAAK,WAAW,CAAC,CAAA,CAAE,GAAA,CAAI,UAAU,CAAA;AACpE,QAAA,IAAI,KAAA,GAAQ,MAAA,CAAO,MAAA,CAAO,UAAA,CAAW,QAAA,EAAU,IAAI,CAAC,CAAA,CAAE,IAAA,CAAK,aAAa,CAAA,CAAE,CAAC,CAAA;AAC3E,QAAA,IAAI,CAAC,KAAA,EAAO;AAGZ,QAAA,IAAI,YAAY,IAAA,CAAK,IAAA,CAAKA,IAAAA,EAAK,WAAA,EAAa,MAAM,IAAI,CAAA;AACtD,QAAA,IAAI,MAAA,GAAS,WAAA,CAAY,SAAS,CAAA,CAAE,IAAI,SAAS,CAAA;AACjD,QAAA,IAAI,aAAa,MAAA,CAAO,MAAA,CAAO,SAAA,CAAU,OAAA,EAAS,GAAG,CAAC,CAAA;AACtD,QAAA,IAAI,SAAS,UAAA,CAAW,IAAA,CAAK,YAAY,OAAO,CAAC,EAAE,CAAC,CAAA;AACpD,QAAA,IAAI,QAAQ,OAAO,IAAA,CAAK,IAAA,CAAK,SAAA,EAAW,OAAO,IAAI,CAAA;AAAA,MACrD;AAAA,IACF,CAAA;AAEA,IAAA,SAAS,YAAa,GAAA,EAAK;AACzB,MAAA,IAAI;AACF,QAAA,OAAO,EAAA,CAAG,YAAY,GAAG,CAAA;AAAA,MAC3B,SAAS,GAAA,EAAK;AACZ,QAAA,OAAO,EAAC;AAAA,MACV;AAAA,IACF;AAEA,IAAA,SAAS,QAAA,CAAU,KAAK,MAAA,EAAQ;AAC9B,MAAA,IAAI,KAAA,GAAQ,WAAA,CAAY,GAAG,CAAA,CAAE,OAAO,MAAM,CAAA;AAC1C,MAAA,OAAO,KAAA,CAAM,CAAC,CAAA,IAAK,IAAA,CAAK,KAAK,GAAA,EAAK,KAAA,CAAM,CAAC,CAAC,CAAA;AAAA,IAC5C;AAEA,IAAA,SAAS,WAAY,IAAA,EAAM;AACzB,MAAA,OAAO,SAAA,CAAU,KAAK,IAAI,CAAA;AAAA,IAC5B;AAEA,IAAA,SAAS,WAAY,IAAA,EAAM;AAEzB,MAAA,IAAI,GAAA,GAAM,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA;AACxB,MAAA,IAAI,GAAA,CAAI,WAAW,CAAA,EAAG;AAEtB,MAAA,IAAIC,SAAAA,GAAW,IAAI,CAAC,CAAA;AACpB,MAAA,IAAI,aAAA,GAAgB,GAAA,CAAI,CAAC,CAAA,CAAE,MAAM,GAAG,CAAA;AAEpC,MAAA,IAAI,CAACA,SAAAA,EAAU;AACf,MAAA,IAAI,CAAC,cAAc,MAAA,EAAQ;AAC3B,MAAA,IAAI,CAAC,aAAA,CAAc,KAAA,CAAM,OAAO,CAAA,EAAG;AAEnC,MAAA,OAAO,EAAE,IAAA,EAAM,QAAA,EAAAA,SAAAA,EAAU,aAAA,EAAc;AAAA,IACzC;AAEA,IAAA,SAAS,UAAA,CAAYA,WAAUC,KAAAA,EAAM;AACnC,MAAA,OAAO,SAAU,KAAA,EAAO;AACtB,QAAA,IAAI,KAAA,IAAS,MAAM,OAAO,KAAA;AAC1B,QAAA,IAAI,KAAA,CAAM,QAAA,KAAaD,SAAAA,EAAU,OAAO,KAAA;AACxC,QAAA,OAAO,KAAA,CAAM,aAAA,CAAc,QAAA,CAASC,KAAI,CAAA;AAAA,MAC1C,CAAA;AAAA,IACF;AAEA,IAAA,SAAS,aAAA,CAAe,GAAG,CAAA,EAAG;AAE5B,MAAA,OAAO,CAAA,CAAE,aAAA,CAAc,MAAA,GAAS,CAAA,CAAE,aAAA,CAAc,MAAA;AAAA,IAClD;AAEA,IAAA,SAAS,UAAW,IAAA,EAAM;AACxB,MAAA,IAAI,GAAA,GAAM,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA;AACxB,MAAA,IAAI,SAAA,GAAY,IAAI,GAAA,EAAI;AACxB,MAAA,IAAI,IAAA,GAAO,EAAE,IAAA,EAAY,WAAA,EAAa,CAAA,EAAE;AAExC,MAAA,IAAI,cAAc,MAAA,EAAQ;AAE1B,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,GAAA,CAAI,QAAQ,CAAA,EAAA,EAAK;AACnC,QAAA,IAAI,GAAA,GAAM,IAAI,CAAC,CAAA;AAEf,QAAA,IAAI,GAAA,KAAQ,MAAA,IAAU,GAAA,KAAQ,UAAA,IAAc,QAAQ,aAAA,EAAe;AACjE,UAAA,IAAA,CAAK,OAAA,GAAU,GAAA;AAAA,QACjB,CAAA,MAAA,IAAW,QAAQ,MAAA,EAAQ;AACzB,UAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AAAA,QACd,WAAW,GAAA,CAAI,KAAA,CAAM,CAAA,EAAG,CAAC,MAAM,KAAA,EAAO;AACpC,UAAA,IAAA,CAAK,GAAA,GAAM,GAAA,CAAI,KAAA,CAAM,CAAC,CAAA;AAAA,QACxB,WAAW,GAAA,CAAI,KAAA,CAAM,CAAA,EAAG,CAAC,MAAM,IAAA,EAAM;AACnC,UAAA,IAAA,CAAK,EAAA,GAAK,GAAA,CAAI,KAAA,CAAM,CAAC,CAAA;AAAA,QACvB,WAAW,GAAA,CAAI,KAAA,CAAM,CAAA,EAAG,CAAC,MAAM,MAAA,EAAQ;AACrC,UAAA,IAAA,CAAK,IAAA,GAAO,GAAA,CAAI,KAAA,CAAM,CAAC,CAAA;AAAA,QACzB,CAAA,MAAA,IAAW,GAAA,KAAQ,OAAA,IAAW,GAAA,KAAQ,MAAA,EAAQ;AAC5C,UAAA,IAAA,CAAK,IAAA,GAAO,GAAA;AAAA,QACd,CAAA,MAAO;AACL,UAAA;AAAA,QACF;AAEA,QAAA,IAAA,CAAK,WAAA,EAAA;AAAA,MACP;AAEA,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,SAAS,SAAA,CAAWC,UAASC,IAAAA,EAAK;AAChC,MAAA,OAAO,SAAU,IAAA,EAAM;AACrB,QAAA,IAAI,IAAA,IAAQ,MAAM,OAAO,KAAA;AACzB,QAAA,IAAI,IAAA,CAAK,WAAW,IAAA,CAAK,OAAA,KAAYD,YAAW,CAAC,eAAA,CAAgB,IAAI,CAAA,EAAG,OAAO,KAAA;AAC/E,QAAA,IAAI,IAAA,CAAK,OAAO,IAAA,CAAK,GAAA,KAAQC,QAAO,CAAC,IAAA,CAAK,MAAM,OAAO,KAAA;AACvD,QAAA,IAAI,IAAA,CAAK,EAAA,IAAM,IAAA,CAAK,EAAA,KAAO,IAAI,OAAO,KAAA;AACtC,QAAA,IAAI,IAAA,CAAK,IAAA,IAAQ,IAAA,CAAK,IAAA,KAAS,MAAM,OAAO,KAAA;AAC5C,QAAA,IAAI,IAAA,CAAK,IAAA,IAAQ,IAAA,CAAK,IAAA,KAAS,MAAM,OAAO,KAAA;AAE5C,QAAA,OAAO,IAAA;AAAA,MACT,CAAA;AAAA,IACF;AAEA,IAAA,SAAS,gBAAiB,IAAA,EAAM;AAC9B,MAAA,OAAO,IAAA,CAAK,OAAA,KAAY,MAAA,IAAU,IAAA,CAAK,IAAA;AAAA,IACzC;AAEA,IAAA,SAAS,YAAaD,QAAAA,EAAS;AAE7B,MAAA,OAAO,SAAU,GAAG,CAAA,EAAG;AACrB,QAAA,IAAI,CAAA,CAAE,OAAA,KAAY,CAAA,CAAE,OAAA,EAAS;AAC3B,UAAA,OAAO,CAAA,CAAE,OAAA,KAAYA,QAAAA,GAAU,EAAA,GAAK,CAAA;AAAA,QACtC,CAAA,MAAA,IAAW,CAAA,CAAE,GAAA,KAAQ,CAAA,CAAE,GAAA,EAAK;AAC1B,UAAA,OAAO,CAAA,CAAE,MAAM,EAAA,GAAK,CAAA;AAAA,QACtB,CAAA,MAAA,IAAW,CAAA,CAAE,WAAA,KAAgB,CAAA,CAAE,WAAA,EAAa;AAC1C,UAAA,OAAO,CAAA,CAAE,WAAA,GAAc,CAAA,CAAE,WAAA,GAAc,EAAA,GAAK,CAAA;AAAA,QAC9C,CAAA,MAAO;AACL,UAAA,OAAO,CAAA;AAAA,QACT;AAAA,MACF,CAAA;AAAA,IACF;AAEA,IAAA,SAAS,MAAA,GAAU;AACjB,MAAA,OAAO,CAAC,EAAE,OAAA,CAAQ,QAAA,IAAY,QAAQ,QAAA,CAAS,EAAA,CAAA;AAAA,IACjD;AAEA,IAAA,SAAS,UAAA,GAAc;AACrB,MAAA,IAAI,OAAA,CAAQ,QAAA,IAAY,OAAA,CAAQ,QAAA,CAAS,UAAU,OAAO,IAAA;AAC1D,MAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,oBAAA,EAAsB,OAAO,IAAA;AAC7C,MAAA,OAAO,OAAO,MAAA,KAAW,WAAA,IAAe,OAAO,OAAA,IAAW,MAAA,CAAO,QAAQ,IAAA,KAAS,UAAA;AAAA,IACpF;AAEA,IAAA,SAAS,SAAUF,SAAAA,EAAU;AAC3B,MAAA,OAAOA,SAAAA,KAAa,OAAA,IAAW,EAAA,CAAG,UAAA,CAAW,qBAAqB,CAAA;AAAA,IACpE;AAIA,IAAAF,MAAK,SAAA,GAAY,SAAA;AACjB,IAAAA,MAAK,SAAA,GAAY,SAAA;AACjB,IAAAA,MAAK,WAAA,GAAc,WAAA;AACnB,IAAAA,MAAK,UAAA,GAAa,UAAA;AAClB,IAAAA,MAAK,UAAA,GAAa,UAAA;AAClB,IAAAA,MAAK,aAAA,GAAgB,aAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;AC9MrB,IAAAM,uBAAAA,GAAA,UAAA,CAAA;AAAA,EAAA,4CAAA,CAAA,OAAA,EAAA,MAAA,EAAA;AAAA,IAAA,IAAM,cAAA,GAAiB,OAAO,mBAAA,KAAwB,UAAA,GAAa,uBAAA,GAA0B,SAAA;AAC7F,IAAA,IAAI,OAAO,cAAA,CAAe,KAAA,KAAU,UAAA,EAAY;AAC9C,MAAA,MAAA,CAAO,OAAA,GAAU,cAAA,CAAe,KAAA,CAAM,IAAA,CAAK,cAAc,CAAA;AAAA,IAC3D,CAAA,MAAO;AACL,MAAA,MAAA,CAAO,OAAA,GAAU,sBAAA,EAAA;AAAA,IACnB;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACLA,IAAA,gBAAA,GAAA,UAAA,CAAA;AAAA,EAAA,2CAAA,CAAA,OAAA,EAAA,MAAA,EAAA;AAYA,IAAA,IAAM,OAAO,CAAC,MAAA,EAAQC,KAAAA,EAAM,MAAA,EAAQ,QAAQ,MAAA,KAAW;AACrD,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,EAAQ,CAAA,EAAA,EAAK;AAC/B,QAAA,MAAA,CAAO,MAAA,GAAS,CAAC,CAAA,GAAI,MAAA,CAAO,CAAC,CAAA,GAAIA,KAAAA,CAAK,IAAI,CAAC,CAAA;AAAA,MAC7C;AAAA,IACF,CAAA;AASA,IAAA,IAAM,MAAA,GAAS,CAAC,MAAA,EAAQA,KAAAA,KAAS;AAE/B,MAAA,MAAM,SAAS,MAAA,CAAO,MAAA;AACtB,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,EAAQ,CAAA,EAAA,EAAK;AAC/B,QAAA,MAAA,CAAO,CAAC,CAAA,IAAKA,KAAAA,CAAK,CAAA,GAAI,CAAC,CAAA;AAAA,MACzB;AAAA,IACF,CAAA;AAEA,IAAA,MAAA,CAAO,OAAA,GAAU,EAAE,IAAA,EAAM,MAAA,EAAO;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACjChC,IAAA,kBAAA,GAAA,UAAA,CAAA;AAAA,EAAA,wCAAA,CAAA,OAAA,EAAA,MAAA,EAAA;AAEA,IAAA,IAAI;AACF,MAAA,MAAA,CAAO,OAAA,GAAU,0BAA0B,SAAS,CAAA;AAAA,IACtD,SAAS,CAAA,EAAG;AACV,MAAA,MAAA,CAAO,OAAA,GAAU,gBAAA,EAAA;AAAA,IACnB;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACNA,IAAA,mBAAA,GAAA,UAAA,CAAA;AAAA,EAAA,0CAAA,CAAA,OAAA,EAAA,MAAA,EAAA;AAEA,IAAA,IAAM,EAAE,cAAa,GAAI,iBAAA,EAAA;AAEzB,IAAA,IAAM,UAAA,GAAa,MAAA,CAAO,MAAA,CAAO,OAAO,CAAA;AAUxC,IAAA,SAAS,MAAA,CAAO,MAAM,WAAA,EAAa;AACjC,MAAA,IAAI,IAAA,CAAK,MAAA,KAAW,CAAA,EAAG,OAAO,YAAA;AAC9B,MAAA,IAAI,IAAA,CAAK,MAAA,KAAW,CAAA,EAAG,OAAO,KAAK,CAAC,CAAA;AAEpC,MAAA,MAAM,MAAA,GAAS,MAAA,CAAO,WAAA,CAAY,WAAW,CAAA;AAC7C,MAAA,IAAI,MAAA,GAAS,CAAA;AAEb,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,QAAQ,CAAA,EAAA,EAAK;AACpC,QAAA,MAAM,GAAA,GAAM,KAAK,CAAC,CAAA;AAClB,QAAA,MAAA,CAAO,GAAA,CAAI,KAAK,MAAM,CAAA;AACtB,QAAA,MAAA,IAAU,GAAA,CAAI,MAAA;AAAA,MAChB;AAEA,MAAA,IAAI,SAAS,WAAA,EAAa;AACxB,QAAA,OAAO,IAAI,UAAA,CAAW,MAAA,CAAO,MAAA,EAAQ,MAAA,CAAO,YAAY,MAAM,CAAA;AAAA,MAChE;AAEA,MAAA,OAAO,MAAA;AAAA,IACT;AAYA,IAAA,SAAS,KAAA,CAAM,MAAA,EAAQ,IAAA,EAAM,MAAA,EAAQ,QAAQ,MAAA,EAAQ;AACnD,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,EAAQ,CAAA,EAAA,EAAK;AAC/B,QAAA,MAAA,CAAO,MAAA,GAAS,CAAC,CAAA,GAAI,MAAA,CAAO,CAAC,CAAA,GAAI,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,MAC7C;AAAA,IACF;AASA,IAAA,SAAS,OAAA,CAAQ,QAAQ,IAAA,EAAM;AAC7B,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,CAAO,QAAQ,CAAA,EAAA,EAAK;AACtC,QAAA,MAAA,CAAO,CAAC,CAAA,IAAK,IAAA,CAAK,CAAA,GAAI,CAAC,CAAA;AAAA,MACzB;AAAA,IACF;AASA,IAAA,SAAS,cAAc,GAAA,EAAK;AAC1B,MAAA,IAAI,GAAA,CAAI,MAAA,KAAW,GAAA,CAAI,MAAA,CAAO,UAAA,EAAY;AACxC,QAAA,OAAO,GAAA,CAAI,MAAA;AAAA,MACb;AAEA,MAAA,OAAO,GAAA,CAAI,OAAO,KAAA,CAAM,GAAA,CAAI,YAAY,GAAA,CAAI,UAAA,GAAa,IAAI,MAAM,CAAA;AAAA,IACrE;AAUA,IAAA,SAAS,SAAS,IAAA,EAAM;AACtB,MAAA,QAAA,CAAS,QAAA,GAAW,IAAA;AAEpB,MAAA,IAAI,MAAA,CAAO,QAAA,CAAS,IAAI,CAAA,EAAG,OAAO,IAAA;AAElC,MAAA,IAAI,GAAA;AAEJ,MAAA,IAAI,gBAAgB,WAAA,EAAa;AAC/B,QAAA,GAAA,GAAM,IAAI,WAAW,IAAI,CAAA;AAAA,MAC3B,CAAA,MAAA,IAAW,WAAA,CAAY,MAAA,CAAO,IAAI,CAAA,EAAG;AACnC,QAAA,GAAA,GAAM,IAAI,UAAA,CAAW,IAAA,CAAK,QAAQ,IAAA,CAAK,UAAA,EAAY,KAAK,UAAU,CAAA;AAAA,MACpE,CAAA,MAAO;AACL,QAAA,GAAA,GAAM,MAAA,CAAO,KAAK,IAAI,CAAA;AACtB,QAAA,QAAA,CAAS,QAAA,GAAW,KAAA;AAAA,MACtB;AAEA,MAAA,OAAO,GAAA;AAAA,IACT;AAEA,IAAA,MAAA,CAAO,OAAA,GAAU;AAAA,MACf,MAAA;AAAA,MACA,IAAA,EAAM,KAAA;AAAA,MACN,aAAA;AAAA,MACA,QAAA;AAAA,MACA,MAAA,EAAQ;AAAA,KACV;AAGA,IAAA,IAAI,CAAC,OAAA,CAAQ,GAAA,CAAI,iBAAA,EAAmB;AAClC,MAAA,IAAI;AACF,QAAA,MAAM,UAAA,GAAa,kBAAA,EAAA;AAEnB,QAAA,MAAA,CAAO,QAAQ,IAAA,GAAO,SAAU,QAAQ,IAAA,EAAM,MAAA,EAAQ,QAAQ,MAAA,EAAQ;AACpE,UAAA,IAAI,SAAS,EAAA,EAAI,KAAA,CAAM,QAAQ,IAAA,EAAM,MAAA,EAAQ,QAAQ,MAAM,CAAA;AAAA,0BAC3C,IAAA,CAAK,MAAA,EAAQ,IAAA,EAAM,MAAA,EAAQ,QAAQ,MAAM,CAAA;AAAA,QAC3D,CAAA;AAEA,QAAA,MAAA,CAAO,OAAA,CAAQ,MAAA,GAAS,SAAU,MAAA,EAAQ,IAAA,EAAM;AAC9C,UAAA,IAAI,MAAA,CAAO,MAAA,GAAS,EAAA,EAAI,OAAA,CAAQ,QAAQ,IAAI,CAAA;AAAA,eACvC,UAAA,CAAW,MAAA,CAAO,MAAA,EAAQ,IAAI,CAAA;AAAA,QACrC,CAAA;AAAA,MACF,SAAS,CAAA,EAAG;AAAA,MAEZ;AAAA,IACF;AAAA,EAAA;AAAA,CAAA,CAAA;;;AClIA,IAAA,eAAA,GAAA,UAAA,CAAA;AAAA,EAAA,sCAAA,CAAA,OAAA,EAAA,MAAA,EAAA;AAEA,IAAA,IAAM,KAAA,GAAQ,OAAO,OAAO,CAAA;AAC5B,IAAA,IAAM,IAAA,GAAO,OAAO,MAAM,CAAA;AAM1B,IAAA,IAAM,UAAN,MAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOZ,YAAY,WAAA,EAAa;AACvB,QAAA,IAAA,CAAK,KAAK,IAAI,MAAM;AAClB,UAAA,IAAA,CAAK,OAAA,EAAA;AACL,UAAA,IAAA,CAAK,IAAI,CAAA,EAAE;AAAA,QACb,CAAA;AACA,QAAA,IAAA,CAAK,cAAc,WAAA,IAAe,QAAA;AAClC,QAAA,IAAA,CAAK,OAAO,EAAC;AACb,QAAA,IAAA,CAAK,OAAA,GAAU,CAAA;AAAA,MACjB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA,IAAI,GAAA,EAAK;AACP,QAAA,IAAA,CAAK,IAAA,CAAK,KAAK,GAAG,CAAA;AAClB,QAAA,IAAA,CAAK,IAAI,CAAA,EAAE;AAAA,MACb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,CAAC,IAAI,CAAA,GAAI;AACP,QAAA,IAAI,IAAA,CAAK,OAAA,KAAY,IAAA,CAAK,WAAA,EAAa;AAEvC,QAAA,IAAI,IAAA,CAAK,KAAK,MAAA,EAAQ;AACpB,UAAA,MAAM,GAAA,GAAM,IAAA,CAAK,IAAA,CAAK,KAAA,EAAM;AAE5B,UAAA,IAAA,CAAK,OAAA,EAAA;AACL,UAAA,GAAA,CAAI,IAAA,CAAK,KAAK,CAAC,CAAA;AAAA,QACjB;AAAA,MACF;AAAA,KACF;AAEA,IAAA,MAAA,CAAO,OAAA,GAAU,OAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACtDjB,IAAA,0BAAA,GAAA,UAAA,CAAA;AAAA,EAAA,iDAAA,CAAA,OAAA,EAAA,MAAA,EAAA;AAEA,IAAA,IAAM,IAAA,GAAO,UAAQ,MAAM,CAAA;AAE3B,IAAA,IAAM,UAAA,GAAa,mBAAA,EAAA;AACnB,IAAA,IAAM,OAAA,GAAU,eAAA,EAAA;AAChB,IAAA,IAAM,EAAE,aAAY,GAAI,iBAAA,EAAA;AAExB,IAAA,IAAM,UAAA,GAAa,MAAA,CAAO,MAAA,CAAO,OAAO,CAAA;AACxC,IAAA,IAAM,OAAA,GAAU,OAAO,IAAA,CAAK,CAAC,GAAM,CAAA,EAAM,GAAA,EAAM,GAAI,CAAC,CAAA;AACpD,IAAA,IAAM,kBAAA,GAAqB,OAAO,oBAAoB,CAAA;AACtD,IAAA,IAAM,YAAA,GAAe,OAAO,cAAc,CAAA;AAC1C,IAAA,IAAM,SAAA,GAAY,OAAO,UAAU,CAAA;AACnC,IAAA,IAAM,QAAA,GAAW,OAAO,SAAS,CAAA;AACjC,IAAA,IAAM,MAAA,GAAS,OAAO,OAAO,CAAA;AAS7B,IAAA,IAAI,WAAA;AAKJ,IAAA,IAAM,oBAAN,MAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAyBtB,WAAA,CAAY,OAAA,EAAS,QAAA,EAAU,UAAA,EAAY;AACzC,QAAA,IAAA,CAAK,cAAc,UAAA,GAAa,CAAA;AAChC,QAAA,IAAA,CAAK,QAAA,GAAW,WAAW,EAAC;AAC5B,QAAA,IAAA,CAAK,aACH,IAAA,CAAK,QAAA,CAAS,cAAc,MAAA,GAAY,IAAA,CAAK,SAAS,SAAA,GAAY,IAAA;AACpE,QAAA,IAAA,CAAK,SAAA,GAAY,CAAC,CAAC,QAAA;AACnB,QAAA,IAAA,CAAK,QAAA,GAAW,IAAA;AAChB,QAAA,IAAA,CAAK,QAAA,GAAW,IAAA;AAEhB,QAAA,IAAA,CAAK,MAAA,GAAS,IAAA;AAEd,QAAA,IAAI,CAAC,WAAA,EAAa;AAChB,UAAA,MAAM,cACJ,IAAA,CAAK,QAAA,CAAS,qBAAqB,MAAA,GAC/B,IAAA,CAAK,SAAS,gBAAA,GACd,EAAA;AACN,UAAA,WAAA,GAAc,IAAI,QAAQ,WAAW,CAAA;AAAA,QACvC;AAAA,MACF;AAAA;AAAA;AAAA;AAAA,MAKA,WAAW,aAAA,GAAgB;AACzB,QAAA,OAAO,oBAAA;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA,KAAA,GAAQ;AACN,QAAA,MAAM,SAAS,EAAC;AAEhB,QAAA,IAAI,IAAA,CAAK,SAAS,uBAAA,EAAyB;AACzC,UAAA,MAAA,CAAO,0BAAA,GAA6B,IAAA;AAAA,QACtC;AACA,QAAA,IAAI,IAAA,CAAK,SAAS,uBAAA,EAAyB;AACzC,UAAA,MAAA,CAAO,0BAAA,GAA6B,IAAA;AAAA,QACtC;AACA,QAAA,IAAI,IAAA,CAAK,SAAS,mBAAA,EAAqB;AACrC,UAAA,MAAA,CAAO,sBAAA,GAAyB,KAAK,QAAA,CAAS,mBAAA;AAAA,QAChD;AACA,QAAA,IAAI,IAAA,CAAK,SAAS,mBAAA,EAAqB;AACrC,UAAA,MAAA,CAAO,sBAAA,GAAyB,KAAK,QAAA,CAAS,mBAAA;AAAA,QAChD,CAAA,MAAA,IAAW,IAAA,CAAK,QAAA,CAAS,mBAAA,IAAuB,IAAA,EAAM;AACpD,UAAA,MAAA,CAAO,sBAAA,GAAyB,IAAA;AAAA,QAClC;AAEA,QAAA,OAAO,MAAA;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,OAAO,cAAA,EAAgB;AACrB,QAAA,cAAA,GAAiB,IAAA,CAAK,gBAAgB,cAAc,CAAA;AAEpD,QAAA,IAAA,CAAK,MAAA,GAAS,KAAK,SAAA,GACf,IAAA,CAAK,eAAe,cAAc,CAAA,GAClC,IAAA,CAAK,cAAA,CAAe,cAAc,CAAA;AAEtC,QAAA,OAAO,IAAA,CAAK,MAAA;AAAA,MACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,OAAA,GAAU;AACR,QAAA,IAAI,KAAK,QAAA,EAAU;AACjB,UAAA,IAAA,CAAK,SAAS,KAAA,EAAM;AACpB,UAAA,IAAA,CAAK,QAAA,GAAW,IAAA;AAAA,QAClB;AAEA,QAAA,IAAI,KAAK,QAAA,EAAU;AACjB,UAAA,MAAM,QAAA,GAAW,IAAA,CAAK,QAAA,CAAS,SAAS,CAAA;AAExC,UAAA,IAAA,CAAK,SAAS,KAAA,EAAM;AACpB,UAAA,IAAA,CAAK,QAAA,GAAW,IAAA;AAEhB,UAAA,IAAI,QAAA,EAAU;AACZ,YAAA,QAAA;AAAA,cACE,IAAI,KAAA;AAAA,gBACF;AAAA;AACF,aACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,eAAe,MAAA,EAAQ;AACrB,QAAA,MAAM,OAAO,IAAA,CAAK,QAAA;AAClB,QAAA,MAAM,QAAA,GAAW,MAAA,CAAO,IAAA,CAAK,CAAC,MAAA,KAAW;AACvC,UAAA,IACG,IAAA,CAAK,uBAAA,KAA4B,KAAA,IAChC,MAAA,CAAO,0BAAA,IACR,OAAO,sBAAA,KACL,IAAA,CAAK,mBAAA,KAAwB,KAAA,IAC3B,OAAO,IAAA,CAAK,wBAAwB,QAAA,IACnC,IAAA,CAAK,mBAAA,GAAsB,MAAA,CAAO,sBAAA,CAAA,IACvC,OAAO,KAAK,mBAAA,KAAwB,QAAA,IACnC,CAAC,MAAA,CAAO,sBAAA,EACV;AACA,YAAA,OAAO,KAAA;AAAA,UACT;AAEA,UAAA,OAAO,IAAA;AAAA,QACT,CAAC,CAAA;AAED,QAAA,IAAI,CAAC,QAAA,EAAU;AACb,UAAA,MAAM,IAAI,MAAM,8CAA8C,CAAA;AAAA,QAChE;AAEA,QAAA,IAAI,KAAK,uBAAA,EAAyB;AAChC,UAAA,QAAA,CAAS,0BAAA,GAA6B,IAAA;AAAA,QACxC;AACA,QAAA,IAAI,KAAK,uBAAA,EAAyB;AAChC,UAAA,QAAA,CAAS,0BAAA,GAA6B,IAAA;AAAA,QACxC;AACA,QAAA,IAAI,OAAO,IAAA,CAAK,mBAAA,KAAwB,QAAA,EAAU;AAChD,UAAA,QAAA,CAAS,yBAAyB,IAAA,CAAK,mBAAA;AAAA,QACzC;AACA,QAAA,IAAI,OAAO,IAAA,CAAK,mBAAA,KAAwB,QAAA,EAAU;AAChD,UAAA,QAAA,CAAS,yBAAyB,IAAA,CAAK,mBAAA;AAAA,QACzC,WACE,QAAA,CAAS,sBAAA,KAA2B,IAAA,IACpC,IAAA,CAAK,wBAAwB,KAAA,EAC7B;AACA,UAAA,OAAO,QAAA,CAAS,sBAAA;AAAA,QAClB;AAEA,QAAA,OAAO,QAAA;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,eAAe,QAAA,EAAU;AACvB,QAAA,MAAM,MAAA,GAAS,SAAS,CAAC,CAAA;AAEzB,QAAA,IACE,IAAA,CAAK,QAAA,CAAS,uBAAA,KAA4B,KAAA,IAC1C,OAAO,0BAAA,EACP;AACA,UAAA,MAAM,IAAI,MAAM,mDAAmD,CAAA;AAAA,QACrE;AAEA,QAAA,IAAI,CAAC,OAAO,sBAAA,EAAwB;AAClC,UAAA,IAAI,OAAO,IAAA,CAAK,QAAA,CAAS,mBAAA,KAAwB,QAAA,EAAU;AACzD,YAAA,MAAA,CAAO,sBAAA,GAAyB,KAAK,QAAA,CAAS,mBAAA;AAAA,UAChD;AAAA,QACF,CAAA,MAAA,IACE,IAAA,CAAK,QAAA,CAAS,mBAAA,KAAwB,SACrC,OAAO,IAAA,CAAK,QAAA,CAAS,mBAAA,KAAwB,QAAA,IAC5C,MAAA,CAAO,sBAAA,GAAyB,IAAA,CAAK,SAAS,mBAAA,EAChD;AACA,UAAA,MAAM,IAAI,KAAA;AAAA,YACR;AAAA,WACF;AAAA,QACF;AAEA,QAAA,OAAO,MAAA;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,gBAAgB,cAAA,EAAgB;AAC9B,QAAA,cAAA,CAAe,OAAA,CAAQ,CAAC,MAAA,KAAW;AACjC,UAAA,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA,CAAE,OAAA,CAAQ,CAAC,GAAA,KAAQ;AACnC,YAAA,IAAI,KAAA,GAAQ,OAAO,GAAG,CAAA;AAEtB,YAAA,IAAI,KAAA,CAAM,SAAS,CAAA,EAAG;AACpB,cAAA,MAAM,IAAI,KAAA,CAAM,CAAA,WAAA,EAAc,GAAG,CAAA,+BAAA,CAAiC,CAAA;AAAA,YACpE;AAEA,YAAA,KAAA,GAAQ,MAAM,CAAC,CAAA;AAEf,YAAA,IAAI,QAAQ,wBAAA,EAA0B;AACpC,cAAA,IAAI,UAAU,IAAA,EAAM;AAClB,gBAAA,MAAM,MAAM,CAAC,KAAA;AACb,gBAAA,IAAI,CAAC,OAAO,SAAA,CAAU,GAAG,KAAK,GAAA,GAAM,CAAA,IAAK,MAAM,EAAA,EAAI;AACjD,kBAAA,MAAM,IAAI,SAAA;AAAA,oBACR,CAAA,6BAAA,EAAgC,GAAG,CAAA,GAAA,EAAM,KAAK,CAAA;AAAA,mBAChD;AAAA,gBACF;AACA,gBAAA,KAAA,GAAQ,GAAA;AAAA,cACV,CAAA,MAAA,IAAW,CAAC,IAAA,CAAK,SAAA,EAAW;AAC1B,gBAAA,MAAM,IAAI,SAAA;AAAA,kBACR,CAAA,6BAAA,EAAgC,GAAG,CAAA,GAAA,EAAM,KAAK,CAAA;AAAA,iBAChD;AAAA,cACF;AAAA,YACF,CAAA,MAAA,IAAW,QAAQ,wBAAA,EAA0B;AAC3C,cAAA,MAAM,MAAM,CAAC,KAAA;AACb,cAAA,IAAI,CAAC,OAAO,SAAA,CAAU,GAAG,KAAK,GAAA,GAAM,CAAA,IAAK,MAAM,EAAA,EAAI;AACjD,gBAAA,MAAM,IAAI,SAAA;AAAA,kBACR,CAAA,6BAAA,EAAgC,GAAG,CAAA,GAAA,EAAM,KAAK,CAAA;AAAA,iBAChD;AAAA,cACF;AACA,cAAA,KAAA,GAAQ,GAAA;AAAA,YACV,CAAA,MAAA,IACE,GAAA,KAAQ,4BAAA,IACR,GAAA,KAAQ,4BAAA,EACR;AACA,cAAA,IAAI,UAAU,IAAA,EAAM;AAClB,gBAAA,MAAM,IAAI,SAAA;AAAA,kBACR,CAAA,6BAAA,EAAgC,GAAG,CAAA,GAAA,EAAM,KAAK,CAAA;AAAA,iBAChD;AAAA,cACF;AAAA,YACF,CAAA,MAAO;AACL,cAAA,MAAM,IAAI,KAAA,CAAM,CAAA,mBAAA,EAAsB,GAAG,CAAA,CAAA,CAAG,CAAA;AAAA,YAC9C;AAEA,YAAA,MAAA,CAAO,GAAG,CAAA,GAAI,KAAA;AAAA,UAChB,CAAC,CAAA;AAAA,QACH,CAAC,CAAA;AAED,QAAA,OAAO,cAAA;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUA,UAAA,CAAW,IAAA,EAAM,GAAA,EAAK,QAAA,EAAU;AAC9B,QAAA,WAAA,CAAY,GAAA,CAAI,CAAC,IAAA,KAAS;AACxB,UAAA,IAAA,CAAK,WAAA,CAAY,IAAA,EAAM,GAAA,EAAK,CAAC,KAAK,MAAA,KAAW;AAC3C,YAAA,IAAA,EAAK;AACL,YAAA,QAAA,CAAS,KAAK,MAAM,CAAA;AAAA,UACtB,CAAC,CAAA;AAAA,QACH,CAAC,CAAA;AAAA,MACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUA,QAAA,CAAS,IAAA,EAAM,GAAA,EAAK,QAAA,EAAU;AAC5B,QAAA,WAAA,CAAY,GAAA,CAAI,CAAC,IAAA,KAAS;AACxB,UAAA,IAAA,CAAK,SAAA,CAAU,IAAA,EAAM,GAAA,EAAK,CAAC,KAAK,MAAA,KAAW;AACzC,YAAA,IAAA,EAAK;AACL,YAAA,QAAA,CAAS,KAAK,MAAM,CAAA;AAAA,UACtB,CAAC,CAAA;AAAA,QACH,CAAC,CAAA;AAAA,MACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUA,WAAA,CAAY,IAAA,EAAM,GAAA,EAAK,QAAA,EAAU;AAC/B,QAAA,MAAM,QAAA,GAAW,IAAA,CAAK,SAAA,GAAY,QAAA,GAAW,QAAA;AAE7C,QAAA,IAAI,CAAC,KAAK,QAAA,EAAU;AAClB,UAAA,MAAM,GAAA,GAAM,GAAG,QAAQ,CAAA,gBAAA,CAAA;AACvB,UAAA,MAAM,UAAA,GACJ,OAAO,IAAA,CAAK,MAAA,CAAO,GAAG,CAAA,KAAM,QAAA,GACxB,IAAA,CAAK,oBAAA,GACL,IAAA,CAAK,MAAA,CAAO,GAAG,CAAA;AAErB,UAAA,IAAA,CAAK,QAAA,GAAW,KAAK,gBAAA,CAAiB;AAAA,YACpC,GAAG,KAAK,QAAA,CAAS,kBAAA;AAAA,YACjB;AAAA,WACD,CAAA;AACD,UAAA,IAAA,CAAK,QAAA,CAAS,kBAAkB,CAAA,GAAI,IAAA;AACpC,UAAA,IAAA,CAAK,QAAA,CAAS,YAAY,CAAA,GAAI,CAAA;AAC9B,UAAA,IAAA,CAAK,QAAA,CAAS,QAAQ,CAAA,GAAI,EAAC;AAC3B,UAAA,IAAA,CAAK,QAAA,CAAS,EAAA,CAAG,OAAA,EAAS,cAAc,CAAA;AACxC,UAAA,IAAA,CAAK,QAAA,CAAS,EAAA,CAAG,MAAA,EAAQ,aAAa,CAAA;AAAA,QACxC;AAEA,QAAA,IAAA,CAAK,QAAA,CAAS,SAAS,CAAA,GAAI,QAAA;AAE3B,QAAA,IAAA,CAAK,QAAA,CAAS,MAAM,IAAI,CAAA;AACxB,QAAA,IAAI,GAAA,EAAK,IAAA,CAAK,QAAA,CAAS,KAAA,CAAM,OAAO,CAAA;AAEpC,QAAA,IAAA,CAAK,QAAA,CAAS,MAAM,MAAM;AACxB,UAAA,MAAM,GAAA,GAAM,IAAA,CAAK,QAAA,CAAS,MAAM,CAAA;AAEhC,UAAA,IAAI,GAAA,EAAK;AACP,YAAA,IAAA,CAAK,SAAS,KAAA,EAAM;AACpB,YAAA,IAAA,CAAK,QAAA,GAAW,IAAA;AAChB,YAAA,QAAA,CAAS,GAAG,CAAA;AACZ,YAAA;AAAA,UACF;AAEA,UAAA,MAAMC,QAAO,UAAA,CAAW,MAAA;AAAA,YACtB,IAAA,CAAK,SAAS,QAAQ,CAAA;AAAA,YACtB,IAAA,CAAK,SAAS,YAAY;AAAA,WAC5B;AAEA,UAAA,IAAI,IAAA,CAAK,QAAA,CAAS,cAAA,CAAe,UAAA,EAAY;AAC3C,YAAA,IAAA,CAAK,SAAS,KAAA,EAAM;AACpB,YAAA,IAAA,CAAK,QAAA,GAAW,IAAA;AAAA,UAClB,CAAA,MAAO;AACL,YAAA,IAAA,CAAK,QAAA,CAAS,YAAY,CAAA,GAAI,CAAA;AAC9B,YAAA,IAAA,CAAK,QAAA,CAAS,QAAQ,CAAA,GAAI,EAAC;AAE3B,YAAA,IAAI,OAAO,IAAA,CAAK,MAAA,CAAO,CAAA,EAAG,QAAQ,sBAAsB,CAAA,EAAG;AACzD,cAAA,IAAA,CAAK,SAAS,KAAA,EAAM;AAAA,YACtB;AAAA,UACF;AAEA,UAAA,QAAA,CAAS,MAAMA,KAAI,CAAA;AAAA,QACrB,CAAC,CAAA;AAAA,MACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUA,SAAA,CAAU,IAAA,EAAM,GAAA,EAAK,QAAA,EAAU;AAC7B,QAAA,MAAM,QAAA,GAAW,IAAA,CAAK,SAAA,GAAY,QAAA,GAAW,QAAA;AAE7C,QAAA,IAAI,CAAC,KAAK,QAAA,EAAU;AAClB,UAAA,MAAM,GAAA,GAAM,GAAG,QAAQ,CAAA,gBAAA,CAAA;AACvB,UAAA,MAAM,UAAA,GACJ,OAAO,IAAA,CAAK,MAAA,CAAO,GAAG,CAAA,KAAM,QAAA,GACxB,IAAA,CAAK,oBAAA,GACL,IAAA,CAAK,MAAA,CAAO,GAAG,CAAA;AAErB,UAAA,IAAA,CAAK,QAAA,GAAW,KAAK,gBAAA,CAAiB;AAAA,YACpC,GAAG,KAAK,QAAA,CAAS,kBAAA;AAAA,YACjB;AAAA,WACD,CAAA;AAED,UAAA,IAAA,CAAK,QAAA,CAAS,YAAY,CAAA,GAAI,CAAA;AAC9B,UAAA,IAAA,CAAK,QAAA,CAAS,QAAQ,CAAA,GAAI,EAAC;AAE3B,UAAA,IAAA,CAAK,QAAA,CAAS,EAAA,CAAG,MAAA,EAAQ,aAAa,CAAA;AAAA,QACxC;AAEA,QAAA,IAAA,CAAK,QAAA,CAAS,SAAS,CAAA,GAAI,QAAA;AAE3B,QAAA,IAAA,CAAK,QAAA,CAAS,MAAM,IAAI,CAAA;AACxB,QAAA,IAAA,CAAK,QAAA,CAAS,KAAA,CAAM,IAAA,CAAK,YAAA,EAAc,MAAM;AAC3C,UAAA,IAAI,CAAC,KAAK,QAAA,EAAU;AAIlB,YAAA;AAAA,UACF;AAEA,UAAA,IAAIA,QAAO,UAAA,CAAW,MAAA;AAAA,YACpB,IAAA,CAAK,SAAS,QAAQ,CAAA;AAAA,YACtB,IAAA,CAAK,SAAS,YAAY;AAAA,WAC5B;AAEA,UAAA,IAAI,GAAA,EAAK;AACP,YAAAA,KAAAA,GAAO,IAAI,UAAA,CAAWA,KAAAA,CAAK,QAAQA,KAAAA,CAAK,UAAA,EAAYA,KAAAA,CAAK,MAAA,GAAS,CAAC,CAAA;AAAA,UACrE;AAMA,UAAA,IAAA,CAAK,QAAA,CAAS,SAAS,CAAA,GAAI,IAAA;AAE3B,UAAA,IAAA,CAAK,QAAA,CAAS,YAAY,CAAA,GAAI,CAAA;AAC9B,UAAA,IAAA,CAAK,QAAA,CAAS,QAAQ,CAAA,GAAI,EAAC;AAE3B,UAAA,IAAI,OAAO,IAAA,CAAK,MAAA,CAAO,CAAA,EAAG,QAAQ,sBAAsB,CAAA,EAAG;AACzD,YAAA,IAAA,CAAK,SAAS,KAAA,EAAM;AAAA,UACtB;AAEA,UAAA,QAAA,CAAS,MAAMA,KAAI,CAAA;AAAA,QACrB,CAAC,CAAA;AAAA,MACH;AAAA,KACF;AAEA,IAAA,MAAA,CAAO,OAAA,GAAU,iBAAA;AAQjB,IAAA,SAAS,cAAc,KAAA,EAAO;AAC5B,MAAA,IAAA,CAAK,QAAQ,CAAA,CAAE,IAAA,CAAK,KAAK,CAAA;AACzB,MAAA,IAAA,CAAK,YAAY,KAAK,KAAA,CAAM,MAAA;AAAA,IAC9B;AAQA,IAAA,SAAS,cAAc,KAAA,EAAO;AAC5B,MAAA,IAAA,CAAK,YAAY,KAAK,KAAA,CAAM,MAAA;AAE5B,MAAA,IACE,IAAA,CAAK,kBAAkB,CAAA,CAAE,WAAA,GAAc,CAAA,IACvC,IAAA,CAAK,YAAY,CAAA,IAAK,IAAA,CAAK,kBAAkB,CAAA,CAAE,WAAA,EAC/C;AACA,QAAA,IAAA,CAAK,QAAQ,CAAA,CAAE,IAAA,CAAK,KAAK,CAAA;AACzB,QAAA;AAAA,MACF;AAEA,MAAA,IAAA,CAAK,MAAM,CAAA,GAAI,IAAI,UAAA,CAAW,2BAA2B,CAAA;AACzD,MAAA,IAAA,CAAK,MAAM,EAAE,IAAA,GAAO,mCAAA;AACpB,MAAA,IAAA,CAAK,MAAM,CAAA,CAAE,WAAW,CAAA,GAAI,IAAA;AAC5B,MAAA,IAAA,CAAK,cAAA,CAAe,QAAQ,aAAa,CAAA;AASzC,MAAA,IAAA,CAAK,KAAA,EAAM;AAAA,IACb;AAQA,IAAA,SAAS,eAAe,GAAA,EAAK;AAK3B,MAAA,IAAA,CAAK,kBAAkB,EAAE,QAAA,GAAW,IAAA;AAEpC,MAAA,IAAI,IAAA,CAAK,MAAM,CAAA,EAAG;AAChB,QAAA,IAAA,CAAK,SAAS,CAAA,CAAE,IAAA,CAAK,MAAM,CAAC,CAAA;AAC5B,QAAA;AAAA,MACF;AAEA,MAAA,GAAA,CAAI,WAAW,CAAA,GAAI,IAAA;AACnB,MAAA,IAAA,CAAK,SAAS,EAAE,GAAG,CAAA;AAAA,IACrB;AAAA,EAAA;AAAA,CAAA,CAAA;;;AC/gBA,IAAAC,iBAAAA,GAAA,UAAA,CAAA;AAAA,EAAA,+CAAA,CAAA,OAAA,EAAA,MAAA,EAAA;AAWA,IAAA,SAAS,YAAY,GAAA,EAAK;AACxB,MAAA,MAAM,MAAM,GAAA,CAAI,MAAA;AAChB,MAAA,IAAI,CAAA,GAAI,CAAA;AAER,MAAA,OAAO,IAAI,GAAA,EAAK;AACd,QAAA,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,GAAI,GAAA,MAAU,CAAA,EAAM;AAC5B,UAAA,CAAA,EAAA;AAAA,QACF,CAAA,MAAA,IAAA,CAAY,GAAA,CAAI,CAAC,CAAA,GAAI,SAAU,GAAA,EAAM;AACnC,UAAA,IACE,CAAA,GAAI,CAAA,KAAM,GAAA,IAAA,CACT,GAAA,CAAI,CAAA,GAAI,CAAC,CAAA,GAAI,GAAA,MAAU,GAAA,IAAA,CACvB,GAAA,CAAI,CAAC,CAAA,GAAI,SAAU,GAAA,EACpB;AACA,YAAA,OAAO,KAAA;AAAA,UACT;AAEA,UAAA,CAAA,IAAK,CAAA;AAAA,QACP,CAAA,MAAA,IAAA,CAAY,GAAA,CAAI,CAAC,CAAA,GAAI,SAAU,GAAA,EAAM;AACnC,UAAA,IACE,CAAA,GAAI,KAAK,GAAA,IAAA,CACR,GAAA,CAAI,IAAI,CAAC,CAAA,GAAI,GAAA,MAAU,GAAA,IAAA,CACvB,GAAA,CAAI,CAAA,GAAI,CAAC,CAAA,GAAI,GAAA,MAAU,GAAA,IACxB,GAAA,CAAI,CAAC,CAAA,KAAM,QAAS,GAAA,CAAI,CAAA,GAAI,CAAC,CAAA,GAAI,GAAA,MAAU,GAAA;AAAA,UAC3C,GAAA,CAAI,CAAC,CAAA,KAAM,GAAA,IAAA,CAAS,IAAI,CAAA,GAAI,CAAC,CAAA,GAAI,GAAA,MAAU,GAAA,EAC3C;AACA,YAAA,OAAO,KAAA;AAAA,UACT;AAEA,UAAA,CAAA,IAAK,CAAA;AAAA,QACP,CAAA,MAAA,IAAA,CAAY,GAAA,CAAI,CAAC,CAAA,GAAI,SAAU,GAAA,EAAM;AACnC,UAAA,IACE,CAAA,GAAI,CAAA,IAAK,GAAA,IAAA,CACR,GAAA,CAAI,CAAA,GAAI,CAAC,CAAA,GAAI,GAAA,MAAU,GAAA,IAAA,CACvB,GAAA,CAAI,CAAA,GAAI,CAAC,CAAA,GAAI,GAAA,MAAU,GAAA,IAAA,CACvB,GAAA,CAAI,CAAA,GAAI,CAAC,CAAA,GAAI,GAAA,MAAU,GAAA,IACxB,GAAA,CAAI,CAAC,CAAA,KAAM,GAAA,IAAA,CAAS,GAAA,CAAI,CAAA,GAAI,CAAC,IAAI,GAAA,MAAU,GAAA;AAAA,UAC3C,GAAA,CAAI,CAAC,CAAA,KAAM,GAAA,IAAQ,GAAA,CAAI,CAAA,GAAI,CAAC,CAAA,GAAI,GAAA,IAAQ,GAAA,CAAI,CAAC,CAAA,GAAI,GAAA,EACjD;AACA,YAAA,OAAO,KAAA;AAAA,UACT;AAEA,UAAA,CAAA,IAAK,CAAA;AAAA,QACP,CAAA,MAAO;AACL,UAAA,OAAO,KAAA;AAAA,QACT;AAAA,MACF;AAEA,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,MAAA,CAAO,OAAA,GAAU,WAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;AC7DjB,IAAA,sBAAA,GAAA,UAAA,CAAA;AAAA,EAAA,4CAAA,CAAA,OAAA,EAAA,MAAA,EAAA;AAEA,IAAA,IAAI;AACF,MAAA,MAAA,CAAO,OAAA,GAAU,0BAA0B,SAAS,CAAA;AAAA,IACtD,SAAS,CAAA,EAAG;AACV,MAAA,MAAA,CAAO,OAAA,GAAU,iBAAA,EAAA;AAAA,IACnB;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACNA,IAAA,kBAAA,GAAA,UAAA,CAAA;AAAA,EAAA,yCAAA,CAAA,OAAA,EAAA,MAAA,EAAA;AAEA,IAAA,IAAM,EAAE,MAAA,EAAO,GAAI,SAAA,CAAQ,QAAQ,CAAA;AAEnC,IAAA,IAAM,EAAE,SAAQ,GAAI,iBAAA,EAAA;AAcpB,IAAA,IAAM,UAAA,GAAa;AAAA,MACjB,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,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;A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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","var fs = require('fs')\nvar path = require('path')\nvar os = require('os')\n\n// Workaround to fix webpack's build warnings: 'the request of a dependency is an expression'\nvar runtimeRequire = typeof __webpack_require__ === 'function' ? __non_webpack_require__ : require // eslint-disable-line\n\nvar vars = (process.config && process.config.variables) || {}\nvar prebuildsOnly = !!process.env.PREBUILDS_ONLY\nvar abi = process.versions.modules // TODO: support old node where this is undef\nvar runtime = isElectron() ? 'electron' : (isNwjs() ? 'node-webkit' : 'node')\n\nvar arch = process.env.npm_config_arch || os.arch()\nvar platform = process.env.npm_config_platform || os.platform()\nvar libc = process.env.LIBC || (isAlpine(platform) ? 'musl' : 'glibc')\nvar armv = process.env.ARM_VERSION || (arch === 'arm64' ? '8' : vars.arm_version) || ''\nvar uv = (process.versions.uv || '').split('.')[0]\n\nmodule.exports = load\n\nfunction load (dir) {\n return runtimeRequire(load.resolve(dir))\n}\n\nload.resolve = load.path = function (dir) {\n dir = path.resolve(dir || '.')\n\n try {\n var name = runtimeRequire(path.join(dir, 'package.json')).name.toUpperCase().replace(/-/g, '_')\n if (process.env[name + '_PREBUILD']) dir = process.env[name + '_PREBUILD']\n } catch (err) {}\n\n if (!prebuildsOnly) {\n var release = getFirst(path.join(dir, 'build/Release'), matchBuild)\n if (release) return release\n\n var debug = getFirst(path.join(dir, 'build/Debug'), matchBuild)\n if (debug) return debug\n }\n\n var prebuild = resolve(dir)\n if (prebuild) return prebuild\n\n var nearby = resolve(path.dirname(process.execPath))\n if (nearby) return nearby\n\n var target = [\n 'platform=' + platform,\n 'arch=' + arch,\n 'runtime=' + runtime,\n 'abi=' + abi,\n 'uv=' + uv,\n armv ? 'armv=' + armv : '',\n 'libc=' + libc,\n 'node=' + process.versions.node,\n process.versions.electron ? 'electron=' + process.versions.electron : '',\n typeof __webpack_require__ === 'function' ? 'webpack=true' : '' // eslint-disable-line\n ].filter(Boolean).join(' ')\n\n throw new Error('No native build was found for ' + target + '\\n loaded from: ' + dir + '\\n')\n\n function resolve (dir) {\n // Find matching \"prebuilds/<platform>-<arch>\" directory\n var tuples = readdirSync(path.join(dir, 'prebuilds')).map(parseTuple)\n var tuple = tuples.filter(matchTuple(platform, arch)).sort(compareTuples)[0]\n if (!tuple) return\n\n // Find most specific flavor first\n var prebuilds = path.join(dir, 'prebuilds', tuple.name)\n var parsed = readdirSync(prebuilds).map(parseTags)\n var candidates = parsed.filter(matchTags(runtime, abi))\n var winner = candidates.sort(compareTags(runtime))[0]\n if (winner) return path.join(prebuilds, winner.file)\n }\n}\n\nfunction readdirSync (dir) {\n try {\n return fs.readdirSync(dir)\n } catch (err) {\n return []\n }\n}\n\nfunction getFirst (dir, filter) {\n var files = readdirSync(dir).filter(filter)\n return files[0] && path.join(dir, files[0])\n}\n\nfunction matchBuild (name) {\n return /\\.node$/.test(name)\n}\n\nfunction parseTuple (name) {\n // Example: darwin-x64+arm64\n var arr = name.split('-')\n if (arr.length !== 2) return\n\n var platform = arr[0]\n var architectures = arr[1].split('+')\n\n if (!platform) return\n if (!architectures.length) return\n if (!architectures.every(Boolean)) return\n\n return { name, platform, architectures }\n}\n\nfunction matchTuple (platform, arch) {\n return function (tuple) {\n if (tuple == null) return false\n if (tuple.platform !== platform) return false\n return tuple.architectures.includes(arch)\n }\n}\n\nfunction compareTuples (a, b) {\n // Prefer single-arch prebuilds over multi-arch\n return a.architectures.length - b.architectures.length\n}\n\nfunction parseTags (file) {\n var arr = file.split('.')\n var extension = arr.pop()\n var tags = { file: file, specificity: 0 }\n\n if (extension !== 'node') return\n\n for (var i = 0; i < arr.length; i++) {\n var tag = arr[i]\n\n if (tag === 'node' || tag === 'electron' || tag === 'node-webkit') {\n tags.runtime = tag\n } else if (tag === 'napi') {\n tags.napi = true\n } else if (tag.slice(0, 3) === 'abi') {\n tags.abi = tag.slice(3)\n } else if (tag.slice(0, 2) === 'uv') {\n tags.uv = tag.slice(2)\n } else if (tag.slice(0, 4) === 'armv') {\n tags.armv = tag.slice(4)\n } else if (tag === 'glibc' || tag === 'musl') {\n tags.libc = tag\n } else {\n continue\n }\n\n tags.specificity++\n }\n\n return tags\n}\n\nfunction matchTags (runtime, abi) {\n return function (tags) {\n if (tags == null) return false\n if (tags.runtime && tags.runtime !== runtime && !runtimeAgnostic(tags)) return false\n if (tags.abi && tags.abi !== abi && !tags.napi) return false\n if (tags.uv && tags.uv !== uv) return false\n if (tags.armv && tags.armv !== armv) return false\n if (tags.libc && tags.libc !== libc) return false\n\n return true\n }\n}\n\nfunction runtimeAgnostic (tags) {\n return tags.runtime === 'node' && tags.napi\n}\n\nfunction compareTags (runtime) {\n // Precedence: non-agnostic runtime, abi over napi, then by specificity.\n return function (a, b) {\n if (a.runtime !== b.runtime) {\n return a.runtime === runtime ? -1 : 1\n } else if (a.abi !== b.abi) {\n return a.abi ? -1 : 1\n } else if (a.specificity !== b.specificity) {\n return a.specificity > b.specificity ? -1 : 1\n } else {\n return 0\n }\n }\n}\n\nfunction isNwjs () {\n return !!(process.versions && process.versions.nw)\n}\n\nfunction isElectron () {\n if (process.versions && process.versions.electron) return true\n if (process.env.ELECTRON_RUN_AS_NODE) return true\n return typeof window !== 'undefined' && window.process && window.process.type === 'renderer'\n}\n\nfunction isAlpine (platform) {\n return platform === 'linux' && fs.existsSync('/etc/alpine-release')\n}\n\n// Exposed for unit tests\n// TODO: move to lib\nload.parseTags = parseTags\nload.matchTags = matchTags\nload.compareTags = compareTags\nload.parseTuple = parseTuple\nload.matchTuple = matchTuple\nload.compareTuples = compareTuples\n","const runtimeRequire = typeof __webpack_require__ === 'function' ? __non_webpack_require__ : require // eslint-disable-line\nif (typeof runtimeRequire.addon === 'function') { // if the platform supports native resolving prefer that\n module.exports = runtimeRequire.addon.bind(runtimeRequire)\n} else { // else use the runtime version here\n module.exports = require('./node-gyp-build.js')\n}\n","'use strict';\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 */\nconst mask = (source, mask, output, offset, length) => {\n for (var 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 */\nconst unmask = (buffer, mask) => {\n // Required until https://github.com/nodejs/node/issues/9006 is resolved.\n const length = buffer.length;\n for (var i = 0; i < length; i++) {\n buffer[i] ^= mask[i & 3];\n }\n};\n\nmodule.exports = { mask, unmask };\n","'use strict';\n\ntry {\n module.exports = require('node-gyp-build')(__dirname);\n} catch (e) {\n module.exports = require('./fallback');\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\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) === 0x00) { // 0xxxxxxx\n i++;\n } else if ((buf[i] & 0xe0) === 0xc0) { // 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) { // 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) { // 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 || 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\nmodule.exports = isValidUTF8;\n","'use strict';\n\ntry {\n module.exports = require('node-gyp-build')(__dirname);\n} catch (e) {\n module.exports = require('./fallback');\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 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 * as Automerge from '@automerge/automerge';\nimport type {\n WSClientOptions,\n WSDisconnectInfo,\n WSReconnectErrorInfo,\n RPCRequest,\n RPCResponse,\n SyncMessage,\n RPCRequestFromServer\n} from './types';\n\n// Use global WebSocket if available (Browser, Bun, Deno)\nlet GlobalWebSocket: any = undefined;\nif (typeof globalThis !== 'undefined' && (globalThis as any).WebSocket) {\n GlobalWebSocket = (globalThis as any).WebSocket;\n}\n\n// WebSocket.OPEN is always 1\nconst READY_STATE_OPEN = 1;\nconst TOKEN_REFRESH_LEEWAY_MS = 2 * 60 * 1000;\nconst TOKEN_REFRESH_RETRY_MS = 30 * 1000;\nconst MAX_TIMER_DELAY_MS = 2_147_483_647;\n\nexport class WSClient {\n private ws: WebSocket | null = null;\n private url: string;\n private sessionId: string;\n private token: string;\n private messageQueue: Array<{ resolve: (value: unknown) => void; reject: (error: Error) => void; id: string }> = [];\n private syncHandlers: Array<(message: SyncMessage) => void> = [];\n private rpcHandlers: Map<string, (params: unknown) => Promise<unknown>> = new Map();\n private eventHandlers: Map<string, Array<(params: unknown) => void>> = new Map();\n private nextRpcId = 1;\n public doc: Automerge.Doc<Record<string, unknown>> = Automerge.init();\n private syncState: Automerge.SyncState = Automerge.initSyncState();\n private reconnectTimer: ReturnType<typeof setTimeout> | null = null;\n private tokenRefreshTimer: ReturnType<typeof setTimeout> | null = null;\n private isExplicitlyDisconnected = false;\n\n private options: WSClientOptions;\n\n constructor(options: WSClientOptions) {\n this.options = options;\n this.url = options.url;\n this.sessionId = options.sessionId;\n this.token = options.token;\n }\n\n get currentSessionId(): string {\n return this.sessionId;\n }\n\n private clearTokenRefreshTimer(): void {\n if (this.tokenRefreshTimer) {\n clearTimeout(this.tokenRefreshTimer);\n this.tokenRefreshTimer = null;\n }\n }\n\n private decodeBase64Url(payload: string): string {\n const base64 = payload.replace(/-/g, '+').replace(/_/g, '/');\n const padded = base64 + '='.repeat((4 - (base64.length % 4 || 4)) % 4);\n if (typeof atob === 'function') {\n return atob(padded);\n }\n\n const maybeBuffer = (globalThis as unknown as { Buffer?: { from: (data: string, encoding: string) => { toString: (encoding: string) => string } } }).Buffer;\n if (maybeBuffer) {\n return maybeBuffer.from(padded, 'base64').toString('utf8');\n }\n\n throw new Error('No base64 decoder available');\n }\n\n private getTokenExpiryMs(token: string): number | null {\n const parts = token.split('.');\n if (parts.length < 2) {\n return null;\n }\n\n try {\n const payloadRaw = this.decodeBase64Url(parts[1]);\n const payload = JSON.parse(payloadRaw) as { exp?: number };\n if (typeof payload.exp !== 'number' || !Number.isFinite(payload.exp)) {\n return null;\n }\n return payload.exp * 1000;\n } catch {\n return null;\n }\n }\n\n private scheduleTokenRefresh(): void {\n this.clearTokenRefreshTimer();\n if (!this.options.tokenProvider || this.isExplicitlyDisconnected) {\n return;\n }\n\n const expiresAt = this.getTokenExpiryMs(this.token);\n if (!expiresAt) {\n return;\n }\n\n const refreshInMs = Math.max(1_000, expiresAt - Date.now() - TOKEN_REFRESH_LEEWAY_MS);\n const delay = Math.min(refreshInMs, MAX_TIMER_DELAY_MS);\n this.tokenRefreshTimer = setTimeout(() => {\n void this.refreshTokenInBackground();\n }, delay);\n }\n\n private async refreshTokenInBackground(): Promise<void> {\n if (!this.options.tokenProvider || this.isExplicitlyDisconnected) {\n return;\n }\n\n try {\n const refreshedToken = await this.options.tokenProvider();\n if (typeof refreshedToken !== 'string' || refreshedToken.length === 0) {\n throw new Error('Token provider returned no token');\n }\n this.token = refreshedToken;\n this.scheduleTokenRefresh();\n } catch (error) {\n if (this.isExplicitlyDisconnected) {\n return;\n }\n console.warn('[Granular] Token refresh failed, retrying soon:', error);\n this.clearTokenRefreshTimer();\n this.tokenRefreshTimer = setTimeout(() => {\n void this.refreshTokenInBackground();\n }, TOKEN_REFRESH_RETRY_MS);\n }\n }\n\n private async resolveTokenForConnect(): Promise<string> {\n if (!this.options.tokenProvider) {\n return this.token;\n }\n\n const expiresAt = this.getTokenExpiryMs(this.token);\n const shouldRefresh = expiresAt !== null && expiresAt - Date.now() <= TOKEN_REFRESH_LEEWAY_MS;\n if (!shouldRefresh) {\n return this.token;\n }\n\n try {\n const refreshedToken = await this.options.tokenProvider();\n if (typeof refreshedToken !== 'string' || refreshedToken.length === 0) {\n throw new Error('Token provider returned no token');\n }\n this.token = refreshedToken;\n return refreshedToken;\n } catch (error) {\n if (expiresAt > Date.now()) {\n console.warn('[Granular] Token refresh failed, using current token:', error);\n return this.token;\n }\n throw error;\n }\n }\n\n /**\n * Connect to the WebSocket server\n * @returns {Promise<void>} Resolves when connection is open\n */\n async connect(): Promise<void> {\n const token = await this.resolveTokenForConnect();\n this.isExplicitlyDisconnected = false;\n this.scheduleTokenRefresh();\n if (this.reconnectTimer) {\n clearTimeout(this.reconnectTimer);\n this.reconnectTimer = null;\n }\n\n // Determine WebSocket implementation\n let WebSocketClass = this.options.WebSocketCtor || GlobalWebSocket;\n\n if (!WebSocketClass) {\n try {\n // Try to load 'ws' dynamically for Node.js environments\n // @ts-ignore\n const wsModule = await import('ws');\n WebSocketClass = wsModule.default || wsModule;\n } catch (e) {\n // Ignore, handled below\n }\n }\n\n if (!WebSocketClass) {\n throw new Error('No WebSocket implementation found. If using Node.js, please install \"ws\" and pass the constructor to the SDK options: { WebSocketCtor: WebSocket }.');\n }\n\n return new Promise((resolve, reject) => {\n try {\n // Construct URL with query parameters\n const wsUrl = new URL(this.url);\n wsUrl.searchParams.set('sessionId', this.sessionId);\n wsUrl.searchParams.set('token', token);\n\n // @ts-ignore - Dynamic class usage\n this.ws = new WebSocketClass(wsUrl.toString()) as WebSocket;\n\n if (!this.ws) throw new Error('Failed to create WebSocket');\n\n // Standardize event handlers\n const socket = this.ws as any;\n if (typeof socket.on === 'function') {\n // Node 'ws' style\n socket.on('open', () => {\n if (this.reconnectTimer) {\n clearTimeout(this.reconnectTimer);\n this.reconnectTimer = null;\n }\n this.emit('open', {});\n resolve();\n });\n socket.on('message', (data: any) => {\n try {\n const message = JSON.parse(data.toString());\n this.handleMessage(message);\n } catch (error) {\n console.error('[Granular] Failed to parse message:', error);\n }\n });\n socket.on('error', (error: any) => {\n this.emit('error', error);\n if (socket.readyState !== READY_STATE_OPEN) {\n reject(error);\n }\n });\n socket.on('close', (code: number, reason: unknown) => {\n this.handleDisconnect({\n code,\n reason: this.normalizeReason(reason),\n // ws does not provide wasClean on Node-style close callback\n wasClean: code === 1000,\n });\n });\n } else {\n // Browser WebSocket style\n this.ws!.onopen = () => {\n if (this.reconnectTimer) {\n clearTimeout(this.reconnectTimer);\n this.reconnectTimer = null;\n }\n this.emit('open', {});\n resolve();\n };\n\n this.ws!.onmessage = (event: MessageEvent) => {\n try {\n const data = event.data;\n const message = JSON.parse(data.toString());\n this.handleMessage(message);\n } catch (error) {\n console.error('[Granular] Failed to parse message:', error);\n }\n };\n\n this.ws!.onerror = (event: Event) => {\n const error = new Error('WebSocket error');\n (error as any).event = event;\n this.emit('error', error);\n if (this.ws?.readyState !== READY_STATE_OPEN) {\n reject(error);\n }\n };\n\n this.ws!.onclose = (event: CloseEvent) => {\n this.handleDisconnect({\n code: event.code,\n reason: event.reason,\n wasClean: event.wasClean,\n });\n };\n }\n } catch (error) {\n reject(error);\n }\n });\n }\n\n private normalizeReason(reason: unknown): string | undefined {\n if (reason === null || reason === undefined) return undefined;\n if (typeof reason === 'string') return reason;\n if (typeof reason === 'object' && reason && 'toString' in reason) {\n try {\n const text = String((reason as any).toString());\n return text || undefined;\n } catch {\n return undefined;\n }\n }\n return undefined;\n }\n\n private rejectPending(error: Error): void {\n this.messageQueue.forEach((pending) => pending.reject(error));\n this.messageQueue = [];\n }\n\n private buildDisconnectError(info: WSDisconnectInfo): Error {\n const details = [\n info.code !== undefined ? `code=${info.code}` : undefined,\n info.reason ? `reason=${info.reason}` : undefined,\n ].filter(Boolean).join(', ');\n const suffix = details ? ` (${details})` : '';\n return new Error(`WebSocket disconnected${suffix}`);\n }\n\n private handleDisconnect(close: {\n code?: number;\n reason?: string;\n wasClean?: boolean;\n } = {}): void {\n const reconnectDelayMs = 3000;\n const unexpected = !this.isExplicitlyDisconnected;\n const info: WSDisconnectInfo = {\n code: close.code,\n reason: close.reason,\n wasClean: close.wasClean,\n unexpected,\n timestamp: Date.now(),\n reconnectScheduled: false,\n };\n\n this.ws = null;\n this.emit('close', info);\n\n if (this.reconnectTimer) {\n clearTimeout(this.reconnectTimer);\n this.reconnectTimer = null;\n }\n\n if (unexpected) {\n const disconnectError = this.buildDisconnectError(info);\n this.rejectPending(disconnectError);\n this.emit('disconnect', info);\n\n info.reconnectScheduled = true;\n info.reconnectDelayMs = reconnectDelayMs;\n\n if (this.options.onUnexpectedClose) {\n try {\n this.options.onUnexpectedClose(info);\n } catch (callbackError) {\n console.error('[Granular] onUnexpectedClose callback failed:', callbackError);\n }\n }\n\n this.reconnectTimer = setTimeout(() => {\n console.log('[Granular] Attempting reconnect...');\n this.connect().catch(error => {\n console.error('[Granular] Reconnect failed:', error);\n const reconnectInfo: WSReconnectErrorInfo = {\n error: error instanceof Error ? error.message : String(error),\n sessionId: this.sessionId,\n timestamp: Date.now(),\n };\n this.emit('reconnect_error', reconnectInfo);\n if (this.options.onReconnectError) {\n try {\n this.options.onReconnectError(reconnectInfo);\n } catch (callbackError) {\n console.error('[Granular] onReconnectError callback failed:', callbackError);\n }\n }\n });\n }, reconnectDelayMs);\n }\n }\n\n private handleMessage(message: unknown): void {\n if (typeof message !== 'object' || message === null) return;\n\n // Debug: Log all incoming messages\n console.log('[Granular DEBUG] Received message:', JSON.stringify(message).slice(0, 500));\n\n // 1. Handle Sync Messages (Automerge)\n if ('type' in message && message.type === 'sync') {\n const syncMessage = message as SyncMessage;\n let bytes: Uint8Array;\n\n try {\n const payload = syncMessage.message || syncMessage.data;\n\n if (typeof payload === 'string') {\n const binaryString = atob(payload);\n const len = binaryString.length;\n bytes = new Uint8Array(len);\n for (let i = 0; i < len; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n } else if (Array.isArray(payload)) {\n bytes = new Uint8Array(payload);\n } else if (payload instanceof Uint8Array) {\n bytes = payload;\n } else {\n return;\n }\n\n console.log('[Granular DEBUG] Applying sync bytes:', bytes.length);\n\n const [newDoc, newSyncState] = Automerge.receiveSyncMessage(\n this.doc,\n this.syncState,\n bytes\n );\n this.doc = newDoc;\n this.syncState = newSyncState;\n\n // DEBUG: Inspect doc after sync\n const docAny = this.doc as any;\n if (docAny.catalog) {\n console.log('[Granular DEBUG] Doc catalog sync applied. Keys in catalog:', Object.keys(docAny.catalog || {}));\n console.log('[Granular DEBUG] RawToolCatalogs:', Object.keys(docAny.catalog.rawToolCatalogs || {}));\n } else {\n console.log('[Granular DEBUG] Doc synced but no catalog yet. Keys in doc:', Object.keys(docAny));\n }\n\n // Notify sync listeners with the new doc\n this.emit('sync', this.doc);\n } catch (e) {\n // Determine if this is a sync protocol error (e.g. wrong format) -> try applyChanges\n // The server broadcasts raw changes using getLastLocalChange, which receiveSyncMessage rejects.\n try {\n console.log('[Granular DEBUG] receiveSyncMessage failed, trying applyChanges...');\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const [newDoc] = Automerge.applyChanges(this.doc, [bytes!]);\n this.doc = newDoc;\n this.emit('sync', this.doc);\n console.log('[Granular DEBUG] applyChanges succeeded. Doc:', JSON.stringify(Automerge.toJS(this.doc)));\n } catch (applyError) {\n console.warn('[Granular] Failed to apply sync message (both sync & applyChanges)', e, applyError);\n }\n }\n return;\n }\n\n // 1. Handling Automerge Snapshots (Full State)\n if ('type' in message && message.type === 'snapshot') {\n const snapshotMessage = message as { type: string; data: number[] };\n try {\n const bytes = new Uint8Array(snapshotMessage.data);\n console.log('[Granular DEBUG] Loading Automerge session snapshot bytes:', bytes.length);\n this.doc = Automerge.load(bytes);\n this.emit('sync', this.doc);\n console.log('[Granular DEBUG] Automerge session snapshot loaded. Doc:', JSON.stringify(Automerge.toJS(this.doc)));\n } catch (e) {\n console.warn('[Granular] Failed to load snapshot message', e);\n }\n return;\n }\n\n // 1.5 Handle Automerge Changes (Raw)\n if ('type' in message && message.type === 'change') {\n const changeMessage = message as { type: string; data: number[] };\n try {\n const bytes = new Uint8Array(changeMessage.data);\n // console.log('[Granular DEBUG] Applying change bytes:', bytes.length);\n const [newDoc] = Automerge.applyChanges(this.doc, [bytes]);\n this.doc = newDoc;\n this.emit('sync', this.doc);\n // console.log('[Granular DEBUG] Valid change applied. Doc keys:', Object.keys(Automerge.toJS(this.doc)));\n } catch (e) {\n console.warn('[Granular] Failed to apply change message', e);\n }\n return;\n }\n\n // 2. Handle RPC Responses (Results/Errors from calls we made)\n if ('type' in message && (message.type === 'rpc_result' || message.type === 'rpc_error')) {\n const response = message as RPCResponse;\n const pending = this.messageQueue.find((q) => q.id === response.id);\n if (pending) {\n if (response.type === 'rpc_error') {\n pending.reject(\n new Error(`RPC error: ${response.error?.message || 'Unknown error'}`)\n );\n } else {\n pending.resolve(response.result);\n }\n this.messageQueue = this.messageQueue.filter((q) => q.id !== response.id);\n }\n return;\n }\n\n // 3. Handle Incoming RPC Requests (Server calls us, e.g. effect.invoke)\n if ('type' in message && message.type === 'rpc' && 'method' in message && 'id' in message) {\n const request = message as RPCRequestFromServer;\n this.handleIncomingRpc(request).catch((error) => {\n console.error('[Granular] Error handling incoming RPC:', error);\n });\n return;\n }\n\n // 4. Handle Generic Events\n if ('type' in message && typeof message.type === 'string') {\n this.emit(message.type, message);\n }\n }\n\n /**\n * Make an RPC call to the server\n * @param {string} method - RPC method name\n * @param {unknown} params - Request parameters\n * @returns {Promise<unknown>} Response result\n * @throws {Error} If connection is closed or timeout occurs\n */\n async call(method: string, params: unknown): Promise<unknown> {\n if (!this.ws || this.ws.readyState !== READY_STATE_OPEN) {\n throw new Error('WebSocket not connected');\n }\n\n const id = `rpc-${this.nextRpcId++}`;\n const request: RPCRequest = {\n type: 'rpc',\n method,\n params,\n id,\n };\n\n return new Promise((resolve, reject) => {\n this.messageQueue.push({ resolve, reject, id });\n\n this.ws!.send(JSON.stringify(request));\n\n // Timeout after 30 seconds\n setTimeout(() => {\n const pending = this.messageQueue.find((q) => q.id === id);\n if (pending) {\n this.messageQueue = this.messageQueue.filter((q) => q.id !== id);\n reject(new Error(`RPC timeout: ${method}`));\n }\n }, 30000);\n });\n }\n\n private async handleIncomingRpc(request: RPCRequestFromServer): Promise<void> {\n const handler = this.rpcHandlers.get(request.method);\n\n if (!handler) {\n const errorResponse = {\n type: 'rpc_error',\n id: request.id,\n error: {\n code: -32601,\n message: `Method not found: ${request.method}`,\n },\n };\n this.ws?.send(JSON.stringify(errorResponse));\n return;\n }\n\n try {\n const result = await handler(request.params);\n\n // Reverse effect invocations usually resolve by returning a value directly.\n // Only tool-era compatibility flows manage their own response frames.\n if (request.method !== 'tool.invoke') {\n const successResponse = {\n type: 'rpc_result',\n id: request.id,\n result,\n };\n this.ws?.send(JSON.stringify(successResponse));\n }\n } catch (error) {\n const errorResponse = {\n type: 'rpc_error',\n id: request.id,\n error: {\n code: -32000,\n message: error instanceof Error ? error.message : 'Unknown error',\n },\n };\n this.ws?.send(JSON.stringify(errorResponse));\n }\n }\n\n /**\n * Subscribe to client events\n * @param {string} event - Event name\n * @param {Function} handler - Event handler\n */\n on(event: string, handler: (params: unknown) => void): void {\n if (!this.eventHandlers.has(event)) {\n this.eventHandlers.set(event, []);\n }\n this.eventHandlers.get(event)!.push(handler);\n }\n\n /**\n * Register an RPC handler for incoming server requests\n * @param {string} method - RPC method name\n * @param {Function} handler - Handler function\n */\n registerRpcHandler(method: string, handler: (params: unknown) => Promise<unknown>): void {\n this.rpcHandlers.set(method, handler);\n }\n\n /**\n * Unsubscribe from client events\n * @param {string} event - Event name\n * @param {Function} handler - Handler to remove\n */\n off(event: string, handler: (params: unknown) => void): void {\n const handlers = this.eventHandlers.get(event);\n if (handlers) {\n this.eventHandlers.set(\n event,\n handlers.filter((h) => h !== handler)\n );\n }\n }\n\n /**\n * Emit an event locally\n * @param {string} event - Event name\n * @param params - Event data\n */\n emit(event: string, params: unknown): void {\n const handlers = this.eventHandlers.get(event);\n if (handlers) {\n handlers.forEach(handler => handler(params));\n }\n }\n\n /**\n * Disconnect the WebSocket and clear state\n */\n disconnect(): void {\n this.isExplicitlyDisconnected = true;\n if (this.reconnectTimer) {\n clearTimeout(this.reconnectTimer);\n this.reconnectTimer = null;\n }\n this.clearTokenRefreshTimer();\n\n if (this.ws) {\n this.ws.close(1000, 'Client disconnect');\n this.ws = null;\n }\n this.rejectPending(new Error('Client explicitly disconnected'));\n this.rpcHandlers.clear();\n this.emit('disconnect', {});\n }\n}\n","import { WSClient } from './ws-client';\nimport type {\n Job,\n JobFeedbackInput,\n JobFeedbackMetadata,\n JobFeedbackRecord,\n JobFeedbackToolCall,\n JobStatus,\n Prompt,\n ToolWithHandler,\n ToolSchema,\n PublishToolsResult,\n ToolHandler,\n InstanceToolHandler,\n ToolInvokeParams,\n EffectHandlerContext,\n DomainState,\n JobSubmitResult,\n ToolInfo,\n ToolsChangedEvent,\n EffectInfo,\n EffectsChangedEvent,\n} from './types';\nimport type { Doc } from '@automerge/automerge/slim';\n\n// Re-export types that were previously defined here\nexport type {\n ToolWithHandler,\n ToolSchema,\n PublishToolsResult,\n ToolHandler,\n InstanceToolHandler,\n DomainState,\n JobSubmitResult,\n};\n\nexport class Session {\n protected client: WSClient;\n private clientId: string;\n private jobsMap: Map<string, JobImplementation> = new Map();\n private eventListeners: Map<string, Array<(data: unknown) => void>> = new Map();\n private toolHandlers: Map<string, ToolHandler | InstanceToolHandler> = new Map();\n /** Tracks which tools are instance methods (className set, not static) */\n private instanceTools: Set<string> = new Set();\n private currentDomainRevision: string | null = null;\n /** Local effect registry: name → full ToolWithHandler */\n private effects: Map<string, ToolWithHandler> = new Map();\n /** Last known tools for diffing */\n private lastKnownTools: Map<string, ToolInfo> = new Map();\n\n constructor(client: WSClient, clientId?: string) {\n this.client = client;\n this.clientId = clientId || `client_${Date.now()}`;\n this.setupEventHandlers();\n this.setupToolInvokeHandler();\n }\n\n private extractDomainRevisionFromDoc(doc: unknown): string | null {\n const domain = (doc as { domain?: { active?: unknown } } | null | undefined)?.domain;\n const active = domain?.active;\n if (typeof active === 'string' && active.trim()) {\n return active;\n }\n const nestedRevision = (active as { domainRevision?: unknown } | null | undefined)?.domainRevision;\n if (typeof nestedRevision === 'string' && nestedRevision.trim()) {\n return nestedRevision;\n }\n return null;\n }\n\n private buildLegacyEffectContext(): EffectHandlerContext {\n return {\n effectClientId: this.clientId,\n sandboxId: '',\n environmentId: '',\n sessionId: '',\n user: {\n granularId: '',\n userId: '',\n subjectId: '',\n },\n };\n }\n\n // --- Public API ---\n\n get document(): Doc<Record<string, unknown>> {\n return this.client.doc;\n }\n\n get sessionId(): string {\n return this.client.currentSessionId;\n }\n\n get domainRevision(): string | null {\n return this.currentDomainRevision;\n }\n\n /**\n * Make a raw RPC call to the session's Durable Object.\n *\n * Use this when you need to call an RPC method that doesn't have a\n * dedicated wrapper method on the Session/Environment class.\n *\n * @param method - RPC method name (e.g. 'domain.fetchPackagePart')\n * @param params - Request parameters\n * @returns The raw RPC response\n *\n * @example\n * ```typescript\n * const result = await env.rpc('domain.fetchPackagePart', {\n * moduleSpecifier: '@sandbox/domain',\n * part: 'types',\n * });\n * ```\n */\n async rpc<T = unknown>(method: string, params: Record<string, unknown> = {}): Promise<T> {\n return this.client.call(method, params) as Promise<T>;\n }\n\n /**\n * Send client hello to establish the session\n */\n async hello(): Promise<{\n ok: boolean;\n environmentId?: string;\n docId?: string;\n graphContainerStatus?: { lastKeepAliveAt: number; status: 'warming' | 'hot' | 'unknown' };\n }> {\n const result = await this.client.call('client.hello', {\n clientId: this.clientId,\n protocolVersion: '2.0',\n });\n return result as {\n ok: boolean;\n environmentId?: string;\n docId?: string;\n graphContainerStatus?: { lastKeepAliveAt: number; status: 'warming' | 'hot' | 'unknown' };\n };\n }\n\n async publishTools(tools: ToolWithHandler[], revision = '1.0.0'): Promise<PublishToolsResult> {\n void tools;\n void revision;\n throw new Error(\n 'Environment-scoped effect publication was removed. Declare effects in the manifest and register live handlers with granular.registerEffects(environment.sandboxId, effects).',\n );\n }\n\n async publishEffect(effect: ToolWithHandler): Promise<PublishToolsResult> {\n void effect;\n throw new Error(\n 'Environment-scoped effect publication was removed. Use granular.registerEffect(environment.sandboxId, effect).',\n );\n }\n\n async publishEffects(effects: ToolWithHandler[]): Promise<PublishToolsResult> {\n void effects;\n throw new Error(\n 'Environment-scoped effect publication was removed. Use granular.registerEffects(environment.sandboxId, effects).',\n );\n }\n\n async unpublishEffect(name: string): Promise<PublishToolsResult> {\n void name;\n throw new Error(\n 'Environment-scoped effect publication was removed. Use granular.unregisterEffect(environment.sandboxId, effectName).',\n );\n }\n\n async unpublishAllEffects(): Promise<PublishToolsResult> {\n throw new Error(\n 'Environment-scoped effect publication was removed. Use granular.unregisterAllEffects(environment.sandboxId).',\n );\n }\n\n /**\n * Submit a job to execute code in the sandbox.\n *\n * The code can import typed classes from `./sandbox-tools`:\n * ```typescript\n * import { Author, Book, global_search } from './sandbox-tools';\n *\n * const authors = await Author.list({ limit: 10, saveAs: 'recent_authors' });\n * const tolkien = await Author.get({ path: 'author_tolkien' });\n * const bio = await tolkien.get_bio({ detailed: true });\n * const books = await tolkien.get_books();\n * ```\n *\n * Effect calls (instance methods, static methods, global functions) trigger\n * `effect.invoke` RPC back to the sandbox effect host, where the registered handlers\n * execute locally and return the result to the sandbox.\n */\n async submitJob(code: string, domainRevision?: string): Promise<Job> {\n let revision = domainRevision\n || this.currentDomainRevision\n || this.extractDomainRevisionFromDoc(this.client.doc)\n || undefined;\n\n if (!revision) {\n try {\n const summary = await this.getDomain();\n revision = summary.activeDomainRevision || this.extractDomainRevisionFromDoc(this.client.doc) || undefined;\n } catch {\n // Fall through to the existing error below.\n }\n }\n\n if (!revision) {\n throw new Error('No domain revision available. Register live effects or ensure the build schema is activated.');\n }\n\n const result = await this.client.call('job.submit', {\n domainRevision: revision,\n code,\n }) as { jobId?: string };\n\n if (!result.jobId) {\n throw new Error('Failed to submit job: no jobId returned');\n }\n\n const job = new JobImplementation(result.jobId, this.client, {\n code,\n domainRevision: revision,\n createdAt: Date.now(),\n });\n this.jobsMap.set(result.jobId, job);\n return job;\n }\n\n /**\n * Register a handler for a specific tool.\n * @param isInstance - If true, handler will receive (id, params) for instance method dispatch.\n */\n registerToolHandler(name: string, handler: ToolHandler | InstanceToolHandler, isInstance = false): void {\n this.toolHandlers.set(name, handler);\n if (isInstance) {\n this.instanceTools.add(name);\n } else {\n this.instanceTools.delete(name);\n }\n }\n\n /**\n * Respond to a prompt request from the sandbox\n */\n async answerPrompt(promptId: string, answer: unknown): Promise<void> {\n await this.client.call('prompt.answer', { promptId, answer, value: answer });\n }\n\n /**\n * Get the current list of available effects.\n * Consolidates effect declarations and live availability for the session.\n */\n getEffects(): EffectInfo[] {\n const doc: any = this.client.doc;\n const toolMap = new Map<string, ToolInfo>();\n\n // 1. Seed from domain packages (always present after domain activation)\n const domainPkg = doc.domain?.packages?.domain;\n if (domainPkg?.tools && Array.isArray(domainPkg.tools)) {\n for (const tool of domainPkg.tools) {\n if (!tool?.name) continue;\n toolMap.set(tool.name, {\n name: tool.name,\n description: tool.description,\n inputSchema: tool.inputSchema,\n outputSchema: tool.outputSchema,\n className: tool.className || undefined,\n static: tool.static || false,\n ready: false,\n publishedAt: undefined,\n });\n }\n }\n\n // 2. Overlay with live catalogs (has handler readiness info)\n const catalogs = doc.catalog?.rawToolCatalogs || {};\n for (const [clientId, catalog] of Object.entries(catalogs)) {\n const cat = catalog as any;\n if (!cat.tools) continue;\n\n for (const tool of cat.tools) {\n if (!tool?.name) continue;\n const existing = toolMap.get(tool.name);\n // Skip if we already have a newer catalog entry\n if (existing?.publishedAt && cat.publishedAt && existing.publishedAt > cat.publishedAt) continue;\n\n const isLocal = clientId === this.clientId;\n const ready = isLocal\n ? (this.effects.has(tool.name) || this.toolHandlers.has(tool.name) || this.instanceTools.has(tool.name))\n : true;\n\n toolMap.set(tool.name, {\n name: tool.name,\n description: tool.description,\n inputSchema: tool.inputSchema,\n outputSchema: tool.outputSchema,\n className: tool.className || existing?.className,\n static: tool.static || existing?.static || false,\n clientId,\n ready,\n publishedAt: cat.publishedAt,\n });\n }\n }\n\n return Array.from(toolMap.values());\n }\n\n /**\n * Backwards-compatible alias for `getEffects()`.\n */\n getTools(): ToolInfo[] {\n return this.getEffects();\n }\n\n /**\n * Subscribe to effect changes (added, removed, updated).\n * @param callback - Function called with change events\n * @returns Unsubscribe function\n */\n onEffectsChanged(callback: (event: EffectsChangedEvent) => void): () => void {\n const handler = (data: unknown) => callback(data as EffectsChangedEvent);\n if (!this.eventListeners.has('effects:changed')) {\n this.eventListeners.set('effects:changed', []);\n }\n this.eventListeners.get('effects:changed')!.push(handler);\n\n return () => {\n const listeners = this.eventListeners.get('effects:changed');\n if (listeners) {\n this.eventListeners.set('effects:changed', listeners.filter(h => h !== handler));\n }\n };\n }\n\n /**\n * Backwards-compatible alias for `onEffectsChanged()`.\n */\n onToolsChanged(callback: (event: ToolsChangedEvent) => void): () => void {\n const handler = (data: unknown) => callback(data as ToolsChangedEvent);\n if (!this.eventListeners.has('tools:changed')) {\n this.eventListeners.set('tools:changed', []);\n }\n this.eventListeners.get('tools:changed')!.push(handler);\n\n // Return unsubscribe function\n return () => {\n const listeners = this.eventListeners.get('tools:changed');\n if (listeners) {\n this.eventListeners.set('tools:changed', listeners.filter(h => h !== handler));\n }\n };\n }\n\n /**\n * Get the current domain state and available tools\n */\n async getDomain(): Promise<DomainState> {\n const summary = await this.client.call('domain.getSummary', {}) as DomainState;\n if (summary.activeDomainRevision) {\n this.currentDomainRevision = summary.activeDomainRevision;\n } else {\n this.currentDomainRevision = this.extractDomainRevisionFromDoc(this.client.doc);\n }\n return summary;\n }\n\n /**\n * Fetch a domain package part from the backend (no fallback).\n */\n private async fetchDomainPart(part: 'types' | 'docs'): Promise<string> {\n const result = await this.client.call('domain.fetchPackagePart', {\n moduleSpecifier: '@sandbox/domain',\n part,\n }) as { content?: string };\n return result?.content ?? '';\n }\n\n /**\n * Get TypeScript class declarations for the current domain (for LLM/code gen).\n */\n async getDomainTypes(): Promise<string> {\n return this.fetchDomainPart('types');\n }\n\n /**\n * Get Markdown documentation for the current domain (human-readable).\n */\n async getDomainDocs(): Promise<string> {\n return this.fetchDomainPart('docs');\n }\n\n /**\n * Get domain documentation for LLMs. Returns types (preferred) or fallback.\n */\n async getDomainDocumentation(): Promise<string> {\n const types = await this.getDomainTypes();\n if (types && (types.includes('export declare class') || types.includes('export async function'))) {\n return types;\n }\n const summary = await this.getDomain();\n return this.generateFallbackDocs(summary);\n }\n\n /**\n * Generate markdown documentation from the domain summary.\n * Class-aware: groups tools by class with property/relationship info.\n */\n private generateFallbackDocs(summary: DomainState): string {\n const classes = (summary as any).classes as Record<string, any> | undefined;\n const globalTools = (summary as any).globalTools as any[] | undefined;\n const tools = summary.tools || [];\n\n // If we have class data, produce class-aware docs\n if (classes && Object.keys(classes).length > 0) {\n let docs = '# Domain Documentation\\n\\n';\n docs += 'Import classes and tools from `./sandbox-tools`:\\n\\n';\n\n const classNames = Object.keys(classes).map(\n (c) => c.charAt(0).toUpperCase() + c.slice(1),\n );\n const globalNames = (globalTools || []).map((t: any) => t.name);\n const allImports = [...classNames, ...globalNames].join(', ');\n docs += `\\`\\`\\`typescript\\nimport { ${allImports} } from \"./sandbox-tools\";\\n\\`\\`\\`\\n\\n`;\n\n for (const [className, cls] of Object.entries(classes)) {\n const TsName = className.charAt(0).toUpperCase() + className.slice(1);\n docs += `## ${TsName}\\n\\n`;\n if (cls.description) docs += `${cls.description}\\n\\n`;\n\n if (cls.properties?.length > 0) {\n docs += '**Properties:**\\n';\n for (const p of cls.properties) {\n docs += `- \\`${p.name}\\`${p.description ? ': ' + p.description : ''}\\n`;\n }\n docs += '\\n';\n }\n\n if (cls.relationships?.length > 0) {\n docs += '**Relationships:**\\n';\n for (const r of cls.relationships) {\n const fModel = r.foreignModel?.charAt(0).toUpperCase() + r.foreignModel?.slice(1);\n docs += `- \\`${r.localSubmodel}\\` → ${fModel} (${r.kind})\\n`;\n }\n docs += '\\n';\n }\n\n if (cls.methods?.length > 0) {\n docs += '**Methods:**\\n';\n for (const m of cls.methods) {\n docs += `- \\`${TsName}.${m.name}(input)\\``;\n if (m.description) docs += `: ${m.description}`;\n docs += '\\n';\n if (m.inputSchema?.properties) {\n docs += ' ```json\\n ' + JSON.stringify(m.inputSchema, null, 2).replace(/\\n/g, '\\n ') + '\\n ```\\n';\n }\n }\n docs += '\\n';\n }\n }\n\n if (globalTools && globalTools.length > 0) {\n docs += '## Global Effects\\n\\n';\n for (const tool of globalTools) {\n docs += `### ${tool.name}\\n\\n`;\n if (tool.description) docs += `${tool.description}\\n\\n`;\n if (tool.inputSchema) {\n docs += '**Input Schema:**\\n```json\\n';\n docs += JSON.stringify(tool.inputSchema, null, 2);\n docs += '\\n```\\n\\n';\n }\n }\n }\n\n return docs;\n }\n\n // Legacy flat fallback\n if (!tools || tools.length === 0) {\n return 'No effects available in this domain.';\n }\n\n let docs = '# Available Effects\\n\\n';\n docs += 'Import effects from `./sandbox-tools` and call them with await:\\n\\n';\n docs += '```typescript\\nimport { tools } from \"./sandbox-tools\";\\n\\n';\n docs += '// Example:\\n';\n docs += `const result = await tools.${tools[0]?.name || 'example'}(input);\\n`;\n docs += '```\\n\\n';\n\n for (const tool of tools) {\n docs += `## ${tool.name}\\n\\n`;\n if (tool.description) {\n docs += `${tool.description}\\n\\n`;\n }\n if (tool.inputSchema) {\n docs += '**Input Schema:**\\n```json\\n';\n docs += JSON.stringify(tool.inputSchema, null, 2);\n docs += '\\n```\\n\\n';\n }\n if (tool.outputSchema) {\n docs += '**Output Schema:**\\n```json\\n';\n docs += JSON.stringify(tool.outputSchema, null, 2);\n docs += '\\n```\\n\\n';\n }\n }\n\n return docs;\n }\n\n /**\n * Close the session and disconnect from the sandbox\n */\n async disconnect(): Promise<void> {\n try {\n await this.client.call('client.goodbye', {\n clientId: this.clientId,\n timestamp: Date.now(),\n });\n } catch (error) {\n // Best-effort goodbye: abrupt network failures can prevent RPC.\n }\n this.client.disconnect();\n }\n\n // --- Event Handling ---\n\n /**\n * Subscribe to session events\n */\n on(event: string, handler: (data: unknown) => void): void {\n if (!this.eventListeners.has(event)) {\n this.eventListeners.set(event, []);\n }\n this.eventListeners.get(event)!.push(handler);\n }\n\n /**\n * Unsubscribe from session events\n */\n off(event: string, handler: (data: unknown) => void): void {\n const handlers = this.eventListeners.get(event);\n if (handlers) {\n this.eventListeners.set(event, handlers.filter(h => h !== handler));\n }\n }\n\n // --- Internal ---\n\n private setupToolInvokeHandler(): void {\n this.client.registerRpcHandler('tool.invoke', async (params: unknown) => {\n const { callId, toolName, input } = params as ToolInvokeParams;\n\n this.emit('effect:invoke', { callId, effectKey: toolName, toolName, input });\n this.emit('tool:invoke', { callId, toolName, input });\n\n const handler = this.toolHandlers.get(toolName);\n if (!handler) {\n // Send error result back\n await this.client.call('tool.result', {\n callId,\n error: { code: 'TOOL_NOT_FOUND', message: `Tool handler not found: ${toolName}` },\n });\n return;\n }\n\n try {\n let result: unknown;\n const invocationContext = this.buildLegacyEffectContext();\n // Instance methods receive _objectId from the sandbox runtime\n if (this.instanceTools.has(toolName) && input && typeof input === 'object' && '_objectId' in input) {\n const { _objectId, ...restParams } = input as { _objectId: string;[key: string]: any };\n result = await (handler as InstanceToolHandler)(_objectId, restParams, invocationContext);\n } else {\n result = await (handler as ToolHandler)(input, invocationContext);\n }\n this.emit('effect:result', { callId, effectKey: toolName, result });\n this.emit('tool:result', { callId, result });\n\n // Send result back to sandbox\n await this.client.call('tool.result', {\n callId,\n result,\n });\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n this.emit('effect:result', { callId, effectKey: toolName, error: errorMessage });\n this.emit('tool:result', { callId, error: errorMessage });\n\n await this.client.call('tool.result', {\n callId,\n error: { code: 'TOOL_EXECUTION_FAILED', message: errorMessage },\n });\n }\n });\n }\n\n private setupEventHandlers(): void {\n // Pipe client events to session events\n this.client.on('open', (payload: unknown) => this.emit('open', payload || {}));\n this.client.on('sync', (doc: unknown) => {\n this.currentDomainRevision = this.extractDomainRevisionFromDoc(doc);\n this.emit('sync', doc);\n this.checkForToolChanges();\n });\n const emitPrompt = (payload: unknown) => {\n const raw = payload as {\n prompt?: Prompt;\n id?: string;\n promptId?: string;\n type?: string;\n promptType?: string;\n title?: string;\n message?: string;\n options?: Prompt['options'];\n defaultValue?: unknown;\n placeholder?: string;\n allowEmpty?: boolean;\n metadata?: Record<string, unknown>;\n };\n const prompt: Prompt = raw.prompt || {\n id: typeof raw.id === 'string' ? raw.id : String(raw.promptId || ''),\n type: (raw.type === 'confirm' || raw.type === 'choice' || raw.type === 'input'\n ? raw.type\n : raw.promptType === 'confirm' || raw.promptType === 'choice'\n ? raw.promptType\n : 'input'),\n title: typeof raw.title === 'string' ? raw.title : 'Input required',\n message: typeof raw.message === 'string' ? raw.message : '',\n options: raw.options,\n defaultValue: raw.defaultValue,\n placeholder: raw.placeholder,\n allowEmpty: raw.allowEmpty,\n metadata: raw.metadata,\n };\n this.emit('prompt', prompt);\n };\n this.client.on('prompt', emitPrompt);\n this.client.on('prompt.request', emitPrompt);\n this.client.on('disconnect', (payload: unknown) => this.emit('disconnect', payload || {}));\n this.client.on('reconnect_error', (payload: unknown) => this.emit('reconnect_error', payload || {}));\n\n // Job status updates\n this.client.on('job.status', (data: unknown) => {\n this.emit('job:status', data);\n });\n\n // Exec events\n this.client.on('exec.completed', (data: unknown) => {\n this.emit('exec:completed', data);\n });\n this.client.on('exec.progress', (data: unknown) => {\n this.emit('exec:progress', data);\n });\n }\n\n protected emit(event: string, data: unknown): void {\n const handlers = this.eventListeners.get(event);\n if (handlers) {\n handlers.forEach(h => h(data));\n }\n }\n\n /**\n * Check for changes in the effect catalog and emit change events if needed.\n */\n private checkForToolChanges() {\n const currentTools = this.getEffects();\n const currentMap = new Map(currentTools.map(t => [t.name, t]));\n\n const added: string[] = [];\n const removed: string[] = [];\n\n // Check for added or updated tools\n for (const [name, tool] of currentMap) {\n if (!this.lastKnownTools.has(name)) {\n added.push(name);\n }\n }\n\n // Check for removed tools\n for (const name of this.lastKnownTools.keys()) {\n if (!currentMap.has(name)) {\n removed.push(name);\n }\n }\n\n if (added.length > 0 || removed.length > 0) {\n this.lastKnownTools = currentMap;\n this.emit('effects:changed', {\n effects: currentTools,\n tools: currentTools,\n added,\n removed\n });\n this.emit('tools:changed', {\n tools: currentTools,\n added,\n removed\n });\n }\n }\n}\n\n// --- Job Implementation ---\n\nconst MAX_FEEDBACK_STRING_LENGTH = 16_000;\nconst MAX_FEEDBACK_LOG_LINES = 100;\nconst MAX_FEEDBACK_TOOL_CALLS = 50;\nconst MAX_FEEDBACK_ARRAY_ITEMS = 50;\nconst MAX_FEEDBACK_OBJECT_KEYS = 50;\nconst MAX_FEEDBACK_DEPTH = 6;\n\ntype JsonSafeValue =\n | string\n | number\n | boolean\n | null\n | JsonSafeValue[]\n | { [key: string]: JsonSafeValue };\n\nfunction truncateFeedbackString(value: string, maxLength = MAX_FEEDBACK_STRING_LENGTH): string {\n if (value.length <= maxLength) {\n return value;\n }\n return `${value.slice(0, maxLength)}...[truncated ${value.length - maxLength} chars]`;\n}\n\nfunction normalizeJobStatus(status: unknown): JobStatus {\n if (typeof status !== 'string') {\n return 'queued';\n }\n\n switch (status) {\n case 'completed':\n return 'succeeded';\n case 'failed':\n case 'running':\n case 'queued':\n case 'awaitingTool':\n case 'awaitingHuman':\n case 'succeeded':\n case 'timeout':\n case 'canceled':\n return status;\n default:\n return 'queued';\n }\n}\n\nfunction sanitizeFeedbackValue(\n value: unknown,\n depth = 0,\n seen = new WeakSet<object>(),\n): JsonSafeValue {\n if (depth >= MAX_FEEDBACK_DEPTH) {\n return '[Max depth reached]';\n }\n\n if (value === null || value === undefined) {\n return null;\n }\n\n if (typeof value === 'string') {\n return truncateFeedbackString(value);\n }\n\n if (typeof value === 'number' || typeof value === 'boolean') {\n return value;\n }\n\n if (typeof value === 'bigint') {\n return truncateFeedbackString(value.toString());\n }\n\n if (value instanceof Error) {\n return {\n name: truncateFeedbackString(value.name),\n message: truncateFeedbackString(value.message),\n stack: truncateFeedbackString(value.stack || ''),\n };\n }\n\n if (value instanceof Date) {\n return value.toISOString();\n }\n\n if (Array.isArray(value)) {\n return value\n .slice(0, MAX_FEEDBACK_ARRAY_ITEMS)\n .map((entry) => sanitizeFeedbackValue(entry, depth + 1, seen));\n }\n\n if (typeof value === 'object') {\n if (seen.has(value as object)) {\n return '[Circular]';\n }\n seen.add(value as object);\n\n const entries = Object.entries(value as Record<string, unknown>).slice(0, MAX_FEEDBACK_OBJECT_KEYS);\n const sanitized: Record<string, JsonSafeValue> = {};\n\n for (const [key, entryValue] of entries) {\n sanitized[key] = sanitizeFeedbackValue(entryValue, depth + 1, seen);\n }\n\n return sanitized;\n }\n\n return truncateFeedbackString(String(value));\n}\n\nclass JobImplementation implements Job {\n public id: string;\n public client: WSClient;\n public status: JobStatus = 'queued';\n\n private _resultPromise: Promise<unknown>;\n private _resolveResult!: (value: unknown) => void;\n private _rejectResult!: (reason: unknown) => void;\n private eventListeners: Map<string, Array<(data: unknown) => void>> = new Map();\n private metadata: JobFeedbackMetadata;\n\n constructor(\n id: string,\n client: WSClient,\n initialState: {\n code: string;\n domainRevision?: string;\n createdAt: number;\n },\n ) {\n this.id = id;\n this.client = client;\n this.metadata = {\n source: 'sdk',\n status: 'queued',\n code: truncateFeedbackString(initialState.code),\n domainRevision: initialState.domainRevision,\n createdAt: initialState.createdAt,\n stdout: [],\n stderr: [],\n toolCalls: [],\n };\n\n this._resultPromise = new Promise((resolve, reject) => {\n this._resolveResult = resolve;\n this._rejectResult = reject;\n });\n\n // Listen to exec events\n this.client.on('exec.completed', (data: unknown) => {\n const execData = data as { execId?: string; jobId?: string; result?: unknown; error?: unknown };\n if (execData.execId === id || execData.jobId === id) {\n if (execData.error) {\n this.finalize('failed', undefined, execData.error);\n } else {\n this.finalize('succeeded', execData.result);\n }\n this.emit('status', this.status);\n }\n });\n\n this.client.on('exec.progress', (data: unknown) => {\n const progressData = data as { execId?: string; jobId?: string; stdout?: string; stderr?: string };\n if (progressData.execId === id || progressData.jobId === id) {\n if (progressData.stdout) {\n this.markStarted();\n this.metadata.stdout = [...this.metadata.stdout, truncateFeedbackString(progressData.stdout)].slice(-MAX_FEEDBACK_LOG_LINES);\n this.emit('stdout', progressData.stdout);\n }\n if (progressData.stderr) {\n this.markStarted();\n this.metadata.stderr = [...this.metadata.stderr, truncateFeedbackString(progressData.stderr)].slice(-MAX_FEEDBACK_LOG_LINES);\n this.emit('stderr', progressData.stderr);\n }\n }\n });\n\n // Also listen to specific job events if available\n this.client.on(`job.${id}.status`, (status: unknown) => {\n const normalizedStatus = normalizeJobStatus(status);\n this.status = normalizedStatus;\n this.metadata.status = normalizedStatus;\n if (normalizedStatus === 'running') {\n this.markStarted();\n }\n if (normalizedStatus === 'failed' || normalizedStatus === 'timeout' || normalizedStatus === 'canceled') {\n this.finalize(normalizedStatus);\n }\n if (normalizedStatus === 'succeeded') {\n this.finalize('succeeded');\n }\n this.emit('status', normalizedStatus);\n });\n\n this.client.on(`job.${id}.stdout`, (line: unknown) => {\n this.markStarted();\n this.metadata.stdout = [...this.metadata.stdout, truncateFeedbackString(String(line))].slice(-MAX_FEEDBACK_LOG_LINES);\n this.emit('stdout', line);\n });\n\n this.client.on(`job.${id}.stderr`, (line: unknown) => {\n this.markStarted();\n this.metadata.stderr = [...this.metadata.stderr, truncateFeedbackString(String(line))].slice(-MAX_FEEDBACK_LOG_LINES);\n this.emit('stderr', line);\n });\n\n this.client.on(`job.${id}.result`, (result: unknown) => {\n this.finalize('succeeded', result);\n });\n\n this.client.on(`job.${id}.error`, (error: unknown) => {\n this.finalize('failed', undefined, error);\n });\n\n this.client.on('job.status', (data: unknown) => {\n const jobData = data as { jobId?: string; status?: unknown };\n if (jobData.jobId !== id) {\n return;\n }\n const normalizedStatus = normalizeJobStatus(jobData.status);\n this.status = normalizedStatus;\n this.metadata.status = normalizedStatus;\n if (normalizedStatus === 'running') {\n this.markStarted();\n }\n this.emit('status', normalizedStatus);\n });\n\n // Listen for job.completed and job.failed events (generic events from backend)\n this.client.on('job.completed', (data: unknown) => {\n const jobData = data as { jobId?: string; result?: unknown };\n if (jobData.jobId === id) {\n this.finalize('succeeded', jobData.result);\n this.emit('status', this.status);\n }\n });\n\n this.client.on('job.failed', (data: unknown) => {\n const jobData = data as { jobId?: string; error?: unknown };\n if (jobData.jobId === id) {\n this.finalize('failed', undefined, jobData.error || new Error('Job failed'));\n this.emit('status', this.status);\n }\n });\n\n // Live tool call tracking (broadcast by backend to all clients)\n this.client.on('tool.call.start', (data: unknown) => {\n const d = data as { jobId?: string; callId?: string; toolName?: string; input?: unknown; timestamp?: number };\n if (d.jobId === id) {\n this.metadata.toolCalls = this.upsertToolCall({\n callId: d.callId,\n toolName: d.toolName,\n input: sanitizeFeedbackValue(d.input),\n startedAt: d.timestamp || Date.now(),\n });\n this.emit('toolCallStart', { callId: d.callId, toolName: d.toolName, input: d.input, timestamp: d.timestamp });\n }\n });\n\n this.client.on('tool.call.end', (data: unknown) => {\n const d = data as { jobId?: string; callId?: string; toolName?: string; result?: unknown; error?: string; durationMs?: number; timestamp?: number };\n if (d.jobId === id) {\n const completedAt = d.timestamp || Date.now();\n this.metadata.toolCalls = this.upsertToolCall({\n callId: d.callId,\n toolName: d.toolName,\n output: sanitizeFeedbackValue(d.result),\n error: d.error ? truncateFeedbackString(d.error) : undefined,\n completedAt,\n durationMs: typeof d.durationMs === 'number' ? d.durationMs : undefined,\n });\n this.emit('toolCallEnd', { callId: d.callId, toolName: d.toolName, result: d.result, error: d.error, durationMs: d.durationMs, timestamp: d.timestamp });\n }\n });\n }\n\n get result(): Promise<unknown> {\n return this._resultPromise;\n }\n\n async leaveFeedback(input: JobFeedbackInput): Promise<JobFeedbackRecord> {\n const sentiment = input.sentiment;\n if (sentiment !== 'good' && sentiment !== 'bad') {\n throw new Error('Job feedback sentiment must be \"good\" or \"bad\".');\n }\n\n const comment = typeof input.comment === 'string' ? input.comment.trim() : '';\n const response = await this.client.call('job.feedback', {\n jobId: this.id,\n sentiment,\n comment: comment || undefined,\n metadata: this.buildFeedbackMetadata(),\n }) as JobFeedbackRecord;\n\n this.emit('feedback', response);\n return response;\n }\n\n on(event: string, handler: (data: unknown) => void): void {\n if (!this.eventListeners.has(event)) {\n this.eventListeners.set(event, []);\n }\n this.eventListeners.get(event)!.push(handler);\n }\n\n private buildFeedbackMetadata(): JobFeedbackMetadata {\n const startedAt = this.metadata.startedAt;\n const completedAt = this.metadata.completedAt;\n return {\n ...this.metadata,\n durationMs: typeof startedAt === 'number' && typeof completedAt === 'number'\n ? completedAt - startedAt\n : this.metadata.durationMs ?? null,\n stdout: [...this.metadata.stdout],\n stderr: [...this.metadata.stderr],\n toolCalls: this.metadata.toolCalls.slice(0, MAX_FEEDBACK_TOOL_CALLS).map((call) => ({ ...call })),\n };\n }\n\n private markStarted(timestamp = Date.now()): void {\n if (!this.metadata.startedAt) {\n this.metadata.startedAt = timestamp;\n }\n if (this.status === 'queued') {\n this.status = 'running';\n }\n if (this.metadata.status === 'queued') {\n this.metadata.status = 'running';\n }\n }\n\n private finalize(status: JobStatus, result?: unknown, error?: unknown): void {\n if (!this.metadata.startedAt) {\n this.metadata.startedAt = Date.now();\n }\n\n this.status = status;\n this.metadata.status = status;\n this.metadata.completedAt = this.metadata.completedAt || Date.now();\n this.metadata.durationMs = this.metadata.completedAt - this.metadata.startedAt;\n\n if (result !== undefined) {\n this.metadata.result = sanitizeFeedbackValue(result);\n this._resolveResult(result);\n }\n\n if (error !== undefined) {\n const message = error instanceof Error ? error.message : String(error);\n this.metadata.error = truncateFeedbackString(message);\n this._rejectResult(error);\n }\n }\n\n private upsertToolCall(next: Partial<JobFeedbackToolCall> & { callId?: string; toolName?: string }): JobFeedbackToolCall[] {\n const callId = next.callId || `tool-call-${Date.now()}`;\n const existingIndex = this.metadata.toolCalls.findIndex((entry) => entry.callId === callId);\n const existing = existingIndex >= 0 ? this.metadata.toolCalls[existingIndex] : undefined;\n const merged: JobFeedbackToolCall = {\n ...existing,\n ...next,\n callId,\n toolName: next.toolName || existing?.toolName,\n };\n\n if (\n merged.durationMs === undefined\n && typeof merged.startedAt === 'number'\n && typeof merged.completedAt === 'number'\n ) {\n merged.durationMs = merged.completedAt - merged.startedAt;\n }\n\n if (existingIndex >= 0) {\n const updated = [...this.metadata.toolCalls];\n updated[existingIndex] = merged;\n return updated.slice(-MAX_FEEDBACK_TOOL_CALLS);\n }\n\n return [...this.metadata.toolCalls, merged].slice(-MAX_FEEDBACK_TOOL_CALLS);\n }\n\n protected emit(event: string, data: unknown): void {\n const handlers = this.eventListeners.get(event);\n if (handlers) {\n handlers.forEach(h => h(data));\n }\n }\n}\n","import type { EndpointMode } from \"./types\";\n\nexport const LOCAL_API_URL = \"ws://localhost:8787/granular\";\nexport const PRODUCTION_API_URL = \"wss://cf-api-gateway.arthur6084.workers.dev/granular\";\nexport const DEFAULT_LOCAL_API_KEY = \"gn_sk_tenant_default_principal_local_e2e_00000000\";\n\nexport const LOCAL_AUTH_URL = \"http://localhost:3000\";\nexport const PRODUCTION_AUTH_URL = \"https://app.granular.software\";\n\ntype ResolvedEndpointMode = \"local\" | \"production\";\n\nfunction readEnv(name: string): string | undefined {\n if (typeof process === \"undefined\" || !process.env) return undefined;\n return process.env[name];\n}\n\nfunction normalizeMode(value?: string): EndpointMode | undefined {\n if (!value) return undefined;\n const normalized = value.trim().toLowerCase();\n if (normalized === \"local\") return \"local\";\n if (normalized === \"prod\" || normalized === \"production\") return \"production\";\n if (normalized === \"auto\") return \"auto\";\n return undefined;\n}\n\nfunction isTruthy(value?: string): boolean {\n if (!value) return false;\n const normalized = value.trim().toLowerCase();\n return normalized === \"1\" || normalized === \"true\" || normalized === \"yes\" || normalized === \"on\";\n}\n\nexport function isLocalApiUrl(url: string): boolean {\n try {\n const parsed = new URL(url);\n return parsed.hostname === \"localhost\" || parsed.hostname === \"127.0.0.1\";\n } catch {\n return false;\n }\n}\n\nexport function resolveAuthTokenForApiUrl(authToken: string, apiUrl: string): string {\n if (\n !authToken.startsWith(\"sk_\")\n || !isLocalApiUrl(apiUrl)\n || isTruthy(readEnv(\"GRANULAR_DISABLE_LOCAL_API_KEY_FALLBACK\"))\n ) {\n return authToken;\n }\n\n const override = readEnv(\"GRANULAR_LOCAL_API_KEY\")?.trim();\n return override || DEFAULT_LOCAL_API_KEY;\n}\n\nexport function resolveEndpointMode(explicitMode?: EndpointMode): ResolvedEndpointMode {\n const explicit = normalizeMode(explicitMode);\n if (explicit === \"local\" || explicit === \"production\") {\n return explicit;\n }\n\n const envMode = normalizeMode(readEnv(\"GRANULAR_ENDPOINT_MODE\") || readEnv(\"GRANULAR_ENV\"));\n if (envMode === \"local\" || envMode === \"production\") {\n return envMode;\n }\n\n if (isTruthy(readEnv(\"GRANULAR_USE_LOCAL_ENDPOINTS\")) || isTruthy(readEnv(\"GRANULAR_LOCAL\"))) {\n return \"local\";\n }\n if (isTruthy(readEnv(\"GRANULAR_USE_PRODUCTION_ENDPOINTS\")) || isTruthy(readEnv(\"GRANULAR_PROD\"))) {\n return \"production\";\n }\n\n return readEnv(\"NODE_ENV\") === \"development\" ? \"local\" : \"production\";\n}\n\nexport function resolveApiUrl(explicitApiUrl?: string, mode?: EndpointMode): string {\n if (explicitApiUrl) {\n return explicitApiUrl;\n }\n\n return resolveEndpointMode(mode) === \"local\" ? LOCAL_API_URL : PRODUCTION_API_URL;\n}\n\nexport function resolveAuthUrl(explicitAuthUrl?: string, mode?: EndpointMode): string {\n if (explicitAuthUrl) {\n return explicitAuthUrl;\n }\n\n return resolveEndpointMode(mode) === \"local\" ? LOCAL_AUTH_URL : PRODUCTION_AUTH_URL;\n}\n","export * from \"./errors.js\";\nexport * from \"./helpers/parseUtil.js\";\nexport * from \"./helpers/typeAliases.js\";\nexport * from \"./helpers/util.js\";\nexport * from \"./types.js\";\nexport * from \"./ZodError.js\";\n","export var util;\n(function (util) {\n util.assertEqual = (_) => { };\n function assertIs(_arg) { }\n util.assertIs = assertIs;\n function assertNever(_x) {\n throw new Error();\n }\n util.assertNever = assertNever;\n util.arrayToEnum = (items) => {\n const obj = {};\n for (const item of items) {\n obj[item] = item;\n }\n return obj;\n };\n util.getValidEnumValues = (obj) => {\n const validKeys = util.objectKeys(obj).filter((k) => typeof obj[obj[k]] !== \"number\");\n const filtered = {};\n for (const k of validKeys) {\n filtered[k] = obj[k];\n }\n return util.objectValues(filtered);\n };\n util.objectValues = (obj) => {\n return util.objectKeys(obj).map(function (e) {\n return obj[e];\n });\n };\n util.objectKeys = typeof Object.keys === \"function\" // eslint-disable-line ban/ban\n ? (obj) => Object.keys(obj) // eslint-disable-line ban/ban\n : (object) => {\n const keys = [];\n for (const key in object) {\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n keys.push(key);\n }\n }\n return keys;\n };\n util.find = (arr, checker) => {\n for (const item of arr) {\n if (checker(item))\n return item;\n }\n return undefined;\n };\n util.isInteger = typeof Number.isInteger === \"function\"\n ? (val) => Number.isInteger(val) // eslint-disable-line ban/ban\n : (val) => typeof val === \"number\" && Number.isFinite(val) && Math.floor(val) === val;\n function joinValues(array, separator = \" | \") {\n return array.map((val) => (typeof val === \"string\" ? `'${val}'` : val)).join(separator);\n }\n util.joinValues = joinValues;\n util.jsonStringifyReplacer = (_, value) => {\n if (typeof value === \"bigint\") {\n return value.toString();\n }\n return value;\n };\n})(util || (util = {}));\nexport var objectUtil;\n(function (objectUtil) {\n objectUtil.mergeShapes = (first, second) => {\n return {\n ...first,\n ...second, // second overwrites first\n };\n };\n})(objectUtil || (objectUtil = {}));\nexport const ZodParsedType = util.arrayToEnum([\n \"string\",\n \"nan\",\n \"number\",\n \"integer\",\n \"float\",\n \"boolean\",\n \"date\",\n \"bigint\",\n \"symbol\",\n \"function\",\n \"undefined\",\n \"null\",\n \"array\",\n \"object\",\n \"unknown\",\n \"promise\",\n \"void\",\n \"never\",\n \"map\",\n \"set\",\n]);\nexport const getParsedType = (data) => {\n const t = typeof data;\n switch (t) {\n case \"undefined\":\n return ZodParsedType.undefined;\n case \"string\":\n return ZodParsedType.string;\n case \"number\":\n return Number.isNaN(data) ? ZodParsedType.nan : ZodParsedType.number;\n case \"boolean\":\n return ZodParsedType.boolean;\n case \"function\":\n return ZodParsedType.function;\n case \"bigint\":\n return ZodParsedType.bigint;\n case \"symbol\":\n return ZodParsedType.symbol;\n case \"object\":\n if (Array.isArray(data)) {\n return ZodParsedType.array;\n }\n if (data === null) {\n return ZodParsedType.null;\n }\n if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n return ZodParsedType.promise;\n }\n if (typeof Map !== \"undefined\" && data instanceof Map) {\n return ZodParsedType.map;\n }\n if (typeof Set !== \"undefined\" && data instanceof Set) {\n return ZodParsedType.set;\n }\n if (typeof Date !== \"undefined\" && data instanceof Date) {\n return ZodParsedType.date;\n }\n return ZodParsedType.object;\n default:\n return ZodParsedType.unknown;\n }\n};\n","import { util } from \"./helpers/util.js\";\nexport const ZodIssueCode = util.arrayToEnum([\n \"invalid_type\",\n \"invalid_literal\",\n \"custom\",\n \"invalid_union\",\n \"invalid_union_discriminator\",\n \"invalid_enum_value\",\n \"unrecognized_keys\",\n \"invalid_arguments\",\n \"invalid_return_type\",\n \"invalid_date\",\n \"invalid_string\",\n \"too_small\",\n \"too_big\",\n \"invalid_intersection_types\",\n \"not_multiple_of\",\n \"not_finite\",\n]);\nexport const quotelessJson = (obj) => {\n const json = JSON.stringify(obj, null, 2);\n return json.replace(/\"([^\"]+)\":/g, \"$1:\");\n};\nexport class ZodError extends Error {\n get errors() {\n return this.issues;\n }\n constructor(issues) {\n super();\n this.issues = [];\n this.addIssue = (sub) => {\n this.issues = [...this.issues, sub];\n };\n this.addIssues = (subs = []) => {\n this.issues = [...this.issues, ...subs];\n };\n const actualProto = new.target.prototype;\n if (Object.setPrototypeOf) {\n // eslint-disable-next-line ban/ban\n Object.setPrototypeOf(this, actualProto);\n }\n else {\n this.__proto__ = actualProto;\n }\n this.name = \"ZodError\";\n this.issues = issues;\n }\n format(_mapper) {\n const mapper = _mapper ||\n function (issue) {\n return issue.message;\n };\n const fieldErrors = { _errors: [] };\n const processError = (error) => {\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\") {\n issue.unionErrors.map(processError);\n }\n else if (issue.code === \"invalid_return_type\") {\n processError(issue.returnTypeError);\n }\n else if (issue.code === \"invalid_arguments\") {\n processError(issue.argumentsError);\n }\n else if (issue.path.length === 0) {\n fieldErrors._errors.push(mapper(issue));\n }\n else {\n let curr = fieldErrors;\n let i = 0;\n while (i < issue.path.length) {\n const el = issue.path[i];\n const terminal = i === issue.path.length - 1;\n if (!terminal) {\n curr[el] = curr[el] || { _errors: [] };\n // if (typeof el === \"string\") {\n // curr[el] = curr[el] || { _errors: [] };\n // } else if (typeof el === \"number\") {\n // const errorArray: any = [];\n // errorArray._errors = [];\n // curr[el] = curr[el] || errorArray;\n // }\n }\n else {\n curr[el] = curr[el] || { _errors: [] };\n curr[el]._errors.push(mapper(issue));\n }\n curr = curr[el];\n i++;\n }\n }\n }\n };\n processError(this);\n return fieldErrors;\n }\n static assert(value) {\n if (!(value instanceof ZodError)) {\n throw new Error(`Not a ZodError: ${value}`);\n }\n }\n toString() {\n return this.message;\n }\n get message() {\n return JSON.stringify(this.issues, util.jsonStringifyReplacer, 2);\n }\n get isEmpty() {\n return this.issues.length === 0;\n }\n flatten(mapper = (issue) => issue.message) {\n const fieldErrors = {};\n const formErrors = [];\n for (const sub of this.issues) {\n if (sub.path.length > 0) {\n const firstEl = sub.path[0];\n fieldErrors[firstEl] = fieldErrors[firstEl] || [];\n fieldErrors[firstEl].push(mapper(sub));\n }\n else {\n formErrors.push(mapper(sub));\n }\n }\n return { formErrors, fieldErrors };\n }\n get formErrors() {\n return this.flatten();\n }\n}\nZodError.create = (issues) => {\n const error = new ZodError(issues);\n return error;\n};\n","import { ZodIssueCode } from \"../ZodError.js\";\nimport { util, ZodParsedType } from \"../helpers/util.js\";\nconst errorMap = (issue, _ctx) => {\n let message;\n switch (issue.code) {\n case ZodIssueCode.invalid_type:\n if (issue.received === ZodParsedType.undefined) {\n message = \"Required\";\n }\n else {\n message = `Expected ${issue.expected}, received ${issue.received}`;\n }\n break;\n case ZodIssueCode.invalid_literal:\n message = `Invalid literal value, expected ${JSON.stringify(issue.expected, util.jsonStringifyReplacer)}`;\n break;\n case ZodIssueCode.unrecognized_keys:\n message = `Unrecognized key(s) in object: ${util.joinValues(issue.keys, \", \")}`;\n break;\n case ZodIssueCode.invalid_union:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_union_discriminator:\n message = `Invalid discriminator value. Expected ${util.joinValues(issue.options)}`;\n break;\n case ZodIssueCode.invalid_enum_value:\n message = `Invalid enum value. Expected ${util.joinValues(issue.options)}, received '${issue.received}'`;\n break;\n case ZodIssueCode.invalid_arguments:\n message = `Invalid function arguments`;\n break;\n case ZodIssueCode.invalid_return_type:\n message = `Invalid function return type`;\n break;\n case ZodIssueCode.invalid_date:\n message = `Invalid date`;\n break;\n case ZodIssueCode.invalid_string:\n if (typeof issue.validation === \"object\") {\n if (\"includes\" in issue.validation) {\n message = `Invalid input: must include \"${issue.validation.includes}\"`;\n if (typeof issue.validation.position === \"number\") {\n message = `${message} at one or more positions greater than or equal to ${issue.validation.position}`;\n }\n }\n else if (\"startsWith\" in issue.validation) {\n message = `Invalid input: must start with \"${issue.validation.startsWith}\"`;\n }\n else if (\"endsWith\" in issue.validation) {\n message = `Invalid input: must end with \"${issue.validation.endsWith}\"`;\n }\n else {\n util.assertNever(issue.validation);\n }\n }\n else if (issue.validation !== \"regex\") {\n message = `Invalid ${issue.validation}`;\n }\n else {\n message = \"Invalid\";\n }\n break;\n case ZodIssueCode.too_small:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `more than`} ${issue.minimum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `over`} ${issue.minimum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n else if (issue.type === \"bigint\")\n message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${new Date(Number(issue.minimum))}`;\n else\n message = \"Invalid input\";\n break;\n case ZodIssueCode.too_big:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `less than`} ${issue.maximum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `under`} ${issue.maximum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n else if (issue.type === \"bigint\")\n message = `BigInt must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact ? `exactly` : issue.inclusive ? `smaller than or equal to` : `smaller than`} ${new Date(Number(issue.maximum))}`;\n else\n message = \"Invalid input\";\n break;\n case ZodIssueCode.custom:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_intersection_types:\n message = `Intersection results could not be merged`;\n break;\n case ZodIssueCode.not_multiple_of:\n message = `Number must be a multiple of ${issue.multipleOf}`;\n break;\n case ZodIssueCode.not_finite:\n message = \"Number must be finite\";\n break;\n default:\n message = _ctx.defaultError;\n util.assertNever(issue);\n }\n return { message };\n};\nexport default errorMap;\n","import defaultErrorMap from \"./locales/en.js\";\nlet overrideErrorMap = defaultErrorMap;\nexport { defaultErrorMap };\nexport function setErrorMap(map) {\n overrideErrorMap = map;\n}\nexport function getErrorMap() {\n return overrideErrorMap;\n}\n","import { getErrorMap } from \"../errors.js\";\nimport defaultErrorMap from \"../locales/en.js\";\nexport const makeIssue = (params) => {\n const { data, path, errorMaps, issueData } = params;\n const fullPath = [...path, ...(issueData.path || [])];\n const fullIssue = {\n ...issueData,\n path: fullPath,\n };\n if (issueData.message !== undefined) {\n return {\n ...issueData,\n path: fullPath,\n message: issueData.message,\n };\n }\n let errorMessage = \"\";\n const maps = errorMaps\n .filter((m) => !!m)\n .slice()\n .reverse();\n for (const map of maps) {\n errorMessage = map(fullIssue, { data, defaultError: errorMessage }).message;\n }\n return {\n ...issueData,\n path: fullPath,\n message: errorMessage,\n };\n};\nexport const EMPTY_PATH = [];\nexport function addIssueToContext(ctx, issueData) {\n const overrideMap = getErrorMap();\n const issue = makeIssue({\n issueData: issueData,\n data: ctx.data,\n path: ctx.path,\n errorMaps: [\n ctx.common.contextualErrorMap, // contextual error map is first priority\n ctx.schemaErrorMap, // then schema-bound map if available\n overrideMap, // then global override map\n overrideMap === defaultErrorMap ? undefined : defaultErrorMap, // then global default map\n ].filter((x) => !!x),\n });\n ctx.common.issues.push(issue);\n}\nexport class ParseStatus {\n constructor() {\n this.value = \"valid\";\n }\n dirty() {\n if (this.value === \"valid\")\n this.value = \"dirty\";\n }\n abort() {\n if (this.value !== \"aborted\")\n this.value = \"aborted\";\n }\n static mergeArray(status, results) {\n const arrayValue = [];\n for (const s of results) {\n if (s.status === \"aborted\")\n return INVALID;\n if (s.status === \"dirty\")\n status.dirty();\n arrayValue.push(s.value);\n }\n return { status: status.value, value: arrayValue };\n }\n static async mergeObjectAsync(status, pairs) {\n const syncPairs = [];\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n syncPairs.push({\n key,\n value,\n });\n }\n return ParseStatus.mergeObjectSync(status, syncPairs);\n }\n static mergeObjectSync(status, pairs) {\n const finalObject = {};\n for (const pair of pairs) {\n const { key, value } = pair;\n if (key.status === \"aborted\")\n return INVALID;\n if (value.status === \"aborted\")\n return INVALID;\n if (key.status === \"dirty\")\n status.dirty();\n if (value.status === \"dirty\")\n status.dirty();\n if (key.value !== \"__proto__\" && (typeof value.value !== \"undefined\" || pair.alwaysSet)) {\n finalObject[key.value] = value.value;\n }\n }\n return { status: status.value, value: finalObject };\n }\n}\nexport const INVALID = Object.freeze({\n status: \"aborted\",\n});\nexport const DIRTY = (value) => ({ status: \"dirty\", value });\nexport const OK = (value) => ({ status: \"valid\", value });\nexport const isAborted = (x) => x.status === \"aborted\";\nexport const isDirty = (x) => x.status === \"dirty\";\nexport const isValid = (x) => x.status === \"valid\";\nexport const isAsync = (x) => typeof Promise !== \"undefined\" && x instanceof Promise;\n","export var errorUtil;\n(function (errorUtil) {\n errorUtil.errToObj = (message) => typeof message === \"string\" ? { message } : message || {};\n // biome-ignore lint:\n errorUtil.toString = (message) => typeof message === \"string\" ? message : message?.message;\n})(errorUtil || (errorUtil = {}));\n","import { ZodError, ZodIssueCode, } from \"./ZodError.js\";\nimport { defaultErrorMap, getErrorMap } from \"./errors.js\";\nimport { errorUtil } from \"./helpers/errorUtil.js\";\nimport { DIRTY, INVALID, OK, ParseStatus, addIssueToContext, isAborted, isAsync, isDirty, isValid, makeIssue, } from \"./helpers/parseUtil.js\";\nimport { util, ZodParsedType, getParsedType } from \"./helpers/util.js\";\nclass ParseInputLazyPath {\n constructor(parent, value, path, key) {\n this._cachedPath = [];\n this.parent = parent;\n this.data = value;\n this._path = path;\n this._key = key;\n }\n get path() {\n if (!this._cachedPath.length) {\n if (Array.isArray(this._key)) {\n this._cachedPath.push(...this._path, ...this._key);\n }\n else {\n this._cachedPath.push(...this._path, this._key);\n }\n }\n return this._cachedPath;\n }\n}\nconst handleResult = (ctx, result) => {\n if (isValid(result)) {\n return { success: true, data: result.value };\n }\n else {\n if (!ctx.common.issues.length) {\n throw new Error(\"Validation failed but no issues detected.\");\n }\n return {\n success: false,\n get error() {\n if (this._error)\n return this._error;\n const error = new ZodError(ctx.common.issues);\n this._error = error;\n return this._error;\n },\n };\n }\n};\nfunction processCreateParams(params) {\n if (!params)\n return {};\n const { errorMap, invalid_type_error, required_error, description } = params;\n if (errorMap && (invalid_type_error || required_error)) {\n throw new Error(`Can't use \"invalid_type_error\" or \"required_error\" in conjunction with custom error map.`);\n }\n if (errorMap)\n return { errorMap: errorMap, description };\n const customMap = (iss, ctx) => {\n const { message } = params;\n if (iss.code === \"invalid_enum_value\") {\n return { message: message ?? ctx.defaultError };\n }\n if (typeof ctx.data === \"undefined\") {\n return { message: message ?? required_error ?? ctx.defaultError };\n }\n if (iss.code !== \"invalid_type\")\n return { message: ctx.defaultError };\n return { message: message ?? invalid_type_error ?? ctx.defaultError };\n };\n return { errorMap: customMap, description };\n}\nexport class ZodType {\n get description() {\n return this._def.description;\n }\n _getType(input) {\n return getParsedType(input.data);\n }\n _getOrReturnCtx(input, ctx) {\n return (ctx || {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n });\n }\n _processInputParams(input) {\n return {\n status: new ParseStatus(),\n ctx: {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n },\n };\n }\n _parseSync(input) {\n const result = this._parse(input);\n if (isAsync(result)) {\n throw new Error(\"Synchronous parse encountered promise.\");\n }\n return result;\n }\n _parseAsync(input) {\n const result = this._parse(input);\n return Promise.resolve(result);\n }\n parse(data, params) {\n const result = this.safeParse(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n safeParse(data, params) {\n const ctx = {\n common: {\n issues: [],\n async: params?.async ?? false,\n contextualErrorMap: params?.errorMap,\n },\n path: params?.path || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const result = this._parseSync({ data, path: ctx.path, parent: ctx });\n return handleResult(ctx, result);\n }\n \"~validate\"(data) {\n const ctx = {\n common: {\n issues: [],\n async: !!this[\"~standard\"].async,\n },\n path: [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n if (!this[\"~standard\"].async) {\n try {\n const result = this._parseSync({ data, path: [], parent: ctx });\n return isValid(result)\n ? {\n value: result.value,\n }\n : {\n issues: ctx.common.issues,\n };\n }\n catch (err) {\n if (err?.message?.toLowerCase()?.includes(\"encountered\")) {\n this[\"~standard\"].async = true;\n }\n ctx.common = {\n issues: [],\n async: true,\n };\n }\n }\n return this._parseAsync({ data, path: [], parent: ctx }).then((result) => isValid(result)\n ? {\n value: result.value,\n }\n : {\n issues: ctx.common.issues,\n });\n }\n async parseAsync(data, params) {\n const result = await this.safeParseAsync(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n async safeParseAsync(data, params) {\n const ctx = {\n common: {\n issues: [],\n contextualErrorMap: params?.errorMap,\n async: true,\n },\n path: params?.path || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const maybeAsyncResult = this._parse({ data, path: ctx.path, parent: ctx });\n const result = await (isAsync(maybeAsyncResult) ? maybeAsyncResult : Promise.resolve(maybeAsyncResult));\n return handleResult(ctx, result);\n }\n refine(check, message) {\n const getIssueProperties = (val) => {\n if (typeof message === \"string\" || typeof message === \"undefined\") {\n return { message };\n }\n else if (typeof message === \"function\") {\n return message(val);\n }\n else {\n return message;\n }\n };\n return this._refinement((val, ctx) => {\n const result = check(val);\n const setError = () => ctx.addIssue({\n code: ZodIssueCode.custom,\n ...getIssueProperties(val),\n });\n if (typeof Promise !== \"undefined\" && result instanceof Promise) {\n return result.then((data) => {\n if (!data) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n if (!result) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n refinement(check, refinementData) {\n return this._refinement((val, ctx) => {\n if (!check(val)) {\n ctx.addIssue(typeof refinementData === \"function\" ? refinementData(val, ctx) : refinementData);\n return false;\n }\n else {\n return true;\n }\n });\n }\n _refinement(refinement) {\n return new ZodEffects({\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"refinement\", refinement },\n });\n }\n superRefine(refinement) {\n return this._refinement(refinement);\n }\n constructor(def) {\n /** Alias of safeParseAsync */\n this.spa = this.safeParseAsync;\n this._def = def;\n this.parse = this.parse.bind(this);\n this.safeParse = this.safeParse.bind(this);\n this.parseAsync = this.parseAsync.bind(this);\n this.safeParseAsync = this.safeParseAsync.bind(this);\n this.spa = this.spa.bind(this);\n this.refine = this.refine.bind(this);\n this.refinement = this.refinement.bind(this);\n this.superRefine = this.superRefine.bind(this);\n this.optional = this.optional.bind(this);\n this.nullable = this.nullable.bind(this);\n this.nullish = this.nullish.bind(this);\n this.array = this.array.bind(this);\n this.promise = this.promise.bind(this);\n this.or = this.or.bind(this);\n this.and = this.and.bind(this);\n this.transform = this.transform.bind(this);\n this.brand = this.brand.bind(this);\n this.default = this.default.bind(this);\n this.catch = this.catch.bind(this);\n this.describe = this.describe.bind(this);\n this.pipe = this.pipe.bind(this);\n this.readonly = this.readonly.bind(this);\n this.isNullable = this.isNullable.bind(this);\n this.isOptional = this.isOptional.bind(this);\n this[\"~standard\"] = {\n version: 1,\n vendor: \"zod\",\n validate: (data) => this[\"~validate\"](data),\n };\n }\n optional() {\n return ZodOptional.create(this, this._def);\n }\n nullable() {\n return ZodNullable.create(this, this._def);\n }\n nullish() {\n return this.nullable().optional();\n }\n array() {\n return ZodArray.create(this);\n }\n promise() {\n return ZodPromise.create(this, this._def);\n }\n or(option) {\n return ZodUnion.create([this, option], this._def);\n }\n and(incoming) {\n return ZodIntersection.create(this, incoming, this._def);\n }\n transform(transform) {\n return new ZodEffects({\n ...processCreateParams(this._def),\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"transform\", transform },\n });\n }\n default(def) {\n const defaultValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodDefault({\n ...processCreateParams(this._def),\n innerType: this,\n defaultValue: defaultValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n });\n }\n brand() {\n return new ZodBranded({\n typeName: ZodFirstPartyTypeKind.ZodBranded,\n type: this,\n ...processCreateParams(this._def),\n });\n }\n catch(def) {\n const catchValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodCatch({\n ...processCreateParams(this._def),\n innerType: this,\n catchValue: catchValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n });\n }\n describe(description) {\n const This = this.constructor;\n return new This({\n ...this._def,\n description,\n });\n }\n pipe(target) {\n return ZodPipeline.create(this, target);\n }\n readonly() {\n return ZodReadonly.create(this);\n }\n isOptional() {\n return this.safeParse(undefined).success;\n }\n isNullable() {\n return this.safeParse(null).success;\n }\n}\nconst cuidRegex = /^c[^\\s-]{8,}$/i;\nconst cuid2Regex = /^[0-9a-z]+$/;\nconst ulidRegex = /^[0-9A-HJKMNP-TV-Z]{26}$/i;\n// const uuidRegex =\n// /^([a-f0-9]{8}-[a-f0-9]{4}-[1-5][a-f0-9]{3}-[a-f0-9]{4}-[a-f0-9]{12}|00000000-0000-0000-0000-000000000000)$/i;\nconst uuidRegex = /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/i;\nconst nanoidRegex = /^[a-z0-9_-]{21}$/i;\nconst jwtRegex = /^[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]*$/;\nconst durationRegex = /^[-+]?P(?!$)(?:(?:[-+]?\\d+Y)|(?:[-+]?\\d+[.,]\\d+Y$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:(?:[-+]?\\d+W)|(?:[-+]?\\d+[.,]\\d+W$))?(?:(?:[-+]?\\d+D)|(?:[-+]?\\d+[.,]\\d+D$))?(?:T(?=[\\d+-])(?:(?:[-+]?\\d+H)|(?:[-+]?\\d+[.,]\\d+H$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:[-+]?\\d+(?:[.,]\\d+)?S)?)??$/;\n// from https://stackoverflow.com/a/46181/1550155\n// old version: too slow, didn't support unicode\n// const emailRegex = /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i;\n//old email regex\n// const emailRegex = /^(([^<>()[\\].,;:\\s@\"]+(\\.[^<>()[\\].,;:\\s@\"]+)*)|(\".+\"))@((?!-)([^<>()[\\].,;:\\s@\"]+\\.)+[^<>()[\\].,;:\\s@\"]{1,})[^-<>()[\\].,;:\\s@\"]$/i;\n// eslint-disable-next-line\n// const emailRegex =\n// /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\])|(\\[IPv6:(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))\\])|([A-Za-z0-9]([A-Za-z0-9-]*[A-Za-z0-9])*(\\.[A-Za-z]{2,})+))$/;\n// const emailRegex =\n// /^[a-zA-Z0-9\\.\\!\\#\\$\\%\\&\\'\\*\\+\\/\\=\\?\\^\\_\\`\\{\\|\\}\\~\\-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n// const emailRegex =\n// /^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])$/i;\nconst emailRegex = /^(?!\\.)(?!.*\\.\\.)([A-Z0-9_'+\\-\\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\\-]*\\.)+[A-Z]{2,}$/i;\n// const emailRegex =\n// /^[a-z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-z0-9-]+(?:\\.[a-z0-9\\-]+)*$/i;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\nconst _emojiRegex = `^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$`;\nlet emojiRegex;\n// faster, simpler, safer\nconst ipv4Regex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;\nconst ipv4CidrRegex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/(3[0-2]|[12]?[0-9])$/;\n// const ipv6Regex =\n// /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/;\nconst ipv6Regex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/;\nconst ipv6CidrRegex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;\n// https://stackoverflow.com/questions/7860392/determine-if-string-is-in-base64-using-javascript\nconst base64Regex = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/;\n// https://base64.guru/standards/base64url\nconst base64urlRegex = /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/;\n// simple\n// const dateRegexSource = `\\\\d{4}-\\\\d{2}-\\\\d{2}`;\n// no leap year validation\n// const dateRegexSource = `\\\\d{4}-((0[13578]|10|12)-31|(0[13-9]|1[0-2])-30|(0[1-9]|1[0-2])-(0[1-9]|1\\\\d|2\\\\d))`;\n// with leap year validation\nconst dateRegexSource = `((\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\\\d|30)|(02)-(0[1-9]|1\\\\d|2[0-8])))`;\nconst dateRegex = new RegExp(`^${dateRegexSource}$`);\nfunction timeRegexSource(args) {\n let secondsRegexSource = `[0-5]\\\\d`;\n if (args.precision) {\n secondsRegexSource = `${secondsRegexSource}\\\\.\\\\d{${args.precision}}`;\n }\n else if (args.precision == null) {\n secondsRegexSource = `${secondsRegexSource}(\\\\.\\\\d+)?`;\n }\n const secondsQuantifier = args.precision ? \"+\" : \"?\"; // require seconds if precision is nonzero\n return `([01]\\\\d|2[0-3]):[0-5]\\\\d(:${secondsRegexSource})${secondsQuantifier}`;\n}\nfunction timeRegex(args) {\n return new RegExp(`^${timeRegexSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nexport function datetimeRegex(args) {\n let regex = `${dateRegexSource}T${timeRegexSource(args)}`;\n const opts = [];\n opts.push(args.local ? `Z?` : `Z`);\n if (args.offset)\n opts.push(`([+-]\\\\d{2}:?\\\\d{2})`);\n regex = `${regex}(${opts.join(\"|\")})`;\n return new RegExp(`^${regex}$`);\n}\nfunction isValidIP(ip, version) {\n if ((version === \"v4\" || !version) && ipv4Regex.test(ip)) {\n return true;\n }\n if ((version === \"v6\" || !version) && ipv6Regex.test(ip)) {\n return true;\n }\n return false;\n}\nfunction isValidJWT(jwt, alg) {\n if (!jwtRegex.test(jwt))\n return false;\n try {\n const [header] = jwt.split(\".\");\n if (!header)\n return false;\n // Convert base64url to base64\n const base64 = header\n .replace(/-/g, \"+\")\n .replace(/_/g, \"/\")\n .padEnd(header.length + ((4 - (header.length % 4)) % 4), \"=\");\n const decoded = JSON.parse(atob(base64));\n if (typeof decoded !== \"object\" || decoded === null)\n return false;\n if (\"typ\" in decoded && decoded?.typ !== \"JWT\")\n return false;\n if (!decoded.alg)\n return false;\n if (alg && decoded.alg !== alg)\n return false;\n return true;\n }\n catch {\n return false;\n }\n}\nfunction isValidCidr(ip, version) {\n if ((version === \"v4\" || !version) && ipv4CidrRegex.test(ip)) {\n return true;\n }\n if ((version === \"v6\" || !version) && ipv6CidrRegex.test(ip)) {\n return true;\n }\n return false;\n}\nexport class ZodString extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = String(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.string) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.string,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.length < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.length > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"length\") {\n const tooBig = input.data.length > check.value;\n const tooSmall = input.data.length < check.value;\n if (tooBig || tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n if (tooBig) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n else if (tooSmall) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n status.dirty();\n }\n }\n else if (check.kind === \"email\") {\n if (!emailRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"email\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"emoji\") {\n if (!emojiRegex) {\n emojiRegex = new RegExp(_emojiRegex, \"u\");\n }\n if (!emojiRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"emoji\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"uuid\") {\n if (!uuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"uuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"nanoid\") {\n if (!nanoidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"nanoid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid\") {\n if (!cuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid2\") {\n if (!cuid2Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid2\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"ulid\") {\n if (!ulidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"ulid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"url\") {\n try {\n new URL(input.data);\n }\n catch {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"url\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"regex\") {\n check.regex.lastIndex = 0;\n const testResult = check.regex.test(input.data);\n if (!testResult) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"regex\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"trim\") {\n input.data = input.data.trim();\n }\n else if (check.kind === \"includes\") {\n if (!input.data.includes(check.value, check.position)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { includes: check.value, position: check.position },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"toLowerCase\") {\n input.data = input.data.toLowerCase();\n }\n else if (check.kind === \"toUpperCase\") {\n input.data = input.data.toUpperCase();\n }\n else if (check.kind === \"startsWith\") {\n if (!input.data.startsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { startsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"endsWith\") {\n if (!input.data.endsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { endsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"datetime\") {\n const regex = datetimeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"datetime\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"date\") {\n const regex = dateRegex;\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"date\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"time\") {\n const regex = timeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"time\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"duration\") {\n if (!durationRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"duration\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"ip\") {\n if (!isValidIP(input.data, check.version)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"ip\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"jwt\") {\n if (!isValidJWT(input.data, check.alg)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"jwt\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cidr\") {\n if (!isValidCidr(input.data, check.version)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cidr\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"base64\") {\n if (!base64Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"base64\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"base64url\") {\n if (!base64urlRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"base64url\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n _regex(regex, validation, message) {\n return this.refinement((data) => regex.test(data), {\n validation,\n code: ZodIssueCode.invalid_string,\n ...errorUtil.errToObj(message),\n });\n }\n _addCheck(check) {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n email(message) {\n return this._addCheck({ kind: \"email\", ...errorUtil.errToObj(message) });\n }\n url(message) {\n return this._addCheck({ kind: \"url\", ...errorUtil.errToObj(message) });\n }\n emoji(message) {\n return this._addCheck({ kind: \"emoji\", ...errorUtil.errToObj(message) });\n }\n uuid(message) {\n return this._addCheck({ kind: \"uuid\", ...errorUtil.errToObj(message) });\n }\n nanoid(message) {\n return this._addCheck({ kind: \"nanoid\", ...errorUtil.errToObj(message) });\n }\n cuid(message) {\n return this._addCheck({ kind: \"cuid\", ...errorUtil.errToObj(message) });\n }\n cuid2(message) {\n return this._addCheck({ kind: \"cuid2\", ...errorUtil.errToObj(message) });\n }\n ulid(message) {\n return this._addCheck({ kind: \"ulid\", ...errorUtil.errToObj(message) });\n }\n base64(message) {\n return this._addCheck({ kind: \"base64\", ...errorUtil.errToObj(message) });\n }\n base64url(message) {\n // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n return this._addCheck({\n kind: \"base64url\",\n ...errorUtil.errToObj(message),\n });\n }\n jwt(options) {\n return this._addCheck({ kind: \"jwt\", ...errorUtil.errToObj(options) });\n }\n ip(options) {\n return this._addCheck({ kind: \"ip\", ...errorUtil.errToObj(options) });\n }\n cidr(options) {\n return this._addCheck({ kind: \"cidr\", ...errorUtil.errToObj(options) });\n }\n datetime(options) {\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"datetime\",\n precision: null,\n offset: false,\n local: false,\n message: options,\n });\n }\n return this._addCheck({\n kind: \"datetime\",\n precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n offset: options?.offset ?? false,\n local: options?.local ?? false,\n ...errorUtil.errToObj(options?.message),\n });\n }\n date(message) {\n return this._addCheck({ kind: \"date\", message });\n }\n time(options) {\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"time\",\n precision: null,\n message: options,\n });\n }\n return this._addCheck({\n kind: \"time\",\n precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n ...errorUtil.errToObj(options?.message),\n });\n }\n duration(message) {\n return this._addCheck({ kind: \"duration\", ...errorUtil.errToObj(message) });\n }\n regex(regex, message) {\n return this._addCheck({\n kind: \"regex\",\n regex: regex,\n ...errorUtil.errToObj(message),\n });\n }\n includes(value, options) {\n return this._addCheck({\n kind: \"includes\",\n value: value,\n position: options?.position,\n ...errorUtil.errToObj(options?.message),\n });\n }\n startsWith(value, message) {\n return this._addCheck({\n kind: \"startsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n endsWith(value, message) {\n return this._addCheck({\n kind: \"endsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n min(minLength, message) {\n return this._addCheck({\n kind: \"min\",\n value: minLength,\n ...errorUtil.errToObj(message),\n });\n }\n max(maxLength, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxLength,\n ...errorUtil.errToObj(message),\n });\n }\n length(len, message) {\n return this._addCheck({\n kind: \"length\",\n value: len,\n ...errorUtil.errToObj(message),\n });\n }\n /**\n * Equivalent to `.min(1)`\n */\n nonempty(message) {\n return this.min(1, errorUtil.errToObj(message));\n }\n trim() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"trim\" }],\n });\n }\n toLowerCase() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"toLowerCase\" }],\n });\n }\n toUpperCase() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"toUpperCase\" }],\n });\n }\n get isDatetime() {\n return !!this._def.checks.find((ch) => ch.kind === \"datetime\");\n }\n get isDate() {\n return !!this._def.checks.find((ch) => ch.kind === \"date\");\n }\n get isTime() {\n return !!this._def.checks.find((ch) => ch.kind === \"time\");\n }\n get isDuration() {\n return !!this._def.checks.find((ch) => ch.kind === \"duration\");\n }\n get isEmail() {\n return !!this._def.checks.find((ch) => ch.kind === \"email\");\n }\n get isURL() {\n return !!this._def.checks.find((ch) => ch.kind === \"url\");\n }\n get isEmoji() {\n return !!this._def.checks.find((ch) => ch.kind === \"emoji\");\n }\n get isUUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"uuid\");\n }\n get isNANOID() {\n return !!this._def.checks.find((ch) => ch.kind === \"nanoid\");\n }\n get isCUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid\");\n }\n get isCUID2() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid2\");\n }\n get isULID() {\n return !!this._def.checks.find((ch) => ch.kind === \"ulid\");\n }\n get isIP() {\n return !!this._def.checks.find((ch) => ch.kind === \"ip\");\n }\n get isCIDR() {\n return !!this._def.checks.find((ch) => ch.kind === \"cidr\");\n }\n get isBase64() {\n return !!this._def.checks.find((ch) => ch.kind === \"base64\");\n }\n get isBase64url() {\n // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n return !!this._def.checks.find((ch) => ch.kind === \"base64url\");\n }\n get minLength() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxLength() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n}\nZodString.create = (params) => {\n return new ZodString({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodString,\n coerce: params?.coerce ?? false,\n ...processCreateParams(params),\n });\n};\n// https://stackoverflow.com/questions/3966484/why-does-modulus-operator-return-fractional-number-in-javascript/31711034#31711034\nfunction floatSafeRemainder(val, step) {\n const valDecCount = (val.toString().split(\".\")[1] || \"\").length;\n const stepDecCount = (step.toString().split(\".\")[1] || \"\").length;\n const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;\n const valInt = Number.parseInt(val.toFixed(decCount).replace(\".\", \"\"));\n const stepInt = Number.parseInt(step.toFixed(decCount).replace(\".\", \"\"));\n return (valInt % stepInt) / 10 ** decCount;\n}\nexport class ZodNumber extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n this.step = this.multipleOf;\n }\n _parse(input) {\n if (this._def.coerce) {\n input.data = Number(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.number) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.number,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"int\") {\n if (!util.isInteger(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: \"integer\",\n received: \"float\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"min\") {\n const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"multipleOf\") {\n if (floatSafeRemainder(input.data, check.value) !== 0) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"finite\") {\n if (!Number.isFinite(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_finite,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodNumber({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: errorUtil.toString(message),\n },\n ],\n });\n }\n _addCheck(check) {\n return new ZodNumber({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n int(message) {\n return this._addCheck({\n kind: \"int\",\n message: errorUtil.toString(message),\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value: value,\n message: errorUtil.toString(message),\n });\n }\n finite(message) {\n return this._addCheck({\n kind: \"finite\",\n message: errorUtil.toString(message),\n });\n }\n safe(message) {\n return this._addCheck({\n kind: \"min\",\n inclusive: true,\n value: Number.MIN_SAFE_INTEGER,\n message: errorUtil.toString(message),\n })._addCheck({\n kind: \"max\",\n inclusive: true,\n value: Number.MAX_SAFE_INTEGER,\n message: errorUtil.toString(message),\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n get isInt() {\n return !!this._def.checks.find((ch) => ch.kind === \"int\" || (ch.kind === \"multipleOf\" && util.isInteger(ch.value)));\n }\n get isFinite() {\n let max = null;\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"finite\" || ch.kind === \"int\" || ch.kind === \"multipleOf\") {\n return true;\n }\n else if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n else if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return Number.isFinite(min) && Number.isFinite(max);\n }\n}\nZodNumber.create = (params) => {\n return new ZodNumber({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodNumber,\n coerce: params?.coerce || false,\n ...processCreateParams(params),\n });\n};\nexport class ZodBigInt extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n }\n _parse(input) {\n if (this._def.coerce) {\n try {\n input.data = BigInt(input.data);\n }\n catch {\n return this._getInvalidInput(input);\n }\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.bigint) {\n return this._getInvalidInput(input);\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n type: \"bigint\",\n minimum: check.value,\n inclusive: check.inclusive,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n type: \"bigint\",\n maximum: check.value,\n inclusive: check.inclusive,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"multipleOf\") {\n if (input.data % check.value !== BigInt(0)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n _getInvalidInput(input) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.bigint,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodBigInt({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: errorUtil.toString(message),\n },\n ],\n });\n }\n _addCheck(check) {\n return new ZodBigInt({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value,\n message: errorUtil.toString(message),\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n}\nZodBigInt.create = (params) => {\n return new ZodBigInt({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodBigInt,\n coerce: params?.coerce ?? false,\n ...processCreateParams(params),\n });\n};\nexport class ZodBoolean extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = Boolean(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.boolean) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.boolean,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodBoolean.create = (params) => {\n return new ZodBoolean({\n typeName: ZodFirstPartyTypeKind.ZodBoolean,\n coerce: params?.coerce || false,\n ...processCreateParams(params),\n });\n};\nexport class ZodDate extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = new Date(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.date) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.date,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (Number.isNaN(input.data.getTime())) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_date,\n });\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.getTime() < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n message: check.message,\n inclusive: true,\n exact: false,\n minimum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.getTime() > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n message: check.message,\n inclusive: true,\n exact: false,\n maximum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return {\n status: status.value,\n value: new Date(input.data.getTime()),\n };\n }\n _addCheck(check) {\n return new ZodDate({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n min(minDate, message) {\n return this._addCheck({\n kind: \"min\",\n value: minDate.getTime(),\n message: errorUtil.toString(message),\n });\n }\n max(maxDate, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxDate.getTime(),\n message: errorUtil.toString(message),\n });\n }\n get minDate() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min != null ? new Date(min) : null;\n }\n get maxDate() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max != null ? new Date(max) : null;\n }\n}\nZodDate.create = (params) => {\n return new ZodDate({\n checks: [],\n coerce: params?.coerce || false,\n typeName: ZodFirstPartyTypeKind.ZodDate,\n ...processCreateParams(params),\n });\n};\nexport class ZodSymbol extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.symbol) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.symbol,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodSymbol.create = (params) => {\n return new ZodSymbol({\n typeName: ZodFirstPartyTypeKind.ZodSymbol,\n ...processCreateParams(params),\n });\n};\nexport class ZodUndefined extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.undefined,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodUndefined.create = (params) => {\n return new ZodUndefined({\n typeName: ZodFirstPartyTypeKind.ZodUndefined,\n ...processCreateParams(params),\n });\n};\nexport class ZodNull extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.null) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.null,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodNull.create = (params) => {\n return new ZodNull({\n typeName: ZodFirstPartyTypeKind.ZodNull,\n ...processCreateParams(params),\n });\n};\nexport class ZodAny extends ZodType {\n constructor() {\n super(...arguments);\n // to prevent instances of other classes from extending ZodAny. this causes issues with catchall in ZodObject.\n this._any = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n}\nZodAny.create = (params) => {\n return new ZodAny({\n typeName: ZodFirstPartyTypeKind.ZodAny,\n ...processCreateParams(params),\n });\n};\nexport class ZodUnknown extends ZodType {\n constructor() {\n super(...arguments);\n // required\n this._unknown = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n}\nZodUnknown.create = (params) => {\n return new ZodUnknown({\n typeName: ZodFirstPartyTypeKind.ZodUnknown,\n ...processCreateParams(params),\n });\n};\nexport class ZodNever extends ZodType {\n _parse(input) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.never,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n}\nZodNever.create = (params) => {\n return new ZodNever({\n typeName: ZodFirstPartyTypeKind.ZodNever,\n ...processCreateParams(params),\n });\n};\nexport class ZodVoid extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.void,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodVoid.create = (params) => {\n return new ZodVoid({\n typeName: ZodFirstPartyTypeKind.ZodVoid,\n ...processCreateParams(params),\n });\n};\nexport class ZodArray extends ZodType {\n _parse(input) {\n const { ctx, status } = this._processInputParams(input);\n const def = this._def;\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (def.exactLength !== null) {\n const tooBig = ctx.data.length > def.exactLength.value;\n const tooSmall = ctx.data.length < def.exactLength.value;\n if (tooBig || tooSmall) {\n addIssueToContext(ctx, {\n code: tooBig ? ZodIssueCode.too_big : ZodIssueCode.too_small,\n minimum: (tooSmall ? def.exactLength.value : undefined),\n maximum: (tooBig ? def.exactLength.value : undefined),\n type: \"array\",\n inclusive: true,\n exact: true,\n message: def.exactLength.message,\n });\n status.dirty();\n }\n }\n if (def.minLength !== null) {\n if (ctx.data.length < def.minLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.minLength.message,\n });\n status.dirty();\n }\n }\n if (def.maxLength !== null) {\n if (ctx.data.length > def.maxLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.maxLength.message,\n });\n status.dirty();\n }\n }\n if (ctx.common.async) {\n return Promise.all([...ctx.data].map((item, i) => {\n return def.type._parseAsync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n })).then((result) => {\n return ParseStatus.mergeArray(status, result);\n });\n }\n const result = [...ctx.data].map((item, i) => {\n return def.type._parseSync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n });\n return ParseStatus.mergeArray(status, result);\n }\n get element() {\n return this._def.type;\n }\n min(minLength, message) {\n return new ZodArray({\n ...this._def,\n minLength: { value: minLength, message: errorUtil.toString(message) },\n });\n }\n max(maxLength, message) {\n return new ZodArray({\n ...this._def,\n maxLength: { value: maxLength, message: errorUtil.toString(message) },\n });\n }\n length(len, message) {\n return new ZodArray({\n ...this._def,\n exactLength: { value: len, message: errorUtil.toString(message) },\n });\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodArray.create = (schema, params) => {\n return new ZodArray({\n type: schema,\n minLength: null,\n maxLength: null,\n exactLength: null,\n typeName: ZodFirstPartyTypeKind.ZodArray,\n ...processCreateParams(params),\n });\n};\nfunction deepPartialify(schema) {\n if (schema instanceof ZodObject) {\n const newShape = {};\n for (const key in schema.shape) {\n const fieldSchema = schema.shape[key];\n newShape[key] = ZodOptional.create(deepPartialify(fieldSchema));\n }\n return new ZodObject({\n ...schema._def,\n shape: () => newShape,\n });\n }\n else if (schema instanceof ZodArray) {\n return new ZodArray({\n ...schema._def,\n type: deepPartialify(schema.element),\n });\n }\n else if (schema instanceof ZodOptional) {\n return ZodOptional.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodNullable) {\n return ZodNullable.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodTuple) {\n return ZodTuple.create(schema.items.map((item) => deepPartialify(item)));\n }\n else {\n return schema;\n }\n}\nexport class ZodObject extends ZodType {\n constructor() {\n super(...arguments);\n this._cached = null;\n /**\n * @deprecated In most cases, this is no longer needed - unknown properties are now silently stripped.\n * If you want to pass through unknown properties, use `.passthrough()` instead.\n */\n this.nonstrict = this.passthrough;\n // extend<\n // Augmentation extends ZodRawShape,\n // NewOutput extends util.flatten<{\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // }>,\n // NewInput extends util.flatten<{\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }>\n // >(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape<T, Augmentation>,\n // UnknownKeys,\n // Catchall,\n // NewOutput,\n // NewInput\n // > {\n // return new ZodObject({\n // ...this._def,\n // shape: () => ({\n // ...this._def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // }\n /**\n * @deprecated Use `.extend` instead\n * */\n this.augment = this.extend;\n }\n _getCached() {\n if (this._cached !== null)\n return this._cached;\n const shape = this._def.shape();\n const keys = util.objectKeys(shape);\n this._cached = { shape, keys };\n return this._cached;\n }\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.object) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const { status, ctx } = this._processInputParams(input);\n const { shape, keys: shapeKeys } = this._getCached();\n const extraKeys = [];\n if (!(this._def.catchall instanceof ZodNever && this._def.unknownKeys === \"strip\")) {\n for (const key in ctx.data) {\n if (!shapeKeys.includes(key)) {\n extraKeys.push(key);\n }\n }\n }\n const pairs = [];\n for (const key of shapeKeys) {\n const keyValidator = shape[key];\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: keyValidator._parse(new ParseInputLazyPath(ctx, value, ctx.path, key)),\n alwaysSet: key in ctx.data,\n });\n }\n if (this._def.catchall instanceof ZodNever) {\n const unknownKeys = this._def.unknownKeys;\n if (unknownKeys === \"passthrough\") {\n for (const key of extraKeys) {\n pairs.push({\n key: { status: \"valid\", value: key },\n value: { status: \"valid\", value: ctx.data[key] },\n });\n }\n }\n else if (unknownKeys === \"strict\") {\n if (extraKeys.length > 0) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.unrecognized_keys,\n keys: extraKeys,\n });\n status.dirty();\n }\n }\n else if (unknownKeys === \"strip\") {\n }\n else {\n throw new Error(`Internal ZodObject error: invalid unknownKeys value.`);\n }\n }\n else {\n // run catchall validation\n const catchall = this._def.catchall;\n for (const key of extraKeys) {\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: catchall._parse(new ParseInputLazyPath(ctx, value, ctx.path, key) //, ctx.child(key), value, getParsedType(value)\n ),\n alwaysSet: key in ctx.data,\n });\n }\n }\n if (ctx.common.async) {\n return Promise.resolve()\n .then(async () => {\n const syncPairs = [];\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n syncPairs.push({\n key,\n value,\n alwaysSet: pair.alwaysSet,\n });\n }\n return syncPairs;\n })\n .then((syncPairs) => {\n return ParseStatus.mergeObjectSync(status, syncPairs);\n });\n }\n else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get shape() {\n return this._def.shape();\n }\n strict(message) {\n errorUtil.errToObj;\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strict\",\n ...(message !== undefined\n ? {\n errorMap: (issue, ctx) => {\n const defaultError = this._def.errorMap?.(issue, ctx).message ?? ctx.defaultError;\n if (issue.code === \"unrecognized_keys\")\n return {\n message: errorUtil.errToObj(message).message ?? defaultError,\n };\n return {\n message: defaultError,\n };\n },\n }\n : {}),\n });\n }\n strip() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strip\",\n });\n }\n passthrough() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"passthrough\",\n });\n }\n // const AugmentFactory =\n // <Def extends ZodObjectDef>(def: Def) =>\n // <Augmentation extends ZodRawShape>(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape<ReturnType<Def[\"shape\"]>, Augmentation>,\n // Def[\"unknownKeys\"],\n // Def[\"catchall\"]\n // > => {\n // return new ZodObject({\n // ...def,\n // shape: () => ({\n // ...def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // };\n extend(augmentation) {\n return new ZodObject({\n ...this._def,\n shape: () => ({\n ...this._def.shape(),\n ...augmentation,\n }),\n });\n }\n /**\n * Prior to zod@1.0.12 there was a bug in the\n * inferred type of merged objects. Please\n * upgrade if you are experiencing issues.\n */\n merge(merging) {\n const merged = new ZodObject({\n unknownKeys: merging._def.unknownKeys,\n catchall: merging._def.catchall,\n shape: () => ({\n ...this._def.shape(),\n ...merging._def.shape(),\n }),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n });\n return merged;\n }\n // merge<\n // Incoming extends AnyZodObject,\n // Augmentation extends Incoming[\"shape\"],\n // NewOutput extends {\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // },\n // NewInput extends {\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }\n // >(\n // merging: Incoming\n // ): ZodObject<\n // extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"],\n // NewOutput,\n // NewInput\n // > {\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n setKey(key, schema) {\n return this.augment({ [key]: schema });\n }\n // merge<Incoming extends AnyZodObject>(\n // merging: Incoming\n // ): //ZodObject<T & Incoming[\"_shape\"], UnknownKeys, Catchall> = (merging) => {\n // ZodObject<\n // extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"]\n // > {\n // // const mergedShape = objectUtil.mergeShapes(\n // // this._def.shape(),\n // // merging._def.shape()\n // // );\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n catchall(index) {\n return new ZodObject({\n ...this._def,\n catchall: index,\n });\n }\n pick(mask) {\n const shape = {};\n for (const key of util.objectKeys(mask)) {\n if (mask[key] && this.shape[key]) {\n shape[key] = this.shape[key];\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n omit(mask) {\n const shape = {};\n for (const key of util.objectKeys(this.shape)) {\n if (!mask[key]) {\n shape[key] = this.shape[key];\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n /**\n * @deprecated\n */\n deepPartial() {\n return deepPartialify(this);\n }\n partial(mask) {\n const newShape = {};\n for (const key of util.objectKeys(this.shape)) {\n const fieldSchema = this.shape[key];\n if (mask && !mask[key]) {\n newShape[key] = fieldSchema;\n }\n else {\n newShape[key] = fieldSchema.optional();\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n required(mask) {\n const newShape = {};\n for (const key of util.objectKeys(this.shape)) {\n if (mask && !mask[key]) {\n newShape[key] = this.shape[key];\n }\n else {\n const fieldSchema = this.shape[key];\n let newField = fieldSchema;\n while (newField instanceof ZodOptional) {\n newField = newField._def.innerType;\n }\n newShape[key] = newField;\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n keyof() {\n return createZodEnum(util.objectKeys(this.shape));\n }\n}\nZodObject.create = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.strictCreate = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strict\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.lazycreate = (shape, params) => {\n return new ZodObject({\n shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nexport class ZodUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const options = this._def.options;\n function handleResults(results) {\n // return first issue-free validation if it exists\n for (const result of results) {\n if (result.result.status === \"valid\") {\n return result.result;\n }\n }\n for (const result of results) {\n if (result.result.status === \"dirty\") {\n // add issues from dirty option\n ctx.common.issues.push(...result.ctx.common.issues);\n return result.result;\n }\n }\n // return invalid\n const unionErrors = results.map((result) => new ZodError(result.ctx.common.issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return Promise.all(options.map(async (option) => {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n return {\n result: await option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n }),\n ctx: childCtx,\n };\n })).then(handleResults);\n }\n else {\n let dirty = undefined;\n const issues = [];\n for (const option of options) {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n const result = option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n });\n if (result.status === \"valid\") {\n return result;\n }\n else if (result.status === \"dirty\" && !dirty) {\n dirty = { result, ctx: childCtx };\n }\n if (childCtx.common.issues.length) {\n issues.push(childCtx.common.issues);\n }\n }\n if (dirty) {\n ctx.common.issues.push(...dirty.ctx.common.issues);\n return dirty.result;\n }\n const unionErrors = issues.map((issues) => new ZodError(issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return INVALID;\n }\n }\n get options() {\n return this._def.options;\n }\n}\nZodUnion.create = (types, params) => {\n return new ZodUnion({\n options: types,\n typeName: ZodFirstPartyTypeKind.ZodUnion,\n ...processCreateParams(params),\n });\n};\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\n////////// //////////\n////////// ZodDiscriminatedUnion //////////\n////////// //////////\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\nconst getDiscriminator = (type) => {\n if (type instanceof ZodLazy) {\n return getDiscriminator(type.schema);\n }\n else if (type instanceof ZodEffects) {\n return getDiscriminator(type.innerType());\n }\n else if (type instanceof ZodLiteral) {\n return [type.value];\n }\n else if (type instanceof ZodEnum) {\n return type.options;\n }\n else if (type instanceof ZodNativeEnum) {\n // eslint-disable-next-line ban/ban\n return util.objectValues(type.enum);\n }\n else if (type instanceof ZodDefault) {\n return getDiscriminator(type._def.innerType);\n }\n else if (type instanceof ZodUndefined) {\n return [undefined];\n }\n else if (type instanceof ZodNull) {\n return [null];\n }\n else if (type instanceof ZodOptional) {\n return [undefined, ...getDiscriminator(type.unwrap())];\n }\n else if (type instanceof ZodNullable) {\n return [null, ...getDiscriminator(type.unwrap())];\n }\n else if (type instanceof ZodBranded) {\n return getDiscriminator(type.unwrap());\n }\n else if (type instanceof ZodReadonly) {\n return getDiscriminator(type.unwrap());\n }\n else if (type instanceof ZodCatch) {\n return getDiscriminator(type._def.innerType);\n }\n else {\n return [];\n }\n};\nexport class ZodDiscriminatedUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const discriminator = this.discriminator;\n const discriminatorValue = ctx.data[discriminator];\n const option = this.optionsMap.get(discriminatorValue);\n if (!option) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union_discriminator,\n options: Array.from(this.optionsMap.keys()),\n path: [discriminator],\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n else {\n return option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n get discriminator() {\n return this._def.discriminator;\n }\n get options() {\n return this._def.options;\n }\n get optionsMap() {\n return this._def.optionsMap;\n }\n /**\n * The constructor of the discriminated union schema. Its behaviour is very similar to that of the normal z.union() constructor.\n * However, it only allows a union of objects, all of which need to share a discriminator property. This property must\n * have a different value for each object in the union.\n * @param discriminator the name of the discriminator property\n * @param types an array of object schemas\n * @param params\n */\n static create(discriminator, options, params) {\n // Get all the valid discriminator values\n const optionsMap = new Map();\n // try {\n for (const type of options) {\n const discriminatorValues = getDiscriminator(type.shape[discriminator]);\n if (!discriminatorValues.length) {\n throw new Error(`A discriminator value for key \\`${discriminator}\\` could not be extracted from all schema options`);\n }\n for (const value of discriminatorValues) {\n if (optionsMap.has(value)) {\n throw new Error(`Discriminator property ${String(discriminator)} has duplicate value ${String(value)}`);\n }\n optionsMap.set(value, type);\n }\n }\n return new ZodDiscriminatedUnion({\n typeName: ZodFirstPartyTypeKind.ZodDiscriminatedUnion,\n discriminator,\n options,\n optionsMap,\n ...processCreateParams(params),\n });\n }\n}\nfunction mergeValues(a, b) {\n const aType = getParsedType(a);\n const bType = getParsedType(b);\n if (a === b) {\n return { valid: true, data: a };\n }\n else if (aType === ZodParsedType.object && bType === ZodParsedType.object) {\n const bKeys = util.objectKeys(b);\n const sharedKeys = util.objectKeys(a).filter((key) => bKeys.indexOf(key) !== -1);\n const newObj = { ...a, ...b };\n for (const key of sharedKeys) {\n const sharedValue = mergeValues(a[key], b[key]);\n if (!sharedValue.valid) {\n return { valid: false };\n }\n newObj[key] = sharedValue.data;\n }\n return { valid: true, data: newObj };\n }\n else if (aType === ZodParsedType.array && bType === ZodParsedType.array) {\n if (a.length !== b.length) {\n return { valid: false };\n }\n const newArray = [];\n for (let index = 0; index < a.length; index++) {\n const itemA = a[index];\n const itemB = b[index];\n const sharedValue = mergeValues(itemA, itemB);\n if (!sharedValue.valid) {\n return { valid: false };\n }\n newArray.push(sharedValue.data);\n }\n return { valid: true, data: newArray };\n }\n else if (aType === ZodParsedType.date && bType === ZodParsedType.date && +a === +b) {\n return { valid: true, data: a };\n }\n else {\n return { valid: false };\n }\n}\nexport class ZodIntersection extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const handleParsed = (parsedLeft, parsedRight) => {\n if (isAborted(parsedLeft) || isAborted(parsedRight)) {\n return INVALID;\n }\n const merged = mergeValues(parsedLeft.value, parsedRight.value);\n if (!merged.valid) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_intersection_types,\n });\n return INVALID;\n }\n if (isDirty(parsedLeft) || isDirty(parsedRight)) {\n status.dirty();\n }\n return { status: status.value, value: merged.data };\n };\n if (ctx.common.async) {\n return Promise.all([\n this._def.left._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n this._def.right._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n ]).then(([left, right]) => handleParsed(left, right));\n }\n else {\n return handleParsed(this._def.left._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }), this._def.right._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }));\n }\n }\n}\nZodIntersection.create = (left, right, params) => {\n return new ZodIntersection({\n left: left,\n right: right,\n typeName: ZodFirstPartyTypeKind.ZodIntersection,\n ...processCreateParams(params),\n });\n};\n// type ZodTupleItems = [ZodTypeAny, ...ZodTypeAny[]];\nexport class ZodTuple extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (ctx.data.length < this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n return INVALID;\n }\n const rest = this._def.rest;\n if (!rest && ctx.data.length > this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n status.dirty();\n }\n const items = [...ctx.data]\n .map((item, itemIndex) => {\n const schema = this._def.items[itemIndex] || this._def.rest;\n if (!schema)\n return null;\n return schema._parse(new ParseInputLazyPath(ctx, item, ctx.path, itemIndex));\n })\n .filter((x) => !!x); // filter nulls\n if (ctx.common.async) {\n return Promise.all(items).then((results) => {\n return ParseStatus.mergeArray(status, results);\n });\n }\n else {\n return ParseStatus.mergeArray(status, items);\n }\n }\n get items() {\n return this._def.items;\n }\n rest(rest) {\n return new ZodTuple({\n ...this._def,\n rest,\n });\n }\n}\nZodTuple.create = (schemas, params) => {\n if (!Array.isArray(schemas)) {\n throw new Error(\"You must pass an array of schemas to z.tuple([ ... ])\");\n }\n return new ZodTuple({\n items: schemas,\n typeName: ZodFirstPartyTypeKind.ZodTuple,\n rest: null,\n ...processCreateParams(params),\n });\n};\nexport class ZodRecord extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const pairs = [];\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n for (const key in ctx.data) {\n pairs.push({\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, key)),\n value: valueType._parse(new ParseInputLazyPath(ctx, ctx.data[key], ctx.path, key)),\n alwaysSet: key in ctx.data,\n });\n }\n if (ctx.common.async) {\n return ParseStatus.mergeObjectAsync(status, pairs);\n }\n else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get element() {\n return this._def.valueType;\n }\n static create(first, second, third) {\n if (second instanceof ZodType) {\n return new ZodRecord({\n keyType: first,\n valueType: second,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(third),\n });\n }\n return new ZodRecord({\n keyType: ZodString.create(),\n valueType: first,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(second),\n });\n }\n}\nexport class ZodMap extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.map) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.map,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n const pairs = [...ctx.data.entries()].map(([key, value], index) => {\n return {\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, [index, \"key\"])),\n value: valueType._parse(new ParseInputLazyPath(ctx, value, ctx.path, [index, \"value\"])),\n };\n });\n if (ctx.common.async) {\n const finalMap = new Map();\n return Promise.resolve().then(async () => {\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n });\n }\n else {\n const finalMap = new Map();\n for (const pair of pairs) {\n const key = pair.key;\n const value = pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n }\n }\n}\nZodMap.create = (keyType, valueType, params) => {\n return new ZodMap({\n valueType,\n keyType,\n typeName: ZodFirstPartyTypeKind.ZodMap,\n ...processCreateParams(params),\n });\n};\nexport class ZodSet extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.set) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.set,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const def = this._def;\n if (def.minSize !== null) {\n if (ctx.data.size < def.minSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.minSize.message,\n });\n status.dirty();\n }\n }\n if (def.maxSize !== null) {\n if (ctx.data.size > def.maxSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.maxSize.message,\n });\n status.dirty();\n }\n }\n const valueType = this._def.valueType;\n function finalizeSet(elements) {\n const parsedSet = new Set();\n for (const element of elements) {\n if (element.status === \"aborted\")\n return INVALID;\n if (element.status === \"dirty\")\n status.dirty();\n parsedSet.add(element.value);\n }\n return { status: status.value, value: parsedSet };\n }\n const elements = [...ctx.data.values()].map((item, i) => valueType._parse(new ParseInputLazyPath(ctx, item, ctx.path, i)));\n if (ctx.common.async) {\n return Promise.all(elements).then((elements) => finalizeSet(elements));\n }\n else {\n return finalizeSet(elements);\n }\n }\n min(minSize, message) {\n return new ZodSet({\n ...this._def,\n minSize: { value: minSize, message: errorUtil.toString(message) },\n });\n }\n max(maxSize, message) {\n return new ZodSet({\n ...this._def,\n maxSize: { value: maxSize, message: errorUtil.toString(message) },\n });\n }\n size(size, message) {\n return this.min(size, message).max(size, message);\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodSet.create = (valueType, params) => {\n return new ZodSet({\n valueType,\n minSize: null,\n maxSize: null,\n typeName: ZodFirstPartyTypeKind.ZodSet,\n ...processCreateParams(params),\n });\n};\nexport class ZodFunction extends ZodType {\n constructor() {\n super(...arguments);\n this.validate = this.implement;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.function) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.function,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n function makeArgsIssue(args, error) {\n return makeIssue({\n data: args,\n path: ctx.path,\n errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n issueData: {\n code: ZodIssueCode.invalid_arguments,\n argumentsError: error,\n },\n });\n }\n function makeReturnsIssue(returns, error) {\n return makeIssue({\n data: returns,\n path: ctx.path,\n errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n issueData: {\n code: ZodIssueCode.invalid_return_type,\n returnTypeError: error,\n },\n });\n }\n const params = { errorMap: ctx.common.contextualErrorMap };\n const fn = ctx.data;\n if (this._def.returns instanceof ZodPromise) {\n // Would love a way to avoid disabling this rule, but we need\n // an alias (using an arrow function was what caused 2651).\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n return OK(async function (...args) {\n const error = new ZodError([]);\n const parsedArgs = await me._def.args.parseAsync(args, params).catch((e) => {\n error.addIssue(makeArgsIssue(args, e));\n throw error;\n });\n const result = await Reflect.apply(fn, this, parsedArgs);\n const parsedReturns = await me._def.returns._def.type\n .parseAsync(result, params)\n .catch((e) => {\n error.addIssue(makeReturnsIssue(result, e));\n throw error;\n });\n return parsedReturns;\n });\n }\n else {\n // Would love a way to avoid disabling this rule, but we need\n // an alias (using an arrow function was what caused 2651).\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n return OK(function (...args) {\n const parsedArgs = me._def.args.safeParse(args, params);\n if (!parsedArgs.success) {\n throw new ZodError([makeArgsIssue(args, parsedArgs.error)]);\n }\n const result = Reflect.apply(fn, this, parsedArgs.data);\n const parsedReturns = me._def.returns.safeParse(result, params);\n if (!parsedReturns.success) {\n throw new ZodError([makeReturnsIssue(result, parsedReturns.error)]);\n }\n return parsedReturns.data;\n });\n }\n }\n parameters() {\n return this._def.args;\n }\n returnType() {\n return this._def.returns;\n }\n args(...items) {\n return new ZodFunction({\n ...this._def,\n args: ZodTuple.create(items).rest(ZodUnknown.create()),\n });\n }\n returns(returnType) {\n return new ZodFunction({\n ...this._def,\n returns: returnType,\n });\n }\n implement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n strictImplement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n static create(args, returns, params) {\n return new ZodFunction({\n args: (args ? args : ZodTuple.create([]).rest(ZodUnknown.create())),\n returns: returns || ZodUnknown.create(),\n typeName: ZodFirstPartyTypeKind.ZodFunction,\n ...processCreateParams(params),\n });\n }\n}\nexport class ZodLazy extends ZodType {\n get schema() {\n return this._def.getter();\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const lazySchema = this._def.getter();\n return lazySchema._parse({ data: ctx.data, path: ctx.path, parent: ctx });\n }\n}\nZodLazy.create = (getter, params) => {\n return new ZodLazy({\n getter: getter,\n typeName: ZodFirstPartyTypeKind.ZodLazy,\n ...processCreateParams(params),\n });\n};\nexport class ZodLiteral extends ZodType {\n _parse(input) {\n if (input.data !== this._def.value) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_literal,\n expected: this._def.value,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n get value() {\n return this._def.value;\n }\n}\nZodLiteral.create = (value, params) => {\n return new ZodLiteral({\n value: value,\n typeName: ZodFirstPartyTypeKind.ZodLiteral,\n ...processCreateParams(params),\n });\n};\nfunction createZodEnum(values, params) {\n return new ZodEnum({\n values,\n typeName: ZodFirstPartyTypeKind.ZodEnum,\n ...processCreateParams(params),\n });\n}\nexport class ZodEnum extends ZodType {\n _parse(input) {\n if (typeof input.data !== \"string\") {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (!this._cache) {\n this._cache = new Set(this._def.values);\n }\n if (!this._cache.has(input.data)) {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get options() {\n return this._def.values;\n }\n get enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Values() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n extract(values, newDef = this._def) {\n return ZodEnum.create(values, {\n ...this._def,\n ...newDef,\n });\n }\n exclude(values, newDef = this._def) {\n return ZodEnum.create(this.options.filter((opt) => !values.includes(opt)), {\n ...this._def,\n ...newDef,\n });\n }\n}\nZodEnum.create = createZodEnum;\nexport class ZodNativeEnum extends ZodType {\n _parse(input) {\n const nativeEnumValues = util.getValidEnumValues(this._def.values);\n const ctx = this._getOrReturnCtx(input);\n if (ctx.parsedType !== ZodParsedType.string && ctx.parsedType !== ZodParsedType.number) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (!this._cache) {\n this._cache = new Set(util.getValidEnumValues(this._def.values));\n }\n if (!this._cache.has(input.data)) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get enum() {\n return this._def.values;\n }\n}\nZodNativeEnum.create = (values, params) => {\n return new ZodNativeEnum({\n values: values,\n typeName: ZodFirstPartyTypeKind.ZodNativeEnum,\n ...processCreateParams(params),\n });\n};\nexport class ZodPromise extends ZodType {\n unwrap() {\n return this._def.type;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.promise && ctx.common.async === false) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.promise,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const promisified = ctx.parsedType === ZodParsedType.promise ? ctx.data : Promise.resolve(ctx.data);\n return OK(promisified.then((data) => {\n return this._def.type.parseAsync(data, {\n path: ctx.path,\n errorMap: ctx.common.contextualErrorMap,\n });\n }));\n }\n}\nZodPromise.create = (schema, params) => {\n return new ZodPromise({\n type: schema,\n typeName: ZodFirstPartyTypeKind.ZodPromise,\n ...processCreateParams(params),\n });\n};\nexport class ZodEffects extends ZodType {\n innerType() {\n return this._def.schema;\n }\n sourceType() {\n return this._def.schema._def.typeName === ZodFirstPartyTypeKind.ZodEffects\n ? this._def.schema.sourceType()\n : this._def.schema;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const effect = this._def.effect || null;\n const checkCtx = {\n addIssue: (arg) => {\n addIssueToContext(ctx, arg);\n if (arg.fatal) {\n status.abort();\n }\n else {\n status.dirty();\n }\n },\n get path() {\n return ctx.path;\n },\n };\n checkCtx.addIssue = checkCtx.addIssue.bind(checkCtx);\n if (effect.type === \"preprocess\") {\n const processed = effect.transform(ctx.data, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(processed).then(async (processed) => {\n if (status.value === \"aborted\")\n return INVALID;\n const result = await this._def.schema._parseAsync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n if (result.status === \"aborted\")\n return INVALID;\n if (result.status === \"dirty\")\n return DIRTY(result.value);\n if (status.value === \"dirty\")\n return DIRTY(result.value);\n return result;\n });\n }\n else {\n if (status.value === \"aborted\")\n return INVALID;\n const result = this._def.schema._parseSync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n if (result.status === \"aborted\")\n return INVALID;\n if (result.status === \"dirty\")\n return DIRTY(result.value);\n if (status.value === \"dirty\")\n return DIRTY(result.value);\n return result;\n }\n }\n if (effect.type === \"refinement\") {\n const executeRefinement = (acc) => {\n const result = effect.refinement(acc, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(result);\n }\n if (result instanceof Promise) {\n throw new Error(\"Async refinement encountered during synchronous parse operation. Use .parseAsync instead.\");\n }\n return acc;\n };\n if (ctx.common.async === false) {\n const inner = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inner.status === \"aborted\")\n return INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n // return value is ignored\n executeRefinement(inner.value);\n return { status: status.value, value: inner.value };\n }\n else {\n return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((inner) => {\n if (inner.status === \"aborted\")\n return INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n return executeRefinement(inner.value).then(() => {\n return { status: status.value, value: inner.value };\n });\n });\n }\n }\n if (effect.type === \"transform\") {\n if (ctx.common.async === false) {\n const base = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (!isValid(base))\n return INVALID;\n const result = effect.transform(base.value, checkCtx);\n if (result instanceof Promise) {\n throw new Error(`Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.`);\n }\n return { status: status.value, value: result };\n }\n else {\n return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((base) => {\n if (!isValid(base))\n return INVALID;\n return Promise.resolve(effect.transform(base.value, checkCtx)).then((result) => ({\n status: status.value,\n value: result,\n }));\n });\n }\n }\n util.assertNever(effect);\n }\n}\nZodEffects.create = (schema, effect, params) => {\n return new ZodEffects({\n schema,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect,\n ...processCreateParams(params),\n });\n};\nZodEffects.createWithPreprocess = (preprocess, schema, params) => {\n return new ZodEffects({\n schema,\n effect: { type: \"preprocess\", transform: preprocess },\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n ...processCreateParams(params),\n });\n};\nexport { ZodEffects as ZodTransformer };\nexport class ZodOptional extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.undefined) {\n return OK(undefined);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodOptional.create = (type, params) => {\n return new ZodOptional({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodOptional,\n ...processCreateParams(params),\n });\n};\nexport class ZodNullable extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.null) {\n return OK(null);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodNullable.create = (type, params) => {\n return new ZodNullable({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodNullable,\n ...processCreateParams(params),\n });\n};\nexport class ZodDefault extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n let data = ctx.data;\n if (ctx.parsedType === ZodParsedType.undefined) {\n data = this._def.defaultValue();\n }\n return this._def.innerType._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n removeDefault() {\n return this._def.innerType;\n }\n}\nZodDefault.create = (type, params) => {\n return new ZodDefault({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n defaultValue: typeof params.default === \"function\" ? params.default : () => params.default,\n ...processCreateParams(params),\n });\n};\nexport class ZodCatch extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n // newCtx is used to not collect issues from inner types in ctx\n const newCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n };\n const result = this._def.innerType._parse({\n data: newCtx.data,\n path: newCtx.path,\n parent: {\n ...newCtx,\n },\n });\n if (isAsync(result)) {\n return result.then((result) => {\n return {\n status: \"valid\",\n value: result.status === \"valid\"\n ? result.value\n : this._def.catchValue({\n get error() {\n return new ZodError(newCtx.common.issues);\n },\n input: newCtx.data,\n }),\n };\n });\n }\n else {\n return {\n status: \"valid\",\n value: result.status === \"valid\"\n ? result.value\n : this._def.catchValue({\n get error() {\n return new ZodError(newCtx.common.issues);\n },\n input: newCtx.data,\n }),\n };\n }\n }\n removeCatch() {\n return this._def.innerType;\n }\n}\nZodCatch.create = (type, params) => {\n return new ZodCatch({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n catchValue: typeof params.catch === \"function\" ? params.catch : () => params.catch,\n ...processCreateParams(params),\n });\n};\nexport class ZodNaN extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.nan) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.nan,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n}\nZodNaN.create = (params) => {\n return new ZodNaN({\n typeName: ZodFirstPartyTypeKind.ZodNaN,\n ...processCreateParams(params),\n });\n};\nexport const BRAND = Symbol(\"zod_brand\");\nexport class ZodBranded extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const data = ctx.data;\n return this._def.type._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n unwrap() {\n return this._def.type;\n }\n}\nexport class ZodPipeline extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.common.async) {\n const handleAsync = async () => {\n const inResult = await this._def.in._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return DIRTY(inResult.value);\n }\n else {\n return this._def.out._parseAsync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n };\n return handleAsync();\n }\n else {\n const inResult = this._def.in._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return {\n status: \"dirty\",\n value: inResult.value,\n };\n }\n else {\n return this._def.out._parseSync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n }\n static create(a, b) {\n return new ZodPipeline({\n in: a,\n out: b,\n typeName: ZodFirstPartyTypeKind.ZodPipeline,\n });\n }\n}\nexport class ZodReadonly extends ZodType {\n _parse(input) {\n const result = this._def.innerType._parse(input);\n const freeze = (data) => {\n if (isValid(data)) {\n data.value = Object.freeze(data.value);\n }\n return data;\n };\n return isAsync(result) ? result.then((data) => freeze(data)) : freeze(result);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodReadonly.create = (type, params) => {\n return new ZodReadonly({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodReadonly,\n ...processCreateParams(params),\n });\n};\n////////////////////////////////////////\n////////////////////////////////////////\n////////// //////////\n////////// z.custom //////////\n////////// //////////\n////////////////////////////////////////\n////////////////////////////////////////\nfunction cleanParams(params, data) {\n const p = typeof params === \"function\" ? params(data) : typeof params === \"string\" ? { message: params } : params;\n const p2 = typeof p === \"string\" ? { message: p } : p;\n return p2;\n}\nexport function custom(check, _params = {}, \n/**\n * @deprecated\n *\n * Pass `fatal` into the params object instead:\n *\n * ```ts\n * z.string().custom((val) => val.length > 5, { fatal: false })\n * ```\n *\n */\nfatal) {\n if (check)\n return ZodAny.create().superRefine((data, ctx) => {\n const r = check(data);\n if (r instanceof Promise) {\n return r.then((r) => {\n if (!r) {\n const params = cleanParams(_params, data);\n const _fatal = params.fatal ?? fatal ?? true;\n ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n }\n });\n }\n if (!r) {\n const params = cleanParams(_params, data);\n const _fatal = params.fatal ?? fatal ?? true;\n ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n }\n return;\n });\n return ZodAny.create();\n}\nexport { ZodType as Schema, ZodType as ZodSchema };\nexport const late = {\n object: ZodObject.lazycreate,\n};\nexport var ZodFirstPartyTypeKind;\n(function (ZodFirstPartyTypeKind) {\n ZodFirstPartyTypeKind[\"ZodString\"] = \"ZodString\";\n ZodFirstPartyTypeKind[\"ZodNumber\"] = \"ZodNumber\";\n ZodFirstPartyTypeKind[\"ZodNaN\"] = \"ZodNaN\";\n ZodFirstPartyTypeKind[\"ZodBigInt\"] = \"ZodBigInt\";\n ZodFirstPartyTypeKind[\"ZodBoolean\"] = \"ZodBoolean\";\n ZodFirstPartyTypeKind[\"ZodDate\"] = \"ZodDate\";\n ZodFirstPartyTypeKind[\"ZodSymbol\"] = \"ZodSymbol\";\n ZodFirstPartyTypeKind[\"ZodUndefined\"] = \"ZodUndefined\";\n ZodFirstPartyTypeKind[\"ZodNull\"] = \"ZodNull\";\n ZodFirstPartyTypeKind[\"ZodAny\"] = \"ZodAny\";\n ZodFirstPartyTypeKind[\"ZodUnknown\"] = \"ZodUnknown\";\n ZodFirstPartyTypeKind[\"ZodNever\"] = \"ZodNever\";\n ZodFirstPartyTypeKind[\"ZodVoid\"] = \"ZodVoid\";\n ZodFirstPartyTypeKind[\"ZodArray\"] = \"ZodArray\";\n ZodFirstPartyTypeKind[\"ZodObject\"] = \"ZodObject\";\n ZodFirstPartyTypeKind[\"ZodUnion\"] = \"ZodUnion\";\n ZodFirstPartyTypeKind[\"ZodDiscriminatedUnion\"] = \"ZodDiscriminatedUnion\";\n ZodFirstPartyTypeKind[\"ZodIntersection\"] = \"ZodIntersection\";\n ZodFirstPartyTypeKind[\"ZodTuple\"] = \"ZodTuple\";\n ZodFirstPartyTypeKind[\"ZodRecord\"] = \"ZodRecord\";\n ZodFirstPartyTypeKind[\"ZodMap\"] = \"ZodMap\";\n ZodFirstPartyTypeKind[\"ZodSet\"] = \"ZodSet\";\n ZodFirstPartyTypeKind[\"ZodFunction\"] = \"ZodFunction\";\n ZodFirstPartyTypeKind[\"ZodLazy\"] = \"ZodLazy\";\n ZodFirstPartyTypeKind[\"ZodLiteral\"] = \"ZodLiteral\";\n ZodFirstPartyTypeKind[\"ZodEnum\"] = \"ZodEnum\";\n ZodFirstPartyTypeKind[\"ZodEffects\"] = \"ZodEffects\";\n ZodFirstPartyTypeKind[\"ZodNativeEnum\"] = \"ZodNativeEnum\";\n ZodFirstPartyTypeKind[\"ZodOptional\"] = \"ZodOptional\";\n ZodFirstPartyTypeKind[\"ZodNullable\"] = \"ZodNullable\";\n ZodFirstPartyTypeKind[\"ZodDefault\"] = \"ZodDefault\";\n ZodFirstPartyTypeKind[\"ZodCatch\"] = \"ZodCatch\";\n ZodFirstPartyTypeKind[\"ZodPromise\"] = \"ZodPromise\";\n ZodFirstPartyTypeKind[\"ZodBranded\"] = \"ZodBranded\";\n ZodFirstPartyTypeKind[\"ZodPipeline\"] = \"ZodPipeline\";\n ZodFirstPartyTypeKind[\"ZodReadonly\"] = \"ZodReadonly\";\n})(ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {}));\n// requires TS 4.4+\nclass Class {\n constructor(..._) { }\n}\nconst instanceOfType = (\n// const instanceOfType = <T extends new (...args: any[]) => any>(\ncls, params = {\n message: `Input not instance of ${cls.name}`,\n}) => custom((data) => data instanceof cls, params);\nconst stringType = ZodString.create;\nconst numberType = ZodNumber.create;\nconst nanType = ZodNaN.create;\nconst bigIntType = ZodBigInt.create;\nconst booleanType = ZodBoolean.create;\nconst dateType = ZodDate.create;\nconst symbolType = ZodSymbol.create;\nconst undefinedType = ZodUndefined.create;\nconst nullType = ZodNull.create;\nconst anyType = ZodAny.create;\nconst unknownType = ZodUnknown.create;\nconst neverType = ZodNever.create;\nconst voidType = ZodVoid.create;\nconst arrayType = ZodArray.create;\nconst objectType = ZodObject.create;\nconst strictObjectType = ZodObject.strictCreate;\nconst unionType = ZodUnion.create;\nconst discriminatedUnionType = ZodDiscriminatedUnion.create;\nconst intersectionType = ZodIntersection.create;\nconst tupleType = ZodTuple.create;\nconst recordType = ZodRecord.create;\nconst mapType = ZodMap.create;\nconst setType = ZodSet.create;\nconst functionType = ZodFunction.create;\nconst lazyType = ZodLazy.create;\nconst literalType = ZodLiteral.create;\nconst enumType = ZodEnum.create;\nconst nativeEnumType = ZodNativeEnum.create;\nconst promiseType = ZodPromise.create;\nconst effectsType = ZodEffects.create;\nconst optionalType = ZodOptional.create;\nconst nullableType = ZodNullable.create;\nconst preprocessType = ZodEffects.createWithPreprocess;\nconst pipelineType = ZodPipeline.create;\nconst ostring = () => stringType().optional();\nconst onumber = () => numberType().optional();\nconst oboolean = () => booleanType().optional();\nexport const coerce = {\n string: ((arg) => ZodString.create({ ...arg, coerce: true })),\n number: ((arg) => ZodNumber.create({ ...arg, coerce: true })),\n boolean: ((arg) => ZodBoolean.create({\n ...arg,\n coerce: true,\n })),\n bigint: ((arg) => ZodBigInt.create({ ...arg, coerce: true })),\n date: ((arg) => ZodDate.create({ ...arg, coerce: true })),\n};\nexport { anyType as any, arrayType as array, bigIntType as bigint, booleanType as boolean, dateType as date, discriminatedUnionType as discriminatedUnion, effectsType as effect, enumType as enum, functionType as function, instanceOfType as instanceof, intersectionType as intersection, lazyType as lazy, literalType as literal, mapType as map, nanType as nan, nativeEnumType as nativeEnum, neverType as never, nullType as null, nullableType as nullable, numberType as number, objectType as object, oboolean, onumber, optionalType as optional, ostring, pipelineType as pipeline, preprocessType as preprocess, promiseType as promise, recordType as record, setType as set, strictObjectType as strictObject, stringType as string, symbolType as symbol, effectsType as transformer, tupleType as tuple, undefinedType as undefined, unionType as union, unknownType as unknown, voidType as void, };\nexport const NEVER = INVALID;\n","import { z } from \"zod\";\n\nconst VALIDATION_RULE_OPERATORS = [\n \"eq\",\n \"neq\",\n \"gt\",\n \"gte\",\n \"lt\",\n \"lte\",\n \"true\",\n \"false\",\n \"regex\",\n \"contains\",\n \"not_contains\",\n \"starts_with\",\n \"ends_with\",\n] as const;\n\nexport const NoteSchema = z.union([z.string(), z.array(z.string())]);\n\nexport const EnumRuleSchema = z.union([\n z.array(z.string()),\n z\n .object({\n values: z.array(z.string()),\n message: z.string().optional(),\n })\n .strict(),\n]);\n\nexport const FilterBySchema = z.union([\n z.boolean(),\n z.array(z.string()),\n z\n .object({\n operators: z.array(z.string()),\n scalarType: z.string().optional(),\n })\n .strict(),\n]);\n\nexport const ValidationRuleSchema = z\n .object({\n operator: z.enum(\n [...VALIDATION_RULE_OPERATORS] as [\n (typeof VALIDATION_RULE_OPERATORS)[number],\n ...(typeof VALIDATION_RULE_OPERATORS)[number][],\n ],\n ),\n stringValue: z.string().optional(),\n numberValue: z.number().optional(),\n booleanValue: z.boolean().optional(),\n message: z.string().optional(),\n })\n .strict();\n\nexport const StateMachineStateSchema = z.union([\n z.string(),\n z\n .object({\n name: z.string().min(1),\n isFinal: z.boolean().optional(),\n })\n .strict(),\n]);\n\nexport const StateMachineTransitionSchema = z\n .object({\n name: z.string().min(1),\n from: z.string().min(1),\n to: z.string().min(1),\n })\n .strict();\n\nexport const StateMachineSchema = z\n .object({\n name: z.string().min(1),\n entryState: z.string().min(1),\n states: z.array(StateMachineStateSchema).min(1),\n transitions: z.array(StateMachineTransitionSchema),\n finalStates: z.array(z.string()).optional(),\n })\n .strict();\n\nexport const EffectMetamodelSchema = z\n .object({\n postCondition: z\n .union([\n z.string(),\n z\n .object({\n condition: z.string().min(1),\n description: z.string().optional(),\n })\n .strict(),\n ])\n .optional(),\n dryRun: z\n .union([\n z.boolean(),\n z\n .object({\n enabled: z.boolean().optional(),\n description: z.string().optional(),\n })\n .strict(),\n ])\n .optional(),\n reverse: z\n .union([\n z.string(),\n z\n .object({\n handler: z.string().optional(),\n description: z.string().optional(),\n })\n .strict(),\n ])\n .optional(),\n approvalRequired: z\n .union([\n z.boolean(),\n z\n .object({\n required: z.boolean().optional(),\n reason: z.string().optional(),\n mode: z.string().optional(),\n })\n .strict(),\n ])\n .optional(),\n })\n .strict();\n","import type { ManifestValidationOperator } from \"./validation-operators\";\n\nexport interface DomainPropertyNoteSummary {\n notes: string[];\n}\n\nexport interface MetamodelGraphqlMutation {\n label: string;\n query: string;\n}\n\nexport type MetamodelNotesInput = string | string[] | undefined;\n\nexport interface DomainValidationRuleSummary {\n operator: string;\n stringValue?: string;\n numberValue?: number;\n booleanValue?: boolean;\n message?: string;\n}\n\nexport interface DomainPropertySummary extends DomainPropertyNoteSummary {\n name: string;\n path: string;\n description?: string | null;\n type?: string | null;\n required?: { message?: string } | null;\n enumRule?: { values: string[]; message?: string } | null;\n filterBy?: { operators: string[]; scalarType?: string } | null;\n validationRules?: DomainValidationRuleSummary[];\n}\n\nexport interface DomainRelationshipSummary {\n name?: string | null;\n localSubmodel?: string | null;\n localIsMany?: boolean;\n foreignModel?: string | null;\n foreignSubmodel?: string | null;\n foreignIsMany?: boolean;\n kind?: string | null;\n}\n\nexport interface DomainMethodSummary {\n effectKey?: string;\n name: string;\n description?: string | null;\n inputSchema?: any;\n outputSchema?: any;\n metamodels?: unknown | null;\n effectBehaviors?: DomainEffectBehaviorsSummary | null;\n static?: boolean;\n}\n\nexport interface DomainEffectPostConditionSummary {\n condition: string;\n description?: string;\n}\n\nexport interface DomainEffectDryRunSummary {\n enabled: boolean;\n description?: string;\n}\n\nexport interface DomainEffectReverseSummary {\n handler?: string;\n description?: string;\n}\n\nexport interface DomainEffectApprovalRequiredSummary {\n required: boolean;\n reason?: string;\n mode?: string;\n}\n\nexport interface DomainEffectBehaviorsSummary {\n postCondition?: DomainEffectPostConditionSummary;\n dryRun?: DomainEffectDryRunSummary;\n reverse?: DomainEffectReverseSummary;\n approvalRequired?: DomainEffectApprovalRequiredSummary;\n}\n\nexport interface DomainStateMachineStateSummary {\n name: string;\n isFinal: boolean;\n}\n\nexport interface DomainStateMachineTransitionSummary {\n name: string;\n from: string;\n to: string;\n}\n\nexport interface DomainStateMachineSummary {\n name: string;\n entryState?: string | null;\n finalStates: string[];\n states: DomainStateMachineStateSummary[];\n transitions: DomainStateMachineTransitionSummary[];\n}\n\nexport interface DomainClassSummary {\n name: string;\n label?: string | null;\n description?: string | null;\n notes: string[];\n properties: DomainPropertySummary[];\n relationships: DomainRelationshipSummary[];\n methods: DomainMethodSummary[];\n stateMachines: DomainStateMachineSummary[];\n}\n\nexport interface DomainTypeUnionIR {\n kind: \"union\";\n name: string;\n docs: string[];\n members: string[];\n}\n\nexport type DomainTypeIR = DomainTypeUnionIR;\n\nexport interface DomainPropertyIR {\n name: string;\n type: string;\n readonly: boolean;\n docs: string[];\n}\n\nexport interface DomainMethodParamIR {\n name: string;\n type: string;\n optional?: boolean;\n}\n\nexport interface DomainEffectRuntimeIR {\n kind: \"effect\";\n effectKey: string;\n}\n\nexport interface DomainRelationshipRuntimeIR {\n kind: \"relationship\";\n relationship: string;\n targetClassName: string;\n many: boolean;\n}\n\nexport interface DomainStateMachineRuntimeIR {\n kind: \"state_machine\";\n machineName: string;\n className: string;\n stateTypeName: string;\n transitionTypeName: string;\n operation:\n | \"get_current\"\n | \"reach\"\n | \"list_transitions\"\n | \"list_reachable_states\"\n | \"is_final\"\n | \"paths_to\";\n}\n\nexport type DomainMethodRuntimeIR =\n | DomainEffectRuntimeIR\n | DomainRelationshipRuntimeIR\n | DomainStateMachineRuntimeIR;\n\nexport interface DomainMethodIR {\n name: string;\n docs: string[];\n static: boolean;\n params: DomainMethodParamIR[];\n returnType: string;\n runtime: DomainMethodRuntimeIR;\n}\n\nexport interface DomainClassIR {\n name: string;\n docs: string[];\n properties: DomainPropertyIR[];\n methods: DomainMethodIR[];\n source: DomainClassSummary;\n}\n\nexport interface DomainGlobalToolIR {\n summary: DomainMethodSummary;\n method: DomainMethodIR;\n}\n\nexport interface DomainIR {\n classes: Record<string, DomainClassIR>;\n types: DomainTypeIR[];\n globalTools: DomainGlobalToolIR[];\n}\n\nexport type { ManifestValidationOperator } from \"./validation-operators\";\nexport { VALIDATION_RULE_OPERATORS } from \"./validation-operators\";\n\nexport interface ManifestEnumRuleInput {\n values: string[];\n message?: string;\n}\n\nexport interface ManifestFilterByInput {\n operators: string[];\n scalarType?: string;\n}\n\nexport interface ManifestValidationRuleInput {\n operator: ManifestValidationOperator;\n stringValue?: string;\n numberValue?: number;\n booleanValue?: boolean;\n message?: string;\n}\n\nexport interface ManifestStateMachineStateInput {\n name: string;\n isFinal?: boolean;\n}\n\nexport interface ManifestStateMachineTransitionInput {\n name: string;\n from: string;\n to: string;\n}\n\nexport interface ManifestStateMachineInput {\n name: string;\n entryState: string;\n states: Array<string | ManifestStateMachineStateInput>;\n transitions: ManifestStateMachineTransitionInput[];\n finalStates?: string[];\n}\n\nexport interface ManifestPostConditionInput {\n condition: string;\n description?: string;\n}\n\nexport interface ManifestDryRunInput {\n enabled?: boolean;\n description?: string;\n}\n\nexport interface ManifestReverseInput {\n handler?: string;\n description?: string;\n}\n\nexport interface ManifestApprovalRequiredInput {\n required?: boolean;\n reason?: string;\n mode?: string;\n}\n\nexport interface FieldMetamodelManifestSpec {\n type?: string;\n note?: MetamodelNotesInput;\n required?: boolean;\n enum?: string[] | ManifestEnumRuleInput;\n filterBy?: boolean | string[] | ManifestFilterByInput;\n validate?: ManifestValidationRuleInput[];\n}\n\nexport interface ModelMetamodelManifestSpec {\n note?: MetamodelNotesInput;\n stateMachines?: ManifestStateMachineInput[];\n}\n\nexport interface EffectMetamodelManifestSpec {\n postCondition?: string | ManifestPostConditionInput;\n dryRun?: boolean | ManifestDryRunInput;\n reverse?: string | ManifestReverseInput;\n approvalRequired?: boolean | ManifestApprovalRequiredInput;\n}\n\nexport interface MetamodelSummarySelections {\n classFields?: string[];\n propertyFields?: string[];\n methodFields?: string[];\n}\n\nexport interface MetamodelSummaryReader {\n selections?: MetamodelSummarySelections;\n readClassSummary?: (rawClass: Record<string, any>) => Partial<DomainClassSummary>;\n readPropertySummary?: (\n rawProperty: Record<string, any>,\n ) => Partial<DomainPropertySummary>;\n readMethodSummary?: (\n rawMethod: Record<string, any>,\n ) => Partial<DomainMethodSummary>;\n}\n\nexport interface MetamodelDomainIRFacet {\n applyToClassIR?: (\n classIR: DomainClassIR,\n classSummary: DomainClassSummary,\n ) => DomainClassIR;\n applyToPropertyIR?: (\n propertyIR: DomainPropertyIR,\n propertySummary: DomainPropertySummary,\n classSummary: DomainClassSummary,\n ) => DomainPropertyIR;\n applyToMethodIR?: (\n methodIR: DomainMethodIR,\n methodSummary: DomainMethodSummary,\n classSummary?: DomainClassSummary,\n ) => DomainMethodIR;\n extraTypesForClass?: (classSummary: DomainClassSummary) => DomainTypeIR[];\n extraMethodsForClass?: (classSummary: DomainClassSummary) => DomainMethodIR[];\n}\n\nexport interface MetamodelManifestFacet {\n buildFieldMutations?: (\n fieldPath: string,\n spec: FieldMetamodelManifestSpec,\n ) => MetamodelGraphqlMutation[];\n buildModelMutations?: (\n modelPath: string,\n spec: ModelMetamodelManifestSpec,\n ) => MetamodelGraphqlMutation[];\n buildEffectMutations?: (\n toolPath: string,\n spec: EffectMetamodelManifestSpec,\n ) => MetamodelGraphqlMutation[];\n}\n\nexport interface MetamodelGraphqlResolverTools {\n run<T>(effect: unknown): Promise<T>;\n stateMachines?: {\n pathsToState(\n model: any,\n machineName: string,\n state: string,\n ): Promise<any>;\n instancesInState(\n model: any,\n machineName: string,\n state: string,\n ): Promise<any>;\n };\n}\n\nexport type MetamodelGraphqlResolverMap = Record<\n string,\n Record<string, (parent: any, args: any) => any>\n>;\n\nexport interface MetamodelGraphqlFacet {\n typeDefs?: string[];\n createResolvers?: (\n tools: MetamodelGraphqlResolverTools,\n ) => MetamodelGraphqlResolverMap;\n}\n\nexport interface ManifestMetamodelDocRow {\n key: string;\n description: string;\n}\n\nexport interface MetamodelDocsFacet {\n fieldRows?: ManifestMetamodelDocRow[];\n modelRows?: ManifestMetamodelDocRow[];\n effectRows?: ManifestMetamodelDocRow[];\n}\n\nexport interface MetamodelPackage {\n id: string;\n summary?: MetamodelSummaryReader;\n domain?: MetamodelDomainIRFacet;\n manifest?: MetamodelManifestFacet;\n graphql?: MetamodelGraphqlFacet;\n docs?: MetamodelDocsFacet;\n}\n\nexport interface ResolvedMetamodelPackage {\n id: string;\n summary: MetamodelSummaryReader;\n domain: MetamodelDomainIRFacet;\n manifest: MetamodelManifestFacet;\n graphql: MetamodelGraphqlFacet;\n docs: MetamodelDocsFacet;\n}\n\nexport interface MetamodelRegistry {\n readonly packages: ResolvedMetamodelPackage[];\n collectDocRows(kind: \"fieldRows\" | \"modelRows\" | \"effectRows\"): ManifestMetamodelDocRow[];\n getSummarySelections(): {\n classFields: string[];\n propertyFields: string[];\n methodFields: string[];\n };\n applyClassSummaryReaders(\n rawClass: Record<string, any>,\n classSummary: DomainClassSummary,\n ): DomainClassSummary;\n applyPropertySummaryReaders(\n rawProperty: Record<string, any>,\n propertySummary: DomainPropertySummary,\n ): DomainPropertySummary;\n applyMethodSummaryReaders(\n rawMethod: Record<string, any>,\n methodSummary: DomainMethodSummary,\n ): DomainMethodSummary;\n applyClassIR(\n classIR: DomainClassIR,\n classSummary: DomainClassSummary,\n ): DomainClassIR;\n applyPropertyIR(\n propertyIR: DomainPropertyIR,\n propertySummary: DomainPropertySummary,\n classSummary: DomainClassSummary,\n ): DomainPropertyIR;\n applyMethodIR(\n methodIR: DomainMethodIR,\n methodSummary: DomainMethodSummary,\n classSummary?: DomainClassSummary,\n ): DomainMethodIR;\n getExtraTypesForClass(classSummary: DomainClassSummary): DomainTypeIR[];\n getExtraMethodsForClass(classSummary: DomainClassSummary): DomainMethodIR[];\n}\n\nexport function defineMetamodelPackage(\n metamodelPackage: MetamodelPackage,\n): ResolvedMetamodelPackage {\n return {\n id: metamodelPackage.id,\n summary: metamodelPackage.summary || {},\n domain: metamodelPackage.domain || {},\n manifest: metamodelPackage.manifest || {},\n graphql: metamodelPackage.graphql || {},\n docs: metamodelPackage.docs || {},\n };\n}\n\nfunction unique(values: string[]) {\n return [...new Set(values.filter(Boolean))];\n}\n\nfunction ensureUniqueMetamodelIds(packages: ResolvedMetamodelPackage[]) {\n const seen = new Set<string>();\n\n for (const metamodelPackage of packages) {\n if (seen.has(metamodelPackage.id)) {\n throw new Error(`Duplicate metamodel package id: ${metamodelPackage.id}`);\n }\n seen.add(metamodelPackage.id);\n }\n}\n\nexport function resolveMetamodelPackages(\n metamodelPackages: MetamodelPackage[],\n): ResolvedMetamodelPackage[] {\n const resolved = metamodelPackages.map(defineMetamodelPackage);\n ensureUniqueMetamodelIds(resolved);\n return resolved;\n}\n\nexport function collectMetamodelDocRows(\n packages: ResolvedMetamodelPackage[],\n kind: \"fieldRows\" | \"modelRows\" | \"effectRows\",\n): ManifestMetamodelDocRow[] {\n return packages.flatMap((pkg) => pkg.docs[kind] || []);\n}\n\nexport function collectMetamodelSummarySelections(\n packages: ResolvedMetamodelPackage[],\n) {\n const classFields: string[] = [];\n const propertyFields: string[] = [];\n const methodFields: string[] = [];\n\n for (const metamodelPackage of packages) {\n pushUnique(classFields, metamodelPackage.summary.selections?.classFields || []);\n pushUnique(\n propertyFields,\n metamodelPackage.summary.selections?.propertyFields || [],\n );\n pushUnique(methodFields, metamodelPackage.summary.selections?.methodFields || []);\n }\n\n return {\n classFields: unique(classFields),\n propertyFields: unique(propertyFields),\n methodFields: unique(methodFields),\n };\n}\n\nexport function applyMetamodelSummaryReadersToClass(\n packages: ResolvedMetamodelPackage[],\n rawClass: Record<string, any>,\n classSummary: DomainClassSummary,\n) {\n for (const metamodelPackage of packages) {\n const patch = metamodelPackage.summary.readClassSummary?.(rawClass);\n if (patch) {\n mergeClassSummaryPatch(classSummary, patch);\n }\n }\n\n return classSummary;\n}\n\nexport function applyMetamodelSummaryReadersToProperty(\n packages: ResolvedMetamodelPackage[],\n rawProperty: Record<string, any>,\n propertySummary: DomainPropertySummary,\n) {\n for (const metamodelPackage of packages) {\n const patch = metamodelPackage.summary.readPropertySummary?.(rawProperty);\n if (patch) {\n mergePropertySummaryPatch(propertySummary, patch);\n }\n }\n\n return propertySummary;\n}\n\nexport function applyMetamodelSummaryReadersToMethod(\n packages: ResolvedMetamodelPackage[],\n rawMethod: Record<string, any>,\n methodSummary: DomainMethodSummary,\n) {\n for (const metamodelPackage of packages) {\n const patch = metamodelPackage.summary.readMethodSummary?.(rawMethod);\n if (patch) {\n mergeMethodSummaryPatch(methodSummary, patch);\n }\n }\n\n return methodSummary;\n}\n\nexport function applyMetamodelPropertyIR(\n packages: ResolvedMetamodelPackage[],\n propertyIR: DomainPropertyIR,\n propertySummary: DomainPropertySummary,\n classSummary: DomainClassSummary,\n) {\n let current = propertyIR;\n\n for (const metamodelPackage of packages) {\n if (!metamodelPackage.domain.applyToPropertyIR) continue;\n current = metamodelPackage.domain.applyToPropertyIR(\n current,\n propertySummary,\n classSummary,\n );\n }\n\n return current;\n}\n\nexport function applyMetamodelClassIR(\n packages: ResolvedMetamodelPackage[],\n classIR: DomainClassIR,\n classSummary: DomainClassSummary,\n) {\n let current = classIR;\n\n for (const metamodelPackage of packages) {\n if (!metamodelPackage.domain.applyToClassIR) continue;\n current = metamodelPackage.domain.applyToClassIR(current, classSummary);\n }\n\n return current;\n}\n\nexport function applyMetamodelMethodIR(\n packages: ResolvedMetamodelPackage[],\n methodIR: DomainMethodIR,\n methodSummary: DomainMethodSummary,\n classSummary?: DomainClassSummary,\n) {\n let current = methodIR;\n\n for (const metamodelPackage of packages) {\n if (!metamodelPackage.domain.applyToMethodIR) continue;\n current = metamodelPackage.domain.applyToMethodIR(\n current,\n methodSummary,\n classSummary,\n );\n }\n\n return current;\n}\n\nexport function getMetamodelExtraTypesForClass(\n packages: ResolvedMetamodelPackage[],\n classSummary: DomainClassSummary,\n) {\n return packages.flatMap(\n (metamodelPackage) => metamodelPackage.domain.extraTypesForClass?.(classSummary) || [],\n );\n}\n\nexport function getMetamodelExtraMethodsForClass(\n packages: ResolvedMetamodelPackage[],\n classSummary: DomainClassSummary,\n) {\n return packages.flatMap(\n (metamodelPackage) => metamodelPackage.domain.extraMethodsForClass?.(classSummary) || [],\n );\n}\n\nfunction serializeGraphqlResolverFactorySource(source: string) {\n const trimmed = source.trim();\n if (\n trimmed.startsWith(\"function\") ||\n trimmed.startsWith(\"(\") ||\n trimmed.startsWith(\"async \") ||\n trimmed.startsWith(\"({\")\n ) {\n return trimmed;\n }\n\n if (/^[A-Za-z_$][\\w$]*\\s*\\(/.test(trimmed)) {\n return `function ${trimmed}`;\n }\n\n return trimmed;\n}\n\nexport function renderMetamodelGraphqlSnapshotSource(\n packages: ResolvedMetamodelPackage[],\n) {\n const typeDefs = packages.flatMap((pkg) => pkg.graphql.typeDefs || []);\n\n const factories = packages.flatMap((pkg) => {\n const factory = pkg.graphql.createResolvers;\n if (!factory) return [];\n return [`// ${pkg.id}\\n${serializeGraphqlResolverFactorySource(factory.toString())}`];\n });\n\n return `// @ts-nocheck\n// Auto-generated from per-metamodel GraphQL facets — DO NOT EDIT.\n// Run \\`bun run generate:metamodel-graphql\\` from the repo root to refresh.\n\nimport { Effect } from \"effect\";\nimport * as metamodels from \"./methods/metamodels\";\n\ntype ResolverMap = Record<string, Record<string, (parent: any, args: any) => any>>;\n\nconst METAMODEL_GRAPHQL_TYPEDEFS = ${JSON.stringify(typeDefs, null, 2)};\n\nconst METAMODEL_GRAPHQL_RESOLVER_FACTORIES = [\n${factories.map((factory) => ` (${factory}),`).join(\"\\n\")}\n];\n\nfunction mergeResolverMaps(resolverMaps: ResolverMap[]): ResolverMap {\n const merged: ResolverMap = {};\n\n for (const resolverMap of resolverMaps) {\n for (const [typeName, fieldResolvers] of Object.entries(resolverMap || {})) {\n if (!merged[typeName]) {\n merged[typeName] = {};\n }\n Object.assign(merged[typeName], fieldResolvers);\n }\n }\n\n return merged;\n}\n\nexport function getMetamodelGraphqlTypeDefs() {\n return METAMODEL_GRAPHQL_TYPEDEFS.join(\"\\\\n\\\\n\");\n}\n\nexport function getMetamodelGraphqlResolvers(): ResolverMap {\n const run = (effect: unknown) => Effect.runPromise(effect as any);\n\n return mergeResolverMaps(\n METAMODEL_GRAPHQL_RESOLVER_FACTORIES.map((createResolvers) =>\n createResolvers({\n run,\n stateMachines: {\n pathsToState: async (model: any, machineName: string, state: string) =>\n await metamodels.paths_to_state(model, machineName, state),\n instancesInState: async (model: any, machineName: string, state: string) =>\n await metamodels.instances_in_state(model, machineName, state),\n },\n }),\n ),\n );\n}\n`;\n}\n\nexport function createMetamodelRegistry(\n metamodelPackages: MetamodelPackage[],\n): MetamodelRegistry {\n const packages = resolveMetamodelPackages(metamodelPackages);\n\n return {\n packages,\n collectDocRows(kind) {\n return collectMetamodelDocRows(packages, kind);\n },\n getSummarySelections() {\n return collectMetamodelSummarySelections(packages);\n },\n applyClassSummaryReaders(rawClass, classSummary) {\n return applyMetamodelSummaryReadersToClass(packages, rawClass, classSummary);\n },\n applyPropertySummaryReaders(rawProperty, propertySummary) {\n return applyMetamodelSummaryReadersToProperty(\n packages,\n rawProperty,\n propertySummary,\n );\n },\n applyMethodSummaryReaders(rawMethod, methodSummary) {\n return applyMetamodelSummaryReadersToMethod(packages, rawMethod, methodSummary);\n },\n applyClassIR(classIR, classSummary) {\n return applyMetamodelClassIR(packages, classIR, classSummary);\n },\n applyPropertyIR(propertyIR, propertySummary, classSummary) {\n return applyMetamodelPropertyIR(\n packages,\n propertyIR,\n propertySummary,\n classSummary,\n );\n },\n applyMethodIR(methodIR, methodSummary, classSummary) {\n return applyMetamodelMethodIR(\n packages,\n methodIR,\n methodSummary,\n classSummary,\n );\n },\n getExtraTypesForClass(classSummary) {\n return getMetamodelExtraTypesForClass(packages, classSummary);\n },\n getExtraMethodsForClass(classSummary) {\n return getMetamodelExtraMethodsForClass(packages, classSummary);\n },\n };\n}\n\nexport function pushUnique(target: string[], values: Array<string | null | undefined>) {\n for (const value of values) {\n if (!value) continue;\n if (!target.includes(value)) target.push(value);\n }\n}\n\nexport function mergeClassSummaryPatch(\n target: DomainClassSummary,\n patch: Partial<DomainClassSummary>,\n) {\n pushUnique(target.notes, patch.notes || []);\n\n if (patch.stateMachines?.length) {\n for (const machine of patch.stateMachines) {\n const already = target.stateMachines.some(\n (existing) => existing.name === machine.name,\n );\n if (!already) target.stateMachines.push(machine);\n }\n }\n}\n\nexport function mergePropertySummaryPatch(\n target: DomainPropertySummary,\n patch: Partial<DomainPropertySummary>,\n) {\n pushUnique(target.notes, patch.notes || []);\n if (patch.required !== undefined) target.required = patch.required;\n if (patch.enumRule !== undefined) target.enumRule = patch.enumRule;\n if (patch.filterBy !== undefined) target.filterBy = patch.filterBy;\n if (patch.validationRules !== undefined) {\n target.validationRules = patch.validationRules;\n }\n}\n\nexport function mergeMethodSummaryPatch(\n target: DomainMethodSummary,\n patch: Partial<DomainMethodSummary>,\n) {\n if (patch.effectKey !== undefined) target.effectKey = patch.effectKey;\n if (patch.description !== undefined) target.description = patch.description;\n if (patch.inputSchema !== undefined) target.inputSchema = patch.inputSchema;\n if (patch.outputSchema !== undefined) target.outputSchema = patch.outputSchema;\n if (patch.metamodels !== undefined) target.metamodels = patch.metamodels;\n if (patch.effectBehaviors !== undefined) target.effectBehaviors = patch.effectBehaviors;\n if (patch.static !== undefined) target.static = patch.static;\n}\n\nexport function quoteTsStringLiteral(value: string) {\n return JSON.stringify(value);\n}\n\nexport function toPascalCase(value: string): string {\n return value\n .split(/[_:\\-\\s]+/)\n .filter(Boolean)\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n .join(\"\");\n}\n\nexport function normalizeNotesInput(input?: MetamodelNotesInput): string[] {\n if (!input) return [];\n return (Array.isArray(input) ? input : [input]).filter(\n (value): value is string => typeof value === \"string\" && value.length > 0,\n );\n}\n\nexport {\n EffectMetamodelSchema,\n EnumRuleSchema,\n FilterBySchema,\n NoteSchema,\n StateMachineSchema,\n StateMachineStateSchema,\n StateMachineTransitionSchema,\n ValidationRuleSchema,\n} from \"./manifest-zod\";\n","import type {\n EffectMetamodelManifestSpec,\n DomainEffectBehaviorsSummary,\n DomainMethodIR,\n DomainMethodSummary,\n} from \"@granular-software/metamodel-core\";\nimport { defineMetamodelPackage } from \"@granular-software/metamodel-core\";\n\nfunction isObject(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nexport function normalizeEffectBehaviorSummary(\n metamodels?: Record<string, unknown> | null,\n): DomainEffectBehaviorsSummary | null {\n if (!isObject(metamodels)) {\n return null;\n }\n\n const result: DomainEffectBehaviorsSummary = {};\n\n const rawPostCondition = metamodels.postCondition;\n if (typeof rawPostCondition === \"string\" && rawPostCondition.trim().length > 0) {\n result.postCondition = { condition: rawPostCondition.trim() };\n } else if (\n isObject(rawPostCondition) &&\n typeof rawPostCondition.condition === \"string\" &&\n rawPostCondition.condition.trim().length > 0\n ) {\n result.postCondition = {\n condition: rawPostCondition.condition.trim(),\n ...(typeof rawPostCondition.description === \"string\"\n ? { description: rawPostCondition.description }\n : {}),\n };\n }\n\n const rawDryRun = metamodels.dryRun;\n if (typeof rawDryRun === \"boolean\") {\n result.dryRun = { enabled: rawDryRun };\n } else if (isObject(rawDryRun)) {\n result.dryRun = {\n enabled: rawDryRun.enabled !== false,\n ...(typeof rawDryRun.description === \"string\"\n ? { description: rawDryRun.description }\n : {}),\n };\n }\n\n const rawReverse = metamodels.reverse;\n if (typeof rawReverse === \"string\" && rawReverse.trim().length > 0) {\n result.reverse = { handler: rawReverse.trim() };\n } else if (isObject(rawReverse)) {\n result.reverse = {\n ...(typeof rawReverse.handler === \"string\" && rawReverse.handler.trim().length > 0\n ? { handler: rawReverse.handler.trim() }\n : {}),\n ...(typeof rawReverse.description === \"string\"\n ? { description: rawReverse.description }\n : {}),\n };\n }\n\n const rawApprovalRequired = metamodels.approvalRequired;\n if (typeof rawApprovalRequired === \"boolean\") {\n result.approvalRequired = { required: rawApprovalRequired };\n } else if (isObject(rawApprovalRequired)) {\n result.approvalRequired = {\n required: rawApprovalRequired.required !== false,\n ...(typeof rawApprovalRequired.reason === \"string\"\n ? { reason: rawApprovalRequired.reason }\n : {}),\n ...(typeof rawApprovalRequired.mode === \"string\"\n ? { mode: rawApprovalRequired.mode }\n : {}),\n };\n }\n\n return Object.keys(result).length > 0 ? result : null;\n}\n\nexport function buildEffectBehaviorDocs(\n effectBehaviors?: DomainEffectBehaviorsSummary | null,\n): string[] {\n if (!effectBehaviors) {\n return [];\n }\n\n const docs: string[] = [];\n\n if (effectBehaviors.approvalRequired?.required) {\n docs.push(\n effectBehaviors.approvalRequired.reason\n ? `Approval required: ${effectBehaviors.approvalRequired.reason}.`\n : \"Approval required before execution.\",\n );\n }\n\n if (effectBehaviors.postCondition) {\n docs.push(`Post-condition: ${effectBehaviors.postCondition.condition}.`);\n if (effectBehaviors.postCondition.description) {\n docs.push(effectBehaviors.postCondition.description);\n }\n }\n\n if (effectBehaviors.dryRun?.enabled) {\n docs.push(\"Supports dry run.\");\n if (effectBehaviors.dryRun.description) {\n docs.push(effectBehaviors.dryRun.description);\n }\n }\n\n if (effectBehaviors.reverse) {\n if (effectBehaviors.reverse.handler) {\n docs.push(`Reverse handler: ${effectBehaviors.reverse.handler}.`);\n } else {\n docs.push(\"Supports reverse execution.\");\n }\n if (effectBehaviors.reverse.description) {\n docs.push(effectBehaviors.reverse.description);\n }\n }\n\n return docs;\n}\n\nexport function buildEffectBehaviorMutations(\n toolPath: string,\n spec?: EffectMetamodelManifestSpec,\n) {\n if (!spec) return [];\n\n const mutations: Array<{ label: string; query: string }> = [];\n\n if (spec.postCondition) {\n const config =\n typeof spec.postCondition === \"string\"\n ? { condition: spec.postCondition }\n : spec.postCondition;\n const descriptionArg = config.description\n ? `, description: ${JSON.stringify(config.description)}`\n : \"\";\n mutations.push({\n label: `set postCondition on ${toolPath}`,\n query: `mutation { at(path: ${JSON.stringify(toolPath)}) { set_post_condition(condition: ${JSON.stringify(\n config.condition,\n )}${descriptionArg}) { kind } } }`,\n });\n }\n\n if (spec.dryRun !== undefined) {\n const config =\n typeof spec.dryRun === \"boolean\" ? { enabled: spec.dryRun } : spec.dryRun;\n const args = [\n config.enabled !== undefined ? `enabled: ${config.enabled}` : null,\n config.description ? `description: ${JSON.stringify(config.description)}` : null,\n ]\n .filter(Boolean)\n .join(\", \");\n mutations.push({\n label: `set dryRun on ${toolPath}`,\n query: `mutation { at(path: ${JSON.stringify(toolPath)}) { set_dry_run(${args}) { kind } } }`,\n });\n }\n\n if (spec.reverse !== undefined) {\n const config =\n typeof spec.reverse === \"string\" ? { handler: spec.reverse } : spec.reverse;\n const args = [\n config.handler ? `handler: ${JSON.stringify(config.handler)}` : null,\n config.description ? `description: ${JSON.stringify(config.description)}` : null,\n ]\n .filter(Boolean)\n .join(\", \");\n mutations.push({\n label: `set reverse on ${toolPath}`,\n query: `mutation { at(path: ${JSON.stringify(toolPath)}) { set_reverse(${args}) { kind } } }`,\n });\n }\n\n if (spec.approvalRequired !== undefined) {\n const config =\n typeof spec.approvalRequired === \"boolean\"\n ? { required: spec.approvalRequired }\n : spec.approvalRequired;\n const args = [\n config.required !== undefined ? `required: ${config.required}` : null,\n config.reason ? `reason: ${JSON.stringify(config.reason)}` : null,\n config.mode ? `mode: ${JSON.stringify(config.mode)}` : null,\n ]\n .filter(Boolean)\n .join(\", \");\n mutations.push({\n label: `set approvalRequired on ${toolPath}`,\n query: `mutation { at(path: ${JSON.stringify(toolPath)}) { set_approval_required(${args}) { kind } } }`,\n });\n }\n\n return mutations;\n}\n\nexport function readMethodEffectBehaviors(\n rawMethod: Record<string, any>,\n): Partial<DomainMethodSummary> {\n return {\n effectBehaviors: normalizeEffectBehaviorSummary(\n isObject(rawMethod.metamodels) ? rawMethod.metamodels : null,\n ),\n };\n}\n\nexport const effectBehaviorsMetamodelPackage = defineMetamodelPackage({\n id: \"effect_behaviors\",\n docs: {\n effectRows: [\n {\n key: \"postCondition\",\n description: \"String condition or `{ condition, description }`.\",\n },\n {\n key: \"dryRun\",\n description: \"Boolean or `{ enabled, description }`.\",\n },\n {\n key: \"reverse\",\n description: \"Handler name string or `{ handler, description }`.\",\n },\n {\n key: \"approvalRequired\",\n description: \"Boolean or `{ required, reason, mode }`.\",\n },\n ],\n },\n graphql: {\n typeDefs: [\n `\n type EffectBehaviorMetamodel {\n model: Model!\n kind: String!\n condition: String\n description: String\n handler: String\n reason: String\n mode: String\n required: Boolean\n enabled: Boolean\n }\n\n extend type Model {\n effect_behaviors: [EffectBehaviorMetamodel!]!\n }\n\n extend type ModelMutation {\n set_post_condition(condition: String!, description: String): EffectBehaviorMetamodel\n set_dry_run(enabled: Boolean, description: String): EffectBehaviorMetamodel\n set_reverse(handler: String, description: String): EffectBehaviorMetamodel\n set_approval_required(required: Boolean, reason: String, mode: String): EffectBehaviorMetamodel\n }\n `,\n ],\n createResolvers({ run }) {\n return {\n EffectBehaviorMetamodel: {\n model: (value) => value.model,\n kind: (value) => value.kind,\n condition: (value) => value.condition || null,\n description: (value) => value.description || null,\n handler: (value) => value.handler || null,\n reason: (value) => value.reason || null,\n mode: (value) => value.mode || null,\n required: (value) => value.required ?? null,\n enabled: (value) => value.enabled ?? null,\n },\n Model: {\n effect_behaviors: async (ant) => await run(ant.effect_behaviors()),\n },\n ModelMutation: {\n set_post_condition: async (ant, { condition, description }) => {\n const model = await run(\n ant.set_effect_behavior({\n kind: \"post_condition\",\n condition,\n description,\n }),\n );\n return { model, kind: \"post_condition\", condition, description };\n },\n set_dry_run: async (ant, { enabled, description }) => {\n const finalEnabled = enabled ?? true;\n const model = await run(\n ant.set_effect_behavior({\n kind: \"dry_run\",\n enabled: finalEnabled,\n description,\n }),\n );\n return { model, kind: \"dry_run\", enabled: finalEnabled, description };\n },\n set_reverse: async (ant, { handler, description }) => {\n const model = await run(\n ant.set_effect_behavior({\n kind: \"reverse\",\n handler,\n description,\n }),\n );\n return { model, kind: \"reverse\", handler, description };\n },\n set_approval_required: async (ant, { required, reason, mode }) => {\n const finalRequired = required ?? true;\n const model = await run(\n ant.set_effect_behavior({\n kind: \"approval_required\",\n required: finalRequired,\n reason,\n mode,\n }),\n );\n return {\n model,\n kind: \"approval_required\",\n required: finalRequired,\n reason,\n mode,\n };\n },\n },\n };\n },\n },\n manifest: {\n buildEffectMutations(toolPath, spec) {\n return buildEffectBehaviorMutations(toolPath, spec);\n },\n },\n summary: {\n readMethodSummary: readMethodEffectBehaviors,\n },\n domain: {\n applyToMethodIR(\n methodIR: DomainMethodIR,\n methodSummary: DomainMethodSummary,\n ) {\n return {\n ...methodIR,\n docs: [...methodIR.docs, ...buildEffectBehaviorDocs(methodSummary.effectBehaviors)],\n };\n },\n },\n});\n","import { normalizeEffectBehaviorSummary } from '@granular-software/metamodel-effect-behaviors';\nimport type {\n EffectHandlerContext,\n EffectInvocationMode,\n ManifestEffectMetamodelSpec,\n ResolvedEffectBehaviors,\n ToolWithHandler,\n} from './types';\n\ntype EffectRuntimeRequest = {\n effectKey: string;\n effectName: string;\n input: unknown;\n context?: EffectHandlerContext;\n};\n\ntype ResolvedHandler = {\n effect: ToolWithHandler;\n mode: EffectInvocationMode;\n handler: ToolWithHandler['handler'];\n};\n\nfunction computeEffectKey(effect: {\n name: string;\n className?: string | null;\n static?: boolean;\n}): string {\n const attachedClass = effect.className?.trim();\n if (!attachedClass) {\n return `global:${effect.name}`;\n }\n return effect.static\n ? `class:${attachedClass}:static:${effect.name}`\n : `class:${attachedClass}:instance:${effect.name}`;\n}\n\nexport function normalizeEffectBehaviors(\n value?: ManifestEffectMetamodelSpec | ResolvedEffectBehaviors | null,\n): ResolvedEffectBehaviors {\n return (normalizeEffectBehaviorSummary(\n value as Record<string, unknown> | null | undefined,\n ) || {}) as ResolvedEffectBehaviors;\n}\n\nfunction resolveInvocationMode(context?: EffectHandlerContext): EffectInvocationMode {\n const mode = context?.invocation?.mode;\n if (mode === 'dryRun' || mode === 'reverse') {\n return mode;\n }\n return 'execute';\n}\n\nfunction resolveReverseEffect(\n effectMap: Map<string, ToolWithHandler>,\n currentEffect: ToolWithHandler,\n request: EffectRuntimeRequest,\n behaviors: ResolvedEffectBehaviors,\n): ToolWithHandler | undefined {\n const explicitReverseHandler = request.context?.invocation?.reverseHandler?.trim();\n const configuredReverseHandler = behaviors.reverse?.handler?.trim();\n const reverseHandler = explicitReverseHandler || configuredReverseHandler;\n if (!reverseHandler) {\n return undefined;\n }\n\n if (reverseHandler.includes(':')) {\n return effectMap.get(reverseHandler);\n }\n\n const directMatch = effectMap.get(reverseHandler);\n if (directMatch) {\n return directMatch;\n }\n\n const candidateKeys = [\n computeEffectKey({\n name: reverseHandler,\n className: currentEffect.className,\n static: currentEffect.static,\n }),\n computeEffectKey({\n name: reverseHandler,\n }),\n ];\n\n for (const candidateKey of candidateKeys) {\n const candidate = effectMap.get(candidateKey);\n if (candidate) {\n return candidate;\n }\n }\n\n return undefined;\n}\n\nfunction resolveHandlerForMode(\n effectMap: Map<string, ToolWithHandler>,\n effect: ToolWithHandler,\n request: EffectRuntimeRequest,\n): ResolvedHandler {\n const behaviors = normalizeEffectBehaviors(request.context?.behaviors || effect.metamodels || undefined);\n const mode = resolveInvocationMode(request.context);\n\n if (mode === 'dryRun') {\n if (effect.dryRunHandler) {\n return { effect, mode, handler: effect.dryRunHandler };\n }\n if (behaviors.dryRun?.enabled) {\n return { effect, mode, handler: effect.handler };\n }\n throw new Error(`Dry run is not supported for ${request.effectKey}`);\n }\n\n if (mode === 'reverse') {\n if (effect.reverseHandler) {\n return { effect, mode, handler: effect.reverseHandler };\n }\n\n const reverseEffect = resolveReverseEffect(effectMap, effect, request, behaviors);\n if (reverseEffect) {\n return {\n effect: reverseEffect,\n mode,\n handler: reverseEffect.reverseHandler || reverseEffect.handler,\n };\n }\n\n throw new Error(`Reverse execution is not supported for ${request.effectKey}`);\n }\n\n return { effect, mode, handler: effect.handler };\n}\n\nexport async function invokeRegisteredEffect(\n effectMap: Map<string, ToolWithHandler>,\n request: EffectRuntimeRequest,\n): Promise<unknown> {\n const effect = effectMap.get(request.effectKey);\n if (!effect) {\n throw new Error(`Effect handler not found: ${request.effectKey}`);\n }\n\n const resolved = resolveHandlerForMode(effectMap, effect, request);\n const context: EffectHandlerContext = {\n ...(request.context || {}),\n behaviors: normalizeEffectBehaviors(request.context?.behaviors || effect.metamodels || undefined),\n invocation: {\n mode: resolved.mode,\n sourceEffectKey: request.effectKey,\n sourceEffectName: request.effectName,\n ...(request.context?.invocation?.reverseHandler\n ? { reverseHandler: request.context.invocation.reverseHandler }\n : {}),\n },\n } as EffectHandlerContext;\n\n if (\n resolved.effect.className &&\n !resolved.effect.static &&\n request.input &&\n typeof request.input === 'object' &&\n '_objectId' in (request.input as Record<string, unknown>)\n ) {\n const { _objectId, ...rest } = request.input as Record<string, unknown> & { _objectId: string };\n return (resolved.handler as any)(_objectId, rest, context);\n }\n\n return (resolved.handler as any)(request.input, context);\n}\n","import type {\n DomainPropertySummary,\n DomainPropertyIR,\n ManifestEnumRuleInput,\n} from \"@granular-software/metamodel-core\";\nimport { defineMetamodelPackage } from \"@granular-software/metamodel-core\";\n\nfunction renderInlineStringUnion(values: string[]) {\n return values.map((value) => JSON.stringify(value)).join(\" | \");\n}\n\nfunction normalizeEnumInput(enumSpec?: string[] | ManifestEnumRuleInput) {\n if (!enumSpec) return null;\n const config = Array.isArray(enumSpec) ? { values: enumSpec } : enumSpec;\n const values = (config.values || []).filter(\n (value): value is string => typeof value === \"string\" && value.length > 0,\n );\n if (values.length === 0) return null;\n return config.message ? { values, message: config.message } : { values };\n}\n\nexport function buildEnumFieldMutations(\n fieldPath: string,\n enumSpec?: string[] | ManifestEnumRuleInput,\n) {\n const normalized = normalizeEnumInput(enumSpec);\n if (!normalized) return [];\n\n const messageArg = normalized.message\n ? `, message: ${JSON.stringify(normalized.message)}`\n : \"\";\n\n return [\n {\n label: `set enum on ${fieldPath}`,\n query: `mutation { at(path: ${JSON.stringify(fieldPath)}) { set_enum(values: ${JSON.stringify(\n normalized.values,\n )}${messageArg}) { values } } }`,\n },\n ];\n}\n\nexport const enumMetamodelPackage = defineMetamodelPackage({\n id: \"enum\",\n docs: {\n fieldRows: [\n {\n key: \"enum\",\n description:\n 'Allowed values. Accepts `[\"a\", \"b\"]` or `{ \"values\": [...], \"message\": \"...\" }`.',\n },\n ],\n },\n graphql: {\n typeDefs: [\n `\n type EnumMetamodel {\n model: Model!\n values: [String!]!\n message: String\n }\n\n extend type Model {\n enum_rule: EnumMetamodel\n }\n\n extend type ModelMutation {\n set_enum(values: [String!]!, message: String): EnumMetamodel\n }\n `,\n ],\n createResolvers({ run }) {\n return {\n EnumMetamodel: {\n model: (value) => value.model,\n values: (value) => value.values,\n message: (value) => value.message || null,\n },\n Model: {\n enum_rule: async (ant) => await run(ant.enum_rule()),\n },\n ModelMutation: {\n set_enum: async (ant, { values, message }) => {\n const model = await run(ant.set_enum(values, message));\n return { model, values, message };\n },\n },\n };\n },\n },\n manifest: {\n buildFieldMutations(fieldPath, spec) {\n return buildEnumFieldMutations(fieldPath, spec.enum);\n },\n },\n summary: {\n selections: {\n propertyFields: [`enum_rule { values message }`],\n },\n readPropertySummary(rawProperty) {\n const values = Array.isArray(rawProperty.enum_rule?.values)\n ? rawProperty.enum_rule.values.filter(\n (value: unknown): value is string =>\n typeof value === \"string\" && value.length > 0,\n )\n : [];\n if (values.length === 0) return { enumRule: null };\n const message =\n typeof rawProperty.enum_rule?.message === \"string\"\n ? rawProperty.enum_rule.message\n : null;\n return {\n enumRule: message ? { values, message } : { values },\n };\n },\n },\n domain: {\n applyToPropertyIR(\n propertyIR: DomainPropertyIR,\n propertySummary: DomainPropertySummary,\n ) {\n const values = propertySummary.enumRule?.values || [];\n if (values.length === 0) return propertyIR;\n\n return {\n ...propertyIR,\n type: renderInlineStringUnion(values),\n docs: [\n ...propertyIR.docs,\n `Allowed values: ${values.join(\", \")}.`,\n ...(propertySummary.enumRule?.message ? [propertySummary.enumRule.message] : []),\n ],\n };\n },\n },\n});\n","import type {\n DomainPropertySummary,\n DomainPropertyIR,\n ManifestFilterByInput,\n} from \"@granular-software/metamodel-core\";\nimport { defineMetamodelPackage } from \"@granular-software/metamodel-core\";\n\nexport function defaultFilterOperators(scalarType?: string): string[] {\n switch ((scalarType || \"\").toLowerCase()) {\n case \"number\":\n case \"date\":\n return [\"equal_to\", \"greater_than\", \"less_than\", \"not_null\"];\n case \"boolean\":\n return [\"equal_to\", \"not_null\"];\n default:\n return [\n \"equal_to\",\n \"contains\",\n \"not_contains\",\n \"starts_with\",\n \"ends_with\",\n \"not_null\",\n ];\n }\n}\n\nfunction normalizeFilterByInput(\n filterBy?: boolean | string[] | ManifestFilterByInput,\n scalarType?: string,\n) {\n if (!filterBy) return null;\n if (filterBy === true) {\n return { operators: defaultFilterOperators(scalarType) };\n }\n if (Array.isArray(filterBy)) {\n return { operators: filterBy };\n }\n return {\n operators: filterBy.operators,\n };\n}\n\nexport function buildFilterByFieldMutations(\n fieldPath: string,\n filterBy?: boolean | string[] | ManifestFilterByInput,\n scalarType?: string,\n) {\n const normalized = normalizeFilterByInput(filterBy, scalarType);\n if (!normalized || normalized.operators.length === 0) return [];\n\n return [\n {\n label: `set filterBy on ${fieldPath}`,\n query: `mutation { at(path: ${JSON.stringify(fieldPath)}) { set_filter_by(operators: ${JSON.stringify(\n normalized.operators,\n )}) { operators } } }`,\n },\n ];\n}\n\nexport const filterByMetamodelPackage = defineMetamodelPackage({\n id: \"filter_by\",\n docs: {\n fieldRows: [\n {\n key: \"filterBy\",\n description:\n \"Exposes filter operators for generated query surfaces. Accepts `true`, an operator array, or `{ operators, scalarType }`.\",\n },\n ],\n },\n graphql: {\n typeDefs: [\n `\n type FilterByMetamodel {\n model: Model!\n scalar_type: String\n operators: [String!]!\n }\n\n extend type Model {\n filter_by: FilterByMetamodel\n }\n\n extend type ModelMutation {\n set_filter_by(operators: [String!]!, scalar_type: String): FilterByMetamodel\n }\n `,\n ],\n createResolvers({ run }) {\n return {\n FilterByMetamodel: {\n model: (value) => value.model,\n scalar_type: (value) => value.scalar_type || null,\n operators: (value) => value.operators,\n },\n Model: {\n filter_by: async (ant) => await run(ant.filter_by()),\n },\n ModelMutation: {\n set_filter_by: async (ant, { operators, scalar_type }) => {\n const model = await run(ant.set_filter_by(operators, scalar_type));\n return { model, operators, scalar_type };\n },\n },\n };\n },\n },\n manifest: {\n buildFieldMutations(fieldPath, spec) {\n return buildFilterByFieldMutations(fieldPath, spec.filterBy, spec.type);\n },\n },\n summary: {\n selections: {\n propertyFields: [`filter_by { scalar_type operators }`],\n },\n readPropertySummary(rawProperty) {\n const operators = Array.isArray(rawProperty.filter_by?.operators)\n ? rawProperty.filter_by.operators.filter(\n (value: unknown): value is string =>\n typeof value === \"string\" && value.length > 0,\n )\n : [];\n if (operators.length === 0) return { filterBy: null };\n const scalarType =\n typeof rawProperty.filter_by?.scalar_type === \"string\"\n ? rawProperty.filter_by.scalar_type\n : null;\n return {\n filterBy: scalarType ? { operators, scalarType } : { operators },\n };\n },\n },\n domain: {\n applyToPropertyIR(\n propertyIR: DomainPropertyIR,\n propertySummary: DomainPropertySummary,\n ) {\n const operators = propertySummary.filterBy?.operators || [];\n if (operators.length === 0) return propertyIR;\n\n return {\n ...propertyIR,\n docs: [\n ...propertyIR.docs,\n `Filter operators: ${operators.join(\", \")}.`,\n ],\n };\n },\n },\n});\n","import type {\n DomainClassSummary,\n DomainPropertySummary,\n DomainPropertyIR,\n MetamodelGraphqlMutation,\n MetamodelNotesInput,\n} from \"@granular-software/metamodel-core\";\nimport {\n defineMetamodelPackage,\n normalizeNotesInput,\n} from \"@granular-software/metamodel-core\";\n\nfunction noteTexts(values: Array<{ text?: string | null }> | null | undefined) {\n return (values || [])\n .map((item) => item?.text)\n .filter((value): value is string => typeof value === \"string\" && value.length > 0);\n}\n\nfunction buildNoteMutations(\n targetPath: string,\n notes?: MetamodelNotesInput,\n): MetamodelGraphqlMutation[] {\n return normalizeNotesInput(notes).map((note) => ({\n label: `add note on ${targetPath}`,\n query: `mutation { at(path: ${JSON.stringify(targetPath)}) { add_note(text: ${JSON.stringify(\n note,\n )}) { text } } }`,\n }));\n}\n\nexport function buildFieldNoteMutations(\n fieldPath: string,\n notes?: MetamodelNotesInput,\n) {\n return buildNoteMutations(fieldPath, notes);\n}\n\nexport function buildModelNoteMutations(\n modelPath: string,\n notes?: MetamodelNotesInput,\n) {\n return buildNoteMutations(modelPath, notes);\n}\n\nexport function readClassNotes(rawClass: Record<string, any>): Partial<DomainClassSummary> {\n return {\n notes: noteTexts(rawClass.notes),\n };\n}\n\nexport function readPropertyNotes(\n rawProperty: Record<string, any>,\n): Partial<DomainPropertySummary> {\n return {\n notes: noteTexts(rawProperty.notes),\n };\n}\n\nexport const noteMetamodelPackage = defineMetamodelPackage({\n id: \"note\",\n docs: {\n fieldRows: [\n { key: \"note\", description: \"Advisory text attached to a field. Accepts a string or string array.\" },\n ],\n modelRows: [\n { key: \"note\", description: \"Advisory text on the class/model itself.\" },\n ],\n },\n graphql: {\n typeDefs: [\n `\n type NoteMetamodel {\n model: Model!\n text: String!\n }\n\n extend type Model {\n notes: [NoteMetamodel!]!\n }\n\n extend type ModelMutation {\n add_note(text: String!): NoteMetamodel\n }\n `,\n ],\n createResolvers({ run }) {\n return {\n NoteMetamodel: {\n model: (value) => value.model,\n text: (value) => value.text,\n },\n Model: {\n notes: async (ant) => await run(ant.notes()),\n },\n ModelMutation: {\n add_note: async (ant, { text }) => {\n const model = await run(ant.add_note(text));\n return { model, text };\n },\n },\n };\n },\n },\n manifest: {\n buildFieldMutations(fieldPath, spec) {\n return buildFieldNoteMutations(fieldPath, spec.note);\n },\n buildModelMutations(modelPath, spec) {\n return buildModelNoteMutations(modelPath, spec.note);\n },\n },\n summary: {\n selections: {\n classFields: [`notes { text }`],\n propertyFields: [`notes { text }`],\n },\n readClassSummary: readClassNotes,\n readPropertySummary: readPropertyNotes,\n },\n domain: {\n applyToClassIR(classIR) {\n return {\n ...classIR,\n docs: [...classIR.docs, ...(classIR.source.notes || [])],\n };\n },\n applyToPropertyIR(\n propertyIR: DomainPropertyIR,\n propertySummary: DomainPropertySummary,\n ) {\n return {\n ...propertyIR,\n docs: [...propertyIR.docs, ...(propertySummary.notes || [])],\n };\n },\n },\n});\n","import type { DomainPropertySummary, DomainPropertyIR } from \"@granular-software/metamodel-core\";\nimport { defineMetamodelPackage } from \"@granular-software/metamodel-core\";\n\nexport function buildRequiredFieldMutations(fieldPath: string, required?: boolean) {\n\tif (!required) return [];\n\treturn [\n\t\t{\n\t\t\tlabel: `set required on ${fieldPath}`,\n\t\t\tquery: `mutation { \n at(path: ${JSON.stringify(fieldPath)}) { \n set_required {\n model { path }\n }\n }\n }`,\n\t\t},\n\t];\n}\n\nexport const requiredMetamodelPackage = defineMetamodelPackage({\n\tid: \"required\",\n\tdocs: {\n\t\tfieldRows: [{ key: \"required\", description: \"Marks the field as required.\" }],\n\t},\n\tgraphql: {\n\t\ttypeDefs: [\n\t\t\t`\n type RequiredMetamodel {\n model: Model!\n message: String\n }\n\n extend type Model {\n required_rule: RequiredMetamodel\n }\n\n extend type ModelMutation {\n set_required(message: String): RequiredMetamodel\n }\n `,\n\t\t],\n\t\tcreateResolvers({ run }) {\n\t\t\treturn {\n\t\t\t\tRequiredMetamodel: {\n\t\t\t\t\tmodel: (value) => value.model,\n\t\t\t\t\tmessage: (value) => value.message || null,\n\t\t\t\t},\n\t\t\t\tModel: {\n\t\t\t\t\trequired_rule: async (ant) => await run(ant.required_rule()),\n\t\t\t\t},\n\t\t\t\tModelMutation: {\n\t\t\t\t\tset_required: async (ant, { message }) => {\n\t\t\t\t\t\tconst model = await run(ant.set_required(message));\n\t\t\t\t\t\treturn { model, message };\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t};\n\t\t},\n\t},\n\tmanifest: {\n\t\tbuildFieldMutations(fieldPath, spec) {\n\t\t\treturn buildRequiredFieldMutations(fieldPath, spec.required);\n\t\t},\n\t},\n\tsummary: {\n\t\tselections: {\n\t\t\tpropertyFields: [`required_rule { message }`],\n\t\t},\n\t\treadPropertySummary(rawProperty) {\n\t\t\tif (!rawProperty.required_rule) {\n\t\t\t\treturn { required: null };\n\t\t\t}\n\n\t\t\treturn typeof rawProperty.required_rule.message === \"string\" ? { required: { message: rawProperty.required_rule.message } } : { required: {} };\n\t\t},\n\t},\n\tdomain: {\n\t\tapplyToPropertyIR(propertyIR: DomainPropertyIR, propertySummary: DomainPropertySummary) {\n\t\t\tif (!propertySummary.required) return propertyIR;\n\n\t\t\treturn {\n\t\t\t\t...propertyIR,\n\t\t\t\tdocs: [...propertyIR.docs, propertySummary.required.message || \"Required.\"],\n\t\t\t};\n\t\t},\n\t},\n});\n","import type {\n DomainClassSummary,\n DomainMethodIR,\n ManifestStateMachineInput,\n MetamodelGraphqlMutation,\n DomainStateMachineSummary,\n DomainTypeIR,\n} from \"@granular-software/metamodel-core\";\nimport {\n defineMetamodelPackage,\n quoteTsStringLiteral,\n toPascalCase,\n} from \"@granular-software/metamodel-core\";\n\nfunction normalizeStateMachines(\n values: Array<Record<string, any>> | null | undefined,\n): DomainStateMachineSummary[] {\n return (values || [])\n .map((machine) => {\n const states = (machine?.states || [])\n .map((state: Record<string, any>) => ({\n name: String(state?.name || \"\"),\n isFinal: Boolean(state?.is_final),\n }))\n .filter((state: { name: string }) => state.name.length > 0);\n\n const transitions = (machine?.transitions || [])\n .map((transition: Record<string, any>) => ({\n name: String(transition?.name || \"\"),\n from: String(transition?.from?.name || \"\"),\n to: String(transition?.to?.name || \"\"),\n }))\n .filter(\n (transition: { name: string; from: string; to: string }) =>\n transition.name.length > 0 &&\n transition.from.length > 0 &&\n transition.to.length > 0,\n );\n\n return {\n name: String(machine?.name || \"\"),\n entryState:\n typeof machine?.entry_state?.name === \"string\"\n ? machine.entry_state.name\n : null,\n finalStates: states\n .filter((state: { isFinal: boolean }) => state.isFinal)\n .map((state: { name: string }) => state.name),\n states,\n transitions,\n } satisfies DomainStateMachineSummary;\n })\n .filter((machine) => machine.name.length > 0);\n}\n\nfunction stateTypeName(className: string, machineName: string) {\n return `${toPascalCase(className)}${toPascalCase(machineName)}`;\n}\n\nfunction transitionTypeName(className: string, machineName: string) {\n return `${stateTypeName(className, machineName)}Transition`;\n}\n\nfunction pathTypeName(className: string, machineName: string) {\n return `${stateTypeName(className, machineName)}Path`;\n}\n\nfunction normalizeStateDefinitions(machine: ManifestStateMachineInput) {\n const finalStates = new Set(machine.finalStates || []);\n const states = new Map<string, { name: string; isFinal: boolean }>();\n\n for (const rawState of machine.states || []) {\n if (typeof rawState === \"string\") {\n states.set(rawState, { name: rawState, isFinal: finalStates.has(rawState) });\n continue;\n }\n\n states.set(rawState.name, {\n name: rawState.name,\n isFinal: Boolean(rawState.isFinal) || finalStates.has(rawState.name),\n });\n }\n\n if (!states.has(machine.entryState)) {\n states.set(machine.entryState, {\n name: machine.entryState,\n isFinal: finalStates.has(machine.entryState),\n });\n }\n\n return [...states.values()];\n}\n\nexport function buildStateMachineModelMutations(\n modelPath: string,\n machines?: ManifestStateMachineInput[],\n): MetamodelGraphqlMutation[] {\n const mutations: MetamodelGraphqlMutation[] = [];\n\n for (const machine of machines || []) {\n mutations.push({\n label: `create state machine ${modelPath}.${machine.name}`,\n query: `mutation { at(path: ${JSON.stringify(modelPath)}) { create_state_machine(name: ${JSON.stringify(\n machine.name,\n )}, entry_state: ${JSON.stringify(machine.entryState)}) { name } } }`,\n });\n\n for (const state of normalizeStateDefinitions(machine)) {\n if (state.name === machine.entryState && !state.isFinal) continue;\n mutations.push({\n label: `add state ${state.name} on ${modelPath}.${machine.name}`,\n query: `mutation { at(path: ${JSON.stringify(modelPath)}) { state_machine(name: ${JSON.stringify(\n machine.name,\n )}) { add_state(name: ${JSON.stringify(state.name)}, is_final: ${state.isFinal}) { name } } } }`,\n });\n }\n\n for (const transition of machine.transitions || []) {\n mutations.push({\n label: `add transition ${transition.name} on ${modelPath}.${machine.name}`,\n query: `mutation { at(path: ${JSON.stringify(modelPath)}) { state_machine(name: ${JSON.stringify(\n machine.name,\n )}) { add_transition(name: ${JSON.stringify(\n transition.name,\n )}, from: ${JSON.stringify(transition.from)}, to: ${JSON.stringify(\n transition.to,\n )}) { name } } } }`,\n });\n }\n }\n\n return mutations;\n}\n\nfunction buildMachineTypes(\n classSummary: DomainClassSummary,\n machine: DomainStateMachineSummary,\n): DomainTypeIR[] {\n return [\n {\n kind: \"union\",\n name: stateTypeName(classSummary.name, machine.name),\n docs: [`Allowed states for ${classSummary.name}.${machine.name}.`],\n members: machine.states.map((state) => state.name),\n },\n {\n kind: \"union\",\n name: transitionTypeName(classSummary.name, machine.name),\n docs: [`Allowed transitions for ${classSummary.name}.${machine.name}.`],\n members: machine.transitions.map((transition) => transition.name),\n },\n ];\n}\n\nfunction buildMachineMethods(\n classSummary: DomainClassSummary,\n machine: DomainStateMachineSummary,\n): DomainMethodIR[] {\n const stateName = stateTypeName(classSummary.name, machine.name);\n const transitionName = transitionTypeName(classSummary.name, machine.name);\n const pathName = pathTypeName(classSummary.name, machine.name);\n\n const docsPrefix = `${classSummary.name}.${machine.name}`;\n\n return [\n {\n name: `get_${machine.name}`,\n docs: [`Get the current ${docsPrefix} state.`],\n static: false,\n params: [],\n returnType: `Promise<${stateName} | null>`,\n runtime: {\n kind: \"state_machine\",\n machineName: machine.name,\n className: classSummary.name,\n stateTypeName: stateName,\n transitionTypeName: transitionName,\n operation: \"get_current\",\n },\n },\n {\n name: `reach_${machine.name}`,\n docs: [`Reach a ${docsPrefix} state through the shortest allowed transition path.`],\n static: false,\n params: [{ name: \"target\", type: stateName }],\n returnType: `Promise<${toPascalCase(classSummary.name)}>`,\n runtime: {\n kind: \"state_machine\",\n machineName: machine.name,\n className: classSummary.name,\n stateTypeName: stateName,\n transitionTypeName: transitionName,\n operation: \"reach\",\n },\n },\n {\n name: `list_${machine.name}_transitions`,\n docs: [`List currently available transitions for ${docsPrefix}.`],\n static: false,\n params: [],\n returnType: `Promise<${transitionName}[]>`,\n runtime: {\n kind: \"state_machine\",\n machineName: machine.name,\n className: classSummary.name,\n stateTypeName: stateName,\n transitionTypeName: transitionName,\n operation: \"list_transitions\",\n },\n },\n {\n name: `list_${machine.name}_reachable_states`,\n docs: [`List reachable states for ${docsPrefix} from the current state.`],\n static: false,\n params: [],\n returnType: `Promise<${stateName}[]>`,\n runtime: {\n kind: \"state_machine\",\n machineName: machine.name,\n className: classSummary.name,\n stateTypeName: stateName,\n transitionTypeName: transitionName,\n operation: \"list_reachable_states\",\n },\n },\n {\n name: `${machine.name}_is_final`,\n docs: [`Return whether the current ${docsPrefix} state is final.`],\n static: false,\n params: [],\n returnType: \"Promise<boolean>\",\n runtime: {\n kind: \"state_machine\",\n machineName: machine.name,\n className: classSummary.name,\n stateTypeName: stateName,\n transitionTypeName: transitionName,\n operation: \"is_final\",\n },\n },\n {\n name: `paths_to_${machine.name}`,\n docs: [`List shortest transition paths from the current ${docsPrefix} state to a target state.`],\n static: false,\n params: [{ name: \"target\", type: stateName }],\n returnType: `Promise<Array<{ states: ${stateName}[]; transitions: ${transitionName}[] }>>`,\n runtime: {\n kind: \"state_machine\",\n machineName: machine.name,\n className: classSummary.name,\n stateTypeName: stateName,\n transitionTypeName: transitionName,\n operation: \"paths_to\",\n },\n },\n ];\n}\n\nexport function readStateMachineSummaries(\n rawClass: Record<string, any>,\n): Partial<DomainClassSummary> {\n return {\n stateMachines: normalizeStateMachines(rawClass.states),\n };\n}\n\nexport const stateMachineMetamodelPackage = defineMetamodelPackage({\n id: \"state_machine\",\n docs: {\n modelRows: [\n {\n key: \"stateMachines\",\n description:\n \"State machine definitions with `entryState`, `states`, and `transitions`.\",\n },\n ],\n },\n graphql: {\n typeDefs: [\n `\n type StateMachineMutation {\n name: String!\n state_machine: StateMachine!\n add_state(name: String!, is_final: Boolean): StateMachineMutation!\n add_transition(name: String!, from: String!, to: String!): StateMachineMutation!\n activate_transition(name: String!): StateMachineMutation!\n }\n\n type StateMachineSnapshot {\n name: String!\n current_state: StateMachineState\n available_transitions: [StateMachineTransition!]!\n reachable_states: [StateMachineState!]!\n paths_to(state: String!): [StateMachinePath!]!\n is_final: Boolean!\n history: [StateMachineTransitionEvent!]!\n }\n\n type StateMachineSnapshotMutation {\n snapshot: StateMachineSnapshot!\n activate_transition(name: String!): StateMachineSnapshotMutation!\n }\n\n type StateMachine {\n name: String!\n model: Model!\n entry_state: StateMachineState\n states: [StateMachineState!]!\n transitions: [StateMachineTransition!]!\n current_state: StateMachineState\n available_transitions: [StateMachineTransition!]!\n reachable_states: [StateMachineState!]!\n paths_to(state: String!): [StateMachinePath!]!\n is_final: Boolean!\n history: [StateMachineTransitionEvent!]!\n instances_in_state(state: String!): [Model!]!\n }\n\n type StateMachineState {\n name: String!\n is_final: Boolean!\n }\n\n type StateMachineTransition {\n name: String!\n from: StateMachineState!\n to: StateMachineState!\n }\n\n type StateMachinePath {\n states: [StateMachineState!]!\n transitions: [StateMachineTransition!]!\n }\n\n type StateMachineTransitionEvent {\n sequence: Int!\n occurred_at: Float!\n transition: StateMachineTransition!\n from: StateMachineState!\n to: StateMachineState!\n }\n\n extend type Model {\n state(name: String!): StateMachineSnapshot\n states: [StateMachine!]!\n state_machine(name: String!): StateMachine\n }\n\n extend type ModelMutation {\n create_state_machine(name: String!, entry_state: String!): StateMachineMutation\n state(name: String!): StateMachineSnapshotMutation\n state_machine(name: String!): StateMachineMutation\n }\n `,\n ],\n createResolvers({ run, stateMachines }) {\n return {\n Model: {\n state: async (ant, { name }) => await run(ant.state_machine(name)),\n states: async (ant) => await run(ant.state_machines()),\n state_machine: async (ant, { name }) => await run(ant.state_machine(name)),\n },\n ModelMutation: {\n create_state_machine: async (ant, { name, entry_state }) => {\n await run(ant.create_state_machine(name, entry_state));\n return { target: ant, name };\n },\n state: async (ant, { name }) => {\n const machine = await run(ant.state_machine(name));\n return machine ? { target: ant, name } : null;\n },\n state_machine: async (ant, { name }) => {\n const machine = await run(ant.state_machine(name));\n return machine ? { target: ant, name } : null;\n },\n },\n StateMachineMutation: {\n name: (value) => value.name,\n state_machine: async (value) => await run(value.target.state_machine(value.name)),\n add_state: async (value, { name, is_final }) => {\n await run(value.target.add_state_machine_state(value.name, name, is_final ?? false));\n return value;\n },\n add_transition: async (value, { name, from, to }) => {\n await run(value.target.add_state_machine_transition(value.name, name, from, to));\n return value;\n },\n activate_transition: async (value, { name }) => {\n await run(value.target.activate_state_machine_transition(value.name, name));\n return value;\n },\n },\n StateMachineSnapshotMutation: {\n snapshot: async (value) => await run(value.target.state_machine(value.name)),\n activate_transition: async (value, { name }) => {\n await run(value.target.activate_state_machine_transition(value.name, name));\n return value;\n },\n },\n StateMachineState: {\n name: (value) => value.name,\n is_final: (value) => value.is_final,\n },\n StateMachineTransition: {\n name: (value) => value.name,\n from: (value) => value.from_state || { name: value.from, is_final: false },\n to: (value) => value.to_state || { name: value.to, is_final: false },\n },\n StateMachinePath: {\n states: (value) => value.states,\n transitions: (value) => value.transitions,\n },\n StateMachineTransitionEvent: {\n sequence: (value) => value.sequence,\n occurred_at: (value) => value.occurred_at,\n transition: (value) => value.transition,\n from: (value) => value.from,\n to: (value) => value.to,\n },\n StateMachineSnapshot: {\n name: (value) => value.name,\n current_state: (value) => value.current_state,\n available_transitions: (value) => value.available_transitions,\n reachable_states: (value) => value.reachable_states,\n is_final: (value) => value.is_final,\n history: (value) => value.history,\n paths_to: async (value, { state }) =>\n await stateMachines!.pathsToState(value.model.target || value.model, value.name, state),\n },\n StateMachine: {\n name: (value) => value.name,\n model: (value) => value.model,\n entry_state: (value) => value.entry_state,\n states: (value) => value.states,\n transitions: (value) => value.transitions,\n current_state: (value) => value.current_state,\n available_transitions: (value) => value.available_transitions,\n reachable_states: (value) => value.reachable_states,\n is_final: (value) => value.is_final,\n history: (value) => value.history,\n paths_to: async (value, { state }) =>\n await stateMachines!.pathsToState(value.model.target || value.model, value.name, state),\n instances_in_state: async (value, { state }) =>\n await stateMachines!.instancesInState(value.model.target || value.model, value.name, state),\n },\n };\n },\n },\n manifest: {\n buildModelMutations(modelPath, spec) {\n return buildStateMachineModelMutations(modelPath, spec.stateMachines);\n },\n },\n summary: {\n selections: {\n classFields: [\n `states {\n name\n entry_state { name }\n states { name is_final }\n transitions {\n name\n from { name }\n to { name }\n }\n }`,\n ],\n },\n readClassSummary: readStateMachineSummaries,\n },\n domain: {\n extraTypesForClass(classSummary) {\n return classSummary.stateMachines.flatMap((machine) =>\n buildMachineTypes(classSummary, machine),\n );\n },\n extraMethodsForClass(classSummary) {\n return classSummary.stateMachines.flatMap((machine) =>\n buildMachineMethods(classSummary, machine),\n );\n },\n },\n});\n\nexport function renderUnionType(typeName: string, members: string[]) {\n if (members.length === 0) return `export type ${typeName} = never;`;\n return `export type ${typeName} = ${members.map(quoteTsStringLiteral).join(\" | \")};`;\n}\n","import type {\n DomainPropertySummary,\n DomainPropertyIR,\n DomainValidationRuleSummary,\n ManifestValidationRuleInput,\n} from \"@granular-software/metamodel-core\";\nimport { defineMetamodelPackage } from \"@granular-software/metamodel-core\";\n\nfunction describeRule(rule: DomainValidationRuleSummary) {\n if (rule.message) return rule.message;\n if (rule.stringValue !== undefined) return `${rule.operator} ${JSON.stringify(rule.stringValue)}`;\n if (rule.numberValue !== undefined) return `${rule.operator} ${rule.numberValue}`;\n if (rule.booleanValue !== undefined) return `${rule.operator} ${String(rule.booleanValue)}`;\n return rule.operator;\n}\n\nfunction normalizeRule(rule: any): DomainValidationRuleSummary | null {\n const operator = typeof rule?.operator === \"string\" ? rule.operator : \"\";\n if (operator.length === 0) return null;\n\n const normalized: DomainValidationRuleSummary = { operator };\n\n if (typeof rule?.string_value === \"string\") {\n normalized.stringValue = rule.string_value;\n }\n if (typeof rule?.number_value === \"number\") {\n normalized.numberValue = rule.number_value;\n }\n if (typeof rule?.boolean_value === \"boolean\") {\n normalized.booleanValue = rule.boolean_value;\n }\n if (typeof rule?.message === \"string\") {\n normalized.message = rule.message;\n }\n\n return normalized;\n}\n\nexport function buildValidationRuleFieldMutations(\n fieldPath: string,\n rules?: ManifestValidationRuleInput[],\n) {\n return (rules || []).map((rule) => {\n const args = [\n `operator: ${JSON.stringify(rule.operator)}`,\n rule.stringValue !== undefined\n ? `string_value: ${JSON.stringify(rule.stringValue)}`\n : null,\n rule.numberValue !== undefined ? `number_value: ${rule.numberValue}` : null,\n rule.booleanValue !== undefined\n ? `boolean_value: ${rule.booleanValue}`\n : null,\n rule.message ? `message: ${JSON.stringify(rule.message)}` : null,\n ]\n .filter(Boolean)\n .join(\", \");\n\n return {\n label: `add validation rule on ${fieldPath}`,\n query: `mutation { at(path: ${JSON.stringify(fieldPath)}) { add_validation_rule(${args}) { operator } } }`,\n };\n });\n}\n\nexport const validationRuleMetamodelPackage = defineMetamodelPackage({\n id: \"validation_rule\",\n docs: {\n fieldRows: [\n {\n key: \"validate\",\n description:\n \"Array of validation rules. Operators include `eq`, `neq`, `gt`, `gte`, `lt`, `lte`, `true`, `false`, `regex`, `contains`, `not_contains`, `starts_with`, `ends_with`.\",\n },\n ],\n },\n graphql: {\n typeDefs: [\n `\n type ValidationRuleMetamodel {\n model: Model!\n operator: String!\n string_value: String\n number_value: Float\n boolean_value: Boolean\n message: String\n }\n\n type ValidationError {\n code: String!\n path: String!\n message: String!\n }\n\n type ValidationResult {\n ok: Boolean!\n errors: [ValidationError!]!\n }\n\n extend type Model {\n validation_rules: [ValidationRuleMetamodel!]!\n validate_instance: ValidationResult!\n }\n\n extend type ModelMutation {\n add_validation_rule(\n operator: String!\n string_value: String\n number_value: Float\n boolean_value: Boolean\n message: String\n ): ValidationRuleMetamodel\n validate_instance: ValidationResult\n }\n `,\n ],\n createResolvers({ run }) {\n return {\n ValidationRuleMetamodel: {\n model: (value) => value.model,\n operator: (value) => value.operator,\n string_value: (value) => value.string_value || null,\n number_value: (value) => value.number_value ?? null,\n boolean_value: (value) => value.boolean_value ?? null,\n message: (value) => value.message || null,\n },\n ValidationError: {\n code: (value) => value.code,\n path: (value) => value.path,\n message: (value) => value.message,\n },\n ValidationResult: {\n ok: (value) => value.ok,\n errors: (value) => value.errors,\n },\n Model: {\n validation_rules: async (ant) => await run(ant.validation_rules()),\n validate_instance: async (ant) => await run(ant.validate_instance()),\n },\n ModelMutation: {\n add_validation_rule: async (ant, config) => {\n const model = await run(ant.add_validation_rule(config));\n return { model, ...config };\n },\n validate_instance: async (ant) => await run(ant.validate_instance()),\n },\n };\n },\n },\n manifest: {\n buildFieldMutations(fieldPath, spec) {\n return buildValidationRuleFieldMutations(fieldPath, spec.validate);\n },\n },\n summary: {\n selections: {\n propertyFields: [`validation_rules { operator string_value number_value boolean_value message }`],\n },\n readPropertySummary(rawProperty) {\n const rules = Array.isArray(rawProperty.validation_rules)\n ? rawProperty.validation_rules\n .map(normalizeRule)\n .filter((rule): rule is DomainValidationRuleSummary => Boolean(rule))\n : [];\n\n return {\n validationRules: rules,\n };\n },\n },\n domain: {\n applyToPropertyIR(\n propertyIR: DomainPropertyIR,\n propertySummary: DomainPropertySummary,\n ) {\n const rules = propertySummary.validationRules || [];\n if (rules.length === 0) return propertyIR;\n\n return {\n ...propertyIR,\n docs: [\n ...propertyIR.docs,\n `Validation rules: ${rules.map(describeRule).join(\"; \")}.`,\n ],\n };\n },\n },\n});\n","import {\n createMetamodelRegistry,\n renderMetamodelGraphqlSnapshotSource,\n} from \"@granular-software/metamodel-core\";\nimport { effectBehaviorsMetamodelPackage } from \"@granular-software/metamodel-effect-behaviors\";\nimport { enumMetamodelPackage } from \"@granular-software/metamodel-enum\";\nimport { filterByMetamodelPackage } from \"@granular-software/metamodel-filter-by\";\nimport { noteMetamodelPackage } from \"@granular-software/metamodel-note\";\nimport { requiredMetamodelPackage } from \"@granular-software/metamodel-required\";\nimport { stateMachineMetamodelPackage } from \"@granular-software/metamodel-state-machine\";\nimport { validationRuleMetamodelPackage } from \"@granular-software/metamodel-validation-rule\";\n\nexport const DEFAULT_METAMODEL_PACKAGES = [\n noteMetamodelPackage,\n requiredMetamodelPackage,\n enumMetamodelPackage,\n filterByMetamodelPackage,\n validationRuleMetamodelPackage,\n stateMachineMetamodelPackage,\n effectBehaviorsMetamodelPackage,\n];\n\nexport const DEFAULT_METAMODEL_REGISTRY = createMetamodelRegistry(\n DEFAULT_METAMODEL_PACKAGES,\n);\n\nexport function getDefaultMetamodelPackages() {\n return DEFAULT_METAMODEL_REGISTRY.packages;\n}\n\nexport function collectMetamodelDocRows(\n kind: \"fieldRows\" | \"modelRows\" | \"effectRows\",\n) {\n return DEFAULT_METAMODEL_REGISTRY.collectDocRows(kind);\n}\n\nexport function getDefaultMetamodelSummarySelections() {\n return DEFAULT_METAMODEL_REGISTRY.getSummarySelections();\n}\n\nexport function applyDefaultMetamodelSummaryReadersToClass(\n rawClass: Record<string, any>,\n classSummary: Parameters<typeof DEFAULT_METAMODEL_REGISTRY.applyClassSummaryReaders>[1],\n) {\n return DEFAULT_METAMODEL_REGISTRY.applyClassSummaryReaders(rawClass, classSummary);\n}\n\nexport function applyDefaultMetamodelSummaryReadersToProperty(\n rawProperty: Record<string, any>,\n propertySummary: Parameters<typeof DEFAULT_METAMODEL_REGISTRY.applyPropertySummaryReaders>[1],\n) {\n return DEFAULT_METAMODEL_REGISTRY.applyPropertySummaryReaders(\n rawProperty,\n propertySummary,\n );\n}\n\nexport function applyDefaultMetamodelSummaryReadersToMethod(\n rawMethod: Record<string, any>,\n methodSummary: Parameters<typeof DEFAULT_METAMODEL_REGISTRY.applyMethodSummaryReaders>[1],\n) {\n return DEFAULT_METAMODEL_REGISTRY.applyMethodSummaryReaders(rawMethod, methodSummary);\n}\n\nexport function applyDefaultMetamodelPropertyIR(\n propertyIR: Parameters<typeof DEFAULT_METAMODEL_REGISTRY.applyPropertyIR>[0],\n propertySummary: Parameters<typeof DEFAULT_METAMODEL_REGISTRY.applyPropertyIR>[1],\n classSummary: Parameters<typeof DEFAULT_METAMODEL_REGISTRY.applyPropertyIR>[2],\n) {\n return DEFAULT_METAMODEL_REGISTRY.applyPropertyIR(\n propertyIR,\n propertySummary,\n classSummary,\n );\n}\n\nexport function applyDefaultMetamodelClassIR(\n classIR: Parameters<typeof DEFAULT_METAMODEL_REGISTRY.applyClassIR>[0],\n classSummary: Parameters<typeof DEFAULT_METAMODEL_REGISTRY.applyClassIR>[1],\n) {\n return DEFAULT_METAMODEL_REGISTRY.applyClassIR(classIR, classSummary);\n}\n\nexport function applyDefaultMetamodelMethodIR(\n methodIR: Parameters<typeof DEFAULT_METAMODEL_REGISTRY.applyMethodIR>[0],\n methodSummary: Parameters<typeof DEFAULT_METAMODEL_REGISTRY.applyMethodIR>[1],\n classSummary?: Parameters<typeof DEFAULT_METAMODEL_REGISTRY.applyMethodIR>[2],\n) {\n return DEFAULT_METAMODEL_REGISTRY.applyMethodIR(\n methodIR,\n methodSummary,\n classSummary,\n );\n}\n\nexport function getDefaultMetamodelExtraTypes(\n classSummary: Parameters<typeof DEFAULT_METAMODEL_REGISTRY.getExtraTypesForClass>[0],\n) {\n return DEFAULT_METAMODEL_REGISTRY.getExtraTypesForClass(classSummary);\n}\n\nexport function getDefaultMetamodelExtraMethods(\n classSummary: Parameters<typeof DEFAULT_METAMODEL_REGISTRY.getExtraMethodsForClass>[0],\n) {\n return DEFAULT_METAMODEL_REGISTRY.getExtraMethodsForClass(classSummary);\n}\n\nexport function renderDefaultMetamodelGraphqlSnapshotSource() {\n return renderMetamodelGraphqlSnapshotSource(DEFAULT_METAMODEL_REGISTRY.packages);\n}\n","import type {\n EffectMetamodelManifestSpec,\n FieldMetamodelManifestSpec,\n MetamodelGraphqlMutation,\n ModelMetamodelManifestSpec,\n} from '@granular-software/metamodel-core';\nimport { DEFAULT_METAMODEL_PACKAGES } from '@granular-software/metamodel-preset-default';\n\nexport function buildFieldMetamodelMutations(\n fieldPath: string,\n spec: FieldMetamodelManifestSpec,\n): MetamodelGraphqlMutation[] {\n return DEFAULT_METAMODEL_PACKAGES.flatMap((pkg) =>\n pkg.manifest?.buildFieldMutations?.(fieldPath, spec) || [],\n );\n}\n\nexport function buildModelMetamodelMutations(\n modelPath: string,\n spec: ModelMetamodelManifestSpec,\n): MetamodelGraphqlMutation[] {\n return DEFAULT_METAMODEL_PACKAGES.flatMap((pkg) =>\n pkg.manifest?.buildModelMutations?.(modelPath, spec) || [],\n );\n}\n\nexport function buildEffectMetamodelMutations(\n toolPath: string,\n spec?: EffectMetamodelManifestSpec,\n): MetamodelGraphqlMutation[] {\n if (!spec) return [];\n return DEFAULT_METAMODEL_PACKAGES.flatMap((pkg) =>\n pkg.manifest?.buildEffectMutations?.(toolPath, spec) || [],\n );\n}\n","import { WSClient } from './ws-client';\nimport { Session, ToolWithHandler, PublishToolsResult } from './session';\nimport { resolveApiUrl, resolveAuthTokenForApiUrl } from './endpoints';\nimport { invokeRegisteredEffect } from './effect-runtime';\nimport {\n buildEffectMetamodelMutations,\n buildFieldMetamodelMutations,\n buildModelMetamodelMutations,\n} from './manifest-metamodels';\nimport type {\n EffectMetamodelManifestSpec,\n FieldMetamodelManifestSpec,\n} from '@granular-software/metamodel-core';\nimport type {\n AccessTokenProvider,\n GranularOptions,\n ConnectOptions,\n SessionHeapSnapshot,\n RecordUserOptions,\n User,\n Subject,\n Sandbox,\n SandboxListResponse,\n CreateSandboxData,\n PermissionProfile,\n PermissionProfileListResponse,\n CreatePermissionProfileData,\n EnvironmentData,\n EnvironmentListResponse,\n CreateEnvironmentData,\n Assignment,\n AssignmentListResponse,\n DeleteResponse,\n GraphQLResult,\n RelationshipInfo,\n ModelRef,\n DefineRelationshipOptions,\n ManifestContent,\n ManifestOperation,\n ManifestPropertySpec,\n ManifestImport,\n ManifestEffectDeclaration,\n ManifestEventStreamDef,\n StreamEvent,\n StreamSubscription,\n StreamStats,\n RecordObjectOptions,\n RecordObjectResult,\n RecordImport,\n EnvironmentRecordImportSummary,\n RecordImportStatus,\n ToolInfo,\n ToolSchema,\n ToolsChangedEvent,\n ConversationSessionInfo,\n WSDisconnectInfo,\n WSReconnectErrorInfo,\n} from './types';\n\n// ── Built-in modules ──\n\n/**\n * Standard modules: base types available via `imports: [{ alias: \"@std\", name: \"standard_modules\" }]`\n */\nconst STANDARD_MODULES_OPERATIONS: ManifestOperation[] = [\n { create: 'entity', has: { id: { value: 'auto-generated' }, createdAt: { value: undefined } } },\n { create: 'class', extends: 'entity', has: {} },\n { create: 'user', extends: 'entity', has: { email: { value: undefined }, firstName: { value: undefined }, lastName: { value: undefined } } },\n { create: 'company', extends: 'entity', has: { name: { value: undefined }, website: { value: undefined } } },\n { create: 'string', has: { value: { value: undefined } } },\n { create: 'number', has: { value: { value: 0 } } },\n { create: 'boolean', has: { value: { value: false } } },\n { create: 'tool_parameter', has: { name: { value: undefined }, type: { value: 'string' }, description: { value: undefined }, required: { value: false } } },\n];\n\n/**\n * Registry of built-in modules that can be imported in manifests\n */\nconst BUILTIN_MODULES: Record<string, ManifestOperation[]> = {\n 'standard_modules': STANDARD_MODULES_OPERATIONS,\n};\n\nfunction computeEffectKey(effect: {\n name: string;\n className?: string | null;\n static?: boolean;\n}): string {\n const attachedClass = effect.className?.trim();\n if (!attachedClass) {\n return `global:${effect.name}`;\n }\n return effect.static\n ? `class:${attachedClass}:static:${effect.name}`\n : `class:${attachedClass}:instance:${effect.name}`;\n}\n\nfunction buildEffectHostUrl(\n apiUrl: string,\n sandboxId: string,\n effectClientId: string,\n clientId: string,\n): string {\n const url = new URL(apiUrl);\n\n if (url.pathname.endsWith('/granular/ws/connect')) {\n url.pathname = url.pathname.replace(/\\/ws\\/connect$/, '/effects/connect');\n } else if (url.pathname.endsWith('/granular')) {\n url.pathname = `${url.pathname.replace(/\\/$/, '')}/effects/connect`;\n } else if (url.pathname.endsWith('/v2/ws/connect')) {\n url.pathname = url.pathname.replace(/\\/ws\\/connect$/, '/effects/connect');\n } else if (url.pathname.endsWith('/v2/ws')) {\n url.pathname = url.pathname.replace(/\\/ws$/, '/effects/connect');\n } else if (url.pathname.endsWith('/ws/connect')) {\n url.pathname = url.pathname.replace(/\\/ws\\/connect$/, '/effects/connect');\n } else if (url.pathname.endsWith('/ws')) {\n url.pathname = url.pathname.replace(/\\/ws$/, '/effects/connect');\n } else {\n url.pathname = '/granular/effects/connect';\n }\n\n url.search = '';\n url.hash = '';\n url.searchParams.set('sandboxId', sandboxId);\n url.searchParams.set('effectClientId', effectClientId);\n url.searchParams.set('clientId', clientId);\n return url.toString();\n}\n\nfunction createEmptyHeapSnapshot(now = Date.now()): SessionHeapSnapshot {\n return {\n entriesByPath: {},\n listsByName: {},\n variablesByName: {},\n updatedAt: now,\n };\n}\n\nfunction normalizeHeapSnapshot(raw: unknown): SessionHeapSnapshot {\n if (!raw || typeof raw !== 'object') {\n return createEmptyHeapSnapshot();\n }\n\n const heap = raw as Partial<SessionHeapSnapshot>;\n return {\n entriesByPath: heap.entriesByPath && typeof heap.entriesByPath === 'object'\n ? JSON.parse(JSON.stringify(heap.entriesByPath))\n : {},\n listsByName: heap.listsByName && typeof heap.listsByName === 'object'\n ? JSON.parse(JSON.stringify(heap.listsByName))\n : {},\n variablesByName: heap.variablesByName && typeof heap.variablesByName === 'object'\n ? JSON.parse(JSON.stringify(heap.variablesByName))\n : {},\n updatedAt: typeof heap.updatedAt === 'number' ? heap.updatedAt : Date.now(),\n };\n}\n\nfunction normalizeSubject(subject: Subject): Subject {\n const granularId = subject.granularId || subject.subjectId;\n const userId = subject.userId || subject.identityId || granularId;\n return {\n ...subject,\n granularId,\n userId,\n subjectId: granularId,\n identityId: subject.identityId || userId,\n };\n}\n\nfunction normalizeUser(user: User): User {\n const granularId = user.granularId || user.subjectId;\n const userId = user.userId || user.identityId || granularId;\n return {\n ...user,\n granularId,\n userId,\n subjectId: granularId,\n identityId: user.identityId || userId,\n permissions: Array.isArray(user.permissions) ? user.permissions : [],\n };\n}\n\nfunction normalizeEnvironmentData(environment: EnvironmentData): EnvironmentData {\n const buildPolicy = environment.buildPolicy\n || environment.tracking\n || (environment.tagId\n ? { mode: 'tag' as const, tagId: environment.tagId }\n : { mode: 'pinned' as const, versionId: environment.versionId || environment.buildId });\n\n const environmentName = environment.environment || environment.envName || 'prod';\n return {\n ...environment,\n ontologyId: environment.ontologyId || environment.sandboxId,\n versionId: environment.versionId || environment.buildId,\n envName: environmentName,\n environment: environmentName,\n buildPolicy,\n tracking: environment.tracking || buildPolicy,\n };\n}\n\ninterface ResolvedConnectUser {\n granularId: string;\n userId: string;\n name?: string;\n email?: string;\n permissions: string[];\n}\n\ninterface SandboxEffectHost {\n sandboxId: string;\n effectClientId: string;\n clientId: string;\n wsClient: WSClient;\n heartbeatTimer: ReturnType<typeof setInterval> | null;\n heartbeatInFlight: boolean;\n recovering: boolean;\n}\n\n/**\n * Environment represents a connected session to a sandbox for a specific user.\n *\n * After connecting, you can:\n * 1. Define your domain ontology via `applyManifest()` (classes, properties, relationships)\n * 2. Record object instances via `recordObject()` (with fields and relationship attachments)\n * 3. Register sandbox-scoped effects via `granular.registerEffect()` / `granular.registerEffects()`\n * 4. Submit jobs via `submitJob()` that import auto-generated typed classes from `./sandbox-tools`\n * 5. Execute GraphQL queries via `graphql()` (authenticated automatically)\n * 6. List available effects via `getEffects()` and listen for updates via `onEffectsChanged()`\n *\n * Tool calls from the sandbox automatically invoke your handlers via reverse-RPC.\n *\n * Object IDs are unique per class. Internally, the graph path is `{className}_{id}`\n * (e.g., `author_tolkien`). Use `Environment.toGraphPath()` and\n * `Environment.extractIdFromGraphPath()` for conversions.\n */\nexport class Environment extends Session {\n private envData: EnvironmentData;\n private _apiKey: string;\n private _apiEndpoint: string;\n\n constructor(client: WSClient, envData: EnvironmentData, clientId: string, apiKey: string, apiEndpoint: string) {\n super(client, clientId);\n this.envData = envData;\n this._apiKey = apiKey;\n this._apiEndpoint = apiEndpoint;\n }\n\n /** The environment ID */\n get environmentId(): string {\n return this.envData.environmentId;\n }\n\n /** The sandbox ID */\n get sandboxId(): string {\n return this.envData.sandboxId;\n }\n\n /** The ontology ID */\n get ontologyId(): string {\n return this.envData.ontologyId || this.envData.sandboxId;\n }\n\n /** The subject ID */\n get subjectId(): string {\n return this.envData.subjectId;\n }\n\n /** The named environment slot, such as dev or prod */\n get envName(): string {\n return this.envData.envName;\n }\n\n /** The named environment slot, such as dev or prod */\n get environment(): string {\n return this.envData.environment || this.envData.envName;\n }\n\n /** The resolved ontology version backing this environment */\n get versionId(): string {\n return this.envData.versionId || this.envData.buildId;\n }\n\n /** Internal Granular user identifier for this environment */\n get granularId(): string {\n return this.envData.subjectId;\n }\n\n /** The permission profile ID */\n get permissionProfileId(): string {\n return this.envData.permissionProfileId;\n }\n\n /** The GraphQL API endpoint URL */\n get apiEndpoint(): string {\n return this._apiEndpoint;\n }\n\n /**\n * Return a plain JS snapshot of the synced session heap.\n *\n * The heap lives in the Automerge document, so this method does not perform\n * any extra network roundtrip.\n */\n getHeap(): SessionHeapSnapshot {\n const doc = this.document as Record<string, unknown> & {\n heap?: SessionHeapSnapshot;\n };\n return normalizeHeapSnapshot(doc?.heap);\n }\n\n private getRuntimeBaseUrl(): string {\n try {\n const endpoint = new URL(this._apiEndpoint);\n const graphqlSuffix = '/orchestrator/graphql';\n if (endpoint.pathname.endsWith(graphqlSuffix)) {\n endpoint.pathname = endpoint.pathname.slice(0, -graphqlSuffix.length);\n } else if (endpoint.pathname.endsWith('/graphql')) {\n endpoint.pathname = endpoint.pathname.slice(0, -'/graphql'.length);\n }\n endpoint.search = '';\n endpoint.hash = '';\n return endpoint.toString().replace(/\\/$/, '');\n } catch {\n return this._apiEndpoint.replace(/\\/orchestrator\\/graphql$/, '').replace(/\\/$/, '');\n }\n }\n\n private async controlPlaneRequest<T>(path: string, options: RequestInit = {}): Promise<T> {\n const runtimeBase = this.getRuntimeBaseUrl();\n const url = `${runtimeBase}${path}`;\n\n const response = await fetch(url, {\n ...options,\n headers: {\n 'Authorization': `Bearer ${this._apiKey}`,\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n if (!response.ok) {\n throw new Error(`Control Plane API Error (${response.status}): ${await response.text()}`);\n }\n\n return response.json() as Promise<T>;\n }\n\n /**\n * Close the session and disconnect from the sandbox.\n *\n * Sends `client.goodbye` over WebSocket first, then issues an HTTP fallback\n * to the runtime goodbye endpoint if no definitive WS-side runtime notify\n * acknowledgement was observed.\n */\n override async disconnect(): Promise<void> {\n let wsNotifiedRuntime = false;\n\n try {\n const goodbye = await this.rpc<{ ok?: boolean; via?: string }>('client.goodbye', {\n timestamp: Date.now(),\n });\n wsNotifiedRuntime = Boolean(goodbye?.ok && goodbye?.via);\n } catch {\n wsNotifiedRuntime = false;\n }\n\n if (!wsNotifiedRuntime) {\n try {\n const runtimeBase = this.getRuntimeBaseUrl();\n await fetch(\n `${runtimeBase}/orchestrator/runtime/environments/${this.environmentId}/session-goodbye`,\n {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${this._apiKey}`,\n },\n body: JSON.stringify({\n reason: 'sdk_disconnect_http_fallback',\n sessionId: this.client.currentSessionId,\n }),\n },\n );\n } catch {\n // Best effort fallback.\n }\n }\n\n this.client.disconnect();\n }\n\n // ==================== GRAPH CONTAINER READINESS ====================\n\n /** The last known graph container status, updated by checkReadiness() or on heartbeat */\n graphContainerStatus: { lastKeepAliveAt: number; status: 'warming' | 'hot' | 'unknown' } | null = null;\n\n /**\n * Check if the graph container is ready and warm.\n *\n * Sends a lightweight heartbeat RPC to the Session DO which internally\n * pings the FalkorDB container. The response includes `graphContainerStatus`,\n * which is stored locally and emitted as a `readiness` event.\n *\n * Use this method to proactively warm the graph container before any\n * GraphQL query that requires it, or to poll the container's state in\n * the background.\n *\n * @returns The current graph container status object\n *\n * @example\n * ```typescript\n * const status = await env.checkReadiness();\n * console.log(status.status); // 'hot' | 'warming' | 'unknown'\n *\n * // Or listen for live updates\n * env.on('readiness', (status) => {\n * console.log('Graph is now:', status.status);\n * });\n * ```\n */\n async checkReadiness(): Promise<{ lastKeepAliveAt: number; status: 'warming' | 'hot' | 'unknown' }> {\n const result = await this.client.call('client.heartbeat', {}) as {\n status?: string;\n timestamp?: number;\n graphContainerStatus?: { lastKeepAliveAt: number; status: 'warming' | 'hot' | 'unknown' };\n };\n\n const containerStatus = result?.graphContainerStatus ?? {\n lastKeepAliveAt: Date.now(),\n status: 'unknown' as const,\n };\n\n this.graphContainerStatus = containerStatus;\n this.emit('readiness', containerStatus);\n return containerStatus;\n }\n\n // ==================== ID ↔ GRAPH PATH MAPPING ====================\n\n /**\n * Convert a class name + real-world ID into a unique graph path.\n *\n * Two objects of *different* classes may share the same real-world ID,\n * so the graph path must incorporate the class to guarantee uniqueness.\n *\n * Format: `{className}_{id}` — deterministic, human-readable.\n *\n * **Convention**: class names should be simple identifiers without\n * underscores (e.g. `author`, `book`). This ensures the prefix is\n * unambiguously parseable by `extractIdFromGraphPath`.\n */\n static toGraphPath(className: string, id: string): string {\n return `${className}_${id}`;\n }\n\n /**\n * Extract the real-world ID from a graph path, given the class name.\n *\n * Strips the `{className}_` prefix. Returns the raw path if the\n * expected prefix is not found.\n */\n static extractIdFromGraphPath(graphPath: string, className: string): string {\n const prefix = `${className}_`;\n return graphPath.startsWith(prefix) ? graphPath.substring(prefix.length) : graphPath;\n }\n\n /**\n * Execute a GraphQL query against the environment's graph.\n * \n * The query uses the Granular graph query language (based on Cypher/GraphQL).\n * Authentication is handled automatically using the SDK's API key.\n * \n * @param query - The GraphQL query string\n * @param variables - Optional variables for the query\n * @returns The query result data\n * \n * @example\n * ```typescript\n * // Read the workspace\n * const result = await env.graphql(\n * `query { model(path: \"workspace\") { path label submodels { path label } } }`\n * );\n * console.log(result.data);\n * \n * // Create a model\n * const created = await env.graphql(\n * `mutation { at(path: \"workspace\") { create_submodel(subpath: \"my_node\", label: \"My Node\", prototype: \"Model\") { model { path label } } } }`\n * );\n * ```\n */\n async graphql<T = any>(query: string, variables?: Record<string, any>): Promise<GraphQLResult<T>> {\n const response = await fetch(this._apiEndpoint, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${this._apiKey}`,\n },\n body: JSON.stringify({\n environmentId: this.environmentId,\n query,\n variables,\n }),\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(`GraphQL API Error (${response.status}): ${errorText}`);\n }\n\n return response.json() as Promise<GraphQLResult<T>>;\n }\n\n // ==================== RELATIONSHIP METHODS ====================\n\n /**\n * Define a relationship between two model types.\n * \n * Creates both submodels (if they don't exist) and links them with\n * a RelationshipDef node that encodes cardinality.\n * \n * @example\n * ```typescript\n * // Author has many Books, Book has one Author\n * const rel = await env.defineRelationship({\n * model: 'author',\n * localSubmodel: 'books',\n * localIsMany: true,\n * foreignModel: 'book',\n * foreignSubmodel: 'author',\n * foreignIsMany: false,\n * });\n * console.log(rel.relationship_kind); // \"one_to_many\"\n * ```\n */\n async defineRelationship(options: DefineRelationshipOptions): Promise<RelationshipInfo> {\n const result = await this.graphql<{\n at: {\n define_relationship: RelationshipInfo;\n };\n }>(\n `mutation DefineRelationship(\n $localSubmodel: String!,\n $foreignModel: String!,\n $foreignSubmodel: String!,\n $localIsMany: Boolean!,\n $foreignIsMany: Boolean!,\n $name: String\n ) {\n at(path: \"${options.model}\") {\n define_relationship(\n local_submodel: $localSubmodel\n foreign_model: $foreignModel\n foreign_submodel: $foreignSubmodel\n local_is_many: $localIsMany\n foreign_is_many: $foreignIsMany\n name: $name\n ) {\n name\n local_submodel { path label }\n local_is_many\n foreign_submodel { path label }\n foreign_is_many\n foreign_model { path label }\n relationship_kind\n }\n }\n }`,\n {\n localSubmodel: options.localSubmodel,\n foreignModel: options.foreignModel,\n foreignSubmodel: options.foreignSubmodel,\n localIsMany: options.localIsMany,\n foreignIsMany: options.foreignIsMany,\n name: options.name,\n }\n );\n\n if (result.errors?.length) {\n throw new Error(`defineRelationship failed: ${result.errors[0].message}`);\n }\n\n return result.data!.at.define_relationship;\n }\n\n /**\n * Get all relationships for a model type.\n * \n * @param modelPath - The model type path (e.g., \"author\")\n * @returns Array of relationships from this model's perspective\n * \n * @example\n * ```typescript\n * const rels = await env.getRelationships('author');\n * for (const rel of rels) {\n * console.log(`${rel.local_submodel.path} -> ${rel.foreign_model.path} (${rel.relationship_kind})`);\n * }\n * ```\n */\n async getRelationships(modelPath: string): Promise<RelationshipInfo[]> {\n const result = await this.graphql<{\n model: {\n relationships: RelationshipInfo[];\n };\n }>(\n `query GetRelationships($path: String) {\n model(path: $path) {\n relationships {\n name\n local_submodel { path label }\n local_is_many\n foreign_submodel { path label }\n foreign_is_many\n foreign_model { path label }\n relationship_kind\n }\n }\n }`,\n { path: modelPath }\n );\n\n if (result.errors?.length) {\n throw new Error(`getRelationships failed: ${result.errors[0].message}`);\n }\n\n return result.data?.model?.relationships || [];\n }\n\n /**\n * Attach a target model to a relationship submodel.\n * \n * Handles cardinality automatically:\n * - \"One\" side: sets/replaces the reference\n * - \"Many\" side: adds the target to the collection\n * \n * If the target model doesn't exist, it's created as an instance of the foreign type.\n * Bidirectional sync is automatic.\n * \n * @param modelPath - The model instance path (e.g., \"tolkien\")\n * @param submodelPath - The relationship submodel (e.g., \"books\")\n * @param targetPath - The target model to attach (e.g., \"lord_of_the_rings\")\n * \n * @example\n * ```typescript\n * // Attach a book to an author (many side)\n * await env.attach('tolkien', 'books', 'lord_of_the_rings');\n * // This also automatically sets lord_of_the_rings:author -> tolkien\n * ```\n */\n async attach(modelPath: string, submodelPath: string, targetPath: string): Promise<void> {\n const result = await this.graphql(\n `mutation Attach($target: String!) {\n at(path: \"${modelPath}\") {\n at(submodel: \"${submodelPath}\") {\n attach(target: $target) {\n model { path }\n }\n }\n }\n }`,\n { target: targetPath }\n );\n\n if (result.errors?.length) {\n throw new Error(`attach failed: ${result.errors[0].message}`);\n }\n }\n\n /**\n * Detach a target model from a relationship submodel.\n * \n * Handles bidirectional cleanup automatically.\n * \n * @param modelPath - The model instance path\n * @param submodelPath - The relationship submodel\n * @param targetPath - The target to detach (optional for \"one\" side; omit on \"many\" side to detach all)\n * \n * @example\n * ```typescript\n * // Detach a specific book\n * await env.detach('tolkien', 'books', 'lord_of_the_rings');\n * \n * // Detach all books\n * await env.detach('tolkien', 'books');\n * ```\n */\n async detach(modelPath: string, submodelPath: string, targetPath?: string): Promise<void> {\n const targetArg = targetPath ? `target: \"${targetPath}\"` : '';\n const result = await this.graphql(\n `mutation Detach {\n at(path: \"${modelPath}\") {\n at(submodel: \"${submodelPath}\") {\n detach(${targetArg}) {\n model { path }\n }\n }\n }\n }`\n );\n\n if (result.errors?.length) {\n throw new Error(`detach failed: ${result.errors[0].message}`);\n }\n }\n\n /**\n * List all related models through a relationship submodel.\n * \n * @param modelPath - The model instance path\n * @param submodelPath - The relationship submodel\n * @returns Array of related model references\n * \n * @example\n * ```typescript\n * const books = await env.listRelated('tolkien', 'books');\n * console.log(books); // [{ path: \"lord_of_the_rings\", label: \"Lord of the Rings\" }, ...]\n * ```\n */\n async listRelated(modelPath: string, submodelPath: string): Promise<ModelRef[]> {\n const result = await this.graphql<{\n at: {\n at: {\n list_related: ModelRef[];\n };\n };\n }>(\n `mutation ListRelated {\n at(path: \"${modelPath}\") {\n at(submodel: \"${submodelPath}\") {\n list_related { path label }\n }\n }\n }`\n );\n\n if (result.errors?.length) {\n throw new Error(`listRelated failed: ${result.errors[0].message}`);\n }\n\n return result.data?.at?.at?.list_related || [];\n }\n\n /**\n * Apply a manifest to the current environment's graph.\n * \n * Translates each manifest operation into GraphQL mutations and executes them\n * in order. This is the core mechanism for creating classes, fields, and\n * relationships from a declarative manifest.\n * \n * @param manifest - The manifest content to apply\n * @returns Summary of applied operations\n * \n * @example\n * ```typescript\n * await environment.applyManifest({\n * schemaVersion: 2,\n * name: 'my-app',\n * volumes: [{\n * name: 'schema',\n * scope: 'sandbox',\n * operations: [\n * { create: 'author', extends: 'class', has: { name: { type: 'string' } } },\n * { create: 'book', extends: 'class', has: { title: { type: 'string' } } },\n * { defineRelationship: {\n * left: 'author', right: 'book',\n * leftSubmodel: 'books', rightSubmodel: 'author',\n * leftIsMany: true, rightIsMany: false,\n * }},\n * ],\n * }],\n * });\n * ```\n */\n async applyManifest(manifest: ManifestContent): Promise<{ applied: number; errors: string[] }> {\n const errors: string[] = [];\n let applied = 0;\n\n for (const volume of manifest.volumes) {\n // Build alias map from imports\n const aliasMap: Record<string, string> = {};\n\n // Resolve and apply imports first\n if (volume.imports) {\n for (const imp of volume.imports) {\n aliasMap[imp.alias] = imp.name;\n\n const builtinOps = BUILTIN_MODULES[imp.name];\n if (builtinOps) {\n for (const op of builtinOps) {\n try {\n await this._applyOperation(op, {});\n applied++;\n } catch (err: any) {\n // Ignore \"already exists\" errors from re-applying imports\n if (!err.message?.includes('already exists')) {\n errors.push(`Import ${imp.name} operation failed: ${err.message}`);\n }\n }\n }\n } else {\n errors.push(`Unknown module: \"${imp.name}\" (only built-in modules are supported)`);\n }\n }\n }\n\n // Apply volume operations with alias resolution\n for (const op of volume.operations) {\n try {\n await this._applyOperation(op, aliasMap);\n applied++;\n } catch (err: any) {\n errors.push(`Operation failed: ${err.message}`);\n }\n }\n }\n\n return { applied, errors };\n }\n\n /**\n * Resolve an alias reference like \"@std/class\" → \"class\"\n * Strips the alias prefix, returning the bare model path.\n */\n private _resolveAlias(ref: string, aliasMap: Record<string, string>): string {\n if (!ref.startsWith('@')) return ref;\n const slashIdx = ref.indexOf('/');\n if (slashIdx === -1) return ref;\n const alias = ref.substring(0, slashIdx);\n const symbolName = ref.substring(slashIdx + 1);\n if (aliasMap[alias]) {\n return symbolName; // The import was applied, so the symbol exists at its bare name\n }\n return ref; // Unknown alias, return as-is\n }\n\n private async _runGraphql(query: string, label: string): Promise<any> {\n const result = await this.graphql(query);\n if (result.errors?.length) {\n throw new Error(`${label}: ${result.errors[0].message}`);\n }\n return result.data;\n }\n\n private async _applyFieldMetamodels(fieldPath: string, spec: FieldMetamodelManifestSpec): Promise<void> {\n for (const mutation of buildFieldMetamodelMutations(fieldPath, spec)) {\n await this._runGraphql(mutation.query, mutation.label);\n }\n }\n\n private async _applyModelMetamodels(modelPath: string, op: ManifestOperation): Promise<void> {\n for (const mutation of buildModelMetamodelMutations(modelPath, op)) {\n await this._runGraphql(mutation.query, mutation.label);\n }\n }\n\n private async _ensureWorkspaceToolsRoot(): Promise<void> {\n await this._runGraphql(\n `mutation { create_model(path: \"workspace\", label: \"workspace\") { model { path } } }`,\n 'ensure workspace',\n ).catch((error: Error) => {\n if (!error.message.includes('already exists')) throw error;\n });\n\n await this._runGraphql(\n `mutation { at(path: \"workspace\") { create_submodel(subpath: \"tools\", label: \"Tools\") { model { path } } } }`,\n 'ensure workspace:tools',\n ).catch((error: Error) => {\n if (!error.message.includes('already exists')) throw error;\n });\n\n await this._runGraphql(\n `mutation { at(path: \"workspace:tools\") { create_submodel(subpath: \"declared\", label: \"Declared\") { model { path } } } }`,\n 'ensure workspace:tools:declared',\n ).catch((error: Error) => {\n if (!error.message.includes('already exists')) throw error;\n });\n }\n\n private async _storeEffectSchemas(toolPath: string, effect: ManifestEffectDeclaration): Promise<void> {\n await this._runGraphql(\n `mutation { at(path: ${JSON.stringify(toolPath)}) { create_submodel(subpath: \"inputSchema\", label: \"inputSchema\") { set_string_value(value: ${JSON.stringify(JSON.stringify(effect.inputSchema))}) { done } } } }`,\n `store inputSchema on ${toolPath}`,\n ).catch((error: Error) => {\n if (!error.message.includes('already exists')) throw error;\n });\n\n if (effect.outputSchema) {\n await this._runGraphql(\n `mutation { at(path: ${JSON.stringify(toolPath)}) { create_submodel(subpath: \"outputSchema\", label: \"outputSchema\") { set_string_value(value: ${JSON.stringify(JSON.stringify(effect.outputSchema))}) { done } } } }`,\n `store outputSchema on ${toolPath}`,\n ).catch((error: Error) => {\n if (!error.message.includes('already exists')) throw error;\n });\n }\n }\n\n private async _applyEffectMetamodels(toolPath: string, metamodels?: EffectMetamodelManifestSpec): Promise<void> {\n for (const mutation of buildEffectMetamodelMutations(toolPath, metamodels)) {\n await this._runGraphql(mutation.query, mutation.label);\n }\n }\n\n private async _ensureWorkspaceStreamsRoot(): Promise<void> {\n await this._runGraphql(\n `mutation { create_model(path: \"workspace\", label: \"workspace\") { model { path } } }`,\n 'ensure workspace',\n ).catch((error: Error) => {\n if (!error.message.includes('already exists')) throw error;\n });\n\n await this._runGraphql(\n `mutation { at(path: \"workspace\") { create_submodel(subpath: \"streams\", label: \"Streams\") { model { path } } } }`,\n 'ensure workspace:streams',\n ).catch((error: Error) => {\n if (!error.message.includes('already exists')) throw error;\n });\n }\n\n private async _applyEventStreamDeclaration(stream: ManifestEventStreamDef): Promise<void> {\n await this._ensureWorkspaceStreamsRoot();\n const streamPath = `workspace:streams:${stream.name}`;\n\n await this._runGraphql(\n `mutation { at(path: \"workspace:streams\") { create_submodel(subpath: ${JSON.stringify(stream.name)}, label: ${JSON.stringify(stream.name)}) { model { path } } } }`,\n `create stream ${stream.name}`,\n ).catch((error: Error) => {\n if (!error.message.includes('already exists')) throw error;\n });\n\n if (stream.description) {\n await this._runGraphql(\n `mutation { at(path: ${JSON.stringify(streamPath)}) { set_description(description: ${JSON.stringify(stream.description)}) { done } } }`,\n `set stream description on ${streamPath}`,\n );\n }\n\n for (const eventType of stream.eventTypes) {\n const typePath = `${streamPath}:${eventType.name}`;\n await this._runGraphql(\n `mutation { at(path: ${JSON.stringify(streamPath)}) { create_submodel(subpath: ${JSON.stringify(eventType.name)}, label: ${JSON.stringify(eventType.name)}) { model { path } } } }`,\n `create event type ${eventType.name} on ${streamPath}`,\n ).catch((error: Error) => {\n if (!error.message.includes('already exists')) throw error;\n });\n\n if (eventType.description) {\n await this._runGraphql(\n `mutation { at(path: ${JSON.stringify(typePath)}) { set_description(description: ${JSON.stringify(eventType.description)}) { done } } }`,\n `set event type description on ${typePath}`,\n );\n }\n\n if (eventType.payloadSchema?.properties) {\n const fieldSpecs: Record<string, ManifestPropertySpec> = {};\n for (const [propName, propSchema] of Object.entries(eventType.payloadSchema.properties)) {\n const schema = propSchema as Record<string, unknown>;\n fieldSpecs[propName] = {\n type: (schema.type as string) ?? 'string',\n description: schema.description as string | undefined,\n };\n }\n await this._applyFields(typePath, fieldSpecs);\n }\n\n if (eventType.payloadSchema?.required?.length) {\n await this._runGraphql(\n `mutation { at(path: ${JSON.stringify(typePath)}) { create_submodel(subpath: \"required\", label: \"required\") { set_string_value(value: ${JSON.stringify(JSON.stringify(eventType.payloadSchema.required))}) { done } } } }`,\n `store required fields on ${typePath}`,\n ).catch((error: Error) => {\n if (!error.message.includes('already exists')) throw error;\n });\n }\n }\n }\n\n private async _applyEffectDeclaration(effect: ManifestEffectDeclaration, aliasMap: Record<string, string>): Promise<void> {\n let containerPath = 'workspace:tools:declared';\n if (effect.attachedClass) {\n containerPath = this._resolveAlias(effect.attachedClass, aliasMap);\n } else {\n await this._ensureWorkspaceToolsRoot();\n }\n\n await this._runGraphql(\n `mutation { at(path: ${JSON.stringify(containerPath)}) { create_submodel(subpath: ${JSON.stringify(effect.name)}, label: ${JSON.stringify(effect.name)}) { model { path } } } }`,\n `create effect model ${containerPath}:${effect.name}`,\n ).catch((error: Error) => {\n if (!error.message.includes('already exists')) throw error;\n });\n\n const toolPath = `${containerPath}:${effect.name}`;\n if (effect.description) {\n await this._runGraphql(\n `mutation { at(path: ${JSON.stringify(toolPath)}) { set_description(description: ${JSON.stringify(effect.description)}) { done } } }`,\n `set effect description on ${toolPath}`,\n );\n }\n await this._storeEffectSchemas(toolPath, effect);\n await this._applyEffectMetamodels(toolPath, effect.metamodels);\n }\n\n /**\n * Apply a single manifest operation via GraphQL\n */\n private async _applyOperation(op: ManifestOperation, aliasMap: Record<string, string>): Promise<void> {\n // 1. Relationship definition (standalone operation)\n if (op.defineRelationship) {\n const rel = op.defineRelationship;\n await this.defineRelationship({\n model: this._resolveAlias(rel.left, aliasMap),\n localSubmodel: rel.leftSubmodel,\n localIsMany: rel.leftIsMany,\n foreignModel: this._resolveAlias(rel.right, aliasMap),\n foreignSubmodel: rel.rightSubmodel,\n foreignIsMany: rel.rightIsMany,\n name: rel.name,\n });\n return;\n }\n\n // 2. Create a new model (optionally extending another)\n if (op.create) {\n const label = op.create.charAt(0).toUpperCase() + op.create.slice(1);\n const extendsRef = op.extends ? this._resolveAlias(op.extends, aliasMap) : undefined;\n const instanceOfRef = op.instanceOf ? this._resolveAlias(op.instanceOf, aliasMap) : undefined;\n\n if (extendsRef) {\n // Create model that extends a parent class\n await this._runGraphql(\n `mutation { create_model(path: \"${op.create}\", label: \"${label}\") { model { path } } }`,\n `create model ${op.create}`,\n );\n await this._runGraphql(\n `mutation { at(path: \"${op.create}\") { add_superclass(superclass: \"${extendsRef}\") { model { path } } } }`,\n `add superclass ${extendsRef} to ${op.create}`,\n );\n } else if (instanceOfRef) {\n // Create an instance of a type\n await this._runGraphql(\n `mutation { at(path: \"${instanceOfRef}\") { instantiate(path: \"${op.create}\", label: \"${label}\") { model { path } } } }`,\n `instantiate ${op.create} from ${instanceOfRef}`,\n );\n } else {\n // Create a standalone model\n await this._runGraphql(\n `mutation { create_model(path: \"${op.create}\", label: \"${label}\") { model { path } } }`,\n `create model ${op.create}`,\n );\n }\n\n // Apply fields (has) if present\n if (op.has) {\n await this._applyFields(op.create, op.has);\n }\n await this._applyModelMetamodels(op.create, op);\n if (op.withEffect) {\n await this._applyEffectDeclaration(op.withEffect, aliasMap);\n }\n return;\n }\n\n // 3. Modify an existing model\n if (op.on) {\n const target = this._resolveAlias(op.on, aliasMap);\n if (op.has) {\n await this._applyFields(target, op.has);\n }\n await this._applyModelMetamodels(target, op);\n if (op.withEffect) {\n await this._applyEffectDeclaration(op.withEffect, aliasMap);\n }\n return;\n }\n\n if (op.withEffect) {\n await this._applyEffectDeclaration(op.withEffect, aliasMap);\n }\n\n if (op.defineEventStream) {\n await this._applyEventStreamDeclaration(op.defineEventStream);\n }\n }\n\n /**\n * Apply field definitions (has) to a model via GraphQL\n */\n private async _applyFields(modelPath: string, fields: Record<string, ManifestPropertySpec>): Promise<void> {\n for (const [fieldName, spec] of Object.entries(fields)) {\n const fieldLabel = fieldName.charAt(0).toUpperCase() + fieldName.slice(1);\n\n // Create the submodel (field) on the model\n await this._runGraphql(\n `mutation {\n at(path: ${JSON.stringify(modelPath)}) {\n create_submodel(subpath: ${JSON.stringify(fieldName)}, label: ${JSON.stringify(fieldLabel)}) {\n model { path }\n }\n }\n }`,\n `create field ${modelPath}.${fieldName}`,\n ).catch((error: Error) => {\n if (!error.message.includes('already exists')) throw error;\n });\n\n // Set type prototype if provided (e.g. 'string', 'number', 'boolean')\n if (spec.type) {\n await this._runGraphql(\n `mutation {\n at(path: ${JSON.stringify(modelPath)}) {\n at(submodel: ${JSON.stringify(fieldName)}) {\n add_prototype(prototype: ${JSON.stringify(spec.type)}) { done }\n }\n }\n }`,\n `set prototype on ${modelPath}:${fieldName}`,\n );\n }\n\n // Set description if provided\n if (spec.description) {\n await this._runGraphql(\n `mutation {\n at(path: ${JSON.stringify(modelPath)}) {\n at(submodel: ${JSON.stringify(fieldName)}) {\n set_description(description: ${JSON.stringify(spec.description)}) { done }\n }\n }\n }`,\n `set description on ${modelPath}:${fieldName}`,\n );\n }\n\n // Set value if provided\n if (spec.value !== undefined && spec.value !== null) {\n if (typeof spec.value === 'string') {\n await this._runGraphql(\n `mutation {\n at(path: ${JSON.stringify(modelPath)}) {\n at(submodel: ${JSON.stringify(fieldName)}) {\n set_string_value(value: ${JSON.stringify(spec.value)}) { done }\n }\n }\n }`,\n `set string value on ${modelPath}:${fieldName}`,\n );\n } else if (typeof spec.value === 'number') {\n await this._runGraphql(\n `mutation {\n at(path: ${JSON.stringify(modelPath)}) {\n at(submodel: ${JSON.stringify(fieldName)}) {\n set_number_value(value: ${spec.value}) { done }\n }\n }\n }`,\n `set number value on ${modelPath}:${fieldName}`,\n );\n } else if (typeof spec.value === 'boolean') {\n await this._runGraphql(\n `mutation {\n at(path: ${JSON.stringify(modelPath)}) {\n at(submodel: ${JSON.stringify(fieldName)}) {\n set_boolean_value(value: ${spec.value}) { done }\n }\n }\n }`,\n `set boolean value on ${modelPath}:${fieldName}`,\n );\n }\n }\n\n // Set reference if provided\n if (spec.ref) {\n await this._runGraphql(\n `mutation {\n at(path: ${JSON.stringify(modelPath)}) {\n at(submodel: ${JSON.stringify(fieldName)}) {\n set_reference(reference: ${JSON.stringify(spec.ref)}) { done }\n }\n }\n }`,\n `set reference on ${modelPath}:${fieldName}`,\n );\n }\n\n await this._applyFieldMetamodels(`${modelPath}:${fieldName}`, spec);\n\n // Recurse into nested has\n if (spec.has) {\n await this._applyFields(`${modelPath}:${fieldName}`, spec.has);\n }\n }\n }\n\n // ==================== RECORD OBJECT ====================\n\n /**\n * Create or update an instance of a class in the graph.\n *\n * Uses `instantiate` under the hood, which has find-or-create semantics:\n * if an instance with the given `id` already exists for the class it is\n * returned; otherwise a new instance is created. Fields are then set\n * (overwriting previous values) and relationships are attached.\n *\n * The graph path is derived as `{className}_{id}` to ensure uniqueness\n * across classes (two objects of different classes may share the same\n * real-world ID). Relationship targets are also resolved automatically\n * using the foreign class from the relationship definition.\n *\n * @param options - The object specification\n * @returns The graph path, real-world ID, and creation status\n *\n * @example\n * ```typescript\n * // Create an author with fields\n * const result = await env.recordObject({\n * className: 'author',\n * id: 'tolkien',\n * label: 'J.R.R. Tolkien',\n * fields: { name: 'J.R.R. Tolkien', birth_year: 1892 },\n * relationships: { books: ['lotr', 'silmarillion'] },\n * });\n * // result.path → 'author_tolkien' (internal graph path)\n * // result.id → 'tolkien' (real-world ID)\n * // result.created → true\n * ```\n */\n async recordObject(options: RecordObjectOptions): Promise<RecordObjectResult> {\n const results = await this.recordObjects([options]);\n return results[0];\n }\n\n /**\n * Batch version of `recordObject()`.\n *\n * Sends several upserts through the control-plane batch endpoint so the\n * server can collapse the graph mutations into far fewer round trips.\n */\n async recordObjects(records: RecordObjectOptions[]): Promise<RecordObjectResult[]> {\n if (!Array.isArray(records) || records.length === 0) {\n return [];\n }\n\n const response = await this.controlPlaneRequest<{\n items: RecordObjectResult[];\n count: number;\n }>(\n `/control/environments/${this.environmentId}/records/batch`,\n {\n method: 'POST',\n body: JSON.stringify({ records }),\n },\n );\n\n return Array.isArray(response.items) ? response.items : [];\n }\n\n /**\n * Queue a background record import for this environment.\n */\n async enqueueRecordImport(\n records: RecordObjectOptions[],\n options: { batchSize?: number } = {},\n ): Promise<RecordImport> {\n return this.controlPlaneRequest<RecordImport>(\n `/control/environments/${this.environmentId}/record-imports`,\n {\n method: 'POST',\n body: JSON.stringify({\n records,\n batchSize: options.batchSize,\n }),\n },\n );\n }\n\n /**\n * List queued or completed record imports for this environment.\n */\n async listRecordImports(status?: RecordImportStatus): Promise<RecordImport[]> {\n const suffix = status ? `?status=${encodeURIComponent(status)}` : '';\n const response = await this.controlPlaneRequest<{ items: RecordImport[] }>(\n `/control/environments/${this.environmentId}/record-imports${suffix}`,\n );\n return Array.isArray(response.items) ? response.items : [];\n }\n\n /**\n * Fetch the latest aggregate import counters for this environment.\n */\n async getRecordImportSummary(): Promise<EnvironmentRecordImportSummary> {\n return this.controlPlaneRequest<EnvironmentRecordImportSummary>(\n `/control/environments/${this.environmentId}/record-imports/summary`,\n );\n }\n\n /**\n * Convenience helper returning queued + processing records for this environment.\n */\n async getAwaitingRecordCount(): Promise<number> {\n const summary = await this.getRecordImportSummary();\n return summary.awaitingRecords;\n }\n\n /**\n * Fetch a single record import by id.\n */\n async getRecordImport(importId: string): Promise<RecordImport> {\n return this.controlPlaneRequest<RecordImport>(`/control/record-imports/${importId}`);\n }\n\n /**\n * Cancel a queued/background record import.\n */\n async cancelRecordImport(importId: string): Promise<RecordImport> {\n return this.controlPlaneRequest<RecordImport>(\n `/control/record-imports/${importId}/cancel`,\n {\n method: 'POST',\n },\n );\n }\n\n // ==================== PUBLISH TOOLS ====================\n\n /**\n * Removed: environment-scoped effect publication is no longer supported.\n */\n async publishTools(tools: ToolWithHandler[], revision = '1.0.0'): Promise<PublishToolsResult> {\n return super.publishTools(tools, revision);\n }\n\n /**\n * Removed: environment-scoped effect publication is no longer supported.\n */\n async publishEffect(effect: ToolWithHandler): Promise<PublishToolsResult> {\n return super.publishEffect(effect);\n }\n\n /**\n * Removed: environment-scoped effect publication is no longer supported.\n */\n async publishEffects(effects: ToolWithHandler[]): Promise<PublishToolsResult> {\n return super.publishEffects(effects);\n }\n\n /**\n * Removed: environment-scoped effect publication is no longer supported.\n */\n async unpublishEffect(name: string): Promise<PublishToolsResult> {\n return super.unpublishEffect(name);\n }\n\n /**\n * Removed: environment-scoped effect publication is no longer supported.\n */\n async unpublishAllEffects(): Promise<PublishToolsResult> {\n return super.unpublishAllEffects();\n }\n}\n\nexport class Granular {\n private apiKey: string;\n private apiUrl: string;\n private httpUrl: string;\n private tokenProvider?: AccessTokenProvider;\n private WebSocketCtor?: any;\n private onUnexpectedClose?: (info: WSDisconnectInfo) => void;\n private onReconnectError?: (info: WSReconnectErrorInfo) => void;\n\n /** Sandbox-level effect registry: sandboxId → (effectKey → ToolWithHandler) */\n private sandboxEffects: Map<string, Map<string, ToolWithHandler>> = new Map();\n /** Live sandbox-scoped effect hosts keyed by sandboxId */\n private sandboxEffectHosts: Map<string, SandboxEffectHost> = new Map();\n /** In-flight host connection promises to avoid duplicate concurrent connects */\n private sandboxEffectHostPromises: Map<string, Promise<SandboxEffectHost>> = new Map();\n\n /**\n * Create a new Granular client\n * @param options - Client configuration\n */\n constructor(options: GranularOptions) {\n const auth = options.token ?? options.apiKey;\n if (!auth) {\n throw new Error('Granular client requires either apiKey or token. Set GRANULAR_API_KEY or GRANULAR_TOKEN, or pass one in options.');\n }\n this.apiUrl = resolveApiUrl(options.apiUrl, options.endpointMode);\n this.apiKey = resolveAuthTokenForApiUrl(auth, this.apiUrl);\n this.tokenProvider = options.tokenProvider;\n this.WebSocketCtor = options.WebSocketCtor;\n this.onUnexpectedClose = options.onUnexpectedClose;\n this.onReconnectError = options.onReconnectError;\n // Convert WebSocket URL to HTTP URL for REST API\n this.httpUrl = this.apiUrl\n .replace(/^wss:\\/\\//, 'https://')\n .replace(/^ws:\\/\\//, 'http://')\n .replace(/\\/ws$/, '');\n }\n\n /**\n * Records/upserts a user and prepares them for sandbox connections\n * \n * @param options - User options\n * @returns The recorded user with both `userId` and `granularId`\n * \n * @example\n * ```typescript\n * const user = await granular.recordUser({\n * userId: 'user_123',\n * name: 'John Doe',\n * permissions: ['agent'],\n * });\n * ```\n */\n async recordUser(options: RecordUserOptions): Promise<User> {\n // Create or get subject via control plane\n const subject = normalizeSubject(await this.request<Subject>('/control/subjects', {\n method: 'POST',\n body: JSON.stringify({\n identityId: options.userId,\n name: options.name,\n email: options.email,\n }),\n }));\n\n return normalizeUser({\n granularId: subject.granularId,\n userId: options.userId,\n subjectId: subject.subjectId,\n identityId: subject.identityId,\n name: options.name || subject.name || undefined,\n email: options.email || subject.email || undefined,\n permissions: options.permissions || [],\n });\n }\n\n private async resolveConnectUser(options: ConnectOptions): Promise<ResolvedConnectUser> {\n if (options.user) {\n const user = normalizeUser(options.user);\n return {\n granularId: user.granularId,\n userId: user.userId,\n name: options.name || user.name,\n email: options.email || user.email,\n permissions: options.permissions || user.permissions,\n };\n }\n\n if (options.userId) {\n const user = await this.recordUser({\n userId: options.userId,\n name: options.name,\n email: options.email,\n permissions: options.permissions,\n });\n return {\n granularId: user.granularId,\n userId: user.userId,\n name: user.name,\n email: user.email,\n permissions: options.permissions || user.permissions,\n };\n }\n\n if (options.granularId) {\n const subject = await this.subjects.get(options.granularId);\n return {\n granularId: subject.granularId,\n userId: subject.userId,\n name: options.name || subject.name || undefined,\n email: options.email || subject.email || undefined,\n permissions: options.permissions || [],\n };\n }\n\n throw new Error('connect() requires either userId, granularId, or a user object returned by recordUser().');\n }\n\n /**\n * Connect to an ontology environment and establish a real-time session.\n * \n * Effects are registered at the sandbox level via `granular.registerEffect()`\n * or `granular.registerEffects()`. Sessions pick up live availability from\n * the sandbox registry automatically.\n * \n * @param options - Connection options\n * @returns An active environment session\n * \n * @example\n * ```typescript\n * const environment = await granular.connect({\n * ontology: 'my-ontology',\n * environment: 'dev',\n * userId: 'user_123',\n * permissions: ['agent'],\n * });\n * \n * await granular.registerEffect('my-sandbox', {\n * name: 'greet',\n * description: 'Say hello',\n * inputSchema: { type: 'object', properties: {} },\n * handler: async () => 'Hello!',\n * });\n * \n * // Submit job\n * const job = await environment.submitJob(`\n * import { tools } from './sandbox-tools';\n * return await tools.greet({});\n * `);\n * \n * console.log(await job.result); // 'Hello!'\n * ```\n */\n async connect(options: ConnectOptions): Promise<Environment> {\n const clientId = options.clientId || `client_${Date.now()}`;\n const ontology = options.ontology;\n if (!ontology) {\n throw new Error('connect() requires `ontology`.');\n }\n\n const environmentName = options.environment;\n if (!environmentName) {\n throw new Error('connect() requires `environment`.');\n }\n const tagName = options.tagName?.trim() || undefined;\n const user = await this.resolveConnectUser(options);\n\n // 1. Find or create the ontology container\n const sandbox = await this.findOrCreateSandbox(ontology);\n\n // 2. Ensure permission profiles and assignments exist for each permission\n for (const profileName of user.permissions) {\n const profileId = await this.ensurePermissionProfile(sandbox.sandboxId, profileName);\n await this.ensureAssignment(user.granularId, sandbox.sandboxId, profileId);\n }\n\n // 3. Create the environment\n const envData = await this.environments.create(sandbox.sandboxId, {\n subjectId: user.granularId,\n environment: environmentName,\n tagName,\n permissionProfileId: null,\n });\n\n // Ensure the runtime graph is loaded before opening the session.\n await this.activateEnvironment(envData.environmentId);\n\n const session = await this.request<{\n sessionId: string;\n docId: string;\n wsUrl: string;\n token: string;\n expiresAt: number;\n }>('/ws/sessions', {\n method: 'POST',\n body: JSON.stringify({\n environmentId: envData.environmentId,\n clientId,\n initialHeap: options.initialHeap,\n }),\n });\n\n return this.bindWebSocketEnvironment(envData, clientId, session);\n }\n\n /**\n * List active (open) sessions for an environment — each session is one agent conversation thread.\n */\n async listOpenSessions(filters: { environmentId: string }): Promise<ConversationSessionInfo[]> {\n return this.listSessionsForEnvironment(filters.environmentId, 'active');\n }\n\n /**\n * List closed sessions for an environment (conversations that have disconnected).\n */\n async listClosedSessions(filters: { environmentId: string }): Promise<ConversationSessionInfo[]> {\n return this.listSessionsForEnvironment(filters.environmentId, 'closed');\n }\n\n private async listSessionsForEnvironment(\n environmentId: string,\n status: 'active' | 'closed',\n ): Promise<ConversationSessionInfo[]> {\n const query = new URLSearchParams({ environmentId, status });\n const res = await this.request<{ items: Record<string, unknown>[] }>(\n `/control/sessions?${query.toString()}`,\n );\n const items = Array.isArray(res.items) ? res.items : [];\n return items.map((row) => this.normalizeConversationSession(row));\n }\n\n private normalizeConversationSession(row: Record<string, unknown>): ConversationSessionInfo {\n const sessionId = String(row.sessionId ?? row.session_id ?? '');\n const environmentId = String(row.environmentId ?? row.environment_id ?? '');\n return {\n sessionId,\n tenantId: row.tenantId != null ? String(row.tenantId) : undefined,\n environmentId,\n versionId: row.versionId != null ? String(row.versionId) : null,\n docId: String(row.docId ?? row.doc_id ?? ''),\n status: (row.status as ConversationSessionInfo['status']) || 'active',\n createdAt: Granular.coerceIsoDate(row.createdAt ?? row.created_at),\n lastSeenAt: Granular.coerceIsoDate(row.lastSeenAt ?? row.last_seen_at),\n summary: row.summary != null ? String(row.summary) : null,\n summaryUpdatedAt: row.summaryUpdatedAt != null || row.summary_updated_at != null\n ? Granular.coerceIsoDate(row.summaryUpdatedAt ?? row.summary_updated_at)\n : null,\n subjectId: row.subjectId != null ? String(row.subjectId) : null,\n jobCount: typeof row.jobCount === 'number' ? row.jobCount : undefined,\n toolCallCount: typeof row.toolCallCount === 'number' ? row.toolCallCount : undefined,\n };\n }\n\n private static coerceIsoDate(value: unknown): string {\n if (value instanceof Date) {\n return value.toISOString();\n }\n if (typeof value === 'number') {\n return new Date(value).toISOString();\n }\n if (typeof value === 'string') {\n return value;\n }\n return new Date(0).toISOString();\n }\n\n /**\n * Create a new session (conversation) for an existing environment and connect to it.\n * The runtime graph is shared across all sessions for the same environment.\n */\n async createSession(options: {\n environmentId: string;\n clientId?: string;\n initialHeap?: ConnectOptions['initialHeap'];\n }): Promise<Environment> {\n const clientId = options.clientId || `client_${Date.now()}`;\n await this.activateEnvironment(options.environmentId);\n const envData = await this.environments.get(options.environmentId);\n const session = await this.request<{\n sessionId: string;\n docId: string;\n wsUrl: string;\n token: string;\n expiresAt: number;\n }>('/ws/sessions', {\n method: 'POST',\n body: JSON.stringify({\n environmentId: options.environmentId,\n clientId,\n initialHeap: options.initialHeap,\n }),\n });\n return this.bindWebSocketEnvironment(envData, clientId, session);\n }\n\n /**\n * Connect to an existing open session (same conversation thread) using a freshly minted WebSocket token.\n */\n async connectSession(options: { sessionId: string; clientId?: string }): Promise<Environment> {\n const clientId = options.clientId || `client_${Date.now()}`;\n const minted = await this.request<{\n sessionId: string;\n environmentId: string;\n wsUrl: string;\n token: string;\n expiresAt: number;\n }>(`/ws/sessions/${encodeURIComponent(options.sessionId)}/token`, {\n method: 'POST',\n body: JSON.stringify({}),\n });\n const envData = await this.environments.get(minted.environmentId);\n return this.bindWebSocketEnvironment(envData, clientId, minted);\n }\n\n /**\n * Mark a session closed in the control plane. If `environment` is the connected handle for that\n * `sessionId`, disconnects the WebSocket so the runtime tears down cleanly.\n */\n async closeSession(sessionId: string, environment?: Environment | null): Promise<void> {\n if (environment && environment.sessionId === sessionId) {\n await environment.disconnect();\n return;\n }\n await this.request(`/control/sessions/${encodeURIComponent(sessionId)}`, {\n method: 'PATCH',\n body: JSON.stringify({\n status: 'closed',\n lastSeenAt: new Date().toISOString(),\n }),\n });\n }\n\n /**\n * Re-open a closed session in the index and connect to its existing runtime document.\n */\n async reopenSession(sessionId: string, options?: { clientId?: string }): Promise<Environment> {\n await this.request(`/control/sessions/${encodeURIComponent(sessionId)}`, {\n method: 'PATCH',\n body: JSON.stringify({\n status: 'active',\n lastSeenAt: new Date().toISOString(),\n }),\n });\n return this.connectSession({ sessionId, clientId: options?.clientId });\n }\n\n private async bindWebSocketEnvironment(\n envData: EnvironmentData,\n clientId: string,\n session: { sessionId: string; wsUrl: string; token: string },\n ): Promise<Environment> {\n const client = new WSClient({\n url: session.wsUrl,\n sessionId: session.sessionId,\n token: session.token,\n tokenProvider: this.tokenProvider,\n WebSocketCtor: this.WebSocketCtor,\n onUnexpectedClose: this.onUnexpectedClose,\n onReconnectError: this.onReconnectError,\n });\n\n await client.connect();\n\n const graphqlEndpoint = `${this.httpUrl}/orchestrator/graphql`;\n const environment = new Environment(client, envData, clientId, this.apiKey, graphqlEndpoint);\n\n await environment.hello();\n\n return environment;\n }\n\n private async activateEnvironment(environmentId: string): Promise<void> {\n await this.request<{\n environmentId: string;\n status: 'active';\n }>(`/orchestrator/runtime/environments/${environmentId}/activate`, {\n method: 'POST',\n body: JSON.stringify({}),\n });\n }\n\n // ── Sandbox-Level Effects ──\n\n private getSandboxEffectMap(sandboxId: string): Map<string, ToolWithHandler> {\n let effects = this.sandboxEffects.get(sandboxId);\n if (!effects) {\n effects = new Map();\n this.sandboxEffects.set(sandboxId, effects);\n }\n return effects;\n }\n\n private serializeEffect(effect: ToolWithHandler): ToolSchema {\n return {\n effectKey: computeEffectKey(effect),\n name: effect.name,\n description: effect.description,\n inputSchema: effect.inputSchema,\n outputSchema: effect.outputSchema,\n stability: effect.stability || 'stable',\n provenance: effect.provenance || { source: 'custom' },\n tags: effect.tags,\n className: effect.className,\n static: effect.static,\n };\n }\n\n private async publishSandboxEffectCatalog(host: SandboxEffectHost): Promise<void> {\n const effects = Array.from(this.getSandboxEffectMap(host.sandboxId).values()).map((effect) =>\n this.serializeEffect(effect),\n );\n\n const result = await host.wsClient.call('effects.publishCatalog', { effects }) as {\n accepted?: boolean;\n acceptedCount?: number;\n rejected?: Array<{ name?: string; reason?: string }>;\n };\n\n const acceptedCount = typeof result?.acceptedCount === 'number'\n ? result.acceptedCount\n : 0;\n const rejected = Array.isArray(result?.rejected) ? result.rejected : [];\n\n if (acceptedCount === 0 && rejected.length > 0) {\n const detail = rejected\n .map((entry) => `${entry.name || 'unknown'}: ${entry.reason || 'rejected'}`)\n .join('; ');\n throw new Error(\n `Failed to publish live effects for sandbox ${host.sandboxId}: ${detail}`,\n );\n }\n\n if (rejected.length > 0) {\n console.warn(\n `[Granular] Some live effects were rejected for sandbox ${host.sandboxId}:`,\n rejected,\n );\n }\n }\n\n private async syncSandboxEffectCatalog(sandboxId: string): Promise<void> {\n const host = await this.ensureSandboxEffectHost(sandboxId);\n await this.publishSandboxEffectCatalog(host);\n }\n\n private recoverEffectHost(host: SandboxEffectHost, error: unknown): void {\n if (host.recovering) {\n return;\n }\n\n if (this.sandboxEffectHosts.get(host.sandboxId) !== host) {\n return;\n }\n\n host.recovering = true;\n this.stopEffectHostHeartbeat(host);\n this.sandboxEffectHosts.delete(host.sandboxId);\n\n try {\n host.wsClient.disconnect();\n } catch (disconnectError) {\n console.warn(\n `[Granular] Failed to disconnect stale effect host for sandbox ${host.sandboxId}:`,\n disconnectError,\n );\n }\n\n void this.ensureSandboxEffectHost(host.sandboxId).catch((reconnectError) => {\n console.error(\n `[Granular] Failed to recover effect host for sandbox ${host.sandboxId} after heartbeat failure:`,\n reconnectError,\n );\n console.error('[Granular] Original heartbeat failure:', error);\n });\n }\n\n private startEffectHostHeartbeat(host: SandboxEffectHost): void {\n if (host.heartbeatTimer) {\n clearInterval(host.heartbeatTimer);\n }\n\n host.heartbeatInFlight = false;\n\n const sendHeartbeat = (failureLabel: string, recoverOnFailure: boolean): void => {\n if (host.heartbeatInFlight || host.recovering) {\n return;\n }\n\n host.heartbeatInFlight = true;\n host.wsClient.call('client.heartbeat', {})\n .catch((error) => {\n console.warn(`${failureLabel} ${host.sandboxId}:`, error);\n if (recoverOnFailure) {\n this.recoverEffectHost(host, error);\n }\n })\n .finally(() => {\n host.heartbeatInFlight = false;\n });\n };\n\n sendHeartbeat('[Granular] Initial effect host heartbeat failed for sandbox', false);\n\n host.heartbeatTimer = setInterval(() => {\n sendHeartbeat('[Granular] Effect host heartbeat failed for sandbox', true);\n }, 10_000);\n }\n\n private stopEffectHostHeartbeat(host?: SandboxEffectHost): void {\n if (!host?.heartbeatTimer) {\n return;\n }\n clearInterval(host.heartbeatTimer);\n host.heartbeatTimer = null;\n host.heartbeatInFlight = false;\n }\n\n private async synchronizeEffectHost(host: SandboxEffectHost): Promise<void> {\n await host.wsClient.call('client.hello', {\n clientId: host.clientId,\n protocolVersion: '2.0',\n });\n this.startEffectHostHeartbeat(host);\n await this.publishSandboxEffectCatalog(host);\n }\n\n private async ensureSandboxEffectHost(sandboxId: string): Promise<SandboxEffectHost> {\n const existing = this.sandboxEffectHosts.get(sandboxId);\n if (existing) {\n return existing;\n }\n\n const inflight = this.sandboxEffectHostPromises.get(sandboxId);\n if (inflight) {\n return inflight;\n }\n\n const connectPromise = (async () => {\n const effectClientId = crypto.randomUUID();\n const clientId = `effect-host:${sandboxId}:${effectClientId}`;\n const wsClient = new WSClient({\n url: buildEffectHostUrl(this.apiUrl, sandboxId, effectClientId, clientId),\n sessionId: `effect-host:${effectClientId}`,\n token: this.apiKey,\n tokenProvider: this.tokenProvider,\n WebSocketCtor: this.WebSocketCtor,\n onUnexpectedClose: this.onUnexpectedClose,\n onReconnectError: this.onReconnectError,\n });\n\n const host: SandboxEffectHost = {\n sandboxId,\n effectClientId,\n clientId,\n wsClient,\n heartbeatTimer: null,\n heartbeatInFlight: false,\n recovering: false,\n };\n\n wsClient.registerRpcHandler('effect.invoke', async (params: unknown) => {\n const request = params as {\n effectKey: string;\n effectName: string;\n input: any;\n context: any;\n };\n return invokeRegisteredEffect(this.getSandboxEffectMap(sandboxId), request);\n });\n\n wsClient.on('open', () => {\n void this.synchronizeEffectHost(host).catch((error) => {\n console.error(\n `[Granular] Failed to re-sync effect host for sandbox ${sandboxId}:`,\n error,\n );\n });\n });\n\n wsClient.on('disconnect', () => {\n this.stopEffectHostHeartbeat(host);\n });\n\n await wsClient.connect();\n await this.synchronizeEffectHost(host);\n this.sandboxEffectHosts.set(sandboxId, host);\n return host;\n })();\n\n this.sandboxEffectHostPromises.set(sandboxId, connectPromise);\n try {\n return await connectPromise;\n } finally {\n this.sandboxEffectHostPromises.delete(sandboxId);\n }\n }\n\n private disconnectSandboxEffectHost(sandboxId: string): void {\n const host = this.sandboxEffectHosts.get(sandboxId);\n if (!host) {\n return;\n }\n\n this.stopEffectHostHeartbeat(host);\n host.wsClient.disconnect();\n this.sandboxEffectHosts.delete(sandboxId);\n }\n\n /**\n * Register an effect (tool) for a specific sandbox.\n *\n * @param sandboxNameOrId - The name or ID of the sandbox\n * @param effect - The tool definition and handler\n */\n async registerEffect(sandboxNameOrId: string, effect: ToolWithHandler): Promise<void> {\n const sandbox = await this.findOrCreateSandbox(sandboxNameOrId);\n const sandboxId = sandbox.sandboxId;\n this.getSandboxEffectMap(sandboxId).set(computeEffectKey(effect), effect);\n await this.syncSandboxEffectCatalog(sandboxId);\n }\n\n /**\n * Register multiple effects (tools) for a specific sandbox.\n * \n * batch version of `registerEffect`.\n */\n async registerEffects(sandboxNameOrId: string, effects: ToolWithHandler[]): Promise<void> {\n const sandbox = await this.findOrCreateSandbox(sandboxNameOrId);\n const sandboxId = sandbox.sandboxId;\n const map = this.getSandboxEffectMap(sandboxId);\n for (const effect of effects) {\n map.set(computeEffectKey(effect), effect);\n }\n await this.syncSandboxEffectCatalog(sandboxId);\n }\n\n /**\n * Unregister an effect from a sandbox.\n * \n * Removes it from the local sandbox registry and updates the\n * sandbox-scoped live catalog.\n */\n async unregisterEffect(sandboxNameOrId: string, name: string): Promise<void> {\n const sandbox = await this.findOrCreateSandbox(sandboxNameOrId);\n const sandboxId = sandbox.sandboxId;\n const currentMap = this.sandboxEffects.get(sandboxId);\n if (!currentMap) {\n return;\n }\n\n const nextEntries = Array.from(currentMap.entries()).filter(\n ([effectKey, effect]) => effectKey !== name && effect.name !== name,\n );\n\n if (nextEntries.length === currentMap.size) {\n return;\n }\n\n const nextMap = new Map(nextEntries);\n this.sandboxEffects.set(sandboxId, nextMap);\n\n if (nextMap.size === 0) {\n this.disconnectSandboxEffectHost(sandboxId);\n this.sandboxEffects.delete(sandboxId);\n return;\n }\n\n await this.syncSandboxEffectCatalog(sandboxId);\n }\n\n /**\n * Disconnect one sandbox-scoped effect host, or all of them when no sandbox is provided.\n *\n * This is primarily useful for long-lived helper processes such as generated\n * `granular-effects.ts` scripts that need to shut down cleanly on SIGINT/SIGTERM.\n */\n async disconnectEffects(sandboxNameOrId?: string): Promise<void> {\n if (sandboxNameOrId) {\n const sandbox = await this.findOrCreateSandbox(sandboxNameOrId);\n this.disconnectSandboxEffectHost(sandbox.sandboxId);\n return;\n }\n\n for (const sandboxId of Array.from(this.sandboxEffectHosts.keys())) {\n this.disconnectSandboxEffectHost(sandboxId);\n }\n }\n\n /**\n * Unregister all effects for a sandbox.\n */\n async unregisterAllEffects(sandboxNameOrId: string): Promise<void> {\n const sandbox = await this.findOrCreateSandbox(sandboxNameOrId);\n const sandboxId = sandbox.sandboxId;\n this.sandboxEffects.delete(sandboxId);\n this.disconnectSandboxEffectHost(sandboxId);\n }\n\n /**\n * Find a sandbox by name or create it if it doesn't exist\n */\n private async findOrCreateSandbox(nameOrId: string): Promise<Sandbox> {\n try {\n // Try to get by ID first\n const sandbox = await this.sandboxes.get(nameOrId);\n return sandbox;\n } catch {\n // If not found by ID, try to find by name or create\n const sandboxes = await this.sandboxes.list();\n const existing = sandboxes.items.find(s => s.name === nameOrId);\n if (existing) {\n return existing;\n }\n\n // Create new sandbox\n const created = await this.sandboxes.create({ name: nameOrId });\n return created;\n }\n }\n\n /**\n * Ensure a permission profile exists for a sandbox, creating it if needed.\n * If profileName matches an existing profile name, returns its ID.\n * Otherwise, creates a new profile with default allow-all rules.\n */\n private async ensurePermissionProfile(\n sandboxId: string,\n profileName: string\n ): Promise<string> {\n try {\n // Check if profile already exists by name\n const profiles = await this.permissionProfiles.list(sandboxId);\n const existing = profiles.find((p) => p.name === profileName);\n if (existing) {\n return existing.permissionProfileId;\n }\n } catch {\n // Ignore lookup errors, try to create\n }\n\n // Create new profile with default rules (allow all tools)\n const created = await this.permissionProfiles.create(sandboxId, {\n name: profileName,\n rules: {\n effects: { allow: ['*'] },\n resources: { allow: ['*'] },\n },\n });\n return created.permissionProfileId;\n }\n\n /**\n * Ensure an assignment exists for a subject in a sandbox with a permission profile\n */\n private async ensureAssignment(\n subjectId: string,\n sandboxId: string,\n permissionProfileId: string\n ): Promise<void> {\n try {\n const assignments = await this.request<AssignmentListResponse>(\n `/control/subjects/${subjectId}/assignments`\n );\n // Check for ANY assignment in this sandbox\n const existing = assignments.items.find(\n (a) => a.sandboxId === sandboxId\n );\n\n if (existing) {\n // If assignment exists with same profile, we are done\n if (existing.permissionProfileId === permissionProfileId) {\n return;\n }\n\n // If assignment exists but with different profile, delete it first\n // This avoids UNIQUE constraint violation when creating the new one\n await this.request<DeleteResponse>(`/control/assignments/${existing.assignmentId}`, {\n method: 'DELETE'\n });\n }\n } catch {\n // Ignore lookup errors\n }\n\n await this.request<Assignment>(`/control/subjects/${subjectId}/assignments`, {\n method: 'POST',\n body: JSON.stringify({\n sandboxId,\n subjectId,\n permissionProfileId,\n }),\n });\n }\n\n /**\n * Sandbox management API\n */\n get sandboxes() {\n return {\n list: async (): Promise<SandboxListResponse> => {\n return this.request<SandboxListResponse>('/control/sandboxes');\n },\n get: async (id: string): Promise<Sandbox> => {\n return this.request<Sandbox>(`/control/sandboxes/${id}`);\n },\n create: async (data: CreateSandboxData): Promise<Sandbox> => {\n return this.request<Sandbox>('/control/sandboxes', {\n method: 'POST',\n body: JSON.stringify(data),\n });\n },\n update: async (id: string, data: Partial<CreateSandboxData>): Promise<Sandbox> => {\n return this.request<Sandbox>(`/control/sandboxes/${id}`, {\n method: 'PATCH',\n body: JSON.stringify(data),\n });\n },\n delete: async (id: string): Promise<DeleteResponse> => {\n return this.request<DeleteResponse>(`/control/sandboxes/${id}`, {\n method: 'DELETE',\n });\n },\n };\n }\n\n /**\n * Permission Profile management for sandboxes\n */\n get permissionProfiles() {\n return {\n list: async (sandboxId: string): Promise<PermissionProfile[]> => {\n const result = await this.request<PermissionProfileListResponse>(\n `/control/sandboxes/${sandboxId}/permission-profiles`\n );\n return result.items;\n },\n get: async (sandboxId: string, profileId: string): Promise<PermissionProfile> => {\n return this.request<PermissionProfile>(\n `/control/sandboxes/${sandboxId}/permission-profiles/${profileId}`\n );\n },\n create: async (\n sandboxId: string,\n data: CreatePermissionProfileData\n ): Promise<PermissionProfile> => {\n return this.request<PermissionProfile>(\n `/control/sandboxes/${sandboxId}/permission-profiles`,\n {\n method: 'POST',\n body: JSON.stringify(data),\n }\n );\n },\n delete: async (sandboxId: string, profileId: string): Promise<DeleteResponse> => {\n return this.request<DeleteResponse>(\n `/control/sandboxes/${sandboxId}/permission-profiles/${profileId}`,\n {\n method: 'DELETE',\n }\n );\n },\n };\n }\n\n /**\n * Environment management\n */\n get environments() {\n return {\n list: async (sandboxId: string): Promise<EnvironmentData[]> => {\n const result = await this.request<EnvironmentListResponse>(\n `/control/sandboxes/${sandboxId}/environments`\n );\n return result.items.map(normalizeEnvironmentData);\n },\n get: async (environmentId: string): Promise<EnvironmentData> => {\n return normalizeEnvironmentData(\n await this.request<EnvironmentData>(`/control/environments/${environmentId}`)\n );\n },\n create: async (\n sandboxId: string,\n data: CreateEnvironmentData\n ): Promise<EnvironmentData> => {\n const environmentName = data.environment || data.envName;\n return normalizeEnvironmentData(await this.request<EnvironmentData>(`/control/sandboxes/${sandboxId}/environments`, {\n method: 'POST',\n body: JSON.stringify({\n ...data,\n envName: environmentName,\n }),\n }));\n },\n delete: async (environmentId: string): Promise<DeleteResponse> => {\n return this.request<DeleteResponse>(`/control/environments/${environmentId}`, {\n method: 'DELETE',\n });\n },\n };\n }\n\n /**\n * Event stream operations: query, subscribe, and acknowledge stream events\n */\n get streams() {\n return {\n getEvents: async (params: {\n ontology: string;\n stream: string;\n environment?: string;\n session?: string;\n eventTypes?: string[];\n since?: Date;\n until?: Date;\n isAcked?: boolean;\n limit?: number;\n offset?: number;\n }): Promise<StreamEvent[]> => {\n const sandbox = await this._resolveSandboxId(params.ontology);\n const query = new URLSearchParams({ sandboxId: sandbox });\n if (params.environment) query.set('environmentId', params.environment);\n if (params.session) query.set('sessionId', params.session);\n if (params.stream) query.set('streamName', params.stream);\n if (params.eventTypes && params.eventTypes.length > 0) {\n query.set('eventTypes', params.eventTypes.join(','));\n }\n if (params.since) query.set('since', params.since.toISOString());\n if (params.until) query.set('until', params.until.toISOString());\n if (params.isAcked !== undefined) query.set('isAcked', params.isAcked ? '1' : '0');\n if (params.limit) query.set('limit', String(params.limit));\n if (params.offset) query.set('offset', String(params.offset));\n\n const result = await this.request<{ items: any[] }>(`/control/stream-events?${query.toString()}`);\n return (result.items || []).map((row: any) => ({\n eventId: row.event_id,\n streamName: row.stream_name,\n eventType: row.event_type,\n payload: typeof row.payload === 'string' ? JSON.parse(row.payload) : row.payload,\n environmentId: row.environment_id,\n sessionId: row.session_id,\n subjectId: row.subject_id,\n source: row.source,\n isAcked: Boolean(row.is_acked),\n createdAt: row.created_at,\n }));\n },\n\n subscribe: (params: {\n ontology: string;\n stream: string;\n environment?: string;\n session?: string;\n eventTypes?: string[];\n since?: Date;\n onEvent: (event: StreamEvent) => void;\n onError?: (err: Error) => void;\n pollIntervalMs?: number;\n }): StreamSubscription => {\n const interval = params.pollIntervalMs ?? 5000;\n let cursor = params.since || new Date();\n let running = true;\n const seenEventIds = new Set<string>();\n\n const poll = async () => {\n while (running) {\n try {\n const events = await this.streams.getEvents({\n ontology: params.ontology,\n stream: params.stream,\n environment: params.environment,\n session: params.session,\n eventTypes: params.eventTypes,\n since: cursor,\n limit: 100,\n });\n\n const orderedEvents = [...events].sort((a, b) => a.createdAt - b.createdAt);\n for (const event of orderedEvents) {\n if (seenEventIds.has(event.eventId)) {\n continue;\n }\n seenEventIds.add(event.eventId);\n const eventTime = new Date(event.createdAt * 1000);\n if (eventTime > cursor) {\n cursor = eventTime;\n }\n params.onEvent(event);\n }\n } catch (err) {\n params.onError?.(err instanceof Error ? err : new Error(String(err)));\n }\n\n await new Promise(resolve => setTimeout(resolve, interval));\n }\n };\n\n poll();\n return { unsubscribe: () => { running = false; } };\n },\n\n ack: async (eventId: string): Promise<void> => {\n await this.request('/control/stream-events/ack', {\n method: 'POST',\n body: JSON.stringify({ eventIds: [eventId] }),\n });\n },\n\n ackBatch: async (eventIds: string[]): Promise<void> => {\n await this.request('/control/stream-events/ack', {\n method: 'POST',\n body: JSON.stringify({ eventIds }),\n });\n },\n\n getStats: async (params: {\n ontology: string;\n environment?: string;\n }): Promise<StreamStats[]> => {\n const sandbox = await this._resolveSandboxId(params.ontology);\n const query = new URLSearchParams({ sandboxId: sandbox });\n if (params.environment) query.set('environmentId', params.environment);\n\n const result = await this.request<{ items: any[] }>(`/control/stream-events/stats?${query.toString()}`);\n return (result.items || []).map((row: any) => ({\n streamName: row.stream_name,\n eventType: row.event_type,\n total: Number(row.total),\n last1h: Number(row.last_1h),\n last24h: Number(row.last_24h),\n unacked: Number(row.unacked),\n }));\n },\n };\n }\n\n /**\n * Subject management\n */\n get subjects() {\n return {\n get: async (subjectId: string): Promise<Subject> => {\n return normalizeSubject(await this.request<Subject>(`/control/subjects/${subjectId}`));\n },\n listAssignments: async (subjectId: string): Promise<AssignmentListResponse> => {\n return this.request<AssignmentListResponse>(`/control/subjects/${subjectId}/assignments`);\n },\n };\n }\n\n /**\n * @deprecated Use recordUser() instead\n */\n get users() {\n return {\n create: async (data: { id: string; name?: string; email?: string }): Promise<Subject> => {\n return normalizeSubject(await this.request<Subject>('/control/subjects', {\n method: 'POST',\n body: JSON.stringify({\n identityId: data.id,\n name: data.name,\n email: data.email,\n }),\n }));\n },\n get: async (id: string): Promise<Subject> => {\n return normalizeSubject(await this.request<Subject>(`/control/subjects/${id}`));\n },\n };\n }\n\n private async _resolveSandboxId(ontologyNameOrId: string): Promise<string> {\n if (ontologyNameOrId.startsWith('sbx_')) return ontologyNameOrId;\n const result = await this.request<SandboxListResponse>(`/control/sandboxes?name=${encodeURIComponent(ontologyNameOrId)}`);\n if (result.items.length === 0) throw new Error(`Ontology not found: ${ontologyNameOrId}`);\n return result.items[0].sandboxId;\n }\n\n /**\n * Make an authenticated API request\n */\n private async request<T>(path: string, options: RequestInit = {}): Promise<T> {\n const url = `${this.httpUrl}${path}`;\n console.log(`[SDK] Requesting: ${url}`);\n\n const response = await fetch(url, {\n ...options,\n headers: {\n 'Authorization': `Bearer ${this.apiKey}`,\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(`Granular API Error (${response.status}): ${errorText}`);\n }\n\n if (response.status === 204) {\n return { deleted: true } as T;\n }\n\n return response.json() as Promise<T>;\n }\n}\n"]}