GPTSession2CPAandSub2API开发者指南:单HTML文件+IIFE架构代码深度剖析
【免费下载链接】GPTSession2CPAandSub2API项目地址https://gitcode.com/gh_mirrors/gp/GPTSession2CPAandSub2API点击查看免费下载GPTSession2CPAandSub2API 是一款纯前端单页面 ChatGPT Session 转换工具把 ChatGPT Web 登录 session JSON 一键转换成 CPA、sub2api、Cockpit、9router、Codex、AxonHub、Codex-Manager 可导入的 JSON。整个项目最值得学习的地方是它把全部功能装进了单个 HTML 文件用一段IIFE 立即执行函数组织代码实现了零依赖、零构建、零后端的完整 Web 应用。本文带你深度剖析这套架构的设计思路与代码组织方式。零依赖架构为什么单个 HTML 文件就能跑一个转换工具 先看一下项目的完整文件结构你会发现它轻到什么程度文件职责docs/index.html唯一的应用入口样式、页面结构、全部业务逻辑tests/convert-session.test.js无构建单元测试直接在 Node 中执行 HTML 内的脚本docs/favicon.svg页面图标README.md使用与本地运行说明这种单 HTML 文件架构带来三个直接好处零构建没有package.json、没有打包器双击 docs/index.html 就能在浏览器里使用见 README.md 的本地使用一节。零后端所有解析与转换都在浏览器本地完成token 不上传、不写入本地存储天然适合处理敏感登录凭证。零全局污染所有 JS 代码被 IIFE 包裹不向window泄漏任何变量页面即使被嵌入其他环境也互不干扰。单文件三层结构CSS 层、DOM 层与 IIFE 脚本层docs/index.html 共 1760 行可以清晰拆成三段读源码时建议按这个顺序层位置说明样式层docs/index.html#L9-L623CSS 变量主题 响应式布局DOM 层docs/index.html#L625-L777输入面板、格式切换按钮、输出区、账号预览表格脚本层docs/index.html#L778-L1758一个内联script 一个 IIFE承载全部逻辑DOM 层的设计也值得注意输出格式用 7 个带data-format属性的按钮表达docs/index.html#L662-L668JS 只需一次性querySelectorAll([data-format])就能全部接管所有状态文本都挂在固定id的元素上如#input-status、#stat-count为脚本层的集中式状态打下基础。IIFE 内部作用域隔离与集中式状态管理脚本从 docs/index.html#L779 的(() {开始到 docs/index.html#L1757 的})();结束——约 980 行代码全部位于同一个闭包内。IIFE 内部按配置 → 状态 → 工具 → 管道 → 渲染 → 事件绑定的顺序组织① 常量与标签表OUTPUT_LABELS映射 7 种输出格式docs/index.html#L780-L788。② 单一状态对象state这是整个页面的事实来源docs/index.html#L790-L796const state { format: sub2api, sessions: [], converted: [], skipped: [], outputText: , };③ 元素缓存elements一次性querySelector缓存约 20 个 DOM 引用docs/index.html#L798-L817避免后续反复查询 DOM。④ 内置示例数据exampleSession提供了脱敏的 session 结构docs/index.html#L819-L832对应页面上填入示例结构按钮方便新手无真实凭证也能体验完整流程。这种state elements模式是单文件应用非常实用的组织方式状态只有state这一份任何输入变化最终都收敛到updateOutput()统一刷新界面不会出现多处状态不同步的问题。完整数据流从粘贴 JSON 到生成输出 ⚙️理解了骨架后来看一次粘贴 JSON → 得到输出的完整调用链这是本项目最核心的一条管道输入触发文本框input事件绑定到scheduleConvertdocs/index.html#L1601-L1630。JSON 解析与扫描parseInputDocuments先做JSON.parse再交给collectSessionLikeObjects深度遍历任意嵌套结构自动找出所有长得像 session的对象——判断标准是同时存在 token 字段accessToken/access_token/tokens.accessToken等多种写法和身份字段email、user、meta.label等见 docs/index.html#L1088-L1145。它还用WeakSet防止循环引用导致的死循环。逐个转换convertFromText对每个候选对象调用convertSession单个失败只记入skipped列表而不会中断整体docs/index.html#L1502-L1536。选择目标格式并渲染buildOutputDocument按state.format输出对应结构updateOutput统一写回输出框、统计卡片、账号表格与错误列表docs/index.html#L1544-L1570。拖拽/选择文件走的是平行入口readFilesdocs/index.html#L1666-L1725最终汇入同一条convertSession → updateOutput管道——多条入口、单一管道这就是单文件代码仍保持清晰的根本原因。多源字段归一化firstNonEmpty 兜底策略ChatGPT Web session、9router OAuth JSON、Codexauth.json、AxonHub auth.json、Codex-Manager JSON 这 5 类输入同一个语义的字段可能叫完全不同的名字。项目没有为每类输入写一个解析器而是用一个通用工具函数firstNonEmptydocs/index.html#L840-L847做多路径兜底const accountId firstNonEmpty( record.account?.id, record.account_id, record.tokens?.account_id, record.providerSpecificData?.chatgptAccountId, /* …还有十余种候选路径 */ );在convertSession里accessToken、sessionToken、refreshToken、idToken、email、accountId、planType等关键字段全部采用这种按优先级依次尝试十几种取值路径的写法docs/index.html#L1167-L1298。配合 JWT 解析辅助函数parseJwtPayload、decodeBase64Urldocs/index.html#L858-L893工具还能从accessToken的 JWT payload 里反推出邮箱、账号 ID、套餐类型和过期时间——即使输入 JSON 本身没写全。一个 convertSession 同时产出 7 种目标格式架构上最巧妙的一笔convertSessiondocs/index.html#L1162-L1447在单次调用中同时构造全部 7 种目标格式一次性返回cpa、cockpit、nineRouter、codexAuthJson、axonHub、codexManager、sub2apiAccount共 7 份结果。好处显而易见切换输出格式只是buildOutputDocument里的一次取值切换是纯渲染操作O(1) 完成docs/index.html#L1457-L15007 种格式共享同一套字段抽取与归一化逻辑天然保证一致单元测试无需为每种格式各造一套 fixture。细节处理也见功力ChatGPT Web session 通常没有refresh_token和真实id_token代码会在缺少id_token时构造一个 Codex 可解析的占位 JWTbuildSyntheticCodexIdTokendocs/index.html#L965-L994AxonHub 缺少refresh_token时写入__missing_refresh_token__占位并附带说明字段docs/index.html#L1401-L1411stripUnavailable则负责从输出中剔除空值字段docs/index.html#L1018-L1035。无构建单元测试Node vm 沙箱直接跑浏览器脚本 没有构建、没有模块化打包代码怎么测答案在 tests/convert-session.test.js用正则直接从docs/index.html中截取内联script的源码tests/convert-session.test.js#L55手写一个createFakeElement伪造 DOM 元素含classList、dataset、addEventListenertests/convert-session.test.js#L8-L50通过vm.runInNewContext在干净沙箱中执行整段页面脚本tests/convert-session.test.js#L105像真实用户一样操作给#session-input赋值、派发input事件、点击格式按钮然后断言#output里的 JSON。比如 sub2api 过期时间的用例tests/convert-session.test.js#L123-L149验证了expires_at必须取每个账号自己的access token 的 JWTexp。全文共 10 个用例tests/convert-session.test.js#L441-L450覆盖 7 种格式的关键分支运行方式就是node tests/convert-session.test.js同样零依赖。这套正则提取 vm 沙箱 假 DOM的手法是所有内联脚本单文件项目都能直接复用的测试方案。快速本地运行与代码扩展指南 ✅本地运行直接用浏览器打开 docs/index.html 即可无需安装任何东西页面顶部有浏览器本地解析 / 不上传 token / 不写入存储三枚徽章说明隐私边界。想加一种新的输出格式按现有架构只需 4 步在OUTPUT_LABELS中登记格式名docs/index.html#L780-L788在convertSession返回对象里新增一个字段构造新格式的数据docs/index.html#L1432-L1446在buildOutputDocument中加一个if (state.format ...)分支docs/index.html#L1457-L1500在 DOM 层加一个data-format按钮并在 tests/convert-session.test.js 里补一个用例。架构小结单 HTML 文件 IIFE 并不是偷懒而是一种刻意的取舍——把应用压缩到一个可双击打开的文件里用单一 state 单一渲染入口 单一转换管道三条纪律维持可维护性再用 vm 沙箱测试补齐工程化短板。对于只需要跑在浏览器里、强调隐私与便携的工具类项目这是一个非常值得抄作业的模板。赞分享【免费下载链接】GPTSession2CPAandSub2API项目地址https://gitcode.com/gh_mirrors/gp/GPTSession2CPAandSub2API点击查看免费下载相关推荐从安装到精通OmX完整入门教程从安装到精通OmX完整入门教程 OmXOh My codeX是一款功能强大的开发工具它能为你的编码工作流带来革命性的提升。通过添加钩子hooks、代人工智能AI AgentAgent 编排Agent 工作流CLI开发工具AI 技能如何用Pkg.jl的[compat]锁定依赖版本区间兼容性配置完整指南如何用Pkg.jl的 compat 锁定依赖版本区间兼容性配置完整指南 Pkg.jl 是 Julia 语言的官方包管理器 而其中的 compat 配置正是你探索rot.js地图生成7种算法打造无限随机地牢探索rot.js地图生成7种算法打造无限随机地牢 rot.js是一个功能强大的JavaScript地牢生成库专为Roguelike游戏开发而设计。这个开源工游戏开发创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

