logixia 2.0.6 → 2.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (128) hide show
  1. package/dist/{async-context-2mbUKhcl.mjs → async-context-COuvmwsS.mjs} +2 -2
  2. package/dist/{async-context-2mbUKhcl.mjs.map → async-context-COuvmwsS.mjs.map} +1 -1
  3. package/dist/{async-context-DUFMDYAr.js → async-context-Dv0bmPC-.js} +3 -3
  4. package/dist/{async-context-DUFMDYAr.js.map → async-context-Dv0bmPC-.js.map} +1 -1
  5. package/dist/{azure-monitor.transport-C1RWAumT.mjs → azure-monitor.transport-Coz5Gesu.mjs} +5 -5
  6. package/dist/{azure-monitor.transport-C1RWAumT.mjs.map → azure-monitor.transport-Coz5Gesu.mjs.map} +1 -1
  7. package/dist/{azure-monitor.transport-Bu4S2I2q.js → azure-monitor.transport-D6ryi8rA.js} +5 -5
  8. package/dist/{azure-monitor.transport-Bu4S2I2q.js.map → azure-monitor.transport-D6ryi8rA.js.map} +1 -1
  9. package/dist/azure.js +1 -1
  10. package/dist/azure.mjs +1 -1
  11. package/dist/{batch-buffer-C7Am4Mw-.js → batch-buffer-CFzKnuNZ.js} +3 -3
  12. package/dist/{batch-buffer-C7Am4Mw-.js.map → batch-buffer-CFzKnuNZ.js.map} +1 -1
  13. package/dist/{batch-buffer-BvXLDPlV.mjs → batch-buffer-CQUWDMYq.mjs} +3 -3
  14. package/dist/{batch-buffer-BvXLDPlV.mjs.map → batch-buffer-CQUWDMYq.mjs.map} +1 -1
  15. package/dist/browser.js +25 -1
  16. package/dist/browser.js.map +1 -1
  17. package/dist/browser.mjs +25 -1
  18. package/dist/browser.mjs.map +1 -1
  19. package/dist/{builder-DhNhvOkt.mjs → builder-C_TgxEOW.mjs} +7 -7
  20. package/dist/builder-C_TgxEOW.mjs.map +1 -0
  21. package/dist/{builder-yFvJrz7o.js → builder-CzmM_4Ub.js} +13 -13
  22. package/dist/builder-CzmM_4Ub.js.map +1 -0
  23. package/dist/cloudwatch.js +1 -1
  24. package/dist/cloudwatch.mjs +1 -1
  25. package/dist/{cloudwatch.transport-DZqF2xZO.mjs → cloudwatch.transport-Cr1aeTGj.mjs} +6 -6
  26. package/dist/{cloudwatch.transport-DZqF2xZO.mjs.map → cloudwatch.transport-Cr1aeTGj.mjs.map} +1 -1
  27. package/dist/{cloudwatch.transport-Ch1Uae-0.js → cloudwatch.transport-D4G5xYfG.js} +6 -6
  28. package/dist/{cloudwatch.transport-Ch1Uae-0.js.map → cloudwatch.transport-D4G5xYfG.js.map} +1 -1
  29. package/dist/correlation.d.mts +6 -0
  30. package/dist/correlation.d.mts.map +1 -1
  31. package/dist/correlation.d.ts +6 -0
  32. package/dist/correlation.d.ts.map +1 -1
  33. package/dist/correlation.js +4 -2
  34. package/dist/correlation.js.map +1 -1
  35. package/dist/correlation.mjs +4 -2
  36. package/dist/correlation.mjs.map +1 -1
  37. package/dist/{entry-fields-BSLkzw18.js → entry-fields-CVwoQplO.js} +3 -3
  38. package/dist/{entry-fields-BSLkzw18.js.map → entry-fields-CVwoQplO.js.map} +1 -1
  39. package/dist/{entry-fields-J1OBi24o.mjs → entry-fields-DNTKQxoU.mjs} +2 -2
  40. package/dist/{entry-fields-J1OBi24o.mjs.map → entry-fields-DNTKQxoU.mjs.map} +1 -1
  41. package/dist/gcp.js +1 -1
  42. package/dist/gcp.mjs +1 -1
  43. package/dist/{gcp.transport-Dy2Lf8FI.js → gcp.transport-CVuRpchl.js} +6 -6
  44. package/dist/{gcp.transport-Dy2Lf8FI.js.map → gcp.transport-CVuRpchl.js.map} +1 -1
  45. package/dist/{gcp.transport-DVCmnA3b.mjs → gcp.transport-LLK2bw2-.mjs} +6 -6
  46. package/dist/{gcp.transport-DVCmnA3b.mjs.map → gcp.transport-LLK2bw2-.mjs.map} +1 -1
  47. package/dist/{index-BSTtFcQ6.d.mts → index-BAkPHp5D.d.mts} +9 -1
  48. package/dist/index-BAkPHp5D.d.mts.map +1 -0
  49. package/dist/{index-CFDGkI8n.d.ts → index-e7LowmAu.d.ts} +9 -1
  50. package/dist/index-e7LowmAu.d.ts.map +1 -0
  51. package/dist/index.d.mts +3 -3
  52. package/dist/index.d.ts +3 -3
  53. package/dist/index.js +16 -16
  54. package/dist/index.js.map +1 -1
  55. package/dist/index.mjs +7 -7
  56. package/dist/internal-log-Cy5nF1ZL.mjs +63 -0
  57. package/dist/internal-log-Cy5nF1ZL.mjs.map +1 -0
  58. package/dist/internal-log-DwqTjhpb.js +80 -0
  59. package/dist/internal-log-DwqTjhpb.js.map +1 -0
  60. package/dist/{logitron-logger-D_MYYrQt.d.ts → logitron-logger-Qh3y9-WH.d.ts} +2 -2
  61. package/dist/{logitron-logger-D_MYYrQt.d.ts.map → logitron-logger-Qh3y9-WH.d.ts.map} +1 -1
  62. package/dist/{logitron-logger-D22Yb61K.d.mts → logitron-logger-sYuk8fOb.d.mts} +2 -2
  63. package/dist/{logitron-logger-D22Yb61K.d.mts.map → logitron-logger-sYuk8fOb.d.mts.map} +1 -1
  64. package/dist/middleware.d.mts +1 -1
  65. package/dist/middleware.d.ts +1 -1
  66. package/dist/middleware.js +8 -8
  67. package/dist/middleware.js.map +1 -1
  68. package/dist/middleware.mjs +3 -3
  69. package/dist/nest.d.mts +12 -3
  70. package/dist/nest.d.mts.map +1 -1
  71. package/dist/nest.d.ts +12 -3
  72. package/dist/nest.d.ts.map +1 -1
  73. package/dist/nest.js +128 -20
  74. package/dist/nest.js.map +1 -1
  75. package/dist/nest.mjs +128 -20
  76. package/dist/nest.mjs.map +1 -1
  77. package/dist/{otel-DyeH6DVR.js → otel-ChnVYRLA.js} +5 -5
  78. package/dist/{otel-DyeH6DVR.js.map → otel-ChnVYRLA.js.map} +1 -1
  79. package/dist/{otel-Dt5riXuE.mjs → otel-DOuwGPCd.mjs} +5 -5
  80. package/dist/{otel-Dt5riXuE.mjs.map → otel-DOuwGPCd.mjs.map} +1 -1
  81. package/dist/{safe-stringify-B5p5ktFe.mjs → safe-stringify--7gbe95n.mjs} +2 -2
  82. package/dist/{safe-stringify-B5p5ktFe.mjs.map → safe-stringify--7gbe95n.mjs.map} +1 -1
  83. package/dist/{safe-stringify-J3sh-7YM.js → safe-stringify-CN7icp8S.js} +5 -5
  84. package/dist/{safe-stringify-J3sh-7YM.js.map → safe-stringify-CN7icp8S.js.map} +1 -1
  85. package/dist/{search-DA3ft3X5.d.mts → search-D-8HJADE.d.mts} +2 -2
  86. package/dist/{search-DA3ft3X5.d.mts.map → search-D-8HJADE.d.mts.map} +1 -1
  87. package/dist/{search-DEl3Pe47.d.ts → search-DPwTKPve.d.ts} +2 -2
  88. package/dist/{search-DEl3Pe47.d.ts.map → search-DPwTKPve.d.ts.map} +1 -1
  89. package/dist/search.d.mts +1 -1
  90. package/dist/search.d.ts +1 -1
  91. package/dist/{secret-config-CmK2wVkr.js → secret-config-BvFl2dC8.js} +7 -8
  92. package/dist/{secret-config-CmK2wVkr.js.map → secret-config-BvFl2dC8.js.map} +1 -1
  93. package/dist/{secret-config-Dhb6pqTU.mjs → secret-config-ByGq7kJd.mjs} +2 -3
  94. package/dist/{secret-config-Dhb6pqTU.mjs.map → secret-config-ByGq7kJd.mjs.map} +1 -1
  95. package/dist/sensitive-names-CHMowujD.js +276 -0
  96. package/dist/sensitive-names-CHMowujD.js.map +1 -0
  97. package/dist/sensitive-names-o__1PUUR.mjs +217 -0
  98. package/dist/sensitive-names-o__1PUUR.mjs.map +1 -0
  99. package/dist/{slack.transport-BTEwsREY.mjs → slack.transport-CSj1j0_X.mjs} +6 -6
  100. package/dist/{slack.transport-BTEwsREY.mjs.map → slack.transport-CSj1j0_X.mjs.map} +1 -1
  101. package/dist/{slack.transport-UbYvOdKx.js → slack.transport-zLQ9MGxS.js} +6 -6
  102. package/dist/{slack.transport-UbYvOdKx.js.map → slack.transport-zLQ9MGxS.js.map} +1 -1
  103. package/dist/testing.d.mts +1 -1
  104. package/dist/testing.d.ts +1 -1
  105. package/dist/transports.d.mts +1 -1
  106. package/dist/transports.d.ts +1 -1
  107. package/dist/transports.js +6 -6
  108. package/dist/transports.mjs +6 -6
  109. package/dist/worker-entry.js +25 -1
  110. package/dist/worker.js +1 -1
  111. package/dist/worker.mjs +1 -1
  112. package/dist/{worker.transport-BmmOKb1-.mjs → worker.transport-D78xhNhB.mjs} +3 -3
  113. package/dist/{worker.transport-BmmOKb1-.mjs.map → worker.transport-D78xhNhB.mjs.map} +1 -1
  114. package/dist/{worker.transport-DxxbqQCG.js → worker.transport-DQDv1nAJ.js} +3 -3
  115. package/dist/{worker.transport-DxxbqQCG.js.map → worker.transport-DQDv1nAJ.js.map} +1 -1
  116. package/package.json +1 -1
  117. package/dist/builder-DhNhvOkt.mjs.map +0 -1
  118. package/dist/builder-yFvJrz7o.js.map +0 -1
  119. package/dist/index-BSTtFcQ6.d.mts.map +0 -1
  120. package/dist/index-CFDGkI8n.d.ts.map +0 -1
  121. package/dist/internal-log-Bg4V1cPg.mjs +0 -170
  122. package/dist/internal-log-Bg4V1cPg.mjs.map +0 -1
  123. package/dist/internal-log-By4Govmu.js +0 -223
  124. package/dist/internal-log-By4Govmu.js.map +0 -1
  125. package/dist/own-property-BWkibepN.js +0 -40
  126. package/dist/own-property-BWkibepN.js.map +0 -1
  127. package/dist/own-property-CjFw9qwZ.mjs +0 -29
  128. package/dist/own-property-CjFw9qwZ.mjs.map +0 -1
@@ -1,4 +1,4 @@
1
- import { t as assignOwn } from "./own-property-CjFw9qwZ.mjs";
1
+ import { l as assignOwn } from "./sensitive-names-o__1PUUR.mjs";
2
2
  // src/utils/safe-stringify.ts
