@clawos-dev/clawd 0.2.1 → 0.2.2-beta.1.e86e2eb

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/cli.cjs.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../node_modules/.pnpm/pino-std-serializers@7.1.0/node_modules/pino-std-serializers/lib/err-helpers.js","../../node_modules/.pnpm/pino-std-serializers@7.1.0/node_modules/pino-std-serializers/lib/err-proto.js","../../node_modules/.pnpm/pino-std-serializers@7.1.0/node_modules/pino-std-serializers/lib/err.js","../../node_modules/.pnpm/pino-std-serializers@7.1.0/node_modules/pino-std-serializers/lib/err-with-cause.js","../../node_modules/.pnpm/pino-std-serializers@7.1.0/node_modules/pino-std-serializers/lib/req.js","../../node_modules/.pnpm/pino-std-serializers@7.1.0/node_modules/pino-std-serializers/lib/res.js","../../node_modules/.pnpm/pino-std-serializers@7.1.0/node_modules/pino-std-serializers/index.js","../../node_modules/.pnpm/pino@9.14.0/node_modules/pino/lib/caller.js","../../node_modules/.pnpm/@pinojs+redact@0.4.0/node_modules/@pinojs/redact/index.js","../../node_modules/.pnpm/pino@9.14.0/node_modules/pino/lib/symbols.js","../../node_modules/.pnpm/pino@9.14.0/node_modules/pino/lib/redaction.js","../../node_modules/.pnpm/pino@9.14.0/node_modules/pino/lib/time.js","../../node_modules/.pnpm/quick-format-unescaped@4.0.4/node_modules/quick-format-unescaped/index.js","../../node_modules/.pnpm/atomic-sleep@1.0.0/node_modules/atomic-sleep/index.js","../../node_modules/.pnpm/sonic-boom@4.2.1/node_modules/sonic-boom/index.js","../../node_modules/.pnpm/on-exit-leak-free@2.1.2/node_modules/on-exit-leak-free/index.js","../../node_modules/.pnpm/thread-stream@3.1.0/node_modules/thread-stream/package.json","../../node_modules/.pnpm/thread-stream@3.1.0/node_modules/thread-stream/lib/wait.js","../../node_modules/.pnpm/thread-stream@3.1.0/node_modules/thread-stream/lib/indexes.js","../../node_modules/.pnpm/thread-stream@3.1.0/node_modules/thread-stream/index.js","../../node_modules/.pnpm/pino@9.14.0/node_modules/pino/lib/transport.js","../../node_modules/.pnpm/pino@9.14.0/node_modules/pino/lib/tools.js","../../node_modules/.pnpm/pino@9.14.0/node_modules/pino/lib/constants.js","../../node_modules/.pnpm/pino@9.14.0/node_modules/pino/lib/levels.js","../../node_modules/.pnpm/pino@9.14.0/node_modules/pino/lib/meta.js","../../node_modules/.pnpm/pino@9.14.0/node_modules/pino/lib/proto.js","../../node_modules/.pnpm/safe-stable-stringify@2.5.0/node_modules/safe-stable-stringify/index.js","../../node_modules/.pnpm/pino@9.14.0/node_modules/pino/lib/multistream.js","../../node_modules/.pnpm/pino@9.14.0/node_modules/pino/pino.js","../../node_modules/.pnpm/ws@8.20.0/node_modules/ws/lib/constants.js","../../node_modules/.pnpm/ws@8.20.0/node_modules/ws/lib/buffer-util.js","../../node_modules/.pnpm/ws@8.20.0/node_modules/ws/lib/limiter.js","../../node_modules/.pnpm/ws@8.20.0/node_modules/ws/lib/permessage-deflate.js","../../node_modules/.pnpm/ws@8.20.0/node_modules/ws/lib/validation.js","../../node_modules/.pnpm/ws@8.20.0/node_modules/ws/lib/receiver.js","../../node_modules/.pnpm/ws@8.20.0/node_modules/ws/lib/sender.js","../../node_modules/.pnpm/ws@8.20.0/node_modules/ws/lib/event-target.js","../../node_modules/.pnpm/ws@8.20.0/node_modules/ws/lib/extension.js","../../node_modules/.pnpm/ws@8.20.0/node_modules/ws/lib/websocket.js","../../node_modules/.pnpm/ws@8.20.0/node_modules/ws/lib/stream.js","../../node_modules/.pnpm/ws@8.20.0/node_modules/ws/lib/subprotocol.js","../../node_modules/.pnpm/ws@8.20.0/node_modules/ws/lib/websocket-server.js","../src/config.ts","../src/index.ts","../src/logger.ts","../src/session/store.ts","../../protocol/src/methods.ts","../../protocol/src/errors.ts","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/external.js","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/util.js","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/ZodError.js","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/locales/en.js","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/errors.js","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/parseUtil.js","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/errorUtil.js","../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/types.js","../../protocol/src/schemas.ts","../../protocol/src/frames.ts","../src/session/manager.ts","../../node_modules/.pnpm/uuid@10.0.0/node_modules/uuid/dist/esm-node/stringify.js","../../node_modules/.pnpm/uuid@10.0.0/node_modules/uuid/dist/esm-node/rng.js","../../node_modules/.pnpm/uuid@10.0.0/node_modules/uuid/dist/esm-node/native.js","../../node_modules/.pnpm/uuid@10.0.0/node_modules/uuid/dist/esm-node/v4.js","../src/permission/rules.ts","../src/session/reducer.ts","../src/session/runner.ts","../src/tools/claude.ts","../src/tools/claude-history.ts","../../node_modules/.pnpm/diff@7.0.0/node_modules/diff/lib/index.mjs","../src/workspace/browser.ts","../src/skills/scanner.ts","../src/observer/session-observer.ts","../src/tools/registry.ts","../../node_modules/.pnpm/ws@8.20.0/node_modules/ws/wrapper.mjs","../src/transport/local-ws-server.ts","../src/transport/auth.ts","../src/discovery/state-file.ts","../src/tunnel/tunnel-manager.ts","../src/tunnel/tunnel-store.ts","../src/tunnel/register-client.ts","../src/tunnel/frpc-config.ts","../src/tunnel/frpc-binary.ts","../src/tunnel/device-key.ts","../src/auth-store.ts","../src/workspace/git.ts","../src/workspace/recent-dirs.ts","../src/version.ts","../src/cli.ts"],"sourcesContent":["'use strict'\n\n// **************************************************************\n// * Code initially copied/adapted from \"pony-cause\" npm module *\n// * Please upstream improvements there *\n// **************************************************************\n\nconst isErrorLike = (err) => {\n return err && typeof err.message === 'string'\n}\n\n/**\n * @param {Error|{ cause?: unknown|(()=>err)}} err\n * @returns {Error|Object|undefined}\n */\nconst getErrorCause = (err) => {\n if (!err) return\n\n /** @type {unknown} */\n // @ts-ignore\n const cause = err.cause\n\n // VError / NError style causes\n if (typeof cause === 'function') {\n // @ts-ignore\n const causeResult = err.cause()\n\n return isErrorLike(causeResult)\n ? causeResult\n : undefined\n } else {\n return isErrorLike(cause)\n ? cause\n : undefined\n }\n}\n\n/**\n * Internal method that keeps a track of which error we have already added, to avoid circular recursion\n *\n * @private\n * @param {Error} err\n * @param {Set<Error>} seen\n * @returns {string}\n */\nconst _stackWithCauses = (err, seen) => {\n if (!isErrorLike(err)) return ''\n\n const stack = err.stack || ''\n\n // Ensure we don't go circular or crazily deep\n if (seen.has(err)) {\n return stack + '\\ncauses have become circular...'\n }\n\n const cause = getErrorCause(err)\n\n if (cause) {\n seen.add(err)\n return (stack + '\\ncaused by: ' + _stackWithCauses(cause, seen))\n } else {\n return stack\n }\n}\n\n/**\n * @param {Error} err\n * @returns {string}\n */\nconst stackWithCauses = (err) => _stackWithCauses(err, new Set())\n\n/**\n * Internal method that keeps a track of which error we have already added, to avoid circular recursion\n *\n * @private\n * @param {Error} err\n * @param {Set<Error>} seen\n * @param {boolean} [skip]\n * @returns {string}\n */\nconst _messageWithCauses = (err, seen, skip) => {\n if (!isErrorLike(err)) return ''\n\n const message = skip ? '' : (err.message || '')\n\n // Ensure we don't go circular or crazily deep\n if (seen.has(err)) {\n return message + ': ...'\n }\n\n const cause = getErrorCause(err)\n\n if (cause) {\n seen.add(err)\n\n // @ts-ignore\n const skipIfVErrorStyleCause = typeof err.cause === 'function'\n\n return (message +\n (skipIfVErrorStyleCause ? '' : ': ') +\n _messageWithCauses(cause, seen, skipIfVErrorStyleCause))\n } else {\n return message\n }\n}\n\n/**\n * @param {Error} err\n * @returns {string}\n */\nconst messageWithCauses = (err) => _messageWithCauses(err, new Set())\n\nmodule.exports = {\n isErrorLike,\n getErrorCause,\n stackWithCauses,\n messageWithCauses\n}\n","'use strict'\n\nconst seen = Symbol('circular-ref-tag')\nconst rawSymbol = Symbol('pino-raw-err-ref')\n\nconst pinoErrProto = Object.create({}, {\n type: {\n enumerable: true,\n writable: true,\n value: undefined\n },\n message: {\n enumerable: true,\n writable: true,\n value: undefined\n },\n stack: {\n enumerable: true,\n writable: true,\n value: undefined\n },\n aggregateErrors: {\n enumerable: true,\n writable: true,\n value: undefined\n },\n raw: {\n enumerable: false,\n get: function () {\n return this[rawSymbol]\n },\n set: function (val) {\n this[rawSymbol] = val\n }\n }\n})\nObject.defineProperty(pinoErrProto, rawSymbol, {\n writable: true,\n value: {}\n})\n\nmodule.exports = {\n pinoErrProto,\n pinoErrorSymbols: {\n seen,\n rawSymbol\n }\n}\n","'use strict'\n\nmodule.exports = errSerializer\n\nconst { messageWithCauses, stackWithCauses, isErrorLike } = require('./err-helpers')\nconst { pinoErrProto, pinoErrorSymbols } = require('./err-proto')\nconst { seen } = pinoErrorSymbols\n\nconst { toString } = Object.prototype\n\nfunction errSerializer (err) {\n if (!isErrorLike(err)) {\n return err\n }\n\n err[seen] = undefined // tag to prevent re-looking at this\n const _err = Object.create(pinoErrProto)\n _err.type = toString.call(err.constructor) === '[object Function]'\n ? err.constructor.name\n : err.name\n _err.message = messageWithCauses(err)\n _err.stack = stackWithCauses(err)\n\n if (Array.isArray(err.errors)) {\n _err.aggregateErrors = err.errors.map(err => errSerializer(err))\n }\n\n for (const key in err) {\n if (_err[key] === undefined) {\n const val = err[key]\n if (isErrorLike(val)) {\n // We append cause messages and stacks to _err, therefore skipping causes here\n if (key !== 'cause' && !Object.prototype.hasOwnProperty.call(val, seen)) {\n _err[key] = errSerializer(val)\n }\n } else {\n _err[key] = val\n }\n }\n }\n\n delete err[seen] // clean up tag in case err is serialized again later\n _err.raw = err\n return _err\n}\n","'use strict'\n\nmodule.exports = errWithCauseSerializer\n\nconst { isErrorLike } = require('./err-helpers')\nconst { pinoErrProto, pinoErrorSymbols } = require('./err-proto')\nconst { seen } = pinoErrorSymbols\n\nconst { toString } = Object.prototype\n\nfunction errWithCauseSerializer (err) {\n if (!isErrorLike(err)) {\n return err\n }\n\n err[seen] = undefined // tag to prevent re-looking at this\n const _err = Object.create(pinoErrProto)\n _err.type = toString.call(err.constructor) === '[object Function]'\n ? err.constructor.name\n : err.name\n _err.message = err.message\n _err.stack = err.stack\n\n if (Array.isArray(err.errors)) {\n _err.aggregateErrors = err.errors.map(err => errWithCauseSerializer(err))\n }\n\n if (isErrorLike(err.cause) && !Object.prototype.hasOwnProperty.call(err.cause, seen)) {\n _err.cause = errWithCauseSerializer(err.cause)\n }\n\n for (const key in err) {\n if (_err[key] === undefined) {\n const val = err[key]\n if (isErrorLike(val)) {\n if (!Object.prototype.hasOwnProperty.call(val, seen)) {\n _err[key] = errWithCauseSerializer(val)\n }\n } else {\n _err[key] = val\n }\n }\n }\n\n delete err[seen] // clean up tag in case err is serialized again later\n _err.raw = err\n return _err\n}\n","'use strict'\n\nmodule.exports = {\n mapHttpRequest,\n reqSerializer\n}\n\nconst rawSymbol = Symbol('pino-raw-req-ref')\nconst pinoReqProto = Object.create({}, {\n id: {\n enumerable: true,\n writable: true,\n value: ''\n },\n method: {\n enumerable: true,\n writable: true,\n value: ''\n },\n url: {\n enumerable: true,\n writable: true,\n value: ''\n },\n query: {\n enumerable: true,\n writable: true,\n value: ''\n },\n params: {\n enumerable: true,\n writable: true,\n value: ''\n },\n headers: {\n enumerable: true,\n writable: true,\n value: {}\n },\n remoteAddress: {\n enumerable: true,\n writable: true,\n value: ''\n },\n remotePort: {\n enumerable: true,\n writable: true,\n value: ''\n },\n raw: {\n enumerable: false,\n get: function () {\n return this[rawSymbol]\n },\n set: function (val) {\n this[rawSymbol] = val\n }\n }\n})\nObject.defineProperty(pinoReqProto, rawSymbol, {\n writable: true,\n value: {}\n})\n\nfunction reqSerializer (req) {\n // req.info is for hapi compat.\n const connection = req.info || req.socket\n const _req = Object.create(pinoReqProto)\n _req.id = (typeof req.id === 'function' ? req.id() : (req.id || (req.info ? req.info.id : undefined)))\n _req.method = req.method\n // req.originalUrl is for expressjs compat.\n if (req.originalUrl) {\n _req.url = req.originalUrl\n } else {\n const path = req.path\n // path for safe hapi compat.\n _req.url = typeof path === 'string' ? path : (req.url ? req.url.path || req.url : undefined)\n }\n\n if (req.query) {\n _req.query = req.query\n }\n\n if (req.params) {\n _req.params = req.params\n }\n\n _req.headers = req.headers\n _req.remoteAddress = connection && connection.remoteAddress\n _req.remotePort = connection && connection.remotePort\n // req.raw is for hapi compat/equivalence\n _req.raw = req.raw || req\n return _req\n}\n\nfunction mapHttpRequest (req) {\n return {\n req: reqSerializer(req)\n }\n}\n","'use strict'\n\nmodule.exports = {\n mapHttpResponse,\n resSerializer\n}\n\nconst rawSymbol = Symbol('pino-raw-res-ref')\nconst pinoResProto = Object.create({}, {\n statusCode: {\n enumerable: true,\n writable: true,\n value: 0\n },\n headers: {\n enumerable: true,\n writable: true,\n value: ''\n },\n raw: {\n enumerable: false,\n get: function () {\n return this[rawSymbol]\n },\n set: function (val) {\n this[rawSymbol] = val\n }\n }\n})\nObject.defineProperty(pinoResProto, rawSymbol, {\n writable: true,\n value: {}\n})\n\nfunction resSerializer (res) {\n const _res = Object.create(pinoResProto)\n _res.statusCode = res.headersSent ? res.statusCode : null\n _res.headers = res.getHeaders ? res.getHeaders() : res._headers\n _res.raw = res\n return _res\n}\n\nfunction mapHttpResponse (res) {\n return {\n res: resSerializer(res)\n }\n}\n","'use strict'\n\nconst errSerializer = require('./lib/err')\nconst errWithCauseSerializer = require('./lib/err-with-cause')\nconst reqSerializers = require('./lib/req')\nconst resSerializers = require('./lib/res')\n\nmodule.exports = {\n err: errSerializer,\n errWithCause: errWithCauseSerializer,\n mapHttpRequest: reqSerializers.mapHttpRequest,\n mapHttpResponse: resSerializers.mapHttpResponse,\n req: reqSerializers.reqSerializer,\n res: resSerializers.resSerializer,\n\n wrapErrorSerializer: function wrapErrorSerializer (customSerializer) {\n if (customSerializer === errSerializer) return customSerializer\n return function wrapErrSerializer (err) {\n return customSerializer(errSerializer(err))\n }\n },\n\n wrapRequestSerializer: function wrapRequestSerializer (customSerializer) {\n if (customSerializer === reqSerializers.reqSerializer) return customSerializer\n return function wrappedReqSerializer (req) {\n return customSerializer(reqSerializers.reqSerializer(req))\n }\n },\n\n wrapResponseSerializer: function wrapResponseSerializer (customSerializer) {\n if (customSerializer === resSerializers.resSerializer) return customSerializer\n return function wrappedResSerializer (res) {\n return customSerializer(resSerializers.resSerializer(res))\n }\n }\n}\n","'use strict'\n\nfunction noOpPrepareStackTrace (_, stack) {\n return stack\n}\n\nmodule.exports = function getCallers () {\n const originalPrepare = Error.prepareStackTrace\n Error.prepareStackTrace = noOpPrepareStackTrace\n const stack = new Error().stack\n Error.prepareStackTrace = originalPrepare\n\n if (!Array.isArray(stack)) {\n return undefined\n }\n\n const entries = stack.slice(2)\n\n const fileNames = []\n\n for (const entry of entries) {\n if (!entry) {\n continue\n }\n\n fileNames.push(entry.getFileName())\n }\n\n return fileNames\n}\n","'use strict'\n\nfunction deepClone (obj) {\n if (obj === null || typeof obj !== 'object') {\n return obj\n }\n\n if (obj instanceof Date) {\n return new Date(obj.getTime())\n }\n\n if (obj instanceof Array) {\n const cloned = []\n for (let i = 0; i < obj.length; i++) {\n cloned[i] = deepClone(obj[i])\n }\n return cloned\n }\n\n if (typeof obj === 'object') {\n const cloned = Object.create(Object.getPrototypeOf(obj))\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n cloned[key] = deepClone(obj[key])\n }\n }\n return cloned\n }\n\n return obj\n}\n\nfunction parsePath (path) {\n const parts = []\n let current = ''\n let inBrackets = false\n let inQuotes = false\n let quoteChar = ''\n\n for (let i = 0; i < path.length; i++) {\n const char = path[i]\n\n if (!inBrackets && char === '.') {\n if (current) {\n parts.push(current)\n current = ''\n }\n } else if (char === '[') {\n if (current) {\n parts.push(current)\n current = ''\n }\n inBrackets = true\n } else if (char === ']' && inBrackets) {\n // Always push the current value when closing brackets, even if it's an empty string\n parts.push(current)\n current = ''\n inBrackets = false\n inQuotes = false\n } else if ((char === '\"' || char === \"'\") && inBrackets) {\n if (!inQuotes) {\n inQuotes = true\n quoteChar = char\n } else if (char === quoteChar) {\n inQuotes = false\n quoteChar = ''\n } else {\n current += char\n }\n } else {\n current += char\n }\n }\n\n if (current) {\n parts.push(current)\n }\n\n return parts\n}\n\nfunction setValue (obj, parts, value) {\n let current = obj\n\n for (let i = 0; i < parts.length - 1; i++) {\n const key = parts[i]\n // Type safety: Check if current is an object before using 'in' operator\n if (typeof current !== 'object' || current === null || !(key in current)) {\n return false // Path doesn't exist, don't create it\n }\n if (typeof current[key] !== 'object' || current[key] === null) {\n return false // Path doesn't exist properly\n }\n current = current[key]\n }\n\n const lastKey = parts[parts.length - 1]\n if (lastKey === '*') {\n if (Array.isArray(current)) {\n for (let i = 0; i < current.length; i++) {\n current[i] = value\n }\n } else if (typeof current === 'object' && current !== null) {\n for (const key in current) {\n if (Object.prototype.hasOwnProperty.call(current, key)) {\n current[key] = value\n }\n }\n }\n } else {\n // Type safety: Check if current is an object before using 'in' operator\n if (typeof current === 'object' && current !== null && lastKey in current && Object.prototype.hasOwnProperty.call(current, lastKey)) {\n current[lastKey] = value\n }\n }\n return true\n}\n\nfunction removeKey (obj, parts) {\n let current = obj\n\n for (let i = 0; i < parts.length - 1; i++) {\n const key = parts[i]\n // Type safety: Check if current is an object before using 'in' operator\n if (typeof current !== 'object' || current === null || !(key in current)) {\n return false // Path doesn't exist, don't create it\n }\n if (typeof current[key] !== 'object' || current[key] === null) {\n return false // Path doesn't exist properly\n }\n current = current[key]\n }\n\n const lastKey = parts[parts.length - 1]\n if (lastKey === '*') {\n if (Array.isArray(current)) {\n // For arrays, we can't really \"remove\" all items as that would change indices\n // Instead, we set them to undefined which will be omitted by JSON.stringify\n for (let i = 0; i < current.length; i++) {\n current[i] = undefined\n }\n } else if (typeof current === 'object' && current !== null) {\n for (const key in current) {\n if (Object.prototype.hasOwnProperty.call(current, key)) {\n delete current[key]\n }\n }\n }\n } else {\n // Type safety: Check if current is an object before using 'in' operator\n if (typeof current === 'object' && current !== null && lastKey in current && Object.prototype.hasOwnProperty.call(current, lastKey)) {\n delete current[lastKey]\n }\n }\n return true\n}\n\n// Sentinel object to distinguish between undefined value and non-existent path\nconst PATH_NOT_FOUND = Symbol('PATH_NOT_FOUND')\n\nfunction getValueIfExists (obj, parts) {\n let current = obj\n\n for (const part of parts) {\n if (current === null || current === undefined) {\n return PATH_NOT_FOUND\n }\n // Type safety: Check if current is an object before property access\n if (typeof current !== 'object' || current === null) {\n return PATH_NOT_FOUND\n }\n // Check if the property exists before accessing it\n if (!(part in current)) {\n return PATH_NOT_FOUND\n }\n current = current[part]\n }\n\n return current\n}\n\nfunction getValue (obj, parts) {\n let current = obj\n\n for (const part of parts) {\n if (current === null || current === undefined) {\n return undefined\n }\n // Type safety: Check if current is an object before property access\n if (typeof current !== 'object' || current === null) {\n return undefined\n }\n current = current[part]\n }\n\n return current\n}\n\nfunction redactPaths (obj, paths, censor, remove = false) {\n for (const path of paths) {\n const parts = parsePath(path)\n\n if (parts.includes('*')) {\n redactWildcardPath(obj, parts, censor, path, remove)\n } else {\n if (remove) {\n removeKey(obj, parts)\n } else {\n // Get value only if path exists - single traversal\n const value = getValueIfExists(obj, parts)\n if (value === PATH_NOT_FOUND) {\n continue\n }\n\n const actualCensor = typeof censor === 'function'\n ? censor(value, parts)\n : censor\n setValue(obj, parts, actualCensor)\n }\n }\n }\n}\n\nfunction redactWildcardPath (obj, parts, censor, originalPath, remove = false) {\n const wildcardIndex = parts.indexOf('*')\n\n if (wildcardIndex === parts.length - 1) {\n const parentParts = parts.slice(0, -1)\n let current = obj\n\n for (const part of parentParts) {\n if (current === null || current === undefined) return\n // Type safety: Check if current is an object before property access\n if (typeof current !== 'object' || current === null) return\n current = current[part]\n }\n\n if (Array.isArray(current)) {\n if (remove) {\n // For arrays, set all items to undefined which will be omitted by JSON.stringify\n for (let i = 0; i < current.length; i++) {\n current[i] = undefined\n }\n } else {\n for (let i = 0; i < current.length; i++) {\n const indexPath = [...parentParts, i.toString()]\n const actualCensor = typeof censor === 'function'\n ? censor(current[i], indexPath)\n : censor\n current[i] = actualCensor\n }\n }\n } else if (typeof current === 'object' && current !== null) {\n if (remove) {\n // Collect keys to delete to avoid issues with deleting during iteration\n const keysToDelete = []\n for (const key in current) {\n if (Object.prototype.hasOwnProperty.call(current, key)) {\n keysToDelete.push(key)\n }\n }\n for (const key of keysToDelete) {\n delete current[key]\n }\n } else {\n for (const key in current) {\n const keyPath = [...parentParts, key]\n const actualCensor = typeof censor === 'function'\n ? censor(current[key], keyPath)\n : censor\n current[key] = actualCensor\n }\n }\n }\n } else {\n redactIntermediateWildcard(obj, parts, censor, wildcardIndex, originalPath, remove)\n }\n}\n\nfunction redactIntermediateWildcard (obj, parts, censor, wildcardIndex, originalPath, remove = false) {\n const beforeWildcard = parts.slice(0, wildcardIndex)\n const afterWildcard = parts.slice(wildcardIndex + 1)\n const pathArray = [] // Cached array to avoid allocations\n\n function traverse (current, pathLength) {\n if (pathLength === beforeWildcard.length) {\n if (Array.isArray(current)) {\n for (let i = 0; i < current.length; i++) {\n pathArray[pathLength] = i.toString()\n traverse(current[i], pathLength + 1)\n }\n } else if (typeof current === 'object' && current !== null) {\n for (const key in current) {\n pathArray[pathLength] = key\n traverse(current[key], pathLength + 1)\n }\n }\n } else if (pathLength < beforeWildcard.length) {\n const nextKey = beforeWildcard[pathLength]\n // Type safety: Check if current is an object before using 'in' operator\n if (current && typeof current === 'object' && current !== null && nextKey in current) {\n pathArray[pathLength] = nextKey\n traverse(current[nextKey], pathLength + 1)\n }\n } else {\n // Check if afterWildcard contains more wildcards\n if (afterWildcard.includes('*')) {\n // Recursively handle remaining wildcards\n // Wrap censor to prepend current path context\n const wrappedCensor = typeof censor === 'function'\n ? (value, path) => {\n const fullPath = [...pathArray.slice(0, pathLength), ...path]\n return censor(value, fullPath)\n }\n : censor\n redactWildcardPath(current, afterWildcard, wrappedCensor, originalPath, remove)\n } else {\n // No more wildcards, apply the redaction directly\n if (remove) {\n removeKey(current, afterWildcard)\n } else {\n const actualCensor = typeof censor === 'function'\n ? censor(getValue(current, afterWildcard), [...pathArray.slice(0, pathLength), ...afterWildcard])\n : censor\n setValue(current, afterWildcard, actualCensor)\n }\n }\n }\n }\n\n if (beforeWildcard.length === 0) {\n traverse(obj, 0)\n } else {\n let current = obj\n for (let i = 0; i < beforeWildcard.length; i++) {\n const part = beforeWildcard[i]\n if (current === null || current === undefined) return\n // Type safety: Check if current is an object before property access\n if (typeof current !== 'object' || current === null) return\n current = current[part]\n pathArray[i] = part\n }\n if (current !== null && current !== undefined) {\n traverse(current, beforeWildcard.length)\n }\n }\n}\n\nfunction buildPathStructure (pathsToClone) {\n if (pathsToClone.length === 0) {\n return null // No paths to redact\n }\n\n // Parse all paths and organize by depth\n const pathStructure = new Map()\n for (const path of pathsToClone) {\n const parts = parsePath(path)\n let current = pathStructure\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i]\n if (!current.has(part)) {\n current.set(part, new Map())\n }\n current = current.get(part)\n }\n }\n return pathStructure\n}\n\nfunction selectiveClone (obj, pathStructure) {\n if (!pathStructure) {\n return obj // No paths to redact, return original\n }\n\n function cloneSelectively (source, pathMap, depth = 0) {\n if (!pathMap || pathMap.size === 0) {\n return source // No more paths to clone, return reference\n }\n\n if (source === null || typeof source !== 'object') {\n return source\n }\n\n if (source instanceof Date) {\n return new Date(source.getTime())\n }\n\n if (Array.isArray(source)) {\n const cloned = []\n for (let i = 0; i < source.length; i++) {\n const indexStr = i.toString()\n if (pathMap.has(indexStr) || pathMap.has('*')) {\n cloned[i] = cloneSelectively(source[i], pathMap.get(indexStr) || pathMap.get('*'))\n } else {\n cloned[i] = source[i] // Share reference for non-redacted items\n }\n }\n return cloned\n }\n\n // Handle objects\n const cloned = Object.create(Object.getPrototypeOf(source))\n for (const key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n if (pathMap.has(key) || pathMap.has('*')) {\n cloned[key] = cloneSelectively(source[key], pathMap.get(key) || pathMap.get('*'))\n } else {\n cloned[key] = source[key] // Share reference for non-redacted properties\n }\n }\n }\n return cloned\n }\n\n return cloneSelectively(obj, pathStructure)\n}\n\nfunction validatePath (path) {\n if (typeof path !== 'string') {\n throw new Error('Paths must be (non-empty) strings')\n }\n\n if (path === '') {\n throw new Error('Invalid redaction path ()')\n }\n\n // Check for double dots\n if (path.includes('..')) {\n throw new Error(`Invalid redaction path (${path})`)\n }\n\n // Check for comma-separated paths (invalid syntax)\n if (path.includes(',')) {\n throw new Error(`Invalid redaction path (${path})`)\n }\n\n // Check for unmatched brackets\n let bracketCount = 0\n let inQuotes = false\n let quoteChar = ''\n\n for (let i = 0; i < path.length; i++) {\n const char = path[i]\n\n if ((char === '\"' || char === \"'\") && bracketCount > 0) {\n if (!inQuotes) {\n inQuotes = true\n quoteChar = char\n } else if (char === quoteChar) {\n inQuotes = false\n quoteChar = ''\n }\n } else if (char === '[' && !inQuotes) {\n bracketCount++\n } else if (char === ']' && !inQuotes) {\n bracketCount--\n if (bracketCount < 0) {\n throw new Error(`Invalid redaction path (${path})`)\n }\n }\n }\n\n if (bracketCount !== 0) {\n throw new Error(`Invalid redaction path (${path})`)\n }\n}\n\nfunction validatePaths (paths) {\n if (!Array.isArray(paths)) {\n throw new TypeError('paths must be an array')\n }\n\n for (const path of paths) {\n validatePath(path)\n }\n}\n\nfunction slowRedact (options = {}) {\n const {\n paths = [],\n censor = '[REDACTED]',\n serialize = JSON.stringify,\n strict = true,\n remove = false\n } = options\n\n // Validate paths upfront to match fast-redact behavior\n validatePaths(paths)\n\n // Build path structure once during setup, not on every call\n const pathStructure = buildPathStructure(paths)\n\n return function redact (obj) {\n if (strict && (obj === null || typeof obj !== 'object')) {\n if (obj === null || obj === undefined) {\n return serialize ? serialize(obj) : obj\n }\n if (typeof obj !== 'object') {\n return serialize ? serialize(obj) : obj\n }\n }\n\n // Only clone paths that need redaction\n const cloned = selectiveClone(obj, pathStructure)\n const original = obj // Keep reference to original for restore\n\n let actualCensor = censor\n if (typeof censor === 'function') {\n actualCensor = censor\n }\n\n redactPaths(cloned, paths, actualCensor, remove)\n\n if (serialize === false) {\n cloned.restore = function () {\n return deepClone(original) // Full clone only when restore is called\n }\n return cloned\n }\n\n if (typeof serialize === 'function') {\n return serialize(cloned)\n }\n\n return JSON.stringify(cloned)\n }\n}\n\nmodule.exports = slowRedact\n","'use strict'\n\nconst setLevelSym = Symbol('pino.setLevel')\nconst getLevelSym = Symbol('pino.getLevel')\nconst levelValSym = Symbol('pino.levelVal')\nconst levelCompSym = Symbol('pino.levelComp')\nconst useLevelLabelsSym = Symbol('pino.useLevelLabels')\nconst useOnlyCustomLevelsSym = Symbol('pino.useOnlyCustomLevels')\nconst mixinSym = Symbol('pino.mixin')\n\nconst lsCacheSym = Symbol('pino.lsCache')\nconst chindingsSym = Symbol('pino.chindings')\n\nconst asJsonSym = Symbol('pino.asJson')\nconst writeSym = Symbol('pino.write')\nconst redactFmtSym = Symbol('pino.redactFmt')\n\nconst timeSym = Symbol('pino.time')\nconst timeSliceIndexSym = Symbol('pino.timeSliceIndex')\nconst streamSym = Symbol('pino.stream')\nconst stringifySym = Symbol('pino.stringify')\nconst stringifySafeSym = Symbol('pino.stringifySafe')\nconst stringifiersSym = Symbol('pino.stringifiers')\nconst endSym = Symbol('pino.end')\nconst formatOptsSym = Symbol('pino.formatOpts')\nconst messageKeySym = Symbol('pino.messageKey')\nconst errorKeySym = Symbol('pino.errorKey')\nconst nestedKeySym = Symbol('pino.nestedKey')\nconst nestedKeyStrSym = Symbol('pino.nestedKeyStr')\nconst mixinMergeStrategySym = Symbol('pino.mixinMergeStrategy')\nconst msgPrefixSym = Symbol('pino.msgPrefix')\n\nconst wildcardFirstSym = Symbol('pino.wildcardFirst')\n\n// public symbols, no need to use the same pino\n// version for these\nconst serializersSym = Symbol.for('pino.serializers')\nconst formattersSym = Symbol.for('pino.formatters')\nconst hooksSym = Symbol.for('pino.hooks')\nconst needsMetadataGsym = Symbol.for('pino.metadata')\n\nmodule.exports = {\n setLevelSym,\n getLevelSym,\n levelValSym,\n levelCompSym,\n useLevelLabelsSym,\n mixinSym,\n lsCacheSym,\n chindingsSym,\n asJsonSym,\n writeSym,\n serializersSym,\n redactFmtSym,\n timeSym,\n timeSliceIndexSym,\n streamSym,\n stringifySym,\n stringifySafeSym,\n stringifiersSym,\n endSym,\n formatOptsSym,\n messageKeySym,\n errorKeySym,\n nestedKeySym,\n wildcardFirstSym,\n needsMetadataGsym,\n useOnlyCustomLevelsSym,\n formattersSym,\n hooksSym,\n nestedKeyStrSym,\n mixinMergeStrategySym,\n msgPrefixSym\n}\n","'use strict'\n\nconst Redact = require('@pinojs/redact')\nconst { redactFmtSym, wildcardFirstSym } = require('./symbols')\n\n// Custom rx regex equivalent to fast-redact's rx\nconst rx = /[^.[\\]]+|\\[([^[\\]]*?)\\]/g\n\nconst CENSOR = '[Redacted]'\nconst strict = false // TODO should this be configurable?\n\nfunction redaction (opts, serialize) {\n const { paths, censor, remove } = handle(opts)\n\n const shape = paths.reduce((o, str) => {\n rx.lastIndex = 0\n const first = rx.exec(str)\n const next = rx.exec(str)\n\n // ns is the top-level path segment, brackets + quoting removed.\n let ns = first[1] !== undefined\n ? first[1].replace(/^(?:\"|'|`)(.*)(?:\"|'|`)$/, '$1')\n : first[0]\n\n if (ns === '*') {\n ns = wildcardFirstSym\n }\n\n // top level key:\n if (next === null) {\n o[ns] = null\n return o\n }\n\n // path with at least two segments:\n // if ns is already redacted at the top level, ignore lower level redactions\n if (o[ns] === null) {\n return o\n }\n\n const { index } = next\n const nextPath = `${str.substr(index, str.length - 1)}`\n\n o[ns] = o[ns] || []\n\n // shape is a mix of paths beginning with literal values and wildcard\n // paths [ \"a.b.c\", \"*.b.z\" ] should reduce to a shape of\n // { \"a\": [ \"b.c\", \"b.z\" ], *: [ \"b.z\" ] }\n // note: \"b.z\" is in both \"a\" and * arrays because \"a\" matches the wildcard.\n // (* entry has wildcardFirstSym as key)\n if (ns !== wildcardFirstSym && o[ns].length === 0) {\n // first time ns's get all '*' redactions so far\n o[ns].push(...(o[wildcardFirstSym] || []))\n }\n\n if (ns === wildcardFirstSym) {\n // new * path gets added to all previously registered literal ns's.\n Object.keys(o).forEach(function (k) {\n if (o[k]) {\n o[k].push(nextPath)\n }\n })\n }\n\n o[ns].push(nextPath)\n return o\n }, {})\n\n // the redactor assigned to the format symbol key\n // provides top level redaction for instances where\n // an object is interpolated into the msg string\n const result = {\n [redactFmtSym]: Redact({ paths, censor, serialize, strict, remove })\n }\n\n const topCensor = (...args) => {\n return typeof censor === 'function' ? serialize(censor(...args)) : serialize(censor)\n }\n\n return [...Object.keys(shape), ...Object.getOwnPropertySymbols(shape)].reduce((o, k) => {\n // top level key:\n if (shape[k] === null) {\n o[k] = (value) => topCensor(value, [k])\n } else {\n const wrappedCensor = typeof censor === 'function'\n ? (value, path) => {\n return censor(value, [k, ...path])\n }\n : censor\n o[k] = Redact({\n paths: shape[k],\n censor: wrappedCensor,\n serialize,\n strict,\n remove\n })\n }\n return o\n }, result)\n}\n\nfunction handle (opts) {\n if (Array.isArray(opts)) {\n opts = { paths: opts, censor: CENSOR }\n return opts\n }\n let { paths, censor = CENSOR, remove } = opts\n if (Array.isArray(paths) === false) { throw Error('pino – redact must contain an array of strings') }\n if (remove === true) censor = undefined\n\n return { paths, censor, remove }\n}\n\nmodule.exports = redaction\n","'use strict'\n\nconst nullTime = () => ''\n\nconst epochTime = () => `,\"time\":${Date.now()}`\n\nconst unixTime = () => `,\"time\":${Math.round(Date.now() / 1000.0)}`\n\nconst isoTime = () => `,\"time\":\"${new Date(Date.now()).toISOString()}\"` // using Date.now() for testability\n\nconst NS_PER_MS = 1_000_000n\nconst NS_PER_SEC = 1_000_000_000n\n\nconst startWallTimeNs = BigInt(Date.now()) * NS_PER_MS\nconst startHrTime = process.hrtime.bigint()\n\nconst isoTimeNano = () => {\n const elapsedNs = process.hrtime.bigint() - startHrTime\n const currentTimeNs = startWallTimeNs + elapsedNs\n\n const secondsSinceEpoch = currentTimeNs / NS_PER_SEC\n const nanosWithinSecond = currentTimeNs % NS_PER_SEC\n\n const msSinceEpoch = Number(secondsSinceEpoch * 1000n + nanosWithinSecond / 1_000_000n)\n const date = new Date(msSinceEpoch)\n\n const year = date.getUTCFullYear()\n const month = (date.getUTCMonth() + 1).toString().padStart(2, '0')\n const day = date.getUTCDate().toString().padStart(2, '0')\n const hours = date.getUTCHours().toString().padStart(2, '0')\n const minutes = date.getUTCMinutes().toString().padStart(2, '0')\n const seconds = date.getUTCSeconds().toString().padStart(2, '0')\n\n return `,\"time\":\"${year}-${month}-${day}T${hours}:${minutes}:${seconds}.${nanosWithinSecond\n .toString()\n .padStart(9, '0')}Z\"`\n}\n\nmodule.exports = { nullTime, epochTime, unixTime, isoTime, isoTimeNano }\n","'use strict'\nfunction tryStringify (o) {\n try { return JSON.stringify(o) } catch(e) { return '\"[Circular]\"' }\n}\n\nmodule.exports = format\n\nfunction format(f, args, opts) {\n var ss = (opts && opts.stringify) || tryStringify\n var offset = 1\n if (typeof f === 'object' && f !== null) {\n var len = args.length + offset\n if (len === 1) return f\n var objects = new Array(len)\n objects[0] = ss(f)\n for (var index = 1; index < len; index++) {\n objects[index] = ss(args[index])\n }\n return objects.join(' ')\n }\n if (typeof f !== 'string') {\n return f\n }\n var argLen = args.length\n if (argLen === 0) return f\n var str = ''\n var a = 1 - offset\n var lastPos = -1\n var flen = (f && f.length) || 0\n for (var i = 0; i < flen;) {\n if (f.charCodeAt(i) === 37 && i + 1 < flen) {\n lastPos = lastPos > -1 ? lastPos : 0\n switch (f.charCodeAt(i + 1)) {\n case 100: // 'd'\n case 102: // 'f'\n if (a >= argLen)\n break\n if (args[a] == null) break\n if (lastPos < i)\n str += f.slice(lastPos, i)\n str += Number(args[a])\n lastPos = i + 2\n i++\n break\n case 105: // 'i'\n if (a >= argLen)\n break\n if (args[a] == null) break\n if (lastPos < i)\n str += f.slice(lastPos, i)\n str += Math.floor(Number(args[a]))\n lastPos = i + 2\n i++\n break\n case 79: // 'O'\n case 111: // 'o'\n case 106: // 'j'\n if (a >= argLen)\n break\n if (args[a] === undefined) break\n if (lastPos < i)\n str += f.slice(lastPos, i)\n var type = typeof args[a]\n if (type === 'string') {\n str += '\\'' + args[a] + '\\''\n lastPos = i + 2\n i++\n break\n }\n if (type === 'function') {\n str += args[a].name || '<anonymous>'\n lastPos = i + 2\n i++\n break\n }\n str += ss(args[a])\n lastPos = i + 2\n i++\n break\n case 115: // 's'\n if (a >= argLen)\n break\n if (lastPos < i)\n str += f.slice(lastPos, i)\n str += String(args[a])\n lastPos = i + 2\n i++\n break\n case 37: // '%'\n if (lastPos < i)\n str += f.slice(lastPos, i)\n str += '%'\n lastPos = i + 2\n i++\n a--\n break\n }\n ++a\n }\n ++i\n }\n if (lastPos === -1)\n return f\n else if (lastPos < flen) {\n str += f.slice(lastPos)\n }\n\n return str\n}\n","'use strict'\n\n/* global SharedArrayBuffer, Atomics */\n\nif (typeof SharedArrayBuffer !== 'undefined' && typeof Atomics !== 'undefined') {\n const nil = new Int32Array(new SharedArrayBuffer(4))\n\n function sleep (ms) {\n // also filters out NaN, non-number types, including empty strings, but allows bigints\n const valid = ms > 0 && ms < Infinity \n if (valid === false) {\n if (typeof ms !== 'number' && typeof ms !== 'bigint') {\n throw TypeError('sleep: ms must be a number')\n }\n throw RangeError('sleep: ms must be a number that is greater than 0 but less than Infinity')\n }\n\n Atomics.wait(nil, 0, 0, Number(ms))\n }\n module.exports = sleep\n} else {\n\n function sleep (ms) {\n // also filters out NaN, non-number types, including empty strings, but allows bigints\n const valid = ms > 0 && ms < Infinity \n if (valid === false) {\n if (typeof ms !== 'number' && typeof ms !== 'bigint') {\n throw TypeError('sleep: ms must be a number')\n }\n throw RangeError('sleep: ms must be a number that is greater than 0 but less than Infinity')\n }\n const target = Date.now() + Number(ms)\n while (target > Date.now()){}\n }\n\n module.exports = sleep\n\n}\n","'use strict'\n\nconst fs = require('fs')\nconst EventEmitter = require('events')\nconst inherits = require('util').inherits\nconst path = require('path')\nconst sleep = require('atomic-sleep')\nconst assert = require('assert')\n\nconst BUSY_WRITE_TIMEOUT = 100\nconst kEmptyBuffer = Buffer.allocUnsafe(0)\n\n// 16 KB. Don't write more than docker buffer size.\n// https://github.com/moby/moby/blob/513ec73831269947d38a644c278ce3cac36783b2/daemon/logger/copier.go#L13\nconst MAX_WRITE = 16 * 1024\n\nconst kContentModeBuffer = 'buffer'\nconst kContentModeUtf8 = 'utf8'\n\nconst [major, minor] = (process.versions.node || '0.0').split('.').map(Number)\nconst kCopyBuffer = major >= 22 && minor >= 7\n\nfunction openFile (file, sonic) {\n sonic._opening = true\n sonic._writing = true\n sonic._asyncDrainScheduled = false\n\n // NOTE: 'error' and 'ready' events emitted below only relevant when sonic.sync===false\n // for sync mode, there is no way to add a listener that will receive these\n\n function fileOpened (err, fd) {\n if (err) {\n sonic._reopening = false\n sonic._writing = false\n sonic._opening = false\n\n if (sonic.sync) {\n process.nextTick(() => {\n if (sonic.listenerCount('error') > 0) {\n sonic.emit('error', err)\n }\n })\n } else {\n sonic.emit('error', err)\n }\n return\n }\n\n const reopening = sonic._reopening\n\n sonic.fd = fd\n sonic.file = file\n sonic._reopening = false\n sonic._opening = false\n sonic._writing = false\n\n if (sonic.sync) {\n process.nextTick(() => sonic.emit('ready'))\n } else {\n sonic.emit('ready')\n }\n\n if (sonic.destroyed) {\n return\n }\n\n // start\n if ((!sonic._writing && sonic._len > sonic.minLength) || sonic._flushPending) {\n sonic._actualWrite()\n } else if (reopening) {\n process.nextTick(() => sonic.emit('drain'))\n }\n }\n\n const flags = sonic.append ? 'a' : 'w'\n const mode = sonic.mode\n\n if (sonic.sync) {\n try {\n if (sonic.mkdir) fs.mkdirSync(path.dirname(file), { recursive: true })\n const fd = fs.openSync(file, flags, mode)\n fileOpened(null, fd)\n } catch (err) {\n fileOpened(err)\n throw err\n }\n } else if (sonic.mkdir) {\n fs.mkdir(path.dirname(file), { recursive: true }, (err) => {\n if (err) return fileOpened(err)\n fs.open(file, flags, mode, fileOpened)\n })\n } else {\n fs.open(file, flags, mode, fileOpened)\n }\n}\n\nfunction SonicBoom (opts) {\n if (!(this instanceof SonicBoom)) {\n return new SonicBoom(opts)\n }\n\n let { fd, dest, minLength, maxLength, maxWrite, periodicFlush, sync, append = true, mkdir, retryEAGAIN, fsync, contentMode, mode } = opts || {}\n\n fd = fd || dest\n\n this._len = 0\n this.fd = -1\n this._bufs = []\n this._lens = []\n this._writing = false\n this._ending = false\n this._reopening = false\n this._asyncDrainScheduled = false\n this._flushPending = false\n this._hwm = Math.max(minLength || 0, 16387)\n this.file = null\n this.destroyed = false\n this.minLength = minLength || 0\n this.maxLength = maxLength || 0\n this.maxWrite = maxWrite || MAX_WRITE\n this._periodicFlush = periodicFlush || 0\n this._periodicFlushTimer = undefined\n this.sync = sync || false\n this.writable = true\n this._fsync = fsync || false\n this.append = append || false\n this.mode = mode\n this.retryEAGAIN = retryEAGAIN || (() => true)\n this.mkdir = mkdir || false\n\n let fsWriteSync\n let fsWrite\n if (contentMode === kContentModeBuffer) {\n this._writingBuf = kEmptyBuffer\n this.write = writeBuffer\n this.flush = flushBuffer\n this.flushSync = flushBufferSync\n this._actualWrite = actualWriteBuffer\n fsWriteSync = () => fs.writeSync(this.fd, this._writingBuf)\n fsWrite = () => fs.write(this.fd, this._writingBuf, this.release)\n } else if (contentMode === undefined || contentMode === kContentModeUtf8) {\n this._writingBuf = ''\n this.write = write\n this.flush = flush\n this.flushSync = flushSync\n this._actualWrite = actualWrite\n fsWriteSync = () => {\n if (Buffer.isBuffer(this._writingBuf)) {\n return fs.writeSync(this.fd, this._writingBuf)\n }\n return fs.writeSync(this.fd, this._writingBuf, 'utf8')\n }\n fsWrite = () => {\n if (Buffer.isBuffer(this._writingBuf)) {\n return fs.write(this.fd, this._writingBuf, this.release)\n }\n return fs.write(this.fd, this._writingBuf, 'utf8', this.release)\n }\n } else {\n throw new Error(`SonicBoom supports \"${kContentModeUtf8}\" and \"${kContentModeBuffer}\", but passed ${contentMode}`)\n }\n\n if (typeof fd === 'number') {\n this.fd = fd\n process.nextTick(() => this.emit('ready'))\n } else if (typeof fd === 'string') {\n openFile(fd, this)\n } else {\n throw new Error('SonicBoom supports only file descriptors and files')\n }\n if (this.minLength >= this.maxWrite) {\n throw new Error(`minLength should be smaller than maxWrite (${this.maxWrite})`)\n }\n\n this.release = (err, n) => {\n if (err) {\n if ((err.code === 'EAGAIN' || err.code === 'EBUSY') && this.retryEAGAIN(err, this._writingBuf.length, this._len - this._writingBuf.length)) {\n if (this.sync) {\n // This error code should not happen in sync mode, because it is\n // not using the underlining operating system asynchronous functions.\n // However it happens, and so we handle it.\n // Ref: https://github.com/pinojs/pino/issues/783\n try {\n sleep(BUSY_WRITE_TIMEOUT)\n this.release(undefined, 0)\n } catch (err) {\n this.release(err)\n }\n } else {\n // Let's give the destination some time to process the chunk.\n setTimeout(fsWrite, BUSY_WRITE_TIMEOUT)\n }\n } else {\n this._writing = false\n\n this.emit('error', err)\n }\n return\n }\n\n this.emit('write', n)\n const releasedBufObj = releaseWritingBuf(this._writingBuf, this._len, n)\n this._len = releasedBufObj.len\n this._writingBuf = releasedBufObj.writingBuf\n\n if (this._writingBuf.length) {\n if (!this.sync) {\n fsWrite()\n return\n }\n\n try {\n do {\n const n = fsWriteSync()\n const releasedBufObj = releaseWritingBuf(this._writingBuf, this._len, n)\n this._len = releasedBufObj.len\n this._writingBuf = releasedBufObj.writingBuf\n } while (this._writingBuf.length)\n } catch (err) {\n this.release(err)\n return\n }\n }\n\n if (this._fsync) {\n fs.fsyncSync(this.fd)\n }\n\n const len = this._len\n if (this._reopening) {\n this._writing = false\n this._reopening = false\n this.reopen()\n } else if (len > this.minLength) {\n this._actualWrite()\n } else if (this._ending) {\n if (len > 0) {\n this._actualWrite()\n } else {\n this._writing = false\n actualClose(this)\n }\n } else {\n this._writing = false\n if (this.sync) {\n if (!this._asyncDrainScheduled) {\n this._asyncDrainScheduled = true\n process.nextTick(emitDrain, this)\n }\n } else {\n this.emit('drain')\n }\n }\n }\n\n this.on('newListener', function (name) {\n if (name === 'drain') {\n this._asyncDrainScheduled = false\n }\n })\n\n if (this._periodicFlush !== 0) {\n this._periodicFlushTimer = setInterval(() => this.flush(null), this._periodicFlush)\n this._periodicFlushTimer.unref()\n }\n}\n\n/**\n * Release the writingBuf after fs.write n bytes data\n * @param {string | Buffer} writingBuf - currently writing buffer, usually be instance._writingBuf.\n * @param {number} len - currently buffer length, usually be instance._len.\n * @param {number} n - number of bytes fs already written\n * @returns {{writingBuf: string | Buffer, len: number}} released writingBuf and length\n */\nfunction releaseWritingBuf (writingBuf, len, n) {\n if (typeof writingBuf === 'string') {\n writingBuf = Buffer.from(writingBuf)\n }\n\n len = Math.max(len - n, 0)\n writingBuf = writingBuf.subarray(n)\n return { writingBuf, len }\n}\n\nfunction emitDrain (sonic) {\n const hasListeners = sonic.listenerCount('drain') > 0\n if (!hasListeners) return\n sonic._asyncDrainScheduled = false\n sonic.emit('drain')\n}\n\ninherits(SonicBoom, EventEmitter)\n\nfunction mergeBuf (bufs, len) {\n if (bufs.length === 0) {\n return kEmptyBuffer\n }\n\n if (bufs.length === 1) {\n return bufs[0]\n }\n\n return Buffer.concat(bufs, len)\n}\n\nfunction write (data) {\n if (this.destroyed) {\n throw new Error('SonicBoom destroyed')\n }\n\n data = '' + data\n const dataLen = Buffer.byteLength(data)\n const len = this._len + dataLen\n const bufs = this._bufs\n\n if (this.maxLength && len > this.maxLength) {\n this.emit('drop', data)\n return this._len < this._hwm\n }\n\n if (\n bufs.length === 0 ||\n Buffer.byteLength(bufs[bufs.length - 1]) + dataLen > this.maxWrite\n ) {\n bufs.push(data)\n } else {\n bufs[bufs.length - 1] += data\n }\n\n this._len = len\n\n if (!this._writing && this._len >= this.minLength) {\n this._actualWrite()\n }\n\n return this._len < this._hwm\n}\n\nfunction writeBuffer (data) {\n if (this.destroyed) {\n throw new Error('SonicBoom destroyed')\n }\n\n const len = this._len + data.length\n const bufs = this._bufs\n const lens = this._lens\n\n if (this.maxLength && len > this.maxLength) {\n this.emit('drop', data)\n return this._len < this._hwm\n }\n\n if (\n bufs.length === 0 ||\n lens[lens.length - 1] + data.length > this.maxWrite\n ) {\n bufs.push([data])\n lens.push(data.length)\n } else {\n bufs[bufs.length - 1].push(data)\n lens[lens.length - 1] += data.length\n }\n\n this._len = len\n\n if (!this._writing && this._len >= this.minLength) {\n this._actualWrite()\n }\n\n return this._len < this._hwm\n}\n\nfunction callFlushCallbackOnDrain (cb) {\n this._flushPending = true\n const onDrain = () => {\n // only if _fsync is false to avoid double fsync\n if (!this._fsync) {\n try {\n fs.fsync(this.fd, (err) => {\n this._flushPending = false\n cb(err)\n })\n } catch (err) {\n cb(err)\n }\n } else {\n this._flushPending = false\n cb()\n }\n this.off('error', onError)\n }\n const onError = (err) => {\n this._flushPending = false\n cb(err)\n this.off('drain', onDrain)\n }\n\n this.once('drain', onDrain)\n this.once('error', onError)\n}\n\nfunction flush (cb) {\n if (cb != null && typeof cb !== 'function') {\n throw new Error('flush cb must be a function')\n }\n\n if (this.destroyed) {\n const error = new Error('SonicBoom destroyed')\n if (cb) {\n cb(error)\n return\n }\n\n throw error\n }\n\n if (this.minLength <= 0) {\n cb?.()\n return\n }\n\n if (cb) {\n callFlushCallbackOnDrain.call(this, cb)\n }\n\n if (this._writing) {\n return\n }\n\n if (this._bufs.length === 0) {\n this._bufs.push('')\n }\n\n this._actualWrite()\n}\n\nfunction flushBuffer (cb) {\n if (cb != null && typeof cb !== 'function') {\n throw new Error('flush cb must be a function')\n }\n\n if (this.destroyed) {\n const error = new Error('SonicBoom destroyed')\n if (cb) {\n cb(error)\n return\n }\n\n throw error\n }\n\n if (this.minLength <= 0) {\n cb?.()\n return\n }\n\n if (cb) {\n callFlushCallbackOnDrain.call(this, cb)\n }\n\n if (this._writing) {\n return\n }\n\n if (this._bufs.length === 0) {\n this._bufs.push([])\n this._lens.push(0)\n }\n\n this._actualWrite()\n}\n\nSonicBoom.prototype.reopen = function (file) {\n if (this.destroyed) {\n throw new Error('SonicBoom destroyed')\n }\n\n if (this._opening) {\n this.once('ready', () => {\n this.reopen(file)\n })\n return\n }\n\n if (this._ending) {\n return\n }\n\n if (!this.file) {\n throw new Error('Unable to reopen a file descriptor, you must pass a file to SonicBoom')\n }\n\n if (file) {\n this.file = file\n }\n this._reopening = true\n\n if (this._writing) {\n return\n }\n\n const fd = this.fd\n this.once('ready', () => {\n if (fd !== this.fd) {\n fs.close(fd, (err) => {\n if (err) {\n return this.emit('error', err)\n }\n })\n }\n })\n\n openFile(this.file, this)\n}\n\nSonicBoom.prototype.end = function () {\n if (this.destroyed) {\n throw new Error('SonicBoom destroyed')\n }\n\n if (this._opening) {\n this.once('ready', () => {\n this.end()\n })\n return\n }\n\n if (this._ending) {\n return\n }\n\n this._ending = true\n\n if (this._writing) {\n return\n }\n\n if (this._len > 0 && this.fd >= 0) {\n this._actualWrite()\n } else {\n actualClose(this)\n }\n}\n\nfunction flushSync () {\n if (this.destroyed) {\n throw new Error('SonicBoom destroyed')\n }\n\n if (this.fd < 0) {\n throw new Error('sonic boom is not ready yet')\n }\n\n if (!this._writing && this._writingBuf.length > 0) {\n this._bufs.unshift(this._writingBuf)\n this._writingBuf = ''\n }\n\n let buf = ''\n while (this._bufs.length || buf.length) {\n if (buf.length <= 0) {\n buf = this._bufs[0]\n }\n try {\n const n = Buffer.isBuffer(buf)\n ? fs.writeSync(this.fd, buf)\n : fs.writeSync(this.fd, buf, 'utf8')\n const releasedBufObj = releaseWritingBuf(buf, this._len, n)\n buf = releasedBufObj.writingBuf\n this._len = releasedBufObj.len\n if (buf.length <= 0) {\n this._bufs.shift()\n }\n } catch (err) {\n const shouldRetry = err.code === 'EAGAIN' || err.code === 'EBUSY'\n if (shouldRetry && !this.retryEAGAIN(err, buf.length, this._len - buf.length)) {\n throw err\n }\n\n sleep(BUSY_WRITE_TIMEOUT)\n }\n }\n\n try {\n fs.fsyncSync(this.fd)\n } catch {\n // Skip the error. The fd might not support fsync.\n }\n}\n\nfunction flushBufferSync () {\n if (this.destroyed) {\n throw new Error('SonicBoom destroyed')\n }\n\n if (this.fd < 0) {\n throw new Error('sonic boom is not ready yet')\n }\n\n if (!this._writing && this._writingBuf.length > 0) {\n this._bufs.unshift([this._writingBuf])\n this._writingBuf = kEmptyBuffer\n }\n\n let buf = kEmptyBuffer\n while (this._bufs.length || buf.length) {\n if (buf.length <= 0) {\n buf = mergeBuf(this._bufs[0], this._lens[0])\n }\n try {\n const n = fs.writeSync(this.fd, buf)\n buf = buf.subarray(n)\n this._len = Math.max(this._len - n, 0)\n if (buf.length <= 0) {\n this._bufs.shift()\n this._lens.shift()\n }\n } catch (err) {\n const shouldRetry = err.code === 'EAGAIN' || err.code === 'EBUSY'\n if (shouldRetry && !this.retryEAGAIN(err, buf.length, this._len - buf.length)) {\n throw err\n }\n\n sleep(BUSY_WRITE_TIMEOUT)\n }\n }\n}\n\nSonicBoom.prototype.destroy = function () {\n if (this.destroyed) {\n return\n }\n actualClose(this)\n}\n\nfunction actualWrite () {\n const release = this.release\n this._writing = true\n this._writingBuf = this._writingBuf.length ? this._writingBuf : this._bufs.shift() || ''\n\n if (this.sync) {\n try {\n const written = Buffer.isBuffer(this._writingBuf)\n ? fs.writeSync(this.fd, this._writingBuf)\n : fs.writeSync(this.fd, this._writingBuf, 'utf8')\n release(null, written)\n } catch (err) {\n release(err)\n }\n } else {\n fs.write(this.fd, this._writingBuf, release)\n }\n}\n\nfunction actualWriteBuffer () {\n const release = this.release\n this._writing = true\n this._writingBuf = this._writingBuf.length ? this._writingBuf : mergeBuf(this._bufs.shift(), this._lens.shift())\n\n if (this.sync) {\n try {\n const written = fs.writeSync(this.fd, this._writingBuf)\n release(null, written)\n } catch (err) {\n release(err)\n }\n } else {\n // fs.write will need to copy string to buffer anyway so\n // we do it here to avoid the overhead of calculating the buffer size\n // in releaseWritingBuf.\n if (kCopyBuffer) {\n this._writingBuf = Buffer.from(this._writingBuf)\n }\n fs.write(this.fd, this._writingBuf, release)\n }\n}\n\nfunction actualClose (sonic) {\n if (sonic.fd === -1) {\n sonic.once('ready', actualClose.bind(null, sonic))\n return\n }\n\n if (sonic._periodicFlushTimer !== undefined) {\n clearInterval(sonic._periodicFlushTimer)\n }\n\n sonic.destroyed = true\n sonic._bufs = []\n sonic._lens = []\n\n assert(typeof sonic.fd === 'number', `sonic.fd must be a number, got ${typeof sonic.fd}`)\n try {\n fs.fsync(sonic.fd, closeWrapped)\n } catch {\n }\n\n function closeWrapped () {\n // We skip errors in fsync\n\n if (sonic.fd !== 1 && sonic.fd !== 2) {\n fs.close(sonic.fd, done)\n } else {\n done()\n }\n }\n\n function done (err) {\n if (err) {\n sonic.emit('error', err)\n return\n }\n\n if (sonic._ending && !sonic._writing) {\n sonic.emit('finish')\n }\n sonic.emit('close')\n }\n}\n\n/**\n * These export configurations enable JS and TS developers\n * to consumer SonicBoom in whatever way best suits their needs.\n * Some examples of supported import syntax includes:\n * - `const SonicBoom = require('SonicBoom')`\n * - `const { SonicBoom } = require('SonicBoom')`\n * - `import * as SonicBoom from 'SonicBoom'`\n * - `import { SonicBoom } from 'SonicBoom'`\n * - `import SonicBoom from 'SonicBoom'`\n */\nSonicBoom.SonicBoom = SonicBoom\nSonicBoom.default = SonicBoom\nmodule.exports = SonicBoom\n","'use strict'\n\nconst refs = {\n exit: [],\n beforeExit: []\n}\nconst functions = {\n exit: onExit,\n beforeExit: onBeforeExit\n}\n\nlet registry\n\nfunction ensureRegistry () {\n if (registry === undefined) {\n registry = new FinalizationRegistry(clear)\n }\n}\n\nfunction install (event) {\n if (refs[event].length > 0) {\n return\n }\n\n process.on(event, functions[event])\n}\n\nfunction uninstall (event) {\n if (refs[event].length > 0) {\n return\n }\n process.removeListener(event, functions[event])\n if (refs.exit.length === 0 && refs.beforeExit.length === 0) {\n registry = undefined\n }\n}\n\nfunction onExit () {\n callRefs('exit')\n}\n\nfunction onBeforeExit () {\n callRefs('beforeExit')\n}\n\nfunction callRefs (event) {\n for (const ref of refs[event]) {\n const obj = ref.deref()\n const fn = ref.fn\n\n // This should always happen, however GC is\n // undeterministic so it might not happen.\n /* istanbul ignore else */\n if (obj !== undefined) {\n fn(obj, event)\n }\n }\n refs[event] = []\n}\n\nfunction clear (ref) {\n for (const event of ['exit', 'beforeExit']) {\n const index = refs[event].indexOf(ref)\n refs[event].splice(index, index + 1)\n uninstall(event)\n }\n}\n\nfunction _register (event, obj, fn) {\n if (obj === undefined) {\n throw new Error('the object can\\'t be undefined')\n }\n install(event)\n const ref = new WeakRef(obj)\n ref.fn = fn\n\n ensureRegistry()\n registry.register(obj, ref)\n refs[event].push(ref)\n}\n\nfunction register (obj, fn) {\n _register('exit', obj, fn)\n}\n\nfunction registerBeforeExit (obj, fn) {\n _register('beforeExit', obj, fn)\n}\n\nfunction unregister (obj) {\n if (registry === undefined) {\n return\n }\n registry.unregister(obj)\n for (const event of ['exit', 'beforeExit']) {\n refs[event] = refs[event].filter((ref) => {\n const _obj = ref.deref()\n return _obj && _obj !== obj\n })\n uninstall(event)\n }\n}\n\nmodule.exports = {\n register,\n registerBeforeExit,\n unregister\n}\n","{\n \"name\": \"thread-stream\",\n \"version\": \"3.1.0\",\n \"description\": \"A streaming way to send data to a Node.js Worker Thread\",\n \"main\": \"index.js\",\n \"types\": \"index.d.ts\",\n \"dependencies\": {\n \"real-require\": \"^0.2.0\"\n },\n \"devDependencies\": {\n \"@types/node\": \"^20.1.0\",\n \"@types/tap\": \"^15.0.0\",\n \"@yao-pkg/pkg\": \"^5.11.5\",\n \"desm\": \"^1.3.0\",\n \"fastbench\": \"^1.0.1\",\n \"husky\": \"^9.0.6\",\n \"pino-elasticsearch\": \"^8.0.0\",\n \"sonic-boom\": \"^4.0.1\",\n \"standard\": \"^17.0.0\",\n \"tap\": \"^16.2.0\",\n \"ts-node\": \"^10.8.0\",\n \"typescript\": \"^5.3.2\",\n \"why-is-node-running\": \"^2.2.2\"\n },\n \"scripts\": {\n \"build\": \"tsc --noEmit\",\n \"test\": \"standard && npm run build && npm run transpile && tap \\\"test/**/*.test.*js\\\" && tap --ts test/*.test.*ts\",\n \"test:ci\": \"standard && npm run transpile && npm run test:ci:js && npm run test:ci:ts\",\n \"test:ci:js\": \"tap --no-check-coverage --timeout=120 --coverage-report=lcovonly \\\"test/**/*.test.*js\\\"\",\n \"test:ci:ts\": \"tap --ts --no-check-coverage --coverage-report=lcovonly \\\"test/**/*.test.*ts\\\"\",\n \"test:yarn\": \"npm run transpile && tap \\\"test/**/*.test.js\\\" --no-check-coverage\",\n \"transpile\": \"sh ./test/ts/transpile.sh\",\n \"prepare\": \"husky install\"\n },\n \"standard\": {\n \"ignore\": [\n \"test/ts/**/*\",\n \"test/syntax-error.mjs\"\n ]\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/mcollina/thread-stream.git\"\n },\n \"keywords\": [\n \"worker\",\n \"thread\",\n \"threads\",\n \"stream\"\n ],\n \"author\": \"Matteo Collina <hello@matteocollina.com>\",\n \"license\": \"MIT\",\n \"bugs\": {\n \"url\": \"https://github.com/mcollina/thread-stream/issues\"\n },\n \"homepage\": \"https://github.com/mcollina/thread-stream#readme\"\n}\n","'use strict'\n\nconst MAX_TIMEOUT = 1000\n\nfunction wait (state, index, expected, timeout, done) {\n const max = Date.now() + timeout\n let current = Atomics.load(state, index)\n if (current === expected) {\n done(null, 'ok')\n return\n }\n let prior = current\n const check = (backoff) => {\n if (Date.now() > max) {\n done(null, 'timed-out')\n } else {\n setTimeout(() => {\n prior = current\n current = Atomics.load(state, index)\n if (current === prior) {\n check(backoff >= MAX_TIMEOUT ? MAX_TIMEOUT : backoff * 2)\n } else {\n if (current === expected) done(null, 'ok')\n else done(null, 'not-equal')\n }\n }, backoff)\n }\n }\n check(1)\n}\n\n// let waitDiffCount = 0\nfunction waitDiff (state, index, expected, timeout, done) {\n // const id = waitDiffCount++\n // process._rawDebug(`>>> waitDiff ${id}`)\n const max = Date.now() + timeout\n let current = Atomics.load(state, index)\n if (current !== expected) {\n done(null, 'ok')\n return\n }\n const check = (backoff) => {\n // process._rawDebug(`${id} ${index} current ${current} expected ${expected}`)\n // process._rawDebug('' + backoff)\n if (Date.now() > max) {\n done(null, 'timed-out')\n } else {\n setTimeout(() => {\n current = Atomics.load(state, index)\n if (current !== expected) {\n done(null, 'ok')\n } else {\n check(backoff >= MAX_TIMEOUT ? MAX_TIMEOUT : backoff * 2)\n }\n }, backoff)\n }\n }\n check(1)\n}\n\nmodule.exports = { wait, waitDiff }\n","'use strict'\n\nconst WRITE_INDEX = 4\nconst READ_INDEX = 8\n\nmodule.exports = {\n WRITE_INDEX,\n READ_INDEX\n}\n","'use strict'\n\nconst { version } = require('./package.json')\nconst { EventEmitter } = require('events')\nconst { Worker } = require('worker_threads')\nconst { join } = require('path')\nconst { pathToFileURL } = require('url')\nconst { wait } = require('./lib/wait')\nconst {\n WRITE_INDEX,\n READ_INDEX\n} = require('./lib/indexes')\nconst buffer = require('buffer')\nconst assert = require('assert')\n\nconst kImpl = Symbol('kImpl')\n\n// V8 limit for string size\nconst MAX_STRING = buffer.constants.MAX_STRING_LENGTH\n\nclass FakeWeakRef {\n constructor (value) {\n this._value = value\n }\n\n deref () {\n return this._value\n }\n}\n\nclass FakeFinalizationRegistry {\n register () {}\n\n unregister () {}\n}\n\n// Currently using FinalizationRegistry with code coverage breaks the world\n// Ref: https://github.com/nodejs/node/issues/49344\nconst FinalizationRegistry = process.env.NODE_V8_COVERAGE ? FakeFinalizationRegistry : global.FinalizationRegistry || FakeFinalizationRegistry\nconst WeakRef = process.env.NODE_V8_COVERAGE ? FakeWeakRef : global.WeakRef || FakeWeakRef\n\nconst registry = new FinalizationRegistry((worker) => {\n if (worker.exited) {\n return\n }\n worker.terminate()\n})\n\nfunction createWorker (stream, opts) {\n const { filename, workerData } = opts\n\n const bundlerOverrides = '__bundlerPathsOverrides' in globalThis ? globalThis.__bundlerPathsOverrides : {}\n const toExecute = bundlerOverrides['thread-stream-worker'] || join(__dirname, 'lib', 'worker.js')\n\n const worker = new Worker(toExecute, {\n ...opts.workerOpts,\n trackUnmanagedFds: false,\n workerData: {\n filename: filename.indexOf('file://') === 0\n ? filename\n : pathToFileURL(filename).href,\n dataBuf: stream[kImpl].dataBuf,\n stateBuf: stream[kImpl].stateBuf,\n workerData: {\n $context: {\n threadStreamVersion: version\n },\n ...workerData\n }\n }\n })\n\n // We keep a strong reference for now,\n // we need to start writing first\n worker.stream = new FakeWeakRef(stream)\n\n worker.on('message', onWorkerMessage)\n worker.on('exit', onWorkerExit)\n registry.register(stream, worker)\n\n return worker\n}\n\nfunction drain (stream) {\n assert(!stream[kImpl].sync)\n if (stream[kImpl].needDrain) {\n stream[kImpl].needDrain = false\n stream.emit('drain')\n }\n}\n\nfunction nextFlush (stream) {\n const writeIndex = Atomics.load(stream[kImpl].state, WRITE_INDEX)\n let leftover = stream[kImpl].data.length - writeIndex\n\n if (leftover > 0) {\n if (stream[kImpl].buf.length === 0) {\n stream[kImpl].flushing = false\n\n if (stream[kImpl].ending) {\n end(stream)\n } else if (stream[kImpl].needDrain) {\n process.nextTick(drain, stream)\n }\n\n return\n }\n\n let toWrite = stream[kImpl].buf.slice(0, leftover)\n let toWriteBytes = Buffer.byteLength(toWrite)\n if (toWriteBytes <= leftover) {\n stream[kImpl].buf = stream[kImpl].buf.slice(leftover)\n // process._rawDebug('writing ' + toWrite.length)\n write(stream, toWrite, nextFlush.bind(null, stream))\n } else {\n // multi-byte utf-8\n stream.flush(() => {\n // err is already handled in flush()\n if (stream.destroyed) {\n return\n }\n\n Atomics.store(stream[kImpl].state, READ_INDEX, 0)\n Atomics.store(stream[kImpl].state, WRITE_INDEX, 0)\n\n // Find a toWrite length that fits the buffer\n // it must exists as the buffer is at least 4 bytes length\n // and the max utf-8 length for a char is 4 bytes.\n while (toWriteBytes > stream[kImpl].data.length) {\n leftover = leftover / 2\n toWrite = stream[kImpl].buf.slice(0, leftover)\n toWriteBytes = Buffer.byteLength(toWrite)\n }\n stream[kImpl].buf = stream[kImpl].buf.slice(leftover)\n write(stream, toWrite, nextFlush.bind(null, stream))\n })\n }\n } else if (leftover === 0) {\n if (writeIndex === 0 && stream[kImpl].buf.length === 0) {\n // we had a flushSync in the meanwhile\n return\n }\n stream.flush(() => {\n Atomics.store(stream[kImpl].state, READ_INDEX, 0)\n Atomics.store(stream[kImpl].state, WRITE_INDEX, 0)\n nextFlush(stream)\n })\n } else {\n // This should never happen\n destroy(stream, new Error('overwritten'))\n }\n}\n\nfunction onWorkerMessage (msg) {\n const stream = this.stream.deref()\n if (stream === undefined) {\n this.exited = true\n // Terminate the worker.\n this.terminate()\n return\n }\n\n switch (msg.code) {\n case 'READY':\n // Replace the FakeWeakRef with a\n // proper one.\n this.stream = new WeakRef(stream)\n\n stream.flush(() => {\n stream[kImpl].ready = true\n stream.emit('ready')\n })\n break\n case 'ERROR':\n destroy(stream, msg.err)\n break\n case 'EVENT':\n if (Array.isArray(msg.args)) {\n stream.emit(msg.name, ...msg.args)\n } else {\n stream.emit(msg.name, msg.args)\n }\n break\n case 'WARNING':\n process.emitWarning(msg.err)\n break\n default:\n destroy(stream, new Error('this should not happen: ' + msg.code))\n }\n}\n\nfunction onWorkerExit (code) {\n const stream = this.stream.deref()\n if (stream === undefined) {\n // Nothing to do, the worker already exit\n return\n }\n registry.unregister(stream)\n stream.worker.exited = true\n stream.worker.off('exit', onWorkerExit)\n destroy(stream, code !== 0 ? new Error('the worker thread exited') : null)\n}\n\nclass ThreadStream extends EventEmitter {\n constructor (opts = {}) {\n super()\n\n if (opts.bufferSize < 4) {\n throw new Error('bufferSize must at least fit a 4-byte utf-8 char')\n }\n\n this[kImpl] = {}\n this[kImpl].stateBuf = new SharedArrayBuffer(128)\n this[kImpl].state = new Int32Array(this[kImpl].stateBuf)\n this[kImpl].dataBuf = new SharedArrayBuffer(opts.bufferSize || 4 * 1024 * 1024)\n this[kImpl].data = Buffer.from(this[kImpl].dataBuf)\n this[kImpl].sync = opts.sync || false\n this[kImpl].ending = false\n this[kImpl].ended = false\n this[kImpl].needDrain = false\n this[kImpl].destroyed = false\n this[kImpl].flushing = false\n this[kImpl].ready = false\n this[kImpl].finished = false\n this[kImpl].errored = null\n this[kImpl].closed = false\n this[kImpl].buf = ''\n\n // TODO (fix): Make private?\n this.worker = createWorker(this, opts) // TODO (fix): make private\n this.on('message', (message, transferList) => {\n this.worker.postMessage(message, transferList)\n })\n }\n\n write (data) {\n if (this[kImpl].destroyed) {\n error(this, new Error('the worker has exited'))\n return false\n }\n\n if (this[kImpl].ending) {\n error(this, new Error('the worker is ending'))\n return false\n }\n\n if (this[kImpl].flushing && this[kImpl].buf.length + data.length >= MAX_STRING) {\n try {\n writeSync(this)\n this[kImpl].flushing = true\n } catch (err) {\n destroy(this, err)\n return false\n }\n }\n\n this[kImpl].buf += data\n\n if (this[kImpl].sync) {\n try {\n writeSync(this)\n return true\n } catch (err) {\n destroy(this, err)\n return false\n }\n }\n\n if (!this[kImpl].flushing) {\n this[kImpl].flushing = true\n setImmediate(nextFlush, this)\n }\n\n this[kImpl].needDrain = this[kImpl].data.length - this[kImpl].buf.length - Atomics.load(this[kImpl].state, WRITE_INDEX) <= 0\n return !this[kImpl].needDrain\n }\n\n end () {\n if (this[kImpl].destroyed) {\n return\n }\n\n this[kImpl].ending = true\n end(this)\n }\n\n flush (cb) {\n if (this[kImpl].destroyed) {\n if (typeof cb === 'function') {\n process.nextTick(cb, new Error('the worker has exited'))\n }\n return\n }\n\n // TODO write all .buf\n const writeIndex = Atomics.load(this[kImpl].state, WRITE_INDEX)\n // process._rawDebug(`(flush) readIndex (${Atomics.load(this.state, READ_INDEX)}) writeIndex (${Atomics.load(this.state, WRITE_INDEX)})`)\n wait(this[kImpl].state, READ_INDEX, writeIndex, Infinity, (err, res) => {\n if (err) {\n destroy(this, err)\n process.nextTick(cb, err)\n return\n }\n if (res === 'not-equal') {\n // TODO handle deadlock\n this.flush(cb)\n return\n }\n process.nextTick(cb)\n })\n }\n\n flushSync () {\n if (this[kImpl].destroyed) {\n return\n }\n\n writeSync(this)\n flushSync(this)\n }\n\n unref () {\n this.worker.unref()\n }\n\n ref () {\n this.worker.ref()\n }\n\n get ready () {\n return this[kImpl].ready\n }\n\n get destroyed () {\n return this[kImpl].destroyed\n }\n\n get closed () {\n return this[kImpl].closed\n }\n\n get writable () {\n return !this[kImpl].destroyed && !this[kImpl].ending\n }\n\n get writableEnded () {\n return this[kImpl].ending\n }\n\n get writableFinished () {\n return this[kImpl].finished\n }\n\n get writableNeedDrain () {\n return this[kImpl].needDrain\n }\n\n get writableObjectMode () {\n return false\n }\n\n get writableErrored () {\n return this[kImpl].errored\n }\n}\n\nfunction error (stream, err) {\n setImmediate(() => {\n stream.emit('error', err)\n })\n}\n\nfunction destroy (stream, err) {\n if (stream[kImpl].destroyed) {\n return\n }\n stream[kImpl].destroyed = true\n\n if (err) {\n stream[kImpl].errored = err\n error(stream, err)\n }\n\n if (!stream.worker.exited) {\n stream.worker.terminate()\n .catch(() => {})\n .then(() => {\n stream[kImpl].closed = true\n stream.emit('close')\n })\n } else {\n setImmediate(() => {\n stream[kImpl].closed = true\n stream.emit('close')\n })\n }\n}\n\nfunction write (stream, data, cb) {\n // data is smaller than the shared buffer length\n const current = Atomics.load(stream[kImpl].state, WRITE_INDEX)\n const length = Buffer.byteLength(data)\n stream[kImpl].data.write(data, current)\n Atomics.store(stream[kImpl].state, WRITE_INDEX, current + length)\n Atomics.notify(stream[kImpl].state, WRITE_INDEX)\n cb()\n return true\n}\n\nfunction end (stream) {\n if (stream[kImpl].ended || !stream[kImpl].ending || stream[kImpl].flushing) {\n return\n }\n stream[kImpl].ended = true\n\n try {\n stream.flushSync()\n\n let readIndex = Atomics.load(stream[kImpl].state, READ_INDEX)\n\n // process._rawDebug('writing index')\n Atomics.store(stream[kImpl].state, WRITE_INDEX, -1)\n // process._rawDebug(`(end) readIndex (${Atomics.load(stream.state, READ_INDEX)}) writeIndex (${Atomics.load(stream.state, WRITE_INDEX)})`)\n Atomics.notify(stream[kImpl].state, WRITE_INDEX)\n\n // Wait for the process to complete\n let spins = 0\n while (readIndex !== -1) {\n // process._rawDebug(`read = ${read}`)\n Atomics.wait(stream[kImpl].state, READ_INDEX, readIndex, 1000)\n readIndex = Atomics.load(stream[kImpl].state, READ_INDEX)\n\n if (readIndex === -2) {\n destroy(stream, new Error('end() failed'))\n return\n }\n\n if (++spins === 10) {\n destroy(stream, new Error('end() took too long (10s)'))\n return\n }\n }\n\n process.nextTick(() => {\n stream[kImpl].finished = true\n stream.emit('finish')\n })\n } catch (err) {\n destroy(stream, err)\n }\n // process._rawDebug('end finished...')\n}\n\nfunction writeSync (stream) {\n const cb = () => {\n if (stream[kImpl].ending) {\n end(stream)\n } else if (stream[kImpl].needDrain) {\n process.nextTick(drain, stream)\n }\n }\n stream[kImpl].flushing = false\n\n while (stream[kImpl].buf.length !== 0) {\n const writeIndex = Atomics.load(stream[kImpl].state, WRITE_INDEX)\n let leftover = stream[kImpl].data.length - writeIndex\n if (leftover === 0) {\n flushSync(stream)\n Atomics.store(stream[kImpl].state, READ_INDEX, 0)\n Atomics.store(stream[kImpl].state, WRITE_INDEX, 0)\n continue\n } else if (leftover < 0) {\n // stream should never happen\n throw new Error('overwritten')\n }\n\n let toWrite = stream[kImpl].buf.slice(0, leftover)\n let toWriteBytes = Buffer.byteLength(toWrite)\n if (toWriteBytes <= leftover) {\n stream[kImpl].buf = stream[kImpl].buf.slice(leftover)\n // process._rawDebug('writing ' + toWrite.length)\n write(stream, toWrite, cb)\n } else {\n // multi-byte utf-8\n flushSync(stream)\n Atomics.store(stream[kImpl].state, READ_INDEX, 0)\n Atomics.store(stream[kImpl].state, WRITE_INDEX, 0)\n\n // Find a toWrite length that fits the buffer\n // it must exists as the buffer is at least 4 bytes length\n // and the max utf-8 length for a char is 4 bytes.\n while (toWriteBytes > stream[kImpl].buf.length) {\n leftover = leftover / 2\n toWrite = stream[kImpl].buf.slice(0, leftover)\n toWriteBytes = Buffer.byteLength(toWrite)\n }\n stream[kImpl].buf = stream[kImpl].buf.slice(leftover)\n write(stream, toWrite, cb)\n }\n }\n}\n\nfunction flushSync (stream) {\n if (stream[kImpl].flushing) {\n throw new Error('unable to flush while flushing')\n }\n\n // process._rawDebug('flushSync started')\n\n const writeIndex = Atomics.load(stream[kImpl].state, WRITE_INDEX)\n\n let spins = 0\n\n // TODO handle deadlock\n while (true) {\n const readIndex = Atomics.load(stream[kImpl].state, READ_INDEX)\n\n if (readIndex === -2) {\n throw Error('_flushSync failed')\n }\n\n // process._rawDebug(`(flushSync) readIndex (${readIndex}) writeIndex (${writeIndex})`)\n if (readIndex !== writeIndex) {\n // TODO stream timeouts for some reason.\n Atomics.wait(stream[kImpl].state, READ_INDEX, readIndex, 1000)\n } else {\n break\n }\n\n if (++spins === 10) {\n throw new Error('_flushSync took too long (10s)')\n }\n }\n // process._rawDebug('flushSync finished')\n}\n\nmodule.exports = ThreadStream\n","'use strict'\n\nconst { createRequire } = require('module')\nconst getCallers = require('./caller')\nconst { join, isAbsolute, sep } = require('node:path')\nconst sleep = require('atomic-sleep')\nconst onExit = require('on-exit-leak-free')\nconst ThreadStream = require('thread-stream')\n\nfunction setupOnExit (stream) {\n // This is leak free, it does not leave event handlers\n onExit.register(stream, autoEnd)\n onExit.registerBeforeExit(stream, flush)\n\n stream.on('close', function () {\n onExit.unregister(stream)\n })\n}\n\nfunction buildStream (filename, workerData, workerOpts, sync) {\n const stream = new ThreadStream({\n filename,\n workerData,\n workerOpts,\n sync\n })\n\n stream.on('ready', onReady)\n stream.on('close', function () {\n process.removeListener('exit', onExit)\n })\n\n process.on('exit', onExit)\n\n function onReady () {\n process.removeListener('exit', onExit)\n stream.unref()\n\n if (workerOpts.autoEnd !== false) {\n setupOnExit(stream)\n }\n }\n\n function onExit () {\n /* istanbul ignore next */\n if (stream.closed) {\n return\n }\n stream.flushSync()\n // Apparently there is a very sporadic race condition\n // that in certain OS would prevent the messages to be flushed\n // because the thread might not have been created still.\n // Unfortunately we need to sleep(100) in this case.\n sleep(100)\n stream.end()\n }\n\n return stream\n}\n\nfunction autoEnd (stream) {\n stream.ref()\n stream.flushSync()\n stream.end()\n stream.once('close', function () {\n stream.unref()\n })\n}\n\nfunction flush (stream) {\n stream.flushSync()\n}\n\nfunction transport (fullOptions) {\n const { pipeline, targets, levels, dedupe, worker = {}, caller = getCallers(), sync = false } = fullOptions\n\n const options = {\n ...fullOptions.options\n }\n\n // Backwards compatibility\n const callers = typeof caller === 'string' ? [caller] : caller\n\n // This will be eventually modified by bundlers\n const bundlerOverrides = '__bundlerPathsOverrides' in globalThis ? globalThis.__bundlerPathsOverrides : {}\n\n let target = fullOptions.target\n\n if (target && targets) {\n throw new Error('only one of target or targets can be specified')\n }\n\n if (targets) {\n target = bundlerOverrides['pino-worker'] || join(__dirname, 'worker.js')\n options.targets = targets.filter(dest => dest.target).map((dest) => {\n return {\n ...dest,\n target: fixTarget(dest.target)\n }\n })\n options.pipelines = targets.filter(dest => dest.pipeline).map((dest) => {\n return dest.pipeline.map((t) => {\n return {\n ...t,\n level: dest.level, // duplicate the pipeline `level` property defined in the upper level\n target: fixTarget(t.target)\n }\n })\n })\n } else if (pipeline) {\n target = bundlerOverrides['pino-worker'] || join(__dirname, 'worker.js')\n options.pipelines = [pipeline.map((dest) => {\n return {\n ...dest,\n target: fixTarget(dest.target)\n }\n })]\n }\n\n if (levels) {\n options.levels = levels\n }\n\n if (dedupe) {\n options.dedupe = dedupe\n }\n\n options.pinoWillSendConfig = true\n\n return buildStream(fixTarget(target), options, worker, sync)\n\n function fixTarget (origin) {\n origin = bundlerOverrides[origin] || origin\n\n if (isAbsolute(origin) || origin.indexOf('file://') === 0) {\n return origin\n }\n\n if (origin === 'pino/file') {\n return join(__dirname, '..', 'file.js')\n }\n\n let fixTarget\n\n for (const filePath of callers) {\n try {\n const context = filePath === 'node:repl'\n ? process.cwd() + sep\n : filePath\n\n fixTarget = createRequire(context).resolve(origin)\n break\n } catch (err) {\n // Silent catch\n continue\n }\n }\n\n if (!fixTarget) {\n throw new Error(`unable to determine transport target for \"${origin}\"`)\n }\n\n return fixTarget\n }\n}\n\nmodule.exports = transport\n","'use strict'\n\n/* eslint no-prototype-builtins: 0 */\n\nconst diagChan = require('node:diagnostics_channel')\nconst format = require('quick-format-unescaped')\nconst { mapHttpRequest, mapHttpResponse } = require('pino-std-serializers')\nconst SonicBoom = require('sonic-boom')\nconst onExit = require('on-exit-leak-free')\nconst {\n lsCacheSym,\n chindingsSym,\n writeSym,\n serializersSym,\n formatOptsSym,\n endSym,\n stringifiersSym,\n stringifySym,\n stringifySafeSym,\n wildcardFirstSym,\n nestedKeySym,\n formattersSym,\n messageKeySym,\n errorKeySym,\n nestedKeyStrSym,\n msgPrefixSym\n} = require('./symbols')\nconst { isMainThread } = require('worker_threads')\nconst transport = require('./transport')\n\nlet asJsonChan\n// Node >= 18.19 supports diagnostics_channel.tracingChannel\nif (typeof diagChan.tracingChannel === 'function') {\n asJsonChan = diagChan.tracingChannel('pino_asJson')\n} else {\n // Older Node 18.x (e.g. 18.18), provided a no-op fallback\n asJsonChan = {\n hasSubscribers: false,\n traceSync (fn, store, thisArg, ...args) {\n return fn.call(thisArg, ...args)\n }\n }\n}\n\nfunction noop () {\n}\n\nfunction genLog (level, hook) {\n if (!hook) return LOG\n\n return function hookWrappedLog (...args) {\n hook.call(this, args, LOG, level)\n }\n\n function LOG (o, ...n) {\n if (typeof o === 'object') {\n let msg = o\n if (o !== null) {\n if (o.method && o.headers && o.socket) {\n o = mapHttpRequest(o)\n } else if (typeof o.setHeader === 'function') {\n o = mapHttpResponse(o)\n }\n }\n let formatParams\n if (msg === null && n.length === 0) {\n formatParams = [null]\n } else {\n msg = n.shift()\n formatParams = n\n }\n // We do not use a coercive check for `msg` as it is\n // measurably slower than the explicit checks.\n if (typeof this[msgPrefixSym] === 'string' && msg !== undefined && msg !== null) {\n msg = this[msgPrefixSym] + msg\n }\n this[writeSym](o, format(msg, formatParams, this[formatOptsSym]), level)\n } else {\n let msg = o === undefined ? n.shift() : o\n\n // We do not use a coercive check for `msg` as it is\n // measurably slower than the explicit checks.\n if (typeof this[msgPrefixSym] === 'string' && msg !== undefined && msg !== null) {\n msg = this[msgPrefixSym] + msg\n }\n this[writeSym](null, format(msg, n, this[formatOptsSym]), level)\n }\n }\n}\n\n// magically escape strings for json\n// relying on their charCodeAt\n// everything below 32 needs JSON.stringify()\n// 34 and 92 happens all the time, so we\n// have a fast case for them\nfunction asString (str) {\n let result = ''\n let last = 0\n let found = false\n let point = 255\n const l = str.length\n if (l > 100) {\n return JSON.stringify(str)\n }\n for (var i = 0; i < l && point >= 32; i++) {\n point = str.charCodeAt(i)\n if (point === 34 || point === 92) {\n result += str.slice(last, i) + '\\\\'\n last = i\n found = true\n }\n }\n if (!found) {\n result = str\n } else {\n result += str.slice(last)\n }\n return point < 32 ? JSON.stringify(str) : '\"' + result + '\"'\n}\n\n/**\n * `asJson` wraps `_asJson` in order to facilitate generating diagnostics.\n *\n * @param {object} obj The merging object passed to the log method.\n * @param {string} msg The log message passed to the log method.\n * @param {number} num The log level number.\n * @param {number} time The log time in milliseconds.\n *\n * @returns {string}\n */\nfunction asJson (obj, msg, num, time) {\n if (asJsonChan.hasSubscribers === false) {\n return _asJson.call(this, obj, msg, num, time)\n }\n\n const store = { instance: this, arguments }\n return asJsonChan.traceSync(_asJson, store, this, obj, msg, num, time)\n}\n\n/**\n * `_asJson` parses all collected data and generates the finalized newline\n * delimited JSON string.\n *\n * @param {object} obj The merging object passed to the log method.\n * @param {string} msg The log message passed to the log method.\n * @param {number} num The log level number.\n * @param {number} time The log time in milliseconds.\n *\n * @returns {string} The finalized log string terminated with a newline.\n * @private\n */\nfunction _asJson (obj, msg, num, time) {\n const stringify = this[stringifySym]\n const stringifySafe = this[stringifySafeSym]\n const stringifiers = this[stringifiersSym]\n const end = this[endSym]\n const chindings = this[chindingsSym]\n const serializers = this[serializersSym]\n const formatters = this[formattersSym]\n const messageKey = this[messageKeySym]\n const errorKey = this[errorKeySym]\n let data = this[lsCacheSym][num] + time\n\n // we need the child bindings added to the output first so instance logged\n // objects can take precedence when JSON.parse-ing the resulting log line\n data = data + chindings\n\n let value\n if (formatters.log) {\n obj = formatters.log(obj)\n }\n const wildcardStringifier = stringifiers[wildcardFirstSym]\n let propStr = ''\n for (const key in obj) {\n value = obj[key]\n if (Object.prototype.hasOwnProperty.call(obj, key) && value !== undefined) {\n if (serializers[key]) {\n value = serializers[key](value)\n } else if (key === errorKey && serializers.err) {\n value = serializers.err(value)\n }\n\n const stringifier = stringifiers[key] || wildcardStringifier\n\n switch (typeof value) {\n case 'undefined':\n case 'function':\n continue\n case 'number':\n /* eslint no-fallthrough: \"off\" */\n if (Number.isFinite(value) === false) {\n value = null\n }\n // this case explicitly falls through to the next one\n case 'boolean':\n if (stringifier) value = stringifier(value)\n break\n case 'string':\n value = (stringifier || asString)(value)\n break\n default:\n value = (stringifier || stringify)(value, stringifySafe)\n }\n if (value === undefined) continue\n const strKey = asString(key)\n propStr += ',' + strKey + ':' + value\n }\n }\n\n let msgStr = ''\n if (msg !== undefined) {\n value = serializers[messageKey] ? serializers[messageKey](msg) : msg\n const stringifier = stringifiers[messageKey] || wildcardStringifier\n\n switch (typeof value) {\n case 'function':\n break\n case 'number':\n /* eslint no-fallthrough: \"off\" */\n if (Number.isFinite(value) === false) {\n value = null\n }\n // this case explicitly falls through to the next one\n case 'boolean':\n if (stringifier) value = stringifier(value)\n msgStr = ',\"' + messageKey + '\":' + value\n break\n case 'string':\n value = (stringifier || asString)(value)\n msgStr = ',\"' + messageKey + '\":' + value\n break\n default:\n value = (stringifier || stringify)(value, stringifySafe)\n msgStr = ',\"' + messageKey + '\":' + value\n }\n }\n\n if (this[nestedKeySym] && propStr) {\n // place all the obj properties under the specified key\n // the nested key is already formatted from the constructor\n return data + this[nestedKeyStrSym] + propStr.slice(1) + '}' + msgStr + end\n } else {\n return data + propStr + msgStr + end\n }\n}\n\nfunction asChindings (instance, bindings) {\n let value\n let data = instance[chindingsSym]\n const stringify = instance[stringifySym]\n const stringifySafe = instance[stringifySafeSym]\n const stringifiers = instance[stringifiersSym]\n const wildcardStringifier = stringifiers[wildcardFirstSym]\n const serializers = instance[serializersSym]\n const formatter = instance[formattersSym].bindings\n bindings = formatter(bindings)\n\n for (const key in bindings) {\n value = bindings[key]\n const valid = (key.length < 5 || (key !== 'level' &&\n key !== 'serializers' &&\n key !== 'formatters' &&\n key !== 'customLevels')) &&\n bindings.hasOwnProperty(key) &&\n value !== undefined\n if (valid === true) {\n value = serializers[key] ? serializers[key](value) : value\n value = (stringifiers[key] || wildcardStringifier || stringify)(value, stringifySafe)\n if (value === undefined) continue\n data += ',\"' + key + '\":' + value\n }\n }\n return data\n}\n\nfunction hasBeenTampered (stream) {\n return stream.write !== stream.constructor.prototype.write\n}\n\nfunction buildSafeSonicBoom (opts) {\n const stream = new SonicBoom(opts)\n stream.on('error', filterBrokenPipe)\n // If we are sync: false, we must flush on exit\n if (!opts.sync && isMainThread) {\n onExit.register(stream, autoEnd)\n\n stream.on('close', function () {\n onExit.unregister(stream)\n })\n }\n return stream\n\n function filterBrokenPipe (err) {\n // Impossible to replicate across all operating systems\n /* istanbul ignore next */\n if (err.code === 'EPIPE') {\n // If we get EPIPE, we should stop logging here\n // however we have no control to the consumer of\n // SonicBoom, so we just overwrite the write method\n stream.write = noop\n stream.end = noop\n stream.flushSync = noop\n stream.destroy = noop\n return\n }\n stream.removeListener('error', filterBrokenPipe)\n stream.emit('error', err)\n }\n}\n\nfunction autoEnd (stream, eventName) {\n // This check is needed only on some platforms\n /* istanbul ignore next */\n if (stream.destroyed) {\n return\n }\n\n if (eventName === 'beforeExit') {\n // We still have an event loop, let's use it\n stream.flush()\n stream.on('drain', function () {\n stream.end()\n })\n } else {\n // For some reason istanbul is not detecting this, but it's there\n /* istanbul ignore next */\n // We do not have an event loop, so flush synchronously\n stream.flushSync()\n }\n}\n\nfunction createArgsNormalizer (defaultOptions) {\n return function normalizeArgs (instance, caller, opts = {}, stream) {\n // support stream as a string\n if (typeof opts === 'string') {\n stream = buildSafeSonicBoom({ dest: opts })\n opts = {}\n } else if (typeof stream === 'string') {\n if (opts && opts.transport) {\n throw Error('only one of option.transport or stream can be specified')\n }\n stream = buildSafeSonicBoom({ dest: stream })\n } else if (opts instanceof SonicBoom || opts.writable || opts._writableState) {\n stream = opts\n opts = {}\n } else if (opts.transport) {\n if (opts.transport instanceof SonicBoom || opts.transport.writable || opts.transport._writableState) {\n throw Error('option.transport do not allow stream, please pass to option directly. e.g. pino(transport)')\n }\n if (opts.transport.targets && opts.transport.targets.length && opts.formatters && typeof opts.formatters.level === 'function') {\n throw Error('option.transport.targets do not allow custom level formatters')\n }\n\n let customLevels\n if (opts.customLevels) {\n customLevels = opts.useOnlyCustomLevels ? opts.customLevels : Object.assign({}, opts.levels, opts.customLevels)\n }\n stream = transport({ caller, ...opts.transport, levels: customLevels })\n }\n opts = Object.assign({}, defaultOptions, opts)\n opts.serializers = Object.assign({}, defaultOptions.serializers, opts.serializers)\n opts.formatters = Object.assign({}, defaultOptions.formatters, opts.formatters)\n\n if (opts.prettyPrint) {\n throw new Error('prettyPrint option is no longer supported, see the pino-pretty package (https://github.com/pinojs/pino-pretty)')\n }\n\n const { enabled, onChild } = opts\n if (enabled === false) opts.level = 'silent'\n if (!onChild) opts.onChild = noop\n if (!stream) {\n if (!hasBeenTampered(process.stdout)) {\n // If process.stdout.fd is undefined, it means that we are running\n // in a worker thread. Let's assume we are logging to file descriptor 1.\n stream = buildSafeSonicBoom({ fd: process.stdout.fd || 1 })\n } else {\n stream = process.stdout\n }\n }\n return { opts, stream }\n }\n}\n\nfunction stringify (obj, stringifySafeFn) {\n try {\n return JSON.stringify(obj)\n } catch (_) {\n try {\n const stringify = stringifySafeFn || this[stringifySafeSym]\n return stringify(obj)\n } catch (_) {\n return '\"[unable to serialize, circular reference is too complex to analyze]\"'\n }\n }\n}\n\nfunction buildFormatters (level, bindings, log) {\n return {\n level,\n bindings,\n log\n }\n}\n\n/**\n * Convert a string integer file descriptor to a proper native integer\n * file descriptor.\n *\n * @param {string} destination The file descriptor string to attempt to convert.\n *\n * @returns {Number}\n */\nfunction normalizeDestFileDescriptor (destination) {\n const fd = Number(destination)\n if (typeof destination === 'string' && Number.isFinite(fd)) {\n return fd\n }\n // destination could be undefined if we are in a worker\n if (destination === undefined) {\n // This is stdout in UNIX systems\n return 1\n }\n return destination\n}\n\nmodule.exports = {\n noop,\n buildSafeSonicBoom,\n asChindings,\n asJson,\n genLog,\n createArgsNormalizer,\n stringify,\n buildFormatters,\n normalizeDestFileDescriptor\n}\n","/**\n * Represents default log level values\n *\n * @enum {number}\n */\nconst DEFAULT_LEVELS = {\n trace: 10,\n debug: 20,\n info: 30,\n warn: 40,\n error: 50,\n fatal: 60\n}\n\n/**\n * Represents sort order direction: `ascending` or `descending`\n *\n * @enum {string}\n */\nconst SORTING_ORDER = {\n ASC: 'ASC',\n DESC: 'DESC'\n}\n\nmodule.exports = {\n DEFAULT_LEVELS,\n SORTING_ORDER\n}\n","'use strict'\n/* eslint no-prototype-builtins: 0 */\nconst {\n lsCacheSym,\n levelValSym,\n useOnlyCustomLevelsSym,\n streamSym,\n formattersSym,\n hooksSym,\n levelCompSym\n} = require('./symbols')\nconst { noop, genLog } = require('./tools')\nconst { DEFAULT_LEVELS, SORTING_ORDER } = require('./constants')\n\nconst levelMethods = {\n fatal: (hook) => {\n const logFatal = genLog(DEFAULT_LEVELS.fatal, hook)\n return function (...args) {\n const stream = this[streamSym]\n logFatal.call(this, ...args)\n if (typeof stream.flushSync === 'function') {\n try {\n stream.flushSync()\n } catch (e) {\n // https://github.com/pinojs/pino/pull/740#discussion_r346788313\n }\n }\n }\n },\n error: (hook) => genLog(DEFAULT_LEVELS.error, hook),\n warn: (hook) => genLog(DEFAULT_LEVELS.warn, hook),\n info: (hook) => genLog(DEFAULT_LEVELS.info, hook),\n debug: (hook) => genLog(DEFAULT_LEVELS.debug, hook),\n trace: (hook) => genLog(DEFAULT_LEVELS.trace, hook)\n}\n\nconst nums = Object.keys(DEFAULT_LEVELS).reduce((o, k) => {\n o[DEFAULT_LEVELS[k]] = k\n return o\n}, {})\n\nconst initialLsCache = Object.keys(nums).reduce((o, k) => {\n o[k] = '{\"level\":' + Number(k)\n return o\n}, {})\n\nfunction genLsCache (instance) {\n const formatter = instance[formattersSym].level\n const { labels } = instance.levels\n const cache = {}\n for (const label in labels) {\n const level = formatter(labels[label], Number(label))\n cache[label] = JSON.stringify(level).slice(0, -1)\n }\n instance[lsCacheSym] = cache\n return instance\n}\n\nfunction isStandardLevel (level, useOnlyCustomLevels) {\n if (useOnlyCustomLevels) {\n return false\n }\n\n switch (level) {\n case 'fatal':\n case 'error':\n case 'warn':\n case 'info':\n case 'debug':\n case 'trace':\n return true\n default:\n return false\n }\n}\n\nfunction setLevel (level) {\n const { labels, values } = this.levels\n if (typeof level === 'number') {\n if (labels[level] === undefined) throw Error('unknown level value' + level)\n level = labels[level]\n }\n if (values[level] === undefined) throw Error('unknown level ' + level)\n const preLevelVal = this[levelValSym]\n const levelVal = this[levelValSym] = values[level]\n const useOnlyCustomLevelsVal = this[useOnlyCustomLevelsSym]\n const levelComparison = this[levelCompSym]\n const hook = this[hooksSym].logMethod\n\n for (const key in values) {\n if (levelComparison(values[key], levelVal) === false) {\n this[key] = noop\n continue\n }\n this[key] = isStandardLevel(key, useOnlyCustomLevelsVal) ? levelMethods[key](hook) : genLog(values[key], hook)\n }\n\n this.emit(\n 'level-change',\n level,\n levelVal,\n labels[preLevelVal],\n preLevelVal,\n this\n )\n}\n\nfunction getLevel (level) {\n const { levels, levelVal } = this\n // protection against potential loss of Pino scope from serializers (edge case with circular refs - https://github.com/pinojs/pino/issues/833)\n return (levels && levels.labels) ? levels.labels[levelVal] : ''\n}\n\nfunction isLevelEnabled (logLevel) {\n const { values } = this.levels\n const logLevelVal = values[logLevel]\n return logLevelVal !== undefined && this[levelCompSym](logLevelVal, this[levelValSym])\n}\n\n/**\n * Determine if the given `current` level is enabled by comparing it\n * against the current threshold (`expected`).\n *\n * @param {SORTING_ORDER} direction comparison direction \"ASC\" or \"DESC\"\n * @param {number} current current log level number representation\n * @param {number} expected threshold value to compare with\n * @returns {boolean}\n */\nfunction compareLevel (direction, current, expected) {\n if (direction === SORTING_ORDER.DESC) {\n return current <= expected\n }\n\n return current >= expected\n}\n\n/**\n * Create a level comparison function based on `levelComparison`\n * it could a default function which compares levels either in \"ascending\" or \"descending\" order or custom comparison function\n *\n * @param {SORTING_ORDER | Function} levelComparison sort levels order direction or custom comparison function\n * @returns Function\n */\nfunction genLevelComparison (levelComparison) {\n if (typeof levelComparison === 'string') {\n return compareLevel.bind(null, levelComparison)\n }\n\n return levelComparison\n}\n\nfunction mappings (customLevels = null, useOnlyCustomLevels = false) {\n const customNums = customLevels\n /* eslint-disable */\n ? Object.keys(customLevels).reduce((o, k) => {\n o[customLevels[k]] = k\n return o\n }, {})\n : null\n /* eslint-enable */\n\n const labels = Object.assign(\n Object.create(Object.prototype, { Infinity: { value: 'silent' } }),\n useOnlyCustomLevels ? null : nums,\n customNums\n )\n const values = Object.assign(\n Object.create(Object.prototype, { silent: { value: Infinity } }),\n useOnlyCustomLevels ? null : DEFAULT_LEVELS,\n customLevels\n )\n return { labels, values }\n}\n\nfunction assertDefaultLevelFound (defaultLevel, customLevels, useOnlyCustomLevels) {\n if (typeof defaultLevel === 'number') {\n const values = [].concat(\n Object.keys(customLevels || {}).map(key => customLevels[key]),\n useOnlyCustomLevels ? [] : Object.keys(nums).map(level => +level),\n Infinity\n )\n if (!values.includes(defaultLevel)) {\n throw Error(`default level:${defaultLevel} must be included in custom levels`)\n }\n return\n }\n\n const labels = Object.assign(\n Object.create(Object.prototype, { silent: { value: Infinity } }),\n useOnlyCustomLevels ? null : DEFAULT_LEVELS,\n customLevels\n )\n if (!(defaultLevel in labels)) {\n throw Error(`default level:${defaultLevel} must be included in custom levels`)\n }\n}\n\nfunction assertNoLevelCollisions (levels, customLevels) {\n const { labels, values } = levels\n for (const k in customLevels) {\n if (k in values) {\n throw Error('levels cannot be overridden')\n }\n if (customLevels[k] in labels) {\n throw Error('pre-existing level values cannot be used for new levels')\n }\n }\n}\n\n/**\n * Validates whether `levelComparison` is correct\n *\n * @throws Error\n * @param {SORTING_ORDER | Function} levelComparison - value to validate\n * @returns\n */\nfunction assertLevelComparison (levelComparison) {\n if (typeof levelComparison === 'function') {\n return\n }\n\n if (typeof levelComparison === 'string' && Object.values(SORTING_ORDER).includes(levelComparison)) {\n return\n }\n\n throw new Error('Levels comparison should be one of \"ASC\", \"DESC\" or \"function\" type')\n}\n\nmodule.exports = {\n initialLsCache,\n genLsCache,\n levelMethods,\n getLevel,\n setLevel,\n isLevelEnabled,\n mappings,\n assertNoLevelCollisions,\n assertDefaultLevelFound,\n genLevelComparison,\n assertLevelComparison\n}\n","'use strict'\n\nmodule.exports = { version: '9.14.0' }\n","'use strict'\n\n/* eslint no-prototype-builtins: 0 */\n\nconst { EventEmitter } = require('node:events')\nconst {\n lsCacheSym,\n levelValSym,\n setLevelSym,\n getLevelSym,\n chindingsSym,\n parsedChindingsSym,\n mixinSym,\n asJsonSym,\n writeSym,\n mixinMergeStrategySym,\n timeSym,\n timeSliceIndexSym,\n streamSym,\n serializersSym,\n formattersSym,\n errorKeySym,\n messageKeySym,\n useOnlyCustomLevelsSym,\n needsMetadataGsym,\n redactFmtSym,\n stringifySym,\n formatOptsSym,\n stringifiersSym,\n msgPrefixSym,\n hooksSym\n} = require('./symbols')\nconst {\n getLevel,\n setLevel,\n isLevelEnabled,\n mappings,\n initialLsCache,\n genLsCache,\n assertNoLevelCollisions\n} = require('./levels')\nconst {\n asChindings,\n asJson,\n buildFormatters,\n stringify,\n noop\n} = require('./tools')\nconst {\n version\n} = require('./meta')\nconst redaction = require('./redaction')\n\n// note: use of class is satirical\n// https://github.com/pinojs/pino/pull/433#pullrequestreview-127703127\nconst constructor = class Pino {}\nconst prototype = {\n constructor,\n child,\n bindings,\n setBindings,\n flush,\n isLevelEnabled,\n version,\n get level () { return this[getLevelSym]() },\n set level (lvl) { this[setLevelSym](lvl) },\n get levelVal () { return this[levelValSym] },\n set levelVal (n) { throw Error('levelVal is read-only') },\n get msgPrefix () { return this[msgPrefixSym] },\n get [Symbol.toStringTag] () { return 'Pino' },\n [lsCacheSym]: initialLsCache,\n [writeSym]: write,\n [asJsonSym]: asJson,\n [getLevelSym]: getLevel,\n [setLevelSym]: setLevel\n}\n\nObject.setPrototypeOf(prototype, EventEmitter.prototype)\n\n// exporting and consuming the prototype object using factory pattern fixes scoping issues with getters when serializing\nmodule.exports = function () {\n return Object.create(prototype)\n}\n\nconst resetChildingsFormatter = bindings => bindings\nfunction child (bindings, options) {\n if (!bindings) {\n throw Error('missing bindings for child Pino')\n }\n const serializers = this[serializersSym]\n const formatters = this[formattersSym]\n const instance = Object.create(this)\n\n // If an `options` object was not supplied, we can improve\n // the performance of child creation by skipping\n // the checks for set options and simply return\n // a baseline instance.\n if (options == null) {\n if (instance[formattersSym].bindings !== resetChildingsFormatter) {\n instance[formattersSym] = buildFormatters(\n formatters.level,\n resetChildingsFormatter,\n formatters.log\n )\n }\n\n instance[chindingsSym] = asChindings(instance, bindings)\n\n // Always call setLevel to ensure child gets own method references\n // This prevents issues when parent methods are wrapped (e.g., by Sinon)\n instance[setLevelSym](this.level)\n\n if (this.onChild !== noop) {\n this.onChild(instance)\n }\n\n return instance\n }\n\n if (options.hasOwnProperty('serializers') === true) {\n instance[serializersSym] = Object.create(null)\n\n for (const k in serializers) {\n instance[serializersSym][k] = serializers[k]\n }\n const parentSymbols = Object.getOwnPropertySymbols(serializers)\n /* eslint no-var: off */\n for (var i = 0; i < parentSymbols.length; i++) {\n const ks = parentSymbols[i]\n instance[serializersSym][ks] = serializers[ks]\n }\n\n for (const bk in options.serializers) {\n instance[serializersSym][bk] = options.serializers[bk]\n }\n const bindingsSymbols = Object.getOwnPropertySymbols(options.serializers)\n for (var bi = 0; bi < bindingsSymbols.length; bi++) {\n const bks = bindingsSymbols[bi]\n instance[serializersSym][bks] = options.serializers[bks]\n }\n } else instance[serializersSym] = serializers\n if (options.hasOwnProperty('formatters')) {\n const { level, bindings: chindings, log } = options.formatters\n instance[formattersSym] = buildFormatters(\n level || formatters.level,\n chindings || resetChildingsFormatter,\n log || formatters.log\n )\n } else {\n instance[formattersSym] = buildFormatters(\n formatters.level,\n resetChildingsFormatter,\n formatters.log\n )\n }\n if (options.hasOwnProperty('customLevels') === true) {\n assertNoLevelCollisions(this.levels, options.customLevels)\n instance.levels = mappings(options.customLevels, instance[useOnlyCustomLevelsSym])\n genLsCache(instance)\n }\n\n // redact must place before asChindings and only replace if exist\n if ((typeof options.redact === 'object' && options.redact !== null) || Array.isArray(options.redact)) {\n instance.redact = options.redact // replace redact directly\n const stringifiers = redaction(instance.redact, stringify)\n const formatOpts = { stringify: stringifiers[redactFmtSym] }\n instance[stringifySym] = stringify\n instance[stringifiersSym] = stringifiers\n instance[formatOptsSym] = formatOpts\n }\n\n if (typeof options.msgPrefix === 'string') {\n instance[msgPrefixSym] = (this[msgPrefixSym] || '') + options.msgPrefix\n }\n\n instance[chindingsSym] = asChindings(instance, bindings)\n const childLevel = options.level || this.level\n instance[setLevelSym](childLevel)\n this.onChild(instance)\n return instance\n}\n\nfunction bindings () {\n const chindings = this[chindingsSym]\n const chindingsJson = `{${chindings.substr(1)}}` // at least contains ,\"pid\":7068,\"hostname\":\"myMac\"\n const bindingsFromJson = JSON.parse(chindingsJson)\n delete bindingsFromJson.pid\n delete bindingsFromJson.hostname\n return bindingsFromJson\n}\n\nfunction setBindings (newBindings) {\n const chindings = asChindings(this, newBindings)\n this[chindingsSym] = chindings\n delete this[parsedChindingsSym]\n}\n\n/**\n * Default strategy for creating `mergeObject` from arguments and the result from `mixin()`.\n * Fields from `mergeObject` have higher priority in this strategy.\n *\n * @param {Object} mergeObject The object a user has supplied to the logging function.\n * @param {Object} mixinObject The result of the `mixin` method.\n * @return {Object}\n */\nfunction defaultMixinMergeStrategy (mergeObject, mixinObject) {\n return Object.assign(mixinObject, mergeObject)\n}\n\nfunction write (_obj, msg, num) {\n const t = this[timeSym]()\n const mixin = this[mixinSym]\n const errorKey = this[errorKeySym]\n const messageKey = this[messageKeySym]\n const mixinMergeStrategy = this[mixinMergeStrategySym] || defaultMixinMergeStrategy\n let obj\n const streamWriteHook = this[hooksSym].streamWrite\n\n if (_obj === undefined || _obj === null) {\n obj = {}\n } else if (_obj instanceof Error) {\n obj = { [errorKey]: _obj }\n if (msg === undefined) {\n msg = _obj.message\n }\n } else {\n obj = _obj\n if (msg === undefined && _obj[messageKey] === undefined && _obj[errorKey]) {\n msg = _obj[errorKey].message\n }\n }\n\n if (mixin) {\n obj = mixinMergeStrategy(obj, mixin(obj, num, this))\n }\n\n const s = this[asJsonSym](obj, msg, num, t)\n\n const stream = this[streamSym]\n if (stream[needsMetadataGsym] === true) {\n stream.lastLevel = num\n stream.lastObj = obj\n stream.lastMsg = msg\n stream.lastTime = t.slice(this[timeSliceIndexSym])\n stream.lastLogger = this // for child loggers\n }\n stream.write(streamWriteHook ? streamWriteHook(s) : s)\n}\n\nfunction flush (cb) {\n if (cb != null && typeof cb !== 'function') {\n throw Error('callback must be a function')\n }\n\n const stream = this[streamSym]\n\n if (typeof stream.flush === 'function') {\n stream.flush(cb || noop)\n } else if (cb) cb()\n}\n","'use strict'\n\nconst { hasOwnProperty } = Object.prototype\n\nconst stringify = configure()\n\n// @ts-expect-error\nstringify.configure = configure\n// @ts-expect-error\nstringify.stringify = stringify\n\n// @ts-expect-error\nstringify.default = stringify\n\n// @ts-expect-error used for named export\nexports.stringify = stringify\n// @ts-expect-error used for named export\nexports.configure = configure\n\nmodule.exports = stringify\n\n// eslint-disable-next-line no-control-regex\nconst strEscapeSequencesRegExp = /[\\u0000-\\u001f\\u0022\\u005c\\ud800-\\udfff]/\n\n// Escape C0 control characters, double quotes, the backslash and every code\n// unit with a numeric value in the inclusive range 0xD800 to 0xDFFF.\nfunction strEscape (str) {\n // Some magic numbers that worked out fine while benchmarking with v8 8.0\n if (str.length < 5000 && !strEscapeSequencesRegExp.test(str)) {\n return `\"${str}\"`\n }\n return JSON.stringify(str)\n}\n\nfunction sort (array, comparator) {\n // Insertion sort is very efficient for small input sizes, but it has a bad\n // worst case complexity. Thus, use native array sort for bigger values.\n if (array.length > 2e2 || comparator) {\n return array.sort(comparator)\n }\n for (let i = 1; i < array.length; i++) {\n const currentValue = array[i]\n let position = i\n while (position !== 0 && array[position - 1] > currentValue) {\n array[position] = array[position - 1]\n position--\n }\n array[position] = currentValue\n }\n return array\n}\n\nconst typedArrayPrototypeGetSymbolToStringTag =\n Object.getOwnPropertyDescriptor(\n Object.getPrototypeOf(\n Object.getPrototypeOf(\n new Int8Array()\n )\n ),\n Symbol.toStringTag\n ).get\n\nfunction isTypedArrayWithEntries (value) {\n return typedArrayPrototypeGetSymbolToStringTag.call(value) !== undefined && value.length !== 0\n}\n\nfunction stringifyTypedArray (array, separator, maximumBreadth) {\n if (array.length < maximumBreadth) {\n maximumBreadth = array.length\n }\n const whitespace = separator === ',' ? '' : ' '\n let res = `\"0\":${whitespace}${array[0]}`\n for (let i = 1; i < maximumBreadth; i++) {\n res += `${separator}\"${i}\":${whitespace}${array[i]}`\n }\n return res\n}\n\nfunction getCircularValueOption (options) {\n if (hasOwnProperty.call(options, 'circularValue')) {\n const circularValue = options.circularValue\n if (typeof circularValue === 'string') {\n return `\"${circularValue}\"`\n }\n if (circularValue == null) {\n return circularValue\n }\n if (circularValue === Error || circularValue === TypeError) {\n return {\n toString () {\n throw new TypeError('Converting circular structure to JSON')\n }\n }\n }\n throw new TypeError('The \"circularValue\" argument must be of type string or the value null or undefined')\n }\n return '\"[Circular]\"'\n}\n\nfunction getDeterministicOption (options) {\n let value\n if (hasOwnProperty.call(options, 'deterministic')) {\n value = options.deterministic\n if (typeof value !== 'boolean' && typeof value !== 'function') {\n throw new TypeError('The \"deterministic\" argument must be of type boolean or comparator function')\n }\n }\n return value === undefined ? true : value\n}\n\nfunction getBooleanOption (options, key) {\n let value\n if (hasOwnProperty.call(options, key)) {\n value = options[key]\n if (typeof value !== 'boolean') {\n throw new TypeError(`The \"${key}\" argument must be of type boolean`)\n }\n }\n return value === undefined ? true : value\n}\n\nfunction getPositiveIntegerOption (options, key) {\n let value\n if (hasOwnProperty.call(options, key)) {\n value = options[key]\n if (typeof value !== 'number') {\n throw new TypeError(`The \"${key}\" argument must be of type number`)\n }\n if (!Number.isInteger(value)) {\n throw new TypeError(`The \"${key}\" argument must be an integer`)\n }\n if (value < 1) {\n throw new RangeError(`The \"${key}\" argument must be >= 1`)\n }\n }\n return value === undefined ? Infinity : value\n}\n\nfunction getItemCount (number) {\n if (number === 1) {\n return '1 item'\n }\n return `${number} items`\n}\n\nfunction getUniqueReplacerSet (replacerArray) {\n const replacerSet = new Set()\n for (const value of replacerArray) {\n if (typeof value === 'string' || typeof value === 'number') {\n replacerSet.add(String(value))\n }\n }\n return replacerSet\n}\n\nfunction getStrictOption (options) {\n if (hasOwnProperty.call(options, 'strict')) {\n const value = options.strict\n if (typeof value !== 'boolean') {\n throw new TypeError('The \"strict\" argument must be of type boolean')\n }\n if (value) {\n return (value) => {\n let message = `Object can not safely be stringified. Received type ${typeof value}`\n if (typeof value !== 'function') message += ` (${value.toString()})`\n throw new Error(message)\n }\n }\n }\n}\n\nfunction configure (options) {\n options = { ...options }\n const fail = getStrictOption(options)\n if (fail) {\n if (options.bigint === undefined) {\n options.bigint = false\n }\n if (!('circularValue' in options)) {\n options.circularValue = Error\n }\n }\n const circularValue = getCircularValueOption(options)\n const bigint = getBooleanOption(options, 'bigint')\n const deterministic = getDeterministicOption(options)\n const comparator = typeof deterministic === 'function' ? deterministic : undefined\n const maximumDepth = getPositiveIntegerOption(options, 'maximumDepth')\n const maximumBreadth = getPositiveIntegerOption(options, 'maximumBreadth')\n\n function stringifyFnReplacer (key, parent, stack, replacer, spacer, indentation) {\n let value = parent[key]\n\n if (typeof value === 'object' && value !== null && typeof value.toJSON === 'function') {\n value = value.toJSON(key)\n }\n value = replacer.call(parent, key, value)\n\n switch (typeof value) {\n case 'string':\n return strEscape(value)\n case 'object': {\n if (value === null) {\n return 'null'\n }\n if (stack.indexOf(value) !== -1) {\n return circularValue\n }\n\n let res = ''\n let join = ','\n const originalIndentation = indentation\n\n if (Array.isArray(value)) {\n if (value.length === 0) {\n return '[]'\n }\n if (maximumDepth < stack.length + 1) {\n return '\"[Array]\"'\n }\n stack.push(value)\n if (spacer !== '') {\n indentation += spacer\n res += `\\n${indentation}`\n join = `,\\n${indentation}`\n }\n const maximumValuesToStringify = Math.min(value.length, maximumBreadth)\n let i = 0\n for (; i < maximumValuesToStringify - 1; i++) {\n const tmp = stringifyFnReplacer(String(i), value, stack, replacer, spacer, indentation)\n res += tmp !== undefined ? tmp : 'null'\n res += join\n }\n const tmp = stringifyFnReplacer(String(i), value, stack, replacer, spacer, indentation)\n res += tmp !== undefined ? tmp : 'null'\n if (value.length - 1 > maximumBreadth) {\n const removedKeys = value.length - maximumBreadth - 1\n res += `${join}\"... ${getItemCount(removedKeys)} not stringified\"`\n }\n if (spacer !== '') {\n res += `\\n${originalIndentation}`\n }\n stack.pop()\n return `[${res}]`\n }\n\n let keys = Object.keys(value)\n const keyLength = keys.length\n if (keyLength === 0) {\n return '{}'\n }\n if (maximumDepth < stack.length + 1) {\n return '\"[Object]\"'\n }\n let whitespace = ''\n let separator = ''\n if (spacer !== '') {\n indentation += spacer\n join = `,\\n${indentation}`\n whitespace = ' '\n }\n const maximumPropertiesToStringify = Math.min(keyLength, maximumBreadth)\n if (deterministic && !isTypedArrayWithEntries(value)) {\n keys = sort(keys, comparator)\n }\n stack.push(value)\n for (let i = 0; i < maximumPropertiesToStringify; i++) {\n const key = keys[i]\n const tmp = stringifyFnReplacer(key, value, stack, replacer, spacer, indentation)\n if (tmp !== undefined) {\n res += `${separator}${strEscape(key)}:${whitespace}${tmp}`\n separator = join\n }\n }\n if (keyLength > maximumBreadth) {\n const removedKeys = keyLength - maximumBreadth\n res += `${separator}\"...\":${whitespace}\"${getItemCount(removedKeys)} not stringified\"`\n separator = join\n }\n if (spacer !== '' && separator.length > 1) {\n res = `\\n${indentation}${res}\\n${originalIndentation}`\n }\n stack.pop()\n return `{${res}}`\n }\n case 'number':\n return isFinite(value) ? String(value) : fail ? fail(value) : 'null'\n case 'boolean':\n return value === true ? 'true' : 'false'\n case 'undefined':\n return undefined\n case 'bigint':\n if (bigint) {\n return String(value)\n }\n // fallthrough\n default:\n return fail ? fail(value) : undefined\n }\n }\n\n function stringifyArrayReplacer (key, value, stack, replacer, spacer, indentation) {\n if (typeof value === 'object' && value !== null && typeof value.toJSON === 'function') {\n value = value.toJSON(key)\n }\n\n switch (typeof value) {\n case 'string':\n return strEscape(value)\n case 'object': {\n if (value === null) {\n return 'null'\n }\n if (stack.indexOf(value) !== -1) {\n return circularValue\n }\n\n const originalIndentation = indentation\n let res = ''\n let join = ','\n\n if (Array.isArray(value)) {\n if (value.length === 0) {\n return '[]'\n }\n if (maximumDepth < stack.length + 1) {\n return '\"[Array]\"'\n }\n stack.push(value)\n if (spacer !== '') {\n indentation += spacer\n res += `\\n${indentation}`\n join = `,\\n${indentation}`\n }\n const maximumValuesToStringify = Math.min(value.length, maximumBreadth)\n let i = 0\n for (; i < maximumValuesToStringify - 1; i++) {\n const tmp = stringifyArrayReplacer(String(i), value[i], stack, replacer, spacer, indentation)\n res += tmp !== undefined ? tmp : 'null'\n res += join\n }\n const tmp = stringifyArrayReplacer(String(i), value[i], stack, replacer, spacer, indentation)\n res += tmp !== undefined ? tmp : 'null'\n if (value.length - 1 > maximumBreadth) {\n const removedKeys = value.length - maximumBreadth - 1\n res += `${join}\"... ${getItemCount(removedKeys)} not stringified\"`\n }\n if (spacer !== '') {\n res += `\\n${originalIndentation}`\n }\n stack.pop()\n return `[${res}]`\n }\n stack.push(value)\n let whitespace = ''\n if (spacer !== '') {\n indentation += spacer\n join = `,\\n${indentation}`\n whitespace = ' '\n }\n let separator = ''\n for (const key of replacer) {\n const tmp = stringifyArrayReplacer(key, value[key], stack, replacer, spacer, indentation)\n if (tmp !== undefined) {\n res += `${separator}${strEscape(key)}:${whitespace}${tmp}`\n separator = join\n }\n }\n if (spacer !== '' && separator.length > 1) {\n res = `\\n${indentation}${res}\\n${originalIndentation}`\n }\n stack.pop()\n return `{${res}}`\n }\n case 'number':\n return isFinite(value) ? String(value) : fail ? fail(value) : 'null'\n case 'boolean':\n return value === true ? 'true' : 'false'\n case 'undefined':\n return undefined\n case 'bigint':\n if (bigint) {\n return String(value)\n }\n // fallthrough\n default:\n return fail ? fail(value) : undefined\n }\n }\n\n function stringifyIndent (key, value, stack, spacer, indentation) {\n switch (typeof value) {\n case 'string':\n return strEscape(value)\n case 'object': {\n if (value === null) {\n return 'null'\n }\n if (typeof value.toJSON === 'function') {\n value = value.toJSON(key)\n // Prevent calling `toJSON` again.\n if (typeof value !== 'object') {\n return stringifyIndent(key, value, stack, spacer, indentation)\n }\n if (value === null) {\n return 'null'\n }\n }\n if (stack.indexOf(value) !== -1) {\n return circularValue\n }\n const originalIndentation = indentation\n\n if (Array.isArray(value)) {\n if (value.length === 0) {\n return '[]'\n }\n if (maximumDepth < stack.length + 1) {\n return '\"[Array]\"'\n }\n stack.push(value)\n indentation += spacer\n let res = `\\n${indentation}`\n const join = `,\\n${indentation}`\n const maximumValuesToStringify = Math.min(value.length, maximumBreadth)\n let i = 0\n for (; i < maximumValuesToStringify - 1; i++) {\n const tmp = stringifyIndent(String(i), value[i], stack, spacer, indentation)\n res += tmp !== undefined ? tmp : 'null'\n res += join\n }\n const tmp = stringifyIndent(String(i), value[i], stack, spacer, indentation)\n res += tmp !== undefined ? tmp : 'null'\n if (value.length - 1 > maximumBreadth) {\n const removedKeys = value.length - maximumBreadth - 1\n res += `${join}\"... ${getItemCount(removedKeys)} not stringified\"`\n }\n res += `\\n${originalIndentation}`\n stack.pop()\n return `[${res}]`\n }\n\n let keys = Object.keys(value)\n const keyLength = keys.length\n if (keyLength === 0) {\n return '{}'\n }\n if (maximumDepth < stack.length + 1) {\n return '\"[Object]\"'\n }\n indentation += spacer\n const join = `,\\n${indentation}`\n let res = ''\n let separator = ''\n let maximumPropertiesToStringify = Math.min(keyLength, maximumBreadth)\n if (isTypedArrayWithEntries(value)) {\n res += stringifyTypedArray(value, join, maximumBreadth)\n keys = keys.slice(value.length)\n maximumPropertiesToStringify -= value.length\n separator = join\n }\n if (deterministic) {\n keys = sort(keys, comparator)\n }\n stack.push(value)\n for (let i = 0; i < maximumPropertiesToStringify; i++) {\n const key = keys[i]\n const tmp = stringifyIndent(key, value[key], stack, spacer, indentation)\n if (tmp !== undefined) {\n res += `${separator}${strEscape(key)}: ${tmp}`\n separator = join\n }\n }\n if (keyLength > maximumBreadth) {\n const removedKeys = keyLength - maximumBreadth\n res += `${separator}\"...\": \"${getItemCount(removedKeys)} not stringified\"`\n separator = join\n }\n if (separator !== '') {\n res = `\\n${indentation}${res}\\n${originalIndentation}`\n }\n stack.pop()\n return `{${res}}`\n }\n case 'number':\n return isFinite(value) ? String(value) : fail ? fail(value) : 'null'\n case 'boolean':\n return value === true ? 'true' : 'false'\n case 'undefined':\n return undefined\n case 'bigint':\n if (bigint) {\n return String(value)\n }\n // fallthrough\n default:\n return fail ? fail(value) : undefined\n }\n }\n\n function stringifySimple (key, value, stack) {\n switch (typeof value) {\n case 'string':\n return strEscape(value)\n case 'object': {\n if (value === null) {\n return 'null'\n }\n if (typeof value.toJSON === 'function') {\n value = value.toJSON(key)\n // Prevent calling `toJSON` again\n if (typeof value !== 'object') {\n return stringifySimple(key, value, stack)\n }\n if (value === null) {\n return 'null'\n }\n }\n if (stack.indexOf(value) !== -1) {\n return circularValue\n }\n\n let res = ''\n\n const hasLength = value.length !== undefined\n if (hasLength && Array.isArray(value)) {\n if (value.length === 0) {\n return '[]'\n }\n if (maximumDepth < stack.length + 1) {\n return '\"[Array]\"'\n }\n stack.push(value)\n const maximumValuesToStringify = Math.min(value.length, maximumBreadth)\n let i = 0\n for (; i < maximumValuesToStringify - 1; i++) {\n const tmp = stringifySimple(String(i), value[i], stack)\n res += tmp !== undefined ? tmp : 'null'\n res += ','\n }\n const tmp = stringifySimple(String(i), value[i], stack)\n res += tmp !== undefined ? tmp : 'null'\n if (value.length - 1 > maximumBreadth) {\n const removedKeys = value.length - maximumBreadth - 1\n res += `,\"... ${getItemCount(removedKeys)} not stringified\"`\n }\n stack.pop()\n return `[${res}]`\n }\n\n let keys = Object.keys(value)\n const keyLength = keys.length\n if (keyLength === 0) {\n return '{}'\n }\n if (maximumDepth < stack.length + 1) {\n return '\"[Object]\"'\n }\n let separator = ''\n let maximumPropertiesToStringify = Math.min(keyLength, maximumBreadth)\n if (hasLength && isTypedArrayWithEntries(value)) {\n res += stringifyTypedArray(value, ',', maximumBreadth)\n keys = keys.slice(value.length)\n maximumPropertiesToStringify -= value.length\n separator = ','\n }\n if (deterministic) {\n keys = sort(keys, comparator)\n }\n stack.push(value)\n for (let i = 0; i < maximumPropertiesToStringify; i++) {\n const key = keys[i]\n const tmp = stringifySimple(key, value[key], stack)\n if (tmp !== undefined) {\n res += `${separator}${strEscape(key)}:${tmp}`\n separator = ','\n }\n }\n if (keyLength > maximumBreadth) {\n const removedKeys = keyLength - maximumBreadth\n res += `${separator}\"...\":\"${getItemCount(removedKeys)} not stringified\"`\n }\n stack.pop()\n return `{${res}}`\n }\n case 'number':\n return isFinite(value) ? String(value) : fail ? fail(value) : 'null'\n case 'boolean':\n return value === true ? 'true' : 'false'\n case 'undefined':\n return undefined\n case 'bigint':\n if (bigint) {\n return String(value)\n }\n // fallthrough\n default:\n return fail ? fail(value) : undefined\n }\n }\n\n function stringify (value, replacer, space) {\n if (arguments.length > 1) {\n let spacer = ''\n if (typeof space === 'number') {\n spacer = ' '.repeat(Math.min(space, 10))\n } else if (typeof space === 'string') {\n spacer = space.slice(0, 10)\n }\n if (replacer != null) {\n if (typeof replacer === 'function') {\n return stringifyFnReplacer('', { '': value }, [], replacer, spacer, '')\n }\n if (Array.isArray(replacer)) {\n return stringifyArrayReplacer('', value, [], getUniqueReplacerSet(replacer), spacer, '')\n }\n }\n if (spacer.length !== 0) {\n return stringifyIndent('', value, [], spacer, '')\n }\n }\n return stringifySimple('', value, [])\n }\n\n return stringify\n}\n","'use strict'\n\nconst metadata = Symbol.for('pino.metadata')\nconst { DEFAULT_LEVELS } = require('./constants')\n\nconst DEFAULT_INFO_LEVEL = DEFAULT_LEVELS.info\n\nfunction multistream (streamsArray, opts) {\n streamsArray = streamsArray || []\n opts = opts || { dedupe: false }\n\n const streamLevels = Object.create(DEFAULT_LEVELS)\n streamLevels.silent = Infinity\n if (opts.levels && typeof opts.levels === 'object') {\n Object.keys(opts.levels).forEach(i => {\n streamLevels[i] = opts.levels[i]\n })\n }\n\n const res = {\n write,\n add,\n remove,\n emit,\n flushSync,\n end,\n minLevel: 0,\n lastId: 0,\n streams: [],\n clone,\n [metadata]: true,\n streamLevels\n }\n\n if (Array.isArray(streamsArray)) {\n streamsArray.forEach(add, res)\n } else {\n add.call(res, streamsArray)\n }\n\n // clean this object up\n // or it will stay allocated forever\n // as it is closed on the following closures\n streamsArray = null\n\n return res\n\n // we can exit early because the streams are ordered by level\n function write (data) {\n let dest\n const level = this.lastLevel\n const { streams } = this\n // for handling situation when several streams has the same level\n let recordedLevel = 0\n let stream\n\n // if dedupe set to true we send logs to the stream with the highest level\n // therefore, we have to change sorting order\n for (let i = initLoopVar(streams.length, opts.dedupe); checkLoopVar(i, streams.length, opts.dedupe); i = adjustLoopVar(i, opts.dedupe)) {\n dest = streams[i]\n if (dest.level <= level) {\n if (recordedLevel !== 0 && recordedLevel !== dest.level) {\n break\n }\n stream = dest.stream\n if (stream[metadata]) {\n const { lastTime, lastMsg, lastObj, lastLogger } = this\n stream.lastLevel = level\n stream.lastTime = lastTime\n stream.lastMsg = lastMsg\n stream.lastObj = lastObj\n stream.lastLogger = lastLogger\n }\n stream.write(data)\n if (opts.dedupe) {\n recordedLevel = dest.level\n }\n } else if (!opts.dedupe) {\n break\n }\n }\n }\n\n function emit (...args) {\n for (const { stream } of this.streams) {\n if (typeof stream.emit === 'function') {\n stream.emit(...args)\n }\n }\n }\n\n function flushSync () {\n for (const { stream } of this.streams) {\n if (typeof stream.flushSync === 'function') {\n stream.flushSync()\n }\n }\n }\n\n function add (dest) {\n if (!dest) {\n return res\n }\n\n // Check that dest implements either StreamEntry or DestinationStream\n const isStream = typeof dest.write === 'function' || dest.stream\n const stream_ = dest.write ? dest : dest.stream\n // This is necessary to provide a meaningful error message, otherwise it throws somewhere inside write()\n if (!isStream) {\n throw Error('stream object needs to implement either StreamEntry or DestinationStream interface')\n }\n\n const { streams, streamLevels } = this\n\n let level\n if (typeof dest.levelVal === 'number') {\n level = dest.levelVal\n } else if (typeof dest.level === 'string') {\n level = streamLevels[dest.level]\n } else if (typeof dest.level === 'number') {\n level = dest.level\n } else {\n level = DEFAULT_INFO_LEVEL\n }\n\n const dest_ = {\n stream: stream_,\n level,\n levelVal: undefined,\n id: ++res.lastId\n }\n\n streams.unshift(dest_)\n streams.sort(compareByLevel)\n\n this.minLevel = streams[0].level\n\n return res\n }\n\n function remove (id) {\n const { streams } = this\n const index = streams.findIndex(s => s.id === id)\n\n if (index >= 0) {\n streams.splice(index, 1)\n streams.sort(compareByLevel)\n this.minLevel = streams.length > 0 ? streams[0].level : -1\n }\n\n return res\n }\n\n function end () {\n for (const { stream } of this.streams) {\n if (typeof stream.flushSync === 'function') {\n stream.flushSync()\n }\n stream.end()\n }\n }\n\n function clone (level) {\n const streams = new Array(this.streams.length)\n\n for (let i = 0; i < streams.length; i++) {\n streams[i] = {\n level,\n stream: this.streams[i].stream\n }\n }\n\n return {\n write,\n add,\n remove,\n minLevel: level,\n streams,\n clone,\n emit,\n flushSync,\n [metadata]: true\n }\n }\n}\n\nfunction compareByLevel (a, b) {\n return a.level - b.level\n}\n\nfunction initLoopVar (length, dedupe) {\n return dedupe ? length - 1 : 0\n}\n\nfunction adjustLoopVar (i, dedupe) {\n return dedupe ? i - 1 : i + 1\n}\n\nfunction checkLoopVar (i, length, dedupe) {\n return dedupe ? i >= 0 : i < length\n}\n\nmodule.exports = multistream\n","'use strict'\n\nconst os = require('node:os')\nconst stdSerializers = require('pino-std-serializers')\nconst caller = require('./lib/caller')\nconst redaction = require('./lib/redaction')\nconst time = require('./lib/time')\nconst proto = require('./lib/proto')\nconst symbols = require('./lib/symbols')\nconst { configure } = require('safe-stable-stringify')\nconst { assertDefaultLevelFound, mappings, genLsCache, genLevelComparison, assertLevelComparison } = require('./lib/levels')\nconst { DEFAULT_LEVELS, SORTING_ORDER } = require('./lib/constants')\nconst {\n createArgsNormalizer,\n asChindings,\n buildSafeSonicBoom,\n buildFormatters,\n stringify,\n normalizeDestFileDescriptor,\n noop\n} = require('./lib/tools')\nconst { version } = require('./lib/meta')\nconst {\n chindingsSym,\n redactFmtSym,\n serializersSym,\n timeSym,\n timeSliceIndexSym,\n streamSym,\n stringifySym,\n stringifySafeSym,\n stringifiersSym,\n setLevelSym,\n endSym,\n formatOptsSym,\n messageKeySym,\n errorKeySym,\n nestedKeySym,\n mixinSym,\n levelCompSym,\n useOnlyCustomLevelsSym,\n formattersSym,\n hooksSym,\n nestedKeyStrSym,\n mixinMergeStrategySym,\n msgPrefixSym\n} = symbols\nconst { epochTime, nullTime } = time\nconst { pid } = process\nconst hostname = os.hostname()\nconst defaultErrorSerializer = stdSerializers.err\nconst defaultOptions = {\n level: 'info',\n levelComparison: SORTING_ORDER.ASC,\n levels: DEFAULT_LEVELS,\n messageKey: 'msg',\n errorKey: 'err',\n nestedKey: null,\n enabled: true,\n base: { pid, hostname },\n serializers: Object.assign(Object.create(null), {\n err: defaultErrorSerializer\n }),\n formatters: Object.assign(Object.create(null), {\n bindings (bindings) {\n return bindings\n },\n level (label, number) {\n return { level: number }\n }\n }),\n hooks: {\n logMethod: undefined,\n streamWrite: undefined\n },\n timestamp: epochTime,\n name: undefined,\n redact: null,\n customLevels: null,\n useOnlyCustomLevels: false,\n depthLimit: 5,\n edgeLimit: 100\n}\n\nconst normalize = createArgsNormalizer(defaultOptions)\n\nconst serializers = Object.assign(Object.create(null), stdSerializers)\n\nfunction pino (...args) {\n const instance = {}\n const { opts, stream } = normalize(instance, caller(), ...args)\n\n if (opts.level && typeof opts.level === 'string' && DEFAULT_LEVELS[opts.level.toLowerCase()] !== undefined) opts.level = opts.level.toLowerCase()\n\n const {\n redact,\n crlf,\n serializers,\n timestamp,\n messageKey,\n errorKey,\n nestedKey,\n base,\n name,\n level,\n customLevels,\n levelComparison,\n mixin,\n mixinMergeStrategy,\n useOnlyCustomLevels,\n formatters,\n hooks,\n depthLimit,\n edgeLimit,\n onChild,\n msgPrefix\n } = opts\n\n const stringifySafe = configure({\n maximumDepth: depthLimit,\n maximumBreadth: edgeLimit\n })\n\n const allFormatters = buildFormatters(\n formatters.level,\n formatters.bindings,\n formatters.log\n )\n\n const stringifyFn = stringify.bind({\n [stringifySafeSym]: stringifySafe\n })\n const stringifiers = redact ? redaction(redact, stringifyFn) : {}\n const formatOpts = redact\n ? { stringify: stringifiers[redactFmtSym] }\n : { stringify: stringifyFn }\n const end = '}' + (crlf ? '\\r\\n' : '\\n')\n const coreChindings = asChindings.bind(null, {\n [chindingsSym]: '',\n [serializersSym]: serializers,\n [stringifiersSym]: stringifiers,\n [stringifySym]: stringify,\n [stringifySafeSym]: stringifySafe,\n [formattersSym]: allFormatters\n })\n\n let chindings = ''\n if (base !== null) {\n if (name === undefined) {\n chindings = coreChindings(base)\n } else {\n chindings = coreChindings(Object.assign({}, base, { name }))\n }\n }\n\n const time = (timestamp instanceof Function)\n ? timestamp\n : (timestamp ? epochTime : nullTime)\n const timeSliceIndex = time().indexOf(':') + 1\n\n if (useOnlyCustomLevels && !customLevels) throw Error('customLevels is required if useOnlyCustomLevels is set true')\n if (mixin && typeof mixin !== 'function') throw Error(`Unknown mixin type \"${typeof mixin}\" - expected \"function\"`)\n if (msgPrefix && typeof msgPrefix !== 'string') throw Error(`Unknown msgPrefix type \"${typeof msgPrefix}\" - expected \"string\"`)\n\n assertDefaultLevelFound(level, customLevels, useOnlyCustomLevels)\n const levels = mappings(customLevels, useOnlyCustomLevels)\n\n if (typeof stream.emit === 'function') {\n stream.emit('message', { code: 'PINO_CONFIG', config: { levels, messageKey, errorKey } })\n }\n\n assertLevelComparison(levelComparison)\n const levelCompFunc = genLevelComparison(levelComparison)\n\n Object.assign(instance, {\n levels,\n [levelCompSym]: levelCompFunc,\n [useOnlyCustomLevelsSym]: useOnlyCustomLevels,\n [streamSym]: stream,\n [timeSym]: time,\n [timeSliceIndexSym]: timeSliceIndex,\n [stringifySym]: stringify,\n [stringifySafeSym]: stringifySafe,\n [stringifiersSym]: stringifiers,\n [endSym]: end,\n [formatOptsSym]: formatOpts,\n [messageKeySym]: messageKey,\n [errorKeySym]: errorKey,\n [nestedKeySym]: nestedKey,\n // protect against injection\n [nestedKeyStrSym]: nestedKey ? `,${JSON.stringify(nestedKey)}:{` : '',\n [serializersSym]: serializers,\n [mixinSym]: mixin,\n [mixinMergeStrategySym]: mixinMergeStrategy,\n [chindingsSym]: chindings,\n [formattersSym]: allFormatters,\n [hooksSym]: hooks,\n silent: noop,\n onChild,\n [msgPrefixSym]: msgPrefix\n })\n\n Object.setPrototypeOf(instance, proto())\n\n genLsCache(instance)\n\n instance[setLevelSym](level)\n\n return instance\n}\n\nmodule.exports = pino\n\nmodule.exports.destination = (dest = process.stdout.fd) => {\n if (typeof dest === 'object') {\n dest.dest = normalizeDestFileDescriptor(dest.dest || process.stdout.fd)\n return buildSafeSonicBoom(dest)\n } else {\n return buildSafeSonicBoom({ dest: normalizeDestFileDescriptor(dest), minLength: 0 })\n }\n}\n\nmodule.exports.transport = require('./lib/transport')\nmodule.exports.multistream = require('./lib/multistream')\n\nmodule.exports.levels = mappings()\nmodule.exports.stdSerializers = serializers\nmodule.exports.stdTimeFunctions = Object.assign({}, time)\nmodule.exports.symbols = symbols\nmodule.exports.version = version\n\n// Enables default and name export with TypeScript and Babel\nmodule.exports.default = pino\nmodule.exports.pino = pino\n","'use strict';\n\nconst BINARY_TYPES = ['nodebuffer', 'arraybuffer', 'fragments'];\nconst hasBlob = typeof Blob !== 'undefined';\n\nif (hasBlob) BINARY_TYPES.push('blob');\n\nmodule.exports = {\n BINARY_TYPES,\n CLOSE_TIMEOUT: 30000,\n EMPTY_BUFFER: Buffer.alloc(0),\n GUID: '258EAFA5-E914-47DA-95CA-C5AB0DC85B11',\n hasBlob,\n kForOnEventAttribute: Symbol('kIsForOnEventAttribute'),\n kListener: Symbol('kListener'),\n kStatusCode: Symbol('status-code'),\n kWebSocket: Symbol('websocket'),\n NOOP: () => {}\n};\n","'use strict';\n\nconst { EMPTY_BUFFER } = require('./constants');\n\nconst FastBuffer = Buffer[Symbol.species];\n\n/**\n * Merges an array of buffers into a new buffer.\n *\n * @param {Buffer[]} list The array of buffers to concat\n * @param {Number} totalLength The total length of buffers in the list\n * @return {Buffer} The resulting buffer\n * @public\n */\nfunction concat(list, totalLength) {\n if (list.length === 0) return EMPTY_BUFFER;\n if (list.length === 1) return list[0];\n\n const target = Buffer.allocUnsafe(totalLength);\n let offset = 0;\n\n for (let i = 0; i < list.length; i++) {\n const buf = list[i];\n target.set(buf, offset);\n offset += buf.length;\n }\n\n if (offset < totalLength) {\n return new FastBuffer(target.buffer, target.byteOffset, offset);\n }\n\n return target;\n}\n\n/**\n * Masks a buffer using the given mask.\n *\n * @param {Buffer} source The buffer to mask\n * @param {Buffer} mask The mask to use\n * @param {Buffer} output The buffer where to store the result\n * @param {Number} offset The offset at which to start writing\n * @param {Number} length The number of bytes to mask.\n * @public\n */\nfunction _mask(source, mask, output, offset, length) {\n for (let i = 0; i < length; i++) {\n output[offset + i] = source[i] ^ mask[i & 3];\n }\n}\n\n/**\n * Unmasks a buffer using the given mask.\n *\n * @param {Buffer} buffer The buffer to unmask\n * @param {Buffer} mask The mask to use\n * @public\n */\nfunction _unmask(buffer, mask) {\n for (let i = 0; i < buffer.length; i++) {\n buffer[i] ^= mask[i & 3];\n }\n}\n\n/**\n * Converts a buffer to an `ArrayBuffer`.\n *\n * @param {Buffer} buf The buffer to convert\n * @return {ArrayBuffer} Converted buffer\n * @public\n */\nfunction toArrayBuffer(buf) {\n if (buf.length === buf.buffer.byteLength) {\n return buf.buffer;\n }\n\n return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.length);\n}\n\n/**\n * Converts `data` to a `Buffer`.\n *\n * @param {*} data The data to convert\n * @return {Buffer} The buffer\n * @throws {TypeError}\n * @public\n */\nfunction toBuffer(data) {\n toBuffer.readOnly = true;\n\n if (Buffer.isBuffer(data)) return data;\n\n let buf;\n\n if (data instanceof ArrayBuffer) {\n buf = new FastBuffer(data);\n } else if (ArrayBuffer.isView(data)) {\n buf = new FastBuffer(data.buffer, data.byteOffset, data.byteLength);\n } else {\n buf = Buffer.from(data);\n toBuffer.readOnly = false;\n }\n\n return buf;\n}\n\nmodule.exports = {\n concat,\n mask: _mask,\n toArrayBuffer,\n toBuffer,\n unmask: _unmask\n};\n\n/* istanbul ignore else */\nif (!process.env.WS_NO_BUFFER_UTIL) {\n try {\n const bufferUtil = require('bufferutil');\n\n module.exports.mask = function (source, mask, output, offset, length) {\n if (length < 48) _mask(source, mask, output, offset, length);\n else bufferUtil.mask(source, mask, output, offset, length);\n };\n\n module.exports.unmask = function (buffer, mask) {\n if (buffer.length < 32) _unmask(buffer, mask);\n else bufferUtil.unmask(buffer, mask);\n };\n } catch (e) {\n // Continue regardless of the error.\n }\n}\n","'use strict';\n\nconst kDone = Symbol('kDone');\nconst kRun = Symbol('kRun');\n\n/**\n * A very simple job queue with adjustable concurrency. Adapted from\n * https://github.com/STRML/async-limiter\n */\nclass Limiter {\n /**\n * Creates a new `Limiter`.\n *\n * @param {Number} [concurrency=Infinity] The maximum number of jobs allowed\n * to run concurrently\n */\n constructor(concurrency) {\n this[kDone] = () => {\n this.pending--;\n this[kRun]();\n };\n this.concurrency = concurrency || Infinity;\n this.jobs = [];\n this.pending = 0;\n }\n\n /**\n * Adds a job to the queue.\n *\n * @param {Function} job The job to run\n * @public\n */\n add(job) {\n this.jobs.push(job);\n this[kRun]();\n }\n\n /**\n * Removes a job from the queue and runs it if possible.\n *\n * @private\n */\n [kRun]() {\n if (this.pending === this.concurrency) return;\n\n if (this.jobs.length) {\n const job = this.jobs.shift();\n\n this.pending++;\n job(this[kDone]);\n }\n }\n}\n\nmodule.exports = Limiter;\n","'use strict';\n\nconst zlib = require('zlib');\n\nconst bufferUtil = require('./buffer-util');\nconst Limiter = require('./limiter');\nconst { kStatusCode } = require('./constants');\n\nconst FastBuffer = Buffer[Symbol.species];\nconst TRAILER = Buffer.from([0x00, 0x00, 0xff, 0xff]);\nconst kPerMessageDeflate = Symbol('permessage-deflate');\nconst kTotalLength = Symbol('total-length');\nconst kCallback = Symbol('callback');\nconst kBuffers = Symbol('buffers');\nconst kError = Symbol('error');\n\n//\n// We limit zlib concurrency, which prevents severe memory fragmentation\n// as documented in https://github.com/nodejs/node/issues/8871#issuecomment-250915913\n// and https://github.com/websockets/ws/issues/1202\n//\n// Intentionally global; it's the global thread pool that's an issue.\n//\nlet zlibLimiter;\n\n/**\n * permessage-deflate implementation.\n */\nclass PerMessageDeflate {\n /**\n * Creates a PerMessageDeflate instance.\n *\n * @param {Object} [options] Configuration options\n * @param {(Boolean|Number)} [options.clientMaxWindowBits] Advertise support\n * for, or request, a custom client window size\n * @param {Boolean} [options.clientNoContextTakeover=false] Advertise/\n * acknowledge disabling of client context takeover\n * @param {Number} [options.concurrencyLimit=10] The number of concurrent\n * calls to zlib\n * @param {Boolean} [options.isServer=false] Create the instance in either\n * server or client mode\n * @param {Number} [options.maxPayload=0] The maximum allowed message length\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 */\n constructor(options) {\n this._options = options || {};\n this._threshold =\n this._options.threshold !== undefined ? this._options.threshold : 1024;\n this._maxPayload = this._options.maxPayload | 0;\n this._isServer = !!this._options.isServer;\n this._deflate = null;\n this._inflate = null;\n\n this.params = null;\n\n if (!zlibLimiter) {\n const concurrency =\n this._options.concurrencyLimit !== undefined\n ? this._options.concurrencyLimit\n : 10;\n zlibLimiter = new Limiter(concurrency);\n }\n }\n\n /**\n * @type {String}\n */\n static get extensionName() {\n return 'permessage-deflate';\n }\n\n /**\n * Create an extension negotiation offer.\n *\n * @return {Object} Extension parameters\n * @public\n */\n offer() {\n const params = {};\n\n if (this._options.serverNoContextTakeover) {\n params.server_no_context_takeover = true;\n }\n if (this._options.clientNoContextTakeover) {\n params.client_no_context_takeover = true;\n }\n if (this._options.serverMaxWindowBits) {\n params.server_max_window_bits = this._options.serverMaxWindowBits;\n }\n if (this._options.clientMaxWindowBits) {\n params.client_max_window_bits = this._options.clientMaxWindowBits;\n } else if (this._options.clientMaxWindowBits == null) {\n params.client_max_window_bits = true;\n }\n\n return params;\n }\n\n /**\n * Accept an extension negotiation offer/response.\n *\n * @param {Array} configurations The extension negotiation offers/reponse\n * @return {Object} Accepted configuration\n * @public\n */\n accept(configurations) {\n configurations = this.normalizeParams(configurations);\n\n this.params = this._isServer\n ? this.acceptAsServer(configurations)\n : this.acceptAsClient(configurations);\n\n return this.params;\n }\n\n /**\n * Releases all resources used by the extension.\n *\n * @public\n */\n cleanup() {\n if (this._inflate) {\n this._inflate.close();\n this._inflate = null;\n }\n\n if (this._deflate) {\n const callback = this._deflate[kCallback];\n\n this._deflate.close();\n this._deflate = null;\n\n if (callback) {\n callback(\n new Error(\n 'The deflate stream was closed while data was being processed'\n )\n );\n }\n }\n }\n\n /**\n * Accept an extension negotiation offer.\n *\n * @param {Array} offers The extension negotiation offers\n * @return {Object} Accepted configuration\n * @private\n */\n acceptAsServer(offers) {\n const opts = this._options;\n const accepted = offers.find((params) => {\n if (\n (opts.serverNoContextTakeover === false &&\n params.server_no_context_takeover) ||\n (params.server_max_window_bits &&\n (opts.serverMaxWindowBits === false ||\n (typeof opts.serverMaxWindowBits === 'number' &&\n opts.serverMaxWindowBits > params.server_max_window_bits))) ||\n (typeof opts.clientMaxWindowBits === 'number' &&\n !params.client_max_window_bits)\n ) {\n return false;\n }\n\n return true;\n });\n\n if (!accepted) {\n throw new Error('None of the extension offers can be accepted');\n }\n\n if (opts.serverNoContextTakeover) {\n accepted.server_no_context_takeover = true;\n }\n if (opts.clientNoContextTakeover) {\n accepted.client_no_context_takeover = true;\n }\n if (typeof opts.serverMaxWindowBits === 'number') {\n accepted.server_max_window_bits = opts.serverMaxWindowBits;\n }\n if (typeof opts.clientMaxWindowBits === 'number') {\n accepted.client_max_window_bits = opts.clientMaxWindowBits;\n } else if (\n accepted.client_max_window_bits === true ||\n opts.clientMaxWindowBits === false\n ) {\n delete accepted.client_max_window_bits;\n }\n\n return accepted;\n }\n\n /**\n * Accept the extension negotiation response.\n *\n * @param {Array} response The extension negotiation response\n * @return {Object} Accepted configuration\n * @private\n */\n acceptAsClient(response) {\n const params = response[0];\n\n if (\n this._options.clientNoContextTakeover === false &&\n params.client_no_context_takeover\n ) {\n throw new Error('Unexpected parameter \"client_no_context_takeover\"');\n }\n\n if (!params.client_max_window_bits) {\n if (typeof this._options.clientMaxWindowBits === 'number') {\n params.client_max_window_bits = this._options.clientMaxWindowBits;\n }\n } else if (\n this._options.clientMaxWindowBits === false ||\n (typeof this._options.clientMaxWindowBits === 'number' &&\n params.client_max_window_bits > this._options.clientMaxWindowBits)\n ) {\n throw new Error(\n 'Unexpected or invalid parameter \"client_max_window_bits\"'\n );\n }\n\n return params;\n }\n\n /**\n * Normalize parameters.\n *\n * @param {Array} configurations The extension negotiation offers/reponse\n * @return {Array} The offers/response with normalized parameters\n * @private\n */\n normalizeParams(configurations) {\n configurations.forEach((params) => {\n Object.keys(params).forEach((key) => {\n let value = params[key];\n\n if (value.length > 1) {\n throw new Error(`Parameter \"${key}\" must have only a single value`);\n }\n\n value = value[0];\n\n if (key === 'client_max_window_bits') {\n if (value !== true) {\n const num = +value;\n if (!Number.isInteger(num) || num < 8 || num > 15) {\n throw new TypeError(\n `Invalid value for parameter \"${key}\": ${value}`\n );\n }\n value = num;\n } else if (!this._isServer) {\n throw new TypeError(\n `Invalid value for parameter \"${key}\": ${value}`\n );\n }\n } else if (key === 'server_max_window_bits') {\n const num = +value;\n if (!Number.isInteger(num) || num < 8 || num > 15) {\n throw new TypeError(\n `Invalid value for parameter \"${key}\": ${value}`\n );\n }\n value = num;\n } else if (\n key === 'client_no_context_takeover' ||\n key === 'server_no_context_takeover'\n ) {\n if (value !== true) {\n throw new TypeError(\n `Invalid value for parameter \"${key}\": ${value}`\n );\n }\n } else {\n throw new Error(`Unknown parameter \"${key}\"`);\n }\n\n params[key] = value;\n });\n });\n\n return configurations;\n }\n\n /**\n * Decompress data. Concurrency limited.\n *\n * @param {Buffer} data Compressed data\n * @param {Boolean} fin Specifies whether or not this is the last fragment\n * @param {Function} callback Callback\n * @public\n */\n decompress(data, fin, callback) {\n zlibLimiter.add((done) => {\n this._decompress(data, fin, (err, result) => {\n done();\n callback(err, result);\n });\n });\n }\n\n /**\n * Compress data. Concurrency limited.\n *\n * @param {(Buffer|String)} data Data to compress\n * @param {Boolean} fin Specifies whether or not this is the last fragment\n * @param {Function} callback Callback\n * @public\n */\n compress(data, fin, callback) {\n zlibLimiter.add((done) => {\n this._compress(data, fin, (err, result) => {\n done();\n callback(err, result);\n });\n });\n }\n\n /**\n * Decompress data.\n *\n * @param {Buffer} data Compressed data\n * @param {Boolean} fin Specifies whether or not this is the last fragment\n * @param {Function} callback Callback\n * @private\n */\n _decompress(data, fin, callback) {\n const endpoint = this._isServer ? 'client' : 'server';\n\n if (!this._inflate) {\n const key = `${endpoint}_max_window_bits`;\n const windowBits =\n typeof this.params[key] !== 'number'\n ? zlib.Z_DEFAULT_WINDOWBITS\n : this.params[key];\n\n this._inflate = zlib.createInflateRaw({\n ...this._options.zlibInflateOptions,\n windowBits\n });\n this._inflate[kPerMessageDeflate] = this;\n this._inflate[kTotalLength] = 0;\n this._inflate[kBuffers] = [];\n this._inflate.on('error', inflateOnError);\n this._inflate.on('data', inflateOnData);\n }\n\n this._inflate[kCallback] = callback;\n\n this._inflate.write(data);\n if (fin) this._inflate.write(TRAILER);\n\n this._inflate.flush(() => {\n const err = this._inflate[kError];\n\n if (err) {\n this._inflate.close();\n this._inflate = null;\n callback(err);\n return;\n }\n\n const data = bufferUtil.concat(\n this._inflate[kBuffers],\n this._inflate[kTotalLength]\n );\n\n if (this._inflate._readableState.endEmitted) {\n this._inflate.close();\n this._inflate = null;\n } else {\n this._inflate[kTotalLength] = 0;\n this._inflate[kBuffers] = [];\n\n if (fin && this.params[`${endpoint}_no_context_takeover`]) {\n this._inflate.reset();\n }\n }\n\n callback(null, data);\n });\n }\n\n /**\n * Compress data.\n *\n * @param {(Buffer|String)} data Data to compress\n * @param {Boolean} fin Specifies whether or not this is the last fragment\n * @param {Function} callback Callback\n * @private\n */\n _compress(data, fin, callback) {\n const endpoint = this._isServer ? 'server' : 'client';\n\n if (!this._deflate) {\n const key = `${endpoint}_max_window_bits`;\n const windowBits =\n typeof this.params[key] !== 'number'\n ? zlib.Z_DEFAULT_WINDOWBITS\n : this.params[key];\n\n this._deflate = zlib.createDeflateRaw({\n ...this._options.zlibDeflateOptions,\n windowBits\n });\n\n this._deflate[kTotalLength] = 0;\n this._deflate[kBuffers] = [];\n\n this._deflate.on('data', deflateOnData);\n }\n\n this._deflate[kCallback] = callback;\n\n this._deflate.write(data);\n this._deflate.flush(zlib.Z_SYNC_FLUSH, () => {\n if (!this._deflate) {\n //\n // The deflate stream was closed while data was being processed.\n //\n return;\n }\n\n let data = bufferUtil.concat(\n this._deflate[kBuffers],\n this._deflate[kTotalLength]\n );\n\n if (fin) {\n data = new FastBuffer(data.buffer, data.byteOffset, data.length - 4);\n }\n\n //\n // Ensure that the callback will not be called again in\n // `PerMessageDeflate#cleanup()`.\n //\n this._deflate[kCallback] = null;\n\n this._deflate[kTotalLength] = 0;\n this._deflate[kBuffers] = [];\n\n if (fin && this.params[`${endpoint}_no_context_takeover`]) {\n this._deflate.reset();\n }\n\n callback(null, data);\n });\n }\n}\n\nmodule.exports = PerMessageDeflate;\n\n/**\n * The listener of the `zlib.DeflateRaw` stream `'data'` event.\n *\n * @param {Buffer} chunk A chunk of data\n * @private\n */\nfunction deflateOnData(chunk) {\n this[kBuffers].push(chunk);\n this[kTotalLength] += chunk.length;\n}\n\n/**\n * The listener of the `zlib.InflateRaw` stream `'data'` event.\n *\n * @param {Buffer} chunk A chunk of data\n * @private\n */\nfunction inflateOnData(chunk) {\n this[kTotalLength] += chunk.length;\n\n if (\n this[kPerMessageDeflate]._maxPayload < 1 ||\n this[kTotalLength] <= this[kPerMessageDeflate]._maxPayload\n ) {\n this[kBuffers].push(chunk);\n return;\n }\n\n this[kError] = new RangeError('Max payload size exceeded');\n this[kError].code = 'WS_ERR_UNSUPPORTED_MESSAGE_LENGTH';\n this[kError][kStatusCode] = 1009;\n this.removeListener('data', inflateOnData);\n\n //\n // The choice to employ `zlib.reset()` over `zlib.close()` is dictated by the\n // fact that in Node.js versions prior to 13.10.0, the callback for\n // `zlib.flush()` is not called if `zlib.close()` is used. Utilizing\n // `zlib.reset()` ensures that either the callback is invoked or an error is\n // emitted.\n //\n this.reset();\n}\n\n/**\n * The listener of the `zlib.InflateRaw` stream `'error'` event.\n *\n * @param {Error} err The emitted error\n * @private\n */\nfunction inflateOnError(err) {\n //\n // There is no need to call `Zlib#close()` as the handle is automatically\n // closed when an error is emitted.\n //\n this[kPerMessageDeflate]._inflate = null;\n\n if (this[kError]) {\n this[kCallback](this[kError]);\n return;\n }\n\n err[kStatusCode] = 1007;\n this[kCallback](err);\n}\n","'use strict';\n\nconst { isUtf8 } = require('buffer');\n\nconst { hasBlob } = require('./constants');\n\n//\n// Allowed token characters:\n//\n// '!', '#', '$', '%', '&', ''', '*', '+', '-',\n// '.', 0-9, A-Z, '^', '_', '`', a-z, '|', '~'\n//\n// tokenChars[32] === 0 // ' '\n// tokenChars[33] === 1 // '!'\n// tokenChars[34] === 0 // '\"'\n// ...\n//\n// prettier-ignore\nconst tokenChars = [\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0 - 15\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 16 - 31\n 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, // 32 - 47\n 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, // 48 - 63\n 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 64 - 79\n 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, // 80 - 95\n 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 96 - 111\n 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0 // 112 - 127\n];\n\n/**\n * Checks if a status code is allowed in a close frame.\n *\n * @param {Number} code The status code\n * @return {Boolean} `true` if the status code is valid, else `false`\n * @public\n */\nfunction isValidStatusCode(code) {\n return (\n (code >= 1000 &&\n code <= 1014 &&\n code !== 1004 &&\n code !== 1005 &&\n code !== 1006) ||\n (code >= 3000 && code <= 4999)\n );\n}\n\n/**\n * Checks if a given buffer contains only correct UTF-8.\n * Ported from https://www.cl.cam.ac.uk/%7Emgk25/ucs/utf8_check.c by\n * Markus Kuhn.\n *\n * @param {Buffer} buf The buffer to check\n * @return {Boolean} `true` if `buf` contains only correct UTF-8, else `false`\n * @public\n */\nfunction _isValidUTF8(buf) {\n const len = buf.length;\n let i = 0;\n\n while (i < len) {\n if ((buf[i] & 0x80) === 0) {\n // 0xxxxxxx\n i++;\n } else if ((buf[i] & 0xe0) === 0xc0) {\n // 110xxxxx 10xxxxxx\n if (\n i + 1 === len ||\n (buf[i + 1] & 0xc0) !== 0x80 ||\n (buf[i] & 0xfe) === 0xc0 // Overlong\n ) {\n return false;\n }\n\n i += 2;\n } else if ((buf[i] & 0xf0) === 0xe0) {\n // 1110xxxx 10xxxxxx 10xxxxxx\n if (\n i + 2 >= len ||\n (buf[i + 1] & 0xc0) !== 0x80 ||\n (buf[i + 2] & 0xc0) !== 0x80 ||\n (buf[i] === 0xe0 && (buf[i + 1] & 0xe0) === 0x80) || // Overlong\n (buf[i] === 0xed && (buf[i + 1] & 0xe0) === 0xa0) // Surrogate (U+D800 - U+DFFF)\n ) {\n return false;\n }\n\n i += 3;\n } else if ((buf[i] & 0xf8) === 0xf0) {\n // 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx\n if (\n i + 3 >= len ||\n (buf[i + 1] & 0xc0) !== 0x80 ||\n (buf[i + 2] & 0xc0) !== 0x80 ||\n (buf[i + 3] & 0xc0) !== 0x80 ||\n (buf[i] === 0xf0 && (buf[i + 1] & 0xf0) === 0x80) || // Overlong\n (buf[i] === 0xf4 && buf[i + 1] > 0x8f) ||\n buf[i] > 0xf4 // > U+10FFFF\n ) {\n return false;\n }\n\n i += 4;\n } else {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Determines whether a value is a `Blob`.\n *\n * @param {*} value The value to be tested\n * @return {Boolean} `true` if `value` is a `Blob`, else `false`\n * @private\n */\nfunction isBlob(value) {\n return (\n hasBlob &&\n typeof value === 'object' &&\n typeof value.arrayBuffer === 'function' &&\n typeof value.type === 'string' &&\n typeof value.stream === 'function' &&\n (value[Symbol.toStringTag] === 'Blob' ||\n value[Symbol.toStringTag] === 'File')\n );\n}\n\nmodule.exports = {\n isBlob,\n isValidStatusCode,\n isValidUTF8: _isValidUTF8,\n tokenChars\n};\n\nif (isUtf8) {\n module.exports.isValidUTF8 = function (buf) {\n return buf.length < 24 ? _isValidUTF8(buf) : isUtf8(buf);\n };\n} /* istanbul ignore else */ else if (!process.env.WS_NO_UTF_8_VALIDATE) {\n try {\n const isValidUTF8 = require('utf-8-validate');\n\n module.exports.isValidUTF8 = function (buf) {\n return buf.length < 32 ? _isValidUTF8(buf) : isValidUTF8(buf);\n };\n } catch (e) {\n // Continue regardless of the error.\n }\n}\n","'use strict';\n\nconst { Writable } = require('stream');\n\nconst PerMessageDeflate = require('./permessage-deflate');\nconst {\n BINARY_TYPES,\n EMPTY_BUFFER,\n kStatusCode,\n kWebSocket\n} = require('./constants');\nconst { concat, toArrayBuffer, unmask } = require('./buffer-util');\nconst { isValidStatusCode, isValidUTF8 } = require('./validation');\n\nconst FastBuffer = Buffer[Symbol.species];\n\nconst GET_INFO = 0;\nconst GET_PAYLOAD_LENGTH_16 = 1;\nconst GET_PAYLOAD_LENGTH_64 = 2;\nconst GET_MASK = 3;\nconst GET_DATA = 4;\nconst INFLATING = 5;\nconst DEFER_EVENT = 6;\n\n/**\n * HyBi Receiver implementation.\n *\n * @extends Writable\n */\nclass Receiver extends Writable {\n /**\n * Creates a Receiver instance.\n *\n * @param {Object} [options] Options object\n * @param {Boolean} [options.allowSynchronousEvents=true] Specifies whether\n * any of the `'message'`, `'ping'`, and `'pong'` events can be emitted\n * multiple times in the same tick\n * @param {String} [options.binaryType=nodebuffer] The type for binary data\n * @param {Object} [options.extensions] An object containing the negotiated\n * extensions\n * @param {Boolean} [options.isServer=false] Specifies whether to operate in\n * client or server mode\n * @param {Number} [options.maxPayload=0] The maximum allowed message length\n * @param {Boolean} [options.skipUTF8Validation=false] Specifies whether or\n * not to skip UTF-8 validation for text and close messages\n */\n constructor(options = {}) {\n super();\n\n this._allowSynchronousEvents =\n options.allowSynchronousEvents !== undefined\n ? options.allowSynchronousEvents\n : true;\n this._binaryType = options.binaryType || BINARY_TYPES[0];\n this._extensions = options.extensions || {};\n this._isServer = !!options.isServer;\n this._maxPayload = options.maxPayload | 0;\n this._skipUTF8Validation = !!options.skipUTF8Validation;\n this[kWebSocket] = undefined;\n\n this._bufferedBytes = 0;\n this._buffers = [];\n\n this._compressed = false;\n this._payloadLength = 0;\n this._mask = undefined;\n this._fragmented = 0;\n this._masked = false;\n this._fin = false;\n this._opcode = 0;\n\n this._totalPayloadLength = 0;\n this._messageLength = 0;\n this._fragments = [];\n\n this._errored = false;\n this._loop = false;\n this._state = GET_INFO;\n }\n\n /**\n * Implements `Writable.prototype._write()`.\n *\n * @param {Buffer} chunk The chunk of data to write\n * @param {String} encoding The character encoding of `chunk`\n * @param {Function} cb Callback\n * @private\n */\n _write(chunk, encoding, cb) {\n if (this._opcode === 0x08 && this._state == GET_INFO) return cb();\n\n this._bufferedBytes += chunk.length;\n this._buffers.push(chunk);\n this.startLoop(cb);\n }\n\n /**\n * Consumes `n` bytes from the buffered data.\n *\n * @param {Number} n The number of bytes to consume\n * @return {Buffer} The consumed bytes\n * @private\n */\n consume(n) {\n this._bufferedBytes -= n;\n\n if (n === this._buffers[0].length) return this._buffers.shift();\n\n if (n < this._buffers[0].length) {\n const buf = this._buffers[0];\n this._buffers[0] = new FastBuffer(\n buf.buffer,\n buf.byteOffset + n,\n buf.length - n\n );\n\n return new FastBuffer(buf.buffer, buf.byteOffset, n);\n }\n\n const dst = Buffer.allocUnsafe(n);\n\n do {\n const buf = this._buffers[0];\n const offset = dst.length - n;\n\n if (n >= buf.length) {\n dst.set(this._buffers.shift(), offset);\n } else {\n dst.set(new Uint8Array(buf.buffer, buf.byteOffset, n), offset);\n this._buffers[0] = new FastBuffer(\n buf.buffer,\n buf.byteOffset + n,\n buf.length - n\n );\n }\n\n n -= buf.length;\n } while (n > 0);\n\n return dst;\n }\n\n /**\n * Starts the parsing loop.\n *\n * @param {Function} cb Callback\n * @private\n */\n startLoop(cb) {\n this._loop = true;\n\n do {\n switch (this._state) {\n case GET_INFO:\n this.getInfo(cb);\n break;\n case GET_PAYLOAD_LENGTH_16:\n this.getPayloadLength16(cb);\n break;\n case GET_PAYLOAD_LENGTH_64:\n this.getPayloadLength64(cb);\n break;\n case GET_MASK:\n this.getMask();\n break;\n case GET_DATA:\n this.getData(cb);\n break;\n case INFLATING:\n case DEFER_EVENT:\n this._loop = false;\n return;\n }\n } while (this._loop);\n\n if (!this._errored) cb();\n }\n\n /**\n * Reads the first two bytes of a frame.\n *\n * @param {Function} cb Callback\n * @private\n */\n getInfo(cb) {\n if (this._bufferedBytes < 2) {\n this._loop = false;\n return;\n }\n\n const buf = this.consume(2);\n\n if ((buf[0] & 0x30) !== 0x00) {\n const error = this.createError(\n RangeError,\n 'RSV2 and RSV3 must be clear',\n true,\n 1002,\n 'WS_ERR_UNEXPECTED_RSV_2_3'\n );\n\n cb(error);\n return;\n }\n\n const compressed = (buf[0] & 0x40) === 0x40;\n\n if (compressed && !this._extensions[PerMessageDeflate.extensionName]) {\n const error = this.createError(\n RangeError,\n 'RSV1 must be clear',\n true,\n 1002,\n 'WS_ERR_UNEXPECTED_RSV_1'\n );\n\n cb(error);\n return;\n }\n\n this._fin = (buf[0] & 0x80) === 0x80;\n this._opcode = buf[0] & 0x0f;\n this._payloadLength = buf[1] & 0x7f;\n\n if (this._opcode === 0x00) {\n if (compressed) {\n const error = this.createError(\n RangeError,\n 'RSV1 must be clear',\n true,\n 1002,\n 'WS_ERR_UNEXPECTED_RSV_1'\n );\n\n cb(error);\n return;\n }\n\n if (!this._fragmented) {\n const error = this.createError(\n RangeError,\n 'invalid opcode 0',\n true,\n 1002,\n 'WS_ERR_INVALID_OPCODE'\n );\n\n cb(error);\n return;\n }\n\n this._opcode = this._fragmented;\n } else if (this._opcode === 0x01 || this._opcode === 0x02) {\n if (this._fragmented) {\n const error = this.createError(\n RangeError,\n `invalid opcode ${this._opcode}`,\n true,\n 1002,\n 'WS_ERR_INVALID_OPCODE'\n );\n\n cb(error);\n return;\n }\n\n this._compressed = compressed;\n } else if (this._opcode > 0x07 && this._opcode < 0x0b) {\n if (!this._fin) {\n const error = this.createError(\n RangeError,\n 'FIN must be set',\n true,\n 1002,\n 'WS_ERR_EXPECTED_FIN'\n );\n\n cb(error);\n return;\n }\n\n if (compressed) {\n const error = this.createError(\n RangeError,\n 'RSV1 must be clear',\n true,\n 1002,\n 'WS_ERR_UNEXPECTED_RSV_1'\n );\n\n cb(error);\n return;\n }\n\n if (\n this._payloadLength > 0x7d ||\n (this._opcode === 0x08 && this._payloadLength === 1)\n ) {\n const error = this.createError(\n RangeError,\n `invalid payload length ${this._payloadLength}`,\n true,\n 1002,\n 'WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH'\n );\n\n cb(error);\n return;\n }\n } else {\n const error = this.createError(\n RangeError,\n `invalid opcode ${this._opcode}`,\n true,\n 1002,\n 'WS_ERR_INVALID_OPCODE'\n );\n\n cb(error);\n return;\n }\n\n if (!this._fin && !this._fragmented) this._fragmented = this._opcode;\n this._masked = (buf[1] & 0x80) === 0x80;\n\n if (this._isServer) {\n if (!this._masked) {\n const error = this.createError(\n RangeError,\n 'MASK must be set',\n true,\n 1002,\n 'WS_ERR_EXPECTED_MASK'\n );\n\n cb(error);\n return;\n }\n } else if (this._masked) {\n const error = this.createError(\n RangeError,\n 'MASK must be clear',\n true,\n 1002,\n 'WS_ERR_UNEXPECTED_MASK'\n );\n\n cb(error);\n return;\n }\n\n if (this._payloadLength === 126) this._state = GET_PAYLOAD_LENGTH_16;\n else if (this._payloadLength === 127) this._state = GET_PAYLOAD_LENGTH_64;\n else this.haveLength(cb);\n }\n\n /**\n * Gets extended payload length (7+16).\n *\n * @param {Function} cb Callback\n * @private\n */\n getPayloadLength16(cb) {\n if (this._bufferedBytes < 2) {\n this._loop = false;\n return;\n }\n\n this._payloadLength = this.consume(2).readUInt16BE(0);\n this.haveLength(cb);\n }\n\n /**\n * Gets extended payload length (7+64).\n *\n * @param {Function} cb Callback\n * @private\n */\n getPayloadLength64(cb) {\n if (this._bufferedBytes < 8) {\n this._loop = false;\n return;\n }\n\n const buf = this.consume(8);\n const num = buf.readUInt32BE(0);\n\n //\n // The maximum safe integer in JavaScript is 2^53 - 1. An error is returned\n // if payload length is greater than this number.\n //\n if (num > Math.pow(2, 53 - 32) - 1) {\n const error = this.createError(\n RangeError,\n 'Unsupported WebSocket frame: payload length > 2^53 - 1',\n false,\n 1009,\n 'WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH'\n );\n\n cb(error);\n return;\n }\n\n this._payloadLength = num * Math.pow(2, 32) + buf.readUInt32BE(4);\n this.haveLength(cb);\n }\n\n /**\n * Payload length has been read.\n *\n * @param {Function} cb Callback\n * @private\n */\n haveLength(cb) {\n if (this._payloadLength && this._opcode < 0x08) {\n this._totalPayloadLength += this._payloadLength;\n if (this._totalPayloadLength > this._maxPayload && this._maxPayload > 0) {\n const error = this.createError(\n RangeError,\n 'Max payload size exceeded',\n false,\n 1009,\n 'WS_ERR_UNSUPPORTED_MESSAGE_LENGTH'\n );\n\n cb(error);\n return;\n }\n }\n\n if (this._masked) this._state = GET_MASK;\n else this._state = GET_DATA;\n }\n\n /**\n * Reads mask bytes.\n *\n * @private\n */\n getMask() {\n if (this._bufferedBytes < 4) {\n this._loop = false;\n return;\n }\n\n this._mask = this.consume(4);\n this._state = GET_DATA;\n }\n\n /**\n * Reads data bytes.\n *\n * @param {Function} cb Callback\n * @private\n */\n getData(cb) {\n let data = EMPTY_BUFFER;\n\n if (this._payloadLength) {\n if (this._bufferedBytes < this._payloadLength) {\n this._loop = false;\n return;\n }\n\n data = this.consume(this._payloadLength);\n\n if (\n this._masked &&\n (this._mask[0] | this._mask[1] | this._mask[2] | this._mask[3]) !== 0\n ) {\n unmask(data, this._mask);\n }\n }\n\n if (this._opcode > 0x07) {\n this.controlMessage(data, cb);\n return;\n }\n\n if (this._compressed) {\n this._state = INFLATING;\n this.decompress(data, cb);\n return;\n }\n\n if (data.length) {\n //\n // This message is not compressed so its length is the sum of the payload\n // length of all fragments.\n //\n this._messageLength = this._totalPayloadLength;\n this._fragments.push(data);\n }\n\n this.dataMessage(cb);\n }\n\n /**\n * Decompresses data.\n *\n * @param {Buffer} data Compressed data\n * @param {Function} cb Callback\n * @private\n */\n decompress(data, cb) {\n const perMessageDeflate = this._extensions[PerMessageDeflate.extensionName];\n\n perMessageDeflate.decompress(data, this._fin, (err, buf) => {\n if (err) return cb(err);\n\n if (buf.length) {\n this._messageLength += buf.length;\n if (this._messageLength > this._maxPayload && this._maxPayload > 0) {\n const error = this.createError(\n RangeError,\n 'Max payload size exceeded',\n false,\n 1009,\n 'WS_ERR_UNSUPPORTED_MESSAGE_LENGTH'\n );\n\n cb(error);\n return;\n }\n\n this._fragments.push(buf);\n }\n\n this.dataMessage(cb);\n if (this._state === GET_INFO) this.startLoop(cb);\n });\n }\n\n /**\n * Handles a data message.\n *\n * @param {Function} cb Callback\n * @private\n */\n dataMessage(cb) {\n if (!this._fin) {\n this._state = GET_INFO;\n return;\n }\n\n const messageLength = this._messageLength;\n const fragments = this._fragments;\n\n this._totalPayloadLength = 0;\n this._messageLength = 0;\n this._fragmented = 0;\n this._fragments = [];\n\n if (this._opcode === 2) {\n let data;\n\n if (this._binaryType === 'nodebuffer') {\n data = concat(fragments, messageLength);\n } else if (this._binaryType === 'arraybuffer') {\n data = toArrayBuffer(concat(fragments, messageLength));\n } else if (this._binaryType === 'blob') {\n data = new Blob(fragments);\n } else {\n data = fragments;\n }\n\n if (this._allowSynchronousEvents) {\n this.emit('message', data, true);\n this._state = GET_INFO;\n } else {\n this._state = DEFER_EVENT;\n setImmediate(() => {\n this.emit('message', data, true);\n this._state = GET_INFO;\n this.startLoop(cb);\n });\n }\n } else {\n const buf = concat(fragments, messageLength);\n\n if (!this._skipUTF8Validation && !isValidUTF8(buf)) {\n const error = this.createError(\n Error,\n 'invalid UTF-8 sequence',\n true,\n 1007,\n 'WS_ERR_INVALID_UTF8'\n );\n\n cb(error);\n return;\n }\n\n if (this._state === INFLATING || this._allowSynchronousEvents) {\n this.emit('message', buf, false);\n this._state = GET_INFO;\n } else {\n this._state = DEFER_EVENT;\n setImmediate(() => {\n this.emit('message', buf, false);\n this._state = GET_INFO;\n this.startLoop(cb);\n });\n }\n }\n }\n\n /**\n * Handles a control message.\n *\n * @param {Buffer} data Data to handle\n * @return {(Error|RangeError|undefined)} A possible error\n * @private\n */\n controlMessage(data, cb) {\n if (this._opcode === 0x08) {\n if (data.length === 0) {\n this._loop = false;\n this.emit('conclude', 1005, EMPTY_BUFFER);\n this.end();\n } else {\n const code = data.readUInt16BE(0);\n\n if (!isValidStatusCode(code)) {\n const error = this.createError(\n RangeError,\n `invalid status code ${code}`,\n true,\n 1002,\n 'WS_ERR_INVALID_CLOSE_CODE'\n );\n\n cb(error);\n return;\n }\n\n const buf = new FastBuffer(\n data.buffer,\n data.byteOffset + 2,\n data.length - 2\n );\n\n if (!this._skipUTF8Validation && !isValidUTF8(buf)) {\n const error = this.createError(\n Error,\n 'invalid UTF-8 sequence',\n true,\n 1007,\n 'WS_ERR_INVALID_UTF8'\n );\n\n cb(error);\n return;\n }\n\n this._loop = false;\n this.emit('conclude', code, buf);\n this.end();\n }\n\n this._state = GET_INFO;\n return;\n }\n\n if (this._allowSynchronousEvents) {\n this.emit(this._opcode === 0x09 ? 'ping' : 'pong', data);\n this._state = GET_INFO;\n } else {\n this._state = DEFER_EVENT;\n setImmediate(() => {\n this.emit(this._opcode === 0x09 ? 'ping' : 'pong', data);\n this._state = GET_INFO;\n this.startLoop(cb);\n });\n }\n }\n\n /**\n * Builds an error object.\n *\n * @param {function(new:Error|RangeError)} ErrorCtor The error constructor\n * @param {String} message The error message\n * @param {Boolean} prefix Specifies whether or not to add a default prefix to\n * `message`\n * @param {Number} statusCode The status code\n * @param {String} errorCode The exposed error code\n * @return {(Error|RangeError)} The error\n * @private\n */\n createError(ErrorCtor, message, prefix, statusCode, errorCode) {\n this._loop = false;\n this._errored = true;\n\n const err = new ErrorCtor(\n prefix ? `Invalid WebSocket frame: ${message}` : message\n );\n\n Error.captureStackTrace(err, this.createError);\n err.code = errorCode;\n err[kStatusCode] = statusCode;\n return err;\n }\n}\n\nmodule.exports = Receiver;\n","/* eslint no-unused-vars: [\"error\", { \"varsIgnorePattern\": \"^Duplex\" }] */\n\n'use strict';\n\nconst { Duplex } = require('stream');\nconst { randomFillSync } = require('crypto');\n\nconst PerMessageDeflate = require('./permessage-deflate');\nconst { EMPTY_BUFFER, kWebSocket, NOOP } = require('./constants');\nconst { isBlob, isValidStatusCode } = require('./validation');\nconst { mask: applyMask, toBuffer } = require('./buffer-util');\n\nconst kByteLength = Symbol('kByteLength');\nconst maskBuffer = Buffer.alloc(4);\nconst RANDOM_POOL_SIZE = 8 * 1024;\nlet randomPool;\nlet randomPoolPointer = RANDOM_POOL_SIZE;\n\nconst DEFAULT = 0;\nconst DEFLATING = 1;\nconst GET_BLOB_DATA = 2;\n\n/**\n * HyBi Sender implementation.\n */\nclass Sender {\n /**\n * Creates a Sender instance.\n *\n * @param {Duplex} socket The connection socket\n * @param {Object} [extensions] An object containing the negotiated extensions\n * @param {Function} [generateMask] The function used to generate the masking\n * key\n */\n constructor(socket, extensions, generateMask) {\n this._extensions = extensions || {};\n\n if (generateMask) {\n this._generateMask = generateMask;\n this._maskBuffer = Buffer.alloc(4);\n }\n\n this._socket = socket;\n\n this._firstFragment = true;\n this._compress = false;\n\n this._bufferedBytes = 0;\n this._queue = [];\n this._state = DEFAULT;\n this.onerror = NOOP;\n this[kWebSocket] = undefined;\n }\n\n /**\n * Frames a piece of data according to the HyBi WebSocket protocol.\n *\n * @param {(Buffer|String)} data The data to frame\n * @param {Object} options Options object\n * @param {Boolean} [options.fin=false] Specifies whether or not to set the\n * FIN bit\n * @param {Function} [options.generateMask] The function used to generate the\n * masking key\n * @param {Boolean} [options.mask=false] Specifies whether or not to mask\n * `data`\n * @param {Buffer} [options.maskBuffer] The buffer used to store the masking\n * key\n * @param {Number} options.opcode The opcode\n * @param {Boolean} [options.readOnly=false] Specifies whether `data` can be\n * modified\n * @param {Boolean} [options.rsv1=false] Specifies whether or not to set the\n * RSV1 bit\n * @return {(Buffer|String)[]} The framed data\n * @public\n */\n static frame(data, options) {\n let mask;\n let merge = false;\n let offset = 2;\n let skipMasking = false;\n\n if (options.mask) {\n mask = options.maskBuffer || maskBuffer;\n\n if (options.generateMask) {\n options.generateMask(mask);\n } else {\n if (randomPoolPointer === RANDOM_POOL_SIZE) {\n /* istanbul ignore else */\n if (randomPool === undefined) {\n //\n // This is lazily initialized because server-sent frames must not\n // be masked so it may never be used.\n //\n randomPool = Buffer.alloc(RANDOM_POOL_SIZE);\n }\n\n randomFillSync(randomPool, 0, RANDOM_POOL_SIZE);\n randomPoolPointer = 0;\n }\n\n mask[0] = randomPool[randomPoolPointer++];\n mask[1] = randomPool[randomPoolPointer++];\n mask[2] = randomPool[randomPoolPointer++];\n mask[3] = randomPool[randomPoolPointer++];\n }\n\n skipMasking = (mask[0] | mask[1] | mask[2] | mask[3]) === 0;\n offset = 6;\n }\n\n let dataLength;\n\n if (typeof data === 'string') {\n if (\n (!options.mask || skipMasking) &&\n options[kByteLength] !== undefined\n ) {\n dataLength = options[kByteLength];\n } else {\n data = Buffer.from(data);\n dataLength = data.length;\n }\n } else {\n dataLength = data.length;\n merge = options.mask && options.readOnly && !skipMasking;\n }\n\n let payloadLength = dataLength;\n\n if (dataLength >= 65536) {\n offset += 8;\n payloadLength = 127;\n } else if (dataLength > 125) {\n offset += 2;\n payloadLength = 126;\n }\n\n const target = Buffer.allocUnsafe(merge ? dataLength + offset : offset);\n\n target[0] = options.fin ? options.opcode | 0x80 : options.opcode;\n if (options.rsv1) target[0] |= 0x40;\n\n target[1] = payloadLength;\n\n if (payloadLength === 126) {\n target.writeUInt16BE(dataLength, 2);\n } else if (payloadLength === 127) {\n target[2] = target[3] = 0;\n target.writeUIntBE(dataLength, 4, 6);\n }\n\n if (!options.mask) return [target, data];\n\n target[1] |= 0x80;\n target[offset - 4] = mask[0];\n target[offset - 3] = mask[1];\n target[offset - 2] = mask[2];\n target[offset - 1] = mask[3];\n\n if (skipMasking) return [target, data];\n\n if (merge) {\n applyMask(data, mask, target, offset, dataLength);\n return [target];\n }\n\n applyMask(data, mask, data, 0, dataLength);\n return [target, data];\n }\n\n /**\n * Sends a close message to the other peer.\n *\n * @param {Number} [code] The status code component of the body\n * @param {(String|Buffer)} [data] The message component of the body\n * @param {Boolean} [mask=false] Specifies whether or not to mask the message\n * @param {Function} [cb] Callback\n * @public\n */\n close(code, data, mask, cb) {\n let buf;\n\n if (code === undefined) {\n buf = EMPTY_BUFFER;\n } else if (typeof code !== 'number' || !isValidStatusCode(code)) {\n throw new TypeError('First argument must be a valid error code number');\n } else if (data === undefined || !data.length) {\n buf = Buffer.allocUnsafe(2);\n buf.writeUInt16BE(code, 0);\n } else {\n const length = Buffer.byteLength(data);\n\n if (length > 123) {\n throw new RangeError('The message must not be greater than 123 bytes');\n }\n\n buf = Buffer.allocUnsafe(2 + length);\n buf.writeUInt16BE(code, 0);\n\n if (typeof data === 'string') {\n buf.write(data, 2);\n } else {\n buf.set(data, 2);\n }\n }\n\n const options = {\n [kByteLength]: buf.length,\n fin: true,\n generateMask: this._generateMask,\n mask,\n maskBuffer: this._maskBuffer,\n opcode: 0x08,\n readOnly: false,\n rsv1: false\n };\n\n if (this._state !== DEFAULT) {\n this.enqueue([this.dispatch, buf, false, options, cb]);\n } else {\n this.sendFrame(Sender.frame(buf, options), cb);\n }\n }\n\n /**\n * Sends a ping message to the other peer.\n *\n * @param {*} data The message to send\n * @param {Boolean} [mask=false] Specifies whether or not to mask `data`\n * @param {Function} [cb] Callback\n * @public\n */\n ping(data, mask, cb) {\n let byteLength;\n let readOnly;\n\n if (typeof data === 'string') {\n byteLength = Buffer.byteLength(data);\n readOnly = false;\n } else if (isBlob(data)) {\n byteLength = data.size;\n readOnly = false;\n } else {\n data = toBuffer(data);\n byteLength = data.length;\n readOnly = toBuffer.readOnly;\n }\n\n if (byteLength > 125) {\n throw new RangeError('The data size must not be greater than 125 bytes');\n }\n\n const options = {\n [kByteLength]: byteLength,\n fin: true,\n generateMask: this._generateMask,\n mask,\n maskBuffer: this._maskBuffer,\n opcode: 0x09,\n readOnly,\n rsv1: false\n };\n\n if (isBlob(data)) {\n if (this._state !== DEFAULT) {\n this.enqueue([this.getBlobData, data, false, options, cb]);\n } else {\n this.getBlobData(data, false, options, cb);\n }\n } else if (this._state !== DEFAULT) {\n this.enqueue([this.dispatch, data, false, options, cb]);\n } else {\n this.sendFrame(Sender.frame(data, options), cb);\n }\n }\n\n /**\n * Sends a pong message to the other peer.\n *\n * @param {*} data The message to send\n * @param {Boolean} [mask=false] Specifies whether or not to mask `data`\n * @param {Function} [cb] Callback\n * @public\n */\n pong(data, mask, cb) {\n let byteLength;\n let readOnly;\n\n if (typeof data === 'string') {\n byteLength = Buffer.byteLength(data);\n readOnly = false;\n } else if (isBlob(data)) {\n byteLength = data.size;\n readOnly = false;\n } else {\n data = toBuffer(data);\n byteLength = data.length;\n readOnly = toBuffer.readOnly;\n }\n\n if (byteLength > 125) {\n throw new RangeError('The data size must not be greater than 125 bytes');\n }\n\n const options = {\n [kByteLength]: byteLength,\n fin: true,\n generateMask: this._generateMask,\n mask,\n maskBuffer: this._maskBuffer,\n opcode: 0x0a,\n readOnly,\n rsv1: false\n };\n\n if (isBlob(data)) {\n if (this._state !== DEFAULT) {\n this.enqueue([this.getBlobData, data, false, options, cb]);\n } else {\n this.getBlobData(data, false, options, cb);\n }\n } else if (this._state !== DEFAULT) {\n this.enqueue([this.dispatch, data, false, options, cb]);\n } else {\n this.sendFrame(Sender.frame(data, options), cb);\n }\n }\n\n /**\n * Sends a data message to the other peer.\n *\n * @param {*} data The message to send\n * @param {Object} options Options object\n * @param {Boolean} [options.binary=false] Specifies whether `data` is binary\n * or text\n * @param {Boolean} [options.compress=false] Specifies whether or not to\n * compress `data`\n * @param {Boolean} [options.fin=false] Specifies whether the fragment is the\n * last one\n * @param {Boolean} [options.mask=false] Specifies whether or not to mask\n * `data`\n * @param {Function} [cb] Callback\n * @public\n */\n send(data, options, cb) {\n const perMessageDeflate = this._extensions[PerMessageDeflate.extensionName];\n let opcode = options.binary ? 2 : 1;\n let rsv1 = options.compress;\n\n let byteLength;\n let readOnly;\n\n if (typeof data === 'string') {\n byteLength = Buffer.byteLength(data);\n readOnly = false;\n } else if (isBlob(data)) {\n byteLength = data.size;\n readOnly = false;\n } else {\n data = toBuffer(data);\n byteLength = data.length;\n readOnly = toBuffer.readOnly;\n }\n\n if (this._firstFragment) {\n this._firstFragment = false;\n if (\n rsv1 &&\n perMessageDeflate &&\n perMessageDeflate.params[\n perMessageDeflate._isServer\n ? 'server_no_context_takeover'\n : 'client_no_context_takeover'\n ]\n ) {\n rsv1 = byteLength >= perMessageDeflate._threshold;\n }\n this._compress = rsv1;\n } else {\n rsv1 = false;\n opcode = 0;\n }\n\n if (options.fin) this._firstFragment = true;\n\n const opts = {\n [kByteLength]: byteLength,\n fin: options.fin,\n generateMask: this._generateMask,\n mask: options.mask,\n maskBuffer: this._maskBuffer,\n opcode,\n readOnly,\n rsv1\n };\n\n if (isBlob(data)) {\n if (this._state !== DEFAULT) {\n this.enqueue([this.getBlobData, data, this._compress, opts, cb]);\n } else {\n this.getBlobData(data, this._compress, opts, cb);\n }\n } else if (this._state !== DEFAULT) {\n this.enqueue([this.dispatch, data, this._compress, opts, cb]);\n } else {\n this.dispatch(data, this._compress, opts, cb);\n }\n }\n\n /**\n * Gets the contents of a blob as binary data.\n *\n * @param {Blob} blob The blob\n * @param {Boolean} [compress=false] Specifies whether or not to compress\n * the data\n * @param {Object} options Options object\n * @param {Boolean} [options.fin=false] Specifies whether or not to set the\n * FIN bit\n * @param {Function} [options.generateMask] The function used to generate the\n * masking key\n * @param {Boolean} [options.mask=false] Specifies whether or not to mask\n * `data`\n * @param {Buffer} [options.maskBuffer] The buffer used to store the masking\n * key\n * @param {Number} options.opcode The opcode\n * @param {Boolean} [options.readOnly=false] Specifies whether `data` can be\n * modified\n * @param {Boolean} [options.rsv1=false] Specifies whether or not to set the\n * RSV1 bit\n * @param {Function} [cb] Callback\n * @private\n */\n getBlobData(blob, compress, options, cb) {\n this._bufferedBytes += options[kByteLength];\n this._state = GET_BLOB_DATA;\n\n blob\n .arrayBuffer()\n .then((arrayBuffer) => {\n if (this._socket.destroyed) {\n const err = new Error(\n 'The socket was closed while the blob was being read'\n );\n\n //\n // `callCallbacks` is called in the next tick to ensure that errors\n // that might be thrown in the callbacks behave like errors thrown\n // outside the promise chain.\n //\n process.nextTick(callCallbacks, this, err, cb);\n return;\n }\n\n this._bufferedBytes -= options[kByteLength];\n const data = toBuffer(arrayBuffer);\n\n if (!compress) {\n this._state = DEFAULT;\n this.sendFrame(Sender.frame(data, options), cb);\n this.dequeue();\n } else {\n this.dispatch(data, compress, options, cb);\n }\n })\n .catch((err) => {\n //\n // `onError` is called in the next tick for the same reason that\n // `callCallbacks` above is.\n //\n process.nextTick(onError, this, err, cb);\n });\n }\n\n /**\n * Dispatches a message.\n *\n * @param {(Buffer|String)} data The message to send\n * @param {Boolean} [compress=false] Specifies whether or not to compress\n * `data`\n * @param {Object} options Options object\n * @param {Boolean} [options.fin=false] Specifies whether or not to set the\n * FIN bit\n * @param {Function} [options.generateMask] The function used to generate the\n * masking key\n * @param {Boolean} [options.mask=false] Specifies whether or not to mask\n * `data`\n * @param {Buffer} [options.maskBuffer] The buffer used to store the masking\n * key\n * @param {Number} options.opcode The opcode\n * @param {Boolean} [options.readOnly=false] Specifies whether `data` can be\n * modified\n * @param {Boolean} [options.rsv1=false] Specifies whether or not to set the\n * RSV1 bit\n * @param {Function} [cb] Callback\n * @private\n */\n dispatch(data, compress, options, cb) {\n if (!compress) {\n this.sendFrame(Sender.frame(data, options), cb);\n return;\n }\n\n const perMessageDeflate = this._extensions[PerMessageDeflate.extensionName];\n\n this._bufferedBytes += options[kByteLength];\n this._state = DEFLATING;\n perMessageDeflate.compress(data, options.fin, (_, buf) => {\n if (this._socket.destroyed) {\n const err = new Error(\n 'The socket was closed while data was being compressed'\n );\n\n callCallbacks(this, err, cb);\n return;\n }\n\n this._bufferedBytes -= options[kByteLength];\n this._state = DEFAULT;\n options.readOnly = false;\n this.sendFrame(Sender.frame(buf, options), cb);\n this.dequeue();\n });\n }\n\n /**\n * Executes queued send operations.\n *\n * @private\n */\n dequeue() {\n while (this._state === DEFAULT && this._queue.length) {\n const params = this._queue.shift();\n\n this._bufferedBytes -= params[3][kByteLength];\n Reflect.apply(params[0], this, params.slice(1));\n }\n }\n\n /**\n * Enqueues a send operation.\n *\n * @param {Array} params Send operation parameters.\n * @private\n */\n enqueue(params) {\n this._bufferedBytes += params[3][kByteLength];\n this._queue.push(params);\n }\n\n /**\n * Sends a frame.\n *\n * @param {(Buffer | String)[]} list The frame to send\n * @param {Function} [cb] Callback\n * @private\n */\n sendFrame(list, cb) {\n if (list.length === 2) {\n this._socket.cork();\n this._socket.write(list[0]);\n this._socket.write(list[1], cb);\n this._socket.uncork();\n } else {\n this._socket.write(list[0], cb);\n }\n }\n}\n\nmodule.exports = Sender;\n\n/**\n * Calls queued callbacks with an error.\n *\n * @param {Sender} sender The `Sender` instance\n * @param {Error} err The error to call the callbacks with\n * @param {Function} [cb] The first callback\n * @private\n */\nfunction callCallbacks(sender, err, cb) {\n if (typeof cb === 'function') cb(err);\n\n for (let i = 0; i < sender._queue.length; i++) {\n const params = sender._queue[i];\n const callback = params[params.length - 1];\n\n if (typeof callback === 'function') callback(err);\n }\n}\n\n/**\n * Handles a `Sender` error.\n *\n * @param {Sender} sender The `Sender` instance\n * @param {Error} err The error\n * @param {Function} [cb] The first pending callback\n * @private\n */\nfunction onError(sender, err, cb) {\n callCallbacks(sender, err, cb);\n sender.onerror(err);\n}\n","'use strict';\n\nconst { kForOnEventAttribute, kListener } = require('./constants');\n\nconst kCode = Symbol('kCode');\nconst kData = Symbol('kData');\nconst kError = Symbol('kError');\nconst kMessage = Symbol('kMessage');\nconst kReason = Symbol('kReason');\nconst kTarget = Symbol('kTarget');\nconst kType = Symbol('kType');\nconst kWasClean = Symbol('kWasClean');\n\n/**\n * Class representing an event.\n */\nclass Event {\n /**\n * Create a new `Event`.\n *\n * @param {String} type The name of the event\n * @throws {TypeError} If the `type` argument is not specified\n */\n constructor(type) {\n this[kTarget] = null;\n this[kType] = type;\n }\n\n /**\n * @type {*}\n */\n get target() {\n return this[kTarget];\n }\n\n /**\n * @type {String}\n */\n get type() {\n return this[kType];\n }\n}\n\nObject.defineProperty(Event.prototype, 'target', { enumerable: true });\nObject.defineProperty(Event.prototype, 'type', { enumerable: true });\n\n/**\n * Class representing a close event.\n *\n * @extends Event\n */\nclass CloseEvent extends Event {\n /**\n * Create a new `CloseEvent`.\n *\n * @param {String} type The name of the event\n * @param {Object} [options] A dictionary object that allows for setting\n * attributes via object members of the same name\n * @param {Number} [options.code=0] The status code explaining why the\n * connection was closed\n * @param {String} [options.reason=''] A human-readable string explaining why\n * the connection was closed\n * @param {Boolean} [options.wasClean=false] Indicates whether or not the\n * connection was cleanly closed\n */\n constructor(type, options = {}) {\n super(type);\n\n this[kCode] = options.code === undefined ? 0 : options.code;\n this[kReason] = options.reason === undefined ? '' : options.reason;\n this[kWasClean] = options.wasClean === undefined ? false : options.wasClean;\n }\n\n /**\n * @type {Number}\n */\n get code() {\n return this[kCode];\n }\n\n /**\n * @type {String}\n */\n get reason() {\n return this[kReason];\n }\n\n /**\n * @type {Boolean}\n */\n get wasClean() {\n return this[kWasClean];\n }\n}\n\nObject.defineProperty(CloseEvent.prototype, 'code', { enumerable: true });\nObject.defineProperty(CloseEvent.prototype, 'reason', { enumerable: true });\nObject.defineProperty(CloseEvent.prototype, 'wasClean', { enumerable: true });\n\n/**\n * Class representing an error event.\n *\n * @extends Event\n */\nclass ErrorEvent extends Event {\n /**\n * Create a new `ErrorEvent`.\n *\n * @param {String} type The name of the event\n * @param {Object} [options] A dictionary object that allows for setting\n * attributes via object members of the same name\n * @param {*} [options.error=null] The error that generated this event\n * @param {String} [options.message=''] The error message\n */\n constructor(type, options = {}) {\n super(type);\n\n this[kError] = options.error === undefined ? null : options.error;\n this[kMessage] = options.message === undefined ? '' : options.message;\n }\n\n /**\n * @type {*}\n */\n get error() {\n return this[kError];\n }\n\n /**\n * @type {String}\n */\n get message() {\n return this[kMessage];\n }\n}\n\nObject.defineProperty(ErrorEvent.prototype, 'error', { enumerable: true });\nObject.defineProperty(ErrorEvent.prototype, 'message', { enumerable: true });\n\n/**\n * Class representing a message event.\n *\n * @extends Event\n */\nclass MessageEvent extends Event {\n /**\n * Create a new `MessageEvent`.\n *\n * @param {String} type The name of the event\n * @param {Object} [options] A dictionary object that allows for setting\n * attributes via object members of the same name\n * @param {*} [options.data=null] The message content\n */\n constructor(type, options = {}) {\n super(type);\n\n this[kData] = options.data === undefined ? null : options.data;\n }\n\n /**\n * @type {*}\n */\n get data() {\n return this[kData];\n }\n}\n\nObject.defineProperty(MessageEvent.prototype, 'data', { enumerable: true });\n\n/**\n * This provides methods for emulating the `EventTarget` interface. It's not\n * meant to be used directly.\n *\n * @mixin\n */\nconst EventTarget = {\n /**\n * Register an event listener.\n *\n * @param {String} type A string representing the event type to listen for\n * @param {(Function|Object)} handler The listener to add\n * @param {Object} [options] An options object specifies characteristics about\n * the event listener\n * @param {Boolean} [options.once=false] A `Boolean` indicating that the\n * listener should be invoked at most once after being added. If `true`,\n * the listener would be automatically removed when invoked.\n * @public\n */\n addEventListener(type, handler, options = {}) {\n for (const listener of this.listeners(type)) {\n if (\n !options[kForOnEventAttribute] &&\n listener[kListener] === handler &&\n !listener[kForOnEventAttribute]\n ) {\n return;\n }\n }\n\n let wrapper;\n\n if (type === 'message') {\n wrapper = function onMessage(data, isBinary) {\n const event = new MessageEvent('message', {\n data: isBinary ? data : data.toString()\n });\n\n event[kTarget] = this;\n callListener(handler, this, event);\n };\n } else if (type === 'close') {\n wrapper = function onClose(code, message) {\n const event = new CloseEvent('close', {\n code,\n reason: message.toString(),\n wasClean: this._closeFrameReceived && this._closeFrameSent\n });\n\n event[kTarget] = this;\n callListener(handler, this, event);\n };\n } else if (type === 'error') {\n wrapper = function onError(error) {\n const event = new ErrorEvent('error', {\n error,\n message: error.message\n });\n\n event[kTarget] = this;\n callListener(handler, this, event);\n };\n } else if (type === 'open') {\n wrapper = function onOpen() {\n const event = new Event('open');\n\n event[kTarget] = this;\n callListener(handler, this, event);\n };\n } else {\n return;\n }\n\n wrapper[kForOnEventAttribute] = !!options[kForOnEventAttribute];\n wrapper[kListener] = handler;\n\n if (options.once) {\n this.once(type, wrapper);\n } else {\n this.on(type, wrapper);\n }\n },\n\n /**\n * Remove an event listener.\n *\n * @param {String} type A string representing the event type to remove\n * @param {(Function|Object)} handler The listener to remove\n * @public\n */\n removeEventListener(type, handler) {\n for (const listener of this.listeners(type)) {\n if (listener[kListener] === handler && !listener[kForOnEventAttribute]) {\n this.removeListener(type, listener);\n break;\n }\n }\n }\n};\n\nmodule.exports = {\n CloseEvent,\n ErrorEvent,\n Event,\n EventTarget,\n MessageEvent\n};\n\n/**\n * Call an event listener\n *\n * @param {(Function|Object)} listener The listener to call\n * @param {*} thisArg The value to use as `this`` when calling the listener\n * @param {Event} event The event to pass to the listener\n * @private\n */\nfunction callListener(listener, thisArg, event) {\n if (typeof listener === 'object' && listener.handleEvent) {\n listener.handleEvent.call(listener, event);\n } else {\n listener.call(thisArg, event);\n }\n}\n","'use strict';\n\nconst { tokenChars } = require('./validation');\n\n/**\n * Adds an offer to the map of extension offers or a parameter to the map of\n * parameters.\n *\n * @param {Object} dest The map of extension offers or parameters\n * @param {String} name The extension or parameter name\n * @param {(Object|Boolean|String)} elem The extension parameters or the\n * parameter value\n * @private\n */\nfunction push(dest, name, elem) {\n if (dest[name] === undefined) dest[name] = [elem];\n else dest[name].push(elem);\n}\n\n/**\n * Parses the `Sec-WebSocket-Extensions` header into an object.\n *\n * @param {String} header The field value of the header\n * @return {Object} The parsed object\n * @public\n */\nfunction parse(header) {\n const offers = Object.create(null);\n let params = Object.create(null);\n let mustUnescape = false;\n let isEscaping = false;\n let inQuotes = false;\n let extensionName;\n let paramName;\n let start = -1;\n let code = -1;\n let end = -1;\n let i = 0;\n\n for (; i < header.length; i++) {\n code = header.charCodeAt(i);\n\n if (extensionName === undefined) {\n if (end === -1 && tokenChars[code] === 1) {\n if (start === -1) start = i;\n } else if (\n i !== 0 &&\n (code === 0x20 /* ' ' */ || code === 0x09) /* '\\t' */\n ) {\n if (end === -1 && start !== -1) end = i;\n } else if (code === 0x3b /* ';' */ || code === 0x2c /* ',' */) {\n if (start === -1) {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n\n if (end === -1) end = i;\n const name = header.slice(start, end);\n if (code === 0x2c) {\n push(offers, name, params);\n params = Object.create(null);\n } else {\n extensionName = name;\n }\n\n start = end = -1;\n } else {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n } else if (paramName === undefined) {\n if (end === -1 && tokenChars[code] === 1) {\n if (start === -1) start = i;\n } else if (code === 0x20 || code === 0x09) {\n if (end === -1 && start !== -1) end = i;\n } else if (code === 0x3b || code === 0x2c) {\n if (start === -1) {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n\n if (end === -1) end = i;\n push(params, header.slice(start, end), true);\n if (code === 0x2c) {\n push(offers, extensionName, params);\n params = Object.create(null);\n extensionName = undefined;\n }\n\n start = end = -1;\n } else if (code === 0x3d /* '=' */ && start !== -1 && end === -1) {\n paramName = header.slice(start, i);\n start = end = -1;\n } else {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n } else {\n //\n // The value of a quoted-string after unescaping must conform to the\n // token ABNF, so only token characters are valid.\n // Ref: https://tools.ietf.org/html/rfc6455#section-9.1\n //\n if (isEscaping) {\n if (tokenChars[code] !== 1) {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n if (start === -1) start = i;\n else if (!mustUnescape) mustUnescape = true;\n isEscaping = false;\n } else if (inQuotes) {\n if (tokenChars[code] === 1) {\n if (start === -1) start = i;\n } else if (code === 0x22 /* '\"' */ && start !== -1) {\n inQuotes = false;\n end = i;\n } else if (code === 0x5c /* '\\' */) {\n isEscaping = true;\n } else {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n } else if (code === 0x22 && header.charCodeAt(i - 1) === 0x3d) {\n inQuotes = true;\n } else if (end === -1 && tokenChars[code] === 1) {\n if (start === -1) start = i;\n } else if (start !== -1 && (code === 0x20 || code === 0x09)) {\n if (end === -1) end = i;\n } else if (code === 0x3b || code === 0x2c) {\n if (start === -1) {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n\n if (end === -1) end = i;\n let value = header.slice(start, end);\n if (mustUnescape) {\n value = value.replace(/\\\\/g, '');\n mustUnescape = false;\n }\n push(params, paramName, value);\n if (code === 0x2c) {\n push(offers, extensionName, params);\n params = Object.create(null);\n extensionName = undefined;\n }\n\n paramName = undefined;\n start = end = -1;\n } else {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n }\n }\n\n if (start === -1 || inQuotes || code === 0x20 || code === 0x09) {\n throw new SyntaxError('Unexpected end of input');\n }\n\n if (end === -1) end = i;\n const token = header.slice(start, end);\n if (extensionName === undefined) {\n push(offers, token, params);\n } else {\n if (paramName === undefined) {\n push(params, token, true);\n } else if (mustUnescape) {\n push(params, paramName, token.replace(/\\\\/g, ''));\n } else {\n push(params, paramName, token);\n }\n push(offers, extensionName, params);\n }\n\n return offers;\n}\n\n/**\n * Builds the `Sec-WebSocket-Extensions` header field value.\n *\n * @param {Object} extensions The map of extensions and parameters to format\n * @return {String} A string representing the given object\n * @public\n */\nfunction format(extensions) {\n return Object.keys(extensions)\n .map((extension) => {\n let configurations = extensions[extension];\n if (!Array.isArray(configurations)) configurations = [configurations];\n return configurations\n .map((params) => {\n return [extension]\n .concat(\n Object.keys(params).map((k) => {\n let values = params[k];\n if (!Array.isArray(values)) values = [values];\n return values\n .map((v) => (v === true ? k : `${k}=${v}`))\n .join('; ');\n })\n )\n .join('; ');\n })\n .join(', ');\n })\n .join(', ');\n}\n\nmodule.exports = { format, parse };\n","/* eslint no-unused-vars: [\"error\", { \"varsIgnorePattern\": \"^Duplex|Readable$\", \"caughtErrors\": \"none\" }] */\n\n'use strict';\n\nconst EventEmitter = require('events');\nconst https = require('https');\nconst http = require('http');\nconst net = require('net');\nconst tls = require('tls');\nconst { randomBytes, createHash } = require('crypto');\nconst { Duplex, Readable } = require('stream');\nconst { URL } = require('url');\n\nconst PerMessageDeflate = require('./permessage-deflate');\nconst Receiver = require('./receiver');\nconst Sender = require('./sender');\nconst { isBlob } = require('./validation');\n\nconst {\n BINARY_TYPES,\n CLOSE_TIMEOUT,\n EMPTY_BUFFER,\n GUID,\n kForOnEventAttribute,\n kListener,\n kStatusCode,\n kWebSocket,\n NOOP\n} = require('./constants');\nconst {\n EventTarget: { addEventListener, removeEventListener }\n} = require('./event-target');\nconst { format, parse } = require('./extension');\nconst { toBuffer } = require('./buffer-util');\n\nconst kAborted = Symbol('kAborted');\nconst protocolVersions = [8, 13];\nconst readyStates = ['CONNECTING', 'OPEN', 'CLOSING', 'CLOSED'];\nconst subprotocolRegex = /^[!#$%&'*+\\-.0-9A-Z^_`|a-z~]+$/;\n\n/**\n * Class representing a WebSocket.\n *\n * @extends EventEmitter\n */\nclass WebSocket extends EventEmitter {\n /**\n * Create a new `WebSocket`.\n *\n * @param {(String|URL)} address The URL to which to connect\n * @param {(String|String[])} [protocols] The subprotocols\n * @param {Object} [options] Connection options\n */\n constructor(address, protocols, options) {\n super();\n\n this._binaryType = BINARY_TYPES[0];\n this._closeCode = 1006;\n this._closeFrameReceived = false;\n this._closeFrameSent = false;\n this._closeMessage = EMPTY_BUFFER;\n this._closeTimer = null;\n this._errorEmitted = false;\n this._extensions = {};\n this._paused = false;\n this._protocol = '';\n this._readyState = WebSocket.CONNECTING;\n this._receiver = null;\n this._sender = null;\n this._socket = null;\n\n if (address !== null) {\n this._bufferedAmount = 0;\n this._isServer = false;\n this._redirects = 0;\n\n if (protocols === undefined) {\n protocols = [];\n } else if (!Array.isArray(protocols)) {\n if (typeof protocols === 'object' && protocols !== null) {\n options = protocols;\n protocols = [];\n } else {\n protocols = [protocols];\n }\n }\n\n initAsClient(this, address, protocols, options);\n } else {\n this._autoPong = options.autoPong;\n this._closeTimeout = options.closeTimeout;\n this._isServer = true;\n }\n }\n\n /**\n * For historical reasons, the custom \"nodebuffer\" type is used by the default\n * instead of \"blob\".\n *\n * @type {String}\n */\n get binaryType() {\n return this._binaryType;\n }\n\n set binaryType(type) {\n if (!BINARY_TYPES.includes(type)) return;\n\n this._binaryType = type;\n\n //\n // Allow to change `binaryType` on the fly.\n //\n if (this._receiver) this._receiver._binaryType = type;\n }\n\n /**\n * @type {Number}\n */\n get bufferedAmount() {\n if (!this._socket) return this._bufferedAmount;\n\n return this._socket._writableState.length + this._sender._bufferedBytes;\n }\n\n /**\n * @type {String}\n */\n get extensions() {\n return Object.keys(this._extensions).join();\n }\n\n /**\n * @type {Boolean}\n */\n get isPaused() {\n return this._paused;\n }\n\n /**\n * @type {Function}\n */\n /* istanbul ignore next */\n get onclose() {\n return null;\n }\n\n /**\n * @type {Function}\n */\n /* istanbul ignore next */\n get onerror() {\n return null;\n }\n\n /**\n * @type {Function}\n */\n /* istanbul ignore next */\n get onopen() {\n return null;\n }\n\n /**\n * @type {Function}\n */\n /* istanbul ignore next */\n get onmessage() {\n return null;\n }\n\n /**\n * @type {String}\n */\n get protocol() {\n return this._protocol;\n }\n\n /**\n * @type {Number}\n */\n get readyState() {\n return this._readyState;\n }\n\n /**\n * @type {String}\n */\n get url() {\n return this._url;\n }\n\n /**\n * Set up the socket and the internal resources.\n *\n * @param {Duplex} socket The network socket between the server and client\n * @param {Buffer} head The first packet of the upgraded stream\n * @param {Object} options Options object\n * @param {Boolean} [options.allowSynchronousEvents=false] Specifies whether\n * any of the `'message'`, `'ping'`, and `'pong'` events can be emitted\n * multiple times in the same tick\n * @param {Function} [options.generateMask] The function used to generate the\n * masking key\n * @param {Number} [options.maxPayload=0] The maximum allowed message size\n * @param {Boolean} [options.skipUTF8Validation=false] Specifies whether or\n * not to skip UTF-8 validation for text and close messages\n * @private\n */\n setSocket(socket, head, options) {\n const receiver = new Receiver({\n allowSynchronousEvents: options.allowSynchronousEvents,\n binaryType: this.binaryType,\n extensions: this._extensions,\n isServer: this._isServer,\n maxPayload: options.maxPayload,\n skipUTF8Validation: options.skipUTF8Validation\n });\n\n const sender = new Sender(socket, this._extensions, options.generateMask);\n\n this._receiver = receiver;\n this._sender = sender;\n this._socket = socket;\n\n receiver[kWebSocket] = this;\n sender[kWebSocket] = this;\n socket[kWebSocket] = this;\n\n receiver.on('conclude', receiverOnConclude);\n receiver.on('drain', receiverOnDrain);\n receiver.on('error', receiverOnError);\n receiver.on('message', receiverOnMessage);\n receiver.on('ping', receiverOnPing);\n receiver.on('pong', receiverOnPong);\n\n sender.onerror = senderOnError;\n\n //\n // These methods may not be available if `socket` is just a `Duplex`.\n //\n if (socket.setTimeout) socket.setTimeout(0);\n if (socket.setNoDelay) socket.setNoDelay();\n\n if (head.length > 0) socket.unshift(head);\n\n socket.on('close', socketOnClose);\n socket.on('data', socketOnData);\n socket.on('end', socketOnEnd);\n socket.on('error', socketOnError);\n\n this._readyState = WebSocket.OPEN;\n this.emit('open');\n }\n\n /**\n * Emit the `'close'` event.\n *\n * @private\n */\n emitClose() {\n if (!this._socket) {\n this._readyState = WebSocket.CLOSED;\n this.emit('close', this._closeCode, this._closeMessage);\n return;\n }\n\n if (this._extensions[PerMessageDeflate.extensionName]) {\n this._extensions[PerMessageDeflate.extensionName].cleanup();\n }\n\n this._receiver.removeAllListeners();\n this._readyState = WebSocket.CLOSED;\n this.emit('close', this._closeCode, this._closeMessage);\n }\n\n /**\n * Start a closing handshake.\n *\n * +----------+ +-----------+ +----------+\n * - - -|ws.close()|-->|close frame|-->|ws.close()|- - -\n * | +----------+ +-----------+ +----------+ |\n * +----------+ +-----------+ |\n * CLOSING |ws.close()|<--|close frame|<--+-----+ CLOSING\n * +----------+ +-----------+ |\n * | | | +---+ |\n * +------------------------+-->|fin| - - - -\n * | +---+ | +---+\n * - - - - -|fin|<---------------------+\n * +---+\n *\n * @param {Number} [code] Status code explaining why the connection is closing\n * @param {(String|Buffer)} [data] The reason why the connection is\n * closing\n * @public\n */\n close(code, data) {\n if (this.readyState === WebSocket.CLOSED) return;\n if (this.readyState === WebSocket.CONNECTING) {\n const msg = 'WebSocket was closed before the connection was established';\n abortHandshake(this, this._req, msg);\n return;\n }\n\n if (this.readyState === WebSocket.CLOSING) {\n if (\n this._closeFrameSent &&\n (this._closeFrameReceived || this._receiver._writableState.errorEmitted)\n ) {\n this._socket.end();\n }\n\n return;\n }\n\n this._readyState = WebSocket.CLOSING;\n this._sender.close(code, data, !this._isServer, (err) => {\n //\n // This error is handled by the `'error'` listener on the socket. We only\n // want to know if the close frame has been sent here.\n //\n if (err) return;\n\n this._closeFrameSent = true;\n\n if (\n this._closeFrameReceived ||\n this._receiver._writableState.errorEmitted\n ) {\n this._socket.end();\n }\n });\n\n setCloseTimer(this);\n }\n\n /**\n * Pause the socket.\n *\n * @public\n */\n pause() {\n if (\n this.readyState === WebSocket.CONNECTING ||\n this.readyState === WebSocket.CLOSED\n ) {\n return;\n }\n\n this._paused = true;\n this._socket.pause();\n }\n\n /**\n * Send a ping.\n *\n * @param {*} [data] The data to send\n * @param {Boolean} [mask] Indicates whether or not to mask `data`\n * @param {Function} [cb] Callback which is executed when the ping is sent\n * @public\n */\n ping(data, mask, cb) {\n if (this.readyState === WebSocket.CONNECTING) {\n throw new Error('WebSocket is not open: readyState 0 (CONNECTING)');\n }\n\n if (typeof data === 'function') {\n cb = data;\n data = mask = undefined;\n } else if (typeof mask === 'function') {\n cb = mask;\n mask = undefined;\n }\n\n if (typeof data === 'number') data = data.toString();\n\n if (this.readyState !== WebSocket.OPEN) {\n sendAfterClose(this, data, cb);\n return;\n }\n\n if (mask === undefined) mask = !this._isServer;\n this._sender.ping(data || EMPTY_BUFFER, mask, cb);\n }\n\n /**\n * Send a pong.\n *\n * @param {*} [data] The data to send\n * @param {Boolean} [mask] Indicates whether or not to mask `data`\n * @param {Function} [cb] Callback which is executed when the pong is sent\n * @public\n */\n pong(data, mask, cb) {\n if (this.readyState === WebSocket.CONNECTING) {\n throw new Error('WebSocket is not open: readyState 0 (CONNECTING)');\n }\n\n if (typeof data === 'function') {\n cb = data;\n data = mask = undefined;\n } else if (typeof mask === 'function') {\n cb = mask;\n mask = undefined;\n }\n\n if (typeof data === 'number') data = data.toString();\n\n if (this.readyState !== WebSocket.OPEN) {\n sendAfterClose(this, data, cb);\n return;\n }\n\n if (mask === undefined) mask = !this._isServer;\n this._sender.pong(data || EMPTY_BUFFER, mask, cb);\n }\n\n /**\n * Resume the socket.\n *\n * @public\n */\n resume() {\n if (\n this.readyState === WebSocket.CONNECTING ||\n this.readyState === WebSocket.CLOSED\n ) {\n return;\n }\n\n this._paused = false;\n if (!this._receiver._writableState.needDrain) this._socket.resume();\n }\n\n /**\n * Send a data message.\n *\n * @param {*} data The message to send\n * @param {Object} [options] Options object\n * @param {Boolean} [options.binary] Specifies whether `data` is binary or\n * text\n * @param {Boolean} [options.compress] Specifies whether or not to compress\n * `data`\n * @param {Boolean} [options.fin=true] Specifies whether the fragment is the\n * last one\n * @param {Boolean} [options.mask] Specifies whether or not to mask `data`\n * @param {Function} [cb] Callback which is executed when data is written out\n * @public\n */\n send(data, options, cb) {\n if (this.readyState === WebSocket.CONNECTING) {\n throw new Error('WebSocket is not open: readyState 0 (CONNECTING)');\n }\n\n if (typeof options === 'function') {\n cb = options;\n options = {};\n }\n\n if (typeof data === 'number') data = data.toString();\n\n if (this.readyState !== WebSocket.OPEN) {\n sendAfterClose(this, data, cb);\n return;\n }\n\n const opts = {\n binary: typeof data !== 'string',\n mask: !this._isServer,\n compress: true,\n fin: true,\n ...options\n };\n\n if (!this._extensions[PerMessageDeflate.extensionName]) {\n opts.compress = false;\n }\n\n this._sender.send(data || EMPTY_BUFFER, opts, cb);\n }\n\n /**\n * Forcibly close the connection.\n *\n * @public\n */\n terminate() {\n if (this.readyState === WebSocket.CLOSED) return;\n if (this.readyState === WebSocket.CONNECTING) {\n const msg = 'WebSocket was closed before the connection was established';\n abortHandshake(this, this._req, msg);\n return;\n }\n\n if (this._socket) {\n this._readyState = WebSocket.CLOSING;\n this._socket.destroy();\n }\n }\n}\n\n/**\n * @constant {Number} CONNECTING\n * @memberof WebSocket\n */\nObject.defineProperty(WebSocket, 'CONNECTING', {\n enumerable: true,\n value: readyStates.indexOf('CONNECTING')\n});\n\n/**\n * @constant {Number} CONNECTING\n * @memberof WebSocket.prototype\n */\nObject.defineProperty(WebSocket.prototype, 'CONNECTING', {\n enumerable: true,\n value: readyStates.indexOf('CONNECTING')\n});\n\n/**\n * @constant {Number} OPEN\n * @memberof WebSocket\n */\nObject.defineProperty(WebSocket, 'OPEN', {\n enumerable: true,\n value: readyStates.indexOf('OPEN')\n});\n\n/**\n * @constant {Number} OPEN\n * @memberof WebSocket.prototype\n */\nObject.defineProperty(WebSocket.prototype, 'OPEN', {\n enumerable: true,\n value: readyStates.indexOf('OPEN')\n});\n\n/**\n * @constant {Number} CLOSING\n * @memberof WebSocket\n */\nObject.defineProperty(WebSocket, 'CLOSING', {\n enumerable: true,\n value: readyStates.indexOf('CLOSING')\n});\n\n/**\n * @constant {Number} CLOSING\n * @memberof WebSocket.prototype\n */\nObject.defineProperty(WebSocket.prototype, 'CLOSING', {\n enumerable: true,\n value: readyStates.indexOf('CLOSING')\n});\n\n/**\n * @constant {Number} CLOSED\n * @memberof WebSocket\n */\nObject.defineProperty(WebSocket, 'CLOSED', {\n enumerable: true,\n value: readyStates.indexOf('CLOSED')\n});\n\n/**\n * @constant {Number} CLOSED\n * @memberof WebSocket.prototype\n */\nObject.defineProperty(WebSocket.prototype, 'CLOSED', {\n enumerable: true,\n value: readyStates.indexOf('CLOSED')\n});\n\n[\n 'binaryType',\n 'bufferedAmount',\n 'extensions',\n 'isPaused',\n 'protocol',\n 'readyState',\n 'url'\n].forEach((property) => {\n Object.defineProperty(WebSocket.prototype, property, { enumerable: true });\n});\n\n//\n// Add the `onopen`, `onerror`, `onclose`, and `onmessage` attributes.\n// See https://html.spec.whatwg.org/multipage/comms.html#the-websocket-interface\n//\n['open', 'error', 'close', 'message'].forEach((method) => {\n Object.defineProperty(WebSocket.prototype, `on${method}`, {\n enumerable: true,\n get() {\n for (const listener of this.listeners(method)) {\n if (listener[kForOnEventAttribute]) return listener[kListener];\n }\n\n return null;\n },\n set(handler) {\n for (const listener of this.listeners(method)) {\n if (listener[kForOnEventAttribute]) {\n this.removeListener(method, listener);\n break;\n }\n }\n\n if (typeof handler !== 'function') return;\n\n this.addEventListener(method, handler, {\n [kForOnEventAttribute]: true\n });\n }\n });\n});\n\nWebSocket.prototype.addEventListener = addEventListener;\nWebSocket.prototype.removeEventListener = removeEventListener;\n\nmodule.exports = WebSocket;\n\n/**\n * Initialize a WebSocket client.\n *\n * @param {WebSocket} websocket The client to initialize\n * @param {(String|URL)} address The URL to which to connect\n * @param {Array} protocols The subprotocols\n * @param {Object} [options] Connection options\n * @param {Boolean} [options.allowSynchronousEvents=true] Specifies whether any\n * of the `'message'`, `'ping'`, and `'pong'` events can be emitted multiple\n * times in the same tick\n * @param {Boolean} [options.autoPong=true] Specifies whether or not to\n * automatically send a pong in response to a ping\n * @param {Number} [options.closeTimeout=30000] Duration in milliseconds to wait\n * for the closing handshake to finish after `websocket.close()` is called\n * @param {Function} [options.finishRequest] A function which can be used to\n * customize the headers of each http request before it is sent\n * @param {Boolean} [options.followRedirects=false] Whether or not to follow\n * redirects\n * @param {Function} [options.generateMask] The function used to generate the\n * masking key\n * @param {Number} [options.handshakeTimeout] Timeout in milliseconds for the\n * handshake request\n * @param {Number} [options.maxPayload=104857600] The maximum allowed message\n * size\n * @param {Number} [options.maxRedirects=10] The maximum number of redirects\n * allowed\n * @param {String} [options.origin] Value of the `Origin` or\n * `Sec-WebSocket-Origin` header\n * @param {(Boolean|Object)} [options.perMessageDeflate=true] Enable/disable\n * permessage-deflate\n * @param {Number} [options.protocolVersion=13] Value of the\n * `Sec-WebSocket-Version` header\n * @param {Boolean} [options.skipUTF8Validation=false] Specifies whether or\n * not to skip UTF-8 validation for text and close messages\n * @private\n */\nfunction initAsClient(websocket, address, protocols, options) {\n const opts = {\n allowSynchronousEvents: true,\n autoPong: true,\n closeTimeout: CLOSE_TIMEOUT,\n protocolVersion: protocolVersions[1],\n maxPayload: 100 * 1024 * 1024,\n skipUTF8Validation: false,\n perMessageDeflate: true,\n followRedirects: false,\n maxRedirects: 10,\n ...options,\n socketPath: undefined,\n hostname: undefined,\n protocol: undefined,\n timeout: undefined,\n method: 'GET',\n host: undefined,\n path: undefined,\n port: undefined\n };\n\n websocket._autoPong = opts.autoPong;\n websocket._closeTimeout = opts.closeTimeout;\n\n if (!protocolVersions.includes(opts.protocolVersion)) {\n throw new RangeError(\n `Unsupported protocol version: ${opts.protocolVersion} ` +\n `(supported versions: ${protocolVersions.join(', ')})`\n );\n }\n\n let parsedUrl;\n\n if (address instanceof URL) {\n parsedUrl = address;\n } else {\n try {\n parsedUrl = new URL(address);\n } catch {\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,\n isServer: false,\n maxPayload: 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 isServer: true,\n maxPayload: 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 fs from 'node:fs'\nimport os from 'node:os'\nimport path from 'node:path'\nimport type { LogLevel } from './logger.js'\n\nexport interface DaemonConfig {\n port: number\n host: string\n dataDir: string\n configPath: string | null\n logLevel: LogLevel\n tunnel: boolean\n clawosApi: string | null\n authToken: string | null\n // dev-only:从 NODE_ENV=development 或 env CLAWD_NO_TUNNEL_PERSIST=1 推导,不暴露 CLI flag\n noTunnelPersist: boolean\n // 仅环境变量 CLAWD_FRPC_BIN 注入,不暴露 CLI flag\n frpcBinary: string | null\n}\n\nexport interface RawCliArgs {\n port?: number\n dataDir?: string\n config?: string\n logLevel?: LogLevel\n tunnel?: boolean\n clawosApi?: string\n authToken?: string\n help?: boolean\n version?: boolean\n}\n\nconst DEFAULT_PORT = 18790\nconst DEFAULT_HOST = '127.0.0.1'\nconst DEFAULT_CLAWOS_API = 'https://api.clawos.chat'\n\nexport function parseArgs(argv: string[]): RawCliArgs {\n const out: RawCliArgs = {}\n for (let i = 0; i < argv.length; i++) {\n const a = argv[i]\n const next = () => argv[++i]\n switch (a) {\n case '--port': {\n const n = Number.parseInt(next() ?? '', 10)\n if (!Number.isFinite(n) || n <= 0 || n > 65535) {\n throw new Error(`invalid --port value: ${argv[i]}`)\n }\n out.port = n\n break\n }\n case '--data-dir':\n out.dataDir = next()\n break\n case '--config':\n out.config = next()\n break\n case '--log-level': {\n const v = next()\n if (!['debug', 'info', 'warn', 'error'].includes(v as string)) {\n throw new Error(`invalid --log-level value: ${v}`)\n }\n out.logLevel = v as LogLevel\n break\n }\n case '--tunnel':\n out.tunnel = true\n break\n case '--clawos-api':\n out.clawosApi = next()\n break\n case '--auth-token':\n out.authToken = next()\n break\n case '--help':\n case '-h':\n out.help = true\n break\n case '--version':\n case '-v':\n out.version = true\n break\n default:\n if (a.startsWith('--')) throw new Error(`unknown flag: ${a}`)\n break\n }\n }\n return out\n}\n\nexport interface ResolveConfigOptions {\n argv: string[]\n env: NodeJS.ProcessEnv\n home?: string\n}\n\nexport function resolveDataDir(argsDataDir: string | undefined, home: string): string {\n if (argsDataDir && argsDataDir.trim()) return path.resolve(argsDataDir)\n return path.join(home, '.clawd')\n}\n\nfunction readConfigFile(p: string): Partial<DaemonConfig> {\n try {\n const text = fs.readFileSync(p, 'utf8')\n const json = JSON.parse(text)\n if (json && typeof json === 'object') return json\n return {}\n } catch (err: unknown) {\n const code = (err as NodeJS.ErrnoException)?.code\n if (code === 'ENOENT') return {}\n throw new Error(`failed to read config ${p}: ${(err as Error).message}`)\n }\n}\n\nexport function resolveConfig(opts: ResolveConfigOptions): DaemonConfig {\n const home = opts.home ?? os.homedir()\n const args = parseArgs(opts.argv)\n const dataDir = resolveDataDir(args.dataDir, home)\n const configPath = args.config ? path.resolve(args.config) : path.join(dataDir, 'config.json')\n const fileCfg = readConfigFile(configPath)\n\n const port = args.port ?? (typeof fileCfg.port === 'number' ? fileCfg.port : DEFAULT_PORT)\n const host = (typeof fileCfg.host === 'string' && fileCfg.host) || DEFAULT_HOST\n const logLevel = args.logLevel ?? (fileCfg.logLevel as LogLevel | undefined) ?? 'info'\n const env = opts.env\n const fileTunnel = (fileCfg as { tunnel?: boolean }).tunnel === true\n const fileClawosApi = typeof (fileCfg as { clawosApi?: string }).clawosApi === 'string'\n ? (fileCfg as { clawosApi?: string }).clawosApi!\n : null\n const fileAuthToken = typeof (fileCfg as { authToken?: string }).authToken === 'string'\n ? (fileCfg as { authToken?: string }).authToken!\n : null\n const tunnel = args.tunnel === true || fileTunnel || env.CLAWD_TUNNEL === '1'\n const clawosApi = args.clawosApi ?? env.CLAWOS_API ?? fileClawosApi ?? (tunnel ? DEFAULT_CLAWOS_API : null)\n const authToken = args.authToken ?? env.CLAWD_AUTH_TOKEN ?? fileAuthToken\n const noTunnelPersist = env.CLAWD_NO_TUNNEL_PERSIST === '1' || env.NODE_ENV === 'development'\n const frpcBinary = env.CLAWD_FRPC_BIN ?? null\n\n return {\n port,\n host,\n dataDir,\n configPath: args.config ? configPath : fs.existsSync(configPath) ? configPath : null,\n logLevel,\n tunnel,\n clawosApi,\n authToken,\n noTunnelPersist,\n frpcBinary,\n }\n}\n\nexport const HELP_TEXT = `clawd [options]\n --port <n> WebSocket 监听端口,默认 18790\n --data-dir <path> 数据目录,默认 ~/.clawd\n --config <path> 配置文件,默认 <data-dir>/config.json\n --log-level <level> debug / info / warn / error(默认 info)\n --tunnel 启用 frp tunnel 把本地端口暴露到公网\n --clawos-api <url> tunnel register 接口的 base url(默认 https://api.clawos.chat)\n --auth-token <s> 指定 daemon auth token;缺省时 tunnel 模式从 ~/.clawd/auth.json 复用,没有就生成\n --help / -h 显示帮助\n --version / -v 显示版本\n\nEnv (advanced):\n CLAWD_FRPC_BIN 自带 frpc 二进制路径(默认按需下载到 ~/.clawd/bin/frpc)\n CLAWD_NO_TUNNEL_PERSIST 启动时不复用 ~/.clawd/tunnel.json(dev only;NODE_ENV=development 自动开启)\n`\n","import os from 'node:os'\nimport path from 'node:path'\nimport { createLogger, type Logger } from './logger.js'\nimport { SessionStore } from './session/store.js'\nimport { SessionManager } from './session/manager.js'\nimport { ClaudeAdapter } from './tools/claude.js'\nimport { ClaudeHistoryReader } from './tools/claude-history.js'\nimport { WorkspaceBrowser } from './workspace/browser.js'\nimport { SkillsScanner } from './skills/scanner.js'\nimport { SessionObserver } from './observer/session-observer.js'\nimport { registerAdapter, resetRegistry, getAdapter, listRegistered } from './tools/registry.js'\nimport { LocalWsServer } from './transport/local-ws-server.js'\nimport { AuthGate, buildShouldEnforce } from './transport/auth.js'\nimport { StateFileManager, type StateFile } from './discovery/state-file.js'\nimport { TunnelManager } from './tunnel/tunnel-manager.js'\nimport { deriveStableDeviceKey } from './tunnel/device-key.js'\nimport { loadOrCreateAuthToken } from './auth-store.js'\nimport {\n ClawdError,\n ERROR_CODES,\n PROTOCOL_VERSION,\n SessionCreateArgs,\n SessionIdArgs,\n SessionUpdateArgs,\n SessionSendArgs,\n SessionRewindArgs,\n SessionRewindDiffArgs,\n SessionRewindableMessageIdsArgs,\n SessionResumeArgs,\n SessionObserveArgs,\n SessionEventsArgs,\n SessionPinArgs,\n PermissionRespondArgs,\n HistoryListArgs,\n HistoryReadArgs,\n HistorySubagentsArgs,\n HistorySubagentReadArgs,\n WorkspaceListArgs,\n WorkspaceReadArgs,\n SkillsListArgs,\n GitRootArgs,\n GitBranchArgs,\n GitBranchesArgs,\n GitWorktreeCreateArgs,\n GitWorktreeRemoveArgs,\n CapabilitiesGetArgs,\n METHOD_NAMES,\n type EventFrame,\n type MethodName,\n} from './protocol.js'\nimport {\n getGitRoot,\n readGitBranch,\n listGitBranches,\n computePrefix,\n createWorktree,\n removeWorktree,\n} from './workspace/git.js'\nimport { listRecentDirs } from './workspace/recent-dirs.js'\nimport type { EmitFrameTarget } from './session/reducer-types.js'\nimport type { DaemonConfig } from './config.js'\nimport type { ClientHandle, Transport } from './transport/types.js'\nimport { version as daemonVersion } from './version.js'\n\nexport interface DaemonRuntime {\n stop: () => Promise<void>\n url: string\n tunnelUrl: string | null\n authToken: string | null\n}\n\nexport async function startDaemon(config: DaemonConfig): Promise<DaemonRuntime> {\n const logger = createLogger({\n level: config.logLevel,\n file: path.join(config.dataDir, 'clawd.log'),\n })\n logger.info('starting clawd', { version: daemonVersion, config: { port: config.port, host: config.host, dataDir: config.dataDir } })\n\n const stateMgr = new StateFileManager({ dataDir: config.dataDir })\n const pre = stateMgr.preflight()\n if (pre.status === 'active') {\n throw new ClawdError(ERROR_CODES.INTERNAL, `another clawd is running (pid ${pre.existing.pid})`)\n }\n if (pre.status === 'stale') {\n logger.warn('stale state file detected, overwriting', { pid: pre.existing.pid })\n }\n\n // auth token:tunnel 模式必须有;用户传 --auth-token 优先,否则从 ~/.clawd/auth.json\n // 复用(跨重启不变,老 Connect 链接长期有效);没存就现生成并写盘。\n // 想换 token 直接删 ~/.clawd/auth.json。\n let resolvedAuthToken: string | null = null\n if (config.authToken && config.authToken.trim()) {\n resolvedAuthToken = config.authToken.trim()\n } else if (config.tunnel) {\n resolvedAuthToken = loadOrCreateAuthToken({ dataDir: config.dataDir })\n }\n const authMode: 'first-message' | 'none' =\n resolvedAuthToken == null ? 'none' : 'first-message'\n // wsServer 在下文创建;用 lazy ref 解耦(AuthGate 只需要在 onConnection 之后才用 server)\n let wsServer: LocalWsServer | null = null\n const authGate = authMode === 'first-message'\n ? new AuthGate({\n shouldEnforce: buildShouldEnforce({ tunnel: config.tunnel }),\n expectedToken: resolvedAuthToken,\n closeConnection: (h, code, reason) => wsServer?.closeClient(h.id, code, reason),\n sendOk: (h, payload) => wsServer?.sendToClient(h.id, payload),\n })\n : null\n\n resetRegistry()\n registerAdapter(\n 'claude',\n new ClaudeAdapter({ logger, historyReader: new ClaudeHistoryReader() }),\n )\n\n const store = new SessionStore({ dataDir: config.dataDir })\n const workspace = new WorkspaceBrowser()\n const skills = new SkillsScanner()\n const history = new ClaudeHistoryReader()\n\n let transport: Transport | null = null\n\n const manager = new SessionManager({\n store,\n logger,\n getAdapter,\n historyReader: history,\n broadcastFrame: (frame, target) => {\n const sid = (frame as { sessionId?: string }).sessionId\n if (!sid) return\n if (target === 'first-subscriber') {\n const handle = transport?.firstSubscriber(sid)\n if (handle) handle.send(frame)\n return\n }\n transport?.broadcastToSession(sid, frame)\n },\n })\n\n // Observer 把读取到的已解析 ParsedEvent 按\"一行 JSONL = 一帧\"颗粒度回灌给对应 runner。\n // manager.feedObserverEvents 内部会:\n // - 跳过 procAlive runner(managed CC 跑着时不让 observer 推重复内容)\n // - 整批 ParsedEvent 走 reducer 的 inject-events,按 events[0].uuid 整批 dedup\n const observer = new SessionObserver({\n onEvent: ({ sessionId, events }) => {\n manager.feedObserverEvents(sessionId, events)\n },\n onStatus: (sessionId, status) => transport?.broadcastToSession(sessionId, { type: 'session:status', sessionId, status }),\n })\n\n const handlers = buildMethodHandlers({ manager, workspace, skills, history, observer, getAdapter, store })\n\n wsServer = new LocalWsServer({\n host: config.host,\n port: config.port,\n logger,\n readyFrameBuilder: () => buildReadyFrame({ manager, getAdapter }),\n protocolVersion: PROTOCOL_VERSION,\n authGate: authGate ?? undefined,\n })\n transport = wsServer\n const wss = wsServer\n\n wss.onFrame(async (client, frame) => {\n const type = frame.type as string\n if (!METHOD_NAMES.includes(type as MethodName)) {\n throw new ClawdError(ERROR_CODES.METHOD_NOT_ALLOWED, `unknown method: ${type}`)\n }\n const requestId = typeof frame.requestId === 'string' ? frame.requestId : undefined\n const handler = handlers[type as MethodName]\n if (!handler) throw new ClawdError(ERROR_CODES.METHOD_NOT_IMPLEMENTED, `not implemented: ${type}`)\n const result = await handler(frame, client)\n // response 回 requestId(若有);broadcast 按 target 逐帧外推\n if (requestId && result.response) {\n client.send({ ...result.response, requestId })\n }\n for (const { frame: bf, target } of result.broadcast ?? []) {\n const sid = (bf as { sessionId?: string }).sessionId\n if (target === 'first-subscriber' && sid) {\n const handle = transport?.firstSubscriber(sid)\n if (handle) handle.send(bf)\n continue\n }\n if (sid) {\n transport?.broadcastToSession(sid, bf)\n }\n }\n })\n\n await wss.start()\n\n const url = `ws://${config.host}:${config.port}`\n\n // 先写一份基础 state.json,方便外部尽早读取(tunnel URL 后面再补)\n let stateSnapshot: StateFile = {\n pid: process.pid,\n transport: 'local-ws',\n url,\n version: daemonVersion,\n protocolVersion: PROTOCOL_VERSION,\n startedAt: new Date().toISOString(),\n authMode,\n authToken: resolvedAuthToken ?? undefined,\n }\n stateMgr.write(stateSnapshot)\n\n process.stdout.write(`Ready: ${url}\\n`)\n if (authMode === 'first-message' && resolvedAuthToken) {\n process.stdout.write(`Auth Token: ${resolvedAuthToken}\\n`)\n }\n\n let tunnelMgr: TunnelManager | null = null\n if (config.tunnel) {\n if (!config.clawosApi) {\n throw new ClawdError(ERROR_CODES.INTERNAL, '--tunnel requires --clawos-api')\n }\n tunnelMgr = new TunnelManager({\n dataDir: config.dataDir,\n clawosApi: config.clawosApi,\n deviceKey: deriveStableDeviceKey(),\n frpcBinaryOverride: config.frpcBinary,\n noPersist: config.noTunnelPersist,\n logger,\n installProcessExitHandlers: true,\n onFrpcExit: (info) => {\n // frpc 死了但 daemon 自己还活着:广播给所有已 auth 的客户端,\n // 让 ext UI 把状态切到\"仅本地可达\"\n wss.broadcastAll({ type: 'tunnel:exited', code: info.code, subdomain: info.subdomain, url: info.url })\n },\n })\n try {\n const r = await tunnelMgr.start({ localPort: config.port })\n stateSnapshot = { ...stateSnapshot, tunnelUrl: r.url }\n stateMgr.write(stateSnapshot)\n process.stdout.write(`Tunnel: ${r.url}\\n`)\n // 一行式连接码:URL + #token=...,用户从终端整行复制粘到 ext-clawd UI 远程模式\n if (resolvedAuthToken) {\n process.stdout.write(`Connect: ${r.url}#token=${resolvedAuthToken}\\n`)\n }\n } catch (err) {\n // 启动失败:先把已 spawn 的 frpc 杀掉,再清理 ws 和 state\n try {\n await tunnelMgr.stop()\n } catch {\n // ignore — 主流程已经报错\n }\n tunnelMgr = null\n stateMgr.delete()\n await wss.stop()\n throw err\n }\n }\n\n const shutdown = async () => {\n logger.info('stopping clawd')\n observer.stopAll()\n manager.stopAll()\n if (tunnelMgr) {\n await tunnelMgr.stop()\n }\n await wss.stop()\n stateMgr.delete()\n }\n\n return {\n stop: shutdown,\n url,\n tunnelUrl: stateSnapshot.tunnelUrl ?? null,\n authToken: resolvedAuthToken,\n }\n}\n\n// -------- helpers --------\n\n// dispatcher handler 统一返回 {response, broadcast?};\n// wsServer.onFrame 聚合:response 回 requestId,broadcast 按 target 路由外推\ninterface HandlerResult {\n response: Record<string, unknown>\n broadcast?: Array<{ frame: EventFrame; target: EmitFrameTarget }>\n}\n\ntype MethodHandler = (frame: Record<string, unknown>, client: ClientHandle) => Promise<HandlerResult>\n\ninterface HandlerDeps {\n manager: SessionManager\n workspace: WorkspaceBrowser\n skills: SkillsScanner\n history: ClaudeHistoryReader\n observer: SessionObserver\n getAdapter: typeof getAdapter\n store: SessionStore\n}\n\nfunction buildMethodHandlers(deps: HandlerDeps): Record<MethodName, MethodHandler> {\n const { manager, workspace, skills, history, observer, getAdapter, store } = deps\n return {\n 'session:create': async (frame) => {\n const args = SessionCreateArgs.parse(frame)\n const { response, broadcast } = manager.create(args)\n return { response: { type: 'session:info', ...response }, broadcast }\n },\n 'session:list': async () => {\n const { response } = manager.list()\n return { response: { type: 'session:list', ...response } }\n },\n 'session:get': async (frame) => {\n const args = SessionIdArgs.parse(frame)\n const { response } = manager.get(args)\n return { response: { type: 'session:info', ...response } }\n },\n 'session:update': async (frame) => {\n const args = SessionUpdateArgs.parse(frame)\n const { response, broadcast } = manager.update(args)\n return { response: { type: 'session:info', ...response }, broadcast }\n },\n 'session:delete': async (frame) => {\n const args = SessionIdArgs.parse(frame)\n const { broadcast } = manager.delete(args)\n return { response: { type: 'session:deleted', sessionId: args.sessionId }, broadcast }\n },\n 'session:send': async (frame) => {\n const args = SessionSendArgs.parse(frame)\n const { broadcast } = manager.send(args)\n return { response: { type: 'session:send', ok: true }, broadcast }\n },\n 'session:stop': async (frame) => {\n const args = SessionIdArgs.parse(frame)\n const { broadcast } = manager.stop(args)\n return { response: { type: 'session:stop', ok: true }, broadcast }\n },\n 'session:interrupt': async (frame) => {\n const args = SessionIdArgs.parse(frame)\n const { broadcast } = await manager.interrupt(args)\n return { response: { type: 'session:interrupt', ok: true }, broadcast }\n },\n 'session:rewind': async (frame) => {\n const args = SessionRewindArgs.parse(frame)\n const { response, broadcast } = await manager.rewind(args)\n return { response: { type: 'session:rewind', ...response }, broadcast }\n },\n 'session:rewind-diff': async (frame) => {\n const args = SessionRewindDiffArgs.parse(frame)\n const { response } = await manager.rewindDiff(args)\n return { response: { type: 'session:rewind-diff', ...response } }\n },\n 'session:rewindable-message-ids': async (frame) => {\n const args = SessionRewindableMessageIdsArgs.parse(frame)\n const { response } = manager.rewindableMessageIds(args)\n return { response: { type: 'session:rewindable-message-ids', ...response } }\n },\n 'session:new': async (frame) => {\n const args = SessionIdArgs.parse(frame)\n // 停掉该 session 的 JSONL observer:/clear 解绑 toolSessionId 后,观察者若继续喂\n // meta_update / inject-events 会把刚清掉的 contextUsage / gitBranch 和事件流再打回来。\n observer.stop(args.sessionId)\n const { response, broadcast } = manager.newSession(args)\n return { response: { type: 'session:info', ...response }, broadcast }\n },\n 'session:resume': async (frame) => {\n const args = SessionResumeArgs.parse(frame)\n const { response, broadcast } = manager.resume(args)\n return { response: { type: 'session:info', ...response }, broadcast }\n },\n 'session:observe': async (frame) => {\n const args = SessionObserveArgs.parse(frame)\n const { response: file } = manager.get({ sessionId: args.sessionId })\n const sessionFile = file as { tool?: string; cwd: string; sessionId: string } & Record<string, unknown>\n // 必须先 ensureSession 创建 runner —— 否则 observer.onEvent 的回调\n // manager.feedObserverEvent 找不到 runner 会直接 return 把 meta_update 丢弃\n manager.ensureSession(sessionFile as never)\n const adapter = getAdapter(sessionFile.tool ?? 'claude')\n observer.start({\n sessionId: args.sessionId,\n cwd: sessionFile.cwd,\n toolSessionId: args.toolSessionId,\n jsonlPath: args.jsonlPath,\n adapter,\n })\n return { response: { type: 'session:observe', ok: true } }\n },\n 'session:events': async (frame) => {\n const args = SessionEventsArgs.parse(frame)\n const { response } = manager.getEvents(args)\n return { response: { type: 'session:events', ...response } }\n },\n 'session:subscribe': async (frame, client) => {\n if (typeof frame.sessionId === 'string') client.subscribedSessions.add(frame.sessionId)\n return { response: { type: 'subscribed', sessionId: frame.sessionId } }\n },\n 'session:unsubscribe': async (frame, client) => {\n if (typeof frame.sessionId === 'string') client.subscribedSessions.delete(frame.sessionId)\n return { response: { type: 'unsubscribed', sessionId: frame.sessionId } }\n },\n 'session:pin': async (frame) => {\n const args = SessionPinArgs.parse(frame)\n const { response, broadcast } = manager.pin(args)\n return { response: { type: 'session:info', ...response }, broadcast }\n },\n 'permission:respond': async (frame) => {\n const args = PermissionRespondArgs.parse(frame)\n const { broadcast } = manager.respondPermission(args)\n return { response: { type: 'permission:respond', ok: true }, broadcast }\n },\n 'history:projects': async () => {\n const projects = await history.listProjects()\n return { response: { type: 'history:projects', projects } }\n },\n 'history:list': async (frame) => {\n const args = HistoryListArgs.parse(frame)\n const sessions = await history.listSessions(args)\n return { response: { type: 'history:list', sessions } }\n },\n 'history:read': async (frame) => {\n const args = HistoryReadArgs.parse(frame)\n // 通过 sessionId 解出 cwd + toolSessionId;没有 toolSessionId 的 session 返回空\n const { response: file } = manager.get({ sessionId: args.sessionId })\n if (!(file as { toolSessionId?: string }).toolSessionId) {\n return {\n response: { type: 'history:read', messages: [], total: 0, offset: 0 },\n }\n }\n const res = await history.read({\n cwd: (file as { cwd: string }).cwd,\n toolSessionId: (file as { toolSessionId: string }).toolSessionId,\n limit: args.limit,\n offset: args.offset,\n })\n return { response: { type: 'history:read', ...res } }\n },\n 'history:subagents': async (frame) => {\n const args = HistorySubagentsArgs.parse(frame)\n const subs = await history.listSubagents(args)\n return { response: { type: 'history:subagents', subagents: subs } }\n },\n 'history:subagent-read': async (frame) => {\n const args = HistorySubagentReadArgs.parse(frame)\n const res = await history.readSubagent(args)\n return { response: { type: 'history:subagent-read', ...res } }\n },\n 'history:recentDirs': async () => {\n const dirs = listRecentDirs(store)\n return { response: { type: 'history:recentDirs', dirs } }\n },\n 'workspace:list': async (frame) => {\n const args = WorkspaceListArgs.parse(frame)\n const res = workspace.list(args)\n return { response: { type: 'workspace:list', ...res } }\n },\n 'workspace:read': async (frame) => {\n const args = WorkspaceReadArgs.parse(frame)\n const res = workspace.read(args)\n return { response: { type: 'workspace:read', ...res } }\n },\n 'skills:list': async (frame) => {\n const args = SkillsListArgs.parse(frame)\n const list = skills.list(args)\n return { response: { type: 'skills:list', skills: list } }\n },\n 'git:root': async (frame) => {\n const args = GitRootArgs.parse(frame)\n const res = await getGitRoot(args.cwd)\n return { response: { type: 'git:root', ...res } }\n },\n 'git:branch': async (frame) => {\n const args = GitBranchArgs.parse(frame)\n const res = await readGitBranch(args.cwd)\n return { response: { type: 'git:branch', ...res } }\n },\n 'git:branches': async (frame) => {\n const args = GitBranchesArgs.parse(frame)\n const res = await listGitBranches(args.cwd)\n return { response: { type: 'git:branches', ...res } }\n },\n 'git:worktree:prefix': async () => {\n return { response: { type: 'git:worktree:prefix', prefix: computePrefix() } }\n },\n 'git:worktree:create': async (frame) => {\n const args = GitWorktreeCreateArgs.parse(frame)\n try {\n const res = await createWorktree(args)\n return { response: { type: 'git:worktree:create', ...res } }\n } catch (err) {\n // plugin 版用中文文案抛 Error,透传给前端作为用户可见错误\n throw new ClawdError(ERROR_CODES.INTERNAL, (err as Error).message)\n }\n },\n 'git:worktree:remove': async (frame) => {\n const args = GitWorktreeRemoveArgs.parse(frame)\n try {\n await removeWorktree(args)\n return { response: { type: 'git:worktree:remove', ok: true } }\n } catch (err) {\n throw new ClawdError(ERROR_CODES.INTERNAL, (err as Error).message)\n }\n },\n 'capabilities:get': async (frame) => {\n const args = CapabilitiesGetArgs.parse(frame)\n // manager 内部缓存 + 透传 adapter.capabilities();未注册 tool 由 getAdapter 抛 TOOL_NOT_SUPPORTED\n const caps = await manager.getCapabilities(args.tool)\n return { response: { type: 'capabilities:get', ...caps } }\n },\n info: async () => ({ response: buildReadyFrame(deps) }),\n ping: async () => ({ response: { type: 'pong', at: Date.now() } }),\n }\n}\n\ninterface ReadyDeps {\n manager: SessionManager\n getAdapter: typeof getAdapter\n}\n\nfunction buildReadyFrame(deps: ReadyDeps): Record<string, unknown> {\n const info = deps.manager.info()\n const tools: Array<Record<string, unknown>> = []\n for (const id of listRegistered()) {\n try {\n const a = deps.getAdapter(id)\n // probe 是异步的;ready 帧的结构允许不带版本\n // 这里同步只记录 id + available 占位(探测行为在 SessionManager 实际 spawn 时触发)\n tools.push({ id: a.id, available: true })\n } catch {\n tools.push({ id, available: false })\n }\n }\n return {\n version: daemonVersion,\n protocolVersion: PROTOCOL_VERSION,\n hostname: os.hostname(),\n os: process.platform,\n tools,\n runningSessions: info.runningSessions,\n }\n}\n","import fs from 'node:fs'\nimport path from 'node:path'\nimport pino, { type Logger as PinoLogger } from 'pino'\n\nexport type LogLevel = 'debug' | 'info' | 'warn' | 'error'\n\nexport interface Logger {\n debug: (msg: string, meta?: unknown) => void\n info: (msg: string, meta?: unknown) => void\n warn: (msg: string, meta?: unknown) => void\n error: (msg: string, meta?: unknown) => void\n child: (bindings: Record<string, unknown>) => Logger\n}\n\nfunction wrap(inner: PinoLogger): Logger {\n return {\n debug: (msg, meta) => inner.debug(meta ?? {}, msg),\n info: (msg, meta) => inner.info(meta ?? {}, msg),\n warn: (msg, meta) => inner.warn(meta ?? {}, msg),\n error: (msg, meta) => inner.error(meta ?? {}, msg),\n child: (bindings) => wrap(inner.child(bindings)),\n }\n}\n\nexport interface CreateLoggerOptions {\n level?: LogLevel\n // 可选日志文件路径(相对 data-dir 或绝对路径)\n file?: string | null\n}\n\nexport function createLogger(opts: CreateLoggerOptions = {}): Logger {\n const level: LogLevel = opts.level ?? 'info'\n // 不用 pino.transport({ targets })——它会启 worker_threads,tsup bundle 后\n // worker 加载的脚本路径错乱(Cannot find module dist/lib/worker.js)。\n // 用 pino.multistream 走主线程 stdout/file,等价多目标输出且 bundle 友好。\n // 关键:所有 destination 都用 sync: true 的 SonicBoom。\n // 默认(sync: false)下 SonicBoom 异步 open fd,daemon 启动立刻失败时\n // process.exit 触发 pino 的 autoEnd → SonicBoom.flushSync 但 SonicBoom 还\n // 没 ready 就抛 \"sonic boom is not ready yet\",盖住真正的 ClawdError。\n // sync: true 让 SonicBoom 同步 init 立即 ready。daemon 日志量小,sync 写\n // 无性能影响。\n const streams: pino.StreamEntry[] = [\n { stream: pino.destination({ dest: 1, sync: true }), level },\n ]\n if (opts.file) {\n try {\n fs.mkdirSync(path.dirname(opts.file), { recursive: true })\n streams.push({\n stream: pino.destination({ dest: opts.file, mkdir: true, sync: true }),\n level,\n })\n } catch {\n // 文件 writer 初始化失败时降级为只写 stdout\n }\n }\n const base = pino(\n { level, base: { pid: process.pid } },\n pino.multistream(streams),\n )\n return wrap(base)\n}\n","import fs from 'node:fs'\nimport path from 'node:path'\nimport { SessionFileSchema, type SessionFile } from '../protocol.js'\n\n// 固定 v1 agentId\nexport const DEFAULT_AGENT_ID = 'default'\n\n// 把 sessionId 转换成安全文件名(防路径穿越)\nexport function safeFileName(sessionId: string): string {\n // 先把非法字符替换成下划线\n const base = sessionId.replace(/[^a-zA-Z0-9_\\-.]/g, '_')\n // 再把前导点序列(如 `..`、`.`)替换成下划线,避免 dotfile / 目录跳转\n const cleaned = base.replace(/^\\.+/, (dots) => '_'.repeat(dots.length))\n if (!cleaned) {\n throw new Error(`invalid sessionId: ${sessionId}`)\n }\n return cleaned\n}\n\nexport interface SessionStoreOptions {\n dataDir: string\n agentId?: string\n}\n\nexport class SessionStore {\n private readonly root: string\n\n constructor(opts: SessionStoreOptions) {\n const agentId = opts.agentId ?? DEFAULT_AGENT_ID\n this.root = path.join(opts.dataDir, 'sessions', agentId)\n }\n\n private filePath(sessionId: string): string {\n return path.join(this.root, `${safeFileName(sessionId)}.json`)\n }\n\n ensureDir(): void {\n fs.mkdirSync(this.root, { recursive: true })\n }\n\n read(sessionId: string): SessionFile | null {\n try {\n const raw = fs.readFileSync(this.filePath(sessionId), 'utf8')\n const parsed = JSON.parse(raw)\n return SessionFileSchema.parse(parsed)\n } catch (err: unknown) {\n const code = (err as NodeJS.ErrnoException)?.code\n if (code === 'ENOENT') return null\n return null\n }\n }\n\n write(file: SessionFile): SessionFile {\n const validated = SessionFileSchema.parse(file)\n this.ensureDir()\n const target = this.filePath(validated.sessionId)\n const tmp = `${target}.tmp-${process.pid}-${Date.now()}`\n fs.writeFileSync(tmp, JSON.stringify(validated, null, 2), { encoding: 'utf8', mode: 0o600 })\n fs.renameSync(tmp, target)\n return validated\n }\n\n delete(sessionId: string): boolean {\n try {\n fs.unlinkSync(this.filePath(sessionId))\n return true\n } catch (err: unknown) {\n const code = (err as NodeJS.ErrnoException)?.code\n if (code === 'ENOENT') return false\n throw err\n }\n }\n\n list(): SessionFile[] {\n let entries: string[]\n try {\n entries = fs.readdirSync(this.root)\n } catch (err: unknown) {\n const code = (err as NodeJS.ErrnoException)?.code\n if (code === 'ENOENT') return []\n throw err\n }\n const out: SessionFile[] = []\n for (const name of entries) {\n if (!name.endsWith('.json')) continue\n // 跳过临时写入文件\n if (name.includes('.tmp-')) continue\n const full = path.join(this.root, name)\n try {\n const raw = fs.readFileSync(full, 'utf8')\n const parsed = JSON.parse(raw)\n const validated = SessionFileSchema.parse(parsed)\n out.push(validated)\n } catch {\n // 跳过坏文件\n continue\n }\n }\n // 按 updatedAt 倒序(最新的在前)\n return out.sort((a, b) => (a.updatedAt > b.updatedAt ? -1 : a.updatedAt < b.updatedAt ? 1 : 0))\n }\n}\n","// 方法白名单(用于 transport 路由)+ 本地 method 标识\n// 这是 daemon 对外的权威源;extension / UI 只 import,不得自行定义副本\n\n// 业务 method:全部走到 daemon\nexport const METHOD_NAMES = [\n 'session:create',\n 'session:list',\n 'session:get',\n 'session:update',\n 'session:delete',\n 'session:send',\n 'session:stop',\n // 温柔中断当前轮次,不杀进程(走 CC IPC control_request.subtype=interrupt)\n 'session:interrupt',\n // 回滚到指定 user message,并撤销其后 CC 的文件编辑(走 CC IPC control_request.subtype=rewind_files)\n 'session:rewind',\n // Rewind 预览:daemon 读 ~/.claude/file-history 快照 + 磁盘现状算真实 diff,不依赖 CC 进程\n 'session:rewind-diff',\n // 打开 session 时一次性拿到\"有真实 diff\"的 user message id 集合,UI heuristic 据此过滤按钮显示\n 'session:rewindable-message-ids',\n 'session:new',\n 'session:resume',\n 'session:observe',\n 'session:events',\n 'session:subscribe',\n 'session:unsubscribe',\n 'session:pin',\n 'permission:respond',\n 'history:projects',\n 'history:list',\n 'history:read',\n 'history:subagents',\n 'history:subagent-read',\n 'history:recentDirs',\n 'workspace:list',\n 'workspace:read',\n 'skills:list',\n 'git:root',\n 'git:branch',\n 'git:branches',\n 'git:worktree:prefix',\n 'git:worktree:create',\n 'git:worktree:remove',\n 'capabilities:get',\n 'info',\n 'ping',\n] as const\n\nexport type MethodName = (typeof METHOD_NAMES)[number]\n\n// extension 本地 method:不走 daemon,extension server 自己处理\nexport const LOCAL_METHODS = ['daemon:configure', 'daemon:status'] as const\nexport type LocalMethodName = (typeof LOCAL_METHODS)[number]\n\nexport function isMethodName(name: string): name is MethodName {\n return (METHOD_NAMES as readonly string[]).includes(name)\n}\n\nexport function isLocalMethod(name: string): name is LocalMethodName {\n return (LOCAL_METHODS as readonly string[]).includes(name)\n}\n","// 错误码 + 错误类\n// daemon 侧用 ERROR_CODES + ClawdError;extension 侧用 EXT_ERROR_CODES + ExtensionProxyError\n// 两类常量在这里统一声明,不引入 zod,方便 UI type-only 引入\n\nexport const ERROR_CODES = {\n SESSION_NOT_FOUND: 'SESSION_NOT_FOUND',\n SESSION_BUSY: 'SESSION_BUSY',\n INVALID_CWD: 'INVALID_CWD',\n INVALID_PATH: 'INVALID_PATH',\n TOOL_NOT_SUPPORTED: 'TOOL_NOT_SUPPORTED',\n CLAUDE_NOT_FOUND: 'CLAUDE_NOT_FOUND',\n SPAWN_FAILED: 'SPAWN_FAILED',\n INVALID_PERMISSION_MODE: 'INVALID_PERMISSION_MODE',\n METHOD_NOT_IMPLEMENTED: 'METHOD_NOT_IMPLEMENTED',\n METHOD_NOT_ALLOWED: 'METHOD_NOT_ALLOWED',\n VALIDATION_ERROR: 'VALIDATION_ERROR',\n PERMISSION_REQUEST_STALE: 'PERMISSION_REQUEST_STALE',\n FILE_TOO_LARGE: 'FILE_TOO_LARGE',\n INTERNAL: 'INTERNAL',\n UNAUTHORIZED: 'UNAUTHORIZED',\n} as const\n\nexport type ErrorCode = (typeof ERROR_CODES)[keyof typeof ERROR_CODES]\n\nexport class ClawdError extends Error {\n constructor(public code: ErrorCode, message: string) {\n super(message)\n this.name = 'ClawdError'\n }\n}\n\n// extension 本地错误码(server/src/protocol.ts 的 EXT_ERROR_CODES 搬过来)\nexport const EXT_ERROR_CODES = {\n DAEMON_NOT_CONNECTED: 'DAEMON_NOT_CONNECTED',\n DAEMON_VERSION_MISMATCH: 'DAEMON_VERSION_MISMATCH',\n DAEMON_TIMEOUT: 'DAEMON_TIMEOUT',\n METHOD_NOT_ALLOWED: 'METHOD_NOT_ALLOWED',\n VALIDATION_ERROR: 'VALIDATION_ERROR',\n} as const\n\nexport type ExtErrorCode = (typeof EXT_ERROR_CODES)[keyof typeof EXT_ERROR_CODES]\n\nexport class ExtensionProxyError extends Error {\n constructor(public code: ExtErrorCode | string, message: string) {\n super(message)\n this.name = 'ExtensionProxyError'\n }\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","// clawd 协议 zod schema(对齐 clawd-design §5-§7 + v1.1 扩展)\n// 这是 daemon 运行时校验的权威源;UI 侧不需要引入本文件(走 types 入口)\nimport { z } from 'zod'\n\n// ------------------------------ Usage ------------------------------\n\nexport const UsageSchema = z.object({\n input_tokens: z.number().int().nonnegative().optional(),\n cache_read_input_tokens: z.number().int().nonnegative().optional(),\n cache_creation_input_tokens: z.number().int().nonnegative().optional(),\n output_tokens: z.number().int().nonnegative().optional(),\n})\nexport type Usage = z.infer<typeof UsageSchema>\n\n// ------------------------------ ContextUsage (tool-agnostic) ------------------------------\n\n// 归一化 token 使用形状:所有 tool 共享;缺字段视为 0\n// UI 公式:(inputTokens + cacheReadTokens + cacheCreateTokens) / contextWindowSize\nexport const ContextUsageSchema = z.object({\n inputTokens: z.number().int().nonnegative(),\n outputTokens: z.number().int().nonnegative(),\n cacheReadTokens: z.number().int().nonnegative().optional(),\n cacheCreateTokens: z.number().int().nonnegative().optional(),\n})\nexport type ContextUsage = z.infer<typeof ContextUsageSchema>\n\n// ------------------------------ SessionMeta (tool-agnostic, projection) ------------------------------\n\n// 会话运行时元信息:daemon 通过 meta_update 事件回填到 SessionFile,UI 只读\n// 新增 meta 字段直接加这里,SessionFile / meta_update.patch 自动覆盖\nconst sessionMetaShape = {\n gitBranch: z.string().optional(),\n resolvedModel: z.string().optional(),\n contextUsage: ContextUsageSchema.optional(),\n contextWindowSize: z.number().int().positive().optional(),\n} as const\n\nexport const SessionMetaSchema = z.object(sessionMetaShape)\nexport type SessionMeta = z.infer<typeof SessionMetaSchema>\n\n// ------------------------------ Capabilities ------------------------------\n\n// Tool adapter 暴露的模型元信息,contextWindowSize 用于 UI ctx% 计算\nexport const ModelInfoSchema = z.object({\n id: z.string().min(1),\n label: z.string().min(1),\n description: z.string().optional(),\n contextWindowSize: z.number().int().positive(),\n default: z.boolean().optional(),\n})\nexport type ModelInfo = z.infer<typeof ModelInfoSchema>\n\nexport const ModeInfoSchema = z.object({\n id: z.string().min(1),\n label: z.string().min(1),\n description: z.string().optional(),\n})\nexport type ModeInfo = z.infer<typeof ModeInfoSchema>\n\n// ConfigDrawer 渲染单个字段的 schema;scope 决定挂主区还是 Advanced 区\nexport const ConfigFieldSchemaSchema = z.object({\n name: z.string().min(1),\n type: z.enum(['string', 'select', 'toggle']),\n label: z.string().min(1),\n description: z.string().optional(),\n options: z\n .array(\n z.object({\n value: z.string(),\n label: z.string(),\n description: z.string().optional(),\n }),\n )\n .optional(),\n default: z.unknown().optional(),\n scope: z.enum(['core', 'tool-specific']),\n})\nexport type ConfigFieldSchemaT = z.infer<typeof ConfigFieldSchemaSchema>\n\nexport const CapabilitiesGetArgs = z.object({\n tool: z.string().min(1),\n})\nexport type CapabilitiesGetArgsT = z.infer<typeof CapabilitiesGetArgs>\n\nexport const CapabilitiesResponseSchema = z.object({\n tool: z.string().min(1),\n toolSessionIdLabel: z.string().optional(),\n models: z.array(ModelInfoSchema),\n permissionModes: z.array(ModeInfoSchema),\n configSchema: z.array(ConfigFieldSchemaSchema),\n})\nexport type CapabilitiesResponse = z.infer<typeof CapabilitiesResponseSchema>\n\n// ------------------------------ AllowRule ------------------------------\n\nexport const AllowRuleSchema = z.object({\n tool: z.string().min(1),\n pattern: z.string().min(1),\n createdAt: z.string().min(1).optional(),\n})\nexport type AllowRule = z.infer<typeof AllowRuleSchema>\n\n// ------------------------------ SessionFile (§5) ------------------------------\n\nexport const SessionFileSchema = z.object({\n sessionId: z.string().min(1),\n cwd: z.string().min(1),\n tool: z.literal('claude').or(z.string().min(1)).default('claude'),\n // 归一化 tool 侧 session id(CC = claude session uuid,Codex = codex 自己的 id)\n toolSessionId: z.string().optional(),\n label: z.string().optional(),\n model: z.string().optional(),\n permissionMode: z.string().optional(),\n effort: z.string().optional(),\n // 归一化运行时观测字段(daemon 独立计算,session:update 不接受;meta_update 事件投递)\n ...sessionMetaShape,\n permissionRules: z.array(AllowRuleSchema).optional(),\n // Sidebar 置顶时间戳;null/undefined 表示未置顶\n pinnedAt: z.number().int().nonnegative().nullable().optional(),\n // NewSessionDialog 勾选 worktree 创建的 session 才会持久化这两个字段\n worktreeRoot: z.string().min(1).optional(),\n worktreeBranch: z.string().min(1).optional(),\n createdAt: z.string().min(1),\n updatedAt: z.string().min(1),\n})\nexport type SessionFile = z.infer<typeof SessionFileSchema>\n\n// ------------------------------ ParsedEvent (§6) ------------------------------\n\nconst ParsedEventBase = {\n seq: z.number().int().nonnegative().optional(),\n ts: z.string().optional(),\n // CC top-level uuid:同一逻辑帧从 stream-json stdout 和 JSONL 落地时携带相同值,\n // reducer 用它做跨路径去重(managed stdout 和 observer JSONL 双写)。对齐 cc-direct cc-event-store\n uuid: z.string().optional(),\n}\n\n// role=user 系统注入分类(与 HistoryUserMeta 对齐);真实用户输入不带 meta\n// 新增的 attachment-* 是 CC v2.x 把系统上下文从 user text 抽到独立 `type:\"attachment\"` 行后,\n// 选择性保留渲染的折叠子类(skills / deferred_tools);memories 走 attachment_memories 独立 kind;\n// hook_* / task_reminder / command_permissions / auto_mode 等无用户价值的子类在 daemon 层直接丢弃\nexport const HistoryUserMetaSchema = z.enum([\n 'task-notification',\n 'slash-command',\n 'local-command',\n 'system-reminder',\n 'skill-hint',\n 'meta-text',\n 'attachment-skills',\n 'attachment-deferred-tools',\n])\nexport type HistoryUserMetaT = z.infer<typeof HistoryUserMetaSchema>\n\n// 子 agent 工具使用分布(CC Agent tool 的 toolUseResult.toolStats 归一化);缺字段视为 0\nexport const SubagentToolStatsSchema = z.object({\n readCount: z.number().int().nonnegative().optional(),\n searchCount: z.number().int().nonnegative().optional(),\n bashCount: z.number().int().nonnegative().optional(),\n editFileCount: z.number().int().nonnegative().optional(),\n linesAdded: z.number().int().nonnegative().optional(),\n linesRemoved: z.number().int().nonnegative().optional(),\n otherToolCount: z.number().int().nonnegative().optional(),\n})\nexport type SubagentToolStats = z.infer<typeof SubagentToolStatsSchema>\n\n// structuredPatch hunk:与 CC FileEditTool / FileWriteTool 输出的 diff hunk 对齐\n// 用于 rewind 预览在 UI 侧直接从 tool_result 本地算 diff,不依赖 fileHistoryEnabled\nexport const StructuredPatchHunkSchema = z.object({\n oldStart: z.number().int().nonnegative(),\n oldLines: z.number().int().nonnegative(),\n newStart: z.number().int().nonnegative(),\n newLines: z.number().int().nonnegative(),\n // 每行以 '+' / '-' / ' ' 开头(diff npm 包的标准 hunk lines)\n lines: z.array(z.string()),\n})\nexport type StructuredPatchHunk = z.infer<typeof StructuredPatchHunkSchema>\n\n// CC 在 tool_result 所在 JSONL 行顶层挂的 toolUseResult 的归一化子集(只抽非 content 字段);\n// 完整 content 仍走 message.content[0].content 原路径,不在此重复\nexport const ToolResultExtraSchema = z.object({\n agentId: z.string().optional(),\n agentType: z.string().optional(),\n status: z.string().optional(),\n prompt: z.string().optional(),\n // CC File*Tool 结果里的 filePath / structuredPatch:UI rewind 预览据此本地渲染 diff。\n // 两者同时存在才有意义;缺任一则 UI 降级为仅显示\"受影响文件\"摘要\n filePath: z.string().optional(),\n structuredPatch: z.array(StructuredPatchHunkSchema).optional(),\n stats: z\n .object({\n durationMs: z.number().int().nonnegative().optional(),\n tokens: z.number().int().nonnegative().optional(),\n toolUseCount: z.number().int().nonnegative().optional(),\n toolStats: SubagentToolStatsSchema.optional(),\n usage: UsageSchema.optional(),\n })\n .optional(),\n})\nexport type ToolResultExtra = z.infer<typeof ToolResultExtraSchema>\n\n// CC 召回的项目记忆(`type:\"attachment\"`,`attachment.type:\"memories\"`)每条的归一化形状\nexport const MemoryEntrySchema = z.object({\n path: z.string(),\n content: z.string(),\n mtimeMs: z.number().optional(),\n})\nexport type MemoryEntry = z.infer<typeof MemoryEntrySchema>\n\nexport const ParsedEventSchema = z.discriminatedUnion('kind', [\n // session_init 仅携带 session 标识;resolvedModel 等元信息走 meta_update\n z.object({\n ...ParsedEventBase,\n kind: z.literal('session_init'),\n toolSessionId: z.string().optional(),\n }),\n z.object({\n ...ParsedEventBase,\n kind: z.literal('thinking'),\n text: z.string(),\n // 同一思考块的多次 stream_event 增量带相同 partialId(= `${sessionId}-${blockIndex}`);\n // 不带表示是 assistant 帧的整段快照。UI 用 partialId 累积 / 用快照覆盖。\n partialId: z.string().optional(),\n }),\n z.object({\n ...ParsedEventBase,\n kind: z.literal('text'),\n text: z.string(),\n // 同一文本块的多次 stream_event 增量带相同 partialId;语义同 thinking\n partialId: z.string().optional(),\n }),\n // 真实用户输入:daemon 通过 --replay-user-messages 拿到 stdin 回显,区分于 assistant text。\n // meta 非空表示是 CC 注入的系统消息(task-notification / slash-command / system-reminder 等),\n // UI 据此走低视觉权重渲染或子 agent 通知卡。\n z.object({\n ...ParsedEventBase,\n kind: z.literal('user_text'),\n text: z.string(),\n meta: HistoryUserMetaSchema.optional(),\n taskId: z.string().optional(),\n parentToolUseId: z.string().optional(),\n }),\n z.object({\n ...ParsedEventBase,\n kind: z.literal('tool_call'),\n toolUseId: z.string(),\n tool: z.string(),\n // 等于 session.tool;UI 按 {toolKind, tool} 分派渲染。additive 可选,旧 adapter 不填也能解析\n toolKind: z.string().optional(),\n input: z.unknown(),\n }),\n z.object({\n ...ParsedEventBase,\n kind: z.literal('tool_result'),\n toolUseId: z.string(),\n output: z.unknown().optional(),\n error: z.string().optional(),\n // CC Agent / Task tool 完成后在 JSONL 顶层挂的 toolUseResult 元信息(非 content 字段)\n // 老 CC 走 <task-notification> user 消息携带统计,新 CC 直接挂在这里——兼容期两者可能并存\n toolResultExtra: ToolResultExtraSchema.optional(),\n // 精确指向发起 tool 的 assistant 消息顶层 uuid;toolUseId 已够 UI 聚合,这个仅作调试辅助\n sourceToolAssistantUUID: z.string().optional(),\n }),\n // CC 命中项目记忆(`type:\"attachment\"`,`attachment.type:\"memories\"`)的独立事件;\n // 其它 attachment 子类型(skills / hook_context / deferred_tools / hook_success / unknown)\n // 视觉权重低,daemon 直接走 user_text + HistoryUserMeta 折叠,不另开 kind\n z.object({\n ...ParsedEventBase,\n kind: z.literal('attachment_memories'),\n memories: z.array(MemoryEntrySchema),\n }),\n z.object({\n ...ParsedEventBase,\n kind: z.literal('permission_request'),\n requestId: z.string(),\n tool: z.string(),\n input: z.unknown(),\n }),\n z.object({\n ...ParsedEventBase,\n kind: z.literal('turn_end'),\n }),\n z.object({\n ...ParsedEventBase,\n kind: z.literal('error'),\n message: z.string(),\n }),\n // 元信息投递:daemon adapter 从任意来源(stream-json / JSONL)抽出的 SessionMeta 子集\n // reducer 做 patch merge + diff + persist + 广播 session:info;不入 ring buffer\n z.object({\n ...ParsedEventBase,\n kind: z.literal('meta_update'),\n patch: SessionMetaSchema,\n }),\n])\nexport type ParsedEvent = z.infer<typeof ParsedEventSchema>\n\n// ------------------------------ Request args (§7) ------------------------------\n\nexport const SessionCreateArgs = z.object({\n cwd: z.string().min(1),\n tool: z.string().optional(),\n label: z.string().optional(),\n model: z.string().optional(),\n permissionMode: z.string().optional(),\n effort: z.string().optional(),\n // NewSessionDialog 勾选 worktree 时由 UI 传入,daemon 原样持久化,不做额外副作用\n worktreeRoot: z.string().min(1).optional(),\n worktreeBranch: z.string().min(1).optional(),\n})\n\nexport const SessionIdArgs = z.object({ sessionId: z.string().min(1) })\n\nexport const SessionUpdateArgs = z.object({\n sessionId: z.string().min(1),\n patch: z.object({\n label: z.string().optional(),\n model: z.string().optional(),\n permissionMode: z.string().optional(),\n effort: z.string().optional(),\n cwd: z.string().optional(),\n }),\n})\n\nexport const SessionSendArgs = z.object({\n sessionId: z.string().min(1),\n text: z.string(),\n})\n\n// session:interrupt 的 args 就是 sessionId,复用 SessionIdArgs;这里只为对称性导出一个别名\nexport const SessionInterruptArgs = SessionIdArgs\n\n// session:rewind:dryRun=true 仅预览,不改文件;dryRun=false(或缺省)执行真实回退\nexport const SessionRewindArgs = z.object({\n sessionId: z.string().min(1),\n userMessageId: z.string().min(1),\n dryRun: z.boolean().optional(),\n})\nexport type SessionRewindArgsT = z.infer<typeof SessionRewindArgs>\n\n// CC IPC rewind_files 的响应归一化:dryRun / apply 都可能返回\nexport const SessionRewindResponseSchema = z.object({\n canRewind: z.boolean(),\n error: z.string().optional(),\n filesChanged: z.array(z.string()).optional(),\n insertions: z.number().int().nonnegative().optional(),\n deletions: z.number().int().nonnegative().optional(),\n})\nexport type SessionRewindResponse = z.infer<typeof SessionRewindResponseSchema>\n\n// session:rewind-diff:纯预览,不调 CC 进程也不改文件。\n// daemon 读 ~/.claude/file-history/<toolSessionId>/<backup> vs 磁盘当前内容算结构化 diff\nexport const SessionRewindDiffArgs = z.object({\n sessionId: z.string().min(1),\n userMessageId: z.string().min(1),\n})\nexport type SessionRewindDiffArgsT = z.infer<typeof SessionRewindDiffArgs>\n\nexport const RewindDiffHunkSchema = z.object({\n oldStart: z.number().int().nonnegative(),\n oldLines: z.number().int().nonnegative(),\n newStart: z.number().int().nonnegative(),\n newLines: z.number().int().nonnegative(),\n lines: z.array(z.string()),\n})\nexport const RewindDiffFileSchema = z.object({\n filePath: z.string().min(1),\n hunks: z.array(RewindDiffHunkSchema),\n insertions: z.number().int().nonnegative(),\n deletions: z.number().int().nonnegative(),\n status: z.enum(['modified', 'added', 'deleted']).optional(),\n})\nexport const SessionRewindDiffResponseSchema = z.object({\n canRewind: z.boolean(),\n error: z.string().optional(),\n files: z.array(RewindDiffFileSchema),\n totalInsertions: z.number().int().nonnegative(),\n totalDeletions: z.number().int().nonnegative(),\n})\nexport type SessionRewindDiffResponse = z.infer<typeof SessionRewindDiffResponseSchema>\n\n// session:rewindable-message-ids:批量扫所有 snapshot,返回有真实 diff 的 user message id\n// UI 打开 session 调一次,heuristic 据此过滤\"已 rewind 过 / 无意义\"的入口\nexport const SessionRewindableMessageIdsArgs = SessionIdArgs\nexport const SessionRewindableMessageIdsResponseSchema = z.object({\n userMessageIds: z.array(z.string()),\n})\nexport type SessionRewindableMessageIdsResponse = z.infer<\n typeof SessionRewindableMessageIdsResponseSchema\n>\n\nexport const SessionResumeArgs = z.object({\n sessionId: z.string().min(1),\n toolSessionId: z.string().min(1),\n})\n\nexport const SessionObserveArgs = z.object({\n sessionId: z.string().min(1),\n toolSessionId: z.string().min(1),\n jsonlPath: z.string().optional(),\n})\n\nexport const SessionEventsArgs = z.object({\n sessionId: z.string().min(1),\n // -1 表示\"从头拉全量\"(尚未见过任何事件);seq 从 0 起,所以合法下界是 -1\n afterSeq: z.number().int().min(-1),\n})\n\nexport const PermissionRespondArgs = z.object({\n sessionId: z.string().min(1),\n requestId: z.string().min(1),\n allow: z.boolean(),\n permanent: z.boolean().optional(),\n pattern: z.string().optional(),\n})\n\nexport const HistoryListArgs = z.object({ projectPath: z.string().min(1) })\nexport const HistoryReadArgs = z.object({\n sessionId: z.string().min(1),\n limit: z.number().int().positive().max(5000).optional(),\n /** 不传时走 tail 语义:daemon 返回最后 limit 条(offset = max(0, total - limit)) */\n offset: z.number().int().nonnegative().optional(),\n})\nexport const HistorySubagentsArgs = z.object({\n cwd: z.string().min(1),\n toolSessionId: z.string().min(1),\n})\nexport const HistorySubagentReadArgs = z.object({\n cwd: z.string().min(1),\n toolSessionId: z.string().min(1),\n subagentId: z.string().min(1),\n})\n\nexport const WorkspaceListArgs = z.object({\n // cwd 缺省则 daemon 兜底 os.homedir();UI 的 DirBrowser 首次浏览就走这条路径\n cwd: z.string().min(1).optional(),\n path: z.string().optional(),\n showHidden: z.boolean().optional(),\n})\nexport const WorkspaceReadArgs = z.object({\n cwd: z.string().min(1),\n path: z.string().min(1),\n})\n\nexport const SkillsListArgs = z.object({ cwd: z.string().min(1) })\n\nexport const SessionSubscribeArgs = z.object({ sessionId: z.string().min(1) })\n\n// ------------------------------ session:pin ------------------------------\n\nexport const SessionPinArgs = z.object({\n sessionId: z.string().min(1),\n pinned: z.boolean(),\n})\nexport type SessionPinArgsT = z.infer<typeof SessionPinArgs>\n\n// ------------------------------ git:* ------------------------------\n\nexport const GitRootArgs = z.object({ cwd: z.string().min(1) })\nexport type GitRootArgsT = z.infer<typeof GitRootArgs>\n\nexport const GitRootResponseSchema = z.object({\n isGitRoot: z.boolean(),\n gitRoot: z.string().nullable(),\n})\nexport type GitRootResponse = z.infer<typeof GitRootResponseSchema>\n\nexport const GitBranchArgs = z.object({ cwd: z.string().min(1) })\nexport type GitBranchArgsT = z.infer<typeof GitBranchArgs>\n\nexport const GitBranchResponseSchema = z.object({\n branch: z.string().nullable(),\n})\nexport type GitBranchResponse = z.infer<typeof GitBranchResponseSchema>\n\nexport const GitBranchesArgs = z.object({ cwd: z.string().min(1) })\nexport type GitBranchesArgsT = z.infer<typeof GitBranchesArgs>\n\nexport const GitBranchesResponseSchema = z.object({\n branches: z.array(z.string()),\n head: z.string().nullable(),\n})\nexport type GitBranchesResponse = z.infer<typeof GitBranchesResponseSchema>\n\nexport const GitWorktreePrefixArgs = z.object({}).optional()\nexport type GitWorktreePrefixArgsT = z.infer<typeof GitWorktreePrefixArgs>\n\nexport const GitWorktreePrefixResponseSchema = z.object({\n prefix: z.string().min(1),\n})\nexport type GitWorktreePrefixResponse = z.infer<typeof GitWorktreePrefixResponseSchema>\n\nexport const GitWorktreeCreateArgs = z.object({\n cwd: z.string().min(1),\n baseBranch: z.string().min(1),\n label: z.string().min(1),\n})\nexport type GitWorktreeCreateArgsT = z.infer<typeof GitWorktreeCreateArgs>\n\nexport const GitWorktreeCreateResponseSchema = z.object({\n worktreeRoot: z.string().min(1),\n branch: z.string().min(1),\n baseBranch: z.string().min(1),\n})\nexport type GitWorktreeCreateResponse = z.infer<typeof GitWorktreeCreateResponseSchema>\n\nexport const GitWorktreeRemoveArgs = z.object({\n worktreeRoot: z.string().min(1),\n worktreeBranch: z.string().min(1),\n})\nexport type GitWorktreeRemoveArgsT = z.infer<typeof GitWorktreeRemoveArgs>\n\nexport const GitWorktreeRemoveResponseSchema = z.object({ ok: z.literal(true) })\nexport type GitWorktreeRemoveResponse = z.infer<typeof GitWorktreeRemoveResponseSchema>\n\n// ------------------------------ history:recentDirs ------------------------------\n\n// 无入参\nexport const HistoryRecentDirsArgs = z.object({}).optional()\nexport type HistoryRecentDirsArgsT = z.infer<typeof HistoryRecentDirsArgs>\n\nexport const RecentDirEntrySchema = z.object({\n cwd: z.string().min(1),\n updatedAt: z.string().min(1),\n})\nexport type RecentDirEntry = z.infer<typeof RecentDirEntrySchema>\n\nexport const HistoryRecentDirsResponseSchema = z.object({\n dirs: z.array(RecentDirEntrySchema),\n})\nexport type HistoryRecentDirsResponse = z.infer<typeof HistoryRecentDirsResponseSchema>\n\n// ------------------------------ auth: first-message handshake (v1.1) ------------------------------\n\n// 客户端连上 daemon ws 后,未通过 first-message auth 前唯一允许的请求帧\n// scheme 缺省按 'bearer' 处理;预留点便于以后扩 mTLS / OAuth\nexport const AuthRequestFrameSchema = z.object({\n type: z.literal('auth'),\n token: z.string().min(1),\n scheme: z.literal('bearer').optional(),\n})\nexport type AuthRequestFrame = z.infer<typeof AuthRequestFrameSchema>\n\n// daemon 校验通过后下发;客户端据此把\"业务通道就绪\"标志置 true\nexport const AuthOkFrameSchema = z.object({\n type: z.literal('auth:ok'),\n version: z.string().min(1).optional(),\n protocolVersion: z.number().int().nonnegative().optional(),\n})\nexport type AuthOkFrame = z.infer<typeof AuthOkFrameSchema>\n\n// daemon 在 frpc 子进程意外退出时广播;本地 ws 仍存活,远程客户端会收到 ws close\nexport const TunnelExitedEventSchema = z.object({\n type: z.literal('tunnel:exited'),\n code: z.number().int().nullable(),\n subdomain: z.string().nullable(),\n url: z.string().nullable(),\n})\nexport type TunnelExitedEvent = z.infer<typeof TunnelExitedEventSchema>\n","// WS 帧类型定义 + spawn/encode context + 协议版本常量\n// 从这些类型可以推出 wire 上某 type 帧的必填 / 可选字段\nimport type { MethodName } from './methods.js'\nimport type { EventName } from './events.js'\nimport type { ErrorCode } from './errors.js'\n\nexport type RequestFrame = {\n type: MethodName\n requestId: string\n [key: string]: unknown\n}\n\nexport type ResponseFrame = {\n type: string\n requestId: string\n [key: string]: unknown\n}\n\nexport type EventFrame = {\n type: EventName\n [key: string]: unknown\n}\n\nexport type ErrorFrame = {\n type: 'error'\n requestId?: string\n code: ErrorCode\n message: string\n}\n\n// 协议版本号:用于 ready 帧 / extension 侧版本校验\n// wire shape 任何 breaking change 都 MUST 同步 bump 这个常量\nexport const PROTOCOL_VERSION = 1\n\n// ChildProcess 层 context:daemon 内部 adapter.spawn 用\nexport interface SpawnContext {\n cwd: string\n /** tool 侧持久化 session id,resume 时传给 CLI(CC 映射到 --resume <uuid>) */\n toolSessionId?: string\n model?: string\n permissionMode?: string\n effort?: string\n env?: NodeJS.ProcessEnv\n}\n\nexport interface EncodeContext {\n sessionId: string\n}\n","// SessionManager:基于 reducer + SessionRunner 的唯一 session 管理器\n//\n// 职责:\n// - 内部每个 session 持一个 SessionRunner(reducer + effect runner)\n// - frame 广播经过 broadcastFrame 回调;manager 层用 compressFrameForWire 把\n// reducer 的内部 status 集合(spawning / stopping)压成 wire 允许的\n// 'idle' / 'running' / 'stopped' / 'error',并 strip 掉 session:status 上\n// reducer 额外带的 exitCode / message 字段\n// - permission-decision 入口在 manager 层查 state.pendingPermissions:\n// 不存在抛 PERMISSION_REQUEST_STALE\n// - 命令方法返回 { response, broadcast[] }:response 回 requestId,\n// broadcast 由 dispatcher 逐帧推给订阅者(异步路径仍走 broadcastFrame)\n\nimport fs from 'node:fs'\nimport type { ChildProcess } from 'node:child_process'\nimport { v4 as uuidv4 } from 'uuid'\nimport {\n ClawdError,\n ERROR_CODES,\n type EventFrame,\n type ParsedEvent,\n type SessionFile,\n type SpawnContext,\n} from '../protocol.js'\nimport type { Logger } from '../logger.js'\nimport type { HistoryReader, ToolAdapter, ToolCapabilities } from '../tools/types.js'\nimport { SessionStore } from './store.js'\nimport { SessionRunner } from './runner.js'\nimport type {\n EmitFrameTarget,\n SessionState,\n SessionStatus as ReducerStatus,\n} from './reducer-types.js'\n\n// Wire 级 session status(wire 协议只允许这 4 个值)\nexport type SessionStatus = 'idle' | 'running' | 'stopped' | 'error'\n\n// ---------------- wire 压缩 ----------------\n\n// session:status 的 wire 契约与 legacy Session.setStatus 行为对齐:\n// - 只对外出现 idle / running / stopped / error(没有 spawning / stopping)\n// - 帧字段只有 {type, sessionId, status}(不带 exitCode / message)\n// reducer 在 P2.2 里引入了更精细的内部 status 集合,本函数把 wire 视图重新压平\nexport function compressFrameForWire(frame: EventFrame): EventFrame | null {\n if (frame.type !== 'session:status') return frame\n const raw = frame as EventFrame & {\n status: ReducerStatus | string\n exitCode?: number | null\n message?: string\n sessionId?: string\n }\n const status = raw.status\n // 压缩 status\n let compressed: SessionStatus\n switch (status) {\n case 'spawning':\n case 'running':\n compressed = 'running'\n break\n case 'stopping':\n case 'stopped':\n compressed = 'stopped'\n break\n case 'error':\n compressed = 'error'\n break\n case 'idle':\n compressed = 'idle'\n break\n default:\n // 未知 status:保守映射到 idle,不应发生\n compressed = 'idle'\n break\n }\n // strip exitCode / message\n return {\n type: 'session:status',\n sessionId: raw.sessionId,\n status: compressed,\n } as EventFrame\n}\n\n// reducer state.status 压缩到 legacy 视图(给 info() / getStatus() 等场景用)\nfunction compressStatus(status: ReducerStatus): SessionStatus {\n switch (status) {\n case 'spawning':\n case 'running':\n return 'running'\n case 'stopping':\n case 'stopped':\n return 'stopped'\n case 'error':\n return 'error'\n case 'idle':\n default:\n return 'idle'\n }\n}\n\n// ---------------- SessionManager ----------------\n\nexport interface ManagerDeps {\n store: SessionStore\n logger?: Logger\n getAdapter: (id: string) => ToolAdapter\n // rewindDiff 要从 JSONL 读 file-history-snapshot 条目,注入统一的 history reader;\n // 只声明 manager 实际用到的方法(subagent / read 等走不到这里)\n historyReader: Pick<HistoryReader, 'computeRewindDiff' | 'listRewindableUserMessageIds'>\n // 外部订阅者:收到已经压过 wire 的 frame\n broadcastFrame: (frame: EventFrame, target: EmitFrameTarget) => void\n // 测试注入\n spawnOverride?: (ctx: SpawnContext) => ChildProcess\n now?: () => number\n bufferCap?: number\n}\n\nfunction nowIso(deps: ManagerDeps): string {\n return new Date((deps.now ?? Date.now)()).toISOString()\n}\n\nfunction newSessionId(): string {\n return uuidv4().replace(/-/g, '').slice(0, 16)\n}\n\n// 生成 initial reducer state(runner 构造器要求)\nfunction makeInitialState(file: SessionFile): SessionState {\n return {\n file,\n status: 'idle',\n buffer: [],\n nextSeq: 0,\n bufferStartSeq: 0,\n turnOpen: false,\n pendingPermissions: {},\n freshSpawn: false,\n procAlive: false,\n seenUuids: [],\n }\n}\n\n// 单个 wire 级 frame + 路由 target;dispatcher 按 target 发送\nexport interface BroadcastEntry {\n frame: EventFrame\n target: EmitFrameTarget\n}\n\n// 命令方法统一返回类型:response 回 requestId,broadcast 由 dispatcher 逐帧外推\nexport interface ManagerResult {\n response: Record<string, unknown>\n broadcast: BroadcastEntry[]\n}\n\nexport class SessionManager {\n // sessionId → SessionRunner;在 send / ensureSession 时按需创建\n private readonly runners = new Map<string, SessionRunner>()\n // 当同步命令执行期间,runner 的 emit-frame 临时 push 到这里;\n // null 表示当前是异步路径(stdout 'data' / proc 'exit' 等),走 deps.broadcastFrame\n private currentCollector: BroadcastEntry[] | null = null\n // tool id → capabilities 快照(仅 capabilities:get RPC 缓存用;contextWindowSize 走 adapter.resolveContextWindow,无需缓存)\n private readonly capabilitiesCache = new Map<string, ToolCapabilities>()\n\n constructor(private readonly deps: ManagerDeps) {}\n\n async getCapabilities(tool: string): Promise<ToolCapabilities> {\n const cached = this.capabilitiesCache.get(tool)\n if (cached) return cached\n const adapter = this.deps.getAdapter(tool)\n const caps = await adapter.capabilities()\n this.capabilitiesCache.set(tool, caps)\n return caps\n }\n\n // 创建 runner 时包一层 broadcast hook:所有外出 frame 统一走 routeFromRunner,\n // 经过 compressFrameForWire 后决定是 push collector 还是走 deps.broadcastFrame\n private newRunner(file: SessionFile): SessionRunner {\n const adapter = this.deps.getAdapter(file.tool ?? 'claude')\n const runner = new SessionRunner(makeInitialState(file), {\n broadcastFrame: (frame, target) => this.routeFromRunner(frame, target),\n store: this.deps.store,\n adapter,\n logger: this.deps.logger,\n spawnOverride: this.deps.spawnOverride,\n now: this.deps.now,\n bufferCap: this.deps.bufferCap,\n // adapter 自己持有模型表 + 兜底逻辑(contains / opus-1M / [1m] 等),manager 不再 cache 转发\n resolveContextWindow: (tool, modelId) =>\n this.deps.getAdapter(tool).resolveContextWindow(modelId),\n })\n return runner\n }\n\n // 统一 runner 出口:先压 wire,然后按当前上下文路由\n // 同步命令路径(currentCollector 非空) → push 进 collector,命令方法返回给 dispatcher\n // 异步路径(stdout/exit/observer 主动调用) → 走 deps.broadcastFrame\n private routeFromRunner(frame: EventFrame, target: EmitFrameTarget): void {\n const compressed = compressFrameForWire(frame)\n if (!compressed) return\n if (this.currentCollector) {\n this.currentCollector.push({ frame: compressed, target })\n return\n }\n this.deps.broadcastFrame(compressed, target)\n }\n\n // 把同步块内 runner 产出的 frames 收集起来返回;异常情况下也要还原 collector\n private withCollector<T>(fn: (push: (e: BroadcastEntry) => void) => T): {\n value: T\n broadcast: BroadcastEntry[]\n } {\n const collector: BroadcastEntry[] = []\n const prev = this.currentCollector\n this.currentCollector = collector\n try {\n const value = fn((e) => collector.push(e))\n return { value, broadcast: collector }\n } finally {\n this.currentCollector = prev\n }\n }\n\n // ---- 命令方法:均返回 { response, broadcast[] },由 dispatcher 聚合 ----\n\n create(args: {\n cwd: string\n tool?: string\n label?: string\n model?: string\n permissionMode?: string\n effort?: string\n worktreeRoot?: string\n worktreeBranch?: string\n }): ManagerResult {\n // 校验 cwd\n try {\n const stat = fs.statSync(args.cwd)\n if (!stat.isDirectory()) throw new Error('not dir')\n } catch {\n throw new ClawdError(ERROR_CODES.INVALID_CWD, `cwd not a directory: ${args.cwd}`)\n }\n const tool = args.tool ?? 'claude'\n // 校验 adapter 注册(会抛 TOOL_NOT_SUPPORTED)\n this.deps.getAdapter(tool)\n const iso = nowIso(this.deps)\n const file: SessionFile = {\n sessionId: newSessionId(),\n cwd: args.cwd,\n tool,\n label: args.label,\n model: args.model,\n permissionMode: args.permissionMode,\n effort: args.effort,\n worktreeRoot: args.worktreeRoot,\n worktreeBranch: args.worktreeBranch,\n createdAt: iso,\n updatedAt: iso,\n }\n const written = this.deps.store.write(file)\n return { response: written, broadcast: [] }\n }\n\n pin(args: { sessionId: string; pinned: boolean }): ManagerResult {\n // 必须 session 存在\n const existing = this.getFile(args.sessionId)\n const pinnedAt = args.pinned ? (this.deps.now ?? Date.now)() : null\n const runner = this.runners.get(args.sessionId)\n if (runner) {\n const { value, broadcast } = this.withCollector(() => {\n runner.input({ kind: 'command', command: { kind: 'update', patch: { pinnedAt } } })\n return runner.getState().file\n })\n return { response: value, broadcast }\n }\n // 无 runner:直接写 store(无活跃 session 也持久化 pin 状态)\n const updated: SessionFile = { ...existing, pinnedAt, updatedAt: nowIso(this.deps) }\n this.deps.store.write(updated)\n return { response: updated, broadcast: [] }\n }\n\n list(): ManagerResult {\n return { response: { sessions: this.deps.store.list() }, broadcast: [] }\n }\n\n get(args: { sessionId: string }): ManagerResult {\n const file = this.getFile(args.sessionId)\n return { response: file, broadcast: [] }\n }\n\n // 内部帮手:不走 ManagerResult 的 get,直接拿 SessionFile\n private getFile(sessionId: string): SessionFile {\n const runner = this.runners.get(sessionId)\n const existing = runner?.getState().file ?? this.deps.store.read(sessionId)\n if (!existing) throw new ClawdError(ERROR_CODES.SESSION_NOT_FOUND, sessionId)\n return existing\n }\n\n update(args: {\n sessionId: string\n patch: Partial<Pick<SessionFile, 'label' | 'model' | 'permissionMode' | 'effort' | 'cwd'>>\n }): ManagerResult {\n // 先保证 session 存在\n const existing = this.getFile(args.sessionId)\n const runner = this.runners.get(args.sessionId)\n if (runner) {\n const { value, broadcast } = this.withCollector(() => {\n runner.input({ kind: 'command', command: { kind: 'update', patch: args.patch } })\n return runner.getState().file\n })\n return { response: value, broadcast }\n }\n // 无 runner:直接写 store(无活跃 session 也持久化 patch)\n const updated: SessionFile = { ...existing, ...args.patch, updatedAt: nowIso(this.deps) }\n this.deps.store.write(updated)\n return { response: updated, broadcast: [] }\n }\n\n delete(args: { sessionId: string }): ManagerResult {\n const existing = this.deps.store.read(args.sessionId)\n if (!existing) throw new ClawdError(ERROR_CODES.SESSION_NOT_FOUND, args.sessionId)\n const runner = this.runners.get(args.sessionId)\n if (runner) {\n const { broadcast } = this.withCollector(() => {\n runner.input({ kind: 'command', command: { kind: 'delete' } })\n })\n this.runners.delete(args.sessionId)\n return { response: { sessionId: args.sessionId }, broadcast }\n }\n // 无 runner 也要删 store + 发 session:deleted\n this.deps.store.delete(args.sessionId)\n return {\n response: { sessionId: args.sessionId },\n broadcast: [\n { frame: { type: 'session:deleted', sessionId: args.sessionId }, target: 'broadcast' },\n ],\n }\n }\n\n send(args: { sessionId: string; text: string }): ManagerResult {\n const existing = this.getFile(args.sessionId)\n let runner = this.runners.get(args.sessionId)\n if (!runner) {\n runner = this.newRunner(existing)\n this.runners.set(args.sessionId, runner)\n }\n const { broadcast } = this.withCollector(() => {\n runner!.input({ kind: 'command', command: { kind: 'send', text: args.text } })\n })\n return { response: { ok: true }, broadcast }\n }\n\n stop(args: { sessionId: string }): ManagerResult {\n const runner = this.runners.get(args.sessionId)\n if (!runner) return { response: { ok: true }, broadcast: [] }\n const { broadcast } = this.withCollector(() => {\n runner.input({ kind: 'command', command: { kind: 'stop' } })\n })\n return { response: { ok: true }, broadcast }\n }\n\n // 温柔中断当前轮次:不杀进程,仅发 CC IPC `control_request.subtype=interrupt`\n // 失败情况(session 不存在 / 没活进程 / 超时 / 进程半路退出)都 throw ClawdError\n async interrupt(args: { sessionId: string }): Promise<ManagerResult> {\n this.getFile(args.sessionId) // 不存在抛 SESSION_NOT_FOUND\n const runner = this.runners.get(args.sessionId)\n if (!runner || !runner.getState().procAlive) {\n throw new ClawdError(\n ERROR_CODES.SESSION_BUSY,\n `session not running: ${args.sessionId}`,\n )\n }\n try {\n await runner.sendControlRequest('interrupt')\n } catch (err) {\n throw new ClawdError(ERROR_CODES.INTERNAL, (err as Error).message)\n }\n return { response: { ok: true }, broadcast: [] }\n }\n\n // 批量版本:UI 打开 session 时一次性拿到\"磁盘和快照有差异\"的 user message id 集合,\n // 用来在消息流里精准控制 rewind 按钮的显示。session 没 toolSessionId 时返回空\n rewindableMessageIds(args: { sessionId: string }): ManagerResult {\n const file = this.getFile(args.sessionId)\n const toolSessionId = (file as { toolSessionId?: string }).toolSessionId\n if (!toolSessionId) {\n return { response: { userMessageIds: [] }, broadcast: [] }\n }\n const ids = this.deps.historyReader.listRewindableUserMessageIds({\n cwd: (file as { cwd: string }).cwd,\n toolSessionId,\n })\n return { response: { userMessageIds: ids }, broadcast: [] }\n }\n\n // 预览 rewind 的真实 diff:对齐 CC `fileHistoryGetDiffStats`。daemon 读\n // ~/.claude/file-history/<toolSessionId>/<backupFileName> vs 磁盘当前内容算 hunks,\n // 完全不走 CC 进程、不依赖 fileHistoryEnabled,历史 session 也可用\n async rewindDiff(args: {\n sessionId: string\n userMessageId: string\n }): Promise<ManagerResult> {\n const file = this.getFile(args.sessionId)\n const toolSessionId = (file as { toolSessionId?: string }).toolSessionId\n if (!toolSessionId) {\n return {\n response: {\n canRewind: false,\n error: '会话尚未与 CC toolSessionId 关联(未启动过或未解析到)',\n files: [],\n totalInsertions: 0,\n totalDeletions: 0,\n },\n broadcast: [],\n }\n }\n const r = this.deps.historyReader.computeRewindDiff({\n cwd: (file as { cwd: string }).cwd,\n toolSessionId,\n userMessageId: args.userMessageId,\n })\n return { response: { ...r }, broadcast: [] }\n }\n\n // 回滚 session 到指定 userMessageId:\n // dryRun=true → 只向 CC 问\"能不能回 + 会动哪些文件\",不改磁盘、不广播\n // dryRun=false → 真正让 CC 撤销之后的文件编辑,成功则广播 session:rewound\n //\n // CC 进程没活时自动 spawn(复用 reducer 的 spawn-if-needed command,和 send 走同一套\n // spawn effect)。用户点\"确认回退\"时不该因为进程冷态被反弹去发消息——真正 rewind 依赖\n // 的是 CC 自己进程内存里的 FileHistoryState,spawn 后 CC 会从 JSONL 重建这份 state\n // (fileHistoryRestoreStateFromLog),然后才能响应 rewind_files IPC\n async rewind(args: {\n sessionId: string\n userMessageId: string\n dryRun?: boolean\n }): Promise<ManagerResult> {\n const file = this.getFile(args.sessionId)\n let runner = this.runners.get(args.sessionId)\n if (!runner) {\n runner = this.newRunner(file)\n this.runners.set(args.sessionId, runner)\n }\n if (!runner.getState().procAlive) {\n // 走 reducer 的 spawn-if-needed 分支 → emit spawn effect + session:status 'running'\n // UI 的进程指示器会跟上。stdin.write 是 OS 缓冲的,CC 起来就能读到随后的 control_request\n this.withCollector(() => {\n runner!.input({ kind: 'command', command: { kind: 'spawn-if-needed' } })\n })\n }\n const dryRun = Boolean(args.dryRun)\n let raw: unknown\n try {\n raw = await runner.sendControlRequest('rewind_files', {\n user_message_id: args.userMessageId,\n dry_run: dryRun,\n })\n } catch (err) {\n throw new ClawdError(ERROR_CODES.INTERNAL, (err as Error).message)\n }\n const r = (raw ?? {}) as {\n canRewind?: boolean\n error?: string\n filesChanged?: unknown\n insertions?: unknown\n deletions?: unknown\n }\n const normalized: Record<string, unknown> = {\n canRewind: Boolean(r.canRewind),\n }\n if (typeof r.error === 'string') normalized.error = r.error\n if (Array.isArray(r.filesChanged)) normalized.filesChanged = r.filesChanged\n if (typeof r.insertions === 'number') normalized.insertions = r.insertions\n if (typeof r.deletions === 'number') normalized.deletions = r.deletions\n\n const broadcast: BroadcastEntry[] = []\n if (!dryRun && normalized.canRewind === true) {\n broadcast.push({\n frame: {\n type: 'session:rewound',\n sessionId: args.sessionId,\n userMessageId: args.userMessageId,\n at: nowIso(this.deps),\n },\n target: 'broadcast',\n })\n }\n return { response: normalized, broadcast }\n }\n\n newSession(args: { sessionId: string }): ManagerResult {\n // 必须 session 存在\n this.getFile(args.sessionId)\n const runner = this.runners.get(args.sessionId)\n if (runner) {\n const { value, broadcast } = this.withCollector(() => {\n runner.input({ kind: 'command', command: { kind: 'new' } })\n return runner.getState().file\n })\n return { response: value, broadcast }\n }\n // 无 runner:直接改 store。对齐 reducer 的 'new' case,同时丢掉旧 tool session 的 meta。\n const existing = this.deps.store.read(args.sessionId)!\n const {\n toolSessionId: _drop,\n contextUsage: _ctx,\n contextWindowSize: _win,\n gitBranch: _branch,\n resolvedModel: _model,\n ...rest\n } = existing\n void _drop\n void _ctx\n void _win\n void _branch\n void _model\n const updated: SessionFile = { ...rest, updatedAt: nowIso(this.deps) }\n return { response: this.deps.store.write(updated), broadcast: [] }\n }\n\n resume(args: { sessionId: string; toolSessionId: string }): ManagerResult {\n // 必须 session 存在\n this.getFile(args.sessionId)\n const runner = this.runners.get(args.sessionId)\n if (runner) {\n const { value, broadcast } = this.withCollector(() => {\n runner.input({\n kind: 'command',\n command: { kind: 'resume', toolSessionId: args.toolSessionId },\n })\n return runner.getState().file\n })\n return { response: value, broadcast }\n }\n const existing = this.deps.store.read(args.sessionId)!\n const updated: SessionFile = {\n ...existing,\n toolSessionId: args.toolSessionId,\n updatedAt: nowIso(this.deps),\n }\n return { response: this.deps.store.write(updated), broadcast: [] }\n }\n\n getEvents(args: { sessionId: string; afterSeq: number }): ManagerResult {\n const runner = this.runners.get(args.sessionId)\n if (!runner) {\n // 没活跃 session:校验 session 存在 + 返回空\n this.getFile(args.sessionId)\n return {\n response: {\n sessionId: args.sessionId,\n events: [],\n latestSeq: -1,\n bufferStartSeq: 0,\n },\n broadcast: [],\n }\n }\n const st = runner.getState()\n const events = st.buffer.filter((e) => e.seq > args.afterSeq)\n const latestSeq = st.nextSeq - 1\n return {\n response: {\n sessionId: args.sessionId,\n events,\n latestSeq,\n bufferStartSeq: st.bufferStartSeq,\n },\n broadcast: [],\n }\n }\n\n info(): {\n runningSessions: Array<{ sessionId: string; status: SessionStatus; freshSpawn: boolean }>\n } {\n const running: Array<{ sessionId: string; status: SessionStatus; freshSpawn: boolean }> = []\n for (const [sid, r] of this.runners) {\n const st = r.getState()\n running.push({\n sessionId: sid,\n status: compressStatus(st.status),\n freshSpawn: st.freshSpawn,\n })\n }\n return { runningSessions: running }\n }\n\n stopAll(): void {\n // shutdown 时路径:走 deps.broadcastFrame(当前 collector 为 null),\n // runner 产的 emit-frame 会立即推给 transport\n for (const r of this.runners.values()) {\n r.input({ kind: 'command', command: { kind: 'stop' } })\n }\n }\n\n // 给 observer 用:拿已存在的 runner\n getActive(sessionId: string): SessionRunner | undefined {\n return this.runners.get(sessionId)\n }\n\n // 给 observer 用:保证有 runner 但不 spawn(仅创建 state 容器)\n ensureSession(file: SessionFile): SessionRunner {\n let r = this.runners.get(file.sessionId)\n if (r) return r\n r = this.newRunner(file)\n this.runners.set(file.sessionId, r)\n return r\n }\n\n // observer 把 stdout line 转发到指定 runner;单一 reducer 入口保证 seq 分配统一\n feedObserverLine(sessionId: string, line: string): void {\n const runner = this.runners.get(sessionId)\n if (!runner) return\n runner.feedStdoutLine(line)\n }\n\n // observer 喂入一行 JSONL 解析后的 ParsedEvent 数组(一帧的所有事件共享 top-level uuid)。\n //\n // 双层防护对齐 openclaw-plugin-clawos:\n // 1. 主防御:runner.procAlive 时直接丢弃——daemon 自己在 spawn CC 并消费 stdout,\n // observer 读 JSONL 100% 是重复内容(来自同一逻辑帧),从源头不让它进 reducer。\n // 2. 兜底:reducer 的 batch uuid dedup 处理 managed 刚 stop / 切换的窗口期事件。\n feedObserverEvents(sessionId: string, events: ParsedEvent[]): void {\n if (events.length === 0) return\n const runner = this.runners.get(sessionId)\n if (!runner) return\n if (runner.getState().procAlive) return\n runner.feedObserverEvents(events)\n }\n\n // 权限决定:dispatcher 收到 permission:respond 时调用\n // 先查 state.pendingPermissions:不存在 → 抛 PERMISSION_REQUEST_STALE\n respondPermission(args: {\n sessionId: string\n requestId: string\n allow: boolean\n permanent?: boolean\n pattern?: string\n message?: string\n }): ManagerResult {\n const runner = this.runners.get(args.sessionId)\n if (!runner) {\n throw new ClawdError(\n ERROR_CODES.PERMISSION_REQUEST_STALE,\n `no pending permission request: ${args.requestId}`,\n )\n }\n const pending = runner.getState().pendingPermissions[args.requestId]\n if (!pending) {\n throw new ClawdError(\n ERROR_CODES.PERMISSION_REQUEST_STALE,\n `no pending permission request: ${args.requestId}`,\n )\n }\n const { broadcast } = this.withCollector(() => {\n runner.input({\n kind: 'permission-decision',\n requestId: args.requestId,\n allow: args.allow,\n permanent: args.permanent,\n pattern: args.pattern,\n message: args.message,\n })\n })\n return { response: { ok: true }, broadcast }\n }\n}\n","import validate from './validate.js';\n\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\nconst byteToHex = [];\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\nexport function unsafeStringify(arr, offset = 0) {\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n //\n // Note to future-self: No, you can't remove the `toLowerCase()` call.\n // REF: https://github.com/uuidjs/uuid/pull/677#issuecomment-1757351351\n return (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase();\n}\nfunction stringify(arr, offset = 0) {\n const uuid = unsafeStringify(arr, offset);\n // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n return uuid;\n}\nexport default stringify;","import crypto from 'node:crypto';\nconst rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate\nlet poolPtr = rnds8Pool.length;\nexport default function rng() {\n if (poolPtr > rnds8Pool.length - 16) {\n crypto.randomFillSync(rnds8Pool);\n poolPtr = 0;\n }\n return rnds8Pool.slice(poolPtr, poolPtr += 16);\n}","import crypto from 'node:crypto';\nexport default {\n randomUUID: crypto.randomUUID\n};","import native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\nfunction v4(options, buf, offset) {\n if (native.randomUUID && !buf && !options) {\n return native.randomUUID();\n }\n options = options || {};\n const rnds = options.random || (options.rng || rng)();\n\n // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80;\n\n // Copy bytes to buffer, if provided\n if (buf) {\n offset = offset || 0;\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n return buf;\n }\n return unsafeStringify(rnds);\n}\nexport default v4;","import type { AllowRule } from '../protocol.js'\n\n// v1 简单 glob:* 匹配任意非空子串,其它按字面量\n// 例:pattern=\"git *\" 匹配 \"git status\"、\"git log -n 5\"\nfunction globToRegex(pattern: string): RegExp {\n const escaped = pattern\n .split('*')\n .map((seg) => seg.replace(/[-/\\\\^$+?.()|[\\]{}]/g, '\\\\$&'))\n .join('.*')\n return new RegExp('^' + escaped + '$')\n}\n\nexport function extractCommandFromInput(tool: string, input: unknown): string {\n if (typeof input === 'string') return input\n if (!input || typeof input !== 'object') return ''\n const obj = input as Record<string, unknown>\n // 常见的 Bash / Edit 等工具都带 command / cmd / query 字段\n for (const key of ['command', 'cmd', 'query', 'path', 'file_path']) {\n if (typeof obj[key] === 'string') return obj[key] as string\n }\n return ''\n}\n\nexport function matchesRule(\n rule: AllowRule,\n tool: string,\n input: unknown,\n): boolean {\n if (rule.tool !== tool) return false\n const target = extractCommandFromInput(tool, input)\n return globToRegex(rule.pattern).test(target)\n}\n\nexport function matchesAnyRule(\n rules: AllowRule[] | undefined,\n tool: string,\n input: unknown,\n): boolean {\n if (!rules || rules.length === 0) return false\n return rules.some((r) => matchesRule(r, tool, input))\n}\n\nexport function buildRule(tool: string, input: unknown): AllowRule {\n const cmd = extractCommandFromInput(tool, input) || '*'\n // 取第一个 token 做通配,例 \"git status -s\" → \"git *\"\n const firstToken = cmd.split(/\\s+/)[0]\n const pattern = firstToken ? `${firstToken} *` : '*'\n return { tool, pattern, createdAt: new Date().toISOString() }\n}\n","// Session reducer:纯函数 `reduceSession(state, input, deps) → {state, effects}`\n// 硬规则:\n// - 不读 Date.now()(用 deps.now())\n// - 不读 fs、不 spawn、不发 WS 帧\n// - 所有副作用以 Effect[] 数据结构表达\n// - 同一 (state, input, deps) 多次调用返回值必须 deep-equal\n//\n// 语义上等价于旧 Session(EventEmitter 版)+ PermissionManager 的联合行为,\n// 但状态统一收口到 SessionState,副作用由 runner 解释执行\n\nimport type {\n ParsedEvent,\n SessionFile,\n SessionMeta,\n AllowRule,\n SpawnContext,\n EventFrame,\n ContextUsage,\n} from '../protocol.js'\nimport { matchesAnyRule, buildRule } from '../permission/rules.js'\nimport type {\n Effect,\n EmitFrameTarget,\n PendingPermission,\n ReducerDeps,\n ReduceResult,\n SessionCommand,\n SessionInput,\n SessionState,\n} from './reducer-types.js'\n\n// -------------------- 工具函数 --------------------\n\n// 不可变更新:避免 reducer 误改入参\nfunction cloneState(s: SessionState): SessionState {\n return {\n file: s.file,\n status: s.status,\n buffer: s.buffer,\n nextSeq: s.nextSeq,\n bufferStartSeq: s.bufferStartSeq,\n turnOpen: s.turnOpen,\n pendingPermissions: s.pendingPermissions,\n freshSpawn: s.freshSpawn,\n procAlive: s.procAlive,\n seenUuids: s.seenUuids,\n }\n}\n\n// uuid 去重 ring buffer 容量;> 这个长度的 session 会丢掉最早的 uuid,\n// 极端场景下可能漏 dedup(但需要观察者在数千事件后仍然在重放老内容才会复现)\nconst SEEN_UUID_CAP = 2000\n\n/**\n * 一帧 events 的 batch 应用。CC 给同一逻辑帧在 stream-json stdout 和 JSONL 写相同\n * top-level uuid,parser 把它挂到帧拆出的所有 ParsedEvent 上。这里按 events[0].uuid\n * 整批 dedup(对齐 cc-direct cc-event-store 的做法):\n * - 已见过 → 整批跳过(observer 重放到 stdout 已经处理过的帧,常见)\n * - 没见过 → 全部应用 + 把 uuid 加入 seen\n *\n * 没有 uuid 的帧(旧 adapter / 测试 mock)不参与 dedup,照旧逐事件 apply。\n */\nfunction applyEventBatch(\n state: SessionState,\n events: ParsedEvent[],\n deps: ReducerDeps,\n): ReduceResult {\n if (events.length === 0) return { state, effects: [] }\n const frameUuid = (events[0] as { uuid?: string }).uuid\n if (frameUuid && state.seenUuids.includes(frameUuid)) {\n return { state, effects: [] }\n }\n let cur = state\n if (frameUuid) {\n const nextUuids = [...cur.seenUuids, frameUuid]\n const trimmed =\n nextUuids.length > SEEN_UUID_CAP\n ? nextUuids.slice(nextUuids.length - SEEN_UUID_CAP)\n : nextUuids\n cur = { ...cur, seenUuids: trimmed }\n }\n const allEffects: Effect[] = []\n for (const ev of events) {\n const r = applyParsedEvent(cur, ev, deps)\n cur = r.state\n allEffects.push(...r.effects)\n }\n return { state: cur, effects: allEffects }\n}\n\nfunction nowIso(deps: ReducerDeps): string {\n return new Date(deps.now()).toISOString()\n}\n\n// session 事件帧外推\nfunction emitSessionEvent(\n sessionId: string,\n event: ParsedEvent,\n target?: EmitFrameTarget,\n): Effect {\n const frame: EventFrame = {\n type: 'session:event',\n sessionId,\n event,\n }\n return target ? { kind: 'emit-frame', frame, target } : { kind: 'emit-frame', frame }\n}\n\nfunction buildSpawnContext(file: SessionFile): SpawnContext {\n return {\n cwd: file.cwd,\n toolSessionId: file.toolSessionId,\n model: file.model,\n permissionMode: file.permissionMode,\n effort: file.effort,\n }\n}\n\n// session:info 帧(wire 协议里 UI 订阅此帧更新 SessionFile 快照)\n// 等价于旧 index.ts 的 onFileUpdated(file) → broadcast 'session:info' ...file\nfunction sessionInfoFrame(file: SessionFile): Effect {\n const frame: EventFrame = { type: 'session:info', ...file } as EventFrame\n return { kind: 'emit-frame', frame }\n}\n\n// 比较两个 ContextUsage:闭合 4 字段值相等;缺省字段视为 undefined(也算相等)\nfunction eqContextUsage(a: ContextUsage | undefined, b: ContextUsage | undefined): boolean {\n if (a === b) return true\n if (!a || !b) return false\n return (\n a.inputTokens === b.inputTokens &&\n a.outputTokens === b.outputTokens &&\n a.cacheReadTokens === b.cacheReadTokens &&\n a.cacheCreateTokens === b.cacheCreateTokens\n )\n}\n\n// 浅比较 SessionMeta 子字段:用于 meta_update 幂等检查\nfunction shallowEqMeta(a: SessionMeta, b: SessionMeta): boolean {\n return (\n a.gitBranch === b.gitBranch &&\n a.resolvedModel === b.resolvedModel &&\n a.contextWindowSize === b.contextWindowSize &&\n eqContextUsage(a.contextUsage, b.contextUsage)\n )\n}\n\n// meta_update 唯一处理路径:patch merge → 派生 contextWindowSize → diff → persist + session:info\n// 不入 ring buffer、不发 session:event 帧、不影响 turnOpen\nfunction applyMetaUpdate(\n state: SessionState,\n patch: Partial<SessionMeta>,\n deps: ReducerDeps,\n): ReduceResult {\n const next = cloneState(state)\n const merged: SessionFile = { ...next.file, ...patch }\n // resolvedModel 变化 → 重新派生 contextWindowSize(adapter 决定具体策略)\n if (patch.resolvedModel !== undefined) {\n const w = deps.resolveContextWindow?.(next.file.tool, patch.resolvedModel)\n if (w !== undefined) merged.contextWindowSize = w\n }\n if (shallowEqMeta(next.file, merged)) {\n return { state: next, effects: [] }\n }\n next.file = { ...merged, updatedAt: nowIso(deps) }\n return {\n state: next,\n effects: [\n { kind: 'persist-file', file: next.file },\n sessionInfoFrame(next.file),\n ],\n }\n}\n\n// 权限 approve / deny stdin frame 编码,对齐 CC 的 SDKControlResponseSchema + PermissionPromptToolResultSchema:\n// { type:\"control_response\", response:{ subtype:\"success\", request_id, response:{ behavior, ... } } }\n// allow 携带 `updatedInput`(= 原始 tool input);CC 的 permissionPromptToolResultToPermissionDecision 在\n// updatedInput 为 `{}` 时会视作\"保持原始 input 不变\"。deny 走 `{behavior:\"deny\", message}`。\n// 参考 cc-direct openclaw-plugin-clawos/src/claude-code/session.ts respondPermission\nfunction encodePermissionResponse(\n requestId: string,\n approved: boolean,\n input: unknown,\n message?: string,\n): string {\n const innerResponse: Record<string, unknown> = approved\n ? {\n behavior: 'allow',\n updatedInput:\n input && typeof input === 'object' && !Array.isArray(input)\n ? (input as Record<string, unknown>)\n : {},\n }\n : { behavior: 'deny', message: message ?? 'Denied by user' }\n const payload = {\n type: 'control_response',\n response: {\n subtype: 'success',\n request_id: requestId,\n response: innerResponse,\n },\n }\n return JSON.stringify(payload) + '\\n'\n}\n\n// -------------------- parsed event 子 reducer --------------------\n\n// 把一个 ParsedEvent 应用到 state;返回新 state 和产生的 effects。\n// 注意:uuid 跨路径去重在 reduceSession 的 batch 入口(stdout-line / inject-events)做,\n// 不在这里——同一帧拆出的多个事件共享原生 uuid,逐事件 dedup 会误丢同帧第 2..N 个事件。\nfunction applyParsedEvent(\n state: SessionState,\n event: ParsedEvent,\n deps: ReducerDeps,\n): ReduceResult {\n let next = cloneState(state)\n const effects: Effect[] = []\n const sessionId = next.file.sessionId\n\n // permission_request:先查规则,命中 → auto-allow + stdin,否则注册 pending + 通知 UI\n if (event.kind === 'permission_request') {\n const tool = event.tool\n const input = event.input\n const requestId = event.requestId\n const hit = matchesAnyRule(next.file.permissionRules, tool, input)\n\n // 不管 auto-allow 还是 pending,buffer 里都要 push 这个事件并外推 session:event\n // (和旧 Session.handleParsed 语义一致)\n const pushed = pushEventToBuffer(next, event, deps)\n next = pushed.state\n effects.push(...pushed.effects)\n\n if (hit) {\n // auto-allow:直接写 stdin approve,不注册 pending,不外推 permission:request\n effects.push({\n kind: 'write-stdin',\n payload: encodePermissionResponse(requestId, true, input),\n })\n } else {\n // 未命中:注册 pending + 外推 permission:request 给 first-subscriber(UI)\n const pending: PendingPermission = {\n tool,\n input,\n createdAt: deps.now(),\n }\n next.pendingPermissions = { ...next.pendingPermissions, [requestId]: pending }\n effects.push({\n kind: 'emit-frame',\n frame: {\n type: 'permission:request',\n sessionId,\n requestId,\n tool,\n input,\n },\n target: 'first-subscriber',\n })\n }\n return { state: next, effects }\n }\n\n // session_init:仅更新 toolSessionId(其它元信息走 meta_update)\n if (event.kind === 'session_init') {\n if (event.toolSessionId && event.toolSessionId !== next.file.toolSessionId) {\n next.file = {\n ...next.file,\n toolSessionId: event.toolSessionId,\n updatedAt: nowIso(deps),\n }\n effects.push({ kind: 'persist-file', file: next.file })\n effects.push(sessionInfoFrame(next.file))\n }\n const pushed = pushEventToBuffer(next, event, deps)\n next = pushed.state\n effects.push(...pushed.effects)\n return { state: next, effects }\n }\n\n // meta_update:状态投影通道,patch merge + diff + persist + session:info\n // 不入 ring buffer / 不发 session:event / 不影响 turnOpen\n if (event.kind === 'meta_update') {\n return applyMetaUpdate(next, event.patch, deps)\n }\n\n // tool_call:补 toolKind = session.tool,UI 按 {toolKind, tool} 分派 renderer\n if (event.kind === 'tool_call' && !event.toolKind) {\n const enriched: ParsedEvent = { ...event, toolKind: next.file.tool }\n const pushed = pushEventToBuffer(next, enriched, deps)\n return { state: pushed.state, effects: pushed.effects }\n }\n\n // 其它 kind(text / thinking / tool_result / turn_end / error):纯 push\n const pushed = pushEventToBuffer(next, event, deps)\n return { state: pushed.state, effects: pushed.effects }\n}\n\n// push 事件到 ring buffer + 分配 seq + 外推 session:event;turn_end 翻转 turnOpen + trim\nfunction pushEventToBuffer(\n state: SessionState,\n event: ParsedEvent,\n deps: ReducerDeps,\n): ReduceResult {\n const next = cloneState(state)\n const seq = next.nextSeq\n const withSeq: ParsedEvent = { ...event, seq }\n const entry = { seq, event: withSeq }\n const newBuffer = [...next.buffer, entry]\n next.buffer = newBuffer\n next.nextSeq = seq + 1\n if (newBuffer.length === 1) next.bufferStartSeq = seq\n\n // turn 状态翻转:旧 Session 语义是 \"turn_end 置 false;其它 event 且当前 false → true\"\n const isTurnEnd = withSeq.kind === 'turn_end'\n if (isTurnEnd) next.turnOpen = false\n else if (!next.turnOpen) next.turnOpen = true\n\n // trim 只在 turnOpen=false(即 turn 结束后)触发\n if (!next.turnOpen && next.buffer.length > deps.bufferCap) {\n const remove = next.buffer.length - deps.bufferCap\n const trimmed = next.buffer.slice(remove)\n next.buffer = trimmed\n next.bufferStartSeq = trimmed[0]?.seq ?? seq\n }\n\n // 首事件后 freshSpawn 转 false\n if (next.freshSpawn) next.freshSpawn = false\n\n return {\n state: next,\n effects: [emitSessionEvent(next.file.sessionId, withSeq)],\n }\n}\n\n// -------------------- command 子 reducer --------------------\n\n// 标记需要重启的 patch keys(和旧 manager.update 的 RUNTIME_PATCH_KEYS 一致)\nconst RUNTIME_PATCH_KEYS: Array<keyof SessionFile> = [\n 'model',\n 'permissionMode',\n 'effort',\n 'cwd',\n]\n\nfunction applyCommand(\n state: SessionState,\n command: SessionCommand,\n deps: ReducerDeps,\n): ReduceResult {\n const next = cloneState(state)\n const effects: Effect[] = []\n const sessionId = next.file.sessionId\n\n switch (command.kind) {\n case 'send': {\n if (!next.procAlive) {\n // spawn:重置 buffer / seq / turnOpen / freshSpawn\n next.procAlive = true\n next.freshSpawn = true\n next.buffer = []\n next.bufferStartSeq = 0\n next.nextSeq = 0\n next.turnOpen = false\n next.status = 'running'\n effects.push({ kind: 'spawn', ctx: buildSpawnContext(next.file) })\n // 主动告诉订阅方\"CC 活了\"—— UI 据此显示进程存活指示器 / 开放 interrupt + force stop 入口。\n // proc-exit 时已经 emit 'stopped';不补这条 'running' 的话 UI 无从区分\"未启动\"和\"已启动\"\n effects.push({\n kind: 'emit-frame',\n frame: {\n type: 'session:status',\n sessionId,\n status: 'running',\n },\n })\n }\n // 对齐 cc-direct:daemon 自己 synthesize user_text 进 buffer,不靠 CC 的\n // --replay-user-messages 回显(CC 回显时机不可靠,会在 assistant 之后才出来 → 顺序反掉)。\n // 必须早于 write-stdin,保证 UI 看到的 session:event 顺序是\"先 user 后 assistant\"。\n const userEvent: ParsedEvent = {\n kind: 'user_text',\n text: command.text,\n uuid: deps.genUuid?.(),\n }\n const pushed = pushEventToBuffer(next, userEvent, deps)\n const nextState = pushed.state\n effects.push(...pushed.effects)\n const payload = deps.encodeStdin(command.text, { sessionId })\n effects.push({ kind: 'write-stdin', payload })\n return { state: nextState, effects }\n }\n\n case 'stop': {\n // 清 pending(等价于旧 PermissionManager.clearSession)\n next.pendingPermissions = {}\n if (next.procAlive) {\n next.status = 'stopping'\n effects.push({ kind: 'kill', signal: 'SIGTERM', graceMs: 5000 })\n }\n return { state: next, effects }\n }\n\n case 'spawn-if-needed': {\n // 复用 send 分支的 spawn 子集(reset buffer + emit running),但不写任何 stdin。\n // rewind 等 RPC 场景用:需要 CC 进程在跑才能收 control_request,但不该让用户被迫先\n // 发一条 prompt。已活则彻底 no-op\n if (next.procAlive) {\n return { state: next, effects: [] }\n }\n next.procAlive = true\n next.freshSpawn = true\n next.buffer = []\n next.bufferStartSeq = 0\n next.nextSeq = 0\n next.turnOpen = false\n next.status = 'running'\n effects.push({ kind: 'spawn', ctx: buildSpawnContext(next.file) })\n effects.push({\n kind: 'emit-frame',\n frame: { type: 'session:status', sessionId, status: 'running' },\n })\n return { state: next, effects }\n }\n\n case 'delete': {\n next.pendingPermissions = {}\n if (next.procAlive) {\n effects.push({ kind: 'kill', signal: 'SIGTERM', graceMs: 5000 })\n }\n effects.push({ kind: 'delete-file' })\n effects.push({\n kind: 'emit-frame',\n frame: { type: 'session:deleted', sessionId },\n })\n return { state: next, effects }\n }\n\n case 'update': {\n const patch = command.patch\n const runtimePatch = RUNTIME_PATCH_KEYS.some(\n (k) => (patch as Record<string, unknown>)[k] !== undefined,\n )\n next.file = { ...next.file, ...patch, updatedAt: nowIso(deps) }\n effects.push({ kind: 'persist-file', file: next.file })\n // 有活跃 runner 时:等价于 legacy session.updateFile(updated) → onFileUpdated → broadcast session:info\n effects.push(sessionInfoFrame(next.file))\n if (runtimePatch && next.procAlive) {\n effects.push({ kind: 'kill', signal: 'SIGTERM', graceMs: 5000 })\n }\n return { state: next, effects }\n }\n\n case 'resume': {\n const nextFile: SessionFile = {\n ...next.file,\n toolSessionId: command.toolSessionId,\n updatedAt: nowIso(deps),\n }\n next.file = nextFile\n effects.push({ kind: 'persist-file', file: nextFile })\n effects.push(sessionInfoFrame(nextFile))\n if (next.procAlive) {\n effects.push({ kind: 'kill', signal: 'SIGTERM', graceMs: 5000 })\n }\n return { state: next, effects }\n }\n\n case 'new': {\n // 清 toolSessionId 和所有归属旧 tool session 的 meta(contextUsage / contextWindowSize /\n // gitBranch / resolvedModel),kill 当前 proc,persist。\n // 关键:同时把 runner 的 transient state(buffer / seq / pending permissions / uuid 去重环 /\n // turnOpen / freshSpawn)全部重置,否则 UI 在收到 session:info 后 re-fetch session:events\n // 会把旧 buffer 再拉回来,看起来像\"clear 后消息还在\"。\n const {\n toolSessionId: _drop,\n contextUsage: _ctx,\n contextWindowSize: _win,\n gitBranch: _branch,\n resolvedModel: _model,\n ...rest\n } = next.file\n void _drop\n void _ctx\n void _win\n void _branch\n void _model\n const nextFile: SessionFile = { ...rest, updatedAt: nowIso(deps) }\n next.file = nextFile\n next.buffer = []\n next.nextSeq = 0\n next.bufferStartSeq = 0\n next.turnOpen = false\n next.pendingPermissions = {}\n next.freshSpawn = false\n next.seenUuids = []\n effects.push({ kind: 'persist-file', file: nextFile })\n effects.push(sessionInfoFrame(nextFile))\n if (next.procAlive) {\n effects.push({ kind: 'kill', signal: 'SIGTERM', graceMs: 5000 })\n }\n return { state: next, effects }\n }\n\n case 'observe': {\n // observe 不属于 session 子进程状态机:observer 子系统由 manager 直接驱动\n // reducer 不响应(state / effects 均为原样)\n // TODO(P2.5+):切换时 manager 需要把 observe 路径直接接到 observer 子系统,\n // 不走 reducer\n return { state: next, effects: [] }\n }\n\n default:\n // 穷尽检查\n assertNever(command)\n }\n}\n\nfunction assertNever(x: never): never {\n throw new Error(`unexpected command: ${JSON.stringify(x)}`)\n}\n\n// -------------------- 顶层 reducer --------------------\n\nexport function reduceSession(\n state: SessionState,\n input: SessionInput,\n deps: ReducerDeps,\n): ReduceResult {\n switch (input.kind) {\n case 'stdout-line': {\n const events = deps.parseLine(input.line)\n return applyEventBatch(state, events, deps)\n }\n\n case 'inject-events': {\n // observer 把已解析的整帧 events 一次性喂入;走和 stdout-line 同一份 batch dedup\n return applyEventBatch(state, input.events, deps)\n }\n\n case 'proc-exit': {\n const next = cloneState(state)\n next.procAlive = false\n next.status = 'stopped'\n return {\n state: next,\n effects: [\n {\n kind: 'emit-frame',\n frame: {\n type: 'session:status',\n sessionId: next.file.sessionId,\n status: next.status,\n exitCode: input.code,\n },\n },\n ],\n }\n }\n\n case 'proc-error': {\n const next = cloneState(state)\n next.status = 'error'\n return {\n state: next,\n effects: [\n {\n kind: 'emit-frame',\n frame: {\n type: 'session:status',\n sessionId: next.file.sessionId,\n status: next.status,\n message: input.message,\n },\n },\n ],\n }\n }\n\n case 'command':\n return applyCommand(state, input.command, deps)\n\n case 'permission-decision': {\n const pending = state.pendingPermissions[input.requestId]\n if (!pending) {\n // orphan:幂等忽略(旧 PermissionManager.respond 会抛 PERMISSION_REQUEST_STALE,\n // 但反 reducer 语义——这里保持纯函数,不抛;manager/dispatcher 可以在外层抛)\n return { state, effects: [] }\n }\n const next = cloneState(state)\n // 删掉 pending(无论 allow/deny 都要清)\n const nextPending = { ...next.pendingPermissions }\n delete nextPending[input.requestId]\n next.pendingPermissions = nextPending\n\n const effects: Effect[] = [\n {\n kind: 'write-stdin',\n payload: encodePermissionResponse(\n input.requestId,\n input.allow,\n pending.input,\n input.message,\n ),\n },\n ]\n\n // permanent=true 且 allow → 追加规则(如果未重复)\n if (input.allow && input.permanent) {\n const tool = pending.tool\n const ipt = pending.input\n if (!matchesAnyRule(next.file.permissionRules, tool, ipt)) {\n const newRule: AllowRule = input.pattern\n ? { tool, pattern: input.pattern, createdAt: nowIso(deps) }\n : buildRule(tool, ipt)\n next.file = {\n ...next.file,\n permissionRules: [...(next.file.permissionRules ?? []), newRule],\n updatedAt: nowIso(deps),\n }\n effects.push({ kind: 'persist-file', file: next.file })\n effects.push(sessionInfoFrame(next.file))\n }\n }\n return { state: next, effects }\n }\n\n case 'tick': {\n // 清理 >10 min 的 pending;v1 若不想通知 UI 则只改 state,不产 frame\n const staleMs = 10 * 60 * 1000\n const now = input.nowMs\n const keep: Record<string, PendingPermission> = {}\n let removed = 0\n for (const [rid, p] of Object.entries(state.pendingPermissions)) {\n if (now - p.createdAt > staleMs) {\n removed++\n continue\n }\n keep[rid] = p\n }\n if (removed === 0) return { state, effects: [] }\n const next = cloneState(state)\n next.pendingPermissions = keep\n return { state: next, effects: [] }\n }\n\n default:\n assertNever(input)\n }\n}\n","// SessionRunner:解释执行 reducer 产出的 Effect[]\n// 持有 ChildProcess ref 和当前 SessionState;把 IO 副作用(spawn / kill / stdin / fs / WS)\n// 翻译成真实系统调用。所有业务语义都在 reducer 里,runner 只是\"翻译器\"\n\nimport type { ChildProcess } from 'node:child_process'\nimport { v4 as uuidv4 } from 'uuid'\nimport { reduceSession } from './reducer.js'\nimport type {\n Effect,\n EmitFrameTarget,\n ReducerDeps,\n SessionInput,\n SessionState,\n} from './reducer-types.js'\nimport type { EventFrame, ParsedEvent, SpawnContext } from '../protocol.js'\nimport type { ToolAdapter } from '../tools/types.js'\nimport type { SessionStore } from './store.js'\nimport type { Logger } from '../logger.js'\n\nexport interface RunnerHooks {\n // 由外层(manager)注入:把 frame 广播给订阅该 session 的 client\n broadcastFrame: (frame: EventFrame, target: EmitFrameTarget) => void\n store: SessionStore\n adapter: ToolAdapter\n logger?: Logger\n // 测试注入:替换真实 adapter.spawn 返回的 ChildProcess\n spawnOverride?: (ctx: SpawnContext) => ChildProcess\n // 测试注入:固定时钟\n now?: () => number\n // Ring buffer 容量(默认 500)\n bufferCap?: number\n // 由 modelId 派生 contextWindowSize;manager 注入 adapter.resolveContextWindow 的 thin wrapper\n resolveContextWindow?: (tool: string, modelId: string | undefined) => number | undefined\n // 测试注入:替换默认的 uuid v4 生成器(reducer 'send' 给 synthesized user_text 用)\n genUuid?: () => string\n}\n\n// 一笔\"已写 stdin 等 CC 回 control_response\"的异步请求。通过 pendingControlRequests 管理,\n// runner 解析 stdout 时命中 request_id 就 resolve;session 进程退出 / 超时则 reject\ninterface PendingControlRequest {\n resolve: (response: unknown) => void\n reject: (err: Error) => void\n timer: NodeJS.Timeout\n}\n\n// 默认 control_request 等待 response 的超时;10 秒是 CC IPC interrupt / rewind_files 典型范围\nconst DEFAULT_CONTROL_REQUEST_TIMEOUT_MS = 10_000\n\nexport class SessionRunner {\n private state: SessionState\n private proc: ChildProcess | null = null\n private stdoutBuf = ''\n // 未决 control_request 表;key = request_id\n private pendingControlRequests = new Map<string, PendingControlRequest>()\n\n constructor(initial: SessionState, private readonly hooks: RunnerHooks) {\n this.state = initial\n }\n\n getState(): SessionState {\n return this.state\n }\n\n // 外部推送 input 到 reducer,然后执行产出的 effects\n input(inputMsg: SessionInput): void {\n const deps: ReducerDeps = {\n parseLine: (l) => this.hooks.adapter.parseLine(l),\n encodeStdin: (t, ctx) => this.hooks.adapter.encodeStdin(t, ctx) ?? '',\n bufferCap: this.hooks.bufferCap ?? 500,\n now: this.hooks.now ?? Date.now,\n resolveContextWindow: this.hooks.resolveContextWindow,\n genUuid: this.hooks.genUuid ?? uuidv4,\n }\n const { state, effects } = reduceSession(this.state, inputMsg, deps)\n this.state = state\n for (const e of effects) this.applyEffect(e)\n }\n\n // 观察者 / 测试直接喂单行 stdout 进 reducer:保证 seq 分配走统一路径\n // 等价于往内部 stdout line buffer 里写完整一行\n feedStdoutLine(line: string): void {\n this.input({ kind: 'stdout-line', line })\n }\n\n // 观察者喂一帧(一行 JSONL 解析后的所有 ParsedEvent)。共享原生 uuid,\n // reducer 的 batch dedup 按 events[0].uuid 整组处理,避免跨路径重复。\n feedObserverEvents(events: ParsedEvent[]): void {\n if (events.length === 0) return\n this.input({ kind: 'inject-events', events })\n }\n\n // 向子进程 stdin 写一条 CC IPC `control_request` 并返回 Promise<response>\n // —— CC 侧会异步回写匹配 request_id 的 `control_response` 帧,\n // 在 stdout 行处理入口被 tryHandleControlResponse 拦截并 resolve pending\n sendControlRequest(\n subtype: string,\n extraRequestFields: Record<string, unknown> = {},\n opts: { timeoutMs?: number } = {},\n ): Promise<unknown> {\n const proc = this.proc\n if (!proc || !this.state.procAlive) {\n return Promise.reject(new Error('session not running'))\n }\n const requestId = (this.hooks.genUuid ?? uuidv4)()\n const frame = {\n type: 'control_request',\n request_id: requestId,\n request: { subtype, ...extraRequestFields },\n }\n const payload = JSON.stringify(frame) + '\\n'\n const timeoutMs = opts.timeoutMs ?? DEFAULT_CONTROL_REQUEST_TIMEOUT_MS\n\n return new Promise<unknown>((resolve, reject) => {\n const timer = setTimeout(() => {\n const pending = this.pendingControlRequests.get(requestId)\n if (!pending) return\n this.pendingControlRequests.delete(requestId)\n reject(new Error(`control_request timeout: ${subtype}`))\n }, timeoutMs)\n // unref 让超时定时器不阻塞 daemon 退出\n timer.unref?.()\n this.pendingControlRequests.set(requestId, { resolve, reject, timer })\n try {\n proc.stdin?.write(payload)\n } catch (err) {\n clearTimeout(timer)\n this.pendingControlRequests.delete(requestId)\n reject(err instanceof Error ? err : new Error(String(err)))\n }\n })\n }\n\n // 尝试把一行 stdout 解析成 `type:\"control_response\"` 帧并 resolve 匹配的 pending。\n // 命中返回 true —— 调用方不再把该行喂给 reducer(control_response 不是会话事件)。\n private tryHandleControlResponse(line: string): boolean {\n if (!line.includes('\"control_response\"')) return false\n let obj: unknown\n try {\n obj = JSON.parse(line)\n } catch {\n return false\n }\n const r = obj as {\n type?: string\n response?: {\n subtype?: string\n request_id?: string\n response?: unknown\n error?: string\n }\n }\n if (r.type !== 'control_response') return false\n const inner = r.response\n const requestId = inner?.request_id\n if (typeof requestId !== 'string') return false\n const pending = this.pendingControlRequests.get(requestId)\n if (!pending) return false\n this.pendingControlRequests.delete(requestId)\n clearTimeout(pending.timer)\n if (inner?.subtype === 'error') {\n pending.reject(new Error(inner.error ?? 'control_request error'))\n } else {\n pending.resolve(inner?.response ?? {})\n }\n return true\n }\n\n // 统一清理所有 pending control_requests(子进程退出 / session delete)\n private rejectAllPending(err: Error): void {\n for (const [, p] of this.pendingControlRequests) {\n clearTimeout(p.timer)\n try {\n p.reject(err)\n } catch {\n // ignore\n }\n }\n this.pendingControlRequests.clear()\n }\n\n // 执行单个 effect。每种 effect 对应一次具体副作用,不跨种类组合\n private applyEffect(effect: Effect): void {\n switch (effect.kind) {\n case 'spawn':\n this.doSpawn(effect.ctx)\n break\n case 'kill':\n this.doKill(effect.signal, effect.graceMs)\n break\n case 'write-stdin':\n this.proc?.stdin?.write(effect.payload)\n break\n case 'persist-file':\n try {\n this.hooks.store.write(effect.file)\n } catch (err) {\n this.hooks.logger?.error('persist-file failed', { err: (err as Error).message })\n }\n break\n case 'delete-file':\n try {\n this.hooks.store.delete(this.state.file.sessionId)\n } catch (err) {\n this.hooks.logger?.warn('delete-file failed', { err: (err as Error).message })\n }\n break\n case 'emit-frame':\n this.hooks.broadcastFrame(effect.frame, effect.target ?? 'broadcast')\n break\n case 'schedule-tick': {\n const now = this.hooks.now ?? Date.now\n setTimeout(() => this.input({ kind: 'tick', nowMs: now() }), effect.delayMs).unref()\n break\n }\n }\n }\n\n // 启动子进程,绑定 stdout line buffer → 回灌 reducer\n private doSpawn(ctx: SpawnContext): void {\n const proc = this.hooks.spawnOverride\n ? this.hooks.spawnOverride(ctx)\n : this.hooks.adapter.spawn(ctx)\n this.proc = proc\n this.stdoutBuf = ''\n\n proc.stdout?.on('data', (chunk: Buffer | string) => {\n this.stdoutBuf += typeof chunk === 'string' ? chunk : chunk.toString('utf8')\n let idx: number\n while ((idx = this.stdoutBuf.indexOf('\\n')) >= 0) {\n const line = this.stdoutBuf.slice(0, idx)\n this.stdoutBuf = this.stdoutBuf.slice(idx + 1)\n // CC 的 control_response 是 RPC 回包而非会话事件;拦截后不入 reducer\n if (this.tryHandleControlResponse(line)) continue\n this.input({ kind: 'stdout-line', line })\n }\n })\n\n proc.stderr?.on('data', (chunk: Buffer | string) => {\n const text = typeof chunk === 'string' ? chunk : chunk.toString('utf8')\n this.hooks.logger?.warn('tool stderr', { line: text.slice(0, 500) })\n })\n\n proc.on('exit', (code) => {\n this.proc = null\n // 子进程走人后,任何仍在等 CC 回 control_response 的 promise 都要 reject,避免泄漏\n this.rejectAllPending(new Error('session gone'))\n this.input({ kind: 'proc-exit', code })\n })\n\n proc.on('error', (err) => {\n this.input({ kind: 'proc-error', message: (err as Error).message })\n })\n }\n\n // kill 当前 proc,graceMs 后强杀\n private doKill(signal: NodeJS.Signals, graceMs?: number): void {\n if (!this.proc) return\n const p = this.proc\n try {\n p.kill(signal)\n } catch {\n // 进程可能已退出;忽略\n }\n if (graceMs && graceMs > 0) {\n setTimeout(() => {\n try {\n p.kill('SIGKILL')\n } catch {\n // ignore\n }\n }, graceMs).unref()\n }\n }\n}\n","import { spawn, type ChildProcess } from 'node:child_process'\nimport { execFileSync } from 'node:child_process'\nimport fs from 'node:fs'\nimport os from 'node:os'\nimport path from 'node:path'\nimport type {\n ParsedEvent,\n SpawnContext,\n EncodeContext,\n ContextUsage,\n ToolResultExtra,\n Usage,\n} from '../protocol.js'\nimport type { Logger } from '../logger.js'\nimport type { HistoryReader, ProbeResult, ToolAdapter, ToolCapabilities } from './types.js'\nimport { classifyUserMessage } from './claude-history.js'\n\nexport interface ClaudeAdapterOptions {\n logger?: Logger\n historyReader?: HistoryReader\n // 测试/注入:自定义 probe 查找策略\n probeOverride?: () => Promise<ProbeResult>\n}\n\n// macOS 下 Claude Desktop 会把 CLI 安装到 app bundle 内部\nfunction macOSDesktopCandidates(home: string): string[] {\n return [\n path.join(home, 'Applications', 'Claude.app', 'Contents', 'Resources', 'app.asar.unpacked', 'node_modules', '@anthropic-ai', 'claude-code', 'cli.js'),\n '/Applications/Claude.app/Contents/Resources/app.asar.unpacked/node_modules/@anthropic-ai/claude-code/cli.js',\n ]\n}\n\nfunction probeViaWhich(): string | null {\n try {\n const out = execFileSync('which', ['claude'], { encoding: 'utf8' }).trim()\n if (out && fs.existsSync(out)) return out\n } catch {\n // which 不存在或找不到命令\n }\n return null\n}\n\nexport async function probeClaude(env: NodeJS.ProcessEnv = process.env, home: string = os.homedir()): Promise<ProbeResult> {\n // 1. 显式环境变量\n if (env.CLAUDE_BIN && fs.existsSync(env.CLAUDE_BIN)) {\n return { available: true, path: env.CLAUDE_BIN }\n }\n // 2. which claude\n const w = probeViaWhich()\n if (w) return { available: true, path: w }\n // 3. macOS Claude Desktop 兜底\n if (process.platform === 'darwin') {\n for (const candidate of macOSDesktopCandidates(home)) {\n if (fs.existsSync(candidate)) {\n return { available: true, path: candidate }\n }\n }\n }\n return { available: false }\n}\n\nfunction buildSpawnArgs(ctx: SpawnContext): string[] {\n const args = [\n '--print',\n '--output-format', 'stream-json',\n '--input-format', 'stream-json',\n // typewriter 流式:CC 会发 stream_event content_block_delta(text_delta/thinking_delta)\n // 让 UI 累积渲染;assistant 整段帧仍然到达,UI 用 partialId 去重 / 覆盖\n '--include-partial-messages',\n // 不用 --replay-user-messages:CC 回显时机不可靠(实测会在 assistant 响应之后才回放\n // user 帧,导致 UI 看到的事件顺序是\"先 assistant 后 user\"——气泡顺序反掉)。\n // 改成 daemon 在 reducer 'send' 命令里自己 synthesize user_text 事件,顺序由我们控制\n '--permission-prompt-tool', 'stdio',\n '--verbose',\n ]\n if (ctx.model) args.push('--model', ctx.model)\n if (ctx.permissionMode) args.push('--permission-mode', ctx.permissionMode)\n if (ctx.effort) args.push('--effort', ctx.effort)\n // CC CLI 的 --resume 接收 claude session uuid;daemon 层字段名已归一化为 toolSessionId\n if (ctx.toolSessionId) args.push('--resume', ctx.toolSessionId)\n return args\n}\n\nexport function parseClaudeLine(line: string): ParsedEvent[] {\n const trimmed = line.trim()\n if (!trimmed) return []\n let obj: Record<string, unknown>\n try {\n obj = JSON.parse(trimmed)\n } catch {\n return []\n }\n return parseClaudeObject(obj)\n}\n\n// 把 wire snake_case usage 归一化为 ContextUsage camelCase;缺字段补 0\n// JSONL message.usage 还可能带 cache_creation 嵌套对象等额外字段,统一只取需要的 4 项\nexport function normalizeUsage(raw: Record<string, unknown> | Usage | undefined): ContextUsage | undefined {\n if (!raw || typeof raw !== 'object') return undefined\n const r = raw as Record<string, number | undefined>\n return {\n inputTokens: Number(r.input_tokens ?? 0),\n outputTokens: Number(r.output_tokens ?? 0),\n cacheReadTokens: Number(r.cache_read_input_tokens ?? 0),\n cacheCreateTokens: Number(r.cache_creation_input_tokens ?? 0),\n }\n}\n\nfunction parseClaudeObject(obj: Record<string, unknown>): ParsedEvent[] {\n // CC 在 Agent / Task tool 执行 sub-agent 时,子 agent 的 stream-json 帧带 isSidechain=true\n // 也混在主 stdout。这些帧不属于主会话:\n // - text / thinking / tool_use / tool_result 归属子 agent,不该污染主 UI 事件流\n // - message.usage / message.model 会错误覆盖主 session 的 contextUsage / resolvedModel,\n // 导致 ctx% 跳变(子 agent 可能跑 Opus 1M,主会话用 Haiku 200K 时尤其明显)\n // 整帧丢弃,子 agent 对话由 SubagentDrawer 按需从独立 jsonl 读取。\n if (obj.isSidechain === true) return []\n const events = parseClaudeObjectInner(obj)\n // CC 给同一逻辑帧在 stream-json stdout 和 JSONL 都写相同 top-level uuid,\n // 同一帧拆出的多个 ParsedEvent 共享这个原生 uuid(对齐 cc-direct cc-event-store)。\n // reducer 在 batch 入口(stdout-line / inject-events)按 events[0].uuid 整批 dedup,\n // 不在 applyParsedEvent 里逐事件 dedup(否则同帧第二个事件会被误丢)\n const uuid = obj.uuid\n if (typeof uuid === 'string' && uuid.length > 0) {\n return events.map((e) => ({ ...e, uuid }))\n }\n return events\n}\n\nfunction parseClaudeObjectInner(obj: Record<string, unknown>): ParsedEvent[] {\n const type = obj.type as string | undefined\n const subtype = obj.subtype as string | undefined\n const events: ParsedEvent[] = []\n\n // 元信息抽取(与帧 type 无关):JSONL 几乎所有行顶层都有 gitBranch\n // stream-json 的 system.init / assistant / result 帧可能也带,但 CC 实际只在 JSONL 写\n const branch = obj.gitBranch\n if (typeof branch === 'string' && branch.length > 0) {\n events.push({ kind: 'meta_update', patch: { gitBranch: branch } })\n }\n\n // system.init (stream-json) → session_init + meta_update.resolvedModel\n if (type === 'system' && subtype === 'init') {\n const sid = obj.session_id as string | undefined\n const model = obj.model as string | undefined\n const init: ParsedEvent = { kind: 'session_init' }\n if (sid) init.toolSessionId = sid\n events.push(init)\n if (model) {\n events.push({ kind: 'meta_update', patch: { resolvedModel: model } })\n }\n return events\n }\n\n // assistant message\n // - stream-json:仅含 message.content(渲染流)\n // - JSONL assistant 行:额外含 message.model / message.usage / 顶层 gitBranch(meta 流)\n if (type === 'assistant') {\n const message = obj.message as Record<string, unknown> | undefined\n\n // message-level meta(model + usage)→ meta_update\n if (message) {\n const mModel = message.model\n if (typeof mModel === 'string' && mModel.length > 0) {\n events.push({ kind: 'meta_update', patch: { resolvedModel: mModel } })\n }\n const mUsage = message.usage\n if (mUsage && typeof mUsage === 'object') {\n const usage = normalizeUsage(mUsage as Record<string, unknown>)\n if (usage) events.push({ kind: 'meta_update', patch: { contextUsage: usage } })\n }\n }\n\n // 渲染流:message.content。text/thinking 仍发整段快照(不带 partialId),\n // 与 stream_event 增量(带 partialId)配对:UI 看到无 partialId 的 text/thinking 就替换累积块\n const content = (message?.content ?? []) as Array<Record<string, unknown>>\n if (!Array.isArray(content)) return events\n for (const part of content) {\n const partType = part.type as string | undefined\n if (partType === 'text' && typeof part.text === 'string') {\n events.push({ kind: 'text', text: part.text })\n } else if (partType === 'thinking' && typeof part.thinking === 'string') {\n events.push({ kind: 'thinking', text: part.thinking })\n } else if (partType === 'tool_use') {\n events.push({\n kind: 'tool_call',\n toolUseId: String(part.id ?? ''),\n tool: String(part.name ?? ''),\n input: part.input,\n })\n }\n }\n return events\n }\n\n // user message:区别于 assistant。content 里的 text 是真实/系统注入的用户输入,\n // 走 user_text(不要混入 assistant text 流);tool_result 走原 tool_result 路径。\n if (type === 'user') {\n const message = obj.message as Record<string, unknown> | undefined\n const content = (message?.content ?? []) as Array<Record<string, unknown>>\n if (!Array.isArray(content)) return events\n // 顶层 toolUseResult 是 CC 在 tool_result 行上挂的元信息(Agent tool 完成后的 agentId / 统计等)\n // sourceToolAssistantUUID 精确指向发起 tool 的 assistant 消息 uuid\n const toolResultExtra = extractToolResultExtra(obj.toolUseResult)\n const sourceToolAssistantUUID =\n typeof obj.sourceToolAssistantUUID === 'string' ? obj.sourceToolAssistantUUID : undefined\n for (const part of content) {\n const partType = part.type as string | undefined\n if (partType === 'text' && typeof part.text === 'string') {\n // CC 在 user 帧里塞了一堆系统注入(task-notification / slash-command / system-reminder…),\n // 复用 history 的分类器给 UI 标好;真实输入 classified=null\n const classified = classifyUserMessage({ text: part.text, raw: obj })\n const ev: ParsedEvent = { kind: 'user_text', text: part.text }\n if (classified) {\n ev.meta = classified.meta\n if (classified.taskId) ev.taskId = classified.taskId\n if (classified.parentToolUseId) ev.parentToolUseId = classified.parentToolUseId\n }\n events.push(ev)\n } else if (partType === 'tool_result') {\n const ev: ParsedEvent = {\n kind: 'tool_result',\n toolUseId: String(part.tool_use_id ?? ''),\n }\n if (typeof part.is_error === 'boolean' && part.is_error && typeof part.content === 'string') {\n ev.error = part.content\n } else {\n ev.output = part.content\n }\n if (toolResultExtra) ev.toolResultExtra = toolResultExtra\n if (sourceToolAssistantUUID) ev.sourceToolAssistantUUID = sourceToolAssistantUUID\n events.push(ev)\n }\n }\n return events\n }\n\n // CC v2.x 把系统上下文(hook_additional_context / skill_listing / memories / ...)从\n // user content 抽出来写成独立 type:\"attachment\" 行。daemon 按 attachment.type 分派:\n // memories → 独立 kind attachment_memories(UI 渲成记忆卡)\n // 其它 → user_text + meta 低视觉权重折叠\n if (type === 'attachment') {\n const ev = parseAttachment(obj)\n if (ev) events.push(ev)\n return events\n }\n\n // 纯 runtime 内部事件:无渲染价值,显式忽略\n if (type === 'queue-operation') return events\n // last-prompt 被 ClaudeHistoryReader.list() 用作 session 标题来源;事件流里显式忽略\n if (type === 'last-prompt') return events\n\n // stream_event:--include-partial-messages 打开后 CC 发的增量帧。\n // 只关心 content_block_delta:text_delta / thinking_delta 累积成 text/thinking 事件,\n // partialId = `${session_id}-${block_index}`,UI 用它把同块的多个增量合并到一行。\n // input_json_delta 不处理(tool input 由 assistant 整段帧提供);start/stop 也忽略。\n if (type === 'stream_event') {\n const event = obj.event as Record<string, unknown> | undefined\n if (!event) return events\n if (event.type !== 'content_block_delta') return events\n const delta = event.delta as Record<string, unknown> | undefined\n if (!delta) return events\n const blockIndex = event.index as number | undefined\n const sid = (obj.session_id as string | undefined) ?? ''\n const partialId = `${sid}-${blockIndex ?? 0}`\n if (delta.type === 'text_delta' && typeof delta.text === 'string') {\n events.push({ kind: 'text', text: delta.text, partialId })\n } else if (delta.type === 'thinking_delta' && typeof delta.thinking === 'string') {\n events.push({ kind: 'thinking', text: delta.thinking, partialId })\n }\n return events\n }\n\n // 权限请求帧:CC 的 --permission-prompt-tool stdio 实际发\n // `type:\"control_request\"` + `request.subtype:\"can_use_tool\"` + `request:{tool_name,input,tool_use_id,...}`\n // (见 CC entrypoints/sdk/controlSchemas.ts SDKControlRequestSchema / SDKControlPermissionRequestSchema)\n // 老版本 CC / legacy tooling 会发 `type:\"permission_request\"` + `tool:{name,input}`;两种形状都兼容。\n // 参考 cc-direct openclaw-plugin-clawos/src/claude-code/stream-parser.ts parsePermissionRequest\n if (type === 'control_request' || type === 'permission_request') {\n const request = obj.request as Record<string, unknown> | undefined\n // control_request 还有 interrupt / set_model / mcp_* / ... 等 subtype,只 can_use_tool 转 permission_request 事件;\n // 其它 subtype 走未识别诊断通道,不污染事件流\n if (type === 'control_request' && request?.subtype !== 'can_use_tool') {\n notifyUnknownType(\n type,\n typeof request?.subtype === 'string' ? request.subtype : undefined,\n typeof obj.session_id === 'string' ? obj.session_id : undefined,\n )\n return events\n }\n const toolObj =\n obj.tool && typeof obj.tool === 'object' ? (obj.tool as Record<string, unknown>) : undefined\n const toolName =\n (typeof request?.tool_name === 'string' && request.tool_name) ||\n (typeof toolObj?.name === 'string' && toolObj.name) ||\n (typeof obj.tool === 'string' ? (obj.tool as string) : '') ||\n (typeof obj.tool_name === 'string' ? (obj.tool_name as string) : '')\n const toolInput = request?.input ?? toolObj?.input ?? obj.input ?? obj.tool_input\n const requestId = String(obj.request_id ?? obj.id ?? '')\n events.push({\n kind: 'permission_request',\n requestId,\n tool: toolName,\n input: toolInput,\n })\n return events\n }\n\n // 独立 usage 帧 (stream-json `type:'usage'`) → meta_update.contextUsage\n if (type === 'usage' && obj.usage && typeof obj.usage === 'object') {\n const usage = normalizeUsage(obj.usage as Record<string, unknown>)\n if (usage) events.push({ kind: 'meta_update', patch: { contextUsage: usage } })\n return events\n }\n\n // result (stream-json) → meta_update.contextUsage + turn_end\n if (type === 'result') {\n if (obj.usage && typeof obj.usage === 'object') {\n const usage = normalizeUsage(obj.usage as Record<string, unknown>)\n if (usage) events.push({ kind: 'meta_update', patch: { contextUsage: usage } })\n }\n events.push({ kind: 'turn_end' })\n return events\n }\n\n // error\n if (type === 'error') {\n events.push({ kind: 'error', message: String(obj.message ?? obj.error ?? 'unknown error') })\n return events\n }\n\n // 顶层 gitBranch 已在开头处理;其它未识别 type 交诊断通道留痕,不影响事件流\n if (typeof type === 'string' && type.length > 0) {\n notifyUnknownType(type, subtype, typeof obj.session_id === 'string' ? obj.session_id : undefined)\n }\n return events\n}\n\n// 归一化 structuredPatch:保留合法 hunk,不合法字段丢弃。\n// 源是 FileEditTool / FileWriteTool 通过 diff npm 包生成的 hunk 数组\nfunction extractStructuredPatch(raw: unknown): ToolResultExtra['structuredPatch'] | undefined {\n if (!Array.isArray(raw)) return undefined\n const hunks: NonNullable<ToolResultExtra['structuredPatch']> = []\n for (const h of raw) {\n if (!h || typeof h !== 'object') continue\n const hunk = h as Record<string, unknown>\n if (\n typeof hunk.oldStart !== 'number' ||\n typeof hunk.oldLines !== 'number' ||\n typeof hunk.newStart !== 'number' ||\n typeof hunk.newLines !== 'number' ||\n !Array.isArray(hunk.lines)\n ) {\n continue\n }\n const lines = (hunk.lines as unknown[]).filter((l): l is string => typeof l === 'string')\n hunks.push({\n oldStart: hunk.oldStart,\n oldLines: hunk.oldLines,\n newStart: hunk.newStart,\n newLines: hunk.newLines,\n lines,\n })\n }\n return hunks.length > 0 ? hunks : undefined\n}\n\n// CC 顶层 toolUseResult 归一化抽取;仅保留非 content 字段(content 与 message.content[0].content 重复)\nfunction extractToolResultExtra(raw: unknown): ToolResultExtra | undefined {\n if (!raw || typeof raw !== 'object') return undefined\n const r = raw as Record<string, unknown>\n const out: ToolResultExtra = {}\n if (typeof r.agentId === 'string') out.agentId = r.agentId\n if (typeof r.agentType === 'string') out.agentType = r.agentType\n if (typeof r.status === 'string') out.status = r.status\n if (typeof r.prompt === 'string') out.prompt = r.prompt\n // FileEditOutput / FileWriteToolOutput 的 filePath + structuredPatch:UI rewind 预览本地算 diff\n if (typeof r.filePath === 'string' && r.filePath.length > 0) out.filePath = r.filePath\n const patch = extractStructuredPatch(r.structuredPatch)\n if (patch) out.structuredPatch = patch\n const stats: NonNullable<ToolResultExtra['stats']> = {}\n if (typeof r.totalDurationMs === 'number') stats.durationMs = r.totalDurationMs\n if (typeof r.totalTokens === 'number') stats.tokens = r.totalTokens\n if (typeof r.totalToolUseCount === 'number') stats.toolUseCount = r.totalToolUseCount\n if (r.toolStats && typeof r.toolStats === 'object') {\n const ts = r.toolStats as Record<string, unknown>\n const normalized: Record<string, number> = {}\n for (const [key, val] of Object.entries(ts)) {\n if (typeof val === 'number' && Number.isFinite(val) && val >= 0) normalized[key] = val\n }\n if (Object.keys(normalized).length > 0) stats.toolStats = normalized\n }\n if (r.usage && typeof r.usage === 'object') {\n // usage 保留原 wire shape,与 UsageSchema 对齐\n stats.usage = r.usage as ToolResultExtra['stats'] extends infer S\n ? S extends { usage?: infer U }\n ? U\n : never\n : never\n }\n if (Object.keys(stats).length > 0) out.stats = stats\n if (Object.keys(out).length === 0) return undefined\n return out\n}\n\n// CC type:\"attachment\" 行按 attachment.type 分派。\n// 只展示对用户有价值的子类;其余(hook 内部状态、系统 reminder 等)静默丢弃,避免刷屏。\n// memories → 独立卡(attachment_memories);skill_listing / deferred_tools_delta → user_text + meta 折叠\n// hook_additional_context / hook_success / task_reminder / command_permissions / auto_mode → null(不渲染)\n// 未知 subtype:nullOp 但留一条 diagnostic log 追踪(通过 notifyUnknownType)\nconst ATTACHMENT_SILENT_SUBTYPES: ReadonlySet<string> = new Set([\n 'hook_additional_context',\n 'hook_success',\n 'task_reminder',\n 'command_permissions',\n 'auto_mode',\n])\n\nfunction parseAttachment(obj: Record<string, unknown>): ParsedEvent | null {\n const attachment = obj.attachment\n if (!attachment || typeof attachment !== 'object') return null\n const a = attachment as Record<string, unknown>\n const kind = typeof a.type === 'string' ? a.type : 'unknown'\n if (kind === 'memories') {\n const raw = Array.isArray(a.memories) ? (a.memories as unknown[]) : []\n const memories = raw\n .map((m) => {\n if (!m || typeof m !== 'object') return null\n const rec = m as Record<string, unknown>\n const path = typeof rec.path === 'string' ? rec.path : null\n const content = typeof rec.content === 'string' ? rec.content : null\n if (!path || content == null) return null\n const out: { path: string; content: string; mtimeMs?: number } = { path, content }\n if (typeof rec.mtimeMs === 'number') out.mtimeMs = rec.mtimeMs\n return out\n })\n .filter((m): m is { path: string; content: string; mtimeMs?: number } => m !== null)\n if (memories.length === 0) return null\n return { kind: 'attachment_memories', memories }\n }\n // 显式静默列表:已知、对用户无价值,不渲染不 log\n if (ATTACHMENT_SILENT_SUBTYPES.has(kind)) return null\n // 保留渲染的折叠子类\n if (kind === 'skill_listing') {\n const text = stringifyAttachmentContent(a.content)\n if (!text) return null\n return { kind: 'user_text', text, meta: 'attachment-skills' }\n }\n if (kind === 'deferred_tools_delta') {\n const text = formatDeferredToolsDelta(a)\n if (!text) return null\n return { kind: 'user_text', text, meta: 'attachment-deferred-tools' }\n }\n // 未知 subtype:走诊断通道留痕,但不产生渲染事件\n notifyUnknownType(`attachment:${kind}`, undefined, typeof obj.session_id === 'string' ? obj.session_id : undefined)\n return null\n}\n\nfunction stringifyAttachmentContent(content: unknown): string {\n if (typeof content === 'string') return content\n if (Array.isArray(content)) return (content as unknown[]).filter((x) => typeof x === 'string').join('\\n')\n return ''\n}\n\nfunction formatDeferredToolsDelta(a: Record<string, unknown>): string {\n const added = Array.isArray(a.addedNames) ? (a.addedNames as unknown[]).filter((x) => typeof x === 'string') : []\n const removed = Array.isArray(a.removedNames) ? (a.removedNames as unknown[]).filter((x) => typeof x === 'string') : []\n const parts: string[] = []\n if (added.length > 0) parts.push(`+${added.length}: ${added.join(', ')}`)\n if (removed.length > 0) parts.push(`-${removed.length}: ${removed.join(', ')}`)\n return parts.join(' | ')\n}\n\n// ------------------------------ 未识别 type 诊断通道 ------------------------------\n// parseClaudeLine 是纯函数入口,日志基础设施通过 ClaudeAdapter 构造时注入一个 handler;\n// 无注入时默认 no-op,不影响测试与纯解析路径\nexport type UnknownTypeHandler = (type: string, subtype: string | undefined, sessionId: string | undefined) => void\nlet unknownTypeHandler: UnknownTypeHandler | null = null\n\nexport function setUnknownTypeHandler(handler: UnknownTypeHandler | null): void {\n unknownTypeHandler = handler\n}\n\nfunction notifyUnknownType(type: string, subtype: string | undefined, sessionId: string | undefined): void {\n if (unknownTypeHandler) unknownTypeHandler(type, subtype, sessionId)\n}\n\nexport function encodeClaudeStdin(text: string): string {\n const frame = {\n type: 'user',\n message: {\n role: 'user',\n content: [{ type: 'text', text }],\n },\n }\n return JSON.stringify(frame) + '\\n'\n}\n\n// Claude 模型 → contextWindowSize 查表;UI 的 ctx% 直接用 session.contextWindowSize 算\n// 注:Opus 1M 通过模型 id 尾缀 `[1m]` 标识(见 ChatHeader 旧 formatCcModelDisplay)\nconst CLAUDE_MODELS: Array<{\n id: string\n label: string\n description?: string\n contextWindowSize: number\n default?: boolean\n}> = [\n { id: '', label: 'Default', description: 'CLI default model', contextWindowSize: 200_000, default: true },\n { id: 'sonnet', label: 'Sonnet', description: 'Fast, balanced', contextWindowSize: 200_000 },\n { id: 'opus', label: 'Opus', description: 'Most capable', contextWindowSize: 1_000_000 },\n { id: 'haiku', label: 'Haiku', description: 'Fastest, lightest', contextWindowSize: 200_000 },\n]\n\nconst CLAUDE_PERMISSION_MODES: Array<{ id: string; label: string; description?: string }> = [\n { id: '', label: 'Default', description: 'Ask for every tool call' },\n { id: 'plan', label: 'Plan', description: 'Read-only, no code changes' },\n { id: 'bypassPermissions', label: 'YOLO', description: 'Skip all permission checks' },\n]\n\n// CC adapter 的静态 capabilities:core 字段 + effort 作 tool-specific\nconst CLAUDE_CAPABILITIES: ToolCapabilities = {\n tool: 'claude',\n toolSessionIdLabel: 'Claude Session ID',\n models: CLAUDE_MODELS,\n permissionModes: CLAUDE_PERMISSION_MODES,\n configSchema: [\n {\n name: 'model',\n type: 'select',\n label: 'Model',\n scope: 'core',\n options: CLAUDE_MODELS.map((m) => ({ value: m.id, label: m.label, description: m.description })),\n default: '',\n },\n {\n name: 'permissionMode',\n type: 'select',\n label: 'Permission Mode',\n scope: 'core',\n options: CLAUDE_PERMISSION_MODES.map((m) => ({ value: m.id, label: m.label, description: m.description })),\n default: '',\n },\n {\n name: 'effort',\n type: 'select',\n label: 'Effort',\n description: 'Reasoning effort level',\n scope: 'tool-specific',\n options: [\n { value: '', label: 'Default' },\n { value: 'low', label: 'Low' },\n { value: 'medium', label: 'Medium' },\n { value: 'high', label: 'High' },\n ],\n default: '',\n },\n ],\n}\n\nexport class ClaudeAdapter implements ToolAdapter {\n readonly id = 'claude'\n private probeCache: ProbeResult | null = null\n private readonly logger?: Logger\n readonly historyReader?: HistoryReader\n private readonly probeOverride?: () => Promise<ProbeResult>\n\n constructor(opts: ClaudeAdapterOptions = {}) {\n this.logger = opts.logger\n this.historyReader = opts.historyReader\n this.probeOverride = opts.probeOverride\n // 把未识别 JSONL 顶层 type 的诊断路由到 daemon logger;仅 CLAWD_DEBUG=1 时真正落盘(logger 的 level 控制)\n // 模块级 handler 覆盖是 last-wins,多次构造以最后一次为准——daemon 运行期只构造一个 ClaudeAdapter\n if (this.logger) {\n const logger = this.logger\n setUnknownTypeHandler((type, subtype, sessionId) => {\n logger.debug('clawd-jsonl-unknown', { type, subtype, sessionId })\n })\n }\n }\n\n async probe(): Promise<ProbeResult> {\n if (this.probeCache) return this.probeCache\n const res = this.probeOverride ? await this.probeOverride() : await probeClaude()\n this.probeCache = res\n return res\n }\n\n async capabilities(): Promise<ToolCapabilities> {\n return CLAUDE_CAPABILITIES\n }\n\n // CC 返回长 modelId(如 'claude-opus-4-7'),capabilities 表里是短 alias('opus')\n // 顺序:exact id → contains(含 opus-4-6/4-7 → 1M 兜底) → [1m] 后缀 → undefined\n resolveContextWindow(modelId: string | undefined): number | undefined {\n if (!modelId) return undefined\n const models = CLAUDE_CAPABILITIES.models\n const exact = models.find((m) => m.id === modelId)\n if (exact) return exact.contextWindowSize\n const lower = modelId.toLowerCase()\n const contains = models.find((m) => m.id && lower.includes(m.id.toLowerCase()))\n if (contains) {\n // CC 在线判定:opus-4-6 / opus-4-7 默认 1M 上下文\n if (contains.id === 'opus' && /opus-4-[67]/i.test(modelId)) return 1_000_000\n return contains.contextWindowSize\n }\n if (/\\[1m\\]/i.test(modelId)) return 1_000_000\n return undefined\n }\n\n spawn(ctx: SpawnContext): ChildProcess {\n const args = buildSpawnArgs(ctx)\n const cmd = process.env.CLAUDE_BIN ?? 'claude'\n // 保持和用户直接在终端启动 CC 时一致——rewind 依赖的 CLAUDE_CODE_ENABLE_SDK_FILE_CHECKPOINTING=1\n // 由用户在 shell rc 或启动 clawd 前自行 export,daemon 不做隐式注入\n const child = spawn(cmd, args, {\n cwd: ctx.cwd,\n env: { ...process.env, ...(ctx.env ?? {}) },\n stdio: ['pipe', 'pipe', 'pipe'],\n })\n this.logger?.info('claude spawn', { cmd, args, cwd: ctx.cwd })\n return child\n }\n\n // 暴露内部工具给测试直接校验 args 组合\n buildSpawnArgs(ctx: SpawnContext): string[] {\n return buildSpawnArgs(ctx)\n }\n\n parseLine(line: string): ParsedEvent[] {\n return parseClaudeLine(line)\n }\n\n encodeStdin(text: string, _ctx: EncodeContext): string | null {\n return encodeClaudeStdin(text)\n }\n}\n","import fs from 'node:fs'\nimport os from 'node:os'\nimport path from 'node:path'\nimport { structuredPatch } from 'diff'\nimport type {\n HistoryReader,\n HistoryProject,\n HistorySessionSummary,\n HistoryMessage,\n HistorySubagent,\n HistoryUserMeta,\n FileHistoryTrackedBackup,\n RewindDiffFile,\n RewindDiffResult,\n} from './types.js'\n\n// Claude CLI 的 project hash dir 规则是把 cwd 里的非 slash 前置路径字符转成 dash 加在前面\n// 例如 cwd = /Users/foo/bar → `-Users-foo-bar`\nexport function cwdToHashDir(cwd: string): string {\n return '-' + cwd.replace(/^\\//, '').replace(/\\//g, '-')\n}\n\n// 反推:`-Users-foo-bar` → `/Users/foo/bar`\nexport function hashDirToCwd(hash: string): string {\n const body = hash.startsWith('-') ? hash.slice(1) : hash\n return '/' + body.replace(/-/g, '/')\n}\n\nfunction safeStatMtime(p: string): number {\n try {\n return fs.statSync(p).mtimeMs\n } catch {\n return 0\n }\n}\n\nfunction readJsonlLines(file: string): unknown[] {\n let raw: string\n try {\n raw = fs.readFileSync(file, 'utf8')\n } catch (err: unknown) {\n if ((err as NodeJS.ErrnoException).code === 'ENOENT') return []\n throw err\n }\n const lines: unknown[] = []\n for (const line of raw.split('\\n')) {\n const t = line.trim()\n if (!t) continue\n try {\n lines.push(JSON.parse(t))\n } catch {\n // 忽略坏行\n }\n }\n return lines\n}\n\n// CC 插入到 role=user 消息里的系统内容识别。返回 null 表示真实用户输入。\n// 规则顺序按\"明确标记 → 模糊 isMeta 兜底\":最具体的 XML envelope 优先匹配。\nexport interface ClassifyUserMessageInput {\n text: string\n raw?: Record<string, unknown> | null | undefined\n}\n\nexport interface ClassifiedUserMessage {\n meta: HistoryUserMeta\n taskId?: string\n parentToolUseId?: string\n}\n\nconst TASK_NOTIFICATION_RE = /<task-notification\\b[\\s\\S]*?<\\/task-notification>/i\nconst TASK_ID_RE = /<task-id>\\s*([^<\\s][^<]*?)\\s*<\\/task-id>/i\nconst TOOL_USE_ID_RE = /<tool-use-id>\\s*([^<\\s][^<]*?)\\s*<\\/tool-use-id>/i\nconst SLASH_COMMAND_RE = /^\\s*<command-(?:name|message)\\b/i\nconst LOCAL_COMMAND_RE = /^\\s*<local-command-(?:caveat|stdout|stderr)\\b/i\nconst SYSTEM_REMINDER_RE = /^\\s*<system-reminder\\b/i\nconst OPENSPEC_BLOCK_RE = /^\\s*<!--\\s*OPENSPEC\\b/i\nconst SKILL_HINT_RE = /^\\s*Base directory for this skill:\\s/\n\nexport function classifyUserMessage(\n input: ClassifyUserMessageInput,\n): ClassifiedUserMessage | null {\n const text = input.text ?? ''\n const raw = input.raw ?? {}\n if (!text) return null\n\n if (TASK_NOTIFICATION_RE.test(text)) {\n const taskId = TASK_ID_RE.exec(text)?.[1]\n const parentToolUseId = TOOL_USE_ID_RE.exec(text)?.[1]\n const out: ClassifiedUserMessage = { meta: 'task-notification' }\n if (taskId) out.taskId = taskId\n if (parentToolUseId) out.parentToolUseId = parentToolUseId\n return out\n }\n if (SLASH_COMMAND_RE.test(text)) return { meta: 'slash-command' }\n if (LOCAL_COMMAND_RE.test(text)) return { meta: 'local-command' }\n if (SYSTEM_REMINDER_RE.test(text) || OPENSPEC_BLOCK_RE.test(text)) {\n return { meta: 'system-reminder' }\n }\n if (SKILL_HINT_RE.test(text)) return { meta: 'skill-hint' }\n if ((raw as { isMeta?: unknown }).isMeta === true) return { meta: 'meta-text' }\n return null\n}\n\nfunction withCommonFields(\n msg: HistoryMessage,\n o: Record<string, unknown>,\n): HistoryMessage {\n if (o.isSidechain === true) msg.isSidechain = true\n // CC JSONL 顶层 uuid:rewind feature 定位 user message 要用\n if (typeof o.uuid === 'string' && o.uuid.length > 0) msg.uuid = o.uuid\n return msg\n}\n\nfunction messageFromJsonl(obj: unknown): HistoryMessage | null {\n if (!obj || typeof obj !== 'object') return null\n const o = obj as Record<string, unknown>\n const type = o.type as string | undefined\n const ts = (o.timestamp as string | undefined) ?? (o.ts as string | undefined)\n\n if (type === 'user' || type === 'assistant') {\n const message = o.message as Record<string, unknown> | undefined\n const content = message?.content\n const toolResultExtra =\n type === 'user' ? extractToolResultExtraFromRaw(o.toolUseResult) : undefined\n const sourceToolAssistantUUID =\n type === 'user' && typeof o.sourceToolAssistantUUID === 'string'\n ? o.sourceToolAssistantUUID\n : undefined\n const buildTextMsg = (text: string): HistoryMessage => {\n const kind = type === 'user' ? 'user-text' : 'assistant-text'\n const msg: HistoryMessage = { kind, text, ts, raw: obj }\n if (kind === 'user-text') {\n const classified = classifyUserMessage({ text, raw: o })\n if (classified) {\n msg.meta = classified.meta\n if (classified.taskId) msg.taskId = classified.taskId\n if (classified.parentToolUseId) msg.parentToolUseId = classified.parentToolUseId\n }\n }\n return withCommonFields(msg, o)\n }\n if (typeof content === 'string') {\n return buildTextMsg(content)\n }\n if (Array.isArray(content)) {\n const parts = content as Array<Record<string, unknown>>\n const texts = parts\n .filter((p) => p.type === 'text' && typeof p.text === 'string')\n .map((p) => String(p.text))\n const toolUse = parts.find((p) => p.type === 'tool_use')\n const toolResult = parts.find((p) => p.type === 'tool_result')\n if (toolUse) {\n return withCommonFields(\n {\n kind: 'tool_call',\n tool: String(toolUse.name ?? ''),\n toolUseId: typeof toolUse.id === 'string' ? toolUse.id : undefined,\n input: toolUse.input,\n ts,\n raw: obj,\n },\n o,\n )\n }\n if (toolResult) {\n const msg: HistoryMessage = {\n kind: 'tool_result',\n tool: undefined,\n toolUseId:\n typeof toolResult.tool_use_id === 'string' ? toolResult.tool_use_id : undefined,\n output: toolResult.content,\n ts,\n raw: obj,\n }\n if (toolResultExtra) msg.toolResultExtra = toolResultExtra\n if (sourceToolAssistantUUID) msg.sourceToolAssistantUUID = sourceToolAssistantUUID\n return withCommonFields(msg, o)\n }\n if (texts.length > 0) {\n return buildTextMsg(texts.join('\\n'))\n }\n }\n return null\n }\n if (type === 'summary' && typeof o.summary === 'string') {\n return { kind: 'summary', text: o.summary, ts, raw: obj }\n }\n if (type === 'attachment') {\n return attachmentToHistoryMessage(o, ts)\n }\n // runtime 噪音:queue-operation / last-prompt 明确不产生 HistoryMessage\n if (type === 'queue-operation' || type === 'last-prompt') return null\n return null\n}\n\n// 复用 claude.ts 的 toolUseResult 归一化规则(两处共享同一子集),但这里不 import 它\n// 避免历史读取器依赖 stream-json 解析器;解析规则一致即可\nfunction extractStructuredPatchFromRaw(\n raw: unknown,\n): NonNullable<HistoryMessage['toolResultExtra']>['structuredPatch'] | undefined {\n if (!Array.isArray(raw)) return undefined\n const hunks: NonNullable<\n NonNullable<HistoryMessage['toolResultExtra']>['structuredPatch']\n > = []\n for (const h of raw) {\n if (!h || typeof h !== 'object') continue\n const hunk = h as Record<string, unknown>\n if (\n typeof hunk.oldStart !== 'number' ||\n typeof hunk.oldLines !== 'number' ||\n typeof hunk.newStart !== 'number' ||\n typeof hunk.newLines !== 'number' ||\n !Array.isArray(hunk.lines)\n ) {\n continue\n }\n const lines = (hunk.lines as unknown[]).filter((l): l is string => typeof l === 'string')\n hunks.push({\n oldStart: hunk.oldStart,\n oldLines: hunk.oldLines,\n newStart: hunk.newStart,\n newLines: hunk.newLines,\n lines,\n })\n }\n return hunks.length > 0 ? hunks : undefined\n}\n\nfunction extractToolResultExtraFromRaw(raw: unknown): HistoryMessage['toolResultExtra'] {\n if (!raw || typeof raw !== 'object') return undefined\n const r = raw as Record<string, unknown>\n const out: NonNullable<HistoryMessage['toolResultExtra']> = {}\n if (typeof r.agentId === 'string') out.agentId = r.agentId\n if (typeof r.agentType === 'string') out.agentType = r.agentType\n if (typeof r.status === 'string') out.status = r.status\n if (typeof r.prompt === 'string') out.prompt = r.prompt\n // FileEditOutput / FileWriteToolOutput 里的 filePath + structuredPatch:\n // rewind drawer 用它本地算 file-by-file diff,绕开 fileHistoryEnabled feature flag\n if (typeof r.filePath === 'string' && r.filePath.length > 0) out.filePath = r.filePath\n const patch = extractStructuredPatchFromRaw(r.structuredPatch)\n if (patch) out.structuredPatch = patch\n const stats: NonNullable<NonNullable<HistoryMessage['toolResultExtra']>['stats']> = {}\n if (typeof r.totalDurationMs === 'number') stats.durationMs = r.totalDurationMs\n if (typeof r.totalTokens === 'number') stats.tokens = r.totalTokens\n if (typeof r.totalToolUseCount === 'number') stats.toolUseCount = r.totalToolUseCount\n if (r.toolStats && typeof r.toolStats === 'object') {\n const ts = r.toolStats as Record<string, unknown>\n const normalized: Record<string, number> = {}\n for (const [key, val] of Object.entries(ts)) {\n if (typeof val === 'number' && Number.isFinite(val) && val >= 0) normalized[key] = val\n }\n if (Object.keys(normalized).length > 0) stats.toolStats = normalized\n }\n if (r.usage && typeof r.usage === 'object') {\n stats.usage = r.usage as NonNullable<NonNullable<HistoryMessage['toolResultExtra']>['stats']>['usage']\n }\n if (Object.keys(stats).length > 0) out.stats = stats\n if (Object.keys(out).length === 0) return undefined\n return out\n}\n\n// type:\"attachment\" 行 → HistoryMessage;与 live parser 的 parseAttachment 语义保持一致:\n// memories 独立卡;skill_listing / deferred_tools_delta 折叠;hook_* / task_reminder / 未知全静默\nconst ATTACHMENT_SILENT_SUBTYPES: ReadonlySet<string> = new Set([\n 'hook_additional_context',\n 'hook_success',\n 'task_reminder',\n 'command_permissions',\n 'auto_mode',\n])\n\nfunction attachmentToHistoryMessage(\n o: Record<string, unknown>,\n ts: string | undefined,\n): HistoryMessage | null {\n const attachment = o.attachment\n if (!attachment || typeof attachment !== 'object') return null\n const a = attachment as Record<string, unknown>\n const subtype = typeof a.type === 'string' ? a.type : 'unknown'\n if (subtype === 'memories') {\n const raw = Array.isArray(a.memories) ? (a.memories as unknown[]) : []\n const memories = raw\n .map((m) => {\n if (!m || typeof m !== 'object') return null\n const rec = m as Record<string, unknown>\n const path = typeof rec.path === 'string' ? rec.path : null\n const content = typeof rec.content === 'string' ? rec.content : null\n if (!path || content == null) return null\n const entry: { path: string; content: string; mtimeMs?: number } = { path, content }\n if (typeof rec.mtimeMs === 'number') entry.mtimeMs = rec.mtimeMs\n return entry\n })\n .filter((m): m is { path: string; content: string; mtimeMs?: number } => m !== null)\n if (memories.length === 0) return null\n return withCommonFields({ kind: 'attachment_memories', memories, ts, raw: o }, o)\n }\n if (ATTACHMENT_SILENT_SUBTYPES.has(subtype)) return null\n if (subtype === 'skill_listing') {\n const text = attachmentContentText(a.content)\n if (!text) return null\n return withCommonFields({ kind: 'user-text', text, meta: 'attachment-skills', ts, raw: o }, o)\n }\n if (subtype === 'deferred_tools_delta') {\n const text = attachmentDeferredToolsText(a)\n if (!text) return null\n return withCommonFields({ kind: 'user-text', text, meta: 'attachment-deferred-tools', ts, raw: o }, o)\n }\n // 未知 subtype:历史回放不做诊断 log(避免重复),直接静默\n return null\n}\n\nfunction attachmentContentText(content: unknown): string {\n if (typeof content === 'string') return content\n if (Array.isArray(content)) return (content as unknown[]).filter((x) => typeof x === 'string').join('\\n')\n return ''\n}\n\nfunction attachmentDeferredToolsText(a: Record<string, unknown>): string {\n const added = Array.isArray(a.addedNames) ? (a.addedNames as unknown[]).filter((x) => typeof x === 'string') : []\n const removed = Array.isArray(a.removedNames) ? (a.removedNames as unknown[]).filter((x) => typeof x === 'string') : []\n const parts: string[] = []\n if (added.length > 0) parts.push(`+${added.length}: ${added.join(', ')}`)\n if (removed.length > 0) parts.push(`-${removed.length}: ${removed.join(', ')}`)\n return parts.join(' | ')\n}\n\nexport interface ClaudeHistoryOptions {\n baseDir?: string // 默认 ~/.claude\n}\n\n// 读 snapshot 备份文件内容:null 表示 snapshot 时刻\"文件不存在\"(CC 用 backupFileName=null 标记),\n// 或备份文件读不出来(视作不存在,diff 会按 added 处理)\nfunction readBackupContent(\n fileHistoryRoot: string,\n toolSessionId: string,\n backupFileName: string | null,\n): string | null {\n if (backupFileName === null) return null\n try {\n return fs.readFileSync(\n path.join(fileHistoryRoot, toolSessionId, backupFileName),\n 'utf8',\n )\n } catch {\n return null\n }\n}\n\n// 读磁盘当前内容:ENOENT 时 null(文件已删除);其他错误视为空\nfunction readCurrentContent(filePath: string): string | null {\n try {\n return fs.readFileSync(filePath, 'utf8')\n } catch (err: unknown) {\n if ((err as NodeJS.ErrnoException).code === 'ENOENT') return null\n return null\n }\n}\n\nexport class ClaudeHistoryReader implements HistoryReader {\n private readonly projectsRoot: string\n // CC 的文件快照备份根:~/.claude/file-history/<toolSessionId>/<hash>@v<n>\n // 每次 user 提交前 trackEdit 拷一份,作为 rewind 回退目标\n private readonly fileHistoryRoot: string\n\n constructor(opts: ClaudeHistoryOptions = {}) {\n const base = opts.baseDir ?? path.join(os.homedir(), '.claude')\n this.projectsRoot = path.join(base, 'projects')\n this.fileHistoryRoot = path.join(base, 'file-history')\n }\n\n async listProjects(): Promise<HistoryProject[]> {\n let entries: fs.Dirent[]\n try {\n entries = fs.readdirSync(this.projectsRoot, { withFileTypes: true })\n } catch (err: unknown) {\n if ((err as NodeJS.ErrnoException).code === 'ENOENT') return []\n throw err\n }\n const out: HistoryProject[] = []\n for (const ent of entries) {\n if (!ent.isDirectory()) continue\n const dir = path.join(this.projectsRoot, ent.name)\n const files = fs.readdirSync(dir).filter((f) => f.endsWith('.jsonl'))\n const updatedAtMs = files.reduce((m, f) => Math.max(m, safeStatMtime(path.join(dir, f))), 0)\n out.push({\n projectPath: hashDirToCwd(ent.name),\n hashDir: ent.name,\n sessionCount: files.length,\n updatedAt: updatedAtMs ? new Date(updatedAtMs).toISOString() : '',\n })\n }\n out.sort((a, b) => (a.updatedAt > b.updatedAt ? -1 : a.updatedAt < b.updatedAt ? 1 : 0))\n return out\n }\n\n async listSessions(args: { projectPath: string }): Promise<HistorySessionSummary[]> {\n const dir = path.join(this.projectsRoot, cwdToHashDir(args.projectPath))\n let files: string[]\n try {\n files = fs.readdirSync(dir).filter((f) => f.endsWith('.jsonl'))\n } catch (err: unknown) {\n if ((err as NodeJS.ErrnoException).code === 'ENOENT') return []\n throw err\n }\n const out: HistorySessionSummary[] = []\n for (const f of files) {\n const full = path.join(dir, f)\n const toolSessionId = f.slice(0, -'.jsonl'.length)\n const lines = readJsonlLines(full)\n\n // 标题优先级(对齐 cc-direct):\n // 1. 最后一行 `type=last-prompt` 的 lastPrompt(CC CLI 写入的最新一条 user prompt)\n // 2. `type=summary` 的 summary\n // 3. 第一条 user-text 前 120 字\n let summary = ''\n for (let i = lines.length - 1; i >= 0; i--) {\n const line = lines[i]\n if (typeof line === 'object' && line && (line as { type?: string }).type === 'last-prompt') {\n const lp = (line as { lastPrompt?: unknown }).lastPrompt\n if (typeof lp === 'string' && lp.trim()) {\n summary = lp.slice(0, 120)\n break\n }\n }\n }\n if (!summary) {\n for (const line of lines) {\n if (typeof line === 'object' && line && (line as { type?: string }).type === 'summary') {\n summary = String((line as { summary?: string }).summary ?? '')\n if (summary) break\n }\n }\n }\n if (!summary) {\n for (const line of lines) {\n const msg = messageFromJsonl(line)\n if (msg?.kind === 'user-text' && msg.text) {\n summary = msg.text.slice(0, 120)\n break\n }\n }\n }\n\n // 时间优先级:最后一行带 timestamp 的消息;退回文件 mtime\n let updatedAtMs = 0\n for (let i = lines.length - 1; i >= 0; i--) {\n const line = lines[i]\n const ts = (line as { timestamp?: unknown })?.timestamp\n if (typeof ts === 'string') {\n const ms = Date.parse(ts)\n if (Number.isFinite(ms)) {\n updatedAtMs = ms\n break\n }\n }\n }\n if (!updatedAtMs) updatedAtMs = safeStatMtime(full)\n\n out.push({\n toolSessionId,\n summary,\n messageCount: lines.length,\n updatedAt: updatedAtMs ? new Date(updatedAtMs).toISOString() : '',\n })\n }\n out.sort((a, b) => (a.updatedAt > b.updatedAt ? -1 : a.updatedAt < b.updatedAt ? 1 : 0))\n return out\n }\n\n async read(args: {\n cwd: string\n toolSessionId: string\n limit?: number\n offset?: number\n }): Promise<{ messages: HistoryMessage[]; total: number; offset: number }> {\n const file = path.join(\n this.projectsRoot,\n cwdToHashDir(args.cwd),\n `${args.toolSessionId}.jsonl`,\n )\n const lines = readJsonlLines(file)\n const messages: HistoryMessage[] = []\n for (const line of lines) {\n const msg = messageFromJsonl(line)\n if (msg) messages.push(msg)\n }\n const total = messages.length\n const limit = args.limit ?? total\n // offset 缺省 → tail 语义:返回最后 limit 条\n const offset =\n args.offset !== undefined\n ? Math.min(Math.max(0, args.offset), total)\n : Math.max(0, total - limit)\n return { messages: messages.slice(offset, offset + limit), total, offset }\n }\n\n // CC 子 agent(Agent / Task tool 派发)的对话写在独立文件:\n // <projectsRoot>/<cwdHash>/<toolSessionId>/subagents/agent-<agentId>.jsonl\n // 老 CC 把同样的内容写成主 jsonl 里 isSidechain=true + parentToolUseId 的行。\n // 新路径优先,目录不存在时回退旧实现,永远不丢数据。\n async listSubagents(args: {\n cwd: string\n toolSessionId: string\n }): Promise<HistorySubagent[]> {\n const fromDir = this.listSubagentsFromDirectory(args.cwd, args.toolSessionId)\n if (fromDir !== null) return fromDir\n return this.listSubagentsFromMainJsonl(args.cwd, args.toolSessionId)\n }\n\n async readSubagent(args: {\n cwd: string\n toolSessionId: string\n subagentId: string\n }): Promise<{ messages: HistoryMessage[] }> {\n const fromFile = this.readSubagentFromFile(args.cwd, args.toolSessionId, args.subagentId)\n if (fromFile !== null) return { messages: fromFile }\n return { messages: this.readSubagentFromMainJsonl(args.cwd, args.toolSessionId, args.subagentId) }\n }\n\n // 独立目录路径:<projectsRoot>/<cwdHash>/<toolSessionId>/subagents/*.jsonl\n // 返回 null 表示目录不存在(调用方回退旧实现);返回空数组表示目录存在但无 jsonl\n private listSubagentsFromDirectory(\n cwd: string,\n toolSessionId: string,\n ): HistorySubagent[] | null {\n const dir = path.join(\n this.projectsRoot,\n cwdToHashDir(cwd),\n toolSessionId,\n 'subagents',\n )\n let entries: fs.Dirent[]\n try {\n entries = fs.readdirSync(dir, { withFileTypes: true })\n } catch (err: unknown) {\n if ((err as NodeJS.ErrnoException).code === 'ENOENT') return null\n return null\n }\n const out: HistorySubagent[] = []\n for (const e of entries) {\n if (!e.isFile()) continue\n if (!e.name.startsWith('agent-') || !e.name.endsWith('.jsonl')) continue\n const subagentId = e.name.slice('agent-'.length, -'.jsonl'.length)\n const filePath = path.join(dir, e.name)\n const lines = readJsonlLines(filePath)\n let firstText = ''\n let messageCount = 0\n for (const line of lines) {\n const msg = messageFromJsonl(line)\n if (!msg) continue\n messageCount += 1\n if (!firstText && msg.kind === 'user-text' && msg.text) {\n firstText = msg.text.slice(0, 120)\n }\n }\n out.push({ subagentId, summary: firstText, messageCount })\n }\n return out\n }\n\n private listSubagentsFromMainJsonl(\n cwd: string,\n toolSessionId: string,\n ): HistorySubagent[] {\n const file = path.join(\n this.projectsRoot,\n cwdToHashDir(cwd),\n `${toolSessionId}.jsonl`,\n )\n const lines = readJsonlLines(file)\n const order: string[] = []\n const buckets = new Map<string, { count: number; firstText: string }>()\n for (const line of lines) {\n if (!line || typeof line !== 'object') continue\n const o = line as Record<string, unknown>\n if (o.isSidechain !== true) continue\n const parent = typeof o.parentToolUseId === 'string' ? o.parentToolUseId : null\n if (!parent) continue\n const msg = messageFromJsonl(line)\n if (!msg) continue\n let bucket = buckets.get(parent)\n if (!bucket) {\n bucket = { count: 0, firstText: '' }\n buckets.set(parent, bucket)\n order.push(parent)\n }\n bucket.count += 1\n if (!bucket.firstText && msg.kind === 'user-text' && msg.text) {\n bucket.firstText = msg.text.slice(0, 120)\n }\n }\n return order.map((id) => ({\n subagentId: id,\n summary: buckets.get(id)?.firstText ?? '',\n messageCount: buckets.get(id)?.count ?? 0,\n }))\n }\n\n // 独立文件路径:agent-<subagentId>.jsonl;文件不存在返回 null 让调用方回退旧实现\n private readSubagentFromFile(\n cwd: string,\n toolSessionId: string,\n subagentId: string,\n ): HistoryMessage[] | null {\n const file = path.join(\n this.projectsRoot,\n cwdToHashDir(cwd),\n toolSessionId,\n 'subagents',\n `agent-${subagentId}.jsonl`,\n )\n let exists = false\n try {\n exists = fs.statSync(file).isFile()\n } catch {\n return null\n }\n if (!exists) return null\n const lines = readJsonlLines(file)\n const messages: HistoryMessage[] = []\n for (const line of lines) {\n const msg = messageFromJsonl(line)\n if (msg) messages.push(msg)\n }\n return messages\n }\n\n /**\n * 遍历 session JSONL 找所有 `type:'file-history-snapshot'` 条目,按 messageId 建表\n * 最后一条 wins(同一 messageId 可能有 snapshot update)。trackedFileBackups 记录了\n * \"那一刻每个 tracked 文件对应的 backup 文件名\"\n */\n readFileHistorySnapshots(args: {\n cwd: string\n toolSessionId: string\n }): Map<string, Record<string, FileHistoryTrackedBackup>> {\n const file = path.join(\n this.projectsRoot,\n cwdToHashDir(args.cwd),\n `${args.toolSessionId}.jsonl`,\n )\n const lines = readJsonlLines(file)\n const out = new Map<string, Record<string, FileHistoryTrackedBackup>>()\n for (const line of lines) {\n if (!line || typeof line !== 'object') continue\n const o = line as Record<string, unknown>\n if (o.type !== 'file-history-snapshot') continue\n const snapshot = o.snapshot as Record<string, unknown> | undefined\n const backups = snapshot?.trackedFileBackups\n // CC 的 snapshot update 行外层 messageId 是**触发 trackEdit 的 assistant uuid**\n // (FileEditTool 传 parentMessage.uuid),但 `snapshot.messageId` 仍然是真正的\n // user message 锚点(fileHistory.ts:173 写入时保留)。对齐 CC sessionStorage.ts\n // buildFileHistorySnapshotChain 的做法:用 `snapshot.messageId` 作为 chain key,\n // isSnapshotUpdate=true 覆盖已有,=false 首次写入 → 这里简化为\"按插入顺序最后 wins\"\n const anchorId = snapshot?.messageId\n if (typeof anchorId !== 'string' || !backups || typeof backups !== 'object') continue\n const record: Record<string, FileHistoryTrackedBackup> = {}\n for (const [filePath, raw] of Object.entries(backups as Record<string, unknown>)) {\n if (!raw || typeof raw !== 'object') continue\n const b = raw as Record<string, unknown>\n const name = b.backupFileName\n const version = b.version\n if (typeof version !== 'number') continue\n record[filePath] = {\n backupFileName: typeof name === 'string' ? name : null,\n version,\n }\n }\n out.set(anchorId, record)\n }\n return out\n }\n\n /**\n * 批量检查:返回所有\"snapshot 时刻文件 vs 当前磁盘存在差异\"的 user message id。\n * 对齐 CC `fileHistoryHasAnyChanges`:只判断存不存在差异,遇到首个有差文件立刻返回\n * true,比完整 diff 便宜。UI 据此在打开 session 时一次性过滤 rewindable 入口\n */\n listRewindableUserMessageIds(args: {\n cwd: string\n toolSessionId: string\n }): string[] {\n const snapshots = this.readFileHistorySnapshots({\n cwd: args.cwd,\n toolSessionId: args.toolSessionId,\n })\n const result: string[] = []\n for (const [anchorId, target] of snapshots) {\n let hasAny = false\n for (const [rawPath, backup] of Object.entries(target)) {\n const absPath = path.isAbsolute(rawPath) ? rawPath : path.join(args.cwd, rawPath)\n const backupContent = readBackupContent(\n this.fileHistoryRoot,\n args.toolSessionId,\n backup.backupFileName,\n )\n const currentContent = readCurrentContent(absPath)\n if (backupContent !== currentContent) {\n hasAny = true\n break\n }\n }\n if (hasAny) result.push(anchorId)\n }\n return result\n }\n\n /**\n * 对齐 CC `fileHistoryGetDiffStats`:以 snapshot 时刻的备份文件为旧版,磁盘当前为新版,\n * 用 diff.structuredPatch 算每个文件的 hunks + 累加 +/-。磁盘/备份任何 IO 错误降级为\n * 该文件跳过而不是整体失败\n */\n computeRewindDiff(args: {\n cwd: string\n toolSessionId: string\n userMessageId: string\n }): RewindDiffResult {\n const snapshots = this.readFileHistorySnapshots({\n cwd: args.cwd,\n toolSessionId: args.toolSessionId,\n })\n const target = snapshots.get(args.userMessageId)\n if (!target) {\n return {\n canRewind: false,\n error: 'No file checkpoint found for this message.',\n files: [],\n totalInsertions: 0,\n totalDeletions: 0,\n }\n }\n const files: RewindDiffFile[] = []\n let totalInsertions = 0\n let totalDeletions = 0\n for (const [rawPath, backup] of Object.entries(target)) {\n // CC `maybeShortenFilePath` 会把 cwd 内的绝对路径存成相对路径,rewind 时\n // `maybeExpandFilePath` 用 getOriginalCwd() 还原。我们等价做法:相对 → 拼 cwd\n const absPath = path.isAbsolute(rawPath) ? rawPath : path.join(args.cwd, rawPath)\n const backupContent = readBackupContent(\n this.fileHistoryRoot,\n args.toolSessionId,\n backup.backupFileName,\n )\n const currentContent = readCurrentContent(absPath)\n // 两端都不存在 / 内容完全相同 → 无变化,跳过\n if (backupContent === currentContent) continue\n // 方向与 CC fileHistory.ts:705 computeDiffStatsForFile 对齐:\n // diffLines(originalContent, backupContent) — current 在前、backup 在后\n // 语义:\"rewind 会发生什么\":\n // `+` 行 = 要从 backup 恢复回来的行(当前没有、rewind 会加回来)\n // `-` 行 = 要丢掉的当前内容(当前有、rewind 会删除)\n // 所以 structuredPatch 参数也用同样方向:current 是 old、backup 是 new\n const patch = structuredPatch(\n absPath,\n absPath,\n currentContent ?? '',\n backupContent ?? '',\n '',\n '',\n { context: 3 },\n )\n const hunks = patch.hunks.map((h) => ({\n oldStart: h.oldStart,\n oldLines: h.oldLines,\n newStart: h.newStart,\n newLines: h.newLines,\n lines: h.lines,\n }))\n let ins = 0\n let del = 0\n for (const h of hunks) {\n for (const l of h.lines) {\n if (l.startsWith('+')) ins++\n else if (l.startsWith('-')) del++\n }\n }\n // 状态分类也按 rewind 会做什么来命名:\n // snapshot 时刻没有、当前有 → rewind 会把这个文件删掉 → 'deleted'\n // snapshot 时刻有、当前没 → rewind 会把这个文件重新创建 → 'added'\n let status: RewindDiffFile['status'] = 'modified'\n if (backupContent === null && currentContent !== null) status = 'deleted'\n else if (currentContent === null && backupContent !== null) status = 'added'\n files.push({ filePath: absPath, hunks, insertions: ins, deletions: del, status })\n totalInsertions += ins\n totalDeletions += del\n }\n return {\n canRewind: files.length > 0,\n files,\n totalInsertions,\n totalDeletions,\n }\n }\n\n private readSubagentFromMainJsonl(\n cwd: string,\n toolSessionId: string,\n subagentId: string,\n ): HistoryMessage[] {\n const file = path.join(\n this.projectsRoot,\n cwdToHashDir(cwd),\n `${toolSessionId}.jsonl`,\n )\n const lines = readJsonlLines(file)\n const messages: HistoryMessage[] = []\n for (const line of lines) {\n if (!line || typeof line !== 'object') continue\n const o = line as Record<string, unknown>\n if (o.isSidechain !== true) continue\n if (o.parentToolUseId !== subagentId) continue\n const msg = messageFromJsonl(line)\n if (msg) messages.push(msg)\n }\n return messages\n }\n}\n","function Diff() {}\nDiff.prototype = {\n diff: function diff(oldString, newString) {\n var _options$timeout;\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var callback = options.callback;\n if (typeof options === 'function') {\n callback = options;\n options = {};\n }\n var self = this;\n function done(value) {\n value = self.postProcess(value, options);\n if (callback) {\n setTimeout(function () {\n callback(value);\n }, 0);\n return true;\n } else {\n return value;\n }\n }\n\n // Allow subclasses to massage the input prior to running\n oldString = this.castInput(oldString, options);\n newString = this.castInput(newString, options);\n oldString = this.removeEmpty(this.tokenize(oldString, options));\n newString = this.removeEmpty(this.tokenize(newString, options));\n var newLen = newString.length,\n oldLen = oldString.length;\n var editLength = 1;\n var maxEditLength = newLen + oldLen;\n if (options.maxEditLength != null) {\n maxEditLength = Math.min(maxEditLength, options.maxEditLength);\n }\n var maxExecutionTime = (_options$timeout = options.timeout) !== null && _options$timeout !== void 0 ? _options$timeout : Infinity;\n var abortAfterTimestamp = Date.now() + maxExecutionTime;\n var bestPath = [{\n oldPos: -1,\n lastComponent: undefined\n }];\n\n // Seed editLength = 0, i.e. the content starts with the same values\n var newPos = this.extractCommon(bestPath[0], newString, oldString, 0, options);\n if (bestPath[0].oldPos + 1 >= oldLen && newPos + 1 >= newLen) {\n // Identity per the equality and tokenizer\n return done(buildValues(self, bestPath[0].lastComponent, newString, oldString, self.useLongestToken));\n }\n\n // Once we hit the right edge of the edit graph on some diagonal k, we can\n // definitely reach the end of the edit graph in no more than k edits, so\n // there's no point in considering any moves to diagonal k+1 any more (from\n // which we're guaranteed to need at least k+1 more edits).\n // Similarly, once we've reached the bottom of the edit graph, there's no\n // point considering moves to lower diagonals.\n // We record this fact by setting minDiagonalToConsider and\n // maxDiagonalToConsider to some finite value once we've hit the edge of\n // the edit graph.\n // This optimization is not faithful to the original algorithm presented in\n // Myers's paper, which instead pointlessly extends D-paths off the end of\n // the edit graph - see page 7 of Myers's paper which notes this point\n // explicitly and illustrates it with a diagram. This has major performance\n // implications for some common scenarios. For instance, to compute a diff\n // where the new text simply appends d characters on the end of the\n // original text of length n, the true Myers algorithm will take O(n+d^2)\n // time while this optimization needs only O(n+d) time.\n var minDiagonalToConsider = -Infinity,\n maxDiagonalToConsider = Infinity;\n\n // Main worker method. checks all permutations of a given edit length for acceptance.\n function execEditLength() {\n for (var diagonalPath = Math.max(minDiagonalToConsider, -editLength); diagonalPath <= Math.min(maxDiagonalToConsider, editLength); diagonalPath += 2) {\n var basePath = void 0;\n var removePath = bestPath[diagonalPath - 1],\n addPath = bestPath[diagonalPath + 1];\n if (removePath) {\n // No one else is going to attempt to use this value, clear it\n bestPath[diagonalPath - 1] = undefined;\n }\n var canAdd = false;\n if (addPath) {\n // what newPos will be after we do an insertion:\n var addPathNewPos = addPath.oldPos - diagonalPath;\n canAdd = addPath && 0 <= addPathNewPos && addPathNewPos < newLen;\n }\n var canRemove = removePath && removePath.oldPos + 1 < oldLen;\n if (!canAdd && !canRemove) {\n // If this path is a terminal then prune\n bestPath[diagonalPath] = undefined;\n continue;\n }\n\n // Select the diagonal that we want to branch from. We select the prior\n // path whose position in the old string is the farthest from the origin\n // and does not pass the bounds of the diff graph\n if (!canRemove || canAdd && removePath.oldPos < addPath.oldPos) {\n basePath = self.addToPath(addPath, true, false, 0, options);\n } else {\n basePath = self.addToPath(removePath, false, true, 1, options);\n }\n newPos = self.extractCommon(basePath, newString, oldString, diagonalPath, options);\n if (basePath.oldPos + 1 >= oldLen && newPos + 1 >= newLen) {\n // If we have hit the end of both strings, then we are done\n return done(buildValues(self, basePath.lastComponent, newString, oldString, self.useLongestToken));\n } else {\n bestPath[diagonalPath] = basePath;\n if (basePath.oldPos + 1 >= oldLen) {\n maxDiagonalToConsider = Math.min(maxDiagonalToConsider, diagonalPath - 1);\n }\n if (newPos + 1 >= newLen) {\n minDiagonalToConsider = Math.max(minDiagonalToConsider, diagonalPath + 1);\n }\n }\n }\n editLength++;\n }\n\n // Performs the length of edit iteration. Is a bit fugly as this has to support the\n // sync and async mode which is never fun. Loops over execEditLength until a value\n // is produced, or until the edit length exceeds options.maxEditLength (if given),\n // in which case it will return undefined.\n if (callback) {\n (function exec() {\n setTimeout(function () {\n if (editLength > maxEditLength || Date.now() > abortAfterTimestamp) {\n return callback();\n }\n if (!execEditLength()) {\n exec();\n }\n }, 0);\n })();\n } else {\n while (editLength <= maxEditLength && Date.now() <= abortAfterTimestamp) {\n var ret = execEditLength();\n if (ret) {\n return ret;\n }\n }\n }\n },\n addToPath: function addToPath(path, added, removed, oldPosInc, options) {\n var last = path.lastComponent;\n if (last && !options.oneChangePerToken && last.added === added && last.removed === removed) {\n return {\n oldPos: path.oldPos + oldPosInc,\n lastComponent: {\n count: last.count + 1,\n added: added,\n removed: removed,\n previousComponent: last.previousComponent\n }\n };\n } else {\n return {\n oldPos: path.oldPos + oldPosInc,\n lastComponent: {\n count: 1,\n added: added,\n removed: removed,\n previousComponent: last\n }\n };\n }\n },\n extractCommon: function extractCommon(basePath, newString, oldString, diagonalPath, options) {\n var newLen = newString.length,\n oldLen = oldString.length,\n oldPos = basePath.oldPos,\n newPos = oldPos - diagonalPath,\n commonCount = 0;\n while (newPos + 1 < newLen && oldPos + 1 < oldLen && this.equals(oldString[oldPos + 1], newString[newPos + 1], options)) {\n newPos++;\n oldPos++;\n commonCount++;\n if (options.oneChangePerToken) {\n basePath.lastComponent = {\n count: 1,\n previousComponent: basePath.lastComponent,\n added: false,\n removed: false\n };\n }\n }\n if (commonCount && !options.oneChangePerToken) {\n basePath.lastComponent = {\n count: commonCount,\n previousComponent: basePath.lastComponent,\n added: false,\n removed: false\n };\n }\n basePath.oldPos = oldPos;\n return newPos;\n },\n equals: function equals(left, right, options) {\n if (options.comparator) {\n return options.comparator(left, right);\n } else {\n return left === right || options.ignoreCase && left.toLowerCase() === right.toLowerCase();\n }\n },\n removeEmpty: function removeEmpty(array) {\n var ret = [];\n for (var i = 0; i < array.length; i++) {\n if (array[i]) {\n ret.push(array[i]);\n }\n }\n return ret;\n },\n castInput: function castInput(value) {\n return value;\n },\n tokenize: function tokenize(value) {\n return Array.from(value);\n },\n join: function join(chars) {\n return chars.join('');\n },\n postProcess: function postProcess(changeObjects) {\n return changeObjects;\n }\n};\nfunction buildValues(diff, lastComponent, newString, oldString, useLongestToken) {\n // First we convert our linked list of components in reverse order to an\n // array in the right order:\n var components = [];\n var nextComponent;\n while (lastComponent) {\n components.push(lastComponent);\n nextComponent = lastComponent.previousComponent;\n delete lastComponent.previousComponent;\n lastComponent = nextComponent;\n }\n components.reverse();\n var componentPos = 0,\n componentLen = components.length,\n newPos = 0,\n oldPos = 0;\n for (; componentPos < componentLen; componentPos++) {\n var component = components[componentPos];\n if (!component.removed) {\n if (!component.added && useLongestToken) {\n var value = newString.slice(newPos, newPos + component.count);\n value = value.map(function (value, i) {\n var oldValue = oldString[oldPos + i];\n return oldValue.length > value.length ? oldValue : value;\n });\n component.value = diff.join(value);\n } else {\n component.value = diff.join(newString.slice(newPos, newPos + component.count));\n }\n newPos += component.count;\n\n // Common case\n if (!component.added) {\n oldPos += component.count;\n }\n } else {\n component.value = diff.join(oldString.slice(oldPos, oldPos + component.count));\n oldPos += component.count;\n }\n }\n return components;\n}\n\nvar characterDiff = new Diff();\nfunction diffChars(oldStr, newStr, options) {\n return characterDiff.diff(oldStr, newStr, options);\n}\n\nfunction longestCommonPrefix(str1, str2) {\n var i;\n for (i = 0; i < str1.length && i < str2.length; i++) {\n if (str1[i] != str2[i]) {\n return str1.slice(0, i);\n }\n }\n return str1.slice(0, i);\n}\nfunction longestCommonSuffix(str1, str2) {\n var i;\n\n // Unlike longestCommonPrefix, we need a special case to handle all scenarios\n // where we return the empty string since str1.slice(-0) will return the\n // entire string.\n if (!str1 || !str2 || str1[str1.length - 1] != str2[str2.length - 1]) {\n return '';\n }\n for (i = 0; i < str1.length && i < str2.length; i++) {\n if (str1[str1.length - (i + 1)] != str2[str2.length - (i + 1)]) {\n return str1.slice(-i);\n }\n }\n return str1.slice(-i);\n}\nfunction replacePrefix(string, oldPrefix, newPrefix) {\n if (string.slice(0, oldPrefix.length) != oldPrefix) {\n throw Error(\"string \".concat(JSON.stringify(string), \" doesn't start with prefix \").concat(JSON.stringify(oldPrefix), \"; this is a bug\"));\n }\n return newPrefix + string.slice(oldPrefix.length);\n}\nfunction replaceSuffix(string, oldSuffix, newSuffix) {\n if (!oldSuffix) {\n return string + newSuffix;\n }\n if (string.slice(-oldSuffix.length) != oldSuffix) {\n throw Error(\"string \".concat(JSON.stringify(string), \" doesn't end with suffix \").concat(JSON.stringify(oldSuffix), \"; this is a bug\"));\n }\n return string.slice(0, -oldSuffix.length) + newSuffix;\n}\nfunction removePrefix(string, oldPrefix) {\n return replacePrefix(string, oldPrefix, '');\n}\nfunction removeSuffix(string, oldSuffix) {\n return replaceSuffix(string, oldSuffix, '');\n}\nfunction maximumOverlap(string1, string2) {\n return string2.slice(0, overlapCount(string1, string2));\n}\n\n// Nicked from https://stackoverflow.com/a/60422853/1709587\nfunction overlapCount(a, b) {\n // Deal with cases where the strings differ in length\n var startA = 0;\n if (a.length > b.length) {\n startA = a.length - b.length;\n }\n var endB = b.length;\n if (a.length < b.length) {\n endB = a.length;\n }\n // Create a back-reference for each index\n // that should be followed in case of a mismatch.\n // We only need B to make these references:\n var map = Array(endB);\n var k = 0; // Index that lags behind j\n map[0] = 0;\n for (var j = 1; j < endB; j++) {\n if (b[j] == b[k]) {\n map[j] = map[k]; // skip over the same character (optional optimisation)\n } else {\n map[j] = k;\n }\n while (k > 0 && b[j] != b[k]) {\n k = map[k];\n }\n if (b[j] == b[k]) {\n k++;\n }\n }\n // Phase 2: use these references while iterating over A\n k = 0;\n for (var i = startA; i < a.length; i++) {\n while (k > 0 && a[i] != b[k]) {\n k = map[k];\n }\n if (a[i] == b[k]) {\n k++;\n }\n }\n return k;\n}\n\n/**\n * Returns true if the string consistently uses Windows line endings.\n */\nfunction hasOnlyWinLineEndings(string) {\n return string.includes('\\r\\n') && !string.startsWith('\\n') && !string.match(/[^\\r]\\n/);\n}\n\n/**\n * Returns true if the string consistently uses Unix line endings.\n */\nfunction hasOnlyUnixLineEndings(string) {\n return !string.includes('\\r\\n') && string.includes('\\n');\n}\n\n// Based on https://en.wikipedia.org/wiki/Latin_script_in_Unicode\n//\n// Ranges and exceptions:\n// Latin-1 Supplement, 0080–00FF\n// - U+00D7 × Multiplication sign\n// - U+00F7 ÷ Division sign\n// Latin Extended-A, 0100–017F\n// Latin Extended-B, 0180–024F\n// IPA Extensions, 0250–02AF\n// Spacing Modifier Letters, 02B0–02FF\n// - U+02C7 ˇ &#711; Caron\n// - U+02D8 ˘ &#728; Breve\n// - U+02D9 ˙ &#729; Dot Above\n// - U+02DA ˚ &#730; Ring Above\n// - U+02DB ˛ &#731; Ogonek\n// - U+02DC ˜ &#732; Small Tilde\n// - U+02DD ˝ &#733; Double Acute Accent\n// Latin Extended Additional, 1E00–1EFF\nvar extendedWordChars = \"a-zA-Z0-9_\\\\u{C0}-\\\\u{FF}\\\\u{D8}-\\\\u{F6}\\\\u{F8}-\\\\u{2C6}\\\\u{2C8}-\\\\u{2D7}\\\\u{2DE}-\\\\u{2FF}\\\\u{1E00}-\\\\u{1EFF}\";\n\n// Each token is one of the following:\n// - A punctuation mark plus the surrounding whitespace\n// - A word plus the surrounding whitespace\n// - Pure whitespace (but only in the special case where this the entire text\n// is just whitespace)\n//\n// We have to include surrounding whitespace in the tokens because the two\n// alternative approaches produce horribly broken results:\n// * If we just discard the whitespace, we can't fully reproduce the original\n// text from the sequence of tokens and any attempt to render the diff will\n// get the whitespace wrong.\n// * If we have separate tokens for whitespace, then in a typical text every\n// second token will be a single space character. But this often results in\n// the optimal diff between two texts being a perverse one that preserves\n// the spaces between words but deletes and reinserts actual common words.\n// See https://github.com/kpdecker/jsdiff/issues/160#issuecomment-1866099640\n// for an example.\n//\n// Keeping the surrounding whitespace of course has implications for .equals\n// and .join, not just .tokenize.\n\n// This regex does NOT fully implement the tokenization rules described above.\n// Instead, it gives runs of whitespace their own \"token\". The tokenize method\n// then handles stitching whitespace tokens onto adjacent word or punctuation\n// tokens.\nvar tokenizeIncludingWhitespace = new RegExp(\"[\".concat(extendedWordChars, \"]+|\\\\s+|[^\").concat(extendedWordChars, \"]\"), 'ug');\nvar wordDiff = new Diff();\nwordDiff.equals = function (left, right, options) {\n if (options.ignoreCase) {\n left = left.toLowerCase();\n right = right.toLowerCase();\n }\n return left.trim() === right.trim();\n};\nwordDiff.tokenize = function (value) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var parts;\n if (options.intlSegmenter) {\n if (options.intlSegmenter.resolvedOptions().granularity != 'word') {\n throw new Error('The segmenter passed must have a granularity of \"word\"');\n }\n parts = Array.from(options.intlSegmenter.segment(value), function (segment) {\n return segment.segment;\n });\n } else {\n parts = value.match(tokenizeIncludingWhitespace) || [];\n }\n var tokens = [];\n var prevPart = null;\n parts.forEach(function (part) {\n if (/\\s/.test(part)) {\n if (prevPart == null) {\n tokens.push(part);\n } else {\n tokens.push(tokens.pop() + part);\n }\n } else if (/\\s/.test(prevPart)) {\n if (tokens[tokens.length - 1] == prevPart) {\n tokens.push(tokens.pop() + part);\n } else {\n tokens.push(prevPart + part);\n }\n } else {\n tokens.push(part);\n }\n prevPart = part;\n });\n return tokens;\n};\nwordDiff.join = function (tokens) {\n // Tokens being joined here will always have appeared consecutively in the\n // same text, so we can simply strip off the leading whitespace from all the\n // tokens except the first (and except any whitespace-only tokens - but such\n // a token will always be the first and only token anyway) and then join them\n // and the whitespace around words and punctuation will end up correct.\n return tokens.map(function (token, i) {\n if (i == 0) {\n return token;\n } else {\n return token.replace(/^\\s+/, '');\n }\n }).join('');\n};\nwordDiff.postProcess = function (changes, options) {\n if (!changes || options.oneChangePerToken) {\n return changes;\n }\n var lastKeep = null;\n // Change objects representing any insertion or deletion since the last\n // \"keep\" change object. There can be at most one of each.\n var insertion = null;\n var deletion = null;\n changes.forEach(function (change) {\n if (change.added) {\n insertion = change;\n } else if (change.removed) {\n deletion = change;\n } else {\n if (insertion || deletion) {\n // May be false at start of text\n dedupeWhitespaceInChangeObjects(lastKeep, deletion, insertion, change);\n }\n lastKeep = change;\n insertion = null;\n deletion = null;\n }\n });\n if (insertion || deletion) {\n dedupeWhitespaceInChangeObjects(lastKeep, deletion, insertion, null);\n }\n return changes;\n};\nfunction diffWords(oldStr, newStr, options) {\n // This option has never been documented and never will be (it's clearer to\n // just call `diffWordsWithSpace` directly if you need that behavior), but\n // has existed in jsdiff for a long time, so we retain support for it here\n // for the sake of backwards compatibility.\n if ((options === null || options === void 0 ? void 0 : options.ignoreWhitespace) != null && !options.ignoreWhitespace) {\n return diffWordsWithSpace(oldStr, newStr, options);\n }\n return wordDiff.diff(oldStr, newStr, options);\n}\nfunction dedupeWhitespaceInChangeObjects(startKeep, deletion, insertion, endKeep) {\n // Before returning, we tidy up the leading and trailing whitespace of the\n // change objects to eliminate cases where trailing whitespace in one object\n // is repeated as leading whitespace in the next.\n // Below are examples of the outcomes we want here to explain the code.\n // I=insert, K=keep, D=delete\n // 1. diffing 'foo bar baz' vs 'foo baz'\n // Prior to cleanup, we have K:'foo ' D:' bar ' K:' baz'\n // After cleanup, we want: K:'foo ' D:'bar ' K:'baz'\n //\n // 2. Diffing 'foo bar baz' vs 'foo qux baz'\n // Prior to cleanup, we have K:'foo ' D:' bar ' I:' qux ' K:' baz'\n // After cleanup, we want K:'foo ' D:'bar' I:'qux' K:' baz'\n //\n // 3. Diffing 'foo\\nbar baz' vs 'foo baz'\n // Prior to cleanup, we have K:'foo ' D:'\\nbar ' K:' baz'\n // After cleanup, we want K'foo' D:'\\nbar' K:' baz'\n //\n // 4. Diffing 'foo baz' vs 'foo\\nbar baz'\n // Prior to cleanup, we have K:'foo\\n' I:'\\nbar ' K:' baz'\n // After cleanup, we ideally want K'foo' I:'\\nbar' K:' baz'\n // but don't actually manage this currently (the pre-cleanup change\n // objects don't contain enough information to make it possible).\n //\n // 5. Diffing 'foo bar baz' vs 'foo baz'\n // Prior to cleanup, we have K:'foo ' D:' bar ' K:' baz'\n // After cleanup, we want K:'foo ' D:' bar ' K:'baz'\n //\n // Our handling is unavoidably imperfect in the case where there's a single\n // indel between keeps and the whitespace has changed. For instance, consider\n // diffing 'foo\\tbar\\nbaz' vs 'foo baz'. Unless we create an extra change\n // object to represent the insertion of the space character (which isn't even\n // a token), we have no way to avoid losing information about the texts'\n // original whitespace in the result we return. Still, we do our best to\n // output something that will look sensible if we e.g. print it with\n // insertions in green and deletions in red.\n\n // Between two \"keep\" change objects (or before the first or after the last\n // change object), we can have either:\n // * A \"delete\" followed by an \"insert\"\n // * Just an \"insert\"\n // * Just a \"delete\"\n // We handle the three cases separately.\n if (deletion && insertion) {\n var oldWsPrefix = deletion.value.match(/^\\s*/)[0];\n var oldWsSuffix = deletion.value.match(/\\s*$/)[0];\n var newWsPrefix = insertion.value.match(/^\\s*/)[0];\n var newWsSuffix = insertion.value.match(/\\s*$/)[0];\n if (startKeep) {\n var commonWsPrefix = longestCommonPrefix(oldWsPrefix, newWsPrefix);\n startKeep.value = replaceSuffix(startKeep.value, newWsPrefix, commonWsPrefix);\n deletion.value = removePrefix(deletion.value, commonWsPrefix);\n insertion.value = removePrefix(insertion.value, commonWsPrefix);\n }\n if (endKeep) {\n var commonWsSuffix = longestCommonSuffix(oldWsSuffix, newWsSuffix);\n endKeep.value = replacePrefix(endKeep.value, newWsSuffix, commonWsSuffix);\n deletion.value = removeSuffix(deletion.value, commonWsSuffix);\n insertion.value = removeSuffix(insertion.value, commonWsSuffix);\n }\n } else if (insertion) {\n // The whitespaces all reflect what was in the new text rather than\n // the old, so we essentially have no information about whitespace\n // insertion or deletion. We just want to dedupe the whitespace.\n // We do that by having each change object keep its trailing\n // whitespace and deleting duplicate leading whitespace where\n // present.\n if (startKeep) {\n insertion.value = insertion.value.replace(/^\\s*/, '');\n }\n if (endKeep) {\n endKeep.value = endKeep.value.replace(/^\\s*/, '');\n }\n // otherwise we've got a deletion and no insertion\n } else if (startKeep && endKeep) {\n var newWsFull = endKeep.value.match(/^\\s*/)[0],\n delWsStart = deletion.value.match(/^\\s*/)[0],\n delWsEnd = deletion.value.match(/\\s*$/)[0];\n\n // Any whitespace that comes straight after startKeep in both the old and\n // new texts, assign to startKeep and remove from the deletion.\n var newWsStart = longestCommonPrefix(newWsFull, delWsStart);\n deletion.value = removePrefix(deletion.value, newWsStart);\n\n // Any whitespace that comes straight before endKeep in both the old and\n // new texts, and hasn't already been assigned to startKeep, assign to\n // endKeep and remove from the deletion.\n var newWsEnd = longestCommonSuffix(removePrefix(newWsFull, newWsStart), delWsEnd);\n deletion.value = removeSuffix(deletion.value, newWsEnd);\n endKeep.value = replacePrefix(endKeep.value, newWsFull, newWsEnd);\n\n // If there's any whitespace from the new text that HASN'T already been\n // assigned, assign it to the start:\n startKeep.value = replaceSuffix(startKeep.value, newWsFull, newWsFull.slice(0, newWsFull.length - newWsEnd.length));\n } else if (endKeep) {\n // We are at the start of the text. Preserve all the whitespace on\n // endKeep, and just remove whitespace from the end of deletion to the\n // extent that it overlaps with the start of endKeep.\n var endKeepWsPrefix = endKeep.value.match(/^\\s*/)[0];\n var deletionWsSuffix = deletion.value.match(/\\s*$/)[0];\n var overlap = maximumOverlap(deletionWsSuffix, endKeepWsPrefix);\n deletion.value = removeSuffix(deletion.value, overlap);\n } else if (startKeep) {\n // We are at the END of the text. Preserve all the whitespace on\n // startKeep, and just remove whitespace from the start of deletion to\n // the extent that it overlaps with the end of startKeep.\n var startKeepWsSuffix = startKeep.value.match(/\\s*$/)[0];\n var deletionWsPrefix = deletion.value.match(/^\\s*/)[0];\n var _overlap = maximumOverlap(startKeepWsSuffix, deletionWsPrefix);\n deletion.value = removePrefix(deletion.value, _overlap);\n }\n}\nvar wordWithSpaceDiff = new Diff();\nwordWithSpaceDiff.tokenize = function (value) {\n // Slightly different to the tokenizeIncludingWhitespace regex used above in\n // that this one treats each individual newline as a distinct tokens, rather\n // than merging them into other surrounding whitespace. This was requested\n // in https://github.com/kpdecker/jsdiff/issues/180 &\n // https://github.com/kpdecker/jsdiff/issues/211\n var regex = new RegExp(\"(\\\\r?\\\\n)|[\".concat(extendedWordChars, \"]+|[^\\\\S\\\\n\\\\r]+|[^\").concat(extendedWordChars, \"]\"), 'ug');\n return value.match(regex) || [];\n};\nfunction diffWordsWithSpace(oldStr, newStr, options) {\n return wordWithSpaceDiff.diff(oldStr, newStr, options);\n}\n\nfunction generateOptions(options, defaults) {\n if (typeof options === 'function') {\n defaults.callback = options;\n } else if (options) {\n for (var name in options) {\n /* istanbul ignore else */\n if (options.hasOwnProperty(name)) {\n defaults[name] = options[name];\n }\n }\n }\n return defaults;\n}\n\nvar lineDiff = new Diff();\nlineDiff.tokenize = function (value, options) {\n if (options.stripTrailingCr) {\n // remove one \\r before \\n to match GNU diff's --strip-trailing-cr behavior\n value = value.replace(/\\r\\n/g, '\\n');\n }\n var retLines = [],\n linesAndNewlines = value.split(/(\\n|\\r\\n)/);\n\n // Ignore the final empty token that occurs if the string ends with a new line\n if (!linesAndNewlines[linesAndNewlines.length - 1]) {\n linesAndNewlines.pop();\n }\n\n // Merge the content and line separators into single tokens\n for (var i = 0; i < linesAndNewlines.length; i++) {\n var line = linesAndNewlines[i];\n if (i % 2 && !options.newlineIsToken) {\n retLines[retLines.length - 1] += line;\n } else {\n retLines.push(line);\n }\n }\n return retLines;\n};\nlineDiff.equals = function (left, right, options) {\n // If we're ignoring whitespace, we need to normalise lines by stripping\n // whitespace before checking equality. (This has an annoying interaction\n // with newlineIsToken that requires special handling: if newlines get their\n // own token, then we DON'T want to trim the *newline* tokens down to empty\n // strings, since this would cause us to treat whitespace-only line content\n // as equal to a separator between lines, which would be weird and\n // inconsistent with the documented behavior of the options.)\n if (options.ignoreWhitespace) {\n if (!options.newlineIsToken || !left.includes('\\n')) {\n left = left.trim();\n }\n if (!options.newlineIsToken || !right.includes('\\n')) {\n right = right.trim();\n }\n } else if (options.ignoreNewlineAtEof && !options.newlineIsToken) {\n if (left.endsWith('\\n')) {\n left = left.slice(0, -1);\n }\n if (right.endsWith('\\n')) {\n right = right.slice(0, -1);\n }\n }\n return Diff.prototype.equals.call(this, left, right, options);\n};\nfunction diffLines(oldStr, newStr, callback) {\n return lineDiff.diff(oldStr, newStr, callback);\n}\n\n// Kept for backwards compatibility. This is a rather arbitrary wrapper method\n// that just calls `diffLines` with `ignoreWhitespace: true`. It's confusing to\n// have two ways to do exactly the same thing in the API, so we no longer\n// document this one (library users should explicitly use `diffLines` with\n// `ignoreWhitespace: true` instead) but we keep it around to maintain\n// compatibility with code that used old versions.\nfunction diffTrimmedLines(oldStr, newStr, callback) {\n var options = generateOptions(callback, {\n ignoreWhitespace: true\n });\n return lineDiff.diff(oldStr, newStr, options);\n}\n\nvar sentenceDiff = new Diff();\nsentenceDiff.tokenize = function (value) {\n return value.split(/(\\S.+?[.!?])(?=\\s+|$)/);\n};\nfunction diffSentences(oldStr, newStr, callback) {\n return sentenceDiff.diff(oldStr, newStr, callback);\n}\n\nvar cssDiff = new Diff();\ncssDiff.tokenize = function (value) {\n return value.split(/([{}:;,]|\\s+)/);\n};\nfunction diffCss(oldStr, newStr, callback) {\n return cssDiff.diff(oldStr, newStr, callback);\n}\n\nfunction ownKeys(e, r) {\n var t = Object.keys(e);\n if (Object.getOwnPropertySymbols) {\n var o = Object.getOwnPropertySymbols(e);\n r && (o = o.filter(function (r) {\n return Object.getOwnPropertyDescriptor(e, r).enumerable;\n })), t.push.apply(t, o);\n }\n return t;\n}\nfunction _objectSpread2(e) {\n for (var r = 1; r < arguments.length; r++) {\n var t = null != arguments[r] ? arguments[r] : {};\n r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {\n _defineProperty(e, r, t[r]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {\n Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));\n });\n }\n return e;\n}\nfunction _toPrimitive(t, r) {\n if (\"object\" != typeof t || !t) return t;\n var e = t[Symbol.toPrimitive];\n if (void 0 !== e) {\n var i = e.call(t, r || \"default\");\n if (\"object\" != typeof i) return i;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (\"string\" === r ? String : Number)(t);\n}\nfunction _toPropertyKey(t) {\n var i = _toPrimitive(t, \"string\");\n return \"symbol\" == typeof i ? i : i + \"\";\n}\nfunction _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, _typeof(o);\n}\nfunction _defineProperty(obj, key, value) {\n key = _toPropertyKey(key);\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\nfunction _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n return arr2;\n}\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nvar jsonDiff = new Diff();\n// Discriminate between two lines of pretty-printed, serialized JSON where one of them has a\n// dangling comma and the other doesn't. Turns out including the dangling comma yields the nicest output:\njsonDiff.useLongestToken = true;\njsonDiff.tokenize = lineDiff.tokenize;\njsonDiff.castInput = function (value, options) {\n var undefinedReplacement = options.undefinedReplacement,\n _options$stringifyRep = options.stringifyReplacer,\n stringifyReplacer = _options$stringifyRep === void 0 ? function (k, v) {\n return typeof v === 'undefined' ? undefinedReplacement : v;\n } : _options$stringifyRep;\n return typeof value === 'string' ? value : JSON.stringify(canonicalize(value, null, null, stringifyReplacer), stringifyReplacer, ' ');\n};\njsonDiff.equals = function (left, right, options) {\n return Diff.prototype.equals.call(jsonDiff, left.replace(/,([\\r\\n])/g, '$1'), right.replace(/,([\\r\\n])/g, '$1'), options);\n};\nfunction diffJson(oldObj, newObj, options) {\n return jsonDiff.diff(oldObj, newObj, options);\n}\n\n// This function handles the presence of circular references by bailing out when encountering an\n// object that is already on the \"stack\" of items being processed. Accepts an optional replacer\nfunction canonicalize(obj, stack, replacementStack, replacer, key) {\n stack = stack || [];\n replacementStack = replacementStack || [];\n if (replacer) {\n obj = replacer(key, obj);\n }\n var i;\n for (i = 0; i < stack.length; i += 1) {\n if (stack[i] === obj) {\n return replacementStack[i];\n }\n }\n var canonicalizedObj;\n if ('[object Array]' === Object.prototype.toString.call(obj)) {\n stack.push(obj);\n canonicalizedObj = new Array(obj.length);\n replacementStack.push(canonicalizedObj);\n for (i = 0; i < obj.length; i += 1) {\n canonicalizedObj[i] = canonicalize(obj[i], stack, replacementStack, replacer, key);\n }\n stack.pop();\n replacementStack.pop();\n return canonicalizedObj;\n }\n if (obj && obj.toJSON) {\n obj = obj.toJSON();\n }\n if (_typeof(obj) === 'object' && obj !== null) {\n stack.push(obj);\n canonicalizedObj = {};\n replacementStack.push(canonicalizedObj);\n var sortedKeys = [],\n _key;\n for (_key in obj) {\n /* istanbul ignore else */\n if (Object.prototype.hasOwnProperty.call(obj, _key)) {\n sortedKeys.push(_key);\n }\n }\n sortedKeys.sort();\n for (i = 0; i < sortedKeys.length; i += 1) {\n _key = sortedKeys[i];\n canonicalizedObj[_key] = canonicalize(obj[_key], stack, replacementStack, replacer, _key);\n }\n stack.pop();\n replacementStack.pop();\n } else {\n canonicalizedObj = obj;\n }\n return canonicalizedObj;\n}\n\nvar arrayDiff = new Diff();\narrayDiff.tokenize = function (value) {\n return value.slice();\n};\narrayDiff.join = arrayDiff.removeEmpty = function (value) {\n return value;\n};\nfunction diffArrays(oldArr, newArr, callback) {\n return arrayDiff.diff(oldArr, newArr, callback);\n}\n\nfunction unixToWin(patch) {\n if (Array.isArray(patch)) {\n return patch.map(unixToWin);\n }\n return _objectSpread2(_objectSpread2({}, patch), {}, {\n hunks: patch.hunks.map(function (hunk) {\n return _objectSpread2(_objectSpread2({}, hunk), {}, {\n lines: hunk.lines.map(function (line, i) {\n var _hunk$lines;\n return line.startsWith('\\\\') || line.endsWith('\\r') || (_hunk$lines = hunk.lines[i + 1]) !== null && _hunk$lines !== void 0 && _hunk$lines.startsWith('\\\\') ? line : line + '\\r';\n })\n });\n })\n });\n}\nfunction winToUnix(patch) {\n if (Array.isArray(patch)) {\n return patch.map(winToUnix);\n }\n return _objectSpread2(_objectSpread2({}, patch), {}, {\n hunks: patch.hunks.map(function (hunk) {\n return _objectSpread2(_objectSpread2({}, hunk), {}, {\n lines: hunk.lines.map(function (line) {\n return line.endsWith('\\r') ? line.substring(0, line.length - 1) : line;\n })\n });\n })\n });\n}\n\n/**\n * Returns true if the patch consistently uses Unix line endings (or only involves one line and has\n * no line endings).\n */\nfunction isUnix(patch) {\n if (!Array.isArray(patch)) {\n patch = [patch];\n }\n return !patch.some(function (index) {\n return index.hunks.some(function (hunk) {\n return hunk.lines.some(function (line) {\n return !line.startsWith('\\\\') && line.endsWith('\\r');\n });\n });\n });\n}\n\n/**\n * Returns true if the patch uses Windows line endings and only Windows line endings.\n */\nfunction isWin(patch) {\n if (!Array.isArray(patch)) {\n patch = [patch];\n }\n return patch.some(function (index) {\n return index.hunks.some(function (hunk) {\n return hunk.lines.some(function (line) {\n return line.endsWith('\\r');\n });\n });\n }) && patch.every(function (index) {\n return index.hunks.every(function (hunk) {\n return hunk.lines.every(function (line, i) {\n var _hunk$lines2;\n return line.startsWith('\\\\') || line.endsWith('\\r') || ((_hunk$lines2 = hunk.lines[i + 1]) === null || _hunk$lines2 === void 0 ? void 0 : _hunk$lines2.startsWith('\\\\'));\n });\n });\n });\n}\n\nfunction parsePatch(uniDiff) {\n var diffstr = uniDiff.split(/\\n/),\n list = [],\n i = 0;\n function parseIndex() {\n var index = {};\n list.push(index);\n\n // Parse diff metadata\n while (i < diffstr.length) {\n var line = diffstr[i];\n\n // File header found, end parsing diff metadata\n if (/^(\\-\\-\\-|\\+\\+\\+|@@)\\s/.test(line)) {\n break;\n }\n\n // Diff index\n var header = /^(?:Index:|diff(?: -r \\w+)+)\\s+(.+?)\\s*$/.exec(line);\n if (header) {\n index.index = header[1];\n }\n i++;\n }\n\n // Parse file headers if they are defined. Unified diff requires them, but\n // there's no technical issues to have an isolated hunk without file header\n parseFileHeader(index);\n parseFileHeader(index);\n\n // Parse hunks\n index.hunks = [];\n while (i < diffstr.length) {\n var _line = diffstr[i];\n if (/^(Index:\\s|diff\\s|\\-\\-\\-\\s|\\+\\+\\+\\s|===================================================================)/.test(_line)) {\n break;\n } else if (/^@@/.test(_line)) {\n index.hunks.push(parseHunk());\n } else if (_line) {\n throw new Error('Unknown line ' + (i + 1) + ' ' + JSON.stringify(_line));\n } else {\n i++;\n }\n }\n }\n\n // Parses the --- and +++ headers, if none are found, no lines\n // are consumed.\n function parseFileHeader(index) {\n var fileHeader = /^(---|\\+\\+\\+)\\s+(.*)\\r?$/.exec(diffstr[i]);\n if (fileHeader) {\n var keyPrefix = fileHeader[1] === '---' ? 'old' : 'new';\n var data = fileHeader[2].split('\\t', 2);\n var fileName = data[0].replace(/\\\\\\\\/g, '\\\\');\n if (/^\".*\"$/.test(fileName)) {\n fileName = fileName.substr(1, fileName.length - 2);\n }\n index[keyPrefix + 'FileName'] = fileName;\n index[keyPrefix + 'Header'] = (data[1] || '').trim();\n i++;\n }\n }\n\n // Parses a hunk\n // This assumes that we are at the start of a hunk.\n function parseHunk() {\n var chunkHeaderIndex = i,\n chunkHeaderLine = diffstr[i++],\n chunkHeader = chunkHeaderLine.split(/@@ -(\\d+)(?:,(\\d+))? \\+(\\d+)(?:,(\\d+))? @@/);\n var hunk = {\n oldStart: +chunkHeader[1],\n oldLines: typeof chunkHeader[2] === 'undefined' ? 1 : +chunkHeader[2],\n newStart: +chunkHeader[3],\n newLines: typeof chunkHeader[4] === 'undefined' ? 1 : +chunkHeader[4],\n lines: []\n };\n\n // Unified Diff Format quirk: If the chunk size is 0,\n // the first number is one lower than one would expect.\n // https://www.artima.com/weblogs/viewpost.jsp?thread=164293\n if (hunk.oldLines === 0) {\n hunk.oldStart += 1;\n }\n if (hunk.newLines === 0) {\n hunk.newStart += 1;\n }\n var addCount = 0,\n removeCount = 0;\n for (; i < diffstr.length && (removeCount < hunk.oldLines || addCount < hunk.newLines || (_diffstr$i = diffstr[i]) !== null && _diffstr$i !== void 0 && _diffstr$i.startsWith('\\\\')); i++) {\n var _diffstr$i;\n var operation = diffstr[i].length == 0 && i != diffstr.length - 1 ? ' ' : diffstr[i][0];\n if (operation === '+' || operation === '-' || operation === ' ' || operation === '\\\\') {\n hunk.lines.push(diffstr[i]);\n if (operation === '+') {\n addCount++;\n } else if (operation === '-') {\n removeCount++;\n } else if (operation === ' ') {\n addCount++;\n removeCount++;\n }\n } else {\n throw new Error(\"Hunk at line \".concat(chunkHeaderIndex + 1, \" contained invalid line \").concat(diffstr[i]));\n }\n }\n\n // Handle the empty block count case\n if (!addCount && hunk.newLines === 1) {\n hunk.newLines = 0;\n }\n if (!removeCount && hunk.oldLines === 1) {\n hunk.oldLines = 0;\n }\n\n // Perform sanity checking\n if (addCount !== hunk.newLines) {\n throw new Error('Added line count did not match for hunk at line ' + (chunkHeaderIndex + 1));\n }\n if (removeCount !== hunk.oldLines) {\n throw new Error('Removed line count did not match for hunk at line ' + (chunkHeaderIndex + 1));\n }\n return hunk;\n }\n while (i < diffstr.length) {\n parseIndex();\n }\n return list;\n}\n\n// Iterator that traverses in the range of [min, max], stepping\n// by distance from a given start position. I.e. for [0, 4], with\n// start of 2, this will iterate 2, 3, 1, 4, 0.\nfunction distanceIterator (start, minLine, maxLine) {\n var wantForward = true,\n backwardExhausted = false,\n forwardExhausted = false,\n localOffset = 1;\n return function iterator() {\n if (wantForward && !forwardExhausted) {\n if (backwardExhausted) {\n localOffset++;\n } else {\n wantForward = false;\n }\n\n // Check if trying to fit beyond text length, and if not, check it fits\n // after offset location (or desired location on first iteration)\n if (start + localOffset <= maxLine) {\n return start + localOffset;\n }\n forwardExhausted = true;\n }\n if (!backwardExhausted) {\n if (!forwardExhausted) {\n wantForward = true;\n }\n\n // Check if trying to fit before text beginning, and if not, check it fits\n // before offset location\n if (minLine <= start - localOffset) {\n return start - localOffset++;\n }\n backwardExhausted = true;\n return iterator();\n }\n\n // We tried to fit hunk before text beginning and beyond text length, then\n // hunk can't fit on the text. Return undefined\n };\n}\n\nfunction applyPatch(source, uniDiff) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n if (typeof uniDiff === 'string') {\n uniDiff = parsePatch(uniDiff);\n }\n if (Array.isArray(uniDiff)) {\n if (uniDiff.length > 1) {\n throw new Error('applyPatch only works with a single input.');\n }\n uniDiff = uniDiff[0];\n }\n if (options.autoConvertLineEndings || options.autoConvertLineEndings == null) {\n if (hasOnlyWinLineEndings(source) && isUnix(uniDiff)) {\n uniDiff = unixToWin(uniDiff);\n } else if (hasOnlyUnixLineEndings(source) && isWin(uniDiff)) {\n uniDiff = winToUnix(uniDiff);\n }\n }\n\n // Apply the diff to the input\n var lines = source.split('\\n'),\n hunks = uniDiff.hunks,\n compareLine = options.compareLine || function (lineNumber, line, operation, patchContent) {\n return line === patchContent;\n },\n fuzzFactor = options.fuzzFactor || 0,\n minLine = 0;\n if (fuzzFactor < 0 || !Number.isInteger(fuzzFactor)) {\n throw new Error('fuzzFactor must be a non-negative integer');\n }\n\n // Special case for empty patch.\n if (!hunks.length) {\n return source;\n }\n\n // Before anything else, handle EOFNL insertion/removal. If the patch tells us to make a change\n // to the EOFNL that is redundant/impossible - i.e. to remove a newline that's not there, or add a\n // newline that already exists - then we either return false and fail to apply the patch (if\n // fuzzFactor is 0) or simply ignore the problem and do nothing (if fuzzFactor is >0).\n // If we do need to remove/add a newline at EOF, this will always be in the final hunk:\n var prevLine = '',\n removeEOFNL = false,\n addEOFNL = false;\n for (var i = 0; i < hunks[hunks.length - 1].lines.length; i++) {\n var line = hunks[hunks.length - 1].lines[i];\n if (line[0] == '\\\\') {\n if (prevLine[0] == '+') {\n removeEOFNL = true;\n } else if (prevLine[0] == '-') {\n addEOFNL = true;\n }\n }\n prevLine = line;\n }\n if (removeEOFNL) {\n if (addEOFNL) {\n // This means the final line gets changed but doesn't have a trailing newline in either the\n // original or patched version. In that case, we do nothing if fuzzFactor > 0, and if\n // fuzzFactor is 0, we simply validate that the source file has no trailing newline.\n if (!fuzzFactor && lines[lines.length - 1] == '') {\n return false;\n }\n } else if (lines[lines.length - 1] == '') {\n lines.pop();\n } else if (!fuzzFactor) {\n return false;\n }\n } else if (addEOFNL) {\n if (lines[lines.length - 1] != '') {\n lines.push('');\n } else if (!fuzzFactor) {\n return false;\n }\n }\n\n /**\n * Checks if the hunk can be made to fit at the provided location with at most `maxErrors`\n * insertions, substitutions, or deletions, while ensuring also that:\n * - lines deleted in the hunk match exactly, and\n * - wherever an insertion operation or block of insertion operations appears in the hunk, the\n * immediately preceding and following lines of context match exactly\n *\n * `toPos` should be set such that lines[toPos] is meant to match hunkLines[0].\n *\n * If the hunk can be applied, returns an object with properties `oldLineLastI` and\n * `replacementLines`. Otherwise, returns null.\n */\n function applyHunk(hunkLines, toPos, maxErrors) {\n var hunkLinesI = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n var lastContextLineMatched = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;\n var patchedLines = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : [];\n var patchedLinesLength = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : 0;\n var nConsecutiveOldContextLines = 0;\n var nextContextLineMustMatch = false;\n for (; hunkLinesI < hunkLines.length; hunkLinesI++) {\n var hunkLine = hunkLines[hunkLinesI],\n operation = hunkLine.length > 0 ? hunkLine[0] : ' ',\n content = hunkLine.length > 0 ? hunkLine.substr(1) : hunkLine;\n if (operation === '-') {\n if (compareLine(toPos + 1, lines[toPos], operation, content)) {\n toPos++;\n nConsecutiveOldContextLines = 0;\n } else {\n if (!maxErrors || lines[toPos] == null) {\n return null;\n }\n patchedLines[patchedLinesLength] = lines[toPos];\n return applyHunk(hunkLines, toPos + 1, maxErrors - 1, hunkLinesI, false, patchedLines, patchedLinesLength + 1);\n }\n }\n if (operation === '+') {\n if (!lastContextLineMatched) {\n return null;\n }\n patchedLines[patchedLinesLength] = content;\n patchedLinesLength++;\n nConsecutiveOldContextLines = 0;\n nextContextLineMustMatch = true;\n }\n if (operation === ' ') {\n nConsecutiveOldContextLines++;\n patchedLines[patchedLinesLength] = lines[toPos];\n if (compareLine(toPos + 1, lines[toPos], operation, content)) {\n patchedLinesLength++;\n lastContextLineMatched = true;\n nextContextLineMustMatch = false;\n toPos++;\n } else {\n if (nextContextLineMustMatch || !maxErrors) {\n return null;\n }\n\n // Consider 3 possibilities in sequence:\n // 1. lines contains a *substitution* not included in the patch context, or\n // 2. lines contains an *insertion* not included in the patch context, or\n // 3. lines contains a *deletion* not included in the patch context\n // The first two options are of course only possible if the line from lines is non-null -\n // i.e. only option 3 is possible if we've overrun the end of the old file.\n return lines[toPos] && (applyHunk(hunkLines, toPos + 1, maxErrors - 1, hunkLinesI + 1, false, patchedLines, patchedLinesLength + 1) || applyHunk(hunkLines, toPos + 1, maxErrors - 1, hunkLinesI, false, patchedLines, patchedLinesLength + 1)) || applyHunk(hunkLines, toPos, maxErrors - 1, hunkLinesI + 1, false, patchedLines, patchedLinesLength);\n }\n }\n }\n\n // Before returning, trim any unmodified context lines off the end of patchedLines and reduce\n // toPos (and thus oldLineLastI) accordingly. This allows later hunks to be applied to a region\n // that starts in this hunk's trailing context.\n patchedLinesLength -= nConsecutiveOldContextLines;\n toPos -= nConsecutiveOldContextLines;\n patchedLines.length = patchedLinesLength;\n return {\n patchedLines: patchedLines,\n oldLineLastI: toPos - 1\n };\n }\n var resultLines = [];\n\n // Search best fit offsets for each hunk based on the previous ones\n var prevHunkOffset = 0;\n for (var _i = 0; _i < hunks.length; _i++) {\n var hunk = hunks[_i];\n var hunkResult = void 0;\n var maxLine = lines.length - hunk.oldLines + fuzzFactor;\n var toPos = void 0;\n for (var maxErrors = 0; maxErrors <= fuzzFactor; maxErrors++) {\n toPos = hunk.oldStart + prevHunkOffset - 1;\n var iterator = distanceIterator(toPos, minLine, maxLine);\n for (; toPos !== undefined; toPos = iterator()) {\n hunkResult = applyHunk(hunk.lines, toPos, maxErrors);\n if (hunkResult) {\n break;\n }\n }\n if (hunkResult) {\n break;\n }\n }\n if (!hunkResult) {\n return false;\n }\n\n // Copy everything from the end of where we applied the last hunk to the start of this hunk\n for (var _i2 = minLine; _i2 < toPos; _i2++) {\n resultLines.push(lines[_i2]);\n }\n\n // Add the lines produced by applying the hunk:\n for (var _i3 = 0; _i3 < hunkResult.patchedLines.length; _i3++) {\n var _line = hunkResult.patchedLines[_i3];\n resultLines.push(_line);\n }\n\n // Set lower text limit to end of the current hunk, so next ones don't try\n // to fit over already patched text\n minLine = hunkResult.oldLineLastI + 1;\n\n // Note the offset between where the patch said the hunk should've applied and where we\n // applied it, so we can adjust future hunks accordingly:\n prevHunkOffset = toPos + 1 - hunk.oldStart;\n }\n\n // Copy over the rest of the lines from the old text\n for (var _i4 = minLine; _i4 < lines.length; _i4++) {\n resultLines.push(lines[_i4]);\n }\n return resultLines.join('\\n');\n}\n\n// Wrapper that supports multiple file patches via callbacks.\nfunction applyPatches(uniDiff, options) {\n if (typeof uniDiff === 'string') {\n uniDiff = parsePatch(uniDiff);\n }\n var currentIndex = 0;\n function processIndex() {\n var index = uniDiff[currentIndex++];\n if (!index) {\n return options.complete();\n }\n options.loadFile(index, function (err, data) {\n if (err) {\n return options.complete(err);\n }\n var updatedContent = applyPatch(data, index, options);\n options.patched(index, updatedContent, function (err) {\n if (err) {\n return options.complete(err);\n }\n processIndex();\n });\n });\n }\n processIndex();\n}\n\nfunction structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options) {\n if (!options) {\n options = {};\n }\n if (typeof options === 'function') {\n options = {\n callback: options\n };\n }\n if (typeof options.context === 'undefined') {\n options.context = 4;\n }\n if (options.newlineIsToken) {\n throw new Error('newlineIsToken may not be used with patch-generation functions, only with diffing functions');\n }\n if (!options.callback) {\n return diffLinesResultToPatch(diffLines(oldStr, newStr, options));\n } else {\n var _options = options,\n _callback = _options.callback;\n diffLines(oldStr, newStr, _objectSpread2(_objectSpread2({}, options), {}, {\n callback: function callback(diff) {\n var patch = diffLinesResultToPatch(diff);\n _callback(patch);\n }\n }));\n }\n function diffLinesResultToPatch(diff) {\n // STEP 1: Build up the patch with no \"\\" lines and with the arrays\n // of lines containing trailing newline characters. We'll tidy up later...\n\n if (!diff) {\n return;\n }\n diff.push({\n value: '',\n lines: []\n }); // Append an empty value to make cleanup easier\n\n function contextLines(lines) {\n return lines.map(function (entry) {\n return ' ' + entry;\n });\n }\n var hunks = [];\n var oldRangeStart = 0,\n newRangeStart = 0,\n curRange = [],\n oldLine = 1,\n newLine = 1;\n var _loop = function _loop() {\n var current = diff[i],\n lines = current.lines || splitLines(current.value);\n current.lines = lines;\n if (current.added || current.removed) {\n var _curRange;\n // If we have previous context, start with that\n if (!oldRangeStart) {\n var prev = diff[i - 1];\n oldRangeStart = oldLine;\n newRangeStart = newLine;\n if (prev) {\n curRange = options.context > 0 ? contextLines(prev.lines.slice(-options.context)) : [];\n oldRangeStart -= curRange.length;\n newRangeStart -= curRange.length;\n }\n }\n\n // Output our changes\n (_curRange = curRange).push.apply(_curRange, _toConsumableArray(lines.map(function (entry) {\n return (current.added ? '+' : '-') + entry;\n })));\n\n // Track the updated file position\n if (current.added) {\n newLine += lines.length;\n } else {\n oldLine += lines.length;\n }\n } else {\n // Identical context lines. Track line changes\n if (oldRangeStart) {\n // Close out any changes that have been output (or join overlapping)\n if (lines.length <= options.context * 2 && i < diff.length - 2) {\n var _curRange2;\n // Overlapping\n (_curRange2 = curRange).push.apply(_curRange2, _toConsumableArray(contextLines(lines)));\n } else {\n var _curRange3;\n // end the range and output\n var contextSize = Math.min(lines.length, options.context);\n (_curRange3 = curRange).push.apply(_curRange3, _toConsumableArray(contextLines(lines.slice(0, contextSize))));\n var _hunk = {\n oldStart: oldRangeStart,\n oldLines: oldLine - oldRangeStart + contextSize,\n newStart: newRangeStart,\n newLines: newLine - newRangeStart + contextSize,\n lines: curRange\n };\n hunks.push(_hunk);\n oldRangeStart = 0;\n newRangeStart = 0;\n curRange = [];\n }\n }\n oldLine += lines.length;\n newLine += lines.length;\n }\n };\n for (var i = 0; i < diff.length; i++) {\n _loop();\n }\n\n // Step 2: eliminate the trailing `\\n` from each line of each hunk, and, where needed, add\n // \"\\".\n for (var _i = 0, _hunks = hunks; _i < _hunks.length; _i++) {\n var hunk = _hunks[_i];\n for (var _i2 = 0; _i2 < hunk.lines.length; _i2++) {\n if (hunk.lines[_i2].endsWith('\\n')) {\n hunk.lines[_i2] = hunk.lines[_i2].slice(0, -1);\n } else {\n hunk.lines.splice(_i2 + 1, 0, '\\\');\n _i2++; // Skip the line we just added, then continue iterating\n }\n }\n }\n return {\n oldFileName: oldFileName,\n newFileName: newFileName,\n oldHeader: oldHeader,\n newHeader: newHeader,\n hunks: hunks\n };\n }\n}\nfunction formatPatch(diff) {\n if (Array.isArray(diff)) {\n return diff.map(formatPatch).join('\\n');\n }\n var ret = [];\n if (diff.oldFileName == diff.newFileName) {\n ret.push('Index: ' + diff.oldFileName);\n }\n ret.push('===================================================================');\n ret.push('--- ' + diff.oldFileName + (typeof diff.oldHeader === 'undefined' ? '' : '\\t' + diff.oldHeader));\n ret.push('+++ ' + diff.newFileName + (typeof diff.newHeader === 'undefined' ? '' : '\\t' + diff.newHeader));\n for (var i = 0; i < diff.hunks.length; i++) {\n var hunk = diff.hunks[i];\n // Unified Diff Format quirk: If the chunk size is 0,\n // the first number is one lower than one would expect.\n // https://www.artima.com/weblogs/viewpost.jsp?thread=164293\n if (hunk.oldLines === 0) {\n hunk.oldStart -= 1;\n }\n if (hunk.newLines === 0) {\n hunk.newStart -= 1;\n }\n ret.push('@@ -' + hunk.oldStart + ',' + hunk.oldLines + ' +' + hunk.newStart + ',' + hunk.newLines + ' @@');\n ret.push.apply(ret, hunk.lines);\n }\n return ret.join('\\n') + '\\n';\n}\nfunction createTwoFilesPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options) {\n var _options2;\n if (typeof options === 'function') {\n options = {\n callback: options\n };\n }\n if (!((_options2 = options) !== null && _options2 !== void 0 && _options2.callback)) {\n var patchObj = structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options);\n if (!patchObj) {\n return;\n }\n return formatPatch(patchObj);\n } else {\n var _options3 = options,\n _callback2 = _options3.callback;\n structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, _objectSpread2(_objectSpread2({}, options), {}, {\n callback: function callback(patchObj) {\n if (!patchObj) {\n _callback2();\n } else {\n _callback2(formatPatch(patchObj));\n }\n }\n }));\n }\n}\nfunction createPatch(fileName, oldStr, newStr, oldHeader, newHeader, options) {\n return createTwoFilesPatch(fileName, fileName, oldStr, newStr, oldHeader, newHeader, options);\n}\n\n/**\n * Split `text` into an array of lines, including the trailing newline character (where present)\n */\nfunction splitLines(text) {\n var hasTrailingNl = text.endsWith('\\n');\n var result = text.split('\\n').map(function (line) {\n return line + '\\n';\n });\n if (hasTrailingNl) {\n result.pop();\n } else {\n result.push(result.pop().slice(0, -1));\n }\n return result;\n}\n\nfunction arrayEqual(a, b) {\n if (a.length !== b.length) {\n return false;\n }\n return arrayStartsWith(a, b);\n}\nfunction arrayStartsWith(array, start) {\n if (start.length > array.length) {\n return false;\n }\n for (var i = 0; i < start.length; i++) {\n if (start[i] !== array[i]) {\n return false;\n }\n }\n return true;\n}\n\nfunction calcLineCount(hunk) {\n var _calcOldNewLineCount = calcOldNewLineCount(hunk.lines),\n oldLines = _calcOldNewLineCount.oldLines,\n newLines = _calcOldNewLineCount.newLines;\n if (oldLines !== undefined) {\n hunk.oldLines = oldLines;\n } else {\n delete hunk.oldLines;\n }\n if (newLines !== undefined) {\n hunk.newLines = newLines;\n } else {\n delete hunk.newLines;\n }\n}\nfunction merge(mine, theirs, base) {\n mine = loadPatch(mine, base);\n theirs = loadPatch(theirs, base);\n var ret = {};\n\n // For index we just let it pass through as it doesn't have any necessary meaning.\n // Leaving sanity checks on this to the API consumer that may know more about the\n // meaning in their own context.\n if (mine.index || theirs.index) {\n ret.index = mine.index || theirs.index;\n }\n if (mine.newFileName || theirs.newFileName) {\n if (!fileNameChanged(mine)) {\n // No header or no change in ours, use theirs (and ours if theirs does not exist)\n ret.oldFileName = theirs.oldFileName || mine.oldFileName;\n ret.newFileName = theirs.newFileName || mine.newFileName;\n ret.oldHeader = theirs.oldHeader || mine.oldHeader;\n ret.newHeader = theirs.newHeader || mine.newHeader;\n } else if (!fileNameChanged(theirs)) {\n // No header or no change in theirs, use ours\n ret.oldFileName = mine.oldFileName;\n ret.newFileName = mine.newFileName;\n ret.oldHeader = mine.oldHeader;\n ret.newHeader = mine.newHeader;\n } else {\n // Both changed... figure it out\n ret.oldFileName = selectField(ret, mine.oldFileName, theirs.oldFileName);\n ret.newFileName = selectField(ret, mine.newFileName, theirs.newFileName);\n ret.oldHeader = selectField(ret, mine.oldHeader, theirs.oldHeader);\n ret.newHeader = selectField(ret, mine.newHeader, theirs.newHeader);\n }\n }\n ret.hunks = [];\n var mineIndex = 0,\n theirsIndex = 0,\n mineOffset = 0,\n theirsOffset = 0;\n while (mineIndex < mine.hunks.length || theirsIndex < theirs.hunks.length) {\n var mineCurrent = mine.hunks[mineIndex] || {\n oldStart: Infinity\n },\n theirsCurrent = theirs.hunks[theirsIndex] || {\n oldStart: Infinity\n };\n if (hunkBefore(mineCurrent, theirsCurrent)) {\n // This patch does not overlap with any of the others, yay.\n ret.hunks.push(cloneHunk(mineCurrent, mineOffset));\n mineIndex++;\n theirsOffset += mineCurrent.newLines - mineCurrent.oldLines;\n } else if (hunkBefore(theirsCurrent, mineCurrent)) {\n // This patch does not overlap with any of the others, yay.\n ret.hunks.push(cloneHunk(theirsCurrent, theirsOffset));\n theirsIndex++;\n mineOffset += theirsCurrent.newLines - theirsCurrent.oldLines;\n } else {\n // Overlap, merge as best we can\n var mergedHunk = {\n oldStart: Math.min(mineCurrent.oldStart, theirsCurrent.oldStart),\n oldLines: 0,\n newStart: Math.min(mineCurrent.newStart + mineOffset, theirsCurrent.oldStart + theirsOffset),\n newLines: 0,\n lines: []\n };\n mergeLines(mergedHunk, mineCurrent.oldStart, mineCurrent.lines, theirsCurrent.oldStart, theirsCurrent.lines);\n theirsIndex++;\n mineIndex++;\n ret.hunks.push(mergedHunk);\n }\n }\n return ret;\n}\nfunction loadPatch(param, base) {\n if (typeof param === 'string') {\n if (/^@@/m.test(param) || /^Index:/m.test(param)) {\n return parsePatch(param)[0];\n }\n if (!base) {\n throw new Error('Must provide a base reference or pass in a patch');\n }\n return structuredPatch(undefined, undefined, base, param);\n }\n return param;\n}\nfunction fileNameChanged(patch) {\n return patch.newFileName && patch.newFileName !== patch.oldFileName;\n}\nfunction selectField(index, mine, theirs) {\n if (mine === theirs) {\n return mine;\n } else {\n index.conflict = true;\n return {\n mine: mine,\n theirs: theirs\n };\n }\n}\nfunction hunkBefore(test, check) {\n return test.oldStart < check.oldStart && test.oldStart + test.oldLines < check.oldStart;\n}\nfunction cloneHunk(hunk, offset) {\n return {\n oldStart: hunk.oldStart,\n oldLines: hunk.oldLines,\n newStart: hunk.newStart + offset,\n newLines: hunk.newLines,\n lines: hunk.lines\n };\n}\nfunction mergeLines(hunk, mineOffset, mineLines, theirOffset, theirLines) {\n // This will generally result in a conflicted hunk, but there are cases where the context\n // is the only overlap where we can successfully merge the content here.\n var mine = {\n offset: mineOffset,\n lines: mineLines,\n index: 0\n },\n their = {\n offset: theirOffset,\n lines: theirLines,\n index: 0\n };\n\n // Handle any leading content\n insertLeading(hunk, mine, their);\n insertLeading(hunk, their, mine);\n\n // Now in the overlap content. Scan through and select the best changes from each.\n while (mine.index < mine.lines.length && their.index < their.lines.length) {\n var mineCurrent = mine.lines[mine.index],\n theirCurrent = their.lines[their.index];\n if ((mineCurrent[0] === '-' || mineCurrent[0] === '+') && (theirCurrent[0] === '-' || theirCurrent[0] === '+')) {\n // Both modified ...\n mutualChange(hunk, mine, their);\n } else if (mineCurrent[0] === '+' && theirCurrent[0] === ' ') {\n var _hunk$lines;\n // Mine inserted\n (_hunk$lines = hunk.lines).push.apply(_hunk$lines, _toConsumableArray(collectChange(mine)));\n } else if (theirCurrent[0] === '+' && mineCurrent[0] === ' ') {\n var _hunk$lines2;\n // Theirs inserted\n (_hunk$lines2 = hunk.lines).push.apply(_hunk$lines2, _toConsumableArray(collectChange(their)));\n } else if (mineCurrent[0] === '-' && theirCurrent[0] === ' ') {\n // Mine removed or edited\n removal(hunk, mine, their);\n } else if (theirCurrent[0] === '-' && mineCurrent[0] === ' ') {\n // Their removed or edited\n removal(hunk, their, mine, true);\n } else if (mineCurrent === theirCurrent) {\n // Context identity\n hunk.lines.push(mineCurrent);\n mine.index++;\n their.index++;\n } else {\n // Context mismatch\n conflict(hunk, collectChange(mine), collectChange(their));\n }\n }\n\n // Now push anything that may be remaining\n insertTrailing(hunk, mine);\n insertTrailing(hunk, their);\n calcLineCount(hunk);\n}\nfunction mutualChange(hunk, mine, their) {\n var myChanges = collectChange(mine),\n theirChanges = collectChange(their);\n if (allRemoves(myChanges) && allRemoves(theirChanges)) {\n // Special case for remove changes that are supersets of one another\n if (arrayStartsWith(myChanges, theirChanges) && skipRemoveSuperset(their, myChanges, myChanges.length - theirChanges.length)) {\n var _hunk$lines3;\n (_hunk$lines3 = hunk.lines).push.apply(_hunk$lines3, _toConsumableArray(myChanges));\n return;\n } else if (arrayStartsWith(theirChanges, myChanges) && skipRemoveSuperset(mine, theirChanges, theirChanges.length - myChanges.length)) {\n var _hunk$lines4;\n (_hunk$lines4 = hunk.lines).push.apply(_hunk$lines4, _toConsumableArray(theirChanges));\n return;\n }\n } else if (arrayEqual(myChanges, theirChanges)) {\n var _hunk$lines5;\n (_hunk$lines5 = hunk.lines).push.apply(_hunk$lines5, _toConsumableArray(myChanges));\n return;\n }\n conflict(hunk, myChanges, theirChanges);\n}\nfunction removal(hunk, mine, their, swap) {\n var myChanges = collectChange(mine),\n theirChanges = collectContext(their, myChanges);\n if (theirChanges.merged) {\n var _hunk$lines6;\n (_hunk$lines6 = hunk.lines).push.apply(_hunk$lines6, _toConsumableArray(theirChanges.merged));\n } else {\n conflict(hunk, swap ? theirChanges : myChanges, swap ? myChanges : theirChanges);\n }\n}\nfunction conflict(hunk, mine, their) {\n hunk.conflict = true;\n hunk.lines.push({\n conflict: true,\n mine: mine,\n theirs: their\n });\n}\nfunction insertLeading(hunk, insert, their) {\n while (insert.offset < their.offset && insert.index < insert.lines.length) {\n var line = insert.lines[insert.index++];\n hunk.lines.push(line);\n insert.offset++;\n }\n}\nfunction insertTrailing(hunk, insert) {\n while (insert.index < insert.lines.length) {\n var line = insert.lines[insert.index++];\n hunk.lines.push(line);\n }\n}\nfunction collectChange(state) {\n var ret = [],\n operation = state.lines[state.index][0];\n while (state.index < state.lines.length) {\n var line = state.lines[state.index];\n\n // Group additions that are immediately after subtractions and treat them as one \"atomic\" modify change.\n if (operation === '-' && line[0] === '+') {\n operation = '+';\n }\n if (operation === line[0]) {\n ret.push(line);\n state.index++;\n } else {\n break;\n }\n }\n return ret;\n}\nfunction collectContext(state, matchChanges) {\n var changes = [],\n merged = [],\n matchIndex = 0,\n contextChanges = false,\n conflicted = false;\n while (matchIndex < matchChanges.length && state.index < state.lines.length) {\n var change = state.lines[state.index],\n match = matchChanges[matchIndex];\n\n // Once we've hit our add, then we are done\n if (match[0] === '+') {\n break;\n }\n contextChanges = contextChanges || change[0] !== ' ';\n merged.push(match);\n matchIndex++;\n\n // Consume any additions in the other block as a conflict to attempt\n // to pull in the remaining context after this\n if (change[0] === '+') {\n conflicted = true;\n while (change[0] === '+') {\n changes.push(change);\n change = state.lines[++state.index];\n }\n }\n if (match.substr(1) === change.substr(1)) {\n changes.push(change);\n state.index++;\n } else {\n conflicted = true;\n }\n }\n if ((matchChanges[matchIndex] || '')[0] === '+' && contextChanges) {\n conflicted = true;\n }\n if (conflicted) {\n return changes;\n }\n while (matchIndex < matchChanges.length) {\n merged.push(matchChanges[matchIndex++]);\n }\n return {\n merged: merged,\n changes: changes\n };\n}\nfunction allRemoves(changes) {\n return changes.reduce(function (prev, change) {\n return prev && change[0] === '-';\n }, true);\n}\nfunction skipRemoveSuperset(state, removeChanges, delta) {\n for (var i = 0; i < delta; i++) {\n var changeContent = removeChanges[removeChanges.length - delta + i].substr(1);\n if (state.lines[state.index + i] !== ' ' + changeContent) {\n return false;\n }\n }\n state.index += delta;\n return true;\n}\nfunction calcOldNewLineCount(lines) {\n var oldLines = 0;\n var newLines = 0;\n lines.forEach(function (line) {\n if (typeof line !== 'string') {\n var myCount = calcOldNewLineCount(line.mine);\n var theirCount = calcOldNewLineCount(line.theirs);\n if (oldLines !== undefined) {\n if (myCount.oldLines === theirCount.oldLines) {\n oldLines += myCount.oldLines;\n } else {\n oldLines = undefined;\n }\n }\n if (newLines !== undefined) {\n if (myCount.newLines === theirCount.newLines) {\n newLines += myCount.newLines;\n } else {\n newLines = undefined;\n }\n }\n } else {\n if (newLines !== undefined && (line[0] === '+' || line[0] === ' ')) {\n newLines++;\n }\n if (oldLines !== undefined && (line[0] === '-' || line[0] === ' ')) {\n oldLines++;\n }\n }\n });\n return {\n oldLines: oldLines,\n newLines: newLines\n };\n}\n\nfunction reversePatch(structuredPatch) {\n if (Array.isArray(structuredPatch)) {\n return structuredPatch.map(reversePatch).reverse();\n }\n return _objectSpread2(_objectSpread2({}, structuredPatch), {}, {\n oldFileName: structuredPatch.newFileName,\n oldHeader: structuredPatch.newHeader,\n newFileName: structuredPatch.oldFileName,\n newHeader: structuredPatch.oldHeader,\n hunks: structuredPatch.hunks.map(function (hunk) {\n return {\n oldLines: hunk.newLines,\n oldStart: hunk.newStart,\n newLines: hunk.oldLines,\n newStart: hunk.oldStart,\n lines: hunk.lines.map(function (l) {\n if (l.startsWith('-')) {\n return \"+\".concat(l.slice(1));\n }\n if (l.startsWith('+')) {\n return \"-\".concat(l.slice(1));\n }\n return l;\n })\n };\n })\n });\n}\n\n// See: http://code.google.com/p/google-diff-match-patch/wiki/API\nfunction convertChangesToDMP(changes) {\n var ret = [],\n change,\n operation;\n for (var i = 0; i < changes.length; i++) {\n change = changes[i];\n if (change.added) {\n operation = 1;\n } else if (change.removed) {\n operation = -1;\n } else {\n operation = 0;\n }\n ret.push([operation, change.value]);\n }\n return ret;\n}\n\nfunction convertChangesToXML(changes) {\n var ret = [];\n for (var i = 0; i < changes.length; i++) {\n var change = changes[i];\n if (change.added) {\n ret.push('<ins>');\n } else if (change.removed) {\n ret.push('<del>');\n }\n ret.push(escapeHTML(change.value));\n if (change.added) {\n ret.push('</ins>');\n } else if (change.removed) {\n ret.push('</del>');\n }\n }\n return ret.join('');\n}\nfunction escapeHTML(s) {\n var n = s;\n n = n.replace(/&/g, '&amp;');\n n = n.replace(/</g, '&lt;');\n n = n.replace(/>/g, '&gt;');\n n = n.replace(/\"/g, '&quot;');\n return n;\n}\n\nexport { Diff, applyPatch, applyPatches, canonicalize, convertChangesToDMP, convertChangesToXML, createPatch, createTwoFilesPatch, diffArrays, diffChars, diffCss, diffJson, diffLines, diffSentences, diffTrimmedLines, diffWords, diffWordsWithSpace, formatPatch, merge, parsePatch, reversePatch, structuredPatch };\n","import fs from 'node:fs'\nimport os from 'node:os'\nimport path from 'node:path'\nimport { ClawdError, ERROR_CODES } from '../protocol.js'\n\nexport const MAX_FILE_BYTES = 2 * 1024 * 1024 // 2MB\n\nexport interface WorkspaceEntry {\n name: string\n type: 'file' | 'dir' | 'other'\n size?: number\n mtime: string\n}\n\nexport interface WorkspaceListResult {\n cwd: string\n path: string\n entries: WorkspaceEntry[]\n}\n\nexport interface WorkspaceReadResult {\n cwd: string\n path: string\n encoding: 'utf8' | 'base64'\n content: string\n size: number\n}\n\n// 把 path 解析成 cwd 下的绝对路径,禁止逃出 cwd 根\nfunction resolveInsideCwd(cwd: string, subpath: string | undefined): string {\n const absCwd = path.resolve(cwd)\n const joined = path.resolve(absCwd, subpath ?? '.')\n const rel = path.relative(absCwd, joined)\n if (rel.startsWith('..') || path.isAbsolute(rel)) {\n throw new ClawdError(ERROR_CODES.INVALID_PATH, `path escapes cwd: ${subpath}`)\n }\n return joined\n}\n\nfunction ensureCwd(cwd: string): void {\n try {\n const stat = fs.statSync(cwd)\n if (!stat.isDirectory()) {\n throw new ClawdError(ERROR_CODES.INVALID_CWD, `not a directory: ${cwd}`)\n }\n } catch (err: unknown) {\n if (err instanceof ClawdError) throw err\n throw new ClawdError(ERROR_CODES.INVALID_CWD, `cwd not accessible: ${cwd}`)\n }\n}\n\nexport class WorkspaceBrowser {\n list(args: { cwd?: string; path?: string; showHidden?: boolean }): WorkspaceListResult {\n // cwd 缺省 → 兜底 os.homedir()(UI 首次打开 DirBrowser 时不需要传具体路径)\n const cwd = args.cwd && args.cwd.length > 0 ? args.cwd : os.homedir()\n ensureCwd(cwd)\n const full = resolveInsideCwd(cwd, args.path)\n const dirents = fs.readdirSync(full, { withFileTypes: true })\n const entries: WorkspaceEntry[] = []\n for (const d of dirents) {\n if (!args.showHidden && d.name.startsWith('.')) continue\n const entry: WorkspaceEntry = {\n name: d.name,\n type: d.isFile() ? 'file' : d.isDirectory() ? 'dir' : 'other',\n mtime: '',\n }\n try {\n const st = fs.statSync(path.join(full, d.name))\n entry.mtime = new Date(st.mtimeMs).toISOString()\n if (d.isFile()) entry.size = st.size\n } catch {\n // 读不到属性就跳过 mtime\n }\n entries.push(entry)\n }\n // 目录在前、字母序\n entries.sort((a, b) => {\n if (a.type !== b.type) return a.type === 'dir' ? -1 : 1\n return a.name < b.name ? -1 : a.name > b.name ? 1 : 0\n })\n return { cwd, path: args.path ?? '.', entries }\n }\n\n read(args: { cwd: string; path: string }): WorkspaceReadResult {\n ensureCwd(args.cwd)\n const full = resolveInsideCwd(args.cwd, args.path)\n const st = fs.statSync(full)\n if (!st.isFile()) {\n throw new ClawdError(ERROR_CODES.INVALID_PATH, `not a file: ${args.path}`)\n }\n if (st.size > MAX_FILE_BYTES) {\n throw new ClawdError(ERROR_CODES.FILE_TOO_LARGE, `file > ${MAX_FILE_BYTES} bytes`)\n }\n const buf = fs.readFileSync(full)\n // 粗略判断是否二进制:非零字节含 0x00\n const isBinary = buf.includes(0)\n if (isBinary) {\n return {\n cwd: args.cwd,\n path: args.path,\n encoding: 'base64',\n content: buf.toString('base64'),\n size: st.size,\n }\n }\n return {\n cwd: args.cwd,\n path: args.path,\n encoding: 'utf8',\n content: buf.toString('utf8'),\n size: st.size,\n }\n }\n}\n","import fs from 'node:fs'\nimport os from 'node:os'\nimport path from 'node:path'\n\nexport interface SkillEntry {\n name: string\n source: 'project' | 'global' | 'plugin'\n path: string\n description?: string\n /** plugin 来源时对应的 plugin 名 */\n plugin?: string\n}\n\nexport interface SkillsScannerOptions {\n home?: string\n /** 额外的扫描 root(测试用);生产环境通过 installed_plugins.json 自动发现 */\n extraPluginRoots?: Array<{ name: string; root: string }>\n}\n\n// 解析 frontmatter 的 name/description(SKILL.md 或 commands/*.md 都用)\nfunction parseFrontmatter(content: string): { name: string; description: string } {\n if (!content.startsWith('---')) return { name: '', description: '' }\n const end = content.indexOf('---', 3)\n if (end === -1) return { name: '', description: '' }\n const lines = content.slice(3, end).split('\\n')\n const strip = (s: string) => s.trim().replace(/^[\"']|[\"']$/g, '')\n let name = ''\n let description = ''\n for (let i = 0; i < lines.length; i++) {\n const trimmed = lines[i].trim()\n if (trimmed.startsWith('name:')) {\n name = strip(trimmed.slice(5))\n } else if (trimmed.startsWith('description:')) {\n const rest = trimmed.slice(12).trim()\n if (rest === '|' || rest === '>' || rest === '|-' || rest === '>-') {\n const parts: string[] = []\n for (let j = i + 1; j < lines.length; j++) {\n const next = lines[j]\n if (next.length === 0) { parts.push(''); continue }\n if (!/^\\s/.test(next)) break\n parts.push(next.replace(/^\\s+/, ''))\n }\n description = parts.filter(Boolean).join(' ').trim()\n } else {\n description = strip(rest)\n }\n }\n }\n return { name, description }\n}\n\nfunction isDirLikeSync(p: string): boolean {\n try {\n return fs.statSync(p).isDirectory()\n } catch {\n return false\n }\n}\n\n/** 扫 skills/ 目录:每个子目录一个 SKILL.md */\nfunction scanSkillDir(\n dir: string,\n source: SkillEntry['source'],\n seen: Set<string>,\n out: SkillEntry[],\n pluginName?: string,\n): void {\n let entries: fs.Dirent[]\n try {\n entries = fs.readdirSync(dir, { withFileTypes: true })\n } catch {\n return\n }\n for (const ent of entries) {\n const entryPath = path.join(dir, ent.name)\n if (!ent.isDirectory() && !(ent.isSymbolicLink() && isDirLikeSync(entryPath))) continue\n let content: string\n try {\n content = fs.readFileSync(path.join(entryPath, 'SKILL.md'), 'utf8')\n } catch {\n try {\n content = fs.readFileSync(path.join(entryPath, 'skill.md'), 'utf8')\n } catch {\n continue\n }\n }\n // 对齐 CC:skillName 固定取目录名,frontmatter `name:` 仅作 displayName 用\n // 参考 claude-code/src/skills/loadSkillsDir.ts `skillName = entry.name`\n const { description } = parseFrontmatter(content)\n const baseName = ent.name\n const name = pluginName ? `${pluginName}:${baseName}` : baseName\n if (seen.has(name)) continue\n seen.add(name)\n const info: SkillEntry = { name, source, path: entryPath, description: description || undefined }\n if (pluginName) info.plugin = pluginName\n out.push(info)\n }\n}\n\n/** 扫 commands/ 目录:顶层 .md 文件 + 子目录(namespace:cmd 格式) */\nfunction scanCommandDir(\n dir: string,\n source: SkillEntry['source'],\n seen: Set<string>,\n out: SkillEntry[],\n pluginName?: string,\n): void {\n let entries: fs.Dirent[]\n try {\n entries = fs.readdirSync(dir, { withFileTypes: true })\n } catch {\n return\n }\n for (const ent of entries) {\n const entryPath = path.join(dir, ent.name)\n if (ent.isDirectory() || (ent.isSymbolicLink() && isDirLikeSync(entryPath))) {\n const ns = ent.name\n let subEntries: fs.Dirent[]\n try {\n subEntries = fs.readdirSync(entryPath, { withFileTypes: true })\n } catch {\n continue\n }\n for (const se of subEntries) {\n if (!se.name.endsWith('.md')) continue\n const sePath = path.join(entryPath, se.name)\n let content: string\n try {\n content = fs.readFileSync(sePath, 'utf8')\n } catch {\n continue\n }\n const cmd = se.name.replace(/\\.md$/, '')\n const { description } = parseFrontmatter(content)\n const qualified = `${ns}:${cmd}`\n const name = pluginName ? `${pluginName}:${qualified}` : qualified\n if (seen.has(name)) continue\n seen.add(name)\n const info: SkillEntry = { name, source, path: sePath, description: description || undefined }\n if (pluginName) info.plugin = pluginName\n out.push(info)\n }\n } else if (ent.name.endsWith('.md')) {\n let content: string\n try {\n content = fs.readFileSync(entryPath, 'utf8')\n } catch {\n continue\n }\n const cmd = ent.name.replace(/\\.md$/, '')\n const { description } = parseFrontmatter(content)\n const name = pluginName ? `${pluginName}:${cmd}` : cmd\n if (seen.has(name)) continue\n seen.add(name)\n const info: SkillEntry = { name, source, path: entryPath, description: description || undefined }\n if (pluginName) info.plugin = pluginName\n out.push(info)\n }\n }\n}\n\ninterface InstalledPluginsFile {\n version?: number\n plugins?: Record<string, Array<{ installPath?: string }>>\n}\n\n/** 读 CC CLI 的 installed_plugins.json,拿已安装插件的 (pluginName, installPath) 列表 */\nfunction readInstalledPlugins(home: string): Array<{ name: string; root: string }> {\n const file = path.join(home, '.claude', 'plugins', 'installed_plugins.json')\n let raw: string\n try {\n raw = fs.readFileSync(file, 'utf8')\n } catch {\n return []\n }\n let parsed: InstalledPluginsFile\n try {\n parsed = JSON.parse(raw)\n } catch {\n return []\n }\n const out: Array<{ name: string; root: string }> = []\n for (const [key, entries] of Object.entries(parsed.plugins ?? {})) {\n if (!Array.isArray(entries) || entries.length === 0) continue\n const entry = entries[0]\n if (!entry?.installPath) continue\n // key 格式是 `{pluginName}@{marketplace}`,对齐 CC 只取 @ 前面的 pluginName\n // 参考 claude-code/src/utils/plugins/pluginIdentifier.ts `parsePluginIdentifier`\n const pluginName = key.includes('@') ? key.slice(0, key.indexOf('@')) : key\n if (!pluginName) continue\n out.push({ name: pluginName, root: entry.installPath })\n }\n return out\n}\n\nexport class SkillsScanner {\n private readonly home: string\n private readonly extraPluginRoots: Array<{ name: string; root: string }>\n\n constructor(opts: SkillsScannerOptions = {}) {\n this.home = opts.home ?? os.homedir()\n this.extraPluginRoots = opts.extraPluginRoots ?? []\n }\n\n /**\n * 对齐 cc-direct(openclaw-plugin-clawos/src/claude-code/skills-scanner.ts):\n * 1. global: ~/.claude/skills + ~/.claude/commands\n * 2. project: <cwd>/.claude/skills + <cwd>/.claude/commands\n * 3. plugin: installed_plugins.json 里每个 plugin 的 skills + commands\n * 顺序 global → project → plugin,同名去重(先到先得)\n */\n list(args: { cwd: string }): SkillEntry[] {\n const seen = new Set<string>()\n const out: SkillEntry[] = []\n\n // global\n scanSkillDir(path.join(this.home, '.claude', 'skills'), 'global', seen, out)\n scanCommandDir(path.join(this.home, '.claude', 'commands'), 'global', seen, out)\n\n // project\n scanSkillDir(path.join(args.cwd, '.claude', 'skills'), 'project', seen, out)\n scanCommandDir(path.join(args.cwd, '.claude', 'commands'), 'project', seen, out)\n\n // plugin\n const plugins = [...readInstalledPlugins(this.home), ...this.extraPluginRoots]\n for (const { name, root } of plugins) {\n scanSkillDir(path.join(root, 'skills'), 'plugin', seen, out, name)\n scanCommandDir(path.join(root, 'commands'), 'plugin', seen, out, name)\n }\n\n out.sort((a, b) => (a.name < b.name ? -1 : a.name > b.name ? 1 : 0))\n return out\n }\n}\n","import fs from 'node:fs'\nimport os from 'node:os'\nimport path from 'node:path'\nimport type { ParsedEvent } from '../protocol.js'\nimport { cwdToHashDir } from '../tools/claude-history.js'\nimport type { ToolAdapter } from '../tools/types.js'\n\nexport interface ObserverEvent {\n sessionId: string\n events: ParsedEvent[]\n}\n\nexport interface SessionObserverOptions {\n home?: string\n onEvent: (evt: ObserverEvent) => void\n onStatus?: (sessionId: string, status: 'observing' | 'stopped') => void\n}\n\nexport interface StartObserveArgs {\n sessionId: string\n cwd: string\n toolSessionId: string\n jsonlPath?: string\n adapter: ToolAdapter\n}\n\ninterface Watch {\n sessionId: string\n filePath: string\n watcher: fs.FSWatcher | null\n pollTimer: NodeJS.Timeout | null\n lastSize: number\n buf: string\n adapter: ToolAdapter\n}\n\nexport class SessionObserver {\n private readonly home: string\n private readonly watches = new Map<string, Watch>()\n\n constructor(private readonly opts: SessionObserverOptions) {\n this.home = opts.home ?? os.homedir()\n }\n\n private resolveJsonlPath(cwd: string, toolSessionId: string, override?: string): string {\n if (override) return override\n return path.join(this.home, '.claude', 'projects', cwdToHashDir(cwd), `${toolSessionId}.jsonl`)\n }\n\n start(args: StartObserveArgs): { filePath: string } {\n this.stop(args.sessionId) // 幂等重置\n const filePath = this.resolveJsonlPath(args.cwd, args.toolSessionId, args.jsonlPath)\n let size = 0\n try {\n size = fs.statSync(filePath).size\n } catch {\n // 文件还不存在也允许 watch(等它创建)\n }\n const w: Watch = {\n sessionId: args.sessionId,\n filePath,\n watcher: null,\n pollTimer: null,\n lastSize: size,\n buf: '',\n adapter: args.adapter,\n }\n try {\n fs.mkdirSync(path.dirname(filePath), { recursive: true })\n } catch {\n // ignore\n }\n w.watcher = fs.watch(path.dirname(filePath), { persistent: false }, (_event, changedName) => {\n if (!changedName || !filePath.endsWith(changedName as string)) return\n this.poll(w)\n })\n // 作为 fs.watch 在 macOS APFS / Tauri WebKit 环境下偶尔漏事件的兜底,每 200ms poll 一次\n w.pollTimer = setInterval(() => this.poll(w), 200)\n this.watches.set(args.sessionId, w)\n this.opts.onStatus?.(args.sessionId, 'observing')\n // 初始 meta hydration:扫尾部 N 行抽 meta_update,让 SessionMeta 立即反映磁盘上的最新状态\n // 渲染事件(text / tool_call / ...)不 emit,避免与 history:read 重复加载\n this.hydrateMetaTail(w)\n // 立即先试着读一次,把已存在的尾部推出去\n this.poll(w)\n return { filePath }\n }\n\n // 读 JSONL 文件尾部 N 行,过滤出 meta_update events 一次性喂给 reducer\n // reducer.shallowEqMeta diff 让重复 patch 静默吞掉;异常静默吞,不阻塞 watcher 启动\n private hydrateMetaTail(w: Watch, maxLines = 200): void {\n try {\n const raw = fs.readFileSync(w.filePath, 'utf8')\n if (!raw) return\n const allLines = raw.split('\\n').filter((l) => l.trim().length > 0)\n if (allLines.length === 0) return\n const tail = allLines.length > maxLines ? allLines.slice(-maxLines) : allLines\n const metaEvents: ParsedEvent[] = []\n for (const line of tail) {\n const events = w.adapter.parseLine(line)\n for (const e of events) {\n if (e.kind === 'meta_update') metaEvents.push(e)\n }\n }\n if (metaEvents.length > 0) {\n // hydration 阶段一次性把 N 行的 meta_update 合成一个批次喂入;\n // 这些 meta 没有 uuid(也无所谓 dedup,shallowEqMeta 在 reducer 里幂等吞)\n this.opts.onEvent({ sessionId: w.sessionId, events: metaEvents })\n }\n } catch {\n // 文件不存在 / 读失败 / parse 异常 → 静默跳过,watcher 仍正常启动\n }\n }\n\n private poll(w: Watch): void {\n let size = 0\n try {\n size = fs.statSync(w.filePath).size\n } catch {\n return\n }\n if (size < w.lastSize) {\n // 文件被截断或重建:重置\n w.lastSize = 0\n w.buf = ''\n }\n if (size === w.lastSize) return\n const fd = fs.openSync(w.filePath, 'r')\n try {\n const len = size - w.lastSize\n const buf = Buffer.alloc(len)\n fs.readSync(fd, buf, 0, len, w.lastSize)\n w.lastSize = size\n w.buf += buf.toString('utf8')\n let newlineIndex: number\n while ((newlineIndex = w.buf.indexOf('\\n')) >= 0) {\n const line = w.buf.slice(0, newlineIndex)\n w.buf = w.buf.slice(newlineIndex + 1)\n const events = w.adapter.parseLine(line)\n // 按帧(=一行 JSONL)颗粒度回调,让 manager/reducer 能按 events[0].uuid\n // 对整批做跨路径 dedup(同一帧从 stdout 和 JSONL 都来时,整批跳过)\n if (events.length > 0) {\n this.opts.onEvent({ sessionId: w.sessionId, events })\n }\n }\n } finally {\n fs.closeSync(fd)\n }\n }\n\n isObserving(sessionId: string): boolean {\n return this.watches.has(sessionId)\n }\n\n stop(sessionId: string): boolean {\n const w = this.watches.get(sessionId)\n if (!w) return false\n try {\n w.watcher?.close()\n } catch {\n // ignore\n }\n if (w.pollTimer) clearInterval(w.pollTimer)\n this.watches.delete(sessionId)\n this.opts.onStatus?.(sessionId, 'stopped')\n return true\n }\n\n stopAll(): void {\n for (const id of [...this.watches.keys()]) this.stop(id)\n }\n}\n","import { ClawdError, ERROR_CODES } from '../protocol.js'\nimport type { ToolAdapter } from './types.js'\n\nconst registry = new Map<string, ToolAdapter>()\n\nexport function registerAdapter(id: string, adapter: ToolAdapter): void {\n registry.set(id, adapter)\n}\n\nexport function unregisterAdapter(id: string): void {\n registry.delete(id)\n}\n\nexport function resetRegistry(): void {\n registry.clear()\n}\n\nexport function getAdapter(id: string): ToolAdapter {\n const a = registry.get(id)\n if (!a) {\n throw new ClawdError(ERROR_CODES.TOOL_NOT_SUPPORTED, `tool not supported: ${id}`)\n }\n return a\n}\n\nexport function listRegistered(): string[] {\n return [...registry.keys()]\n}\n\nexport function hasAdapter(id: string): boolean {\n return registry.has(id)\n}\n","import createWebSocketStream from './lib/stream.js';\nimport extension from './lib/extension.js';\nimport PerMessageDeflate from './lib/permessage-deflate.js';\nimport Receiver from './lib/receiver.js';\nimport Sender from './lib/sender.js';\nimport subprotocol from './lib/subprotocol.js';\nimport WebSocket from './lib/websocket.js';\nimport WebSocketServer from './lib/websocket-server.js';\n\nexport {\n createWebSocketStream,\n extension,\n PerMessageDeflate,\n Receiver,\n Sender,\n subprotocol,\n WebSocket,\n WebSocketServer\n};\n\nexport default WebSocket;\n","import { WebSocketServer, WebSocket, type RawData } from 'ws'\nimport { v4 as uuidv4 } from 'uuid'\nimport type { Logger } from '../logger.js'\nimport type { ClientHandle, FrameHandler, Transport } from './types.js'\nimport type { AuthGate, AuthHandle } from './auth.js'\n\nexport interface LocalWsServerOptions {\n host?: string\n port: number\n logger?: Logger\n // 完整 ready 帧(含 hostname / runningSessions 等敏感信息),仅在 auth 通过后下发\n readyFrameBuilder: () => Record<string, unknown>\n // 协议版本号;未通过 auth 时只暴露这个最小信息\n protocolVersion: number\n pingIntervalMs?: number\n // 可选 AuthGate;不传 = 1.0 行为,所有连接直接放行\n authGate?: AuthGate\n}\n\ninterface InternalClient {\n handle: ClientHandle\n ws: WebSocket\n pingTimer: NodeJS.Timeout | null\n}\n\nexport class LocalWsServer implements Transport {\n private wss: WebSocketServer | null = null\n private frameHandler: FrameHandler | null = null\n private readonly clients = new Map<string, InternalClient>()\n private readonly logger?: Logger\n private readonly pingIntervalMs: number\n\n constructor(private readonly opts: LocalWsServerOptions) {\n this.logger = opts.logger\n this.pingIntervalMs = opts.pingIntervalMs ?? 30_000\n }\n\n async start(): Promise<void> {\n const host = this.opts.host ?? '127.0.0.1'\n await new Promise<void>((resolve, reject) => {\n const wss = new WebSocketServer({\n host,\n port: this.opts.port,\n clientTracking: true,\n })\n wss.on('listening', () => {\n this.logger?.info('ws listening', { host, port: this.opts.port })\n resolve()\n })\n wss.on('error', (err) => {\n this.logger?.error('ws server error', { err: (err as Error).message })\n reject(err)\n })\n wss.on('connection', (socket, req) => this.onConnection(socket, req?.socket?.remoteAddress))\n this.wss = wss\n })\n }\n\n async stop(): Promise<void> {\n if (!this.wss) return\n for (const c of this.clients.values()) {\n try {\n c.ws.close(1001, 'shutdown')\n } catch {\n // ignore\n }\n if (c.pingTimer) clearInterval(c.pingTimer)\n }\n this.clients.clear()\n await new Promise<void>((resolve) => {\n this.wss?.close(() => resolve())\n })\n this.wss = null\n }\n\n onFrame(handler: FrameHandler): void {\n this.frameHandler = handler\n }\n\n broadcastToSession(sessionId: string, frame: unknown): void {\n for (const c of this.clients.values()) {\n if (c.handle.subscribedSessions.has(sessionId)) {\n this.safeSend(c.ws, frame)\n }\n }\n }\n\n // 广播给所有已连接客户端(无视 session 订阅)。\n // 用于 daemon 级事件,例如 tunnel:exited。未通过 auth 的连接被自动跳过。\n broadcastAll(frame: unknown): void {\n const gate = this.opts.authGate\n for (const c of this.clients.values()) {\n if (gate && !gate.isAuthed(c.handle.id)) continue\n this.safeSend(c.ws, frame)\n }\n }\n\n firstSubscriber(sessionId: string): ClientHandle | null {\n for (const c of this.clients.values()) {\n if (c.handle.subscribedSessions.has(sessionId)) return c.handle\n }\n return null\n }\n\n // AuthGate 用:按 client id 关闭连接(替代之前的反射访问)\n closeClient(clientId: string, code: number, reason: string): void {\n const c = this.clients.get(clientId)\n if (!c) return\n try {\n c.ws.close(code, reason)\n } catch {\n // ignore\n }\n }\n\n // AuthGate 用:按 client id 发送一帧(auth:ok 等)\n sendToClient(clientId: string, frame: unknown): void {\n const c = this.clients.get(clientId)\n if (!c) return\n this.safeSend(c.ws, frame)\n }\n\n private onConnection(socket: WebSocket, remoteAddress: string | undefined): void {\n const id = uuidv4()\n const subscribedSessions = new Set<string>()\n const handle: ClientHandle = {\n id,\n subscribedSessions,\n send: (frame) => this.safeSend(socket, frame),\n close: (reason) => socket.close(1000, reason ?? 'closed'),\n }\n const pingTimer = setInterval(() => {\n try {\n socket.send(JSON.stringify({ type: 'ping', at: Date.now() }))\n } catch {\n // 连接已断\n }\n }, this.pingIntervalMs)\n this.clients.set(id, { handle, ws: socket, pingTimer })\n this.logger?.info('client connected', { clientId: id, total: this.clients.size, remoteAddress })\n\n const authGate = this.opts.authGate\n let authed = true\n if (authGate) {\n const authHandle: AuthHandle = { id, remoteAddress }\n authed = authGate.registerConnection(authHandle)\n }\n\n // 未通过 auth 时只暴露 protocolVersion,避免给公网扫描器递指纹\n // (hostname / runningSessions / tools 等留到 auth:ok 后由 auth gate 触发完整 ready)\n try {\n if (authed) {\n const readyFrame = this.opts.readyFrameBuilder()\n this.safeSend(socket, { type: 'ready', ...readyFrame })\n } else {\n this.safeSend(socket, { type: 'ready', protocolVersion: this.opts.protocolVersion })\n }\n } catch (err) {\n this.logger?.warn('ready frame build failed', { err: (err as Error).message })\n }\n\n socket.on('message', (data: RawData) => {\n this.onMessage(handle, data, remoteAddress)\n })\n socket.on('close', () => {\n const c = this.clients.get(id)\n if (c?.pingTimer) clearInterval(c.pingTimer)\n this.clients.delete(id)\n authGate?.unregister(id)\n this.logger?.info('client disconnected', { clientId: id, remaining: this.clients.size })\n })\n socket.on('error', (err) => {\n this.logger?.warn('client socket error', { clientId: id, err: (err as Error).message })\n })\n }\n\n private onMessage(client: ClientHandle, data: RawData, remoteAddress: string | undefined): void {\n let frame: Record<string, unknown>\n try {\n frame = JSON.parse(data.toString())\n } catch {\n this.safeSend(this.clients.get(client.id)!.ws, { type: 'error', code: 'VALIDATION_ERROR', message: 'invalid json' })\n return\n }\n // auth 处理:尚未通过时只接受 auth 帧\n const authGate = this.opts.authGate\n if (authGate) {\n const wasAuthed = authGate.isAuthed(client.id)\n const verdict = authGate.handleFrame({ id: client.id, remoteAddress }, frame as { type?: unknown; token?: unknown })\n if (verdict !== 'pass') {\n // 刚通过 auth:补推一份完整 ready 帧(含 hostname / sessions / tools),\n // 这样上层无需感知 auth 流程,统一从 ready 拿全量信息\n if (!wasAuthed && authGate.isAuthed(client.id)) {\n try {\n const full = this.opts.readyFrameBuilder()\n this.safeSend(this.clients.get(client.id)!.ws, { type: 'ready', ...full })\n } catch (err) {\n this.logger?.warn('post-auth ready frame build failed', { err: (err as Error).message })\n }\n }\n return\n }\n }\n // 内置处理 ping / subscribe / unsubscribe\n if (frame.type === 'ping') {\n this.safeSend(this.clients.get(client.id)!.ws, { type: 'pong', at: Date.now() })\n return\n }\n if (frame.type === 'session:subscribe' && typeof frame.sessionId === 'string') {\n client.subscribedSessions.add(frame.sessionId)\n // 作为响应回一个空 ack\n if (typeof frame.requestId === 'string') {\n this.safeSend(this.clients.get(client.id)!.ws, { type: 'subscribed', requestId: frame.requestId, sessionId: frame.sessionId })\n }\n return\n }\n if (frame.type === 'session:unsubscribe' && typeof frame.sessionId === 'string') {\n client.subscribedSessions.delete(frame.sessionId)\n if (typeof frame.requestId === 'string') {\n this.safeSend(this.clients.get(client.id)!.ws, { type: 'unsubscribed', requestId: frame.requestId, sessionId: frame.sessionId })\n }\n return\n }\n if (!this.frameHandler) return\n Promise.resolve(this.frameHandler(client, frame)).catch((err: unknown) => {\n const e = err as { code?: string; message?: string }\n const requestId = typeof frame.requestId === 'string' ? frame.requestId : undefined\n this.safeSend(this.clients.get(client.id)!.ws, {\n type: 'error',\n requestId,\n code: e.code ?? 'INTERNAL',\n message: e.message ?? String(err),\n })\n })\n }\n\n private safeSend(ws: WebSocket, frame: unknown): void {\n if (ws.readyState !== WebSocket.OPEN) return\n try {\n ws.send(JSON.stringify(frame))\n } catch (err) {\n this.logger?.warn('safeSend failed', { err: (err as Error).message })\n }\n }\n\n // 测试辅助\n clientCount(): number {\n return this.clients.size\n }\n}\n","// First-message handshake auth gate.\n//\n// 客户端连上后必须在 timeoutMs 内发送 {\"type\":\"auth\",\"token\":\"...\"}(schema 见 protocol/AuthRequestFrameSchema)。\n// 通过 → 标记 authed;失败/超时/越权(提前发业务帧)→ 关连接 1008。\n// 本地 127.0.0.1 / ::1 来源 + tunnel=false 时跳过 auth(保持 1.0.0 体验)。\n// tunnel=true 时所有连接(含本机)都强制 auth:frpc 反代过来的连接 IP 也是 127.0.0.1,\n// 靠 IP 区分会被绕过。\n\nimport { AuthRequestFrameSchema } from '../protocol.js'\n\nexport type AuthMode = 'first-message' | 'none'\n\nexport interface AuthGateOptions {\n // 是否启用 auth;false 则所有连接直接放行(noAuth / 无 tunnel + localhost)\n // 函数形式让 LocalWsServer 在 onConnection 时按 remoteAddress 决定豁免\n shouldEnforce: (remoteAddress: string | undefined) => boolean\n // 期望的 token;shouldEnforce 返回 true 但 token 缺失时视为配置错误,所有连接都关\n expectedToken: string | null\n // 默认 5000ms\n timeoutMs?: number\n // 关连接时调(注入 ws.close 用,便于测试)\n closeConnection: (handle: AuthHandle, code: number, reason: string) => void\n // 发送 auth:ok 帧\n sendOk: (handle: AuthHandle, payload: { type: 'auth:ok' } & Record<string, unknown>) => void\n // 给 timeout 注入 timer,便于测试用 fake timers\n setTimer?: (cb: () => void, ms: number) => unknown\n clearTimer?: (h: unknown) => void\n}\n\nexport interface AuthHandle {\n id: string\n remoteAddress: string | undefined\n}\n\ninterface AuthState {\n authed: boolean\n enforce: boolean\n timer: unknown | null\n}\n\nexport class AuthGate {\n private readonly states = new Map<string, AuthState>()\n private readonly opts: Required<Pick<AuthGateOptions, 'timeoutMs'>> & AuthGateOptions\n\n constructor(opts: AuthGateOptions) {\n this.opts = { ...opts, timeoutMs: opts.timeoutMs ?? 5000 }\n }\n\n // 新连接接入;返回 isAuthed(豁免时直接 true)\n registerConnection(handle: AuthHandle): boolean {\n const enforce = this.opts.shouldEnforce(handle.remoteAddress)\n if (!enforce) {\n this.states.set(handle.id, { authed: true, enforce: false, timer: null })\n return true\n }\n const setT = this.opts.setTimer ?? ((cb, ms) => setTimeout(cb, ms))\n const timer = setT(() => {\n const st = this.states.get(handle.id)\n if (!st || st.authed) return\n this.opts.closeConnection(handle, 1008, 'auth timeout')\n }, this.opts.timeoutMs)\n this.states.set(handle.id, { authed: false, enforce: true, timer })\n return false\n }\n\n unregister(handleId: string): void {\n const st = this.states.get(handleId)\n if (st?.timer != null) {\n const clear = this.opts.clearTimer ?? ((h) => clearTimeout(h as ReturnType<typeof setTimeout>))\n clear(st.timer)\n }\n this.states.delete(handleId)\n }\n\n isAuthed(handleId: string): boolean {\n return this.states.get(handleId)?.authed ?? false\n }\n\n // 收到一帧时调;返回 'consumed' / 'reject' / 'pass'\n // - consumed:这一帧是 auth 帧(成功或失败),调用方不要再走业务路由\n // - reject:未通过 auth 但帧不是 auth 帧,调用方应放弃此帧(gate 已关连接)\n // - pass:已 authed,调用方继续走业务路由\n handleFrame(handle: AuthHandle, frame: { type?: unknown; token?: unknown }): 'consumed' | 'reject' | 'pass' {\n const st = this.states.get(handle.id)\n if (!st) return 'reject'\n if (st.authed) return 'pass'\n\n // 此时 enforce=true,期待 first-message;用 protocol schema 校验 wire shape\n const parsed = AuthRequestFrameSchema.safeParse(frame)\n if (!parsed.success) {\n // 不是合法 auth 帧 —— 先看 type 区分\"用户提前发业务帧\"vs\"格式错的 auth 帧\"\n const reason = frame.type === 'auth' ? 'auth failed' : 'auth required'\n this.opts.closeConnection(handle, 1008, reason)\n this.markFailed(handle.id)\n return frame.type === 'auth' ? 'consumed' : 'reject'\n }\n if (!this.opts.expectedToken) {\n this.opts.closeConnection(handle, 1008, 'auth not configured')\n this.markFailed(handle.id)\n return 'consumed'\n }\n if (!constantTimeEqual(parsed.data.token, this.opts.expectedToken)) {\n this.opts.closeConnection(handle, 1008, 'auth failed')\n this.markFailed(handle.id)\n return 'consumed'\n }\n // 通过\n if (st.timer != null) {\n const clear = this.opts.clearTimer ?? ((h) => clearTimeout(h as ReturnType<typeof setTimeout>))\n clear(st.timer)\n }\n st.authed = true\n st.timer = null\n this.opts.sendOk(handle, { type: 'auth:ok' })\n return 'consumed'\n }\n\n private markFailed(handleId: string): void {\n const st = this.states.get(handleId)\n if (!st) return\n if (st.timer != null) {\n const clear = this.opts.clearTimer ?? ((h) => clearTimeout(h as ReturnType<typeof setTimeout>))\n clear(st.timer)\n }\n st.timer = null\n }\n}\n\nfunction constantTimeEqual(a: string, b: string): boolean {\n if (a.length !== b.length) return false\n let diff = 0\n for (let i = 0; i < a.length; i++) diff |= a.charCodeAt(i) ^ b.charCodeAt(i)\n return diff === 0\n}\n\n// 选 enforce 策略:\n// - tunnel=true → 所有连接都强制 auth(包括 localhost;frpc 反代时 IP 看着像 localhost)\n// - 其他 → 仅 localhost 豁免\nexport function buildShouldEnforce(opts: { tunnel: boolean }): (addr: string | undefined) => boolean {\n if (opts.tunnel) return () => true\n return (addr) => !isLocalhost(addr)\n}\n\nexport function isLocalhost(addr: string | undefined): boolean {\n if (!addr) return false\n return addr === '127.0.0.1' || addr === '::1' || addr === '::ffff:127.0.0.1'\n}\n","import fs from 'node:fs'\nimport path from 'node:path'\n\nexport type AuthMode = 'first-message' | 'none'\n\nexport interface StateFile {\n pid: number\n transport: 'local-ws' | 'remote-ws'\n url: string\n version: string\n protocolVersion: number\n startedAt: string\n // tunnel 模式:暴露的公网 ws/wss URL\n tunnelUrl?: string\n // first-message auth 模式下 daemon 期望的 token;none 模式留空\n authToken?: string\n authMode: AuthMode\n}\n\nexport interface StateFileManagerOptions {\n dataDir: string\n}\n\nexport function defaultStateFilePath(dataDir: string): string {\n return path.join(dataDir, 'state.json')\n}\n\nfunction isPidAlive(pid: number): boolean {\n if (!Number.isFinite(pid) || pid <= 0) return false\n try {\n process.kill(pid, 0)\n return true\n } catch (err) {\n const code = (err as NodeJS.ErrnoException).code\n // EPERM 表示进程存在但无权限发信号(仍算活)\n return code === 'EPERM'\n }\n}\n\nexport class StateFileManager {\n private readonly file: string\n\n constructor(opts: StateFileManagerOptions) {\n this.file = defaultStateFilePath(opts.dataDir)\n }\n\n filePath(): string {\n return this.file\n }\n\n read(): StateFile | null {\n try {\n const raw = fs.readFileSync(this.file, 'utf8')\n const parsed = JSON.parse(raw) as StateFile\n return parsed\n } catch {\n return null\n }\n }\n\n preflight():\n | { status: 'ok' }\n | { status: 'stale'; existing: StateFile }\n | { status: 'active'; existing: StateFile } {\n const existing = this.read()\n if (!existing) return { status: 'ok' }\n if (isPidAlive(existing.pid)) return { status: 'active', existing }\n return { status: 'stale', existing }\n }\n\n write(state: StateFile): void {\n fs.mkdirSync(path.dirname(this.file), { recursive: true })\n const tmp = `${this.file}.tmp.${process.pid}.${Date.now()}`\n fs.writeFileSync(tmp, JSON.stringify(state, null, 2), { mode: 0o600 })\n fs.renameSync(tmp, this.file)\n if (process.platform !== 'win32') {\n try { fs.chmodSync(this.file, 0o600) } catch { /* ignore */ }\n }\n }\n\n delete(): void {\n try { fs.unlinkSync(this.file) } catch { /* ignore */ }\n }\n}\n","// 串接:TunnelStore(持久化)+ ensureFrpcBinary + buildFrpcToml + spawn frpc。\n// 启动时优先用缓存凭证;失败则回退到 register。\n\nimport fs from 'node:fs'\nimport path from 'node:path'\nimport { spawn, type ChildProcess } from 'node:child_process'\nimport type { Logger } from '../logger.js'\nimport { TunnelStore, type PersistedTunnel } from './tunnel-store.js'\nimport { registerTunnel, TunnelRegisterError } from './register-client.js'\nimport { buildFrpcToml } from './frpc-config.js'\nimport { ensureFrpcBinary } from './frpc-binary.js'\n\nexport const DEFAULT_TUNNEL_TTL_MS = 7 * 24 * 60 * 60 * 1000\n\nexport interface TunnelManagerDeps {\n dataDir: string\n clawosApi: string\n deviceKey: string\n frpcBinaryOverride?: string | null\n noPersist?: boolean\n ttlMs?: number\n logger?: Logger\n // 注入用,便于测试\n store?: TunnelStore\n spawnImpl?: typeof spawn\n registerImpl?: typeof registerTunnel\n ensureFrpcImpl?: typeof ensureFrpcBinary\n startupTimeoutMs?: number\n // frpc 子进程在 daemon 仍存活时意外退出的回调(用来 broadcast tunnel:exited)\n onFrpcExit?: (info: { code: number | null; subdomain: string | null; url: string | null }) => void\n // 注册 process exit / SIGHUP / uncaughtException 同步杀子进程钩子。\n // 默认 false(测试不污染 process 监听器);cli.ts 在生产路径显式 true。\n installProcessExitHandlers?: boolean\n}\n\nexport interface TunnelStartResult {\n url: string\n subdomain: string\n}\n\ninterface SpawnResult {\n ok: true\n proc: ChildProcess\n}\n\ninterface SpawnFailure {\n ok: false\n error: Error\n}\n\nexport class TunnelManager {\n private proc: ChildProcess | null = null\n private current: PersistedTunnel | null = null\n private readonly store: TunnelStore\n private readonly ttlMs: number\n private readonly startupTimeoutMs: number\n private exitHookInstalled = false\n // 标记是否在主动 stop 中:true 时不要把 frpc 退出 emit 成 onFrpcExit\n private stopping = false\n\n constructor(private readonly deps: TunnelManagerDeps) {\n this.store = deps.store ?? new TunnelStore(path.join(deps.dataDir, 'tunnel.json'))\n this.ttlMs = deps.ttlMs ?? DEFAULT_TUNNEL_TTL_MS\n this.startupTimeoutMs = deps.startupTimeoutMs ?? 15_000\n }\n\n get url(): string | null {\n return this.current?.url ?? null\n }\n\n async start(opts: { localPort: number }): Promise<TunnelStartResult> {\n const { logger } = this.deps\n // 1. 用缓存凭证\n if (!this.deps.noPersist) {\n const cached = await this.store.get()\n if (cached && this.isFresh(cached)) {\n logger?.info('tunnel: trying cached credentials', { subdomain: cached.subdomain })\n const r = await this.tryStart(cached, opts.localPort)\n if (r.ok) {\n this.proc = r.proc\n this.current = cached\n this.installProcessExitHandlers()\n this.attachExitListener(r.proc)\n return { url: cached.url, subdomain: cached.subdomain }\n }\n logger?.warn('tunnel: cached credentials failed, re-registering', { err: r.error.message })\n }\n }\n // 2. register + 写 store\n const reg = await (this.deps.registerImpl ?? registerTunnel)({\n api: this.deps.clawosApi,\n deviceKey: this.deps.deviceKey,\n })\n const persisted: PersistedTunnel = {\n subdomain: reg.subdomain,\n frpsHost: reg.frpsHost,\n frpsPort: reg.frpsPort,\n frpsToken: reg.frpsToken,\n url: reg.url,\n registeredAt: new Date().toISOString(),\n }\n await this.store.set(persisted)\n const r = await this.tryStart(persisted, opts.localPort)\n if (!r.ok) throw r.error\n this.proc = r.proc\n this.current = persisted\n this.installProcessExitHandlers()\n this.attachExitListener(r.proc)\n return { url: persisted.url, subdomain: persisted.subdomain }\n }\n\n async stop(): Promise<void> {\n this.stopping = true\n const proc = this.proc\n this.proc = null\n if (!proc) return\n proc.kill('SIGTERM')\n await new Promise<void>((resolve) => {\n const t = setTimeout(() => {\n try {\n proc.kill('SIGKILL')\n } catch {\n // ignore\n }\n resolve()\n }, 5000)\n proc.once('exit', () => {\n clearTimeout(t)\n resolve()\n })\n })\n }\n\n // 同步杀子进程:父进程崩溃 / SIGHUP / process.exit 路径下使用,\n // async stop() 跑不完时的兜底,避免留下孤儿 frpc。\n killSync(): void {\n const proc = this.proc\n this.proc = null\n if (!proc) return\n try {\n proc.kill('SIGTERM')\n } catch {\n // ignore\n }\n }\n\n private isFresh(t: PersistedTunnel): boolean {\n const age = Date.now() - new Date(t.registeredAt).getTime()\n return Number.isFinite(age) && age < this.ttlMs\n }\n\n private attachExitListener(proc: ChildProcess): void {\n proc.on('exit', (code) => {\n this.deps.logger?.warn('frpc exited', { code })\n // 主动 stop 不算 unexpected\n if (this.stopping) return\n const cur = this.current\n this.proc = null\n this.deps.onFrpcExit?.({\n code,\n subdomain: cur?.subdomain ?? null,\n url: cur?.url ?? null,\n })\n })\n }\n\n private installProcessExitHandlers(): void {\n if (this.exitHookInstalled) return\n if (this.deps.installProcessExitHandlers !== true) return\n this.exitHookInstalled = true\n const sync = () => this.killSync()\n process.once('exit', sync)\n process.once('SIGHUP', sync)\n process.once('uncaughtException', sync)\n }\n\n private async tryStart(t: PersistedTunnel, localPort: number): Promise<SpawnResult | SpawnFailure> {\n try {\n const frpcBin = await (this.deps.ensureFrpcImpl ?? ensureFrpcBinary)({\n dataDir: this.deps.dataDir,\n override: this.deps.frpcBinaryOverride ?? undefined,\n })\n const tomlPath = path.join(this.deps.dataDir, 'frpc.toml')\n const toml = buildFrpcToml({\n serverAddr: t.frpsHost,\n serverPort: t.frpsPort,\n authToken: t.frpsToken,\n proxyName: 'clawd',\n subdomain: t.subdomain,\n localPort,\n logLevel: 'info',\n })\n await fs.promises.writeFile(tomlPath, toml, { mode: 0o600 })\n const proc = (this.deps.spawnImpl ?? spawn)(frpcBin, ['-c', tomlPath], {\n stdio: ['ignore', 'pipe', 'pipe'],\n })\n // frpc 日志走 console → 父进程同时 (a) 监听 stdout/stderr 识别 ready\n // (b) 把同一份内容追加写到 ~/.clawd/frpc.log 做事后排查。\n // 用 data 监听 + write 而不是 pipe,让 spec 里的 EventEmitter mock 也能跑通\n const logFilePath = path.join(this.deps.dataDir, 'frpc.log')\n const logStream = fs.createWriteStream(logFilePath, { flags: 'a', mode: 0o600 })\n logStream.on('error', () => { /* 持久化失败不影响主流程 */ })\n const tee = (chunk: Buffer | string) => { logStream.write(String(chunk)) }\n proc.stdout?.on('data', tee)\n proc.stderr?.on('data', tee)\n proc.once('exit', () => { logStream.end() })\n const ready = await waitForFrpcReady(proc, this.startupTimeoutMs)\n if (!ready.ok) {\n try {\n proc.kill('SIGTERM')\n } catch {\n // ignore\n }\n return { ok: false, error: new Error(ready.error) }\n }\n this.deps.logger?.info('tunnel: frpc up', { subdomain: t.subdomain, url: t.url })\n return { ok: true, proc }\n } catch (err) {\n if (err instanceof TunnelRegisterError) throw err\n return { ok: false, error: err as Error }\n }\n }\n}\n\ninterface ReadyOk {\n ok: true\n}\ninterface ReadyFail {\n ok: false\n error: string\n}\n\nexport async function waitForFrpcReady(\n proc: ChildProcess,\n timeoutMs: number,\n): Promise<ReadyOk | ReadyFail> {\n return new Promise<ReadyOk | ReadyFail>((resolve) => {\n let settled = false\n let buf = ''\n const finish = (r: ReadyOk | ReadyFail) => {\n if (settled) return\n settled = true\n cleanup()\n resolve(r)\n }\n const onData = (chunk: Buffer | string) => {\n buf += String(chunk)\n if (/start proxy success/.test(buf) || /\\[clawd\\] success/.test(buf)) {\n finish({ ok: true })\n }\n // frpc 错误关键字:login to server failed / authentication failed\n if (/login to server failed|authentication failed/i.test(buf)) {\n finish({ ok: false, error: `frpc handshake failed: ${buf.trim().slice(-200)}` })\n }\n }\n const onExit = (code: number | null) => {\n finish({ ok: false, error: `frpc exited before ready (code=${code})` })\n }\n const onErr = (err: Error) => finish({ ok: false, error: `frpc spawn error: ${err.message}` })\n const cleanup = () => {\n proc.stdout?.off('data', onData)\n proc.stderr?.off('data', onData)\n proc.off('exit', onExit)\n proc.off('error', onErr)\n clearTimeout(timer)\n }\n proc.stdout?.on('data', onData)\n proc.stderr?.on('data', onData)\n proc.on('exit', onExit)\n proc.on('error', onErr)\n const timer = setTimeout(() => {\n finish({ ok: false, error: `frpc startup timeout after ${timeoutMs}ms` })\n }, timeoutMs)\n })\n}\n","// 持久化 frp register 拿到的凭证到 ~/.clawd/tunnel.json (0600)。\n// TTL 判断在 manager 层做(这里只 r/w)。\n\nimport fs from 'node:fs'\nimport path from 'node:path'\n\nexport interface PersistedTunnel {\n subdomain: string\n frpsHost: string\n frpsPort: number\n frpsToken: string\n url: string\n registeredAt: string\n}\n\nexport class TunnelStore {\n constructor(private readonly filePath: string) {}\n\n async get(): Promise<PersistedTunnel | null> {\n try {\n const raw = await fs.promises.readFile(this.filePath, 'utf8')\n const obj = JSON.parse(raw)\n if (!isPersistedTunnel(obj)) return null\n return obj\n } catch (err: unknown) {\n const code = (err as NodeJS.ErrnoException)?.code\n if (code === 'ENOENT') return null\n return null\n }\n }\n\n async set(v: PersistedTunnel): Promise<void> {\n const dir = path.dirname(this.filePath)\n await fs.promises.mkdir(dir, { recursive: true })\n const data = JSON.stringify(v, null, 2)\n // tmp + rename:保证 0600 在 overwrite 场景也生效(writeFile mode 仅在创建时起作用),\n // 同时 rename 是原子的,不会出现读到半截文件\n const tmp = `${this.filePath}.tmp.${process.pid}.${Date.now()}`\n await fs.promises.writeFile(tmp, data, { mode: 0o600 })\n if (process.platform !== 'win32') {\n try {\n await fs.promises.chmod(tmp, 0o600)\n } catch {\n // best-effort\n }\n }\n await fs.promises.rename(tmp, this.filePath)\n }\n\n async clear(): Promise<void> {\n try {\n await fs.promises.unlink(this.filePath)\n } catch (err: unknown) {\n const code = (err as NodeJS.ErrnoException)?.code\n if (code !== 'ENOENT') throw err\n }\n }\n}\n\nfunction isPersistedTunnel(o: unknown): o is PersistedTunnel {\n if (!o || typeof o !== 'object') return false\n const r = o as Record<string, unknown>\n return (\n typeof r.subdomain === 'string' &&\n typeof r.frpsHost === 'string' &&\n typeof r.frpsPort === 'number' &&\n typeof r.frpsToken === 'string' &&\n typeof r.url === 'string' &&\n typeof r.registeredAt === 'string'\n )\n}\n","// 调用 clawos `POST /api/tunnel/register` 拿临时 frp 凭证。\n// 不依赖父仓代码——HTTP 协议 frozen 在这里。\n\nexport interface TunnelRegistration {\n subdomain: string\n url: string\n frpsHost: string\n frpsPort: number\n frpsToken: string\n}\n\nexport interface RegisterTunnelOptions {\n api: string\n deviceKey: string\n fetchImpl?: typeof fetch\n timeoutMs?: number\n}\n\nexport class TunnelRegisterError extends Error {\n constructor(message: string, public readonly cause?: unknown) {\n super(message)\n this.name = 'TunnelRegisterError'\n }\n}\n\nexport async function registerTunnel(opts: RegisterTunnelOptions): Promise<TunnelRegistration> {\n const f = opts.fetchImpl ?? globalThis.fetch\n if (!f) throw new TunnelRegisterError('fetch is not available (Node >= 18 required)')\n const url = `${opts.api.replace(/\\/+$/, '')}/api/tunnel/register`\n const ctrl = new AbortController()\n const timer = setTimeout(() => ctrl.abort(), opts.timeoutMs ?? 15_000)\n let res: Response\n try {\n res = await f(url, {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify({ gatewayCount: 1, deviceKeys: [opts.deviceKey] }),\n signal: ctrl.signal,\n })\n } catch (err) {\n clearTimeout(timer)\n throw new TunnelRegisterError(`tunnel register network error: ${(err as Error).message}`, err)\n }\n clearTimeout(timer)\n if (!res.ok) {\n let bodyText = ''\n try {\n bodyText = (await res.text()).slice(0, 200)\n } catch {\n // ignore\n }\n throw new TunnelRegisterError(`tunnel register failed: HTTP ${res.status} ${bodyText}`)\n }\n let payload: unknown\n try {\n payload = await res.json()\n } catch (err) {\n throw new TunnelRegisterError(`tunnel register: invalid json response`, err)\n }\n const tunnels = (payload as { tunnels?: unknown }).tunnels\n if (!Array.isArray(tunnels) || tunnels.length === 0) {\n throw new TunnelRegisterError(`tunnel register: missing tunnels in response`)\n }\n const t = tunnels[0] as Record<string, unknown>\n if (\n typeof t.subdomain !== 'string' ||\n typeof t.url !== 'string' ||\n typeof t.frpsHost !== 'string' ||\n typeof t.frpsPort !== 'number' ||\n typeof t.token !== 'string'\n ) {\n throw new TunnelRegisterError(`tunnel register: malformed tunnel entry`)\n }\n return {\n subdomain: t.subdomain,\n url: t.url,\n frpsHost: t.frpsHost,\n frpsPort: t.frpsPort,\n frpsToken: t.token,\n }\n}\n","// 生成 frpc.toml 内容(frp 0.61+ 格式)\n// 纯字符串拼接,避免引入 toml 库\n//\n// 注意:故意不写 log.to —— frpc 默认走 console(stdout/stderr)。\n// 父进程 (TunnelManager.tryStart) 监听 stdout 来识别 \"start proxy success\";\n// 持久化到 ~/.clawd/frpc.log 由父进程在数据回调里写文件,避免 frpc 自己写文件\n// 时父进程拿不到 ready 信号。\n\nexport interface FrpcConfigInput {\n serverAddr: string\n serverPort: number\n authToken: string\n proxyName: string\n subdomain: string\n localIP?: string\n localPort: number\n logLevel?: 'trace' | 'debug' | 'info' | 'warn' | 'error'\n}\n\nexport function buildFrpcToml(input: FrpcConfigInput): string {\n const localIP = input.localIP ?? '127.0.0.1'\n const lines: string[] = []\n lines.push(`serverAddr = \"${escape(input.serverAddr)}\"`)\n lines.push(`serverPort = ${input.serverPort}`)\n lines.push(`auth.method = \"token\"`)\n lines.push(`auth.token = \"${escape(input.authToken)}\"`)\n lines.push(`log.level = \"${input.logLevel ?? 'info'}\"`)\n lines.push('')\n lines.push('[[proxies]]')\n lines.push(`name = \"${escape(input.proxyName)}\"`)\n lines.push('type = \"http\"')\n lines.push(`localIP = \"${escape(localIP)}\"`)\n lines.push(`localPort = ${input.localPort}`)\n lines.push(`subdomain = \"${escape(input.subdomain)}\"`)\n return lines.join('\\n') + '\\n'\n}\n\nfunction escape(v: string): string {\n return v.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"')\n}\n","// frpc 二进制管理:按 OS/arch 从 GitHub release 下载到 ~/.clawd/bin/。\n//\n// 故意不内嵌 sha256 列表(每平台一个会让维护变沉重):\n// 通过 HTTPS + GitHub release 的稳定 URL 获取,依赖 TLS + GitHub 完整性。\n// 这与 ngrok / cloudflared 包装的常见做法一致。\n// 如果以后需要严格校验,可以加一份与版本绑定的 sha256 表。\n//\n// 安装走 atomic rename 模式:先写到 frpc.partial / 解压到一次性 work 目录,\n// 全部成功后才 rename 成 frpc。中途 crash / Ctrl-C 留下的半截 .partial / extract-* 目录,\n// 下次启动会被识别并清理,不会被当成正常二进制使用。\n\nimport fs from 'node:fs'\nimport os from 'node:os'\nimport path from 'node:path'\nimport { execFile, spawn } from 'node:child_process'\nimport { Readable } from 'node:stream'\nimport { pipeline } from 'node:stream/promises'\n\nexport const FRPC_VERSION = '0.68.0'\n\nexport interface PlatformInfo {\n os: 'darwin' | 'linux'\n arch: 'amd64' | 'arm64'\n}\n\nexport class UnsupportedPlatformError extends Error {\n constructor(public platform: string, public arch: string) {\n super(`unsupported frpc platform: ${platform}/${arch}`)\n }\n}\n\nexport function detectPlatform(opts: { platform?: NodeJS.Platform; arch?: string } = {}): PlatformInfo {\n const platform = opts.platform ?? process.platform\n const arch = opts.arch ?? process.arch\n let oss: PlatformInfo['os']\n if (platform === 'darwin') oss = 'darwin'\n else if (platform === 'linux') oss = 'linux'\n else throw new UnsupportedPlatformError(platform, arch)\n let a: PlatformInfo['arch']\n if (arch === 'arm64' || arch === 'aarch64') a = 'arm64'\n else if (arch === 'x64' || arch === 'amd64') a = 'amd64'\n else throw new UnsupportedPlatformError(platform, arch)\n return { os: oss, arch: a }\n}\n\nexport function frpcDownloadUrl(version: string, p: PlatformInfo): string {\n return `https://github.com/fatedier/frp/releases/download/v${version}/frp_${version}_${p.os}_${p.arch}.tar.gz`\n}\n\nexport interface EnsureFrpcOptions {\n dataDir: string\n override?: string | null\n version?: string\n fetchImpl?: typeof fetch\n // 测试钩子:跳过 tar 解包,直接把 fixture 文件挪到目标路径\n installFromTarball?: (tarballPath: string, destBin: string) => Promise<void>\n platform?: PlatformInfo\n}\n\nexport async function ensureFrpcBinary(opts: EnsureFrpcOptions): Promise<string> {\n if (opts.override) {\n if (!fs.existsSync(opts.override)) {\n throw new Error(`frpc binary not found at override path: ${opts.override}`)\n }\n return opts.override\n }\n const version = opts.version ?? FRPC_VERSION\n const platform = opts.platform ?? detectPlatform()\n const binDir = path.join(opts.dataDir, 'bin')\n fs.mkdirSync(binDir, { recursive: true })\n // 清掉前一次 crash 留下的半成品(.partial 文件 / extract-* 目录)\n cleanupStaleArtifacts(binDir)\n const stableBin = path.join(binDir, 'frpc')\n if (fs.existsSync(stableBin)) return stableBin\n\n // 下到 .partial,再 rename 成 frpc:保证 stableBin 存在 == 安装完整\n const partialBin = `${stableBin}.partial`\n const tarballPath = path.join(binDir, `frp_${version}_${platform.os}_${platform.arch}.tar.gz.partial`)\n try {\n const url = frpcDownloadUrl(version, platform)\n await downloadToFile(url, tarballPath, opts.fetchImpl)\n if (opts.installFromTarball) {\n await opts.installFromTarball(tarballPath, partialBin)\n } else {\n await extractFrpcFromTarball(tarballPath, binDir, version, platform, partialBin)\n }\n fs.chmodSync(partialBin, 0o755)\n fs.renameSync(partialBin, stableBin)\n } finally {\n safeUnlink(tarballPath)\n safeUnlink(partialBin)\n }\n return stableBin\n}\n\nfunction cleanupStaleArtifacts(binDir: string): void {\n let entries: string[]\n try {\n entries = fs.readdirSync(binDir)\n } catch {\n return\n }\n for (const name of entries) {\n if (name.endsWith('.partial') || name.startsWith('extract-')) {\n const full = path.join(binDir, name)\n try {\n fs.rmSync(full, { recursive: true, force: true })\n } catch {\n // best-effort\n }\n }\n }\n}\n\nfunction safeUnlink(p: string): void {\n try {\n fs.unlinkSync(p)\n } catch {\n // best-effort\n }\n}\n\nasync function downloadToFile(url: string, dest: string, fetchImpl?: typeof fetch): Promise<void> {\n const f = fetchImpl ?? globalThis.fetch\n if (!f) throw new Error('fetch is not available (Node >= 18 required)')\n const res = await f(url, { redirect: 'follow' })\n if (!res.ok || !res.body) {\n throw new Error(`download failed: ${res.status} ${res.statusText}`)\n }\n const out = fs.createWriteStream(dest)\n // 兼容 Web ReadableStream → Node Readable\n const nodeStream = Readable.fromWeb(res.body as unknown as Parameters<typeof Readable.fromWeb>[0])\n await pipeline(nodeStream, out)\n}\n\nasync function extractFrpcFromTarball(\n tarball: string,\n binDir: string,\n version: string,\n platform: PlatformInfo,\n destBin: string,\n): Promise<void> {\n // 用系统 tar 解到 binDir/extract-<ts>/,再把 frpc 挪到 destBin\n // 不引第三方 tar 库(保 npm tarball 干净)\n const work = path.join(binDir, `extract-${process.pid}-${Date.now()}`)\n fs.mkdirSync(work, { recursive: true })\n try {\n await new Promise<void>((resolve, reject) => {\n const proc = spawn('tar', ['xzf', tarball, '-C', work], { stdio: 'pipe' })\n proc.on('error', reject)\n proc.on('exit', (code) => (code === 0 ? resolve() : reject(new Error(`tar exited ${code}`))))\n })\n const dirName = `frp_${version}_${platform.os}_${platform.arch}`\n const src = path.join(work, dirName, 'frpc')\n if (!fs.existsSync(src)) {\n throw new Error(`frpc not found inside tarball at ${src}`)\n }\n fs.copyFileSync(src, destBin)\n } finally {\n fs.rmSync(work, { recursive: true, force: true })\n }\n}\n\n// 测试用:验证 spawned binary 是 frpc(执行 --version 看输出包含 frp)\nexport async function verifyFrpcBinary(binPath: string): Promise<{ ok: boolean; stdout: string }> {\n return new Promise((resolve) => {\n execFile(binPath, ['--version'], { timeout: 5000 }, (err, stdout) => {\n if (err) return resolve({ ok: false, stdout: '' })\n resolve({ ok: /\\d+\\.\\d+\\.\\d+/.test(stdout), stdout })\n })\n })\n}\n\n// 用于测试:默认 dataDir = ~/.clawd\nexport function defaultDataDir(home = os.homedir()): string {\n return path.join(home, '.clawd')\n}\n","import os from 'node:os'\nimport crypto from 'node:crypto'\n\n// 给 /api/tunnel/register 的 deviceKey 字段:稳定(重启不变)+ 用户隔离 + 不暴露任何敏感信息\n// 用 hostname + uid 作为 input,HMAC 一下避免外露主机名\nconst DERIVE_SALT = 'clawd-tunnel-device-v1'\n\nexport function deriveStableDeviceKey(opts: { hostname?: string; uid?: number } = {}): string {\n const hostname = opts.hostname ?? os.hostname()\n const uid = opts.uid ?? (typeof os.userInfo === 'function' ? os.userInfo().uid : 0)\n const input = `${hostname}::${uid}`\n return crypto.createHmac('sha256', DERIVE_SALT).update(input).digest('hex').slice(0, 32)\n}\n","// 持久化 daemon 的 first-message auth token:\n// 写在 ~/.clawd/auth.json (0600),跨重启复用,让用户复制过的 Connect 行长期有效。\n// 想换 token?删除 ~/.clawd/auth.json 后重启 daemon 即可。\n//\n// 与 ~/.clawd/state.json 区分:state.json 是当前进程独占(preflight 检查),\n// daemon 退出时会被删;auth.json 是跨进程持久化的\"机器身份\",daemon 不会删它。\n\nimport fs from 'node:fs'\nimport path from 'node:path'\nimport crypto from 'node:crypto'\n\nexport interface AuthFile {\n token: string\n createdAt: string\n}\n\nexport interface LoadOrCreateAuthTokenOptions {\n dataDir: string\n // 测试钩子\n generate?: () => string\n now?: () => Date\n}\n\nexport const AUTH_FILE_NAME = 'auth.json'\n\nexport function authFilePath(dataDir: string): string {\n return path.join(dataDir, AUTH_FILE_NAME)\n}\n\nexport function loadOrCreateAuthToken(opts: LoadOrCreateAuthTokenOptions): string {\n const file = authFilePath(opts.dataDir)\n const existing = readAuthFile(file)\n if (existing && existing.token) return existing.token\n const token = (opts.generate ?? defaultGenerate)()\n const now = (opts.now ?? (() => new Date()))()\n writeAuthFile(file, { token, createdAt: now.toISOString() })\n return token\n}\n\nfunction defaultGenerate(): string {\n return crypto.randomBytes(32).toString('base64url')\n}\n\nfunction readAuthFile(file: string): AuthFile | null {\n try {\n const raw = fs.readFileSync(file, 'utf8')\n const parsed = JSON.parse(raw) as Partial<AuthFile>\n if (typeof parsed?.token === 'string' && parsed.token.length > 0) {\n return {\n token: parsed.token,\n createdAt: typeof parsed.createdAt === 'string' ? parsed.createdAt : new Date(0).toISOString(),\n }\n }\n return null\n } catch (err) {\n const code = (err as NodeJS.ErrnoException)?.code\n if (code === 'ENOENT') return null\n // 解析失败 / 权限错误:不抛,让上层重新生成;老文件被覆盖\n return null\n }\n}\n\nfunction writeAuthFile(file: string, content: AuthFile): void {\n fs.mkdirSync(path.dirname(file), { recursive: true })\n // 0600 权限:仅 owner 可读写。先写后 chmod 保证创建即受限\n fs.writeFileSync(file, JSON.stringify(content, null, 2), { mode: 0o600 })\n try {\n fs.chmodSync(file, 0o600)\n } catch {\n // 某些 fs(Windows / 网络盘)可能不支持,忽略\n }\n}\n","// git 探测 + worktree 管理 + label 清洗。\n//\n// 源头:openclaw-plugin-clawos/src/claude-code/{git-root,git-branch,git-worktree}.ts\n// 由 port-recent-cc-direct-features-to-ext-clawd change 文件级搬运到 daemon,\n// 一比一保留 plugin 版本的错误文案、超时、正则、11 步顺序。\n// plugin 与 daemon 双副本长期并存(\"两套体系\"约束)。\n\nimport { execFile } from 'node:child_process'\nimport fs from 'node:fs'\nimport os from 'node:os'\nimport path from 'node:path'\nimport { promisify } from 'node:util'\n\nconst pexec = promisify(execFile)\n\n// ------------------------------ git:root ------------------------------\n\nexport interface GitRootResult {\n /** cwd 是否是 git repo 的根(规范化路径对比) */\n isGitRoot: boolean\n /** cwd 所在 git repo 的根绝对路径;非 git 目录时为 null */\n gitRoot: string | null\n}\n\n/**\n * 规范化路径:resolve + realpath(处理符号链接),失败时退回 resolve。\n * 目的:让\"用户输入的带 .. / symlink 的路径\"和 `git rev-parse --show-toplevel`\n * 输出的物理路径能正确对比。\n */\nfunction normalizePath(p: string): string {\n const resolved = path.resolve(p)\n try {\n return fs.realpathSync(resolved)\n } catch {\n return resolved\n }\n}\n\n/**\n * 判断 cwd 是否是 git repo 根,并返回真实的 git root 路径。\n * - 非 git 目录 → `{ isGitRoot: false, gitRoot: null }`\n * - cwd 是子目录 → `{ isGitRoot: false, gitRoot: <repo 根> }`(前端可据此提示)\n * - cwd 是根 → `{ isGitRoot: true, gitRoot: <repo 根> }`\n * - 3s 超时;所有错误吞掉返回 null\n */\nexport async function getGitRoot(cwd: string): Promise<GitRootResult> {\n if (!cwd || typeof cwd !== 'string') return { isGitRoot: false, gitRoot: null }\n try {\n const { stdout } = await pexec('git', ['-C', cwd, 'rev-parse', '--show-toplevel'], {\n timeout: 3000,\n })\n const toplevel = stdout.trim()\n if (!toplevel) return { isGitRoot: false, gitRoot: null }\n const normalizedTop = normalizePath(toplevel)\n const normalizedCwd = normalizePath(cwd)\n return {\n isGitRoot: normalizedTop === normalizedCwd,\n gitRoot: normalizedTop,\n }\n } catch {\n return { isGitRoot: false, gitRoot: null }\n }\n}\n\n// ------------------------------ git:branch ------------------------------\n\n/**\n * 读取给定 cwd 的当前 git 分支名。\n * - detached HEAD / 非 git 仓库 / 读取失败 → 返回 null\n * - 3s 超时兜底(正常毫秒级即可返回)\n */\nexport async function readGitBranch(cwd: string): Promise<{ branch: string | null }> {\n if (!cwd || typeof cwd !== 'string') return { branch: null }\n try {\n const { stdout } = await pexec('git', ['-C', cwd, 'rev-parse', '--abbrev-ref', 'HEAD'], {\n timeout: 3000,\n })\n const branch = stdout.trim()\n if (!branch || branch === 'HEAD') return { branch: null }\n return { branch }\n } catch {\n return { branch: null }\n }\n}\n\n// ------------------------------ git:branches ------------------------------\n\n/** 列出本地分支(按 committerdate 倒序)+ HEAD 分支名;非 git → `{ branches: [], head: null }`。 */\nexport async function listGitBranches(\n cwd: string,\n): Promise<{ branches: string[]; head: string | null }> {\n if (!cwd || typeof cwd !== 'string') return { branches: [], head: null }\n try {\n const { stdout: branchesOut } = await pexec(\n 'git',\n [\n '-C',\n cwd,\n 'for-each-ref',\n '--sort=-committerdate',\n '--format=%(refname:short)',\n 'refs/heads',\n ],\n { timeout: 3000 },\n )\n const branches = branchesOut\n .split('\\n')\n .map((s) => s.trim())\n .filter(Boolean)\n let head: string | null = null\n try {\n const { stdout: headOut } = await pexec(\n 'git',\n ['-C', cwd, 'rev-parse', '--abbrev-ref', 'HEAD'],\n { timeout: 3000 },\n )\n const h = headOut.trim()\n if (h && h !== 'HEAD') head = h\n } catch {\n head = null\n }\n return { branches, head }\n } catch {\n return { branches: [], head: null }\n }\n}\n\n// ------------------------------ sanitize-label ------------------------------\n\nconst LABEL_WHITELIST = /^[a-zA-Z0-9 _-]+$/\nconst MAX_SANITIZED_LABEL_LEN = 40\n\nexport type SanitizeReason = 'invalid-chars' | 'empty'\n\nexport interface SanitizeResult {\n sanitized: string | null\n reason: SanitizeReason | null\n}\n\n/**\n * 对 label(或 username)做 sanitize:\n * - 全小写\n * - 空格 → \"-\"\n * - 合并连续 \"-\"\n * - 去首尾 \"-\"\n * - 截断到 40 字符\n *\n * 非白名单字符(`[^a-zA-Z0-9 _-]`)不替换,直接判失败返回 reason=\"invalid-chars\"。\n * sanitize 后为空返回 reason=\"empty\"。\n */\nexport function sanitizeLabel(raw: string | undefined | null): SanitizeResult {\n if (typeof raw !== 'string') return { sanitized: null, reason: 'empty' }\n if (raw.length === 0) return { sanitized: null, reason: 'empty' }\n if (!LABEL_WHITELIST.test(raw)) return { sanitized: null, reason: 'invalid-chars' }\n\n let s = raw.toLowerCase()\n s = s.replace(/\\s+/g, '-')\n s = s.replace(/-+/g, '-')\n s = s.replace(/^[-_]+|[-_]+$/g, '')\n s = s.slice(0, MAX_SANITIZED_LABEL_LEN)\n s = s.replace(/^[-_]+|[-_]+$/g, '') // 截断后再去一次首尾\n\n if (!s) return { sanitized: null, reason: 'empty' }\n return { sanitized: s, reason: null }\n}\n\n/**\n * 基于系统 username 计算分支前缀。\n * - sanitize 成功 → 直接用\n * - sanitize 失败 / username 取不到 → fallback 到 `user-<4位随机数字>`\n */\nexport function computePrefix(): string {\n let username: string | undefined\n try {\n username = os.userInfo().username\n } catch {\n username = undefined\n }\n const { sanitized } = sanitizeLabel(username)\n if (sanitized) return sanitized\n const rand = Math.floor(1000 + Math.random() * 9000).toString() // 1000..9999\n return `user-${rand}`\n}\n\n/** 把 `<prefix>/<sanitizedLabel>` 形式的分支名扁平化为目录名(`/` → `-`)。 */\nexport function flattenToDirName(branch: string): string {\n return branch.replace(/\\//g, '-')\n}\n\n/**\n * claude cli 把 cwd 绝对路径编码成 `~/.claude/projects/<name>` 的目录名。\n * 规则:realpath 后的绝对路径里所有 `/` 和 `.` 都替换为 `-`。\n * 例:`/Users/x/Desktop/a.b` → `-Users-x-Desktop-a-b`\n *\n * 目录已消失(比如 worktree 已被 `git worktree remove`)时,fallback 到\n * dirname 的 realpath + basename 拼接,尽力对齐 claude cli 实际使用的路径。\n */\nexport function encodeClaudeProjectDir(absPath: string): string {\n if (!absPath || typeof absPath !== 'string') return ''\n let canonical = path.resolve(absPath)\n try {\n canonical = fs.realpathSync(canonical)\n } catch {\n try {\n const parent = fs.realpathSync(path.dirname(canonical))\n canonical = path.join(parent, path.basename(canonical))\n } catch {\n // 双双失败,保留 resolve 后的原值\n }\n }\n return canonical.replace(/[/.]/g, '-')\n}\n\n// ------------------------------ git:worktree:create ------------------------------\n\nexport interface WorktreeCreateInput {\n cwd: string\n baseBranch: string\n label: string\n}\n\nexport interface WorktreeCreateResult {\n worktreeRoot: string\n branch: string\n baseBranch: string\n}\n\n/**\n * 创建 worktree 的核心实现。严格按 design.md 第 4 段列出的 11 步顺序执行。\n * 所有错误以 `Error` 抛出,message 为人类可读中文,可直接透传给前端。\n */\nexport async function createWorktree(input: WorktreeCreateInput): Promise<WorktreeCreateResult> {\n const { cwd, baseBranch, label } = input\n\n if (!cwd || typeof cwd !== 'string') throw new Error('cwd 不能为空')\n if (!baseBranch || typeof baseBranch !== 'string') throw new Error('baseBranch 不能为空')\n\n const labelResult = sanitizeLabel(label)\n if (labelResult.reason === 'invalid-chars') {\n throw new Error('label 不能含中文或特殊字符,只允许英文字母、数字、空格、连字符、下划线')\n }\n if (labelResult.reason === 'empty' || !labelResult.sanitized) {\n throw new Error('label 必须包含至少一个英文字母或数字')\n }\n\n const prefix = computePrefix()\n const branch = `${prefix}/${labelResult.sanitized}`\n const dirName = flattenToDirName(branch)\n\n // 1. cwd 必须是 git repo 根\n const { isGitRoot } = await getGitRoot(cwd)\n if (!isGitRoot) {\n throw new Error(`目录 ${cwd} 不是 git repo 根`)\n }\n\n // 2. 计算目标 worktree 路径;拒绝磁盘根\n const parent = path.dirname(path.resolve(cwd))\n if (parent === '/' || parent === path.resolve(cwd)) {\n throw new Error('repo 在磁盘根目录,无法在同级创建 worktree')\n }\n const worktreeRoot = path.join(parent, dirName)\n\n // 3. 校验 baseBranch 存在\n try {\n await pexec('git', ['-C', cwd, 'rev-parse', '--verify', `refs/heads/${baseBranch}`], {\n timeout: 3000,\n })\n } catch {\n throw new Error(`基准分支 ${baseBranch} 不存在`)\n }\n\n // 4. 校验新分支不存在\n try {\n await pexec('git', ['-C', cwd, 'rev-parse', '--verify', `refs/heads/${branch}`], {\n timeout: 3000,\n })\n // 没抛错 = 分支已存在\n throw new Error(`分支 ${branch} 已存在,请换一个 label`)\n } catch (err) {\n const msg = (err as Error).message\n if (msg.startsWith('分支 ')) throw err // 上一步手动抛的,rethrow\n // rev-parse 失败 = 分支不存在,OK\n }\n\n // 5. 校验目标目录不占用\n if (fs.existsSync(worktreeRoot)) {\n throw new Error(`目录 ${worktreeRoot} 已存在,请换一个 label 或清理后重试`)\n }\n\n // 6. 执行 git worktree add\n try {\n await pexec(\n 'git',\n ['-C', cwd, 'worktree', 'add', worktreeRoot, '-b', branch, baseBranch],\n { timeout: 15000 },\n )\n } catch (err) {\n const stderr = (err as { stderr?: string }).stderr || (err as Error).message\n const firstLine = stderr.split('\\n')[0].trim()\n throw new Error(`创建 worktree 失败:${firstLine}`)\n }\n\n return { worktreeRoot, branch, baseBranch }\n}\n\n// ------------------------------ git:worktree:remove ------------------------------\n\nexport interface WorktreeRemoveInput {\n /** 已挂 worktree 的 session 中的 worktreeRoot 绝对路径 */\n worktreeRoot: string\n /** 已挂 worktree 的 session 中的 worktreeBranch 分支名 */\n worktreeBranch: string\n}\n\n/**\n * 删除 worktree + 分支。\n *\n * 阻塞式:worktree remove / branch -D 真失败(非\"目标已消失\")抛错。\n * 幂等:worktree remove 目标已消失 / branch -D 已消失 都视作 skip。\n *\n * 反查 repo 根失败(worktree 目录被外部 rm/损坏,定位不到原 repo):\n * 不抛错,跳过 worktree remove + branch -D;分支留在原 repo 里由用户手动清理。\n * 这是有意为之的取舍——保证 session 总能被删除,避免卡死;代价是可能残留分支。\n * `~/.claude/projects/<encoded>` 仅依赖 worktreeRoot 即可清理,仍然执行。\n */\nexport async function removeWorktree(input: WorktreeRemoveInput): Promise<void> {\n const { worktreeRoot, worktreeBranch } = input\n if (!worktreeRoot || !worktreeBranch) {\n throw new Error('worktreeRoot 和 worktreeBranch 都不能为空')\n }\n\n // 1. 反查 repo 根;失败则跳过 worktree + branch 清理\n let repoRoot: string | null = null\n try {\n const { stdout } = await pexec(\n 'git',\n ['-C', worktreeRoot, 'rev-parse', '--git-common-dir'],\n { timeout: 3000 },\n )\n const gitCommonDir = stdout.trim()\n if (!gitCommonDir) throw new Error('empty git-common-dir')\n // git-common-dir 可能是相对路径(相对于 worktreeRoot),resolve 后取父目录即 repo 根\n const absGitCommon = path.isAbsolute(gitCommonDir)\n ? gitCommonDir\n : path.resolve(worktreeRoot, gitCommonDir)\n // 通常 absGitCommon 以 `/.git` 结尾,父目录就是 repo 根\n repoRoot = path.dirname(absGitCommon)\n } catch {\n repoRoot = null\n }\n\n if (repoRoot) {\n // 2. worktree remove\n try {\n await pexec('git', ['-C', repoRoot, 'worktree', 'remove', worktreeRoot, '--force'], {\n timeout: 10000,\n })\n } catch (err) {\n const stderr = (err as { stderr?: string }).stderr || (err as Error).message\n const lower = stderr.toLowerCase()\n // 目标已消失 → skip\n const vanished =\n lower.includes('not a working tree') ||\n lower.includes('is not a working tree') ||\n !fs.existsSync(worktreeRoot)\n if (!vanished) {\n const firstLine = stderr.split('\\n')[0].trim()\n throw new Error(`清理 worktree 失败:${firstLine}`)\n }\n }\n\n // 3. branch -D\n try {\n await pexec('git', ['-C', repoRoot, 'branch', '-D', worktreeBranch], { timeout: 5000 })\n } catch (err) {\n const stderr = (err as { stderr?: string }).stderr || (err as Error).message\n const lower = stderr.toLowerCase()\n const vanished = lower.includes('not found') || lower.includes('no such')\n if (!vanished) {\n const firstLine = stderr.split('\\n')[0].trim()\n throw new Error(`清理分支失败:${firstLine}`)\n }\n }\n }\n\n // 4. 清理 ~/.claude/projects/<encoded>:claude cli 按 cwd 存的会话历史目录。\n // git worktree 删除后,该目录里的 .jsonl 会成为孤儿。失败不阻塞整体成功。\n try {\n const encoded = encodeClaudeProjectDir(worktreeRoot)\n if (encoded) {\n const projectsRoot = path.join(os.homedir(), '.claude', 'projects')\n const target = path.resolve(projectsRoot, encoded)\n // 双保险:必须落在 projectsRoot 之下才允许 rm -rf,防止 encoded 里混入 \"..\" 逃逸\n if (target.startsWith(projectsRoot + path.sep) && target !== projectsRoot) {\n fs.rmSync(target, { recursive: true, force: true })\n }\n }\n } catch {\n // 会话历史清理失败不阻塞 worktree 删除成功\n }\n}\n","// Recent dirs 聚合:从 daemon session store 取所有 session,按 cwd 去重,\n// 保留每个 cwd 最新 updatedAt,按 updatedAt 倒序返回。\n//\n// 来源:openclaw-plugin-clawos/src/claude-code/recent-dirs.ts(逻辑级搬运);\n// 数据源由 plugin 的 CcSessionStore 改为 daemon 的 SessionStore。字段命名对齐\n// daemon 既有约定(cwd / updatedAt),与 plugin 的 path / lastUsedAt 不同。\n\nimport type { SessionStore } from '../session/store.js'\n\nexport interface RecentDirEntry {\n cwd: string\n updatedAt: string\n}\n\nexport function listRecentDirs(store: SessionStore, limit = 50): RecentDirEntry[] {\n const sessions = store.list()\n const latestByCwd = new Map<string, string>()\n for (const s of sessions) {\n if (!s.cwd) continue\n const prev = latestByCwd.get(s.cwd)\n if (!prev || s.updatedAt > prev) {\n latestByCwd.set(s.cwd, s.updatedAt)\n }\n }\n return Array.from(latestByCwd.entries())\n .map(([cwd, updatedAt]) => ({ cwd, updatedAt }))\n .sort((a, b) => (a.updatedAt > b.updatedAt ? -1 : a.updatedAt < b.updatedAt ? 1 : 0))\n .slice(0, limit)\n}\n","// 与 package.json 对齐,构建时手动同步\nexport const version = '0.2.1'\n","import { resolveConfig, HELP_TEXT, parseArgs } from './config.js'\nimport { startDaemon } from './index.js'\nimport { version } from './version.js'\n\nasync function main() {\n const argv = process.argv.slice(2)\n const parsed = parseArgs(argv)\n if (parsed.help) {\n process.stdout.write(HELP_TEXT)\n process.exit(0)\n }\n if (parsed.version) {\n process.stdout.write(`clawd ${version}\\n`)\n process.exit(0)\n }\n const config = resolveConfig({ argv, env: process.env })\n const runtime = await startDaemon(config)\n let shuttingDown = false\n const shutdown = async (signal: string) => {\n if (shuttingDown) return\n shuttingDown = true\n try {\n // eslint-disable-next-line no-console\n console.error(`[clawd] received ${signal}, shutting down`)\n await runtime.stop()\n process.exit(0)\n } catch (err) {\n // eslint-disable-next-line no-console\n console.error('[clawd] shutdown failed', err)\n process.exit(1)\n }\n }\n process.on('SIGINT', () => void shutdown('SIGINT'))\n process.on('SIGTERM', () => void shutdown('SIGTERM'))\n}\n\nmain().catch((err: unknown) => {\n // eslint-disable-next-line no-console\n console.error('[clawd] fatal:', err)\n process.exit(1)\n})\n"],"mappings":"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;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MA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","names":["exports","module","exports","module","exports","module","err","exports","module","err","exports","module","path","exports","module","exports","module","exports","module","exports","module","path","cloned","exports","module","exports","module","path","exports","module","exports","module","exports","module","exports","module","fs","path","err","n","releasedBufObj","exports","module","registry","exports","module","exports","module","exports","module","exports","module","version","join","FinalizationRegistry","WeakRef","registry","exports","module","join","onExit","pipeline","fixTarget","exports","module","stringify","_","exports","module","exports","module","exports","module","exports","module","version","bindings","exports","module","value","join","tmp","key","res","stringify","exports","module","streamLevels","exports","module","os","version","pino","serializers","time","require_constants","exports","module","exports","module","exports","module","exports","module","PerMessageDeflate","data","exports","module","exports","module","PerMessageDeflate","Receiver","exports","module","PerMessageDeflate","Sender","exports","module","exports","module","extension","exports","module","Readable","URL","PerMessageDeflate","Receiver","Sender","WebSocket","key","exports","module","WebSocket","createWebSocketStream","err","exports","module","protocol","exports","module","extension","PerMessageDeflate","subprotocol","WebSocket","WebSocketServer","version","path","fs","os","import_node_os","import_node_path","import_node_fs","import_node_path","pino","fs","path","import_node_fs","import_node_path","util","assertNever","objectUtil","path","errorUtil","path","errorMap","version","ctx","result","issues","elements","processed","result","r","ZodFirstPartyTypeKind","path","fs","import_node_fs","crypto","import_node_crypto","crypto","pushed","nowIso","fs","import_node_child_process","import_node_fs","import_node_os","import_node_path","import_node_fs","import_node_os","import_node_path","path","diff","value","r","o","diff","_loop","fs","path","os","version","path","fs","os","ATTACHMENT_SILENT_SUBTYPES","import_node_fs","import_node_os","import_node_path","path","fs","os","import_node_fs","import_node_os","import_node_path","fs","path","os","import_node_fs","import_node_os","import_node_path","os","path","fs","WebSocketServer","WebSocket","diff","import_node_fs","import_node_path","path","fs","import_node_fs","import_node_path","import_node_child_process","import_node_fs","import_node_path","fs","path","import_node_fs","import_node_os","import_node_path","import_node_child_process","version","fs","path","path","r","fs","import_node_os","import_node_crypto","os","crypto","import_node_fs","import_node_path","import_node_crypto","path","crypto","fs","import_node_child_process","import_node_fs","import_node_os","import_node_path","path","fs","os","path","getAdapter","os"]}