{"version":3,"file":"session.mjs","names":["payload"],"sources":["../../src/main/session/index.ts"],"sourcesContent":["/**\n * Main process handlers for session module\n */\n\nimport type { Session } from \"electron\";\nimport type { RpcServer } from \"electron-json-rpc/main\";\nimport type {\n  SessionClearStorageDataOptions,\n  SessionClearDataOptions,\n  SessionSetUserAgentOptions,\n  DownloadItem,\n  DownloadItemState,\n} from \"@shared/session.types.js\";\n\nconst RPC_METHOD_PREFIX = \"session\";\n\n/**\n * Register all session module RPC handlers\n * Each session instance gets independent handlers via closure\n */\nexport function registerSessionModule(rpc: RpcServer, session: Session): void {\n  // Each session instance has independent download item management\n  const downloadItems = new Map<string, Electron.DownloadItem>();\n  let downloadIdCounter = 0;\n\n  // Generate session unique identifier for event naming\n  const sessionHash = (session as any).hash || Math.random().toString(36).slice(2);\n\n  // ==========================================================================\n  // Download Management\n  // ==========================================================================\n\n  async function setDownloadPathHandler(...params: unknown[]): Promise<void> {\n    const [path] = params as [string];\n    session.setDownloadPath(path);\n  }\n\n  async function downloadURLHandler(...params: unknown[]): Promise<string> {\n    const [url] = params as [string];\n    session.downloadURL(url);\n    return url;\n  }\n\n  // Download item operations\n  async function itemPauseHandler(...params: unknown[]): Promise<void> {\n    const [id] = params as [string];\n    const item = downloadItems.get(id);\n    if (item) item.pause();\n  }\n\n  async function itemResumeHandler(...params: unknown[]): Promise<void> {\n    const [id] = params as [string];\n    const item = downloadItems.get(id);\n    if (item) item.resume();\n  }\n\n  async function itemCancelHandler(...params: unknown[]): Promise<void> {\n    const [id] = params as [string];\n    const item = downloadItems.get(id);\n    if (item) item.cancel();\n  }\n\n  async function itemSetSavePathHandler(...params: unknown[]): Promise<void> {\n    const [id, path] = params as [string, string];\n    const item = downloadItems.get(id);\n    if (item) item.setSavePath(path);\n  }\n\n  // Serialize download item to IPC-safe format\n  function serializeDownloadItem(item: Electron.DownloadItem, id: string): DownloadItem {\n    return {\n      id,\n      url: item.getURL(),\n      filename: item.getFilename(),\n      totalBytes: item.getTotalBytes(),\n      receivedBytes: item.getReceivedBytes(),\n      savePath: item.getSavePath(),\n      state: item.getState() as DownloadItemState,\n    };\n  }\n\n  // ==========================================================================\n  // Cache Management\n  // ==========================================================================\n\n  async function getCacheSizeHandler(): Promise<number> {\n    return session.getCacheSize();\n  }\n\n  async function clearCacheHandler(): Promise<void> {\n    await session.clearCache();\n  }\n\n  // ==========================================================================\n  // Storage Management\n  // ==========================================================================\n\n  async function clearStorageDataHandler(...params: unknown[]): Promise<void> {\n    const [options] = params as [SessionClearStorageDataOptions?];\n    await session.clearStorageData(options as any);\n  }\n\n  async function clearDataHandler(...params: unknown[]): Promise<void> {\n    const [options] = params as [SessionClearDataOptions?];\n    await session.clearData(options as any);\n  }\n\n  async function getStoragePathHandler(): Promise<string | null> {\n    return session.getStoragePath();\n  }\n\n  async function isPersistentHandler(): Promise<boolean> {\n    return session.isPersistent();\n  }\n\n  // ==========================================================================\n  // User Agent\n  // ==========================================================================\n\n  async function getUserAgentHandler(): Promise<string> {\n    return session.getUserAgent();\n  }\n\n  async function setUserAgentHandler(...params: unknown[]): Promise<void> {\n    const [options] = params as [SessionSetUserAgentOptions];\n    session.setUserAgent(options.userAgent, options.acceptLanguages);\n  }\n\n  // ==========================================================================\n  // Session Identification\n  // ==========================================================================\n\n  async function getSessionHashHandler(): Promise<string> {\n    return sessionHash;\n  }\n\n  // ==========================================================================\n  // Register RPC Methods\n  // ==========================================================================\n\n  // Download management\n  rpc.register(`${RPC_METHOD_PREFIX}.setDownloadPath`, setDownloadPathHandler);\n  rpc.register(`${RPC_METHOD_PREFIX}.downloadURL`, downloadURLHandler);\n  rpc.register(`${RPC_METHOD_PREFIX}.item.pause`, itemPauseHandler);\n  rpc.register(`${RPC_METHOD_PREFIX}.item.resume`, itemResumeHandler);\n  rpc.register(`${RPC_METHOD_PREFIX}.item.cancel`, itemCancelHandler);\n  rpc.register(`${RPC_METHOD_PREFIX}.item.setSavePath`, itemSetSavePathHandler);\n\n  // Cache management\n  rpc.register(`${RPC_METHOD_PREFIX}.getCacheSize`, getCacheSizeHandler);\n  rpc.register(`${RPC_METHOD_PREFIX}.clearCache`, clearCacheHandler);\n\n  // Storage management\n  rpc.register(`${RPC_METHOD_PREFIX}.clearStorageData`, clearStorageDataHandler);\n  rpc.register(`${RPC_METHOD_PREFIX}.clearData`, clearDataHandler);\n  rpc.register(`${RPC_METHOD_PREFIX}.getStoragePath`, getStoragePathHandler);\n  rpc.register(`${RPC_METHOD_PREFIX}.isPersistent`, isPersistentHandler);\n\n  // User Agent\n  rpc.register(`${RPC_METHOD_PREFIX}.getUserAgent`, getUserAgentHandler);\n  rpc.register(`${RPC_METHOD_PREFIX}.setUserAgent`, setUserAgentHandler);\n\n  // Session Identification\n  rpc.register(`${RPC_METHOD_PREFIX}.getSessionHash`, getSessionHashHandler);\n\n  // ==========================================================================\n  // Event Forwarding\n  // ==========================================================================\n\n  session.on(\"will-download\", (_event, item) => {\n    const id = String(++downloadIdCounter);\n    downloadItems.set(id, item);\n\n    const payload = {\n      item: serializeDownloadItem(item, id),\n      sessionHash,\n    };\n    rpc.publish(`session.${sessionHash}.will-download`, payload);\n    rpc.publish(\"session.will-download\", payload);\n\n    // Listen for download progress updates\n    item.on(\"updated\", (_event, state) => {\n      const payload = {\n        id,\n        receivedBytes: item.getReceivedBytes(),\n        totalBytes: item.getTotalBytes(),\n        state: state === \"progressing\" ? (\"progressing\" as const) : (\"paused\" as const),\n        sessionHash,\n      };\n      rpc.publish(`session.${sessionHash}.download-progress`, payload);\n      rpc.publish(\"session.download-progress\", payload);\n    });\n\n    // Listen for download completion\n    item.on(\"done\", (_event, state) => {\n      const payload = {\n        id,\n        state: state as \"completed\" | \"cancelled\" | \"interrupted\",\n        path: item.getSavePath(),\n        sessionHash,\n      };\n      rpc.publish(`session.${sessionHash}.download-done`, payload);\n      rpc.publish(\"session.download-done\", payload);\n      // Cleanup\n      downloadItems.delete(id);\n    });\n  });\n}\n"],"mappings":";AAcA,MAAM,oBAAoB;;;;;AAM1B,SAAgB,sBAAsB,KAAgB,SAAwB;CAE5E,MAAM,gCAAgB,IAAI,KAAoC;CAC9D,IAAI,oBAAoB;CAGxB,MAAM,cAAe,QAAgB,QAAQ,KAAK,QAAQ,CAAC,SAAS,GAAG,CAAC,MAAM,EAAE;CAMhF,eAAe,uBAAuB,GAAG,QAAkC;EACzE,MAAM,CAAC,QAAQ;AACf,UAAQ,gBAAgB,KAAK;;CAG/B,eAAe,mBAAmB,GAAG,QAAoC;EACvE,MAAM,CAAC,OAAO;AACd,UAAQ,YAAY,IAAI;AACxB,SAAO;;CAIT,eAAe,iBAAiB,GAAG,QAAkC;EACnE,MAAM,CAAC,MAAM;EACb,MAAM,OAAO,cAAc,IAAI,GAAG;AAClC,MAAI,KAAM,MAAK,OAAO;;CAGxB,eAAe,kBAAkB,GAAG,QAAkC;EACpE,MAAM,CAAC,MAAM;EACb,MAAM,OAAO,cAAc,IAAI,GAAG;AAClC,MAAI,KAAM,MAAK,QAAQ;;CAGzB,eAAe,kBAAkB,GAAG,QAAkC;EACpE,MAAM,CAAC,MAAM;EACb,MAAM,OAAO,cAAc,IAAI,GAAG;AAClC,MAAI,KAAM,MAAK,QAAQ;;CAGzB,eAAe,uBAAuB,GAAG,QAAkC;EACzE,MAAM,CAAC,IAAI,QAAQ;EACnB,MAAM,OAAO,cAAc,IAAI,GAAG;AAClC,MAAI,KAAM,MAAK,YAAY,KAAK;;CAIlC,SAAS,sBAAsB,MAA6B,IAA0B;AACpF,SAAO;GACL;GACA,KAAK,KAAK,QAAQ;GAClB,UAAU,KAAK,aAAa;GAC5B,YAAY,KAAK,eAAe;GAChC,eAAe,KAAK,kBAAkB;GACtC,UAAU,KAAK,aAAa;GAC5B,OAAO,KAAK,UAAU;GACvB;;CAOH,eAAe,sBAAuC;AACpD,SAAO,QAAQ,cAAc;;CAG/B,eAAe,oBAAmC;AAChD,QAAM,QAAQ,YAAY;;CAO5B,eAAe,wBAAwB,GAAG,QAAkC;EAC1E,MAAM,CAAC,WAAW;AAClB,QAAM,QAAQ,iBAAiB,QAAe;;CAGhD,eAAe,iBAAiB,GAAG,QAAkC;EACnE,MAAM,CAAC,WAAW;AAClB,QAAM,QAAQ,UAAU,QAAe;;CAGzC,eAAe,wBAAgD;AAC7D,SAAO,QAAQ,gBAAgB;;CAGjC,eAAe,sBAAwC;AACrD,SAAO,QAAQ,cAAc;;CAO/B,eAAe,sBAAuC;AACpD,SAAO,QAAQ,cAAc;;CAG/B,eAAe,oBAAoB,GAAG,QAAkC;EACtE,MAAM,CAAC,WAAW;AAClB,UAAQ,aAAa,QAAQ,WAAW,QAAQ,gBAAgB;;CAOlE,eAAe,wBAAyC;AACtD,SAAO;;AAQT,KAAI,SAAS,GAAG,kBAAkB,mBAAmB,uBAAuB;AAC5E,KAAI,SAAS,GAAG,kBAAkB,eAAe,mBAAmB;AACpE,KAAI,SAAS,GAAG,kBAAkB,cAAc,iBAAiB;AACjE,KAAI,SAAS,GAAG,kBAAkB,eAAe,kBAAkB;AACnE,KAAI,SAAS,GAAG,kBAAkB,eAAe,kBAAkB;AACnE,KAAI,SAAS,GAAG,kBAAkB,oBAAoB,uBAAuB;AAG7E,KAAI,SAAS,GAAG,kBAAkB,gBAAgB,oBAAoB;AACtE,KAAI,SAAS,GAAG,kBAAkB,cAAc,kBAAkB;AAGlE,KAAI,SAAS,GAAG,kBAAkB,oBAAoB,wBAAwB;AAC9E,KAAI,SAAS,GAAG,kBAAkB,aAAa,iBAAiB;AAChE,KAAI,SAAS,GAAG,kBAAkB,kBAAkB,sBAAsB;AAC1E,KAAI,SAAS,GAAG,kBAAkB,gBAAgB,oBAAoB;AAGtE,KAAI,SAAS,GAAG,kBAAkB,gBAAgB,oBAAoB;AACtE,KAAI,SAAS,GAAG,kBAAkB,gBAAgB,oBAAoB;AAGtE,KAAI,SAAS,GAAG,kBAAkB,kBAAkB,sBAAsB;AAM1E,SAAQ,GAAG,kBAAkB,QAAQ,SAAS;EAC5C,MAAM,KAAK,OAAO,EAAE,kBAAkB;AACtC,gBAAc,IAAI,IAAI,KAAK;EAE3B,MAAM,UAAU;GACd,MAAM,sBAAsB,MAAM,GAAG;GACrC;GACD;AACD,MAAI,QAAQ,WAAW,YAAY,iBAAiB,QAAQ;AAC5D,MAAI,QAAQ,yBAAyB,QAAQ;AAG7C,OAAK,GAAG,YAAY,UAAQ,UAAU;GACpC,MAAMA,YAAU;IACd;IACA,eAAe,KAAK,kBAAkB;IACtC,YAAY,KAAK,eAAe;IAChC,OAAO,UAAU,gBAAiB,gBAA2B;IAC7D;IACD;AACD,OAAI,QAAQ,WAAW,YAAY,qBAAqBA,UAAQ;AAChE,OAAI,QAAQ,6BAA6BA,UAAQ;IACjD;AAGF,OAAK,GAAG,SAAS,UAAQ,UAAU;GACjC,MAAMA,YAAU;IACd;IACO;IACP,MAAM,KAAK,aAAa;IACxB;IACD;AACD,OAAI,QAAQ,WAAW,YAAY,iBAAiBA,UAAQ;AAC5D,OAAI,QAAQ,yBAAyBA,UAAQ;AAE7C,iBAAc,OAAO,GAAG;IACxB;GACF"}