3
3
  /**
4
4
  * logixia — robust JSON serialization for log payloads.
@@ -139,4 +139,4 @@ function stringifyForLog(value) {
139
139
  }
140
140
  export { stringifyForLog as i, retrocycle as n, safeStringify as r, decycleValue as t };
141
141
 
142
- //# sourceMappingURL=safe-stringify-B5p5ktFe.mjs.map
142
+ //# sourceMappingURL=safe-stringify--7gbe95n.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"safe-stringify-B5p5ktFe.mjs","names":[],"sources":["../src/utils/safe-stringify.ts"],"sourcesContent":["/**\n * logixia — robust JSON serialization for log payloads.\n *\n * Modern Winston/Pino already neutralize circular refs to `[Circular]` (via\n * safe-stable-stringify / fast-safe-stringify), so merely \"surviving cycles\" is\n * not a differentiator. This goes one notch further:\n *\n * - **BigInt** → serialized (as a string by default; JSON.stringify throws on\n * BigInt, which silently breaks logging of e.g. DB bigint ids).\n * - **Deterministic key order** (optional) so identical objects hash/diff equal.\n * - **True decycle** (optional) — replace repeated references with JSONPath\n * `$ref` pointers that round-trip back to the original object graph, instead\n * of the lossy `[Circular]` tag. Useful when you need to reconstruct shared\n * structure downstream.\n *\n * @example\n * ```ts\n * safeStringify({ id: 10n, self: obj }); // → BigInt + cycle safe\n * safeStringify(graph, { decycle: true }); // → round-trippable $ref pointers\n * const back = retrocycle(JSON.parse(json)); // → reconstruct shared refs\n * ```\n */\n\nimport { assignOwn } from './own-property';\n\nexport interface SafeStringifyOptions {\n /** Indentation passed to JSON.stringify (number of spaces or a string). */\n indent?: number | string;\n /** Sort object keys for deterministic output. Default: false. */\n deterministic?: boolean;\n /**\n * Use round-trippable `$ref` JSONPath pointers for repeated references instead\n * of the lossy \"[Circular]\" tag. Default: false.\n */\n decycle?: boolean;\n /** How to render BigInt: 'string' (default) or 'number' (may lose precision). */\n bigint?: 'string' | 'number';\n}\n\n/** Build a JSONPath like `$[\"a\"][0][\"b\"]` for a decycle pointer. */\nfunction jsonPath(parts: Array<string | number>): string {\n let path = '$';\n for (const p of parts) {\n path += typeof p === 'number' ? `[${p}]` : `[${JSON.stringify(p)}]`;\n }\n return path;\n}\n\n/**\n * Serialize any value to JSON without throwing on circular references or BigInt.\n * Circular refs become `\"[Circular]\"` (or `{ $ref }` pointers when `decycle`).\n */\nexport function safeStringify(value: unknown, options: SafeStringifyOptions = {}): string {\n const { indent, deterministic = false, decycle = false, bigint = 'string' } = options;\n\n if (decycle) {\n return JSON.stringify(decycleValue(value, bigint), undefined, indent);\n }\n\n const seen = new WeakSet<object>();\n\n const transform = (val: unknown): unknown => {\n if (typeof val === 'bigint') return bigint === 'number' ? Number(val) : val.toString();\n if (typeof val === 'function') return `[Function: ${val.name || 'anonymous'}]`;\n if (typeof val === 'symbol') return val.toString();\n if (val === null || typeof val !== 'object') return val;\n\n if (seen.has(val)) return '[Circular]';\n seen.add(val);\n\n let out: unknown;\n const toJSON = (val as { toJSON?: unknown }).toJSON;\n if (Array.isArray(val)) {\n out = val.map((item) => transform(item));\n } else if (typeof toJSON === 'function') {\n // Dates, URLs, Buffers and classes with their own toJSON print the way\n // JSON.stringify would; a toJSON that returns `this` hits the cycle check.\n out = transform(toJSON.call(val));\n } else {\n const rec = val as Record<string, unknown>;\n const keys = deterministic ? Object.keys(rec).sort() : Object.keys(rec);\n const obj: Record<string, unknown> = {};\n for (const k of keys) {\n assignOwn(obj, k, transform(rec[k]));\n }\n out = obj;\n }\n // Allow the same object to appear in sibling branches (not a true cycle):\n // remove from `seen` after we finish its subtree.\n seen.delete(val);\n return out;\n };\n\n return JSON.stringify(transform(value), undefined, indent);\n}\n\n/**\n * Replace repeated object references with round-trippable `{ \"$ref\": \"$...\" }`\n * JSONPath pointers (the classic Crockford decycle). Pair with {@link retrocycle}\n * to reconstruct the original shared/circular graph.\n */\nexport function decycleValue(value: unknown, bigint: 'string' | 'number' = 'string'): unknown {\n const paths = new WeakMap<object, string>();\n\n const walk = (val: unknown, path: Array<string | number>): unknown => {\n if (typeof val === 'bigint') return bigint === 'number' ? Number(val) : val.toString();\n if (val === null || typeof val !== 'object') return val;\n if (val instanceof Date) return val.toISOString();\n\n const existing = paths.get(val);\n if (existing !== undefined) return { $ref: existing };\n paths.set(val, jsonPath(path));\n\n if (Array.isArray(val)) {\n return val.map((item, i) => walk(item, [...path, i]));\n }\n const rec = val as Record<string, unknown>;\n const obj: Record<string, unknown> = {};\n for (const k of Object.keys(rec)) {\n assignOwn(obj, k, walk(rec[k], [...path, k]));\n }\n return obj;\n };\n\n return walk(value, []);\n}\n\n/**\n * Inverse of {@link decycleValue}: resolve `{ \"$ref\": \"$...\" }` pointers back\n * into the live object graph (mutates and returns the parsed input).\n */\nexport function retrocycle<T>(root: T): T {\n const refRe = /^\\$(?:\\[(?:\\d+|\"(?:[^\"\\\\]|\\\\.)*\")\\])*$/;\n\n const UNRESOLVED = Symbol('unresolved');\n const resolve = (path: string): unknown => {\n // Parse the JSONPath segments back out.\n const segs: Array<string | number> = [];\n const partRe = /\\[(\\d+|\"(?:[^\"\\\\]|\\\\.)*\")\\]/g;\n let m: RegExpExecArray | null;\n while ((m = partRe.exec(path)) !== null) {\n const raw = m[1]!;\n segs.push(raw.startsWith('\"') ? (JSON.parse(raw) as string) : Number(raw));\n }\n let node: unknown = root;\n for (const s of segs) {\n if (node === null || typeof node !== 'object') return UNRESOLVED;\n if (!Object.prototype.hasOwnProperty.call(node, s)) return UNRESOLVED;\n node = (node as Record<string | number, unknown>)[s];\n }\n return node;\n };\n\n const walk = (val: unknown): void => {\n if (val === null || typeof val !== 'object') return;\n const rec = val as Record<string, unknown>;\n for (const k of Object.keys(rec)) {\n const child = rec[k];\n if (\n child !== null &&\n typeof child === 'object' &&\n typeof (child as { $ref?: unknown }).$ref === 'string' &&\n refRe.test((child as { $ref: string }).$ref)\n ) {\n const target = resolve((child as { $ref: string }).$ref);\n if (target === UNRESOLVED) walk(child);\n else assignOwn(rec, k, target);\n } else {\n walk(child);\n }\n }\n };\n\n walk(root);\n return root;\n}\n\n/**\n * `JSON.stringify` for log output. Takes the plain fast path first and only\n * falls back to {@link safeStringify} when that throws (a cycle, a BigInt, a\n * throwing `toJSON`), so a bad payload costs nothing until it shows up.\n * Never throws: if even the safe walk fails, the value is replaced by a marker.\n */\nexport function stringifyForLog(value: unknown): string {\n try {\n return JSON.stringify(value);\n } catch {\n try {\n return safeStringify(value);\n } catch (error) {\n const reason = error instanceof Error ? error.message : String(error);\n return JSON.stringify(`[Unserializable: ${reason}]`);\n }\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"safe-stringify--7gbe95n.mjs","names":[],"sources":["../src/utils/safe-stringify.ts"],"sourcesContent":["/**\n * logixia — robust JSON serialization for log payloads.\n *\n * Modern Winston/Pino already neutralize circular refs to `[Circular]` (via\n * safe-stable-stringify / fast-safe-stringify), so merely \"surviving cycles\" is\n * not a differentiator. This goes one notch further:\n *\n * - **BigInt** → serialized (as a string by default; JSON.stringify throws on\n * BigInt, which silently breaks logging of e.g. DB bigint ids).\n * - **Deterministic key order** (optional) so identical objects hash/diff equal.\n * - **True decycle** (optional) — replace repeated references with JSONPath\n * `$ref` pointers that round-trip back to the original object graph, instead\n * of the lossy `[Circular]` tag. Useful when you need to reconstruct shared\n * structure downstream.\n *\n * @example\n * ```ts\n * safeStringify({ id: 10n, self: obj }); // → BigInt + cycle safe\n * safeStringify(graph, { decycle: true }); // → round-trippable $ref pointers\n * const back = retrocycle(JSON.parse(json)); // → reconstruct shared refs\n * ```\n */\n\nimport { assignOwn } from './own-property';\n\nexport interface SafeStringifyOptions {\n /** Indentation passed to JSON.stringify (number of spaces or a string). */\n indent?: number | string;\n /** Sort object keys for deterministic output. Default: false. */\n deterministic?: boolean;\n /**\n * Use round-trippable `$ref` JSONPath pointers for repeated references instead\n * of the lossy \"[Circular]\" tag. Default: false.\n */\n decycle?: boolean;\n /** How to render BigInt: 'string' (default) or 'number' (may lose precision). */\n bigint?: 'string' | 'number';\n}\n\n/** Build a JSONPath like `$[\"a\"][0][\"b\"]` for a decycle pointer. */\nfunction jsonPath(parts: Array<string | number>): string {\n let path = '$';\n for (const p of parts) {\n path += typeof p === 'number' ? `[${p}]` : `[${JSON.stringify(p)}]`;\n }\n return path;\n}\n\n/**\n * Serialize any value to JSON without throwing on circular references or BigInt.\n * Circular refs become `\"[Circular]\"` (or `{ $ref }` pointers when `decycle`).\n */\nexport function safeStringify(value: unknown, options: SafeStringifyOptions = {}): string {\n const { indent, deterministic = false, decycle = false, bigint = 'string' } = options;\n\n if (decycle) {\n return JSON.stringify(decycleValue(value, bigint), undefined, indent);\n }\n\n const seen = new WeakSet<object>();\n\n const transform = (val: unknown): unknown => {\n if (typeof val === 'bigint') return bigint === 'number' ? Number(val) : val.toString();\n if (typeof val === 'function') return `[Function: ${val.name || 'anonymous'}]`;\n if (typeof val === 'symbol') return val.toString();\n if (val === null || typeof val !== 'object') return val;\n\n if (seen.has(val)) return '[Circular]';\n seen.add(val);\n\n let out: unknown;\n const toJSON = (val as { toJSON?: unknown }).toJSON;\n if (Array.isArray(val)) {\n out = val.map((item) => transform(item));\n } else if (typeof toJSON === 'function') {\n // Dates, URLs, Buffers and classes with their own toJSON print the way\n // JSON.stringify would; a toJSON that returns `this` hits the cycle check.\n out = transform(toJSON.call(val));\n } else {\n const rec = val as Record<string, unknown>;\n const keys = deterministic ? Object.keys(rec).sort() : Object.keys(rec);\n const obj: Record<string, unknown> = {};\n for (const k of keys) {\n assignOwn(obj, k, transform(rec[k]));\n }\n out = obj;\n }\n // Allow the same object to appear in sibling branches (not a true cycle):\n // remove from `seen` after we finish its subtree.\n seen.delete(val);\n return out;\n };\n\n return JSON.stringify(transform(value), undefined, indent);\n}\n\n/**\n * Replace repeated object references with round-trippable `{ \"$ref\": \"$...\" }`\n * JSONPath pointers (the classic Crockford decycle). Pair with {@link retrocycle}\n * to reconstruct the original shared/circular graph.\n */\nexport function decycleValue(value: unknown, bigint: 'string' | 'number' = 'string'): unknown {\n const paths = new WeakMap<object, string>();\n\n const walk = (val: unknown, path: Array<string | number>): unknown => {\n if (typeof val === 'bigint') return bigint === 'number' ? Number(val) : val.toString();\n if (val === null || typeof val !== 'object') return val;\n if (val instanceof Date) return val.toISOString();\n\n const existing = paths.get(val);\n if (existing !== undefined) return { $ref: existing };\n paths.set(val, jsonPath(path));\n\n if (Array.isArray(val)) {\n return val.map((item, i) => walk(item, [...path, i]));\n }\n const rec = val as Record<string, unknown>;\n const obj: Record<string, unknown> = {};\n for (const k of Object.keys(rec)) {\n assignOwn(obj, k, walk(rec[k], [...path, k]));\n }\n return obj;\n };\n\n return walk(value, []);\n}\n\n/**\n * Inverse of {@link decycleValue}: resolve `{ \"$ref\": \"$...\" }` pointers back\n * into the live object graph (mutates and returns the parsed input).\n */\nexport function retrocycle<T>(root: T): T {\n const refRe = /^\\$(?:\\[(?:\\d+|\"(?:[^\"\\\\]|\\\\.)*\")\\])*$/;\n\n const UNRESOLVED = Symbol('unresolved');\n const resolve = (path: string): unknown => {\n // Parse the JSONPath segments back out.\n const segs: Array<string | number> = [];\n const partRe = /\\[(\\d+|\"(?:[^\"\\\\]|\\\\.)*\")\\]/g;\n let m: RegExpExecArray | null;\n while ((m = partRe.exec(path)) !== null) {\n const raw = m[1]!;\n segs.push(raw.startsWith('\"') ? (JSON.parse(raw) as string) : Number(raw));\n }\n let node: unknown = root;\n for (const s of segs) {\n if (node === null || typeof node !== 'object') return UNRESOLVED;\n if (!Object.prototype.hasOwnProperty.call(node, s)) return UNRESOLVED;\n node = (node as Record<string | number, unknown>)[s];\n }\n return node;\n };\n\n const walk = (val: unknown): void => {\n if (val === null || typeof val !== 'object') return;\n const rec = val as Record<string, unknown>;\n for (const k of Object.keys(rec)) {\n const child = rec[k];\n if (\n child !== null &&\n typeof child === 'object' &&\n typeof (child as { $ref?: unknown }).$ref === 'string' &&\n refRe.test((child as { $ref: string }).$ref)\n ) {\n const target = resolve((child as { $ref: string }).$ref);\n if (target === UNRESOLVED) walk(child);\n else assignOwn(rec, k, target);\n } else {\n walk(child);\n }\n }\n };\n\n walk(root);\n return root;\n}\n\n/**\n * `JSON.stringify` for log output. Takes the plain fast path first and only\n * falls back to {@link safeStringify} when that throws (a cycle, a BigInt, a\n * throwing `toJSON`), so a bad payload costs nothing until it shows up.\n * Never throws: if even the safe walk fails, the value is replaced by a marker.\n */\nexport function stringifyForLog(value: unknown): string {\n try {\n return JSON.stringify(value);\n } catch {\n try {\n return safeStringify(value);\n } catch (error) {\n const reason = error instanceof Error ? error.message : String(error);\n return JSON.stringify(`[Unserializable: ${reason}]`);\n }\n }\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- const require_own_property = require("./own-property-BWkibepN.js");
1
+ const require_sensitive_names = require("./sensitive-names-CHMowujD.js");
2
2
  // src/utils/safe-stringify.ts
3
3
  /**
4
4
  * logixia — robust JSON serialization for log payloads.
@@ -51,7 +51,7 @@ function safeStringify(value, options = {}) {
51
51
  const rec = val;
52
52
  const keys = deterministic ? Object.keys(rec).sort() : Object.keys(rec);
53
53
  const obj = {};
54
- for (const k of keys) require_own_property.assignOwn(obj, k, transform(rec[k]));
54
+ for (const k of keys) require_sensitive_names.assignOwn(obj, k, transform(rec[k]));
55
55
  out = obj;
56
56
  }
57
57
  seen.delete(val);
@@ -76,7 +76,7 @@ function decycleValue(value, bigint = "string") {
76
76
  if (Array.isArray(val)) return val.map((item, i) => walk(item, [...path, i]));
77
77
  const rec = val;
78
78
  const obj = {};
79
- for (const k of Object.keys(rec)) require_own_property.assignOwn(obj, k, walk(rec[k], [...path, k]));
79
+ for (const k of Object.keys(rec)) require_sensitive_names.assignOwn(obj, k, walk(rec[k], [...path, k]));
80
80
  return obj;
81
81
  };
82
82
  return walk(value, []);
@@ -112,7 +112,7 @@ function retrocycle(root) {
112
112
  if (child !== null && typeof child === "object" && typeof child.$ref === "string" && refRe.test(child.$ref)) {
113
113
  const target = resolve(child.$ref);
114
114
  if (target === UNRESOLVED) walk(child);
115
- else require_own_property.assignOwn(rec, k, target);
115
+ else require_sensitive_names.assignOwn(rec, k, target);
116
116
  } else walk(child);
117
117
  }
118
118
  };
@@ -162,4 +162,4 @@ Object.defineProperty(exports, "stringifyForLog", {
162
162
  }
163
163
  });
164
164
 
165
- //# sourceMappingURL=safe-stringify-J3sh-7YM.js.map
165
+ //# sourceMappingURL=safe-stringify-CN7icp8S.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"safe-stringify-J3sh-7YM.js","names":[],"sources":["../src/utils/safe-stringify.ts"],"sourcesContent":["/**\n * logixia — robust JSON serialization for log payloads.\n *\n * Modern Winston/Pino already neutralize circular refs to `[Circular]` (via\n * safe-stable-stringify / fast-safe-stringify), so merely \"surviving cycles\" is\n * not a differentiator. This goes one notch further:\n *\n * - **BigInt** → serialized (as a string by default; JSON.stringify throws on\n * BigInt, which silently breaks logging of e.g. DB bigint ids).\n * - **Deterministic key order** (optional) so identical objects hash/diff equal.\n * - **True decycle** (optional) — replace repeated references with JSONPath\n * `$ref` pointers that round-trip back to the original object graph, instead\n * of the lossy `[Circular]` tag. Useful when you need to reconstruct shared\n * structure downstream.\n *\n * @example\n * ```ts\n * safeStringify({ id: 10n, self: obj }); // → BigInt + cycle safe\n * safeStringify(graph, { decycle: true }); // → round-trippable $ref pointers\n * const back = retrocycle(JSON.parse(json)); // → reconstruct shared refs\n * ```\n */\n\nimport { assignOwn } from './own-property';\n\nexport interface SafeStringifyOptions {\n /** Indentation passed to JSON.stringify (number of spaces or a string). */\n indent?: number | string;\n /** Sort object keys for deterministic output. Default: false. */\n deterministic?: boolean;\n /**\n * Use round-trippable `$ref` JSONPath pointers for repeated references instead\n * of the lossy \"[Circular]\" tag. Default: false.\n */\n decycle?: boolean;\n /** How to render BigInt: 'string' (default) or 'number' (may lose precision). */\n bigint?: 'string' | 'number';\n}\n\n/** Build a JSONPath like `$[\"a\"][0][\"b\"]` for a decycle pointer. */\nfunction jsonPath(parts: Array<string | number>): string {\n let path = '$';\n for (const p of parts) {\n path += typeof p === 'number' ? `[${p}]` : `[${JSON.stringify(p)}]`;\n }\n return path;\n}\n\n/**\n * Serialize any value to JSON without throwing on circular references or BigInt.\n * Circular refs become `\"[Circular]\"` (or `{ $ref }` pointers when `decycle`).\n */\nexport function safeStringify(value: unknown, options: SafeStringifyOptions = {}): string {\n const { indent, deterministic = false, decycle = false, bigint = 'string' } = options;\n\n if (decycle) {\n return JSON.stringify(decycleValue(value, bigint), undefined, indent);\n }\n\n const seen = new WeakSet<object>();\n\n const transform = (val: unknown): unknown => {\n if (typeof val === 'bigint') return bigint === 'number' ? Number(val) : val.toString();\n if (typeof val === 'function') return `[Function: ${val.name || 'anonymous'}]`;\n if (typeof val === 'symbol') return val.toString();\n if (val === null || typeof val !== 'object') return val;\n\n if (seen.has(val)) return '[Circular]';\n seen.add(val);\n\n let out: unknown;\n const toJSON = (val as { toJSON?: unknown }).toJSON;\n if (Array.isArray(val)) {\n out = val.map((item) => transform(item));\n } else if (typeof toJSON === 'function') {\n // Dates, URLs, Buffers and classes with their own toJSON print the way\n // JSON.stringify would; a toJSON that returns `this` hits the cycle check.\n out = transform(toJSON.call(val));\n } else {\n const rec = val as Record<string, unknown>;\n const keys = deterministic ? Object.keys(rec).sort() : Object.keys(rec);\n const obj: Record<string, unknown> = {};\n for (const k of keys) {\n assignOwn(obj, k, transform(rec[k]));\n }\n out = obj;\n }\n // Allow the same object to appear in sibling branches (not a true cycle):\n // remove from `seen` after we finish its subtree.\n seen.delete(val);\n return out;\n };\n\n return JSON.stringify(transform(value), undefined, indent);\n}\n\n/**\n * Replace repeated object references with round-trippable `{ \"$ref\": \"$...\" }`\n * JSONPath pointers (the classic Crockford decycle). Pair with {@link retrocycle}\n * to reconstruct the original shared/circular graph.\n */\nexport function decycleValue(value: unknown, bigint: 'string' | 'number' = 'string'): unknown {\n const paths = new WeakMap<object, string>();\n\n const walk = (val: unknown, path: Array<string | number>): unknown => {\n if (typeof val === 'bigint') return bigint === 'number' ? Number(val) : val.toString();\n if (val === null || typeof val !== 'object') return val;\n if (val instanceof Date) return val.toISOString();\n\n const existing = paths.get(val);\n if (existing !== undefined) return { $ref: existing };\n paths.set(val, jsonPath(path));\n\n if (Array.isArray(val)) {\n return val.map((item, i) => walk(item, [...path, i]));\n }\n const rec = val as Record<string, unknown>;\n const obj: Record<string, unknown> = {};\n for (const k of Object.keys(rec)) {\n assignOwn(obj, k, walk(rec[k], [...path, k]));\n }\n return obj;\n };\n\n return walk(value, []);\n}\n\n/**\n * Inverse of {@link decycleValue}: resolve `{ \"$ref\": \"$...\" }` pointers back\n * into the live object graph (mutates and returns the parsed input).\n */\nexport function retrocycle<T>(root: T): T {\n const refRe = /^\\$(?:\\[(?:\\d+|\"(?:[^\"\\\\]|\\\\.)*\")\\])*$/;\n\n const UNRESOLVED = Symbol('unresolved');\n const resolve = (path: string): unknown => {\n // Parse the JSONPath segments back out.\n const segs: Array<string | number> = [];\n const partRe = /\\[(\\d+|\"(?:[^\"\\\\]|\\\\.)*\")\\]/g;\n let m: RegExpExecArray | null;\n while ((m = partRe.exec(path)) !== null) {\n const raw = m[1]!;\n segs.push(raw.startsWith('\"') ? (JSON.parse(raw) as string) : Number(raw));\n }\n let node: unknown = root;\n for (const s of segs) {\n if (node === null || typeof node !== 'object') return UNRESOLVED;\n if (!Object.prototype.hasOwnProperty.call(node, s)) return UNRESOLVED;\n node = (node as Record<string | number, unknown>)[s];\n }\n return node;\n };\n\n const walk = (val: unknown): void => {\n if (val === null || typeof val !== 'object') return;\n const rec = val as Record<string, unknown>;\n for (const k of Object.keys(rec)) {\n const child = rec[k];\n if (\n child !== null &&\n typeof child === 'object' &&\n typeof (child as { $ref?: unknown }).$ref === 'string' &&\n refRe.test((child as { $ref: string }).$ref)\n ) {\n const target = resolve((child as { $ref: string }).$ref);\n if (target === UNRESOLVED) walk(child);\n else assignOwn(rec, k, target);\n } else {\n walk(child);\n }\n }\n };\n\n walk(root);\n return root;\n}\n\n/**\n * `JSON.stringify` for log output. Takes the plain fast path first and only\n * falls back to {@link safeStringify} when that throws (a cycle, a BigInt, a\n * throwing `toJSON`), so a bad payload costs nothing until it shows up.\n * Never throws: if even the safe walk fails, the value is replaced by a marker.\n */\nexport function stringifyForLog(value: unknown): string {\n try {\n return JSON.stringify(value);\n } catch {\n try {\n return safeStringify(value);\n } catch (error) {\n const reason = error instanceof Error ? error.message : String(error);\n return JSON.stringify(`[Unserializable: ${reason}]`);\n }\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"safe-stringify-CN7icp8S.js","names":[],"sources":["../src/utils/safe-stringify.ts"],"sourcesContent":["/**\n * logixia — robust JSON serialization for log payloads.\n *\n * Modern Winston/Pino already neutralize circular refs to `[Circular]` (via\n * safe-stable-stringify / fast-safe-stringify), so merely \"surviving cycles\" is\n * not a differentiator. This goes one notch further:\n *\n * - **BigInt** → serialized (as a string by default; JSON.stringify throws on\n * BigInt, which silently breaks logging of e.g. DB bigint ids).\n * - **Deterministic key order** (optional) so identical objects hash/diff equal.\n * - **True decycle** (optional) — replace repeated references with JSONPath\n * `$ref` pointers that round-trip back to the original object graph, instead\n * of the lossy `[Circular]` tag. Useful when you need to reconstruct shared\n * structure downstream.\n *\n * @example\n * ```ts\n * safeStringify({ id: 10n, self: obj }); // → BigInt + cycle safe\n * safeStringify(graph, { decycle: true }); // → round-trippable $ref pointers\n * const back = retrocycle(JSON.parse(json)); // → reconstruct shared refs\n * ```\n */\n\nimport { assignOwn } from './own-property';\n\nexport interface SafeStringifyOptions {\n /** Indentation passed to JSON.stringify (number of spaces or a string). */\n indent?: number | string;\n /** Sort object keys for deterministic output. Default: false. */\n deterministic?: boolean;\n /**\n * Use round-trippable `$ref` JSONPath pointers for repeated references instead\n * of the lossy \"[Circular]\" tag. Default: false.\n */\n decycle?: boolean;\n /** How to render BigInt: 'string' (default) or 'number' (may lose precision). */\n bigint?: 'string' | 'number';\n}\n\n/** Build a JSONPath like `$[\"a\"][0][\"b\"]` for a decycle pointer. */\nfunction jsonPath(parts: Array<string | number>): string {\n let path = '$';\n for (const p of parts) {\n path += typeof p === 'number' ? `[${p}]` : `[${JSON.stringify(p)}]`;\n }\n return path;\n}\n\n/**\n * Serialize any value to JSON without throwing on circular references or BigInt.\n * Circular refs become `\"[Circular]\"` (or `{ $ref }` pointers when `decycle`).\n */\nexport function safeStringify(value: unknown, options: SafeStringifyOptions = {}): string {\n const { indent, deterministic = false, decycle = false, bigint = 'string' } = options;\n\n if (decycle) {\n return JSON.stringify(decycleValue(value, bigint), undefined, indent);\n }\n\n const seen = new WeakSet<object>();\n\n const transform = (val: unknown): unknown => {\n if (typeof val === 'bigint') return bigint === 'number' ? Number(val) : val.toString();\n if (typeof val === 'function') return `[Function: ${val.name || 'anonymous'}]`;\n if (typeof val === 'symbol') return val.toString();\n if (val === null || typeof val !== 'object') return val;\n\n if (seen.has(val)) return '[Circular]';\n seen.add(val);\n\n let out: unknown;\n const toJSON = (val as { toJSON?: unknown }).toJSON;\n if (Array.isArray(val)) {\n out = val.map((item) => transform(item));\n } else if (typeof toJSON === 'function') {\n // Dates, URLs, Buffers and classes with their own toJSON print the way\n // JSON.stringify would; a toJSON that returns `this` hits the cycle check.\n out = transform(toJSON.call(val));\n } else {\n const rec = val as Record<string, unknown>;\n const keys = deterministic ? Object.keys(rec).sort() : Object.keys(rec);\n const obj: Record<string, unknown> = {};\n for (const k of keys) {\n assignOwn(obj, k, transform(rec[k]));\n }\n out = obj;\n }\n // Allow the same object to appear in sibling branches (not a true cycle):\n // remove from `seen` after we finish its subtree.\n seen.delete(val);\n return out;\n };\n\n return JSON.stringify(transform(value), undefined, indent);\n}\n\n/**\n * Replace repeated object references with round-trippable `{ \"$ref\": \"$...\" }`\n * JSONPath pointers (the classic Crockford decycle). Pair with {@link retrocycle}\n * to reconstruct the original shared/circular graph.\n */\nexport function decycleValue(value: unknown, bigint: 'string' | 'number' = 'string'): unknown {\n const paths = new WeakMap<object, string>();\n\n const walk = (val: unknown, path: Array<string | number>): unknown => {\n if (typeof val === 'bigint') return bigint === 'number' ? Number(val) : val.toString();\n if (val === null || typeof val !== 'object') return val;\n if (val instanceof Date) return val.toISOString();\n\n const existing = paths.get(val);\n if (existing !== undefined) return { $ref: existing };\n paths.set(val, jsonPath(path));\n\n if (Array.isArray(val)) {\n return val.map((item, i) => walk(item, [...path, i]));\n }\n const rec = val as Record<string, unknown>;\n const obj: Record<string, unknown> = {};\n for (const k of Object.keys(rec)) {\n assignOwn(obj, k, walk(rec[k], [...path, k]));\n }\n return obj;\n };\n\n return walk(value, []);\n}\n\n/**\n * Inverse of {@link decycleValue}: resolve `{ \"$ref\": \"$...\" }` pointers back\n * into the live object graph (mutates and returns the parsed input).\n */\nexport function retrocycle<T>(root: T): T {\n const refRe = /^\\$(?:\\[(?:\\d+|\"(?:[^\"\\\\]|\\\\.)*\")\\])*$/;\n\n const UNRESOLVED = Symbol('unresolved');\n const resolve = (path: string): unknown => {\n // Parse the JSONPath segments back out.\n const segs: Array<string | number> = [];\n const partRe = /\\[(\\d+|\"(?:[^\"\\\\]|\\\\.)*\")\\]/g;\n let m: RegExpExecArray | null;\n while ((m = partRe.exec(path)) !== null) {\n const raw = m[1]!;\n segs.push(raw.startsWith('\"') ? (JSON.parse(raw) as string) : Number(raw));\n }\n let node: unknown = root;\n for (const s of segs) {\n if (node === null || typeof node !== 'object') return UNRESOLVED;\n if (!Object.prototype.hasOwnProperty.call(node, s)) return UNRESOLVED;\n node = (node as Record<string | number, unknown>)[s];\n }\n return node;\n };\n\n const walk = (val: unknown): void => {\n if (val === null || typeof val !== 'object') return;\n const rec = val as Record<string, unknown>;\n for (const k of Object.keys(rec)) {\n const child = rec[k];\n if (\n child !== null &&\n typeof child === 'object' &&\n typeof (child as { $ref?: unknown }).$ref === 'string' &&\n refRe.test((child as { $ref: string }).$ref)\n ) {\n const target = resolve((child as { $ref: string }).$ref);\n if (target === UNRESOLVED) walk(child);\n else assignOwn(rec, k, target);\n } else {\n walk(child);\n }\n }\n };\n\n walk(root);\n return root;\n}\n\n/**\n * `JSON.stringify` for log output. Takes the plain fast path first and only\n * falls back to {@link safeStringify} when that throws (a cycle, a BigInt, a\n * throwing `toJSON`), so a bad payload costs nothing until it shows up.\n * Never throws: if even the safe walk fails, the value is replaced by a marker.\n */\nexport function stringifyForLog(value: unknown): string {\n try {\n return JSON.stringify(value);\n } catch {\n try {\n return safeStringify(value);\n } catch (error) {\n const reason = error instanceof Error ? error.message : String(error);\n return JSON.stringify(`[Unserializable: ${reason}]`);\n }\n }\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { g as LogEntry } from "./index-BSTtFcQ6.mjs";
1
+ import { g as LogEntry } from "./index-BAkPHp5D.mjs";
2
2
  /**
3
3
  * Search filter options
4
4
  */
@@ -795,4 +795,4 @@ declare class PatternRecognitionEngine {
795
795
  private doesLogMatchPattern;
796
796
  }
797
797
  export { SearchStats as A, SearchFilters as C, SearchPreset as D, SearchOptions as E, SuggestionType as F, TimeRange as I, TimelineEvent as L, SemanticIndex as M, SimilarLog as N, SearchQuery as O, SortField as P, RelativeTime as S, SearchMatch as T, ParsedNLQuery as _, ILogSearchEngine as a, RelatedLog as b, SearchManager as c, CorrelatedLogs as d, EntityType as f, LogPattern as g, LogCorrelationSummary as h, BasicSearchEngine as i, SearchSuggestion as j, SearchResult as k, SearchManagerConfig as l, LogCluster as m, NLPSearchEngine as n, BasicLogIndexer as o, ExportOptions as p, CorrelationEngine as r, ILogIndexer as s, PatternRecognitionEngine as t, AnomalyDetection as u, QueryEntity as v, SearchHighlight as w, RelationshipType as x, QueryIntent as y };
798
- //# sourceMappingURL=search-DA3ft3X5.d.mts.map
798
+ //# sourceMappingURL=search-D-8HJADE.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"search-DA3ft3X5.d.mts","names":[],"sources":["../src/search/types/search.types.ts","../src/search/search-manager.ts","../src/search/core/log-indexer.interface.ts","../src/search/core/basic-log-indexer.ts","../src/search/core/search-engine.interface.ts","../src/search/core/basic-search-engine.ts","../src/search/engines/correlation-engine.ts","../src/search/engines/nlp-search-engine.ts","../src/search/engines/pattern-recognition-engine.ts"],"mappings":";;;;UASiB;EACf;EACA;EACA;EACA,YAAY;EACZ;EACA;EACA;EACA;EACA;EACA;EACA,eAAe;;;;;UAMA;EACf,OAAO;EACP,MAAM;EACN,WAAW;;;;;UAMI;EACf;EACA;;;;;UAMe;EACf,KAAK;EACL;EACA,aAAa;EACb,UAAU;EACV,UAAU;EACV,cAAc;;;;;UAMC;EACf;EACA;EACA;;;;;UAMe;EACf;EACA;EACA;EACA;;;;;UAMe;EACf,KAAK;EACL,cAAc;EACd;;;;;KAMU;;;;UAWK;EACf;EACA;EACA,MAAM;EACN,UAAU;EACV,UAAU;;;;;UAMK;EACf,WAAW;EACX,KAAK;EACL;EACA;;;;;UAMe;EACf;EACA;EACA;EACA;EACA;EACA,eAAe;;;;;UAMA;EACf,KAAK;EACL;EACA;EACA;;;;;UAMe;EACf;EACA,UAAU;EACV,UAAU;EACV,WAAW;EACX;;;;;UAMe;EACf;EACA;EACA,SAAS;EACT;EACA;EACA;EACA;EACA;EACA;EACA;;;;;KAMU;;;;UAKK;EACf;EACA,MAAM;EACN;EACA;EACA,WAAW;;;;;KAMD;;;;UAMK;EACf;EACA;EACA;EACA;EACA;;;;;UAMe;EACf;EACA;EACA,aAAa;EACb,aAAa;EACb,WAAW;;;;;UAMI;EACf;EACA;EACA,MAAM;EACN;EACA;EACA;;;;;UAMe;EACf;EACA;EACA,QAAQ;EACR,UAAU;EACV;EACA,UAAU;EACV;EACA;;;;;UAMe;EACf,KAAK;EACL;EACA;EACA;EACA;;;;;UAMe;EACf;;EAEA;EACA,QAAQ;EACR,UAAU;EACV,SAAS;EACT,YAAY;EACZ;;;;;KAMU;;;;UAaK;EACf,MAAM;EACN;EACA;EACA;;;;;KAMU;;;;UAMK;EACf;EACA;EACA;EACA;EACA,SAAS;EACT,SAAS;EACT,WAAW;EACX,WAAW;EACX;EACA;;;;;UAMe;EACf;EACA;EACA;EACA;;;;;UCtRe;EACf;EACA;EACA;EACA;EACA;;;;;cAMW;UACH;UACA;UACA;UACA;UACA;EAEI,YAAA,SAAS;;;;EA8Bf,UAAU,MAAM,aAAa;;;;EAa7B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"}
1
+ {"version":3,"file":"search-D-8HJADE.d.mts","names":[],"sources":["../src/search/types/search.types.ts","../src/search/search-manager.ts","../src/search/core/log-indexer.interface.ts","../src/search/core/basic-log-indexer.ts","../src/search/core/search-engine.interface.ts","../src/search/core/basic-search-engine.ts","../src/search/engines/correlation-engine.ts","../src/search/engines/nlp-search-engine.ts","../src/search/engines/pattern-recognition-engine.ts"],"mappings":";;;;UASiB;EACf;EACA;EACA;EACA,YAAY;EACZ;EACA;EACA;EACA;EACA;EACA;EACA,eAAe;;;;;UAMA;EACf,OAAO;EACP,MAAM;EACN,WAAW;;;;;UAMI;EACf;EACA;;;;;UAMe;EACf,KAAK;EACL;EACA,aAAa;EACb,UAAU;EACV,UAAU;EACV,cAAc;;;;;UAMC;EACf;EACA;EACA;;;;;UAMe;EACf;EACA;EACA;EACA;;;;;UAMe;EACf,KAAK;EACL,cAAc;EACd;;;;;KAMU;;;;UAWK;EACf;EACA;EACA,MAAM;EACN,UAAU;EACV,UAAU;;;;;UAMK;EACf,WAAW;EACX,KAAK;EACL;EACA;;;;;UAMe;EACf;EACA;EACA;EACA;EACA;EACA,eAAe;;;;;UAMA;EACf,KAAK;EACL;EACA;EACA;;;;;UAMe;EACf;EACA,UAAU;EACV,UAAU;EACV,WAAW;EACX;;;;;UAMe;EACf;EACA;EACA,SAAS;EACT;EACA;EACA;EACA;EACA;EACA;EACA;;;;;KAMU;;;;UAKK;EACf;EACA,MAAM;EACN;EACA;EACA,WAAW;;;;;KAMD;;;;UAMK;EACf;EACA;EACA;EACA;EACA;;;;;UAMe;EACf;EACA;EACA,aAAa;EACb,aAAa;EACb,WAAW;;;;;UAMI;EACf;EACA;EACA,MAAM;EACN;EACA;EACA;;;;;UAMe;EACf;EACA;EACA,QAAQ;EACR,UAAU;EACV;EACA,UAAU;EACV;EACA;;;;;UAMe;EACf,KAAK;EACL;EACA;EACA;EACA;;;;;UAMe;EACf;;EAEA;EACA,QAAQ;EACR,UAAU;EACV,SAAS;EACT,YAAY;EACZ;;;;;KAMU;;;;UAaK;EACf,MAAM;EACN;EACA;EACA;;;;;KAMU;;;;UAMK;EACf;EACA;EACA;EACA;EACA,SAAS;EACT,SAAS;EACT,WAAW;EACX,WAAW;EACX;EACA;;;;;UAMe;EACf;EACA;EACA;EACA;;;;;UCtRe;EACf;EACA;EACA;EACA;EACA;;;;;cAMW;UACH;UACA;UACA;UACA;UACA;EAEI,YAAA,SAAS;;;;EA8Bf,UAAU,MAAM,aAAa;;;;EAa7B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"}
@@ -1,4 +1,4 @@
1
- import { g as LogEntry } from "./index-CFDGkI8n.js";
1
+ import { g as LogEntry } from "./index-e7LowmAu.js";
2
2
  /**
3
3
  * Search filter options
4
4
  */
@@ -795,4 +795,4 @@ declare class PatternRecognitionEngine {
795
795
  private doesLogMatchPattern;
796
796
  }
797
797
  export { SearchStats as A, SearchFilters as C, SearchPreset as D, SearchOptions as E, SuggestionType as F, TimeRange as I, TimelineEvent as L, SemanticIndex as M, SimilarLog as N, SearchQuery as O, SortField as P, RelativeTime as S, SearchMatch as T, ParsedNLQuery as _, ILogSearchEngine as a, RelatedLog as b, SearchManager as c, CorrelatedLogs as d, EntityType as f, LogPattern as g, LogCorrelationSummary as h, BasicSearchEngine as i, SearchSuggestion as j, SearchResult as k, SearchManagerConfig as l, LogCluster as m, NLPSearchEngine as n, BasicLogIndexer as o, ExportOptions as p, CorrelationEngine as r, ILogIndexer as s, PatternRecognitionEngine as t, AnomalyDetection as u, QueryEntity as v, SearchHighlight as w, RelationshipType as x, QueryIntent as y };
798
- //# sourceMappingURL=search-DEl3Pe47.d.ts.map
798
+ //# sourceMappingURL=search-DPwTKPve.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"search-DEl3Pe47.d.ts","names":[],"sources":["../src/search/types/search.types.ts","../src/search/search-manager.ts","../src/search/core/log-indexer.interface.ts","../src/search/core/basic-log-indexer.ts","../src/search/core/search-engine.interface.ts","../src/search/core/basic-search-engine.ts","../src/search/engines/correlation-engine.ts","../src/search/engines/nlp-search-engine.ts","../src/search/engines/pattern-recognition-engine.ts"],"mappings":";;;;UASiB;EACf;EACA;EACA;EACA,YAAY;EACZ;EACA;EACA;EACA;EACA;EACA;EACA,eAAe;;;;;UAMA;EACf,OAAO;EACP,MAAM;EACN,WAAW;;;;;UAMI;EACf;EACA;;;;;UAMe;EACf,KAAK;EACL;EACA,aAAa;EACb,UAAU;EACV,UAAU;EACV,cAAc;;;;;UAMC;EACf;EACA;EACA;;;;;UAMe;EACf;EACA;EACA;EACA;;;;;UAMe;EACf,KAAK;EACL,cAAc;EACd;;;;;KAMU;;;;UAWK;EACf;EACA;EACA,MAAM;EACN,UAAU;EACV,UAAU;;;;;UAMK;EACf,WAAW;EACX,KAAK;EACL;EACA;;;;;UAMe;EACf;EACA;EACA;EACA;EACA;EACA,eAAe;;;;;UAMA;EACf,KAAK;EACL;EACA;EACA;;;;;UAMe;EACf;EACA,UAAU;EACV,UAAU;EACV,WAAW;EACX;;;;;UAMe;EACf;EACA;EACA,SAAS;EACT;EACA;EACA;EACA;EACA;EACA;EACA;;;;;KAMU;;;;UAKK;EACf;EACA,MAAM;EACN;EACA;EACA,WAAW;;;;;KAMD;;;;UAMK;EACf;EACA;EACA;EACA;EACA;;;;;UAMe;EACf;EACA;EACA,aAAa;EACb,aAAa;EACb,WAAW;;;;;UAMI;EACf;EACA;EACA,MAAM;EACN;EACA;EACA;;;;;UAMe;EACf;EACA;EACA,QAAQ;EACR,UAAU;EACV;EACA,UAAU;EACV;EACA;;;;;UAMe;EACf,KAAK;EACL;EACA;EACA;EACA;;;;;UAMe;EACf;;EAEA;EACA,QAAQ;EACR,UAAU;EACV,SAAS;EACT,YAAY;EACZ;;;;;KAMU;;;;UAaK;EACf,MAAM;EACN;EACA;EACA;;;;;KAMU;;;;UAMK;EACf;EACA;EACA;EACA;EACA,SAAS;EACT,SAAS;EACT,WAAW;EACX,WAAW;EACX;EACA;;;;;UAMe;EACf;EACA;EACA;EACA;;;;;UCtRe;EACf;EACA;EACA;EACA;EACA;;;;;cAMW;UACH;UACA;UACA;UACA;UACA;EAEI,YAAA,SAAS;;;;EA8Bf,UAAU,MAAM,aAAa;;;;EAa7B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"}
1
+ {"version":3,"file":"search-DPwTKPve.d.ts","names":[],"sources":["../src/search/types/search.types.ts","../src/search/search-manager.ts","../src/search/core/log-indexer.interface.ts","../src/search/core/basic-log-indexer.ts","../src/search/core/search-engine.interface.ts","../src/search/core/basic-search-engine.ts","../src/search/engines/correlation-engine.ts","../src/search/engines/nlp-search-engine.ts","../src/search/engines/pattern-recognition-engine.ts"],"mappings":";;;;UASiB;EACf;EACA;EACA;EACA,YAAY;EACZ;EACA;EACA;EACA;EACA;EACA;EACA,eAAe;;;;;UAMA;EACf,OAAO;EACP,MAAM;EACN,WAAW;;;;;UAMI;EACf;EACA;;;;;UAMe;EACf,KAAK;EACL;EACA,aAAa;EACb,UAAU;EACV,UAAU;EACV,cAAc;;;;;UAMC;EACf;EACA;EACA;;;;;UAMe;EACf;EACA;EACA;EACA;;;;;UAMe;EACf,KAAK;EACL,cAAc;EACd;;;;;KAMU;;;;UAWK;EACf;EACA;EACA,MAAM;EACN,UAAU;EACV,UAAU;;;;;UAMK;EACf,WAAW;EACX,KAAK;EACL;EACA;;;;;UAMe;EACf;EACA;EACA;EACA;EACA;EACA,eAAe;;;;;UAMA;EACf,KAAK;EACL;EACA;EACA;;;;;UAMe;EACf;EACA,UAAU;EACV,UAAU;EACV,WAAW;EACX;;;;;UAMe;EACf;EACA;EACA,SAAS;EACT;EACA;EACA;EACA;EACA;EACA;EACA;;;;;KAMU;;;;UAKK;EACf;EACA,MAAM;EACN;EACA;EACA,WAAW;;;;;KAMD;;;;UAMK;EACf;EACA;EACA;EACA;EACA;;;;;UAMe;EACf;EACA;EACA,aAAa;EACb,aAAa;EACb,WAAW;;;;;UAMI;EACf;EACA;EACA,MAAM;EACN;EACA;EACA;;;;;UAMe;EACf;EACA;EACA,QAAQ;EACR,UAAU;EACV;EACA,UAAU;EACV;EACA;;;;;UAMe;EACf,KAAK;EACL;EACA;EACA;EACA;;;;;UAMe;EACf;;EAEA;EACA,QAAQ;EACR,UAAU;EACV,SAAS;EACT,YAAY;EACZ;;;;;KAMU;;;;UAaK;EACf,MAAM;EACN;EACA;EACA;;;;;KAMU;;;;UAMK;EACf;EACA;EACA;EACA;EACA,SAAS;EACT,SAAS;EACT,WAAW;EACX,WAAW;EACX;EACA;;;;;UAMe;EACf;EACA;EACA;EACA;;;;;UCtRe;EACf;EACA;EACA;EACA;EACA;;;;;cAMW;UACH;UACA;UACA;UACA;UACA;EAEI,YAAA,SAAS;;;;EA8Bf,UAAU,MAAM,aAAa;;;;EAa7B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"}
package/dist/search.d.mts CHANGED
@@ -1,2 +1,2 @@
1
- import { A as SearchStats, C as SearchFilters, D as SearchPreset, E as SearchOptions, F as SuggestionType, I as TimeRange, L as TimelineEvent, M as SemanticIndex, N as SimilarLog, O as SearchQuery, P as SortField, S as RelativeTime, T as SearchMatch, _ as ParsedNLQuery, a as ILogSearchEngine, b as RelatedLog, c as SearchManager, d as CorrelatedLogs, f as EntityType, g as LogPattern, h as LogCorrelationSummary, i as BasicSearchEngine, j as SearchSuggestion, k as SearchResult, l as SearchManagerConfig, m as LogCluster, n as NLPSearchEngine, o as BasicLogIndexer, p as ExportOptions, r as CorrelationEngine, s as ILogIndexer, t as PatternRecognitionEngine, u as AnomalyDetection, v as QueryEntity, w as SearchHighlight, x as RelationshipType, y as QueryIntent } from "./search-DA3ft3X5.mjs";
1
+ import { A as SearchStats, C as SearchFilters, D as SearchPreset, E as SearchOptions, F as SuggestionType, I as TimeRange, L as TimelineEvent, M as SemanticIndex, N as SimilarLog, O as SearchQuery, P as SortField, S as RelativeTime, T as SearchMatch, _ as ParsedNLQuery, a as ILogSearchEngine, b as RelatedLog, c as SearchManager, d as CorrelatedLogs, f as EntityType, g as LogPattern, h as LogCorrelationSummary, i as BasicSearchEngine, j as SearchSuggestion, k as SearchResult, l as SearchManagerConfig, m as LogCluster, n as NLPSearchEngine, o as BasicLogIndexer, p as ExportOptions, r as CorrelationEngine, s as ILogIndexer, t as PatternRecognitionEngine, u as AnomalyDetection, v as QueryEntity, w as SearchHighlight, x as RelationshipType, y as QueryIntent } from "./search-D-8HJADE.mjs";
2
2
  export { type AnomalyDetection, BasicLogIndexer, BasicSearchEngine, type CorrelatedLogs, CorrelationEngine, type EntityType, type ExportOptions, type ILogIndexer, type ILogSearchEngine, type LogCluster, type LogCorrelationSummary, type LogPattern, NLPSearchEngine, type ParsedNLQuery, PatternRecognitionEngine, type QueryEntity, type QueryIntent, type RelatedLog, type RelationshipType, type RelativeTime, type SearchFilters, type SearchHighlight, SearchManager, type SearchManagerConfig, type SearchMatch, type SearchOptions, type SearchPreset, type SearchQuery, type SearchResult, type SearchStats, type SearchSuggestion, type SemanticIndex, type SimilarLog, type SortField, type SuggestionType, type TimeRange, type TimelineEvent };
package/dist/search.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- import { A as SearchStats, C as SearchFilters, D as SearchPreset, E as SearchOptions, F as SuggestionType, I as TimeRange, L as TimelineEvent, M as SemanticIndex, N as SimilarLog, O as SearchQuery, P as SortField, S as RelativeTime, T as SearchMatch, _ as ParsedNLQuery, a as ILogSearchEngine, b as RelatedLog, c as SearchManager, d as CorrelatedLogs, f as EntityType, g as LogPattern, h as LogCorrelationSummary, i as BasicSearchEngine, j as SearchSuggestion, k as SearchResult, l as SearchManagerConfig, m as LogCluster, n as NLPSearchEngine, o as BasicLogIndexer, p as ExportOptions, r as CorrelationEngine, s as ILogIndexer, t as PatternRecognitionEngine, u as AnomalyDetection, v as QueryEntity, w as SearchHighlight, x as RelationshipType, y as QueryIntent } from "./search-DEl3Pe47.js";
1
+ import { A as SearchStats, C as SearchFilters, D as SearchPreset, E as SearchOptions, F as SuggestionType, I as TimeRange, L as TimelineEvent, M as SemanticIndex, N as SimilarLog, O as SearchQuery, P as SortField, S as RelativeTime, T as SearchMatch, _ as ParsedNLQuery, a as ILogSearchEngine, b as RelatedLog, c as SearchManager, d as CorrelatedLogs, f as EntityType, g as LogPattern, h as LogCorrelationSummary, i as BasicSearchEngine, j as SearchSuggestion, k as SearchResult, l as SearchManagerConfig, m as LogCluster, n as NLPSearchEngine, o as BasicLogIndexer, p as ExportOptions, r as CorrelationEngine, s as ILogIndexer, t as PatternRecognitionEngine, u as AnomalyDetection, v as QueryEntity, w as SearchHighlight, x as RelationshipType, y as QueryIntent } from "./search-DPwTKPve.js";
2
2
  export { type AnomalyDetection, BasicLogIndexer, BasicSearchEngine, type CorrelatedLogs, CorrelationEngine, type EntityType, type ExportOptions, type ILogIndexer, type ILogSearchEngine, type LogCluster, type LogCorrelationSummary, type LogPattern, NLPSearchEngine, type ParsedNLQuery, PatternRecognitionEngine, type QueryEntity, type QueryIntent, type RelatedLog, type RelationshipType, type RelativeTime, type SearchFilters, type SearchHighlight, SearchManager, type SearchManagerConfig, type SearchMatch, type SearchOptions, type SearchPreset, type SearchQuery, type SearchResult, type SearchStats, type SearchSuggestion, type SemanticIndex, type SimilarLog, type SortField, type SuggestionType, type TimeRange, type TimelineEvent };
@@ -19,8 +19,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
19
19
  value: mod,
20
20
  enumerable: true
21
21
  }) : target, mod));
22
- const require_own_property = require("./own-property-BWkibepN.js");
23
- const require_internal_log = require("./internal-log-By4Govmu.js");
22
+ const require_sensitive_names = require("./sensitive-names-CHMowujD.js");
24
23
  // src/transports/secret-config.ts
25
24
  /**
26
25
  * Keeps credentials out of serialized transport output and error text.
@@ -42,8 +41,8 @@ const USERINFO = /(\b[a-z][a-z0-9+.-]*:\/\/)[^\s/?#]*@/gi;
42
41
  function normalizeName(name) {
43
42
  return name.toLowerCase().replaceAll("-", "").replaceAll("_", "");
44
43
  }
45
- const SECRET_NAMES = [...require_internal_log.SENSITIVE_KEY_NAMES, ...require_internal_log.TRANSPORT_CONFIG_SECRET_NAMES].map(normalizeName);
46
- const QUERY_NAMES = new Set(require_internal_log.DEFAULT_REDACT_QUERY_PARAMS.map(normalizeName));
44
+ const SECRET_NAMES = [...require_sensitive_names.SENSITIVE_KEY_NAMES, ...require_sensitive_names.TRANSPORT_CONFIG_SECRET_NAMES].map(normalizeName);
45
+ const QUERY_NAMES = new Set(require_sensitive_names.DEFAULT_REDACT_QUERY_PARAMS.map(normalizeName));
47
46
  /** Exact match for short names (`key`, `pfx`), suffix match for longer ones (`azureClientSecret`). */
48
47
  function isSecretKey(key) {
49
48
  const name = normalizeName(key);
@@ -90,9 +89,9 @@ function redactConfig(value, depth = 0, key = "") {
90
89
  if (Array.isArray(value)) return depth >= MAX_DEPTH ? "[Array]" : value.map((v) => redactConfig(v, depth + 1, key));
91
90
  if (!isPlainObject(value) || depth >= MAX_DEPTH) return `[${((_value$constructor = value.constructor) === null || _value$constructor === void 0 ? void 0 : _value$constructor.name) ?? "Object"}]`;
92
91
  const out = {};
93
- for (const [name, inner] of Object.entries(value)) if (isSecretKey(name)) require_own_property.assignOwn(out, name, inner === void 0 ? void 0 : REDACTED);
94
- else if (name.toLowerCase() === "headers") require_own_property.assignOwn(out, name, redactHeaders(inner));
95
- else require_own_property.assignOwn(out, name, redactConfig(inner, depth + 1, name));
92
+ for (const [name, inner] of Object.entries(value)) if (isSecretKey(name)) require_sensitive_names.assignOwn(out, name, inner === void 0 ? void 0 : REDACTED);
93
+ else if (name.toLowerCase() === "headers") require_sensitive_names.assignOwn(out, name, redactHeaders(inner));
94
+ else require_sensitive_names.assignOwn(out, name, redactConfig(inner, depth + 1, name));
96
95
  return out;
97
96
  }
98
97
  const hiddenKeys = /* @__PURE__ */ new WeakMap();
@@ -269,4 +268,4 @@ Object.defineProperty(exports, "urlSecrets", {
269
268
  }
270
269
  });
271
270
 
272
- //# sourceMappingURL=secret-config-CmK2wVkr.js.map
271
+ //# sourceMappingURL=secret-config-BvFl2dC8.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"secret-config-CmK2wVkr.js","names":["SENSITIVE_KEY_NAMES","TRANSPORT_CONFIG_SECRET_NAMES","DEFAULT_REDACT_QUERY_PARAMS"],"sources":["../src/transports/secret-config.ts"],"sourcesContent":["/**\n * Keeps credentials out of serialized transport output and error text.\n *\n * `protectSecrets()` replaces each listed field with a non-enumerable accessor backed\n * by a WeakMap, whether or not the field is assigned yet, so later assignments (a\n * connection opened on first write, a refreshed token) stay hidden too. It also\n * installs `toJSON()` and a Node inspect hook returning a redacted view: scalar\n * fields stay for debugging, secret-looking keys become '[REDACTED]', URLs lose\n * userinfo, query and fragment. No Node imports, so browser bundles can use it.\n */\n\nimport { assignOwn } from '../utils/own-property';\nimport {\n DEFAULT_REDACT_QUERY_PARAMS,\n SENSITIVE_KEY_NAMES,\n TRANSPORT_CONFIG_SECRET_NAMES,\n} from '../utils/sensitive-names';\n\nexport const REDACTED = '[REDACTED]';\n\nconst INSPECT_CUSTOM = Symbol.for('nodejs.util.inspect.custom');\nconst MAX_DEPTH = 4;\nconst MIN_SECRET_LENGTH = 4;\nconst SCHEME_PREFIX = /^[a-z][a-z0-9+.-]*:\\/\\//i;\n/** `scheme://userinfo@`: userinfo runs to the LAST `@` before the path, so `p@ss` is covered. */\nconst USERINFO = /(\\b[a-z][a-z0-9+.-]*:\\/\\/)[^\\s/?#]*@/gi;\n\nfunction normalizeName(name: string): string {\n return name.toLowerCase().replaceAll('-', '').replaceAll('_', '');\n}\n\nconst SECRET_NAMES = [...SENSITIVE_KEY_NAMES, ...TRANSPORT_CONFIG_SECRET_NAMES].map(normalizeName);\nconst QUERY_NAMES = new Set(DEFAULT_REDACT_QUERY_PARAMS.map(normalizeName));\n\n/** Exact match for short names (`key`, `pfx`), suffix match for longer ones (`azureClientSecret`). */\nfunction isSecretKey(key: string): boolean {\n const name = normalizeName(key);\n return SECRET_NAMES.some((n) => name === n || (n.length >= 5 && name.endsWith(n)));\n}\n\nfunction isUrlKey(key: string): boolean {\n return /url|uri|endpoint|href/i.test(key);\n}\n\nfunction isPlainObject(value: object): boolean {\n const proto = Object.getPrototypeOf(value) as unknown;\n return proto === Object.prototype || proto === null;\n}\n\nfunction safeDecode(value: string): string {\n try {\n return decodeURIComponent(value.replaceAll('+', ' '));\n } catch {\n return value;\n }\n}\n\n/** Absolute URL: `scheme://host` only. Relative or unparseable: path kept, query and fragment cut. */\nexport function redactUrl(raw: string | URL): string {\n if (typeof raw !== 'string') return `${raw.protocol}//${raw.host}`;\n if (SCHEME_PREFIX.test(raw)) {\n try {\n const url = new URL(raw);\n return `${url.protocol}//${url.host}`;\n } catch {\n return REDACTED;\n }\n }\n return raw.split(/[?#]/, 1)[0] ?? '';\n}\n\nfunction redactHeaders(headers: unknown): unknown {\n if (!headers || typeof headers !== 'object') return headers;\n return Object.fromEntries(Object.keys(headers).map((name) => [name, REDACTED]));\n}\n\n/** Redacted deep copy of a config-like value. Never throws, never returns a secret. */\nexport function redactConfig(value: unknown, depth = 0, key = ''): unknown {\n if (value === null || value === undefined) return value;\n if (typeof value === 'string') {\n return SCHEME_PREFIX.test(value) || isUrlKey(key) ? redactUrl(value) : value;\n }\n if (typeof value === 'number' || typeof value === 'boolean') return value;\n if (typeof value === 'function') return '[Function]';\n if (typeof value !== 'object') return '[Unserializable]';\n if (typeof URL !== 'undefined' && value instanceof URL) return redactUrl(value);\n if (Array.isArray(value)) {\n return depth >= MAX_DEPTH ? '[Array]' : value.map((v) => redactConfig(v, depth + 1, key));\n }\n if (!isPlainObject(value) || depth >= MAX_DEPTH)\n return `[${value.constructor?.name ?? 'Object'}]`;\n const out: Record<string, unknown> = {};\n for (const [name, inner] of Object.entries(value)) {\n if (isSecretKey(name)) assignOwn(out, name, inner === undefined ? undefined : REDACTED);\n else if (name.toLowerCase() === 'headers') assignOwn(out, name, redactHeaders(inner));\n else assignOwn(out, name, redactConfig(inner, depth + 1, name));\n }\n return out;\n}\n\n// ── Secret protection ───────────────────────────────────────────────────────\n\nconst hiddenKeys = new WeakMap<object, Set<string>>();\nconst hiddenValues = new WeakMap<object, Map<string, unknown>>();\n\nfunction viewOf(target: object): Record<string, unknown> {\n const hidden = hiddenKeys.get(target) ?? new Set<string>();\n const values = hiddenValues.get(target);\n const view: Record<string, unknown> = { class: target.constructor?.name };\n for (const key of new Set([...Object.keys(target), ...hidden])) {\n const inner = hidden.has(key) ? values?.get(key) : (target as Record<string, unknown>)[key];\n if (isSecretKey(key)) view[key] = inner === undefined ? undefined : REDACTED;\n else if (key.toLowerCase() === 'headers') view[key] = redactHeaders(inner);\n else if (\n inner !== null &&\n typeof inner === 'object' &&\n !hidden.has(key) &&\n !(inner instanceof URL)\n ) {\n view[key] = '[Object]';\n } else if (hidden.has(key) && typeof inner === 'string' && !isUrlKey(key)) {\n view[key] = REDACTED;\n } else view[key] = redactConfig(inner, 0, key);\n }\n return view;\n}\n\n/**\n * Hides `keys` on `target` (assigned or not yet) and gives it a redacted `toJSON()` /\n * inspect view. Fields stay readable and writable. Safe to call more than once.\n * Throws when the target cannot carry the protection (frozen or sealed), instead of\n * silently leaving the secret enumerable.\n */\nexport function protectSecrets(target: object, keys: readonly string[]): void {\n if (!Object.isExtensible(target)) {\n throw new TypeError(\n `protectSecrets: ${target.constructor?.name ?? 'object'} is not extensible`\n );\n }\n let hidden = hiddenKeys.get(target);\n let values = hiddenValues.get(target);\n if (!hidden || !values) {\n hidden = new Set();\n values = new Map();\n hiddenKeys.set(target, hidden);\n hiddenValues.set(target, values);\n const view = (): Record<string, unknown> => viewOf(target);\n Object.defineProperty(target, 'toJSON', { value: view, enumerable: false, configurable: true });\n Object.defineProperty(target, INSPECT_CUSTOM, {\n value: view,\n enumerable: false,\n configurable: true,\n });\n }\n const store = values;\n for (const key of keys) {\n if (hidden.has(key)) continue;\n const desc = Object.getOwnPropertyDescriptor(target, key);\n if (desc && !desc.configurable) {\n throw new TypeError(`protectSecrets: \"${key}\" is not configurable`);\n }\n if (desc && 'value' in desc) store.set(key, desc.value);\n hidden.add(key);\n Object.defineProperty(target, key, {\n enumerable: false,\n configurable: true,\n get: () => store.get(key),\n set: (next: unknown) => void store.set(key, next),\n });\n }\n}\n\n// ── Scrubbing error text ────────────────────────────────────────────────────\n\n/** The raw, decoded and percent-encoded spellings of a secret. */\nfunction variantsOf(secret: string): string[] {\n return [secret, safeDecode(secret), encodeURIComponent(secret), encodeURI(secret)];\n}\n\n/** Secret parts of a URL string: the password and the values of sensitive query parameters. */\nexport function urlSecrets(raw: string | URL): string[] {\n const text = typeof raw === 'string' ? raw : raw.href;\n const out: string[] = [];\n const userinfo = new RegExp(USERINFO.source, 'i').exec(text);\n if (userinfo) {\n const info = text.slice(userinfo[1]!.length, userinfo.index + userinfo[0].length - 1);\n const colon = info.indexOf(':');\n if (colon !== -1) out.push(info.slice(colon + 1));\n }\n const queryStart = text.indexOf('?');\n if (queryStart !== -1) {\n const query = text.slice(queryStart + 1).split('#', 1)[0] ?? '';\n for (const pair of query.split('&')) {\n const eq = pair.indexOf('=');\n if (eq > 0 && QUERY_NAMES.has(normalizeName(safeDecode(pair.slice(0, eq))))) {\n out.push(pair.slice(eq + 1));\n }\n }\n }\n return out.flatMap(variantsOf);\n}\n\n/** Every secret string held in a config-like value: secret-keyed values, header values, URL secrets. */\nexport function collectSecrets(value: unknown, depth = 0, key = ''): string[] {\n if (typeof value === 'string') {\n if (isSecretKey(key)) return [value];\n return SCHEME_PREFIX.test(value) || isUrlKey(key) ? urlSecrets(value) : [];\n }\n if (!value || typeof value !== 'object' || depth > MAX_DEPTH) return [];\n if (typeof URL !== 'undefined' && value instanceof URL) return urlSecrets(value);\n if (Array.isArray(value)) return value.flatMap((v) => collectSecrets(v, depth + 1, key));\n if (!isPlainObject(value)) return [];\n const isHeaders = key.toLowerCase() === 'headers';\n return Object.entries(value).flatMap(([name, inner]) => {\n if (isHeaders && typeof inner === 'string') return [inner];\n if (isSecretKey(name) && inner !== null && typeof inner === 'object') {\n return collectSecrets(inner, depth + 1, 'secret');\n }\n return collectSecrets(inner, depth + 1, name);\n });\n}\n\n/** Replaces URL userinfo and every spelling of the given secret values in `text`. */\nexport function scrubSecrets(text: string, secrets: readonly (string | undefined)[]): string {\n let out = text.replace(USERINFO, `$1${REDACTED}@`);\n const all = new Set(\n secrets.flatMap((s) => (s && s.length >= MIN_SECRET_LENGTH ? variantsOf(s) : []))\n );\n for (const secret of [...all].sort((a, b) => b.length - a.length)) {\n if (secret.length >= MIN_SECRET_LENGTH) out = out.split(secret).join(REDACTED);\n }\n return out;\n}\n\n/** Scrubs message, stack and the cause chain of `err` in place; returns it. */\nexport function scrubError<T>(err: T, secrets: readonly (string | undefined)[], depth = 0): T {\n if (!(err instanceof Error) || depth > 3) return err;\n try {\n err.message = scrubSecrets(err.message, secrets);\n if (err.stack) err.stack = scrubSecrets(err.stack, secrets);\n scrubError((err as { cause?: unknown }).cause, secrets, depth + 1);\n } catch {\n /* frozen error: leave as is */\n }\n return err;\n}\n\n/** A `.catch()` handler that scrubs the secrets from the error, then rethrows it. */\nexport function scrubbing(secrets: () => (string | undefined)[]): (err: unknown) => never {\n return (err) => {\n throw scrubError(err, secrets());\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"secret-config-BvFl2dC8.js","names":["SENSITIVE_KEY_NAMES","TRANSPORT_CONFIG_SECRET_NAMES","DEFAULT_REDACT_QUERY_PARAMS"],"sources":["../src/transports/secret-config.ts"],"sourcesContent":["/**\n * Keeps credentials out of serialized transport output and error text.\n *\n * `protectSecrets()` replaces each listed field with a non-enumerable accessor backed\n * by a WeakMap, whether or not the field is assigned yet, so later assignments (a\n * connection opened on first write, a refreshed token) stay hidden too. It also\n * installs `toJSON()` and a Node inspect hook returning a redacted view: scalar\n * fields stay for debugging, secret-looking keys become '[REDACTED]', URLs lose\n * userinfo, query and fragment. No Node imports, so browser bundles can use it.\n */\n\nimport { assignOwn } from '../utils/own-property';\nimport {\n DEFAULT_REDACT_QUERY_PARAMS,\n SENSITIVE_KEY_NAMES,\n TRANSPORT_CONFIG_SECRET_NAMES,\n} from '../utils/sensitive-names';\n\nexport const REDACTED = '[REDACTED]';\n\nconst INSPECT_CUSTOM = Symbol.for('nodejs.util.inspect.custom');\nconst MAX_DEPTH = 4;\nconst MIN_SECRET_LENGTH = 4;\nconst SCHEME_PREFIX = /^[a-z][a-z0-9+.-]*:\\/\\//i;\n/** `scheme://userinfo@`: userinfo runs to the LAST `@` before the path, so `p@ss` is covered. */\nconst USERINFO = /(\\b[a-z][a-z0-9+.-]*:\\/\\/)[^\\s/?#]*@/gi;\n\nfunction normalizeName(name: string): string {\n return name.toLowerCase().replaceAll('-', '').replaceAll('_', '');\n}\n\nconst SECRET_NAMES = [...SENSITIVE_KEY_NAMES, ...TRANSPORT_CONFIG_SECRET_NAMES].map(normalizeName);\nconst QUERY_NAMES = new Set(DEFAULT_REDACT_QUERY_PARAMS.map(normalizeName));\n\n/** Exact match for short names (`key`, `pfx`), suffix match for longer ones (`azureClientSecret`). */\nfunction isSecretKey(key: string): boolean {\n const name = normalizeName(key);\n return SECRET_NAMES.some((n) => name === n || (n.length >= 5 && name.endsWith(n)));\n}\n\nfunction isUrlKey(key: string): boolean {\n return /url|uri|endpoint|href/i.test(key);\n}\n\nfunction isPlainObject(value: object): boolean {\n const proto = Object.getPrototypeOf(value) as unknown;\n return proto === Object.prototype || proto === null;\n}\n\nfunction safeDecode(value: string): string {\n try {\n return decodeURIComponent(value.replaceAll('+', ' '));\n } catch {\n return value;\n }\n}\n\n/** Absolute URL: `scheme://host` only. Relative or unparseable: path kept, query and fragment cut. */\nexport function redactUrl(raw: string | URL): string {\n if (typeof raw !== 'string') return `${raw.protocol}//${raw.host}`;\n if (SCHEME_PREFIX.test(raw)) {\n try {\n const url = new URL(raw);\n return `${url.protocol}//${url.host}`;\n } catch {\n return REDACTED;\n }\n }\n return raw.split(/[?#]/, 1)[0] ?? '';\n}\n\nfunction redactHeaders(headers: unknown): unknown {\n if (!headers || typeof headers !== 'object') return headers;\n return Object.fromEntries(Object.keys(headers).map((name) => [name, REDACTED]));\n}\n\n/** Redacted deep copy of a config-like value. Never throws, never returns a secret. */\nexport function redactConfig(value: unknown, depth = 0, key = ''): unknown {\n if (value === null || value === undefined) return value;\n if (typeof value === 'string') {\n return SCHEME_PREFIX.test(value) || isUrlKey(key) ? redactUrl(value) : value;\n }\n if (typeof value === 'number' || typeof value === 'boolean') return value;\n if (typeof value === 'function') return '[Function]';\n if (typeof value !== 'object') return '[Unserializable]';\n if (typeof URL !== 'undefined' && value instanceof URL) return redactUrl(value);\n if (Array.isArray(value)) {\n return depth >= MAX_DEPTH ? '[Array]' : value.map((v) => redactConfig(v, depth + 1, key));\n }\n if (!isPlainObject(value) || depth >= MAX_DEPTH)\n return `[${value.constructor?.name ?? 'Object'}]`;\n const out: Record<string, unknown> = {};\n for (const [name, inner] of Object.entries(value)) {\n if (isSecretKey(name)) assignOwn(out, name, inner === undefined ? undefined : REDACTED);\n else if (name.toLowerCase() === 'headers') assignOwn(out, name, redactHeaders(inner));\n else assignOwn(out, name, redactConfig(inner, depth + 1, name));\n }\n return out;\n}\n\n// ── Secret protection ───────────────────────────────────────────────────────\n\nconst hiddenKeys = new WeakMap<object, Set<string>>();\nconst hiddenValues = new WeakMap<object, Map<string, unknown>>();\n\nfunction viewOf(target: object): Record<string, unknown> {\n const hidden = hiddenKeys.get(target) ?? new Set<string>();\n const values = hiddenValues.get(target);\n const view: Record<string, unknown> = { class: target.constructor?.name };\n for (const key of new Set([...Object.keys(target), ...hidden])) {\n const inner = hidden.has(key) ? values?.get(key) : (target as Record<string, unknown>)[key];\n if (isSecretKey(key)) view[key] = inner === undefined ? undefined : REDACTED;\n else if (key.toLowerCase() === 'headers') view[key] = redactHeaders(inner);\n else if (\n inner !== null &&\n typeof inner === 'object' &&\n !hidden.has(key) &&\n !(inner instanceof URL)\n ) {\n view[key] = '[Object]';\n } else if (hidden.has(key) && typeof inner === 'string' && !isUrlKey(key)) {\n view[key] = REDACTED;\n } else view[key] = redactConfig(inner, 0, key);\n }\n return view;\n}\n\n/**\n * Hides `keys` on `target` (assigned or not yet) and gives it a redacted `toJSON()` /\n * inspect view. Fields stay readable and writable. Safe to call more than once.\n * Throws when the target cannot carry the protection (frozen or sealed), instead of\n * silently leaving the secret enumerable.\n */\nexport function protectSecrets(target: object, keys: readonly string[]): void {\n if (!Object.isExtensible(target)) {\n throw new TypeError(\n `protectSecrets: ${target.constructor?.name ?? 'object'} is not extensible`\n );\n }\n let hidden = hiddenKeys.get(target);\n let values = hiddenValues.get(target);\n if (!hidden || !values) {\n hidden = new Set();\n values = new Map();\n hiddenKeys.set(target, hidden);\n hiddenValues.set(target, values);\n const view = (): Record<string, unknown> => viewOf(target);\n Object.defineProperty(target, 'toJSON', { value: view, enumerable: false, configurable: true });\n Object.defineProperty(target, INSPECT_CUSTOM, {\n value: view,\n enumerable: false,\n configurable: true,\n });\n }\n const store = values;\n for (const key of keys) {\n if (hidden.has(key)) continue;\n const desc = Object.getOwnPropertyDescriptor(target, key);\n if (desc && !desc.configurable) {\n throw new TypeError(`protectSecrets: \"${key}\" is not configurable`);\n }\n if (desc && 'value' in desc) store.set(key, desc.value);\n hidden.add(key);\n Object.defineProperty(target, key, {\n enumerable: false,\n configurable: true,\n get: () => store.get(key),\n set: (next: unknown) => void store.set(key, next),\n });\n }\n}\n\n// ── Scrubbing error text ────────────────────────────────────────────────────\n\n/** The raw, decoded and percent-encoded spellings of a secret. */\nfunction variantsOf(secret: string): string[] {\n return [secret, safeDecode(secret), encodeURIComponent(secret), encodeURI(secret)];\n}\n\n/** Secret parts of a URL string: the password and the values of sensitive query parameters. */\nexport function urlSecrets(raw: string | URL): string[] {\n const text = typeof raw === 'string' ? raw : raw.href;\n const out: string[] = [];\n const userinfo = new RegExp(USERINFO.source, 'i').exec(text);\n if (userinfo) {\n const info = text.slice(userinfo[1]!.length, userinfo.index + userinfo[0].length - 1);\n const colon = info.indexOf(':');\n if (colon !== -1) out.push(info.slice(colon + 1));\n }\n const queryStart = text.indexOf('?');\n if (queryStart !== -1) {\n const query = text.slice(queryStart + 1).split('#', 1)[0] ?? '';\n for (const pair of query.split('&')) {\n const eq = pair.indexOf('=');\n if (eq > 0 && QUERY_NAMES.has(normalizeName(safeDecode(pair.slice(0, eq))))) {\n out.push(pair.slice(eq + 1));\n }\n }\n }\n return out.flatMap(variantsOf);\n}\n\n/** Every secret string held in a config-like value: secret-keyed values, header values, URL secrets. */\nexport function collectSecrets(value: unknown, depth = 0, key = ''): string[] {\n if (typeof value === 'string') {\n if (isSecretKey(key)) return [value];\n return SCHEME_PREFIX.test(value) || isUrlKey(key) ? urlSecrets(value) : [];\n }\n if (!value || typeof value !== 'object' || depth > MAX_DEPTH) return [];\n if (typeof URL !== 'undefined' && value instanceof URL) return urlSecrets(value);\n if (Array.isArray(value)) return value.flatMap((v) => collectSecrets(v, depth + 1, key));\n if (!isPlainObject(value)) return [];\n const isHeaders = key.toLowerCase() === 'headers';\n return Object.entries(value).flatMap(([name, inner]) => {\n if (isHeaders && typeof inner === 'string') return [inner];\n if (isSecretKey(name) && inner !== null && typeof inner === 'object') {\n return collectSecrets(inner, depth + 1, 'secret');\n }\n return collectSecrets(inner, depth + 1, name);\n });\n}\n\n/** Replaces URL userinfo and every spelling of the given secret values in `text`. */\nexport function scrubSecrets(text: string, secrets: readonly (string | undefined)[]): string {\n let out = text.replace(USERINFO, `$1${REDACTED}@`);\n const all = new Set(\n secrets.flatMap((s) => (s && s.length >= MIN_SECRET_LENGTH ? variantsOf(s) : []))\n );\n for (const secret of [...all].sort((a, b) => b.length - a.length)) {\n if (secret.length >= MIN_SECRET_LENGTH) out = out.split(secret).join(REDACTED);\n }\n return out;\n}\n\n/** Scrubs message, stack and the cause chain of `err` in place; returns it. */\nexport function scrubError<T>(err: T, secrets: readonly (string | undefined)[], depth = 0): T {\n if (!(err instanceof Error) || depth > 3) return err;\n try {\n err.message = scrubSecrets(err.message, secrets);\n if (err.stack) err.stack = scrubSecrets(err.stack, secrets);\n scrubError((err as { cause?: unknown }).cause, secrets, depth + 1);\n } catch {\n /* frozen error: leave as is */\n }\n return err;\n}\n\n/** A `.catch()` handler that scrubs the secrets from the error, then rethrows it. */\nexport function scrubbing(secrets: () => (string | undefined)[]): (err: unknown) => never {\n return (err) => {\n throw scrubError(err, secrets());\n };\n}\n"],"mappings":"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"}
@@ -1,5 +1,4 @@
1
- import { t as assignOwn } from "./own-property-CjFw9qwZ.mjs";
2
- import { a as DEFAULT_REDACT_QUERY_PARAMS, o as SENSITIVE_KEY_NAMES, s as TRANSPORT_CONFIG_SECRET_NAMES } from "./internal-log-Bg4V1cPg.mjs";
1
+ import { i as TRANSPORT_CONFIG_SECRET_NAMES, l as assignOwn, n as DEFAULT_REDACT_QUERY_PARAMS, r as SENSITIVE_KEY_NAMES } from "./sensitive-names-o__1PUUR.mjs";
3
2
  // src/transports/secret-config.ts
4
3
  /**
5
4
  * Keeps credentials out of serialized transport output and error text.
@@ -207,4 +206,4 @@ function scrubbing(secrets) {
207
206
  }
208
207
  export { scrubbing as a, scrubSecrets as i, protectSecrets as n, urlSecrets as o, scrubError as r, collectSecrets as t };
209
208
 
210
- //# sourceMappingURL=secret-config-Dhb6pqTU.mjs.map
209
+ //# sourceMappingURL=secret-config-ByGq7kJd.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"secret-config-Dhb6pqTU.mjs","names":[],"sources":["../src/transports/secret-config.ts"],"sourcesContent":["/**\n * Keeps credentials out of serialized transport output and error text.\n *\n * `protectSecrets()` replaces each listed field with a non-enumerable accessor backed\n * by a WeakMap, whether or not the field is assigned yet, so later assignments (a\n * connection opened on first write, a refreshed token) stay hidden too. It also\n * installs `toJSON()` and a Node inspect hook returning a redacted view: scalar\n * fields stay for debugging, secret-looking keys become '[REDACTED]', URLs lose\n * userinfo, query and fragment. No Node imports, so browser bundles can use it.\n */\n\nimport { assignOwn } from '../utils/own-property';\nimport {\n DEFAULT_REDACT_QUERY_PARAMS,\n SENSITIVE_KEY_NAMES,\n TRANSPORT_CONFIG_SECRET_NAMES,\n} from '../utils/sensitive-names';\n\nexport const REDACTED = '[REDACTED]';\n\nconst INSPECT_CUSTOM = Symbol.for('nodejs.util.inspect.custom');\nconst MAX_DEPTH = 4;\nconst MIN_SECRET_LENGTH = 4;\nconst SCHEME_PREFIX = /^[a-z][a-z0-9+.-]*:\\/\\//i;\n/** `scheme://userinfo@`: userinfo runs to the LAST `@` before the path, so `p@ss` is covered. */\nconst USERINFO = /(\\b[a-z][a-z0-9+.-]*:\\/\\/)[^\\s/?#]*@/gi;\n\nfunction normalizeName(name: string): string {\n return name.toLowerCase().replaceAll('-', '').replaceAll('_', '');\n}\n\nconst SECRET_NAMES = [...SENSITIVE_KEY_NAMES, ...TRANSPORT_CONFIG_SECRET_NAMES].map(normalizeName);\nconst QUERY_NAMES = new Set(DEFAULT_REDACT_QUERY_PARAMS.map(normalizeName));\n\n/** Exact match for short names (`key`, `pfx`), suffix match for longer ones (`azureClientSecret`). */\nfunction isSecretKey(key: string): boolean {\n const name = normalizeName(key);\n return SECRET_NAMES.some((n) => name === n || (n.length >= 5 && name.endsWith(n)));\n}\n\nfunction isUrlKey(key: string): boolean {\n return /url|uri|endpoint|href/i.test(key);\n}\n\nfunction isPlainObject(value: object): boolean {\n const proto = Object.getPrototypeOf(value) as unknown;\n return proto === Object.prototype || proto === null;\n}\n\nfunction safeDecode(value: string): string {\n try {\n return decodeURIComponent(value.replaceAll('+', ' '));\n } catch {\n return value;\n }\n}\n\n/** Absolute URL: `scheme://host` only. Relative or unparseable: path kept, query and fragment cut. */\nexport function redactUrl(raw: string | URL): string {\n if (typeof raw !== 'string') return `${raw.protocol}//${raw.host}`;\n if (SCHEME_PREFIX.test(raw)) {\n try {\n const url = new URL(raw);\n return `${url.protocol}//${url.host}`;\n } catch {\n return REDACTED;\n }\n }\n return raw.split(/[?#]/, 1)[0] ?? '';\n}\n\nfunction redactHeaders(headers: unknown): unknown {\n if (!headers || typeof headers !== 'object') return headers;\n return Object.fromEntries(Object.keys(headers).map((name) => [name, REDACTED]));\n}\n\n/** Redacted deep copy of a config-like value. Never throws, never returns a secret. */\nexport function redactConfig(value: unknown, depth = 0, key = ''): unknown {\n if (value === null || value === undefined) return value;\n if (typeof value === 'string') {\n return SCHEME_PREFIX.test(value) || isUrlKey(key) ? redactUrl(value) : value;\n }\n if (typeof value === 'number' || typeof value === 'boolean') return value;\n if (typeof value === 'function') return '[Function]';\n if (typeof value !== 'object') return '[Unserializable]';\n if (typeof URL !== 'undefined' && value instanceof URL) return redactUrl(value);\n if (Array.isArray(value)) {\n return depth >= MAX_DEPTH ? '[Array]' : value.map((v) => redactConfig(v, depth + 1, key));\n }\n if (!isPlainObject(value) || depth >= MAX_DEPTH)\n return `[${value.constructor?.name ?? 'Object'}]`;\n const out: Record<string, unknown> = {};\n for (const [name, inner] of Object.entries(value)) {\n if (isSecretKey(name)) assignOwn(out, name, inner === undefined ? undefined : REDACTED);\n else if (name.toLowerCase() === 'headers') assignOwn(out, name, redactHeaders(inner));\n else assignOwn(out, name, redactConfig(inner, depth + 1, name));\n }\n return out;\n}\n\n// ── Secret protection ───────────────────────────────────────────────────────\n\nconst hiddenKeys = new WeakMap<object, Set<string>>();\nconst hiddenValues = new WeakMap<object, Map<string, unknown>>();\n\nfunction viewOf(target: object): Record<string, unknown> {\n const hidden = hiddenKeys.get(target) ?? new Set<string>();\n const values = hiddenValues.get(target);\n const view: Record<string, unknown> = { class: target.constructor?.name };\n for (const key of new Set([...Object.keys(target), ...hidden])) {\n const inner = hidden.has(key) ? values?.get(key) : (target as Record<string, unknown>)[key];\n if (isSecretKey(key)) view[key] = inner === undefined ? undefined : REDACTED;\n else if (key.toLowerCase() === 'headers') view[key] = redactHeaders(inner);\n else if (\n inner !== null &&\n typeof inner === 'object' &&\n !hidden.has(key) &&\n !(inner instanceof URL)\n ) {\n view[key] = '[Object]';\n } else if (hidden.has(key) && typeof inner === 'string' && !isUrlKey(key)) {\n view[key] = REDACTED;\n } else view[key] = redactConfig(inner, 0, key);\n }\n return view;\n}\n\n/**\n * Hides `keys` on `target` (assigned or not yet) and gives it a redacted `toJSON()` /\n * inspect view. Fields stay readable and writable. Safe to call more than once.\n * Throws when the target cannot carry the protection (frozen or sealed), instead of\n * silently leaving the secret enumerable.\n */\nexport function protectSecrets(target: object, keys: readonly string[]): void {\n if (!Object.isExtensible(target)) {\n throw new TypeError(\n `protectSecrets: ${target.constructor?.name ?? 'object'} is not extensible`\n );\n }\n let hidden = hiddenKeys.get(target);\n let values = hiddenValues.get(target);\n if (!hidden || !values) {\n hidden = new Set();\n values = new Map();\n hiddenKeys.set(target, hidden);\n hiddenValues.set(target, values);\n const view = (): Record<string, unknown> => viewOf(target);\n Object.defineProperty(target, 'toJSON', { value: view, enumerable: false, configurable: true });\n Object.defineProperty(target, INSPECT_CUSTOM, {\n value: view,\n enumerable: false,\n configurable: true,\n });\n }\n const store = values;\n for (const key of keys) {\n if (hidden.has(key)) continue;\n const desc = Object.getOwnPropertyDescriptor(target, key);\n if (desc && !desc.configurable) {\n throw new TypeError(`protectSecrets: \"${key}\" is not configurable`);\n }\n if (desc && 'value' in desc) store.set(key, desc.value);\n hidden.add(key);\n Object.defineProperty(target, key, {\n enumerable: false,\n configurable: true,\n get: () => store.get(key),\n set: (next: unknown) => void store.set(key, next),\n });\n }\n}\n\n// ── Scrubbing error text ────────────────────────────────────────────────────\n\n/** The raw, decoded and percent-encoded spellings of a secret. */\nfunction variantsOf(secret: string): string[] {\n return [secret, safeDecode(secret), encodeURIComponent(secret), encodeURI(secret)];\n}\n\n/** Secret parts of a URL string: the password and the values of sensitive query parameters. */\nexport function urlSecrets(raw: string | URL): string[] {\n const text = typeof raw === 'string' ? raw : raw.href;\n const out: string[] = [];\n const userinfo = new RegExp(USERINFO.source, 'i').exec(text);\n if (userinfo) {\n const info = text.slice(userinfo[1]!.length, userinfo.index + userinfo[0].length - 1);\n const colon = info.indexOf(':');\n if (colon !== -1) out.push(info.slice(colon + 1));\n }\n const queryStart = text.indexOf('?');\n if (queryStart !== -1) {\n const query = text.slice(queryStart + 1).split('#', 1)[0] ?? '';\n for (const pair of query.split('&')) {\n const eq = pair.indexOf('=');\n if (eq > 0 && QUERY_NAMES.has(normalizeName(safeDecode(pair.slice(0, eq))))) {\n out.push(pair.slice(eq + 1));\n }\n }\n }\n return out.flatMap(variantsOf);\n}\n\n/** Every secret string held in a config-like value: secret-keyed values, header values, URL secrets. */\nexport function collectSecrets(value: unknown, depth = 0, key = ''): string[] {\n if (typeof value === 'string') {\n if (isSecretKey(key)) return [value];\n return SCHEME_PREFIX.test(value) || isUrlKey(key) ? urlSecrets(value) : [];\n }\n if (!value || typeof value !== 'object' || depth > MAX_DEPTH) return [];\n if (typeof URL !== 'undefined' && value instanceof URL) return urlSecrets(value);\n if (Array.isArray(value)) return value.flatMap((v) => collectSecrets(v, depth + 1, key));\n if (!isPlainObject(value)) return [];\n const isHeaders = key.toLowerCase() === 'headers';\n return Object.entries(value).flatMap(([name, inner]) => {\n if (isHeaders && typeof inner === 'string') return [inner];\n if (isSecretKey(name) && inner !== null && typeof inner === 'object') {\n return collectSecrets(inner, depth + 1, 'secret');\n }\n return collectSecrets(inner, depth + 1, name);\n });\n}\n\n/** Replaces URL userinfo and every spelling of the given secret values in `text`. */\nexport function scrubSecrets(text: string, secrets: readonly (string | undefined)[]): string {\n let out = text.replace(USERINFO, `$1${REDACTED}@`);\n const all = new Set(\n secrets.flatMap((s) => (s && s.length >= MIN_SECRET_LENGTH ? variantsOf(s) : []))\n );\n for (const secret of [...all].sort((a, b) => b.length - a.length)) {\n if (secret.length >= MIN_SECRET_LENGTH) out = out.split(secret).join(REDACTED);\n }\n return out;\n}\n\n/** Scrubs message, stack and the cause chain of `err` in place; returns it. */\nexport function scrubError<T>(err: T, secrets: readonly (string | undefined)[], depth = 0): T {\n if (!(err instanceof Error) || depth > 3) return err;\n try {\n err.message = scrubSecrets(err.message, secrets);\n if (err.stack) err.stack = scrubSecrets(err.stack, secrets);\n scrubError((err as { cause?: unknown }).cause, secrets, depth + 1);\n } catch {\n /* frozen error: leave as is */\n }\n return err;\n}\n\n/** A `.catch()` handler that scrubs the secrets from the error, then rethrows it. */\nexport function scrubbing(secrets: () => (string | undefined)[]): (err: unknown) => never {\n return (err) => {\n throw scrubError(err, secrets());\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"secret-config-ByGq7kJd.mjs","names":[],"sources":["../src/transports/secret-config.ts"],"sourcesContent":["/**\n * Keeps credentials out of serialized transport output and error text.\n *\n * `protectSecrets()` replaces each listed field with a non-enumerable accessor backed\n * by a WeakMap, whether or not the field is assigned yet, so later assignments (a\n * connection opened on first write, a refreshed token) stay hidden too. It also\n * installs `toJSON()` and a Node inspect hook returning a redacted view: scalar\n * fields stay for debugging, secret-looking keys become '[REDACTED]', URLs lose\n * userinfo, query and fragment. No Node imports, so browser bundles can use it.\n */\n\nimport { assignOwn } from '../utils/own-property';\nimport {\n DEFAULT_REDACT_QUERY_PARAMS,\n SENSITIVE_KEY_NAMES,\n TRANSPORT_CONFIG_SECRET_NAMES,\n} from '../utils/sensitive-names';\n\nexport const REDACTED = '[REDACTED]';\n\nconst INSPECT_CUSTOM = Symbol.for('nodejs.util.inspect.custom');\nconst MAX_DEPTH = 4;\nconst MIN_SECRET_LENGTH = 4;\nconst SCHEME_PREFIX = /^[a-z][a-z0-9+.-]*:\\/\\//i;\n/** `scheme://userinfo@`: userinfo runs to the LAST `@` before the path, so `p@ss` is covered. */\nconst USERINFO = /(\\b[a-z][a-z0-9+.-]*:\\/\\/)[^\\s/?#]*@/gi;\n\nfunction normalizeName(name: string): string {\n return name.toLowerCase().replaceAll('-', '').replaceAll('_', '');\n}\n\nconst SECRET_NAMES = [...SENSITIVE_KEY_NAMES, ...TRANSPORT_CONFIG_SECRET_NAMES].map(normalizeName);\nconst QUERY_NAMES = new Set(DEFAULT_REDACT_QUERY_PARAMS.map(normalizeName));\n\n/** Exact match for short names (`key`, `pfx`), suffix match for longer ones (`azureClientSecret`). */\nfunction isSecretKey(key: string): boolean {\n const name = normalizeName(key);\n return SECRET_NAMES.some((n) => name === n || (n.length >= 5 && name.endsWith(n)));\n}\n\nfunction isUrlKey(key: string): boolean {\n return /url|uri|endpoint|href/i.test(key);\n}\n\nfunction isPlainObject(value: object): boolean {\n const proto = Object.getPrototypeOf(value) as unknown;\n return proto === Object.prototype || proto === null;\n}\n\nfunction safeDecode(value: string): string {\n try {\n return decodeURIComponent(value.replaceAll('+', ' '));\n } catch {\n return value;\n }\n}\n\n/** Absolute URL: `scheme://host` only. Relative or unparseable: path kept, query and fragment cut. */\nexport function redactUrl(raw: string | URL): string {\n if (typeof raw !== 'string') return `${raw.protocol}//${raw.host}`;\n if (SCHEME_PREFIX.test(raw)) {\n try {\n const url = new URL(raw);\n return `${url.protocol}//${url.host}`;\n } catch {\n return REDACTED;\n }\n }\n return raw.split(/[?#]/, 1)[0] ?? '';\n}\n\nfunction redactHeaders(headers: unknown): unknown {\n if (!headers || typeof headers !== 'object') return headers;\n return Object.fromEntries(Object.keys(headers).map((name) => [name, REDACTED]));\n}\n\n/** Redacted deep copy of a config-like value. Never throws, never returns a secret. */\nexport function redactConfig(value: unknown, depth = 0, key = ''): unknown {\n if (value === null || value === undefined) return value;\n if (typeof value === 'string') {\n return SCHEME_PREFIX.test(value) || isUrlKey(key) ? redactUrl(value) : value;\n }\n if (typeof value === 'number' || typeof value === 'boolean') return value;\n if (typeof value === 'function') return '[Function]';\n if (typeof value !== 'object') return '[Unserializable]';\n if (typeof URL !== 'undefined' && value instanceof URL) return redactUrl(value);\n if (Array.isArray(value)) {\n return depth >= MAX_DEPTH ? '[Array]' : value.map((v) => redactConfig(v, depth + 1, key));\n }\n if (!isPlainObject(value) || depth >= MAX_DEPTH)\n return `[${value.constructor?.name ?? 'Object'}]`;\n const out: Record<string, unknown> = {};\n for (const [name, inner] of Object.entries(value)) {\n if (isSecretKey(name)) assignOwn(out, name, inner === undefined ? undefined : REDACTED);\n else if (name.toLowerCase() === 'headers') assignOwn(out, name, redactHeaders(inner));\n else assignOwn(out, name, redactConfig(inner, depth + 1, name));\n }\n return out;\n}\n\n// ── Secret protection ───────────────────────────────────────────────────────\n\nconst hiddenKeys = new WeakMap<object, Set<string>>();\nconst hiddenValues = new WeakMap<object, Map<string, unknown>>();\n\nfunction viewOf(target: object): Record<string, unknown> {\n const hidden = hiddenKeys.get(target) ?? new Set<string>();\n const values = hiddenValues.get(target);\n const view: Record<string, unknown> = { class: target.constructor?.name };\n for (const key of new Set([...Object.keys(target), ...hidden])) {\n const inner = hidden.has(key) ? values?.get(key) : (target as Record<string, unknown>)[key];\n if (isSecretKey(key)) view[key] = inner === undefined ? undefined : REDACTED;\n else if (key.toLowerCase() === 'headers') view[key] = redactHeaders(inner);\n else if (\n inner !== null &&\n typeof inner === 'object' &&\n !hidden.has(key) &&\n !(inner instanceof URL)\n ) {\n view[key] = '[Object]';\n } else if (hidden.has(key) && typeof inner === 'string' && !isUrlKey(key)) {\n view[key] = REDACTED;\n } else view[key] = redactConfig(inner, 0, key);\n }\n return view;\n}\n\n/**\n * Hides `keys` on `target` (assigned or not yet) and gives it a redacted `toJSON()` /\n * inspect view. Fields stay readable and writable. Safe to call more than once.\n * Throws when the target cannot carry the protection (frozen or sealed), instead of\n * silently leaving the secret enumerable.\n */\nexport function protectSecrets(target: object, keys: readonly string[]): void {\n if (!Object.isExtensible(target)) {\n throw new TypeError(\n `protectSecrets: ${target.constructor?.name ?? 'object'} is not extensible`\n );\n }\n let hidden = hiddenKeys.get(target);\n let values = hiddenValues.get(target);\n if (!hidden || !values) {\n hidden = new Set();\n values = new Map();\n hiddenKeys.set(target, hidden);\n hiddenValues.set(target, values);\n const view = (): Record<string, unknown> => viewOf(target);\n Object.defineProperty(target, 'toJSON', { value: view, enumerable: false, configurable: true });\n Object.defineProperty(target, INSPECT_CUSTOM, {\n value: view,\n enumerable: false,\n configurable: true,\n });\n }\n const store = values;\n for (const key of keys) {\n if (hidden.has(key)) continue;\n const desc = Object.getOwnPropertyDescriptor(target, key);\n if (desc && !desc.configurable) {\n throw new TypeError(`protectSecrets: \"${key}\" is not configurable`);\n }\n if (desc && 'value' in desc) store.set(key, desc.value);\n hidden.add(key);\n Object.defineProperty(target, key, {\n enumerable: false,\n configurable: true,\n get: () => store.get(key),\n set: (next: unknown) => void store.set(key, next),\n });\n }\n}\n\n// ── Scrubbing error text ────────────────────────────────────────────────────\n\n/** The raw, decoded and percent-encoded spellings of a secret. */\nfunction variantsOf(secret: string): string[] {\n return [secret, safeDecode(secret), encodeURIComponent(secret), encodeURI(secret)];\n}\n\n/** Secret parts of a URL string: the password and the values of sensitive query parameters. */\nexport function urlSecrets(raw: string | URL): string[] {\n const text = typeof raw === 'string' ? raw : raw.href;\n const out: string[] = [];\n const userinfo = new RegExp(USERINFO.source, 'i').exec(text);\n if (userinfo) {\n const info = text.slice(userinfo[1]!.length, userinfo.index + userinfo[0].length - 1);\n const colon = info.indexOf(':');\n if (colon !== -1) out.push(info.slice(colon + 1));\n }\n const queryStart = text.indexOf('?');\n if (queryStart !== -1) {\n const query = text.slice(queryStart + 1).split('#', 1)[0] ?? '';\n for (const pair of query.split('&')) {\n const eq = pair.indexOf('=');\n if (eq > 0 && QUERY_NAMES.has(normalizeName(safeDecode(pair.slice(0, eq))))) {\n out.push(pair.slice(eq + 1));\n }\n }\n }\n return out.flatMap(variantsOf);\n}\n\n/** Every secret string held in a config-like value: secret-keyed values, header values, URL secrets. */\nexport function collectSecrets(value: unknown, depth = 0, key = ''): string[] {\n if (typeof value === 'string') {\n if (isSecretKey(key)) return [value];\n return SCHEME_PREFIX.test(value) || isUrlKey(key) ? urlSecrets(value) : [];\n }\n if (!value || typeof value !== 'object' || depth > MAX_DEPTH) return [];\n if (typeof URL !== 'undefined' && value instanceof URL) return urlSecrets(value);\n if (Array.isArray(value)) return value.flatMap((v) => collectSecrets(v, depth + 1, key));\n if (!isPlainObject(value)) return [];\n const isHeaders = key.toLowerCase() === 'headers';\n return Object.entries(value).flatMap(([name, inner]) => {\n if (isHeaders && typeof inner === 'string') return [inner];\n if (isSecretKey(name) && inner !== null && typeof inner === 'object') {\n return collectSecrets(inner, depth + 1, 'secret');\n }\n return collectSecrets(inner, depth + 1, name);\n });\n}\n\n/** Replaces URL userinfo and every spelling of the given secret values in `text`. */\nexport function scrubSecrets(text: string, secrets: readonly (string | undefined)[]): string {\n let out = text.replace(USERINFO, `$1${REDACTED}@`);\n const all = new Set(\n secrets.flatMap((s) => (s && s.length >= MIN_SECRET_LENGTH ? variantsOf(s) : []))\n );\n for (const secret of [...all].sort((a, b) => b.length - a.length)) {\n if (secret.length >= MIN_SECRET_LENGTH) out = out.split(secret).join(REDACTED);\n }\n return out;\n}\n\n/** Scrubs message, stack and the cause chain of `err` in place; returns it. */\nexport function scrubError<T>(err: T, secrets: readonly (string | undefined)[], depth = 0): T {\n if (!(err instanceof Error) || depth > 3) return err;\n try {\n err.message = scrubSecrets(err.message, secrets);\n if (err.stack) err.stack = scrubSecrets(err.stack, secrets);\n scrubError((err as { cause?: unknown }).cause, secrets, depth + 1);\n } catch {\n /* frozen error: leave as is */\n }\n return err;\n}\n\n/** A `.catch()` handler that scrubs the secrets from the error, then rethrows it. */\nexport function scrubbing(secrets: () => (string | undefined)[]): (err: unknown) => never {\n return (err) => {\n throw scrubError(err, secrets());\n };\n}\n"],"mappings":"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"}