@melandlabs/integrations-whatsapp 0.1.5 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../node_modules/pino-std-serializers/lib/err-helpers.js","../../../../node_modules/pino-std-serializers/lib/err-proto.js","../../../../node_modules/pino-std-serializers/lib/err.js","../../../../node_modules/pino-std-serializers/lib/err-with-cause.js","../../../../node_modules/pino-std-serializers/lib/req.js","../../../../node_modules/pino-std-serializers/lib/res.js","../../../../node_modules/pino-std-serializers/index.js","../../../../node_modules/pino/lib/caller.js","../../../../node_modules/@pinojs/redact/index.js","../../../../node_modules/pino/lib/symbols.js","../../../../node_modules/pino/lib/redaction.js","../../../../node_modules/pino/lib/time.js","../../../../node_modules/quick-format-unescaped/index.js","../../../../node_modules/atomic-sleep/index.js","../../../../node_modules/sonic-boom/index.js","../../../../node_modules/on-exit-leak-free/index.js","../../../../node_modules/thread-stream/package.json","../../../../node_modules/thread-stream/lib/wait.js","../../../../node_modules/thread-stream/lib/indexes.js","../../../../node_modules/thread-stream/index.js","../../../../node_modules/pino/lib/transport.js","../../../../node_modules/pino/lib/tools.js","../../../../node_modules/pino/lib/constants.js","../../../../node_modules/pino/lib/levels.js","../../../../node_modules/pino/lib/meta.js","../../../../node_modules/pino/lib/proto.js","../../../../node_modules/safe-stable-stringify/index.js","../../../../node_modules/pino/lib/multistream.js","../../../../node_modules/pino/pino.js","../src/adapter.ts","../src/debug.ts","../src/message-history-store.ts","../src/state.ts","../src/conversation-store.ts","../src/client-registry.ts","../src/markdown.ts"],"names":["err","path","cloned","n","releasedBufObj","join","FinalizationRegistry","WeakRef","onExit","fixTarget","stringify","_","bindings","value","tmp","key","res","streamLevels","proto","pino","serializers","time","existsSync","rmSync","chatIds","Buffer","homedir"],"mappings":"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","file":"index.js","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.2.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 SEQ_INDEX = 2\nconst WRITE_INDEX = 4\nconst READ_INDEX = 8\n\nmodule.exports = {\n WRITE_INDEX,\n READ_INDEX,\n SEQ_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 SEQ_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\nfunction updateState (stream, fn) {\n Atomics.add(stream[kImpl].state, SEQ_INDEX, 1)\n fn()\n Atomics.add(stream[kImpl].state, SEQ_INDEX, 1)\n Atomics.notify(stream[kImpl].state, SEQ_INDEX)\n}\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 updateState(stream, () => {\n Atomics.store(stream[kImpl].state, READ_INDEX, 0)\n Atomics.store(stream[kImpl].state, WRITE_INDEX, 0)\n })\n Atomics.notify(stream[kImpl].state, READ_INDEX)\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 updateState(stream, () => {\n Atomics.store(stream[kImpl].state, READ_INDEX, 0)\n Atomics.store(stream[kImpl].state, WRITE_INDEX, 0)\n })\n Atomics.notify(stream[kImpl].state, READ_INDEX)\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 // Node.js watch mode may send internal worker messages that do not\n // participate in thread-stream's worker protocol.\n if (msg?.code == null) {\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 updateState(stream, () => {\n Atomics.store(stream[kImpl].state, WRITE_INDEX, current + length)\n })\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 updateState(stream, () => {\n Atomics.store(stream[kImpl].state, WRITE_INDEX, -1)\n })\n // process._rawDebug(`(end) readIndex (${Atomics.load(stream.state, READ_INDEX)}) writeIndex (${Atomics.load(stream.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 updateState(stream, () => {\n Atomics.store(stream[kImpl].state, READ_INDEX, 0)\n Atomics.store(stream[kImpl].state, WRITE_INDEX, 0)\n })\n Atomics.notify(stream[kImpl].state, READ_INDEX)\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 updateState(stream, () => {\n Atomics.store(stream[kImpl].state, READ_INDEX, 0)\n Atomics.store(stream[kImpl].state, WRITE_INDEX, 0)\n })\n Atomics.notify(stream[kImpl].state, READ_INDEX)\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","/**\n * WhatsApp Adapter using @whiskeysockets/baileys (WebSocket protocol)\n *\n * Replaces whatsapp-web.js (Puppeteer/Chromium) with Baileys WebSocket.\n * No browser = no automation detection surface.\n *\n * This adapter is platform-agnostic - web-specific dependencies are provided\n * via interfaces (CredentialStore, FileIngester, ClientRegistry, etc.)\n */\n\nimport { Buffer } from \"node:buffer\";\nimport { randomUUID } from \"node:crypto\";\nimport path from \"node:path\";\nimport { MessagePlatformAdapter } from \"@melandlabs/integrations-channels\";\nimport type { MessageEvent, MessageTarget } from \"@melandlabs/integrations-channels\";\nimport type {\n\tMessages,\n\tFile as opencontextFile,\n\tImage as opencontextImage,\n\tMessage as opencontextMessage,\n} from \"@melandlabs/integrations-channels\";\nimport type { ExtractedMessageInfo } from \"@melandlabs/integrations-channels/sources/types\";\nimport type {\n\tBaileysAuthStateProvider,\n\tClientRegistry,\n\tConfigProvider,\n\tFileIngester,\n} from \"@melandlabs/integrations/core\";\nimport {\n\ttype ConnectionState,\n\tDisconnectReason,\n\ttype WAMessage,\n\ttype WASocket,\n\tfetchLatestBaileysVersion,\n\tmakeWASocket,\n\tproto,\n} from \"@whiskeysockets/baileys\";\nimport { downloadMediaMessage } from \"@whiskeysockets/baileys/lib/Utils/messages.js\";\nimport pino from \"pino\";\nimport { DEBUG_WHATSAPP as DEBUG } from \"./debug\";\nimport { MAX_PERSISTED_MESSAGES_PER_CHAT, WhatsAppMessageHistoryStore } from \"./message-history-store\";\nimport { parseQrCodeState, routeMessageType } from \"./state\";\n\nconst maxDialogCount = 100;\n// Read window per chat — must match the store's per-chat cap, otherwise the\n// backfill anchor (oldest STORED message) lies outside the read slice and\n// stored in-window messages get silently hidden from insights.\nconst maxMessageCount = MAX_PERSISTED_MESSAGES_PER_CHAT;\nconst DEFAULT_MAX_MESSAGE_CHUNK_COUNT = 40;\n// How long getChatsByChunk waits for the phone-pushed initial history sync\n// (messaging-history.set) to populate this.chats before giving up.\nconst HISTORY_SYNC_WAIT_TIMEOUT_MS = 30_000;\nconst HISTORY_SYNC_POLL_INTERVAL_MS = 500;\n// On-demand history backfill (sock.fetchMessageHistory) limits. The phone\n// answers each request asynchronously via an ON_DEMAND messaging-history.set;\n// requests are bounded per chat and per iteration cycle to respect WhatsApp's\n// throttling of peer data operations.\nconst BACKFILL_PAGE_SIZE = 50;\nconst MAX_BACKFILL_REQUESTS_PER_CHAT = 3;\nconst MAX_BACKFILL_REQUESTS_PER_CYCLE = 10;\nconst MAX_CONSECUTIVE_BACKFILL_TIMEOUTS = 2;\n// After the breaker trips (phone looks offline), pause backfill on this\n// socket for a while instead of re-paying the timeouts on every refresh.\nconst BACKFILL_OFFLINE_BACKOFF_MS = 10 * 60_000;\nconst BACKFILL_RESPONSE_TIMEOUT_MS = 15_000;\nconst BACKFILL_POLL_INTERVAL_MS = 250;\nconst BACKFILL_THROTTLE_MS = 1_000;\nconst WHATSAPP_MAX_ATTACHMENT_BYTES = 100 * 1024 * 1024;\n\nexport type WhatsAppDialogInfo = {\n\tid: string;\n\tname: string;\n\ttype: \"private\" | \"group\";\n};\n\nexport type WhatsAppUserInfo = {\n\twid: string;\n\tpushName?: string;\n\tformattedNumber?: string;\n};\n\ntype WhatsAppLoginCallbacks = {\n\tonQr?: (qr: string) => Promise<void> | void;\n\tonCode?: (code: string) => Promise<void> | void;\n\tonSession?: (session: unknown) => Promise<void> | void;\n\tonReady?: (info: WhatsAppUserInfo) => Promise<void> | void;\n\tonError?: (error: Error) => Promise<void> | void;\n};\n\ntype LoginDeferred = {\n\tresolveFirstQr: (qr: string) => void;\n\trejectFirstQr: (error: Error) => void;\n\tfirstQrResolved: boolean;\n\tcallbacks: WhatsAppLoginCallbacks;\n\trejectLogin: (error: Error) => void;\n};\n\nfunction isImageMessage(message: opencontextMessage): message is opencontextImage {\n\tif (typeof message !== \"object\" || message === null) return false;\n\tif (!(\"url\" in message) && !(\"base64\" in message)) return false;\n\tif (\"length\" in message) return false;\n\treturn !isFileMessage(message);\n}\n\nfunction isFileMessage(message: opencontextMessage): message is opencontextFile {\n\tif (typeof message !== \"object\" || message === null) return false;\n\treturn \"url\" in message && \"name\" in message;\n}\n\nfunction describeUnsupportedMessage(message: opencontextMessage): string {\n\tif (!message || typeof message !== \"object\") return typeof message;\n\tif (\"length\" in message && \"url\" in message) return \"voice\";\n\tif (\"origin\" in message) return \"quote\";\n\tif (\"target\" in message) return \"mention\";\n\tif (\"time\" in message && \"id\" in message) return \"source\";\n\tif (\"display\" in message && \"nodes\" in message) return \"forward\";\n\tif (\"type\" in message && \"name\" in message) return \"emoji\";\n\treturn \"content\";\n}\n\n/**\n * Module-level registry of active WhatsAppAdapters by sessionId.\n * Used by QR login to expose the adapter for socket re-registration by accountId.\n */\nconst activeAdapters = new Map<string, WhatsAppAdapter>();\n\n/**\n * Export active adapters map so other modules (self-listener, QR route) can\n * store/retrieve adapters by accountId key.\n */\nexport { activeAdapters };\n\nexport class WhatsAppAdapter extends MessagePlatformAdapter {\n\tsock: WASocket | null = null;\n\tbotId: string;\n\tmessages: Messages;\n\tname = \"WhatsApp\";\n\n\tprivate sessionId: string;\n\tprivate authStateProvider: BaileysAuthStateProvider | undefined;\n\tprivate authState: Awaited<ReturnType<BaileysAuthStateProvider[\"createAuthState\"]>> | null = null;\n\tprivate isReady = false;\n\t/** In-memory chat list (replaces makeInMemoryStore in v7). Updated via chats.upsert events. */\n\tprivate chats: Map<string, WhatsAppDialogInfo> = new Map();\n\tprivate asyncIteratorState = {\n\t\tchatIds: [] as string[],\n\t\tcurrentChatIndex: 0,\n\t\tcurrentMessageIndex: 0,\n\t\toffsetDate: 0,\n\t\tisInitialized: false,\n\t};\n\t/** On-demand history backfill budget, reset per getChatsByChunk cycle. */\n\tprivate backfillRequestsThisCycle = 0;\n\t/** Persistent message store; created here when no listener attached one. */\n\tprivate messageStore: WhatsAppMessageHistoryStore | null = null;\n\t/** Override for the message store base dir (tests). */\n\tprivate historyStoreDir?: string;\n\t/** False when sessionId fell back to a random uuid (no botId/sessionKey). */\n\tprivate hasStableSessionId = true;\n\tprivate isAuthenticated = false;\n\tprivate initializationPromise: Promise<void> | null = null;\n\t/** Exposed so other adapters (e.g. insights bot) can await socket readiness. */\n\tget pendingInitialization(): Promise<void> | null {\n\t\treturn this.initializationPromise;\n\t}\n\tprivate loginDeferred: LoginDeferred | null = null;\n\tprivate ownerUserId?: string;\n\tprivate ownerUserType?: string;\n\tprivate eventCleanup: Array<() => void> = [];\n\t/** Pending reconnect socket creation, used to prevent concurrent reconnects */\n\tprivate _pendingReconnect: Promise<WASocket | null> | null = null;\n\tprivate reconnectTimer: ReturnType<typeof setTimeout> | null = null;\n\tprivate isClosed = false;\n\t/** Cache of recently sent messages for msgRetry requests (max 256 entries). */\n\tprivate sentMessageCache: Map<string, proto.IMessage>;\n\tprivate fileIngester?: FileIngester;\n\tprivate clientRegistry?: ClientRegistry;\n\tprivate configProvider?: ConfigProvider;\n\n\tconstructor(opts?: {\n\t\tbotId?: string;\n\t\townerUserId?: string;\n\t\townerUserType?: string;\n\t\t/** Override sessionId — used by insight bot to reuse QR login's session */\n\t\tsessionKey?: string;\n\t\tauthStateProvider: BaileysAuthStateProvider;\n\t\tfileIngester?: FileIngester;\n\t\tclientRegistry?: ClientRegistry;\n\t\tconfigProvider?: ConfigProvider;\n\t\t/** Override the persistent message store base dir (used by tests) */\n\t\thistoryStoreDir?: string;\n\t}) {\n\t\tsuper();\n\t\tthis.botId = opts?.botId ?? \"\";\n\t\tthis.hasStableSessionId = Boolean(opts?.sessionKey ?? this.botId);\n\t\tthis.sessionId = (opts?.sessionKey ?? this.botId) || `wa-${randomUUID().slice(0, 8)}`;\n\t\tthis.messages = [];\n\t\tthis.ownerUserId = opts?.ownerUserId;\n\t\tthis.ownerUserType = opts?.ownerUserType;\n\t\tthis.authStateProvider = opts?.authStateProvider;\n\t\tthis.fileIngester = opts?.fileIngester;\n\t\tthis.clientRegistry = opts?.clientRegistry;\n\t\tthis.configProvider = opts?.configProvider;\n\t\tthis.historyStoreDir = opts?.historyStoreDir;\n\t\t// Initialize sentMessageCache once here so it persists across createSocket()\n\t\t// calls and reconnections — the getMessage closure captures this reference.\n\t\tthis.sentMessageCache = new Map<string, proto.IMessage>();\n\n\t\t// Prevent duplicate socket creation — if another adapter already has a socket\n\t\t// for this botId registered in the client registry, reuse it (same as Telegram).\n\t\tlet existingSock: WASocket | undefined;\n\t\tif (this.clientRegistry) {\n\t\t\texistingSock = this.clientRegistry.getClientBySessionKey(this.botId) as WASocket | undefined;\n\t\t}\n\n\t\t// Also check activeAdapters — QR route stores adapter under accountId,\n\t\t// so self-listener's adapter (with botId=accountId) can find it.\n\t\tif (!existingSock && this.botId) {\n\t\t\tconst existingAdapter = activeAdapters.get(this.botId);\n\t\t\tif (existingAdapter?.sock) {\n\t\t\t\texistingSock = existingAdapter.sock as WASocket;\n\t\t\t\tif (DEBUG)\n\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t`[whatsapp] [${this.sessionId}] Found existing socket in activeAdapters for botId=${this.botId}, reusing`,\n\t\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tif (existingSock) {\n\t\t\tthis.sock = existingSock;\n\t\t\tthis.isReady = true;\n\t\t\tthis.isAuthenticated = true;\n\t\t\t// Set up listeners so callbacks (e.g. onReady) get triggered\n\t\t\tthis.setupListenersOnSocket(existingSock);\n\t\t}\n\t}\n\n\t/**\n\t * Register the socket under an additional key (e.g. account.id).\n\t * Call this after QR login succeeds and integration account is created,\n\t * so self-listener and insight bot can find the socket by accountId.\n\t */\n\tsetRegisterSocketAs(key: string): void {\n\t\tconst sock = this.sock;\n\t\tif (sock && this.clientRegistry) {\n\t\t\tthis.clientRegistry.registerClient(key, sock);\n\t\t\tif (DEBUG) console.log(`[whatsapp] [${this.sessionId}] Socket also registered under ${key}`);\n\t\t}\n\t}\n\n\t/**\n\t * Find an active adapter by sessionId and register its socket under accountId.\n\t * Called from guest-guide after integration account is created.\n\t */\n\tstatic registerSocketByAccountId(sessionId: string, accountId: string): void {\n\t\tconst adapter = activeAdapters.get(sessionId);\n\t\tif (!adapter) {\n\t\t\tif (DEBUG)\n\t\t\t\tconsole.log(`[whatsapp] [${sessionId}] No active adapter found to register under ${accountId}`);\n\t\t\treturn;\n\t\t}\n\t\tadapter.setRegisterSocketAs(accountId);\n\t}\n\n\tprivate async ensureAuthState() {\n\t\tif (this.authState) return this.authState;\n\t\tif (!this.authStateProvider) {\n\t\t\tthrow new Error(\"authStateProvider is required but not provided\");\n\t\t}\n\t\tthis.authState = await this.authStateProvider.createAuthState(this.sessionId);\n\t\treturn this.authState;\n\t}\n\n\t/**\n\t * Create and connect the Baileys socket with in-memory store.\n\t * Auth state must be loaded (await ensureAuthState()) before calling this.\n\t */\n\tprivate async createSocket(): Promise<WASocket> {\n\t\tif (this.isClosed) {\n\t\t\tthrow new Error(\"[whatsapp] Adapter is closed\");\n\t\t}\n\n\t\tif (DEBUG)\n\t\t\tconsole.log(`[whatsapp] [${this.sessionId}] createSocket() called, current sock: ${!!this.sock}`);\n\n\t\t// Reuse existing sentMessageCache on reconnect so pending msgRetry requests\n\t\t// can still find cached plaintext from before the reconnect.\n\t\tconst existingCache = this.sock ? (this.sock as any).sentMessageCache : undefined;\n\t\tif (existingCache) {\n\t\t\tthis.sentMessageCache = existingCache;\n\t\t\tif (DEBUG) console.log(`[whatsapp] [${this.sessionId}] Reusing existing sentMessageCache on reconnect`);\n\t\t}\n\n\t\t// Ensure auth state is loaded before passing to makeWASocket\n\t\tconst auth = await this.ensureAuthState();\n\t\tif (DEBUG) console.log(`[whatsapp] [${this.sessionId}] Auth state loaded, me: ${!!auth.creds.me?.id}`);\n\n\t\tconst { version } = await fetchLatestBaileysVersion();\n\t\tif (this.isClosed) {\n\t\t\tthrow new Error(\"[whatsapp] Adapter is closed\");\n\t\t}\n\t\tconst logger = pino({ level: DEBUG ? \"debug\" : \"silent\" });\n\n\t\tconst sock = makeWASocket({\n\t\t\tversion,\n\t\t\tauth,\n\t\t\tlogger,\n\t\t\tprintQRInTerminal: false,\n\t\t\tbrowser: [\"opencontext\", \"Desktop\", \"0.3.0\"],\n\t\t\tgenerateHighQualityLinkPreview: false,\n\t\t\tconnectTimeoutMs: 30_000,\n\t\t\tsyncFullHistory: true,\n\t\t\t// Required for Note-to-Self message delivery — without this, self-chat\n\t\t\t// messages stay in \"waiting for this message\" indefinitely. Baileys wraps\n\t\t\t// self-messages in deviceSentMessage and needs getMessage() to respond to\n\t\t\t// msgRetry requests from the phone so it can retransmit the plaintext.\n\t\t\tgetMessage: async (key) => {\n\t\t\t\tif (DEBUG)\n\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t`[whatsapp] [${this.sessionId}] getMessage called: id=${key.id} remoteJid=${key.remoteJid} fromMe=${key.fromMe}`,\n\t\t\t\t\t);\n\t\t\t\t// Check sent message cache (AI replies cached for msgRetry requests).\n\t\t\t\t// v7 also uses messageRetryManager internally when enableRecentMessageCache is enabled.\n\t\t\t\tconst cached = this.sentMessageCache.get(key.id || \"\");\n\t\t\t\tif (cached) {\n\t\t\t\t\tif (DEBUG) console.log(`[whatsapp] [${this.sessionId}] getMessage: CACHE HIT for ${key.id}`);\n\t\t\t\t\treturn cached;\n\t\t\t\t}\n\t\t\t\tif (DEBUG)\n\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t`[whatsapp] [${this.sessionId}] getMessage: NOT FOUND for ${key.id} (remoteJid=${key.remoteJid}), returning empty`,\n\t\t\t\t\t);\n\t\t\t\t// 3. Return empty message rather than undefined — prevents indefinite\n\t\t\t\t// \"waiting for this message\" when the content is genuinely not available.\n\t\t\t\treturn proto.Message.fromObject({});\n\t\t\t},\n\t\t});\n\n\t\tif (DEBUG)\n\t\t\tconsole.log(`[whatsapp] [${this.sessionId}] makeWASocket() returned, sock.ev exists: ${!!sock.ev}`);\n\n\t\t// Attach sent message cache for msgRetry requests.\n\t\t// v7 also manages recent messages internally via messageRetryManager when\n\t\t// enableRecentMessageCache is enabled.\n\t\t(sock as any).sentMessageCache = this.sentMessageCache;\n\n\t\t// Store the socket so subsequent calls can reference it (reconnect flow)\n\t\tthis.sock = sock;\n\n\t\t// Attach the persistent message store before the connection opens so it\n\t\t// captures the one-time initial history sync pushed right after pairing.\n\t\tthis.ensureMessageStore(sock);\n\n\t\t// Register immediately — before connection=\"open\" fires — so other adapters\n\t\t// (e.g. insights bot) can't race and create a duplicate socket. The \"connection=open\"\n\t\t// handler will re-register with the same socket (idempotent), so this is safe.\n\t\tif (this.botId && this.clientRegistry) {\n\t\t\tthis.clientRegistry.registerClient(this.botId, sock);\n\t\t}\n\n\t\t// Register internal event handlers\n\t\tthis.registerInternalEvents(sock);\n\n\t\t// Cache incoming messages so getMessage() can return them for msgRetry requests.\n\t\t// When a self-message is sent from the phone, WhatsApp requests the plaintext\n\t\t// via msgRetry. Without this cache, getMessage returns empty and the phone shows\n\t\t// \"waiting for this message\".\n\t\tsock.ev.on(\"messages.upsert\", (data) => {\n\t\t\tfor (const msg of data.messages) {\n\t\t\t\tif (msg.key.id && msg.message) {\n\t\t\t\t\tthis.sentMessageCache.set(msg.key.id, msg.message);\n\t\t\t\t\tif (this.sentMessageCache.size > 256) {\n\t\t\t\t\t\tconst oldest = this.sentMessageCache.keys().next().value;\n\t\t\t\t\t\tif (oldest) this.sentMessageCache.delete(oldest);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (DEBUG) {\n\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t`[whatsapp] [DEBUG] messages.upsert: jid=${msg.key.remoteJid} fromMe=${msg.key.fromMe} id=${msg.key.id}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn sock;\n\t}\n\n\tprivate registerInternalEvents(sock: WASocket) {\n\t\t// Connection state updates — QR, open, close\n\t\tconst connHandler = (update: Partial<ConnectionState>) => {\n\t\t\tconst { connection, qr, lastDisconnect } = update;\n\n\t\t\tif (DEBUG) console.log(`[whatsapp] connection update: ${connection}, hasQR: ${!!qr}`);\n\n\t\t\tif (qr) {\n\t\t\t\tthis.isAuthenticated = false;\n\n\t\t\t\t// Delegate QR code state validation to state.ts pure function\n\t\t\t\tconst qrState = parseQrCodeState(qr);\n\t\t\t\tif (DEBUG)\n\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t`[whatsapp] [${this.sessionId}] QR received (len=${qr.length}, valid=${qrState.isValid}, index=${qrState.codeIndex}), loginDeferred exists: ${!!this.loginDeferred}, firstQrResolved: ${this.loginDeferred?.firstQrResolved ?? false}`,\n\t\t\t\t\t);\n\n\t\t\t\tif (this.loginDeferred && !this.loginDeferred.firstQrResolved) {\n\t\t\t\t\tthis.loginDeferred.firstQrResolved = true;\n\t\t\t\t\tthis.loginDeferred.resolveFirstQr(qr);\n\t\t\t\t}\n\t\t\t\tvoid this.loginDeferred?.callbacks.onQr?.(qr);\n\t\t\t\tif (DEBUG) console.log(`[whatsapp] [${this.sessionId}] onQr callback fired, updating session...`);\n\t\t\t}\n\n\t\t\tif (connection === \"open\") {\n\t\t\t\tthis.isAuthenticated = true;\n\t\t\t\tthis.isReady = true;\n\n\t\t\t\t// Fire login callbacks only once (guarded by firstQrResolved)\n\t\t\t\tif (this.loginDeferred?.firstQrResolved) {\n\t\t\t\t\tvoid this.handleLoginReady();\n\t\t\t\t}\n\n\t\t\t\t// Register in global registry so self-listener can find this socket\n\t\t\t\tif (this.botId && this.clientRegistry) {\n\t\t\t\t\tthis.clientRegistry.registerClient(this.botId, sock);\n\t\t\t\t\tif (DEBUG)\n\t\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t\t`[whatsapp] [${this.sessionId}] Socket registered in client registry, sock.user: ${sock.user?.id}`,\n\t\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (connection === \"close\") {\n\t\t\t\tconst reason = lastDisconnect?.error?.message ?? \"unknown\";\n\t\t\t\tconst errObj = lastDisconnect?.error as\n\t\t\t\t\t| (Error & {\n\t\t\t\t\t\t\tcode?: string;\n\t\t\t\t\t\t\ttag?: string;\n\t\t\t\t\t\t\tstatusCode?: number;\n\t\t\t\t\t\t\toutput?: { statusCode?: number };\n\t\t\t\t\t\t\tattrs?: { code?: string | number };\n\t\t\t\t\t\t\tdata?: unknown;\n\t\t\t\t\t })\n\t\t\t\t\t| undefined;\n\t\t\t\tconst errorCode = errObj?.code ?? \"N/A\";\n\t\t\t\tconst disconnectTag = errObj?.tag ?? \"N/A\";\n\t\t\t\t// Extract statusCode from: Boom.output.statusCode > attrs.code > direct statusCode\n\t\t\t\tconst statusCode =\n\t\t\t\t\t(errObj as unknown as { output?: { statusCode?: number } })?.output?.statusCode ??\n\t\t\t\t\t(typeof errObj?.attrs?.code === \"string\"\n\t\t\t\t\t\t? Number.parseInt(errObj.attrs.code as unknown as string, 10)\n\t\t\t\t\t\t: (errObj?.attrs?.code as number | undefined)) ??\n\t\t\t\t\terrObj?.statusCode ??\n\t\t\t\t\t0;\n\t\t\t\tif (DEBUG)\n\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t`[whatsapp] Socket closed: ${reason} (code=${errorCode}, tag=${disconnectTag}, statusCode=${statusCode})`,\n\t\t\t\t\t);\n\n\t\t\t\tconst wasClean =\n\t\t\t\t\tlastDisconnect?.error === undefined || lastDisconnect?.error?.message?.includes(\"clean\");\n\n\t\t\t\tif (!wasClean) {\n\t\t\t\t\tthis.isReady = false;\n\t\t\t\t\tthis.isAuthenticated = false;\n\n\t\t\t\t\tlet err: Error =\n\t\t\t\t\t\tlastDisconnect?.error instanceof Error\n\t\t\t\t\t\t\t? lastDisconnect.error\n\t\t\t\t\t\t\t: new Error(\n\t\t\t\t\t\t\t\t\t(lastDisconnect?.error as unknown as { message?: string })?.message ?? \"Connection failed\",\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t// If this is a restartRequired (515) or timeout (408), just reconnect.\n\t\t\t\t\t// DO NOT reject the login promise — ensureReady() is already waiting\n\t\t\t\t\t// and will see isReady=true when the new socket opens (connection === \"open\").\n\t\t\t\t\tif (\n\t\t\t\t\t\tstatusCode === DisconnectReason.restartRequired ||\n\t\t\t\t\t\tstatusCode === DisconnectReason.timedOut ||\n\t\t\t\t\t\tstatusCode === DisconnectReason.connectionReplaced\n\t\t\t\t\t) {\n\t\t\t\t\t\tif (DEBUG)\n\t\t\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t\t\t`[whatsapp] [${this.sessionId}] Got recoverable error (${statusCode}), reconnecting (no promise reject)...`,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t// If a reconnect is already in flight, don't start another one.\n\t\t\t\t\t\t// The in-flight createSocket() will handle the reconnection.\n\t\t\t\t\t\tif (this._pendingReconnect) {\n\t\t\t\t\t\t\tif (DEBUG)\n\t\t\t\t\t\t\t\tconsole.log(`[whatsapp] [${this.sessionId}] Reconnect already in progress, skipping...`);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (this.isClosed) return;\n\t\t\t\t\t\tconst oldSock = this.sock;\n\t\t\t\t\t\tthis._pendingReconnect = new Promise<WASocket | null>((resolve) => {\n\t\t\t\t\t\t\tthis.reconnectTimer = setTimeout(async () => {\n\t\t\t\t\t\t\t\tthis.reconnectTimer = null;\n\t\t\t\t\t\t\t\tif (this.isClosed) {\n\t\t\t\t\t\t\t\t\tresolve(null);\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t// Kill the old socket to stop its listeners firing stale events\n\t\t\t\t\t\t\t\t\tif (oldSock) {\n\t\t\t\t\t\t\t\t\t\tawait this.kill(oldSock);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tconst newSock = await this.createSocket();\n\t\t\t\t\t\t\t\t\tresolve(newSock);\n\t\t\t\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\t\t\t\tif (DEBUG)\n\t\t\t\t\t\t\t\t\t\tconsole.error(`[whatsapp] [${this.sessionId}] Reconnect createSocket failed:`, err);\n\t\t\t\t\t\t\t\t\tresolve(null);\n\t\t\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\t\t\tthis._pendingReconnect = null;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}, 500);\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Terminal errors — give user-friendly message\n\t\t\t\t\tif (statusCode === DisconnectReason.loggedOut) {\n\t\t\t\t\t\terr = new Error(\"WhatsApp session expired. Please disconnect and re-link your account.\");\n\t\t\t\t\t} else if (statusCode === DisconnectReason.forbidden) {\n\t\t\t\t\t\terr = new Error(\"WhatsApp access denied. Your account may be banned.\");\n\t\t\t\t\t}\n\n\t\t\t\t\t// Pre-QR error: socket closed before QR was emitted\n\t\t\t\t\t// Reject the QR promise so the API route returns an error response\n\t\t\t\t\tif (!this.loginDeferred?.firstQrResolved && this.loginDeferred) {\n\t\t\t\t\t\tthis.loginDeferred.rejectFirstQr(err);\n\t\t\t\t\t\tconst cb = this.loginDeferred.callbacks.onError;\n\t\t\t\t\t\tif (cb) void cb(err);\n\t\t\t\t\t\t// Keep loginDeferred alive — reconnect logic may replace it\n\t\t\t\t\t}\n\n\t\t\t\t\t// Post-QR error: socket closed after QR was emitted\n\t\t\t\t\t// Reject the login promise so the frontend gets notified\n\t\t\t\t\tif (this.loginDeferred?.firstQrResolved) {\n\t\t\t\t\t\tthis.loginDeferred.rejectLogin(err);\n\t\t\t\t\t\tconst cb = this.loginDeferred.callbacks.onError;\n\t\t\t\t\t\tif (cb) void cb(err);\n\t\t\t\t\t\t// Keep loginDeferred alive — reconnect logic may replace it\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Unregister from global registry\n\t\t\t\tif (!this.isClosed && this.botId && this.clientRegistry) {\n\t\t\t\t\tthis.clientRegistry.unregisterClient(this.botId);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tsock.ev.on(\"connection.update\", connHandler);\n\t\tthis.eventCleanup.push(() => sock.ev.off(\"connection.update\", connHandler));\n\n\t\t// Auth state changes — save to disk so myAppStateKeyId and other keys persist\n\t\tconst credsHandler = () => {\n\t\t\tif (this.isAuthenticated) {\n\t\t\t\tvoid this.saveAuthState().catch((e) =>\n\t\t\t\t\tDEBUG ? console.error(\"[whatsapp] saveCreds failed:\", e) : undefined,\n\t\t\t\t);\n\t\t\t}\n\t\t};\n\t\tsock.ev.on(\"creds.update\", credsHandler);\n\t\tthis.eventCleanup.push(() => sock.ev.off(\"creds.update\", credsHandler));\n\n\t\t// Populate in-memory chats map (used by getDialogs and chat history)\n\t\tsock.ev.on(\"chats.upsert\", (newChats: import(\"@whiskeysockets/baileys/lib/Types/Chat\").Chat[]) => {\n\t\t\tfor (const chat of newChats) {\n\t\t\t\tif (!chat.id || chat.id === \"status@broadcast\") continue;\n\t\t\t\tconst name = (chat as any).name ?? (chat as any).subject ?? jidToUser(chat.id);\n\t\t\t\tthis.chats.set(chat.id, {\n\t\t\t\t\tid: chat.id,\n\t\t\t\t\tname: name ?? jidToUser(chat.id),\n\t\t\t\t\ttype: chat.id.endsWith(\"@g.us\") ? \"group\" : \"private\",\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\tsock.ev.on(\"chats.update\", (updates: import(\"@whiskeysockets/baileys/lib/Types/Chat\").ChatUpdate[]) => {\n\t\t\tfor (const update of updates) {\n\t\t\t\tif (!update.id) continue;\n\t\t\t\tconst existing = this.chats.get(update.id);\n\t\t\t\tif (existing) {\n\t\t\t\t\tconst name = (update as any).name ?? (update as any).subject;\n\t\t\t\t\tif (name) {\n\t\t\t\t\t\texisting.name = name;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tsock.ev.on(\n\t\t\t\"messaging-history.set\",\n\t\t\t({\n\t\t\t\tchats: historyChats,\n\t\t\t}: {\n\t\t\t\tchats: import(\"@whiskeysockets/baileys/lib/Types/Chat\").Chat[];\n\t\t\t}) => {\n\t\t\t\tfor (const chat of historyChats) {\n\t\t\t\t\tif (!chat.id || chat.id === \"status@broadcast\") continue;\n\t\t\t\t\tconst name = (chat as any).name ?? (chat as any).subject ?? jidToUser(chat.id);\n\t\t\t\t\tthis.chats.set(chat.id, {\n\t\t\t\t\t\tid: chat.id,\n\t\t\t\t\t\tname: name ?? jidToUser(chat.id),\n\t\t\t\t\t\ttype: chat.id.endsWith(\"@g.us\") ? \"group\" : \"private\",\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\t\t);\n\n\t\t// Set up listeners for callers that reuse this socket\n\t\tthis.setupListenersOnSocket(sock);\n\t}\n\n\tprivate async saveAuthState(): Promise<void> {\n\t\tif (!this.authState) return;\n\t\tconst saveFn = (this.authState as any).saveCreds;\n\t\tif (saveFn) await saveFn();\n\t}\n\n\t/**\n\t * Register connection/creds listeners on an existing socket.\n\t * Called when a socket is reused from the registry.\n\t */\n\tsetupListenersOnSocket(sock: WASocket): void {\n\t\tconst connHandler = (update: {\n\t\t\tconnection?: string;\n\t\t\tqr?: string;\n\t\t\tlastDisconnect?: { error?: Error };\n\t\t}) => {\n\t\t\tif (update.qr) {\n\t\t\t\tthis.loginDeferred?.resolveFirstQr?.(update.qr);\n\t\t\t}\n\t\t\tif (update.connection === \"open\") {\n\t\t\t\tthis.isAuthenticated = true;\n\t\t\t\tthis.isReady = true;\n\t\t\t\tif (this.loginDeferred?.firstQrResolved) {\n\t\t\t\t\tvoid this.handleLoginReady();\n\t\t\t\t}\n\t\t\t\tif (this.botId && this.clientRegistry) {\n\t\t\t\t\tthis.clientRegistry.registerClient(this.botId, sock);\n\t\t\t\t\tif (DEBUG)\n\t\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t\t`[whatsapp] [${this.sessionId}] Socket registered in client registry, sock.user: ${sock.user?.id}`,\n\t\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (update.connection === \"close\") {\n\t\t\t\tconst lastDisconnect = update.lastDisconnect;\n\t\t\t\tconst reason = lastDisconnect?.error?.message ?? \"unknown\";\n\t\t\t\tconst errObj = lastDisconnect?.error as\n\t\t\t\t\t| (Error & {\n\t\t\t\t\t\t\tcode?: string;\n\t\t\t\t\t\t\ttag?: string;\n\t\t\t\t\t\t\tstatusCode?: number;\n\t\t\t\t\t\t\toutput?: { statusCode?: number };\n\t\t\t\t\t\t\tattrs?: { code?: string | number };\n\t\t\t\t\t\t\tdata?: unknown;\n\t\t\t\t\t })\n\t\t\t\t\t| undefined;\n\t\t\t\tconst statusCode =\n\t\t\t\t\t(errObj as unknown as { output?: { statusCode?: number } })?.output?.statusCode ??\n\t\t\t\t\t(typeof errObj?.attrs?.code === \"string\"\n\t\t\t\t\t\t? Number.parseInt(errObj.attrs.code as unknown as string, 10)\n\t\t\t\t\t\t: (errObj?.attrs?.code as number | undefined)) ??\n\t\t\t\t\terrObj?.statusCode ??\n\t\t\t\t\t0;\n\t\t\t\tif (DEBUG) console.log(`[whatsapp] Socket closed: ${reason} (statusCode=${statusCode})`);\n\t\t\t\tconst wasClean =\n\t\t\t\t\tlastDisconnect?.error === undefined || lastDisconnect?.error?.message?.includes(\"clean\");\n\t\t\t\tif (!wasClean) {\n\t\t\t\t\tthis.isReady = false;\n\t\t\t\t\tthis.isAuthenticated = false;\n\t\t\t\t\tconst err: Error =\n\t\t\t\t\t\tlastDisconnect?.error instanceof Error\n\t\t\t\t\t\t\t? lastDisconnect.error\n\t\t\t\t\t\t\t: new Error(\n\t\t\t\t\t\t\t\t\t(lastDisconnect?.error as unknown as { message?: string })?.message ??\n\t\t\t\t\t\t\t\t\t\t`Connection closed: ${reason}`,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\tif (\n\t\t\t\t\t\tstatusCode === DisconnectReason.restartRequired ||\n\t\t\t\t\t\tstatusCode === DisconnectReason.timedOut ||\n\t\t\t\t\t\tstatusCode === DisconnectReason.connectionReplaced\n\t\t\t\t\t) {\n\t\t\t\t\t\tif (DEBUG)\n\t\t\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t\t\t`[whatsapp] [${this.sessionId}] Got recoverable error (${statusCode}), reconnecting...`,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\tif (this._pendingReconnect) {\n\t\t\t\t\t\t\tif (DEBUG)\n\t\t\t\t\t\t\t\tconsole.log(`[whatsapp] [${this.sessionId}] Reconnect already in progress, skipping...`);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (this.isClosed) return;\n\t\t\t\t\t\tconst oldSock = this.sock;\n\t\t\t\t\t\tthis._pendingReconnect = new Promise<WASocket | null>((resolve) => {\n\t\t\t\t\t\t\tthis.reconnectTimer = setTimeout(async () => {\n\t\t\t\t\t\t\t\tthis.reconnectTimer = null;\n\t\t\t\t\t\t\t\tif (this.isClosed) {\n\t\t\t\t\t\t\t\t\tresolve(null);\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\tif (oldSock) {\n\t\t\t\t\t\t\t\t\t\tawait this.kill(oldSock);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tconst newSock = await this.createSocket();\n\t\t\t\t\t\t\t\t\tresolve(newSock);\n\t\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\t\tif (DEBUG) console.error(`[whatsapp] [${this.sessionId}] Reconnect failed:`, e);\n\t\t\t\t\t\t\t\t\tresolve(null);\n\t\t\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\t\t\tthis._pendingReconnect = null;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}, 500);\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (!this.loginDeferred?.firstQrResolved && this.loginDeferred) {\n\t\t\t\t\t\tthis.loginDeferred.rejectFirstQr(err);\n\t\t\t\t\t}\n\t\t\t\t\tif (this.loginDeferred?.firstQrResolved) {\n\t\t\t\t\t\tthis.loginDeferred.rejectLogin(err);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!this.isClosed && this.botId && this.clientRegistry) {\n\t\t\t\t\tthis.clientRegistry.unregisterClient(this.botId);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tsock.ev.on(\"connection.update\", connHandler);\n\t\tthis.eventCleanup.push(() => sock.ev.off(\"connection.update\", connHandler));\n\t\tconst credsHandler = () => {\n\t\t\tif (this.isAuthenticated) {\n\t\t\t\tvoid this.saveAuthState().catch((e) =>\n\t\t\t\t\tDEBUG ? console.error(\"[whatsapp] saveCreds failed:\", e) : undefined,\n\t\t\t\t);\n\t\t\t}\n\t\t};\n\t\tsock.ev.on(\"creds.update\", credsHandler);\n\t\tthis.eventCleanup.push(() => sock.ev.off(\"creds.update\", credsHandler));\n\t}\n\n\tprivate async handleLoginReady() {\n\t\tif (!this.loginDeferred) return;\n\t\ttry {\n\t\t\tconst info = this.getUserInfo();\n\t\t\tawait this.loginDeferred.callbacks.onSession?.(this.sessionId);\n\t\t\tawait this.loginDeferred.callbacks.onReady?.(info);\n\t\t} catch (error) {\n\t\t\tconst err = error instanceof Error ? error : new Error(String(error ?? \"\"));\n\t\t\tawait this.loginDeferred.callbacks.onError?.(err);\n\t\t}\n\t\t// Keep loginDeferred around — close handler may still need rejectLogin\n\t}\n\n\tprivate isTauriMode(): boolean {\n\t\tconst tauriMode = this.configProvider?.get(\"TAURI_MODE\");\n\t\tconst isTauri = this.configProvider?.get(\"IS_TAURI\");\n\t\treturn typeof tauriMode === \"string\" || isTauri === \"true\";\n\t}\n\n\tprivate timeBeforeHours(hours: number): number {\n\t\treturn Math.floor(Date.now() / 1000) - hours * 3600;\n\t}\n\n\t/**\n\t * Wait for the initial history sync to populate this.chats.\n\t * History arrives via phone-pushed messaging-history.set events\n\t * (syncFullHistory: true); there is no server API to request it —\n\t * resyncAppState only syncs app state (mute/archive/contacts) and\n\t * gets rate-limited (rate-overlimit) when called repeatedly.\n\t */\n\tprivate async waitForInitialHistorySync(timeoutMs = HISTORY_SYNC_WAIT_TIMEOUT_MS): Promise<void> {\n\t\t// The flag lives on the socket, not the adapter: callers (e.g. the\n\t\t// insight refresh first-landing loop) construct a fresh adapter per call\n\t\t// around the same socket. Once one full wait has timed out, repeating it\n\t\t// is pointless — history sync is a one-time phone push.\n\t\tconst sockAny = this.sock as (WASocket & { __historySyncWaitTimedOut?: boolean }) | null;\n\t\tif (sockAny?.__historySyncWaitTimedOut) {\n\t\t\tconsole.log(\"[whatsapp] Initial history sync already timed out on this socket, skipping wait\");\n\t\t\treturn;\n\t\t}\n\t\tconst deadline = Date.now() + timeoutMs;\n\t\twhile (this.chats.size === 0 && Date.now() < deadline) {\n\t\t\tawait new Promise((resolve) => setTimeout(resolve, HISTORY_SYNC_POLL_INTERVAL_MS));\n\t\t}\n\t\tif (this.chats.size === 0 && sockAny) {\n\t\t\tsockAny.__historySyncWaitTimedOut = true;\n\t\t}\n\t}\n\n\t/**\n\t * Make sure the socket carries a persistent message history store. The\n\t * phone pushes the full history exactly once, seconds after pairing — so\n\t * the store must be attached when the socket is created, not later by the\n\t * self-message listener (whose frontend-triggered init loses that race).\n\t * Keyed by sessionId so every adapter instance for the same WhatsApp\n\t * session reads the same persisted data.\n\t */\n\tprivate ensureMessageStore(sock: WASocket): void {\n\t\tconst sockAny = sock as any;\n\t\tconst existingIsClosed = sockAny.store instanceof WhatsAppMessageHistoryStore && sockAny.store.isClosed;\n\t\tif (sockAny.store && !existingIsClosed) {\n\t\t\t// Adopt a store another component (e.g. self-listener) already attached.\n\t\t\tif (!this.messageStore && sockAny.store instanceof WhatsAppMessageHistoryStore) {\n\t\t\t\tthis.messageStore = sockAny.store;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\t// A destroyed store (e.g. discarded after a socket swap) must never be\n\t\t// reused — all its writes are no-ops and persistence would silently\n\t\t// freeze. Drop the stale reference and create a fresh one.\n\t\tif (this.messageStore?.isClosed) {\n\t\t\tthis.messageStore = null;\n\t\t}\n\t\tif (!this.hasStableSessionId) {\n\t\t\t// Random session ids change every instance — persisted files could\n\t\t\t// never be found again after a restart NOR purged on account deletion\n\t\t\t// (orphaned plain-text dirs). The store runs memory-only instead.\n\t\t\tconsole.warn(\n\t\t\t\t`[whatsapp] [${this.sessionId}] No stable botId/sessionKey — message store runs in-memory only`,\n\t\t\t);\n\t\t}\n\t\tconst store =\n\t\t\tthis.messageStore ??\n\t\t\tnew WhatsAppMessageHistoryStore({\n\t\t\t\taccountId: this.sessionId,\n\t\t\t\tbaseDir: this.historyStoreDir,\n\t\t\t\tpersist: this.hasStableSessionId,\n\t\t\t});\n\t\tthis.messageStore = store;\n\t\tstore.attach(sock);\n\t\tsockAny.store = store;\n\t\tif (DEBUG) console.log(`[whatsapp] [${this.sessionId}] Persistent message store attached to socket`);\n\t}\n\n\t/**\n\t * Restore this.chats from the persisted message history store (attached to\n\t * the socket by the self-message listener). Lets insight refreshes work\n\t * right after a restart, before any new history sync events arrive.\n\t */\n\tprivate hydrateChatsFromStore(sock: WASocket): void {\n\t\tconst store = (sock as any).store as\n\t\t\t| { loadChats?: () => Array<{ id: string; name?: string }> }\n\t\t\t| undefined;\n\t\tconst persisted = store?.loadChats?.() ?? [];\n\t\tfor (const chat of persisted) {\n\t\t\tif (!chat.id || chat.id === \"status@broadcast\") continue;\n\t\t\tthis.chats.set(chat.id, {\n\t\t\t\tid: chat.id,\n\t\t\t\tname: chat.name ?? jidToUser(chat.id),\n\t\t\t\ttype: chat.id.endsWith(\"@g.us\") ? \"group\" : \"private\",\n\t\t\t});\n\t\t}\n\t\tif (this.chats.size > 0) {\n\t\t\tconsole.log(`[whatsapp] Restored ${this.chats.size} chats from persisted history store`);\n\t\t}\n\t}\n\n\t/**\n\t * On-demand history backfill via the official Baileys API: when local\n\t * coverage for a chat does not reach the requested window start, page\n\t * backwards from the oldest locally stored message (the required anchor)\n\t * with sock.fetchMessageHistory. The phone responds asynchronously through\n\t * an ON_DEMAND messaging-history.set, which the attached store persists —\n\t * so arrival is detected by polling the store's oldest message.\n\t */\n\tprivate async backfillChatHistory(sock: WASocket, chatJid: string, since: number): Promise<void> {\n\t\t// since=0 means \"everything locally available\" — not a backfill request.\n\t\tif (since <= 0) return;\n\t\tconst sockExtra = sock as unknown as {\n\t\t\tfetchMessageHistory?: (\n\t\t\t\tcount: number,\n\t\t\t\toldestMsgKey: WAMessage[\"key\"],\n\t\t\t\toldestMsgTimestamp: number,\n\t\t\t) => Promise<string>;\n\t\t};\n\t\tif (typeof sockExtra.fetchMessageHistory !== \"function\") return;\n\t\tconst store = (sock as any).store as\n\t\t\t| {\n\t\t\t\t\tgetOldestMessage?: (jid: string) => WAMessage | undefined;\n\t\t\t\t\tcanStoreOlderMessages?: (jid: string) => boolean;\n\t\t\t\t\tgetOnDemandResponseCount?: () => number;\n\t\t\t }\n\t\t\t| undefined;\n\t\tif (typeof store?.getOldestMessage !== \"function\") return;\n\t\t// Offline-phone circuit breaker lives on the socket (like the history\n\t\t// sync wait flag): callers construct a fresh adapter per refresh, and an\n\t\t// instance field would make every refresh re-pay the full timeouts. The\n\t\t// backoff window keeps it from disabling backfill forever.\n\t\tconst breaker = sock as WASocket & {\n\t\t\t__backfillTimeouts?: number;\n\t\t\t__backfillOfflineUntil?: number;\n\t\t};\n\t\tif ((breaker.__backfillOfflineUntil ?? 0) > Date.now()) return;\n\t\t// At the per-chat storage cap, backfilled messages would be trimmed away\n\t\t// immediately — the anchor could never move. Skip instead of requesting.\n\t\tif (store.canStoreOlderMessages && !store.canStoreOlderMessages(chatJid)) {\n\t\t\treturn;\n\t\t}\n\n\t\tfor (let i = 0; i < MAX_BACKFILL_REQUESTS_PER_CHAT; i++) {\n\t\t\tconst oldest = store.getOldestMessage(chatJid);\n\t\t\tconst oldestTs = Number(oldest?.messageTimestamp ?? 0);\n\t\t\t// No anchor (nothing stored for this chat) or coverage already reaches\n\t\t\t// the window start — nothing to backfill.\n\t\t\tif (!oldest?.key?.id || !oldestTs || oldestTs <= since) return;\n\t\t\tif (this.backfillRequestsThisCycle >= MAX_BACKFILL_REQUESTS_PER_CYCLE) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (i > 0) {\n\t\t\t\tawait new Promise((resolve) => setTimeout(resolve, BACKFILL_THROTTLE_MS));\n\t\t\t}\n\n\t\t\tthis.backfillRequestsThisCycle++;\n\t\t\t// The store counts ON_DEMAND responses. Note: the counter is per store\n\t\t\t// (not per request), which assumes backfill requests are single-flight —\n\t\t\t// true today because getChatsByChunk visits chats sequentially.\n\t\t\tconst responseBaseline = store.getOnDemandResponseCount?.() ?? 0;\n\t\t\ttry {\n\t\t\t\tawait sockExtra.fetchMessageHistory(BACKFILL_PAGE_SIZE, oldest.key, oldestTs);\n\t\t\t} catch (error) {\n\t\t\t\tconsole.warn(`[whatsapp] fetchMessageHistory failed for ${chatJid}:`, error);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst { responded, gotOlder } = await this.waitForBackfillResponse(\n\t\t\t\tstore,\n\t\t\t\tchatJid,\n\t\t\t\toldestTs,\n\t\t\t\tresponseBaseline,\n\t\t\t);\n\t\t\tif (gotOlder) {\n\t\t\t\tbreaker.__backfillTimeouts = 0;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (responded) {\n\t\t\t\t// The phone answered but produced nothing older — we reached the\n\t\t\t\t// start of this chat's history. A normal outcome, not a timeout.\n\t\t\t\tbreaker.__backfillTimeouts = 0;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// No response at all — likely an offline phone; count toward the\n\t\t\t// circuit breaker so the rest of the cycle isn't wasted waiting.\n\t\t\tbreaker.__backfillTimeouts = (breaker.__backfillTimeouts ?? 0) + 1;\n\t\t\tif (breaker.__backfillTimeouts >= MAX_CONSECUTIVE_BACKFILL_TIMEOUTS) {\n\t\t\t\tbreaker.__backfillOfflineUntil = Date.now() + BACKFILL_OFFLINE_BACKOFF_MS;\n\t\t\t\tbreaker.__backfillTimeouts = 0;\n\t\t\t\tconsole.log(\n\t\t\t\t\t`[whatsapp] Backfill paused for ${BACKFILL_OFFLINE_BACKOFF_MS / 60000}min — phone appears offline`,\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t}\n\n\t/**\n\t * Wait for the phone's answer to a fetchMessageHistory request: either the\n\t * store's oldest message gets older (new history arrived), or an ON_DEMAND\n\t * messaging-history.set lands without older messages (end of history).\n\t */\n\tprivate async waitForBackfillResponse(\n\t\tstore: {\n\t\t\tgetOldestMessage?: (jid: string) => WAMessage | undefined;\n\t\t\tgetOnDemandResponseCount?: () => number;\n\t\t},\n\t\tchatJid: string,\n\t\tprevOldestTs: number,\n\t\tresponseBaseline: number,\n\t): Promise<{ responded: boolean; gotOlder: boolean }> {\n\t\tconst deadline = Date.now() + BACKFILL_RESPONSE_TIMEOUT_MS;\n\t\twhile (Date.now() < deadline) {\n\t\t\tconst oldest = store.getOldestMessage?.(chatJid);\n\t\t\tconst ts = Number(oldest?.messageTimestamp ?? 0);\n\t\t\tif (ts && ts < prevOldestTs) return { responded: true, gotOlder: true };\n\t\t\tif ((store.getOnDemandResponseCount?.() ?? 0) > responseBaseline) {\n\t\t\t\t// Response arrived between the two checks — re-read the anchor once.\n\t\t\t\tconst recheck = store.getOldestMessage?.(chatJid);\n\t\t\t\tconst recheckTs = Number(recheck?.messageTimestamp ?? 0);\n\t\t\t\treturn {\n\t\t\t\t\tresponded: true,\n\t\t\t\t\tgotOlder: recheckTs > 0 && recheckTs < prevOldestTs,\n\t\t\t\t};\n\t\t\t}\n\t\t\tawait new Promise((resolve) => setTimeout(resolve, BACKFILL_POLL_INTERVAL_MS));\n\t\t}\n\t\treturn { responded: false, gotOlder: false };\n\t}\n\n\tprivate async ensureReady(): Promise<void> {\n\t\t// If we already have a connected socket, reuse it — don't create a new one.\n\t\tif (this.sock) return;\n\n\t\tif (!this.initializationPromise) {\n\t\t\tthis.initializationPromise = (async () => {\n\t\t\t\t// Clean up old wwebjs auth files from previous failed attempts\n\t\t\t\tif (!this.isTauriMode()) {\n\t\t\t\t\tconst { existsSync, rmSync } = await import(\"node:fs\");\n\t\t\t\t\tconst oldAuthDir = path.join(process.cwd(), \".wwebjs_auth\");\n\t\t\t\t\ttry {\n\t\t\t\t\t\tif (existsSync(oldAuthDir)) {\n\t\t\t\t\t\t\tconsole.log(\"[whatsapp] Removing old wwebjs auth directory\");\n\t\t\t\t\t\t\trmSync(oldAuthDir, { recursive: true, force: true });\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch {\n\t\t\t\t\t\t/* ignore */\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst exists = await this.authStateExists();\n\t\t\t\tif (DEBUG)\n\t\t\t\t\tconsole.log(`[whatsapp] Session check: ${exists ? \"exists\" : \"not found\"} for ${this.sessionId}`);\n\n\t\t\t\t// Create socket — Baileys restores session automatically if exists,\n\t\t\t\t// otherwise QR will be emitted via connection.update.\n\t\t\t\t// Socket is registered in createSocket() immediately after makeWASocket() returns,\n\t\t\t\t// so ensureReady() can reliably check the registry here.\n\t\t\t\tif (this.botId && this.clientRegistry) {\n\t\t\t\t\tconst existing = this.clientRegistry.getClientBySessionKey(this.botId) as WASocket | undefined;\n\t\t\t\t\tif (existing) {\n\t\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t\t`[whatsapp] [${this.sessionId}] Reusing existing socket from registry for botId=${this.botId}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tthis.sock = existing;\n\t\t\t\t\t\tthis.isReady = true;\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconsole.log(\n\t\t\t\t\t`[whatsapp] [${this.sessionId}] Creating new socket (sessionId=${this.sessionId} botId=${this.botId})`,\n\t\t\t\t);\n\t\t\t\tthis.sock = await this.createSocket();\n\n\t\t\t\tconst maxWaitTime = 120_000;\n\t\t\t\tconst checkInterval = 500;\n\t\t\t\tconst startTime = Date.now();\n\t\t\t\tconst isLoginFlow = !!this.loginDeferred;\n\t\t\t\tconst isDev = process.env.NODE_ENV === \"development\";\n\n\t\t\t\twhile (!this.isReady && Date.now() - startTime < maxWaitTime) {\n\t\t\t\t\tif (!isLoginFlow && this.loginDeferred?.firstQrResolved && !isDev) {\n\t\t\t\t\t\tconst elapsed = Date.now() - startTime;\n\t\t\t\t\t\tif (elapsed > 10_000) {\n\t\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t\t\"WhatsApp session requires re-authentication. Please disconnect and reconnect your WhatsApp account.\",\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tawait new Promise((r) => setTimeout(r, checkInterval));\n\t\t\t\t}\n\n\t\t\t\tif (!this.isReady) {\n\t\t\t\t\tthrow new Error(`[whatsapp] Socket failed to connect within ${maxWaitTime}ms`);\n\t\t\t\t}\n\n\t\t\t\tif (DEBUG) console.log(`[whatsapp] Ready for session ${this.sessionId}`);\n\t\t\t})().catch((error) => {\n\t\t\t\tthis.initializationPromise = null;\n\t\t\t\tthrow error;\n\t\t\t});\n\t\t}\n\n\t\tawait this.initializationPromise;\n\t}\n\n\t// ----- Public API -----\n\n\tasync startQrLogin(callbacks: WhatsAppLoginCallbacks = {}): Promise<string> {\n\t\t// If socket already exists and is connected, user is already logged in — call onReady immediately\n\t\tif (this.sock && this.isReady) {\n\t\t\tconsole.log(`[whatsapp] [${this.sessionId}] Socket already connected, calling onReady directly`);\n\t\t\tvoid this.handleLoginReady();\n\t\t\treturn \"\";\n\t\t}\n\t\tif (this.loginDeferred) {\n\t\t\tthrow new Error(\"[whatsapp] A login flow is already in progress\");\n\t\t}\n\n\t\t// Register so external callers can find this adapter by sessionId\n\t\tactiveAdapters.set(this.sessionId, this);\n\n\t\tthis.loginDeferred = {\n\t\t\tresolveFirstQr: () => {},\n\t\t\trejectFirstQr: () => {},\n\t\t\trejectLogin: () => {},\n\t\t\tfirstQrResolved: false,\n\t\t\tcallbacks,\n\t\t};\n\n\t\tconst firstQrPromise = new Promise<string>((resolve, reject) => {\n\t\t\tif (!this.loginDeferred) return reject(new Error(\"Login not initialized\"));\n\t\t\tthis.loginDeferred.resolveFirstQr = resolve;\n\t\t\tthis.loginDeferred.rejectFirstQr = reject;\n\t\t\tthis.loginDeferred.rejectLogin = reject;\n\t\t});\n\n\t\tvoid (async () => {\n\t\t\ttry {\n\t\t\t\tawait this.ensureReady();\n\t\t\t} catch (error) {\n\t\t\t\tconst err = error instanceof Error ? error : new Error(String(error ?? \"\"));\n\t\t\t\tif (this.loginDeferred) {\n\t\t\t\t\t// Reject with the stored reject function (works even after QR resolved)\n\t\t\t\t\tthis.loginDeferred.rejectLogin(err);\n\t\t\t\t\tconst cb = this.loginDeferred.callbacks.onError;\n\t\t\t\t\tif (cb) await cb(err);\n\t\t\t\t\t// Don't null loginDeferred here — keep it so close handler can also reject\n\t\t\t\t}\n\t\t\t}\n\t\t})();\n\n\t\treturn firstQrPromise;\n\t}\n\n\tasync startPairingCodeLogin(phoneNumber: string, callbacks: WhatsAppLoginCallbacks = {}): Promise<string> {\n\t\tif (this.loginDeferred) {\n\t\t\tthrow new Error(\"[whatsapp] A login flow is already in progress\");\n\t\t}\n\n\t\tconst cleanPhone = phoneNumber.replace(/\\D/g, \"\");\n\t\tif (!cleanPhone || cleanPhone.length < 10) {\n\t\t\tthrow new Error(\"[whatsapp] Invalid phone number format\");\n\t\t}\n\n\t\tthis.loginDeferred = {\n\t\t\tresolveFirstQr: () => {},\n\t\t\trejectFirstQr: () => {},\n\t\t\trejectLogin: () => {},\n\t\t\tfirstQrResolved: false,\n\t\t\tcallbacks,\n\t\t};\n\n\t\tconst firstCodePromise = new Promise<string>((resolve, reject) => {\n\t\t\tif (!this.loginDeferred) return reject(new Error(\"Login not initialized\"));\n\t\t\tthis.loginDeferred.resolveFirstQr = resolve;\n\t\t\tthis.loginDeferred.rejectFirstQr = reject;\n\t\t\tthis.loginDeferred.rejectLogin = reject;\n\t\t});\n\n\t\tvoid (async () => {\n\t\t\ttry {\n\t\t\t\tawait this.ensureReady();\n\n\t\t\t\tconst sock = this.sock;\n\t\t\t\tif (!sock) throw new Error(\"Socket not initialized\");\n\n\t\t\t\tconst code = await sock.requestPairingCode(cleanPhone);\n\t\t\t\tif (DEBUG) console.log(`[whatsapp] Pairing code for ${cleanPhone}: ${code}`);\n\n\t\t\t\tif (this.loginDeferred && !this.loginDeferred.firstQrResolved) {\n\t\t\t\t\tthis.loginDeferred.firstQrResolved = true;\n\t\t\t\t\tthis.loginDeferred.resolveFirstQr(code);\n\t\t\t\t}\n\t\t\t\tconst cb = this.loginDeferred?.callbacks.onCode;\n\t\t\t\tif (cb) await cb(code);\n\t\t\t} catch (error) {\n\t\t\t\tconst err = error instanceof Error ? error : new Error(String(error ?? \"\"));\n\t\t\t\tif (this.loginDeferred) {\n\t\t\t\t\tthis.loginDeferred.rejectFirstQr(err);\n\t\t\t\t\tconst cb = this.loginDeferred.callbacks.onError;\n\t\t\t\t\tif (cb) await cb(err);\n\t\t\t\t\tthis.loginDeferred = null;\n\t\t\t\t}\n\t\t\t}\n\t\t})();\n\n\t\treturn firstCodePromise;\n\t}\n\n\tgetUserInfo(): WhatsAppUserInfo {\n\t\tconst me = this.sock?.user;\n\t\tif (!me) {\n\t\t\treturn { wid: \"\", pushName: undefined, formattedNumber: undefined };\n\t\t}\n\t\treturn {\n\t\t\twid: me.id ?? \"\",\n\t\t\tpushName: me.name ?? me.notify ?? me.verifiedName ?? undefined,\n\t\t\tformattedNumber: jidToUser(me.id ?? \"\"),\n\t\t};\n\t}\n\n\tasync sendMessages(target: MessageTarget, id: string, messages: Messages): Promise<void> {\n\t\tawait this.runWithAdapterError(\"sendMessages\", async () => {\n\t\t\tawait this.ensureReady();\n\t\t\tconst chatId = this.resolveChatId(target, id);\n\n\t\t\tfor (const message of messages) {\n\t\t\t\ttry {\n\t\t\t\t\tif (typeof message === \"string\") {\n\t\t\t\t\t\tif (!message.trim()) continue;\n\t\t\t\t\t\tconst sent = await this.sock?.sendMessage(chatId, {\n\t\t\t\t\t\t\ttext: message,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (sent?.message && sent.key.id) {\n\t\t\t\t\t\t\tthis.sentMessageCache.set(sent.key.id, sent.message);\n\t\t\t\t\t\t\tif (this.sentMessageCache.size > 256) {\n\t\t\t\t\t\t\t\tconst oldest = this.sentMessageCache.keys().next().value;\n\t\t\t\t\t\t\t\tif (oldest) this.sentMessageCache.delete(oldest);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (isImageMessage(message)) {\n\t\t\t\t\t\tconst media = await this.prepareMediaMessage(message);\n\t\t\t\t\t\tconst sent = await this.sock?.sendMessage(chatId, media);\n\t\t\t\t\t\tif (sent?.message && sent.key.id) {\n\t\t\t\t\t\t\tthis.sentMessageCache.set(sent.key.id, sent.message);\n\t\t\t\t\t\t\tif (this.sentMessageCache.size > 256) {\n\t\t\t\t\t\t\t\tconst oldest = this.sentMessageCache.keys().next().value;\n\t\t\t\t\t\t\t\tif (oldest) this.sentMessageCache.delete(oldest);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (isFileMessage(message)) {\n\t\t\t\t\t\tconst media = await this.prepareFileMessage(message);\n\t\t\t\t\t\tconst sent = await this.sock?.sendMessage(chatId, media);\n\t\t\t\t\t\tif (sent?.message && sent.key.id) {\n\t\t\t\t\t\t\tthis.sentMessageCache.set(sent.key.id, sent.message);\n\t\t\t\t\t\t\tif (this.sentMessageCache.size > 256) {\n\t\t\t\t\t\t\t\tconst oldest = this.sentMessageCache.keys().next().value;\n\t\t\t\t\t\t\t\tif (oldest) this.sentMessageCache.delete(oldest);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow this.createAdapterError(\n\t\t\t\t\t\t\t\"sendMessages\",\n\t\t\t\t\t\t\t\"invalid_request_error\",\n\t\t\t\t\t\t\t`WhatsApp send does not support message content: ${describeUnsupportedMessage(message)}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t} catch (error) {\n\t\t\t\t\tif (DEBUG) console.error(`[whatsapp] Failed to send message to ${chatId}:`, error);\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tasync sendMessage(target: MessageTarget, id: string, message: string): Promise<void> {\n\t\tawait this.sendMessages(target, id, [message]);\n\t}\n\n\tasync replyMessages(event: MessageEvent, messages: Messages, quoteOrigin = false): Promise<void> {\n\t\tawait this.runWithAdapterError(\"replyMessages\", async () => {\n\t\t\tawait this.ensureReady();\n\t\t\tconst msg = event.sourcePlatformObject as WAMessage | undefined;\n\t\t\tconst targetId =\n\t\t\t\tevent.targetType === \"group\" ? event.sender.group.id : (event.sender as { id: string }).id;\n\t\t\tconst normalizedTargetId = String(targetId);\n\n\t\t\tif (quoteOrigin && msg) {\n\t\t\t\tconst remoteJid = msg.key.remoteJid;\n\t\t\t\tif (!remoteJid) return;\n\t\t\t\tfor (const message of messages) {\n\t\t\t\t\tif (typeof message === \"string\") {\n\t\t\t\t\t\tif (!message.trim()) continue;\n\t\t\t\t\t\tconst sent = await this.sock?.sendMessage(remoteJid, { text: message }, { quoted: msg });\n\t\t\t\t\t\tif (sent?.message && sent.key.id) {\n\t\t\t\t\t\t\tthis.sentMessageCache.set(sent.key.id, sent.message);\n\t\t\t\t\t\t\tif (this.sentMessageCache.size > 256) {\n\t\t\t\t\t\t\t\tconst oldest = this.sentMessageCache.keys().next().value;\n\t\t\t\t\t\t\t\tif (oldest) this.sentMessageCache.delete(oldest);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (isImageMessage(message)) {\n\t\t\t\t\t\tconst media = await this.prepareMediaMessage(message);\n\t\t\t\t\t\tconst sent = await this.sock?.sendMessage(remoteJid, media, {\n\t\t\t\t\t\t\tquoted: msg,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (sent?.message && sent.key.id) {\n\t\t\t\t\t\t\tthis.sentMessageCache.set(sent.key.id, sent.message);\n\t\t\t\t\t\t\tif (this.sentMessageCache.size > 256) {\n\t\t\t\t\t\t\t\tconst oldest = this.sentMessageCache.keys().next().value;\n\t\t\t\t\t\t\t\tif (oldest) this.sentMessageCache.delete(oldest);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (isFileMessage(message)) {\n\t\t\t\t\t\tconst media = await this.prepareFileMessage(message);\n\t\t\t\t\t\tconst sent = await this.sock?.sendMessage(remoteJid, media, {\n\t\t\t\t\t\t\tquoted: msg,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (sent?.message && sent.key.id) {\n\t\t\t\t\t\t\tthis.sentMessageCache.set(sent.key.id, sent.message);\n\t\t\t\t\t\t\tif (this.sentMessageCache.size > 256) {\n\t\t\t\t\t\t\t\tconst oldest = this.sentMessageCache.keys().next().value;\n\t\t\t\t\t\t\t\tif (oldest) this.sentMessageCache.delete(oldest);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow this.createAdapterError(\n\t\t\t\t\t\t\t\"replyMessages\",\n\t\t\t\t\t\t\t\"invalid_request_error\",\n\t\t\t\t\t\t\t`WhatsApp reply does not support message content: ${describeUnsupportedMessage(message)}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tawait this.sendMessages(event.targetType, normalizedTargetId, messages);\n\t\t});\n\t}\n\n\tasync run(): Promise<void> {\n\t\tawait this.ensureReady();\n\t}\n\n\tisUsingLocalAuth(): boolean {\n\t\t// In Tauri mode, auth is stored in files (useMultiFileAuthState) — equivalent to LocalAuth\n\t\treturn this.isTauriMode();\n\t}\n\n\t/**\n\t * Start the socket without waiting for connection (for self-listener use).\n\t * Creates the socket and registers it in the client registry.\n\t * Always sets up listeners (even when socket was already connected)\n\t * so callers receive events.\n\t */\n\tasync startSocket(): Promise<WASocket> {\n\t\tawait this.ensureReady();\n\t\tif (!this.sock) throw new Error(\"[whatsapp] Socket not available after ensureReady\");\n\t\t// Always set up listeners — even when socket was reused from registry,\n\t\t// it may not have this adapter's handlers attached yet.\n\t\tthis.setupListenersOnSocket(this.sock);\n\t\treturn this.sock;\n\t}\n\n\t/**\n\t * Attach this adapter to an already-connected socket (from registry).\n\t * Used by QR login to reuse the self-listener's socket instead of creating a new one.\n\t */\n\tattachToSocket(sock: WASocket): void {\n\t\tthis.sock = sock;\n\t\tthis.isReady = true;\n\t\tthis.isAuthenticated = true;\n\t\t// Make sure a persistent message store is attached (no-op when the\n\t\t// socket creator or self-listener already provided one).\n\t\tthis.ensureMessageStore(sock);\n\t\t// Adopt the socket's existing sentMessageCache so getMessage reads the\n\t\t// same cache that self-listener writes to.\n\t\tif ((sock as any).sentMessageCache) {\n\t\t\tthis.sentMessageCache = (sock as any).sentMessageCache;\n\t\t}\n\t\t// Set up listeners so QR callbacks get triggered\n\t\tthis.setupListenersOnSocket(sock);\n\n\t\t// Also set up chats listeners so this.chats is populated.\n\t\t// Without these, getChatsByChunk returns empty (no chat JIDs to iterate).\n\t\tsock.ev.on(\"chats.upsert\", (newChats: import(\"@whiskeysockets/baileys/lib/Types/Chat\").Chat[]) => {\n\t\t\tfor (const chat of newChats) {\n\t\t\t\tif (!chat.id || chat.id === \"status@broadcast\") continue;\n\t\t\t\tconst name = (chat as any).name ?? (chat as any).subject ?? jidToUser(chat.id);\n\t\t\t\tthis.chats.set(chat.id, {\n\t\t\t\t\tid: chat.id,\n\t\t\t\t\tname: name ?? jidToUser(chat.id),\n\t\t\t\t\ttype: chat.id.endsWith(\"@g.us\") ? \"group\" : \"private\",\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\tsock.ev.on(\"chats.update\", (updates: import(\"@whiskeysockets/baileys/lib/Types/Chat\").ChatUpdate[]) => {\n\t\t\tfor (const update of updates) {\n\t\t\t\tif (!update.id) continue;\n\t\t\t\tconst existing = this.chats.get(update.id);\n\t\t\t\tif (existing) {\n\t\t\t\t\tconst name = (update as any).name ?? (update as any).subject;\n\t\t\t\t\tif (name) {\n\t\t\t\t\t\texisting.name = name;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tsock.ev.on(\n\t\t\t\"messaging-history.set\",\n\t\t\t({\n\t\t\t\tchats: historyChats,\n\t\t\t}: {\n\t\t\t\tchats: import(\"@whiskeysockets/baileys/lib/Types/Chat\").Chat[];\n\t\t\t}) => {\n\t\t\t\tfor (const chat of historyChats) {\n\t\t\t\t\tif (!chat.id || chat.id === \"status@broadcast\") continue;\n\t\t\t\t\tconst name = (chat as any).name ?? (chat as any).subject ?? jidToUser(chat.id);\n\t\t\t\t\tthis.chats.set(chat.id, {\n\t\t\t\t\t\tid: chat.id,\n\t\t\t\t\t\tname: name ?? jidToUser(chat.id),\n\t\t\t\t\t\ttype: chat.id.endsWith(\"@g.us\") ? \"group\" : \"private\",\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\t\t);\n\n\t\t// History sync cannot be requested from the server: it is pushed by the\n\t\t// phone via messaging-history.set (syncFullHistory: true). Do NOT call\n\t\t// resyncAppState here — it only syncs app state, never messages, and\n\t\t// repeated calls trigger WhatsApp's rate-overlimit throttling.\n\t\t// Register under this adapter's botId\n\t\tif (this.botId && this.clientRegistry) {\n\t\t\tthis.clientRegistry.registerClient(this.botId, sock);\n\t\t}\n\t}\n\n\t/**\n\t * Kill the socket. If targetSock is provided, only kill that socket's listeners\n\t * (used during reconnect to avoid killing the new socket's listeners).\n\t * If no targetSock, kills the current socket.\n\t */\n\tasync kill(targetSock?: WASocket): Promise<boolean> {\n\t\tconst sockToKill = targetSock ?? this.sock;\n\t\tconst isFullKill = !targetSock;\n\t\tif (isFullKill) {\n\t\t\tthis.isClosed = true;\n\t\t\tactiveAdapters.delete(this.sessionId);\n\t\t\tif (this.reconnectTimer) {\n\t\t\t\tclearTimeout(this.reconnectTimer);\n\t\t\t\tthis.reconnectTimer = null;\n\t\t\t}\n\t\t\tthis._pendingReconnect = null;\n\t\t}\n\t\tif (!sockToKill) return true;\n\n\t\ttry {\n\t\t\t// Only clean up listeners for the target socket, leave other sockets intact\n\t\t\tfor (const cleanup of this.eventCleanup) {\n\t\t\t\ttry {\n\t\t\t\t\tcleanup();\n\t\t\t\t} catch {\n\t\t\t\t\t/* ignore */\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.eventCleanup = [];\n\n\t\t\ttry {\n\t\t\t\tsockToKill.end(undefined); // Just closes WS, does NOT emit close event with error\n\t\t\t} catch {\n\t\t\t\t/* ignore */\n\t\t\t}\n\n\t\t\t// Only update state if killing the current (last) socket\n\t\t\tif (sockToKill === this.sock) {\n\t\t\t\tif (this.botId && this.clientRegistry) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tthis.clientRegistry.unregisterClient(this.botId);\n\t\t\t\t\t} catch {\n\t\t\t\t\t\t/* ignore */\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis.isReady = false;\n\t\t\t\tthis.isAuthenticated = false;\n\t\t\t\tthis.initializationPromise = null;\n\t\t\t\tthis.sock = null;\n\t\t\t}\n\t\t\treturn true;\n\t\t} catch (error) {\n\t\t\tconsole.error(\"[whatsapp] Failed to shutdown socket:\", error);\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tgetSessionIdentifier(): string {\n\t\treturn this.sessionId;\n\t}\n\n\tasync getDialogs(): Promise<WhatsAppDialogInfo[]> {\n\t\tawait this.ensureReady();\n\t\treturn Array.from(this.chats.values()).slice(0, maxDialogCount);\n\t}\n\n\tasync getChatsByChunk(\n\t\tsince: number,\n\t\tchunkSize?: number,\n\t): Promise<{ messages: ExtractedMessageInfo[]; hasMore: boolean }> {\n\t\tconst maxMessageChunkCount = chunkSize ?? DEFAULT_MAX_MESSAGE_CHUNK_COUNT;\n\t\tawait this.ensureReady();\n\t\tconst sock = this.sock;\n\t\tif (!sock) throw new Error(\"[whatsapp] Socket not available\");\n\n\t\t// Cold start (e.g. after a server restart): the chat list can be restored\n\t\t// from the persisted message history store without any network traffic.\n\t\tif (this.chats.size === 0) {\n\t\t\tthis.hydrateChatsFromStore(sock);\n\t\t}\n\n\t\t// If this.chats is still empty, the phone-pushed initial history sync\n\t\t// (messaging-history.set, enabled by syncFullHistory) hasn't arrived yet.\n\t\t// Wait for it instead of calling resyncAppState: app state sync never\n\t\t// returns message history, and WhatsApp rate-limits it aggressively\n\t\t// (rate-overlimit), which used to break onboarding entirely.\n\t\tif (this.chats.size === 0) {\n\t\t\tconsole.log(\"[whatsapp] getChatsByChunk: this.chats is empty, waiting for initial history sync...\");\n\t\t\tawait this.waitForInitialHistorySync();\n\t\t\tif (this.chats.size === 0) {\n\t\t\t\tconsole.log(\"[whatsapp] getChatsByChunk: this.chats still empty after waiting, returning empty\");\n\t\t\t\treturn { messages: [], hasMore: false };\n\t\t\t}\n\t\t}\n\n\t\tconst extractedMessages: ExtractedMessageInfo[] = [];\n\t\tconst selfJid = jidToUser(sock.user?.id ?? \"\");\n\n\t\tif (!this.asyncIteratorState.isInitialized) {\n\t\t\tconst chatIds = Array.from(this.chats.keys())\n\t\t\t\t.filter((j) => j !== \"status@broadcast\")\n\t\t\t\t.slice(0, maxDialogCount);\n\t\t\tthis.asyncIteratorState.chatIds = chatIds;\n\t\t\tthis.asyncIteratorState.currentChatIndex = 0;\n\t\t\tthis.asyncIteratorState.currentMessageIndex = 0;\n\t\t\tthis.asyncIteratorState.offsetDate = since;\n\t\t\tthis.asyncIteratorState.isInitialized = true;\n\t\t\t// New iteration cycle — reset the on-demand backfill budget. (The\n\t\t\t// offline-phone breaker is socket-scoped with its own backoff window.)\n\t\t\tthis.backfillRequestsThisCycle = 0;\n\n\t\t\tif (this.asyncIteratorState.chatIds.length === 0) {\n\t\t\t\tthis.asyncIteratorState.isInitialized = false;\n\t\t\t\treturn { messages: [], hasMore: false };\n\t\t\t}\n\t\t}\n\n\t\tconst { chatIds, currentChatIndex, offsetDate } = this.asyncIteratorState;\n\n\t\tfor (let chatIndex = currentChatIndex; chatIndex < chatIds.length; chatIndex++) {\n\t\t\tconst chatJid = chatIds[chatIndex];\n\t\t\ttry {\n\t\t\t\t// When visiting a chat for the first time in this cycle, backfill\n\t\t\t\t// older history on demand if local coverage doesn't reach the window.\n\t\t\t\tconst resumingMidChat =\n\t\t\t\t\tchatIndex === currentChatIndex && this.asyncIteratorState.currentMessageIndex > 0;\n\t\t\t\tif (!resumingMidChat) {\n\t\t\t\t\tawait this.backfillChatHistory(sock, chatJid, offsetDate);\n\t\t\t\t}\n\n\t\t\t\tconst store = (sock as any).store;\n\t\t\t\tconst history = (await store?.loadMessages?.(chatJid, maxMessageCount, {})) ?? [];\n\n\t\t\t\tconst filteredMessages = (history as WAMessage[])\n\t\t\t\t\t.filter((m) => {\n\t\t\t\t\t\tconst msgTs = (m.messageTimestamp as number) ?? 0;\n\t\t\t\t\t\treturn msgTs >= offsetDate;\n\t\t\t\t\t})\n\t\t\t\t\t.reverse();\n\n\t\t\t\tfor (\n\t\t\t\t\tlet messageIndex = chatIndex === currentChatIndex ? this.asyncIteratorState.currentMessageIndex : 0;\n\t\t\t\t\tmessageIndex < filteredMessages.length;\n\t\t\t\t\tmessageIndex++\n\t\t\t\t) {\n\t\t\t\t\tconst msg = filteredMessages[messageIndex];\n\t\t\t\t\tconst senderJid = msg.key.participant ?? msg.key.remoteJid ?? \"\";\n\t\t\t\t\tif (jidToUser(senderJid) === selfJid) continue;\n\n\t\t\t\t\tconst info = this.extractMessageInfo(msg, chatJid);\n\t\t\t\t\tif (info) extractedMessages.push(info);\n\t\t\t\t\tif (extractedMessages.length >= maxMessageChunkCount) {\n\t\t\t\t\t\tthis.asyncIteratorState.currentChatIndex = chatIndex;\n\t\t\t\t\t\tthis.asyncIteratorState.currentMessageIndex = messageIndex + 1;\n\t\t\t\t\t\treturn { messages: extractedMessages, hasMore: true };\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tthis.asyncIteratorState.currentMessageIndex = 0;\n\t\t\t\tthis.asyncIteratorState.currentChatIndex = chatIndex + 1;\n\t\t\t} catch (error) {\n\t\t\t\tconsole.warn(`[whatsapp] Failed to load messages for ${chatJid}:`, error);\n\t\t\t}\n\t\t}\n\n\t\tthis.asyncIteratorState.isInitialized = false;\n\t\treturn { messages: extractedMessages, hasMore: false };\n\t}\n\n\tasync getChatsByChunkHours(hours = 8): Promise<{ messages: ExtractedMessageInfo[]; hasMore: boolean }> {\n\t\treturn this.getChatsByChunk(this.timeBeforeHours(hours));\n\t}\n\n\tasync getChatsByTime(cutoffDate: number): Promise<ExtractedMessageInfo[]> {\n\t\tawait this.ensureReady();\n\t\tconst sock = this.sock;\n\t\tif (!sock) return [];\n\n\t\tif (this.chats.size === 0) {\n\t\t\tthis.hydrateChatsFromStore(sock);\n\t\t}\n\n\t\tconst extractedMessages: ExtractedMessageInfo[] = [];\n\t\tconst store = (sock as any).store;\n\t\tconst selfJid = jidToUser(sock.user?.id ?? \"\");\n\t\tconst chatIds = Array.from(this.chats.keys())\n\t\t\t.filter((j) => j !== \"status@broadcast\")\n\t\t\t.slice(0, maxDialogCount);\n\n\t\tlet emptyCount = 0;\n\n\t\tfor (const chatJid of chatIds) {\n\t\t\tif (emptyCount >= 10) break;\n\n\t\t\ttry {\n\t\t\t\tconst history = (await store?.loadMessages?.(chatJid, maxMessageCount, {})) ?? [];\n\n\t\t\t\tconst filteredMessages = (history as WAMessage[])\n\t\t\t\t\t.filter((m) => {\n\t\t\t\t\t\tconst msgTs = (m.messageTimestamp as number) ?? 0;\n\t\t\t\t\t\treturn msgTs >= cutoffDate;\n\t\t\t\t\t})\n\t\t\t\t\t.reverse();\n\n\t\t\t\tif (filteredMessages.length === 0) {\n\t\t\t\t\temptyCount++;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\temptyCount = 0;\n\n\t\t\t\tfor (const msg of filteredMessages) {\n\t\t\t\t\tconst senderJid = msg.key.participant ?? msg.key.remoteJid ?? \"\";\n\t\t\t\t\tif (jidToUser(senderJid) === selfJid) continue;\n\n\t\t\t\t\tconst info = this.extractMessageInfo(msg, chatJid);\n\t\t\t\t\tif (info) extractedMessages.push(info);\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tconsole.warn(`[whatsapp] Failed to load messages for ${chatJid}:`, error);\n\t\t\t}\n\t\t}\n\n\t\treturn extractedMessages;\n\t}\n\n\tasync getChatsByHours(hours = 1): Promise<ExtractedMessageInfo[]> {\n\t\treturn this.getChatsByTime(this.timeBeforeHours(hours));\n\t}\n\n\tasync getChatsByDays(days = 1): Promise<ExtractedMessageInfo[]> {\n\t\treturn this.getChatsByTime(this.timeBeforeHours(days * 24));\n\t}\n\n\tresetChunkIterator(): void {\n\t\tthis.asyncIteratorState.isInitialized = false;\n\t\tthis.asyncIteratorState.chatIds = [];\n\t\tthis.asyncIteratorState.currentChatIndex = 0;\n\t\tthis.asyncIteratorState.currentMessageIndex = 0;\n\t\tthis.asyncIteratorState.offsetDate = 0;\n\t}\n\n\tprivate extractMessageInfo(msg: WAMessage, chatJid: string): ExtractedMessageInfo | null {\n\t\ttry {\n\t\t\tconst messageText = this.getMessageText(msg);\n\t\t\tconst timestamp = (msg.messageTimestamp as number) ?? 0;\n\t\t\tconst isGroup = chatJid.endsWith(\"@g.us\");\n\t\t\tconst senderJid = msg.key.participant ?? msg.key.remoteJid ?? \"\";\n\t\t\tconst senderName = jidToUser(senderJid);\n\n\t\t\tlet chatName = jidToUser(chatJid);\n\t\t\tif (isGroup && senderJid) {\n\t\t\t\tchatName = senderName;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tid: msg.key.id ?? String(timestamp),\n\t\t\t\tchatType: isGroup ? \"group\" : \"private\",\n\t\t\t\tchatName,\n\t\t\t\tsender: senderName,\n\t\t\t\ttext: messageText,\n\t\t\t\ttimestamp,\n\t\t\t\tisOutgoing: msg.key.fromMe ?? false,\n\t\t\t};\n\t\t} catch (error) {\n\t\t\tconsole.warn(\"[whatsapp] Failed to extract message info:\", error);\n\t\t\treturn null;\n\t\t}\n\t}\n\n\tprivate getMessageText(msg: WAMessage): string {\n\t\tconst m = msg.message;\n\t\tif (!m) return \"\";\n\n\t\tif (m.conversation) return m.conversation;\n\t\tif (m.extendedTextMessage?.text) return m.extendedTextMessage.text;\n\t\tif (m.imageMessage?.caption) return m.imageMessage.caption;\n\t\tif (m.videoMessage?.caption) return m.videoMessage.caption;\n\t\tif (m.documentMessage?.title) return m.documentMessage.title;\n\n\t\treturn \"\";\n\t}\n\n\tprivate resolveChatId(target: MessageTarget, id: string): string {\n\t\tif (id.includes(\"@\")) return id;\n\t\treturn target === \"group\" ? `${id}@g.us` : `${id}@s.whatsapp.net`;\n\t}\n\n\tprivate async prepareMediaMessage(image: opencontextImage): Promise<{ image: Buffer }> {\n\t\tlet buffer: Buffer;\n\n\t\tif (image.base64) {\n\t\t\tbuffer = Buffer.from(image.base64, \"base64\");\n\t\t} else if (image.url) {\n\t\t\tconst response = await fetch(image.url);\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow Object.assign(new Error(`Failed to fetch ${image.url}: HTTP ${response.status}`), {\n\t\t\t\t\tstatus: response.status,\n\t\t\t\t});\n\t\t\t}\n\t\t\tconst arrayBuffer = await response.arrayBuffer();\n\t\t\tbuffer = Buffer.from(arrayBuffer);\n\t\t} else {\n\t\t\tthrow this.createAdapterError(\n\t\t\t\t\"prepareMediaMessage\",\n\t\t\t\t\"invalid_request_error\",\n\t\t\t\t\"WhatsApp image message requires url or base64\",\n\t\t\t);\n\t\t}\n\n\t\treturn { image: buffer };\n\t}\n\n\tprivate async prepareFileMessage(file: opencontextFile): Promise<{\n\t\tdocument: Buffer;\n\t\tmimetype: string;\n\t\tfileName: string;\n\t}> {\n\t\tconst response = await fetch(file.url);\n\t\tif (!response.ok) {\n\t\t\tthrow Object.assign(new Error(`Failed to fetch ${file.url}: HTTP ${response.status}`), {\n\t\t\t\tstatus: response.status,\n\t\t\t});\n\t\t}\n\t\tconst arrayBuffer = await response.arrayBuffer();\n\t\tconst buffer = Buffer.from(arrayBuffer);\n\t\tconst mimetype = this.guessMimeType(file.name);\n\t\treturn {\n\t\t\tdocument: buffer,\n\t\t\tmimetype,\n\t\t\tfileName: file.name,\n\t\t};\n\t}\n\n\tprivate guessMimeType(fileName: string): string {\n\t\tconst ext = fileName.split(\".\").pop()?.toLowerCase();\n\t\tconst mimeTypes: Record<string, string> = {\n\t\t\tpdf: \"application/pdf\",\n\t\t\tdoc: \"application/msword\",\n\t\t\tdocx: \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\",\n\t\t\txls: \"application/vnd.ms-excel\",\n\t\t\txlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\n\t\t\tppt: \"application/vnd.ms-powerpoint\",\n\t\t\tpptx: \"application/vnd.openxmlformats-officedocument.presentationml.presentation\",\n\t\t\ttxt: \"text/plain\",\n\t\t\tcsv: \"text/csv\",\n\t\t\tzip: \"application/zip\",\n\t\t\tmp3: \"audio/mpeg\",\n\t\t\twav: \"audio/wav\",\n\t\t\tmp4: \"video/mp4\",\n\t\t\tmov: \"video/quicktime\",\n\t\t\tavi: \"video/x-msvideo\",\n\t\t\tjpg: \"image/jpeg\",\n\t\t\tjpeg: \"image/jpeg\",\n\t\t\tpng: \"image/png\",\n\t\t\tgif: \"image/gif\",\n\t\t\twebp: \"image/webp\",\n\t\t\tsvg: \"image/svg+xml\",\n\t\t};\n\t\treturn mimeTypes[ext ?? \"\"] ?? \"application/octet-stream\";\n\t}\n\n\tasync authStateExists(): Promise<boolean> {\n\t\t// Check via the auth state provider's underlying storage\n\t\t// This is a simplified check - actual implementation may vary by provider\n\t\tif (!this.authState) return false;\n\t\tconst creds = (this.authState as any).creds;\n\t\treturn !!creds && !!creds.me;\n\t}\n\n\t/**\n\t * @deprecated Use authStateExists instead\n\t */\n\tasync sessionExists(): Promise<boolean> {\n\t\treturn this.authStateExists();\n\t}\n\n\tasync forceSaveSession(): Promise<void> {\n\t\tawait this.saveAuthState();\n\t\tif (DEBUG) console.log(`[whatsapp] Session saved for ${this.sessionId}`);\n\t}\n\n\t/** Save session to disk. Call after QR login completes. */\n\tsaveSession(): Promise<void> {\n\t\treturn this.forceSaveSession();\n\t}\n\n\tasync checkSessionStatus(): Promise<{\n\t\texists: boolean;\n\t\tready: boolean;\n\t\tauthenticated: boolean;\n\t}> {\n\t\tconst exists = await this.authStateExists();\n\t\treturn {\n\t\t\texists,\n\t\t\tready: this.isReady,\n\t\t\tauthenticated: this.isAuthenticated,\n\t\t};\n\t}\n\n\tasync restoreSession(): Promise<boolean> {\n\t\ttry {\n\t\t\tconst exists = await this.authStateExists();\n\t\t\tif (!exists) {\n\t\t\t\tif (DEBUG) console.log(`[whatsapp] No session found for ${this.sessionId}`);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (DEBUG) console.log(`[whatsapp] Restoring session for ${this.sessionId}`);\n\t\t\tawait this.ensureReady();\n\t\t\treturn this.isReady;\n\t\t} catch (error) {\n\t\t\tif (DEBUG) console.error(`[whatsapp] Failed to restore session for ${this.sessionId}:`, error);\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tasync ingestMessageAttachments(msg: WAMessage): Promise<any[]> {\n\t\tif (!this.ownerUserId || !this.ownerUserType || !this.fileIngester) return [];\n\n\t\tconst m = msg.message;\n\t\tif (!m) return [];\n\n\t\t// Delegate message type determination to state.ts pure function\n\t\tconst msgType = routeMessageType(msg);\n\n\t\t// Find media message using standardized message type\n\t\tlet mimeType: string | undefined;\n\t\tlet isMedia = false;\n\n\t\tswitch (msgType) {\n\t\t\tcase \"image\":\n\t\t\t\tmimeType = m.imageMessage?.mimetype ?? undefined;\n\t\t\t\tisMedia = true;\n\t\t\t\tbreak;\n\t\t\tcase \"video\":\n\t\t\t\tmimeType = m.videoMessage?.mimetype ?? undefined;\n\t\t\t\tisMedia = true;\n\t\t\t\tbreak;\n\t\t\tcase \"sticker\":\n\t\t\t\tmimeType = m.stickerMessage?.mimetype ?? undefined;\n\t\t\t\tisMedia = true;\n\t\t\t\tbreak;\n\t\t\tcase \"document\":\n\t\t\t\tmimeType = m.documentMessage?.mimetype ?? undefined;\n\t\t\t\tisMedia = true;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\t// Non-media types (text, audio, other) - no attachment\n\t\t\t\tisMedia = false;\n\t\t}\n\n\t\tif (!isMedia || !mimeType || !this.sock) return [];\n\n\t\ttry {\n\t\t\tconst buffer = await downloadMediaMessage(msg, \"buffer\", {});\n\n\t\t\tconst fileName = `attachment.${mimeType.split(\"/\")[1] ?? \"bin\"}`;\n\n\t\t\tconst ingested = await this.fileIngester.ingestForUser({\n\t\t\t\tsource: \"whatsapp\",\n\t\t\t\townerUserId: this.ownerUserId,\n\t\t\t\townerLocalUserType: this.ownerUserType as any,\n\t\t\t\tmaxSizeBytes: WHATSAPP_MAX_ATTACHMENT_BYTES,\n\t\t\t\toriginalFileName: fileName,\n\t\t\t\tmimeTypeHint: mimeType,\n\t\t\t\tsizeHintBytes: buffer.length,\n\t\t\t\tdownloadAttachment: async () => {\n\t\t\t\t\t// Convert Node.js Buffer to ArrayBuffer for the interface\n\t\t\t\t\tconst arrayBuffer = buffer.buffer.slice(\n\t\t\t\t\t\tbuffer.byteOffset,\n\t\t\t\t\t\tbuffer.byteOffset + buffer.byteLength,\n\t\t\t\t\t) as ArrayBuffer;\n\t\t\t\t\treturn {\n\t\t\t\t\t\tdata: arrayBuffer,\n\t\t\t\t\t\tcontentType: mimeType ?? \"application/octet-stream\",\n\t\t\t\t\t\tsizeBytes: buffer.length,\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t\tlogContext: this.botId ? `[whatsapp ${this.botId}]` : \"[whatsapp]\",\n\t\t\t});\n\n\t\t\treturn ingested ? [ingested] : [];\n\t\t} catch (error) {\n\t\t\tconsole.error(\n\t\t\t\t`[whatsapp${this.botId ? ` ${this.botId}` : \"\"}] Failed to ingest attachment ${msg.key.id}`,\n\t\t\t\terror,\n\t\t\t);\n\t\t\treturn [];\n\t\t}\n\t}\n\n\tgetSocket(): WASocket | null {\n\t\treturn this.sock;\n\t}\n}\n\nfunction jidToUser(jid: string): string {\n\treturn jid.split(\"@\")[0];\n}\n","export const DEBUG_WHATSAPP = process.env.DEBUG_WHATSAPP === \"true\";\n","/**\n * WhatsApp Message History Store\n *\n * File-backed replacement for the minimal in-memory Baileys store (Baileys v7\n * removed makeInMemoryStore). Full WAMessage objects stay in memory for\n * real-time consumers; a sanitized copy (binary payloads dropped, Long\n * timestamps normalized to numbers) is persisted per chat so message history\n * and the chat list survive process restarts. Persisted messages also provide\n * the anchor (oldest message key + timestamp) required by Baileys'\n * sock.fetchMessageHistory on-demand backfill API.\n *\n * Layout:\n * <baseDir>/<accountId>/chats.json\n * <baseDir>/<accountId>/messages/<base64url(jid)>.json\n *\n * ARCHITECTURE EXCEPTION (per repo rule: exceptions must be explicit).\n * Data is stored as plain JSON, unencrypted.\n * - Why: matches the Baileys auth state in local/Tauri mode, which already\n * sits unencrypted in the same data dir and grants full account access.\n * - Impact scope: in cloud deployments the auth state lives in Redis, so this\n * directory is an additional at-rest exposure of message content on the\n * server filesystem.\n * - Temporary: yes — the follow-up is to encrypt at rest in cloud mode using\n * packages/security (key management decision pending), or scope this store\n * to local/Tauri mode only.\n * - Mitigation today: per-chat cap (500 msgs), binary payloads stripped, and\n * mandatory lifecycle cleanup — callers must invoke\n * WhatsAppMessageHistoryStore.purgeAccountData() when the integration\n * account is disconnected so no message content outlives the account\n * (purge also destroys live in-process instances; see tests in\n * message-history-store.test.ts).\n * - Known gaps for the encryption follow-up: whole-user account deletion\n * paths that bypass integration disconnect do not purge; in multi-instance\n * cloud deployments purge only clears the current instance's filesystem.\n *\n * Limitation: sanitization strips media keys/thumbnails, so messages\n * hydrated from disk cannot be passed to downloadMediaMessage — only text\n * extraction and backfill anchoring work on persisted history.\n */\n\nimport { existsSync, mkdirSync, readFileSync, readdirSync, renameSync, rmSync, writeFileSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { proto } from \"@whiskeysockets/baileys\";\nimport type { WAMessage, WASocket } from \"@whiskeysockets/baileys\";\n\n/**\n * Per-chat storage cap. Readers (getChatsByChunk) must use the same value:\n * the backfill anchor is the oldest STORED message, so a smaller read window\n * would silently hide stored in-window messages and waste backfill budget.\n */\nexport const MAX_PERSISTED_MESSAGES_PER_CHAT = 500;\nconst MAX_MESSAGES_PER_JID = MAX_PERSISTED_MESSAGES_PER_CHAT;\nconst FLUSH_DEBOUNCE_MS = 2000;\n// Per timer pass; bounds the synchronous write burst after a full history sync.\nconst FLUSH_MAX_FILES_PER_PASS = 50;\n// Stop retrying flushes after this many consecutive failures (disk full,\n// permission errors) instead of rescheduling and warning every 2s forever.\nconst MAX_CONSECUTIVE_FLUSH_FAILURES = 5;\n\nexport type PersistedChatInfo = {\n\tid: string;\n\tname?: string;\n};\n\nfunction defaultBaseDir(): string {\n\treturn join(homedir(), \".opencontext\", \"data\", \"whatsapp-history\");\n}\n\nfunction sanitizeForFilename(value: string): string {\n\treturn value.replace(/[^a-zA-Z0-9_-]/g, \"_\");\n}\n\nfunction jidToFilename(jid: string): string {\n\treturn `${Buffer.from(jid, \"utf8\").toString(\"base64url\")}.json`;\n}\n\nfunction filenameToJid(filename: string): string | null {\n\tif (!filename.endsWith(\".json\")) return null;\n\ttry {\n\t\treturn Buffer.from(filename.slice(0, -5), \"base64url\").toString(\"utf8\");\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nfunction isLongLike(value: object): value is { low: number; high: number; unsigned: boolean } {\n\tconst v = value as { low?: unknown; high?: unknown; unsigned?: unknown };\n\treturn typeof v.low === \"number\" && typeof v.high === \"number\" && typeof v.unsigned === \"boolean\";\n}\n\nfunction longToNumber(value: {\n\tlow: number;\n\thigh: number;\n\ttoNumber?: () => number;\n}): number {\n\tif (typeof value.toNumber === \"function\") return value.toNumber();\n\treturn value.high * 4294967296 + (value.low >>> 0);\n}\n\n/**\n * Make a WAMessage JSON-safe: drop binary payloads (media keys, thumbnails)\n * and convert protobuf Long values to plain numbers. Text content and message\n * keys — everything insights extraction and backfill anchors need — survive.\n */\nexport function sanitizeMessageForPersistence(value: unknown): unknown {\n\tif (value === null || value === undefined) return value;\n\tif (typeof value !== \"object\") return value;\n\tif (value instanceof Uint8Array) return undefined;\n\tif (isLongLike(value)) return longToNumber(value);\n\tif (Array.isArray(value)) {\n\t\t// Filter dropped (binary) elements out instead of leaving undefined,\n\t\t// which JSON.stringify would turn into null holes inside arrays.\n\t\treturn value.map(sanitizeMessageForPersistence).filter((entry) => entry !== undefined);\n\t}\n\tconst out: Record<string, unknown> = {};\n\tfor (const [key, entry] of Object.entries(value)) {\n\t\tconst sanitized = sanitizeMessageForPersistence(entry);\n\t\tif (sanitized !== undefined) out[key] = sanitized;\n\t}\n\treturn out;\n}\n\n/**\n * Live instances per account dir — lets purge destroy in-process stores.\n * Holds STRONG references: any code path that creates a store and abandons\n * it without calling destroy() leaks the instance (and its message cache)\n * until the account is purged. Today every creation site either reuses a\n * single instance (adapter) or destroys the old one on adoption (listener).\n */\nconst liveStores = new Map<string, Set<WhatsAppMessageHistoryStore>>();\n\nclass WhatsAppMessageHistoryStore {\n\tprivate readonly accountDir: string;\n\tprivate readonly messagesDir: string;\n\tprivate messages: Map<string, WAMessage[]> = new Map();\n\t/** Per-chat id sets mirroring `messages`, for O(1) dedup on insert. */\n\tprivate messageIds: Map<string, Set<string>> = new Map();\n\tprivate hydratedJids = new Set<string>();\n\tprivate chats: Map<string, PersistedChatInfo> = new Map();\n\tprivate chatsHydrated = false;\n\tprivate dirtyJids = new Set<string>();\n\tprivate chatsDirty = false;\n\tprivate flushTimer: ReturnType<typeof setTimeout> | null = null;\n\tprivate consecutiveFlushFailures = 0;\n\tprivate closed = false;\n\tprivate readonly persistEnabled: boolean;\n\t/** ON_DEMAND history responses seen — backfill's \"phone answered\" signal. */\n\tprivate onDemandResponses = 0;\n\n\t/**\n\t * Delete all persisted history for an account. Must be called when the\n\t * integration account is disconnected/removed so message content does not\n\t * outlive the account on disk. Live store instances for the account are\n\t * destroyed first — otherwise their pending debounced flushes (or messages\n\t * still arriving on an undisposed socket) would resurrect the files.\n\t */\n\tstatic purgeAccountData(accountId: string, baseDir?: string): void {\n\t\tconst dir = join(baseDir ?? defaultBaseDir(), sanitizeForFilename(accountId));\n\t\tfor (const store of liveStores.get(dir) ?? []) {\n\t\t\tstore.destroy();\n\t\t}\n\t\ttry {\n\t\t\trmSync(dir, { recursive: true, force: true });\n\t\t} catch (error) {\n\t\t\tconsole.warn(`[WhatsAppMessageHistoryStore] Failed to purge ${dir}:`, error);\n\t\t}\n\t}\n\n\tconstructor(opts: {\n\t\taccountId: string;\n\t\tbaseDir?: string;\n\t\tpersist?: boolean;\n\t}) {\n\t\tconst base = opts.baseDir ?? defaultBaseDir();\n\t\tthis.accountDir = join(base, sanitizeForFilename(opts.accountId));\n\t\tthis.messagesDir = join(this.accountDir, \"messages\");\n\t\t// persist=false keeps the store memory-only: used when the account key\n\t\t// is a random per-instance id — files under such a key could never be\n\t\t// found again nor purged, leaving orphaned plain-text message dirs.\n\t\tthis.persistEnabled = opts.persist ?? true;\n\t\tconst registered = liveStores.get(this.accountDir) ?? new Set();\n\t\tregistered.add(this);\n\t\tliveStores.set(this.accountDir, registered);\n\t}\n\n\t/**\n\t * Permanently disable this store: stop pending flushes, drop in-memory\n\t * data, and turn all writes into no-ops. Called by purgeAccountData so a\n\t * disconnected account's messages cannot be re-persisted.\n\t */\n\t/** True once destroy() has run — writes are no-ops; do not attach/reuse. */\n\tget isClosed(): boolean {\n\t\treturn this.closed;\n\t}\n\n\tdestroy(): void {\n\t\tthis.closed = true;\n\t\tif (this.flushTimer) {\n\t\t\tclearTimeout(this.flushTimer);\n\t\t\tthis.flushTimer = null;\n\t\t}\n\t\tthis.dirtyJids.clear();\n\t\tthis.chatsDirty = false;\n\t\tthis.messages.clear();\n\t\tthis.messageIds.clear();\n\t\tthis.chats.clear();\n\t\tliveStores.get(this.accountDir)?.delete(this);\n\t}\n\n\t/**\n\t * Attach event listeners to a WASocket to populate the store. History\n\t * arrives via phone-pushed messaging-history.set (initial pairing and\n\t * ON_DEMAND backfill responses); real-time messages via messages.upsert.\n\t */\n\tattach(sock: WASocket): void {\n\t\tsock.ev.on(\"messages.upsert\", ({ messages }) => {\n\t\t\tthis.addMessages(messages);\n\t\t});\n\t\tsock.ev.on(\n\t\t\t\"messaging-history.set\",\n\t\t\t(data: {\n\t\t\t\tchats?: Array<{ id?: string | null; name?: string | null }>;\n\t\t\t\tmessages?: WAMessage[];\n\t\t\t\tsyncType?: number | null;\n\t\t\t}) => {\n\t\t\t\t// Counting lives here (not on the socket): the store is the one\n\t\t\t\t// component that gets re-attached whenever socket listeners are\n\t\t\t\t// stripped (see self-listener stop()), so the signal survives.\n\t\t\t\tif (data.syncType === proto.HistorySync.HistorySyncType.ON_DEMAND) {\n\t\t\t\t\tthis.onDemandResponses++;\n\t\t\t\t}\n\t\t\t\tif (data.chats?.length) this.addChats(data.chats);\n\t\t\t\tif (data.messages?.length) this.addMessages(data.messages);\n\t\t\t},\n\t\t);\n\t\tsock.ev.on(\"chats.upsert\", (chats: Array<{ id?: string | null; name?: string | null }>) => {\n\t\t\tthis.addChats(chats);\n\t\t});\n\t}\n\n\taddMessages(msgs: WAMessage[]): void {\n\t\tif (this.closed) return;\n\t\tconst touched = new Set<string>();\n\t\tfor (const msg of msgs) {\n\t\t\tconst jid = msg.key.remoteJid;\n\t\t\tif (!jid) continue;\n\t\t\tthis.hydrate(jid);\n\t\t\tconst ids = this.messageIds.get(jid) ?? new Set();\n\t\t\tconst msgId = msg.key.id ?? \"\";\n\t\t\tif (msgId && ids.has(msgId)) continue;\n\t\t\tconst existing = this.messages.get(jid) ?? [];\n\t\t\texisting.push(msg);\n\t\t\tif (msgId) ids.add(msgId);\n\t\t\tthis.messages.set(jid, existing);\n\t\t\tthis.messageIds.set(jid, ids);\n\t\t\ttouched.add(jid);\n\t\t}\n\t\tfor (const jid of touched) {\n\t\t\tconst list = this.messages.get(jid);\n\t\t\tif (!list) continue;\n\t\t\tlist.sort((a, b) => Number(a.messageTimestamp ?? 0) - Number(b.messageTimestamp ?? 0));\n\t\t\tif (list.length > MAX_MESSAGES_PER_JID) {\n\t\t\t\tconst trimmed = list.splice(0, list.length - MAX_MESSAGES_PER_JID);\n\t\t\t\tconst ids = this.messageIds.get(jid);\n\t\t\t\tfor (const msg of trimmed) {\n\t\t\t\t\tif (msg.key.id) ids?.delete(msg.key.id);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.dirtyJids.add(jid);\n\t\t}\n\t\tif (touched.size) this.scheduleFlush();\n\t}\n\n\taddChats(chats: Array<{ id?: string | null; name?: string | null }>): void {\n\t\tif (this.closed) return;\n\t\tthis.hydrateChats();\n\t\tlet changed = false;\n\t\tfor (const chat of chats) {\n\t\t\tif (!chat.id || chat.id === \"status@broadcast\") continue;\n\t\t\tconst name =\n\t\t\t\tchat.name ?? (chat as { subject?: string | null }).subject ?? this.chats.get(chat.id)?.name;\n\t\t\tconst existing = this.chats.get(chat.id);\n\t\t\tif (existing && existing.name === (name ?? existing.name)) continue;\n\t\t\tthis.chats.set(chat.id, { id: chat.id, name: name ?? undefined });\n\t\t\tchanged = true;\n\t\t}\n\t\tif (changed) {\n\t\t\tthis.chatsDirty = true;\n\t\t\tthis.scheduleFlush();\n\t\t}\n\t}\n\n\t/** Same interface as the old in-memory store (used by Baileys consumers). */\n\tasync loadMessages(jid: string, count: number, _opts: object): Promise<WAMessage[]> {\n\t\tthis.hydrate(jid);\n\t\tconst msgs = this.messages.get(jid) ?? [];\n\t\treturn msgs.slice(-count);\n\t}\n\n\t/** Chronologically oldest stored message — the fetchMessageHistory anchor. */\n\tgetOldestMessage(jid: string): WAMessage | undefined {\n\t\tthis.hydrate(jid);\n\t\treturn this.messages.get(jid)?.[0];\n\t}\n\n\t/**\n\t * Number of ON_DEMAND history sync responses received since this store\n\t * instance was created. Used by backfill to distinguish \"phone answered\n\t * with nothing older\" (end of history) from \"phone never answered\".\n\t */\n\tgetOnDemandResponseCount(): number {\n\t\treturn this.onDemandResponses;\n\t}\n\n\t/**\n\t * False once the per-chat cap is reached: addMessages trims the oldest\n\t * entries, so backfilled history would be discarded immediately and the\n\t * oldest anchor would never move — requesting more is pointless.\n\t */\n\tcanStoreOlderMessages(jid: string): boolean {\n\t\tthis.hydrate(jid);\n\t\treturn (this.messages.get(jid)?.length ?? 0) < MAX_MESSAGES_PER_JID;\n\t}\n\n\t/** Persisted chat list, used to rebuild adapter state after a restart. */\n\tloadChats(): PersistedChatInfo[] {\n\t\tthis.hydrateChats();\n\t\treturn Array.from(this.chats.values());\n\t}\n\n\t/** Write all pending changes to disk immediately. */\n\tflush(): void {\n\t\tif (this.flushTimer) {\n\t\t\tclearTimeout(this.flushTimer);\n\t\t\tthis.flushTimer = null;\n\t\t}\n\t\tif (!this.persistEnabled) return;\n\t\tthis.writePending(Number.POSITIVE_INFINITY);\n\t}\n\n\t/**\n\t * Write up to maxFiles dirty chats. The initial full history sync can dirty\n\t * hundreds of chats at once; writing them all synchronously in one tick\n\t * would stall the event loop right in the middle of onboarding, so the\n\t * debounced timer writes in batches and reschedules for the remainder.\n\t * Explicit flush() still drains everything (teardown must not lose data).\n\t */\n\tprivate writePending(maxFiles: number): void {\n\t\ttry {\n\t\t\tif (this.chatsDirty || this.dirtyJids.size) {\n\t\t\t\t// Owner-only permissions: plain-text message content must not be\n\t\t\t\t// readable by other users on a shared host.\n\t\t\t\tmkdirSync(this.messagesDir, { recursive: true, mode: 0o700 });\n\t\t\t}\n\t\t\tif (this.chatsDirty) {\n\t\t\t\tthis.writeFileAtomic(\n\t\t\t\t\tjoin(this.accountDir, \"chats.json\"),\n\t\t\t\t\tJSON.stringify(Array.from(this.chats.values())),\n\t\t\t\t);\n\t\t\t\tthis.chatsDirty = false;\n\t\t\t}\n\t\t\tlet written = 0;\n\t\t\tfor (const jid of this.dirtyJids) {\n\t\t\t\tif (written >= maxFiles) break;\n\t\t\t\tconst sanitized = (this.messages.get(jid) ?? []).map((m) => sanitizeMessageForPersistence(m));\n\t\t\t\tthis.writeFileAtomic(join(this.messagesDir, jidToFilename(jid)), JSON.stringify(sanitized));\n\t\t\t\tthis.dirtyJids.delete(jid);\n\t\t\t\twritten++;\n\t\t\t}\n\t\t\tthis.consecutiveFlushFailures = 0;\n\t\t} catch (error) {\n\t\t\tthis.consecutiveFlushFailures++;\n\t\t\tconsole.warn(\"[WhatsAppMessageHistoryStore] Failed to flush:\", error);\n\t\t\tif (this.consecutiveFlushFailures >= MAX_CONSECUTIVE_FLUSH_FAILURES) {\n\t\t\t\t// Persistent disk problem (full disk, permissions) — stop retrying\n\t\t\t\t// every 2s forever. In-memory data stays available; persistence for\n\t\t\t\t// the pending set is abandoned.\n\t\t\t\tconsole.warn(\n\t\t\t\t\t`[WhatsAppMessageHistoryStore] Giving up on flushing ${this.dirtyJids.size} chat(s) after ${this.consecutiveFlushFailures} consecutive failures`,\n\t\t\t\t);\n\t\t\t\tthis.dirtyJids.clear();\n\t\t\t\tthis.chatsDirty = false;\n\t\t\t\t// Reset so a future batch gets the full failure tolerance again\n\t\t\t\t// (a single transient error must not instantly drop new data).\n\t\t\t\tthis.consecutiveFlushFailures = 0;\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tif (this.dirtyJids.size || this.chatsDirty) {\n\t\t\tthis.scheduleFlush();\n\t\t}\n\t}\n\n\t/**\n\t * Write via temp file + rename so a crash can't leave truncated JSON.\n\t * The pid suffix keeps multi-worker processes from racing on the same\n\t * temp path (each still last-write-wins on the final file).\n\t */\n\tprivate writeFileAtomic(filePath: string, content: string): void {\n\t\tconst tmpPath = `${filePath}.${process.pid}.tmp`;\n\t\twriteFileSync(tmpPath, content, { encoding: \"utf8\", mode: 0o600 });\n\t\trenameSync(tmpPath, filePath);\n\t}\n\n\tprivate scheduleFlush(): void {\n\t\tif (this.closed || !this.persistEnabled) return;\n\t\tif (this.flushTimer) return;\n\t\tthis.flushTimer = setTimeout(() => {\n\t\t\tthis.flushTimer = null;\n\t\t\tthis.writePending(FLUSH_MAX_FILES_PER_PASS);\n\t\t}, FLUSH_DEBOUNCE_MS);\n\t\tthis.flushTimer.unref?.();\n\t}\n\n\tprivate hydrate(jid: string): void {\n\t\tif (!this.persistEnabled) return;\n\t\tif (this.hydratedJids.has(jid)) return;\n\t\t// Marked before the read on purpose: a failing file should not be\n\t\t// re-read (and re-logged) on every loadMessages call; the chat simply\n\t\t// starts from live data until it gets rewritten by the next flush.\n\t\tthis.hydratedJids.add(jid);\n\t\ttry {\n\t\t\tconst file = join(this.messagesDir, jidToFilename(jid));\n\t\t\tif (!existsSync(file)) return;\n\t\t\tconst persisted = JSON.parse(readFileSync(file, \"utf8\")) as WAMessage[];\n\t\t\tif (!Array.isArray(persisted) || persisted.length === 0) return;\n\t\t\tconst existing = this.messages.get(jid) ?? [];\n\t\t\tconst ids = this.messageIds.get(jid) ?? new Set<string>();\n\t\t\tfor (const msg of existing) {\n\t\t\t\tif (msg.key.id) ids.add(msg.key.id);\n\t\t\t}\n\t\t\tfor (const msg of persisted) {\n\t\t\t\tif (!msg?.key?.id || ids.has(msg.key.id)) continue;\n\t\t\t\texisting.push(msg);\n\t\t\t\tids.add(msg.key.id);\n\t\t\t}\n\t\t\texisting.sort((a, b) => Number(a.messageTimestamp ?? 0) - Number(b.messageTimestamp ?? 0));\n\t\t\tif (existing.length > MAX_MESSAGES_PER_JID) {\n\t\t\t\tconst trimmed = existing.splice(0, existing.length - MAX_MESSAGES_PER_JID);\n\t\t\t\tfor (const msg of trimmed) {\n\t\t\t\t\tif (msg.key.id) ids.delete(msg.key.id);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.messages.set(jid, existing);\n\t\t\tthis.messageIds.set(jid, ids);\n\t\t} catch (error) {\n\t\t\tconsole.warn(`[WhatsAppMessageHistoryStore] Failed to hydrate ${jid}:`, error);\n\t\t}\n\t}\n\n\tprivate hydrateChats(): void {\n\t\tif (!this.persistEnabled) return;\n\t\tif (this.chatsHydrated) return;\n\t\tthis.chatsHydrated = true;\n\t\ttry {\n\t\t\tconst file = join(this.accountDir, \"chats.json\");\n\t\t\tif (existsSync(file)) {\n\t\t\t\tconst persisted = JSON.parse(readFileSync(file, \"utf8\")) as PersistedChatInfo[];\n\t\t\t\tif (Array.isArray(persisted)) {\n\t\t\t\t\tfor (const chat of persisted) {\n\t\t\t\t\t\tif (chat?.id && !this.chats.has(chat.id)) {\n\t\t\t\t\t\t\tthis.chats.set(chat.id, chat);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Fallback: derive the chat list from persisted message files when\n\t\t\t// chats.json is missing (e.g. written by an older version).\n\t\t\tif (existsSync(this.messagesDir)) {\n\t\t\t\tfor (const filename of readdirSync(this.messagesDir)) {\n\t\t\t\t\tconst jid = filenameToJid(filename);\n\t\t\t\t\tif (jid && !this.chats.has(jid)) {\n\t\t\t\t\t\tthis.chats.set(jid, { id: jid });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconsole.warn(\"[WhatsAppMessageHistoryStore] Failed to hydrate chats:\", error);\n\t\t}\n\t}\n}\n\nexport { WhatsAppMessageHistoryStore };\n","import type { ExtractedMessageInfo } from \"@melandlabs/integrations-channels/sources/types\";\nexport type { ExtractedMessageInfo };\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\n/**\n * Standardized WhatsApp connection states used by the adapter.\n */\nexport type ConnectionState = \"connected\" | \"connecting\" | \"disconnected\";\n\n/**\n * Standardized message types for routing purposes.\n */\nexport type MessageType = \"text\" | \"image\" | \"video\" | \"audio\" | \"document\" | \"sticker\" | \"other\";\n\n/**\n * Result of QR code state parsing.\n */\nexport type QrCodeState = {\n\tisValid: boolean;\n\tcodeIndex: number;\n};\n\n// ---------------------------------------------------------------------------\n// F1: parseQrCodeState\n// ---------------------------------------------------------------------------\n\n/**\n * Parses a QR code string from Baileys into validation state and code index.\n *\n * QR strings from Baileys are comma-separated Base64 encoded data.\n * The last segment contains the code index (0-3).\n *\n * @param qrString - Raw QR code string from Baileys onQR callback\n * @returns QrCodeState with validation and index\n *\n * @example\n * parseQrCodeState(\"xxx,yyy,zzz,0\") // { isValid: true, codeIndex: 0 }\n * parseQrCodeState(\"xxx,yyy,zzz,5\") // { isValid: false, codeIndex: 5 }\n */\nexport function parseQrCodeState(qrString: string): QrCodeState {\n\tif (!qrString || typeof qrString !== \"string\") {\n\t\treturn { isValid: false, codeIndex: -1 };\n\t}\n\n\tconst parts = qrString.split(\",\");\n\tif (parts.length < 4) {\n\t\treturn { isValid: false, codeIndex: -1 };\n\t}\n\n\tconst codeIndexStr = parts[parts.length - 1];\n\tconst codeIndex = Number.parseInt(codeIndexStr, 10);\n\n\tif (Number.isNaN(codeIndex)) {\n\t\treturn { isValid: false, codeIndex: -1 };\n\t}\n\n\tconst isValid = codeIndex >= 0 && codeIndex <= 3;\n\treturn { isValid, codeIndex };\n}\n\n// ---------------------------------------------------------------------------\n// F2: isOwnMessage\n// ---------------------------------------------------------------------------\n\n/**\n * Determines whether a message was sent by the bot itself.\n *\n * @param message - Extracted message info\n * @param selfJid - The bot's own JID (user part only)\n * @returns true if the message sender matches the bot's JID\n *\n * @example\n * isOwnMessage({ sender: \"alice\" }, \"alice\") // true\n * isOwnMessage({ sender: \"bob\" }, \"alice\") // false\n * isOwnMessage({ sender: \"bob\" }, undefined) // false\n */\nexport function isOwnMessage(\n\tmessage: ExtractedMessageInfo | null | undefined,\n\tselfJid: string | undefined,\n): boolean {\n\tif (!message || !selfJid) {\n\t\treturn false;\n\t}\n\n\treturn message.sender === selfJid || message.isOutgoing === true;\n}\n\n// ---------------------------------------------------------------------------\n// F3: routeMessageType\n// ---------------------------------------------------------------------------\n\n/**\n * Routes a Baileys WAMessage to a standardized message type.\n *\n * This function provides a single point for message type classification,\n * enabling testable routing logic without Baileys Socket dependencies.\n *\n * @param msg - Raw Baileys message object (expecting { message: {...} })\n * @returns MessageType enum value\n *\n * @example\n * routeMessageType({ message: { conversation: \"hello\" } }) // \"text\"\n * routeMessageType({ message: { imageMessage: {} } }) // \"image\"\n */\nexport function routeMessageType(msg: unknown): MessageType {\n\tif (!msg || typeof msg !== \"object\") {\n\t\treturn \"other\";\n\t}\n\n\tconst m = msg as Record<string, unknown>;\n\tconst message = m.message as Record<string, unknown> | undefined;\n\n\tif (!message) {\n\t\treturn \"other\";\n\t}\n\n\t// Text types\n\tif (message.conversation) return \"text\";\n\tif ((message.extendedTextMessage as Record<string, unknown>)?.text) return \"text\";\n\n\t// Media types - check presence, not content\n\tif (message.imageMessage) return \"image\";\n\tif (message.videoMessage) return \"video\";\n\tif (message.audioMessage) return \"audio\";\n\tif (message.documentMessage) return \"document\";\n\tif (message.stickerMessage) return \"sticker\";\n\n\treturn \"other\";\n}\n\n// ---------------------------------------------------------------------------\n// F4: resolveBaileysConnectionState\n// ---------------------------------------------------------------------------\n\n/**\n * Maps Baileys connection state strings to adapter's standardized states.\n *\n * @param state - Raw connection state from Baileys Socket\n * @returns Standardized connection state\n *\n * @example\n * resolveBaileysConnectionState(\"open\") // \"connected\"\n * resolveBaileysConnectionState(\"connecting\") // \"connecting\"\n * resolveBaileysConnectionState(\"close\") // \"disconnected\"\n * resolveBaileysConnectionState(null) // \"disconnected\"\n */\nexport function resolveBaileysConnectionState(\n\tstate: \"open\" | \"connecting\" | \"close\" | null | undefined,\n): ConnectionState {\n\tswitch (state) {\n\t\tcase \"open\":\n\t\t\treturn \"connected\";\n\t\tcase \"connecting\":\n\t\t\treturn \"connecting\";\n\t\tcase \"close\":\n\t\tcase null:\n\t\tcase undefined:\n\t\t\treturn \"disconnected\";\n\t\tdefault:\n\t\t\treturn \"disconnected\";\n\t}\n}\n","/**\n * WhatsApp Self-Message Conversation Store\n *\n * File-backed per-day in-memory store for conversation history with AI.\n * Data persists to ~/.opencontext/memory/whatsapp/YYYY-MM-DD.json\n *\n * Token trimming is handled by handleAgentRuntime (40K budget) — not here.\n */\n\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\nimport {\n\tclearAllChannelForUser,\n\tclearChannelConversationFromAllDays,\n\tloadChannelDay,\n\tsaveChannelMessage,\n} from \"@melandlabs/ai/store\";\n\nfunction getAppMemoryDir(userId?: string): string {\n\tconst base = join(homedir(), \".opencontext\", \"data\", \"memory\");\n\treturn userId ? join(base, userId) : base;\n}\n\ninterface ConversationMessage {\n\trole: \"user\" | \"assistant\";\n\tcontent: string;\n\ttimestamp: number;\n}\n\nclass WhatsAppConversationStore {\n\tprivate cache: Map<string, Map<string, ConversationMessage[]>> = new Map();\n\tprivate loadedPairs = new Set<string>();\n\tprivate readonly PREFIX = \"whatsapp\";\n\tprivate readonly memoryDir: string;\n\n\tconstructor(userId: string, memoryDir?: string) {\n\t\tthis.memoryDir = memoryDir ?? getAppMemoryDir(userId);\n\t}\n\n\tprivate pairKey(userKey: string, accountId: string): string {\n\t\treturn `${userKey}::${accountId}`;\n\t}\n\n\tprivate ensureLoaded(userKey: string, accountId: string): void {\n\t\tconst pk = this.pairKey(userKey, accountId);\n\t\tif (this.loadedPairs.has(pk)) return;\n\n\t\tif (!this.cache.has(userKey)) {\n\t\t\tthis.cache.set(userKey, new Map());\n\t\t}\n\n\t\tconst today = new Date().toISOString().slice(0, 10);\n\t\tconst msgs = loadChannelDay(\n\t\t\tthis.memoryDir,\n\t\t\tthis.PREFIX,\n\t\t\ttoday,\n\t\t\tuserKey,\n\t\t\taccountId,\n\t\t) as ConversationMessage[];\n\t\tthis.cache.get(userKey)?.set(accountId, msgs);\n\t\tthis.loadedPairs.add(pk);\n\t}\n\n\tgetConversationHistory(\n\t\tuserId: string,\n\t\taccountId: string,\n\t): Array<{ role: \"user\" | \"assistant\"; content: string }> {\n\t\tconst userKey = this.getUserKey(userId);\n\t\tthis.ensureLoaded(userKey, accountId);\n\t\treturn (this.cache.get(userKey)?.get(accountId) ?? []).map((msg) => ({\n\t\t\trole: msg.role,\n\t\t\tcontent: msg.content,\n\t\t}));\n\t}\n\n\taddMessage(userId: string, accountId: string, role: \"user\" | \"assistant\", content: string): void {\n\t\tconst userKey = this.getUserKey(userId);\n\t\tthis.ensureLoaded(userKey, accountId);\n\n\t\tconst message: ConversationMessage = {\n\t\t\trole,\n\t\t\tcontent,\n\t\t\ttimestamp: Date.now(),\n\t\t};\n\n\t\tthis.cache.get(userKey)?.get(accountId)?.push(message);\n\t\tsaveChannelMessage(this.memoryDir, this.PREFIX, userKey, accountId, message);\n\n\t\tconsole.log(`[WhatsAppConversationStore] Added ${role} message for user ${userId}, account ${accountId}`);\n\t}\n\n\tclearConversation(userId: string, accountId: string): void {\n\t\tconst userKey = this.getUserKey(userId);\n\t\tconst pk = this.pairKey(userKey, accountId);\n\n\t\tthis.cache.get(userKey)?.get(accountId)?.splice(0);\n\t\tthis.loadedPairs.delete(pk);\n\t\tclearChannelConversationFromAllDays(this.memoryDir, this.PREFIX, userKey, accountId);\n\n\t\tconsole.log(`[WhatsAppConversationStore] Cleared conversation for user ${userId}, account ${accountId}`);\n\t}\n\n\tclearAllConversations(userId: string): void {\n\t\tconst userKey = this.getUserKey(userId);\n\n\t\tfor (const pk of [...this.loadedPairs]) {\n\t\t\tif (pk.startsWith(`${userKey}::`)) {\n\t\t\t\tthis.loadedPairs.delete(pk);\n\t\t\t}\n\t\t}\n\t\tthis.cache.delete(userKey);\n\t\tclearAllChannelForUser(this.memoryDir, this.PREFIX, userKey);\n\n\t\tconsole.log(`[WhatsAppConversationStore] Cleared all conversations for user ${userId}`);\n\t}\n\n\tprivate getUserKey(userId: string): string {\n\t\treturn `whatsapp:${userId}`;\n\t}\n}\n\nexport { WhatsAppConversationStore };\n","/**\n * WhatsApp Client Registry\n *\n * Global registry to track all active Baileys WASocket instances.\n * Used by the self-message listener to access connected sockets.\n *\n * Implements the ClientRegistry interface from @melandlabs/integrations/core\n */\n\nimport type { ClientRegistry } from \"@melandlabs/integrations/core\";\nimport type { WASocket } from \"@whiskeysockets/baileys\";\nimport { DEBUG_WHATSAPP } from \"./debug\";\n\n// Module instance ID to detect if the module is being re-imported\nconst MODULE_ID = Math.random().toString(36).slice(2, 8);\n\nclass WhatsAppClientRegistry implements ClientRegistry {\n\tprivate clients: Map<string, WASocket> = new Map();\n\n\t/**\n\t * Register a socket for a specific account. Idempotent — if a socket is already\n\t * registered for this accountId, skip the registration to avoid overwriting the\n\t * existing socket (which may be owned by the self-listener).\n\t */\n\tregisterClient(sessionKey: string, client: WASocket): void {\n\t\tconst existing = this.clients.get(sessionKey);\n\t\tif (existing && existing !== client) {\n\t\t\tif (DEBUG_WHATSAPP) {\n\t\t\t\tconsole.log(\n\t\t\t\t\t`[WhatsAppClientRegistry] SKIP REGISTER: sessionKey=${sessionKey} already has socket (new sock.user=${client.user?.id}, existing sock.user=${existing.user?.id}), not overwriting`,\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tthis.clients.set(sessionKey, client);\n\t}\n\n\t/**\n\t * Unregister a socket\n\t */\n\tunregisterClient(sessionKey: string): void {\n\t\tif (!this.clients.has(sessionKey)) return;\n\t\tif (DEBUG_WHATSAPP) {\n\t\t\tconsole.log(\n\t\t\t\t`[WhatsAppClientRegistry] UNREGISTER instance=${MODULE_ID} sessionKey=${sessionKey} (before keys=${[...this.clients.keys()]})`,\n\t\t\t);\n\t\t}\n\t\tthis.clients.delete(sessionKey);\n\t}\n\n\t/**\n\t * Get a socket by account ID\n\t */\n\tgetClientBySessionKey(sessionKey: string): WASocket | undefined {\n\t\treturn this.clients.get(sessionKey);\n\t}\n\n\t/**\n\t * Get all registered sockets\n\t */\n\tgetAll(): Map<string, WASocket> {\n\t\treturn new Map(this.clients);\n\t}\n\n\t/**\n\t * Check if a socket is registered\n\t */\n\thas(sessionKey: string): boolean {\n\t\treturn this.clients.has(sessionKey);\n\t}\n\n\t/**\n\t * Clear all sockets\n\t */\n\tclear(): void {\n\t\tthis.clients.clear();\n\t}\n\n\t// ---- Backward-compatible aliases for web code ----\n\n\t/**\n\t * @deprecated Use registerClient instead\n\t */\n\tregister(accountId: string, sock: WASocket): void {\n\t\tthis.registerClient(accountId, sock);\n\t}\n\n\t/**\n\t * @deprecated Use getClientBySessionKey instead\n\t */\n\tget(accountId: string): WASocket | undefined {\n\t\treturn this.getClientBySessionKey(accountId);\n\t}\n\n\t/**\n\t * @deprecated Use unregisterClient instead\n\t */\n\tunregister(accountId: string): void {\n\t\tthis.unregisterClient(accountId);\n\t}\n}\n\nexport { WhatsAppClientRegistry };\n","/**\n * Convert standard Markdown formatting to WhatsApp-compatible markup.\n *\n * WhatsApp uses its own formatting syntax:\n * - bold: *text*\n * - italic: _text_\n * - strikethrough: ~text~\n *\n * Standard Markdown uses:\n * - bold: **text** or __text__\n * - italic: *text* or _text_\n * - strikethrough: ~~text~~\n * - code: `text` (inline) or ```text``` (block)\n *\n * The conversion preserves fenced code blocks and inline code,\n * then converts bold and strikethrough markers.\n */\n\nconst FENCE_PLACEHOLDER = \"\\x00FENCE\";\nconst INLINE_CODE_PLACEHOLDER = \"\\x00CODE\";\n\nfunction escapeRegExp(string: string): string {\n\treturn string.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n\n/**\n * Convert standard Markdown bold/italic/strikethrough to WhatsApp formatting.\n *\n * Order of operations matters:\n * 1. Protect fenced code blocks (```...```) — already WhatsApp-compatible\n * 2. Protect inline code (`...`) — leave as-is\n * 3. Convert **bold** → *bold* and __bold__ → *bold*\n * 4. Convert ~~strike~~ → ~strike~\n * 5. Restore protected spans\n *\n * Italic *text* and _text_ are left alone since WhatsApp uses _text_ for italic\n * and single * is already WhatsApp bold — no conversion needed for single markers.\n */\nexport function markdownToWhatsApp(text: string): string {\n\tif (!text) {\n\t\treturn text;\n\t}\n\n\t// 1. Extract and protect fenced code blocks\n\tconst fences: string[] = [];\n\tlet result = text.replace(/```[\\s\\S]*?```/g, (match) => {\n\t\tfences.push(match);\n\t\treturn `${FENCE_PLACEHOLDER}${fences.length - 1}`;\n\t});\n\n\t// 2. Extract and protect inline code\n\tconst inlineCodes: string[] = [];\n\tresult = result.replace(/`[^`\\n]+`/g, (match) => {\n\t\tinlineCodes.push(match);\n\t\treturn `${INLINE_CODE_PLACEHOLDER}${inlineCodes.length - 1}`;\n\t});\n\n\t// 3. Convert **bold** → *bold* and __bold__ → *bold*\n\tresult = result.replace(/\\*\\*(.+?)\\*\\*/g, \"*$1*\");\n\tresult = result.replace(/__(.+?)__/g, \"*$1*\");\n\n\t// 4. Convert ~~strikethrough~~ → ~strikethrough~\n\tresult = result.replace(/~~(.+?)~~/g, \"~$1~\");\n\n\t// 5. Restore inline code\n\tresult = result.replace(\n\t\tnew RegExp(`${escapeRegExp(INLINE_CODE_PLACEHOLDER)}(\\\\d+)`, \"g\"),\n\t\t(_, idx) => inlineCodes[Number(idx)] ?? \"\",\n\t);\n\n\t// 6. Restore fenced code blocks\n\tresult = result.replace(\n\t\tnew RegExp(`${escapeRegExp(FENCE_PLACEHOLDER)}(\\\\d+)`, \"g\"),\n\t\t(_, idx) => fences[Number(idx)] ?? \"\",\n\t);\n\n\treturn result;\n}\n"]}