GitHub日榜第7连坐10小时:Sentry一天涨星152,老牌监控项目怎么突然翻红了?

GitHub日榜第7连坐10小时:Sentry一天涨星152,老牌监控项目怎么突然翻红了?

GitHub日榜第7连坐10小时:Sentry一天涨星152,老牌监控项目怎么突然翻红了? 【免费下载链接】sentry Developer-first error tracking and performance monitoring 项目地址: https://gitcode.com/GitHub_Trending/sen/sentry 一个诞生…

2026/10/11 0:49:04 阅读更多 →
treehouse生命周期Hooks完全指南:post_create自动建虚拟环境、pre_destroy优雅清理

treehouse生命周期Hooks完全指南:post_create自动建虚拟环境、pre_destroy优雅清理

【免费下载链接】treehouse Manage worktrees without managing worktrees. 项目地址: https://gitcode.com/gh_mirrors/treehou/treehouse 点击查看 免费下载 还在为每个 git worktree 手动 python -m venv、手动清理构建缓存吗?treehouse 是一个"…

2026/10/11 0:49:04 阅读更多 →
NocoBase 工单解决方案更新记录深度解读:从 v2 首发到主题适配与 SLA 修复

NocoBase 工单解决方案更新记录深度解读:从 v2 首发到主题适配与 SLA 修复

