{"version":3,"file":"pathSecurity.mjs","names":[],"sources":["../../../src/utils/pathSecurity.ts"],"sourcesContent":["import { resolve, sep } from 'node:path';\n\n/**\n * Throws if `resolvedPath` escapes `baseDir`.\n * Use this before any file operation whose path is derived from user-controlled\n * input (e.g. dictionary keys, filePath fields from dictionary data) to prevent\n * path-traversal attacks.\n */\nexport const assertPathWithin = (\n  resolvedPath: string,\n  baseDir: string\n): void => {\n  const normalizedBase = resolve(baseDir);\n  const normalizedPath = resolve(resolvedPath);\n  if (\n    normalizedPath !== normalizedBase &&\n    !normalizedPath.startsWith(normalizedBase + sep)\n  ) {\n    throw new Error(\n      `Path traversal detected: \"${resolvedPath}\" escapes the base directory \"${baseDir}\"`\n    );\n  }\n};\n"],"mappings":";;;;;;;;;AAQA,MAAa,oBACX,cACA,YACS;CACT,MAAM,iBAAiB,QAAQ,QAAQ;CACvC,MAAM,iBAAiB,QAAQ,aAAa;AAC5C,KACE,mBAAmB,kBACnB,CAAC,eAAe,WAAW,iBAAiB,IAAI,CAEhD,OAAM,IAAI,MACR,6BAA6B,aAAa,gCAAgC,QAAQ,GACnF"}