低代码后端前端人工智能AI 应用工作流自动化 【免费下载链接】nocobase NocoBase is an open-source AI no-code platform for building business systems fast. Instead of generating everything from scratch, AI works on top of production-proven infrastructure and a …

2026/10/11 0:49:04 阅读更多 →

最新新闻

黄白助手 第 011 个开关:禁用设置页插件的位置、验证方法与风险边界

黄白助手 第 011 个开关:禁用设置页插件的位置、验证方法与风险边界

🔥 个人主页: 杨利杰YJlio ❄️ 个人专栏: 《Windows 疑难杂症与工单复盘案例库》 《Sysinternals实战教程》 《WINDOWS教程》 《Windows PowerShell 实战》 《IOS插件分析测试》 《超简单:用Python让Excel飞起来》…

2026/10/11 1:35:31 阅读更多 →
免费 PDF 翻译:pdf2zh 十分钟翻出公式原样保留的双语论文

免费 PDF 翻译:pdf2zh 十分钟翻出公式原样保留的双语论文

免费 PDF 翻译:pdf2zh 十分钟翻出公式原样保留的双语论文 【免费下载链接】PDFMathTranslate [EMNLP 2025 Demo] PDF scientific paper translation with preserved formats - 基于 AI 完整保留排版的 PDF 文档全文双语翻译,支持 Google/DeepL/Ollama/Op…

2026/10/11 1:35:31 阅读更多 →
音频大模型记忆能力被高估了?墨尔本大学提出VoxMem基准

音频大模型记忆能力被高估了?墨尔本大学提出VoxMem基准

VoxMem: Benchmarking Multimodal Memory in Large Audio Language Models 作者:Yang Xiao, Vidhyasaharan Sethu, Eun-Jung Holden, Ting Dang 核心发表机构:University of Melbourne、University of New South Wales 论文链接:arXiv:2609.3…

2026/10/11 1:35:31 阅读更多 →
基于PIC18LF45K50与PJ85718DM的HVAC双路温度监测方案

基于PIC18LF45K50与PJ85718DM的HVAC双路温度监测方案

1. 从一颗温度传感器说起:为什么本地与远程双路测温值得单独做嵌入式温度监测这件事,看起来简单,做起来坑不少。尤其是暖通空调(HVAC)这类场景,你既要盯着设备本体的温度,又要盯着远端某个房间、…

2026/10/11 1:35:31 阅读更多 →
xHC: Expanded Hyper-Connections

xHC: Expanded Hyper-Connections

xHC: Expanded Hyper-Connections 论文完整梳理 一、文章核心内容总览 1. 研究背景 传统Transformer仅使用单路残差流承载跨层Token表征,仅能通过加宽、加深、扩充数据三种维度扩容。 Hyper-Connections(HC)将单残差流扩展为N条并行残差流,新增残差记忆容量这一全新缩放…

2026/10/11 1:35:31 阅读更多 →
AI漫剧全流程制作:从分镜表到成片的保姆级教程

AI漫剧全流程制作:从分镜表到成片的保姆级教程

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 1:34:31 阅读更多 →

日新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 5:23:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 10:38:42 阅读更多 →