dsh-bridge-gateway 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/CHANGELOG.md +250 -0
  2. package/LICENSE +21 -0
  3. package/README.en.md +408 -0
  4. package/README.md +430 -0
  5. package/client/build.mjs +43 -0
  6. package/client/client.js +5209 -0
  7. package/client/index.js +4967 -0
  8. package/cordis.patch.yml +4 -0
  9. package/docs/banner.jpg +0 -0
  10. package/docs/custom-tunnel.md +220 -0
  11. package/docs/feishu-usage.md +116 -0
  12. package/docs/fix-tunnel-sse-and-session-list.md +134 -0
  13. package/docs/platform-abstraction-design.md +473 -0
  14. package/docs/qq-usage.md +387 -0
  15. package/docs/screenshots/admin-lock-screen.jpg +0 -0
  16. package/docs/screenshots/feishu-bot-config.jpg +0 -0
  17. package/docs/screenshots/feishu-chat.jpg +0 -0
  18. package/docs/screenshots/lan-access.jpg +0 -0
  19. package/docs/screenshots/mobile-chat.jpg +0 -0
  20. package/docs/screenshots/mobile-drawer.jpg +0 -0
  21. package/docs/screenshots/mobile-remote-settings.jpg +0 -0
  22. package/docs/screenshots/mobile-settings-im.jpg +0 -0
  23. package/docs/screenshots/mobile-settings-lan.jpg +0 -0
  24. package/docs/screenshots/mobile-settings-security.jpg +0 -0
  25. package/docs/screenshots/mobile-settings-tunnel.jpg +0 -0
  26. package/docs/screenshots/mobile-workspace-picker.jpg +0 -0
  27. package/docs/screenshots/qq-bot-config.jpg +0 -0
  28. package/docs/screenshots/qq-chat.jpg +0 -0
  29. package/docs/screenshots/qq-group.jpg +0 -0
  30. package/docs/screenshots/qr-scan.jpg +0 -0
  31. package/docs/screenshots/remote-auth-login.jpg +0 -0
  32. package/docs/screenshots/remote-web-mobile.jpg +0 -0
  33. package/docs/screenshots/security-auth-config.jpg +0 -0
  34. package/docs/screenshots/telegram-bot-config.jpg +0 -0
  35. package/docs/screenshots/tunnel-access.jpg +0 -0
  36. package/docs/screenshots/wechat-bot-config.jpg +0 -0
  37. package/docs/screenshots/wechat-chat.jpg +0 -0
  38. package/docs/telegram-usage.md +93 -0
  39. package/docs/wechat-usage.md +104 -0
  40. package/lib/auth/login-template.js +382 -0
  41. package/lib/auth/manager.js +470 -0
  42. package/lib/bridge-rpc-constants.js +55 -0
  43. package/lib/bridge-rpc.js +553 -0
  44. package/lib/cloudflared-manager.mjs +345 -0
  45. package/lib/feishu/gateway.js +550 -0
  46. package/lib/feishu/index.js +222 -0
  47. package/lib/feishu/lark-bundled.mjs +125547 -0
  48. package/lib/feishu/node.js +409 -0
  49. package/lib/gateway/cert.js +214 -0
  50. package/lib/index.js +1963 -0
  51. package/lib/platform/base.js +156 -0
  52. package/lib/platform/conversation-bridge.js +1570 -0
  53. package/lib/platform/index.js +10 -0
  54. package/lib/platform/manager.js +74 -0
  55. package/lib/qq/gateway.js +616 -0
  56. package/lib/qq/index.js +309 -0
  57. package/lib/qq/node.js +533 -0
  58. package/lib/security/path-validator.js +208 -0
  59. package/lib/security/rate-limiter.js +93 -0
  60. package/lib/telegram/gateway.js +630 -0
  61. package/lib/telegram/index.js +213 -0
  62. package/lib/telegram/node.js +351 -0
  63. package/lib/tunnel-client.mjs +402 -0
  64. package/lib/wechat/gateway.js +960 -0
  65. package/lib/wechat/index.js +241 -0
  66. package/lib/wechat/media.js +281 -0
  67. package/lib/wechat/node.js +350 -0
  68. package/package.json +102 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,250 @@
1
+ # 更新日志 (Changelog)
2
+
3
+ 所有关键版本的更新历史均记录于此。
4
+
5
+ ---
6
+
7
+ ## [v2.8.7] - 2026-08-30
8
+
9
+ ### 🛜 多网卡智能切换与 macOS 升级与隧道自愈加固
10
+ - **🛜 支持局域网多网卡可视化切换与持久化 (Issue #5)**:
11
+ - 自动探测并列出宿主机所有可用物理网卡与虚拟网卡(Wi-Fi、以太网、WSL、VMware、Docker 等),支持识别网卡类型与优先级推荐;
12
+ - 在局域网控制台提供网卡下拉切换器,切换后即时重新生成局域网链接与二维码,并自动记忆持久化保存,彻底解决多网卡/WSL 环境下移动端扫码 IP 无法互通的问题;
13
+ - **🍏 加固 macOS 一键平滑升级**:
14
+ - `upgradePlugin` 自动补全 macOS GUI / 后台环境下缺失的系统 `PATH` 环境变量(自动兼容 `/opt/homebrew/bin`、`/usr/local/bin`、`~/.nvm/...` 等);
15
+ - 自动优先绑定当前运行中 Node.js 同级目录下的 `npm`/`npx` 二进制绝对路径,杜绝 `spawn ENOENT` 升级失败;
16
+ - **🛡️ 优化 macOS Cloudflared 二进制探测与隔离自愈**:
17
+ - 启动时优先扫描系统 `PATH` 与 Homebrew 安装的 `cloudflared` 全局二进制;
18
+ - 网络下载解压后自动通过 `xattr -d com.apple.quarantine` 移除 Gatekeeper 隔离标记,并加入 `--version` 运行期校验与自愈。
19
+
20
+ ---
21
+
22
+ ## [v2.8.6] - 2026-08-30
23
+
24
+ ### 📱 移动端交互适配重构 & 隧道保活与传输优化
25
+ - **📱 移动端工作区体验重构与多途径秒级回切**:
26
+ - 修复移动端工作区面板(Workbench / `dsh-better-sidebar` / 任务管理)遮盖聊天对话与收起后白屏残留问题;
27
+ - 引入严密的显隐状态机(`dsh-workbench-open`),打开面板时在 Tab 栏常驻 **`✕ 返回对话`** 蓝色操作胶囊;
28
+ - 提供多途径极速回切:支持点击「返回对话」按钮、点击顶部 Header 会话标题、或在左侧抽屉切换会话秒级返回对话流;
29
+ - **🗂️ DSH 原生收起图标深度适配与双向开合**:
30
+ - 在移动端侧边栏抽屉顶部 Logo 栏完整集成并复用 DSH 原生自带的收起图标(`[|`);
31
+ - 支持点击主界面 `≡` 汉堡菜单流畅滑出抽屉、点击原生收起图标/点击会话/轻触遮罩丝滑收回抽屉;
32
+ - **🖥️ PC 桌面端严格隔离与零侵入**:
33
+ - 通过媒体查询与运行期断点双重守卫,确保 PC 桌面端(`> 768px`)100% 保持官方原生多列分栏布局与纯净体验,无任何样式污染与多余组件;
34
+ - **🛡️ Cloudflared 隧道守护进程自愈与自动重启**:
35
+ - 修复 Cloudflared 进程异常退出后无法自动拉起的问题,增加子进程退出监听与指数退避自动重连机制,确保长时间公网访问不断连;
36
+ - **⚡ 自建隧道 SSE 稳定性与数据传输优化**:
37
+ - 修复弱网环境下 SSE 断线重连问题,精简 Session 列表超大数据负载传输,显著降低移动端带宽占用与弱网延迟。
38
+
39
+ ---
40
+
41
+ ## [v2.8.5] - 2026-08-27
42
+
43
+ ### 🎯 产物文件推送改为 AI 指令驱动 & 修复 IM 平台断开连接问题
44
+ - **🎯 显式文件发送协议**:由 AI 通过 `[SEND_FILE: <路径>]` 显式驱动文件直传,杜绝修改代码时的文件误发风暴;
45
+ - **🧹 聊天正文自动净化**:自动剔除聊天窗口中的文件发送指令,保持聊天气泡清爽;
46
+ - **🔌 修复 IM 断开连接失效**:修复 QQ 等网关断开连接时 WebSocket 事件悬挂问题,断开后彻底阻断入站消息与出站回复。
47
+
48
+ ---
49
+
50
+ ## [v2.8.4] - 2026-08-26
51
+
52
+ ### 🗂️ 会话列表 Web 端 1:1 深度对齐与归档过滤修复
53
+ - **🗂️ 严格按工作区账本对齐会话列表**:全面采用 DSH 官方工作区账本排序规则,自动过滤子代理派生会话、空白草稿与已归档会话,彻底解决磁盘历史孤立会话冗余列出的问题,保持 IM 端与 Web 端侧边栏 1:1 结构一致与编号精准对应。
54
+
55
+ ---
56
+
57
+ ## [v2.8.3] - 2026-08-26
58
+
59
+ ### 📱 微信与全平台 IM 文件收发链路全面修复与深度兼容
60
+ - **📱 微信 iLink 官方媒体传输协议完全对齐**:
61
+ - 修复 `getuploadurl` 媒体类型映射,确保文件上传请求采用标准 `UploadMediaType.FILE = 3`,微信服务端正确识别文件类型与大小;
62
+ - 严格采用官方规范对 `CDNMedia.aes_key` 进行 `base64(hex_string)` 编码,彻底解决微信移动端/电脑端解密失败报「文件已过期/下载失败/0B」的深层问题;
63
+ - 精简规范 `file_item` 结构并对齐 `encrypt_type: 1`。
64
+ - **🤖 QQ 机器人富媒体文件直传与显示修复**:
65
+ - 支持 `file_type: 4` 通用文件传输,适配 QQ OpenAPI v2 文件格式校验(解决此前类型不符导致的 850019 拦截);
66
+ - 显式传递 `file_name`,彻底消除 QQ 聊天界面将文档显示为「未命名」的问题;
67
+ - 自动识别群聊与单聊端点路由(`/v2/users/{openid}/files` 与 `/v2/groups/{group_openid}/files`)。
68
+ - **🌐 微信会话凭证(context_token)持久化机制**:
69
+ - 捕获微信入站消息时自动将实时安全会话凭证持久化落盘(`wechat-context-tokens.json`),并在服务启动与重启时自动载入,彻底避免凭证在重启后丢失;
70
+ - 完善 `ret: -2` / `prepare failed` 过期感知,当用户重新发消息时自动刷新续期。
71
+ - **📢 多平台多端共享会话广播**:
72
+ - 优化同一工作区多端共享会话的广播逻辑,当任一客户端(飞书/QQ/Telegram/Web)触发生成文件时,各平台桥接器自动回退至已授权用户,实现产物文件多端同步直传。
73
+
74
+ ---
75
+
76
+ ## [v2.8.2] - 2026-08-26
77
+
78
+ ### 🚀 微信/IM 本地生成文件全域探测与直接推送
79
+ - **📁 全域文件智能探测与提取**:全面支持从 PowerShell/Bash 终端脚本(`New-Item`、`Set-Content`、`Out-File`、`>`)、工具调用参数及回复文本中自动探测提取生成的文件,并结合会话工作区目录自动解析为绝对路径;
80
+ - **🌐 微信官方 CDN 媒体上传链路修复**:严格对齐腾讯 iLink 官方 CDN `/upload` 路由子路径与 `encrypted_query_param` / `filekey` 鉴权参数,彻底解决此前上传失败的问题;
81
+ - **💬 微信与各 IM 原生文件气泡推送**:任务结束自动将 txt/pdf/docx/xlsx/zip/png 等产物推送到聊天界面,支持直接下载查看与转发。
82
+
83
+ ---
84
+
85
+ ## [v2.8.1] - 2026-08-26
86
+
87
+ ### 🛡️ 微信/IM 消息分块保护与流式体验修复
88
+ - **🛡️ 修复消息被切成 20 字符碎片的问题**:排查并修复历史配置中 `maxMessageChars` 异常写入 `20` 导致的聊天框逐句高频切块分发问题;
89
+ - **⚙️ 全链路字符数下限安全防御**:在会话桥基类、各平台 Service 配置接口及启动加载链路中增加强制安全下限(`< 200` 自动回退为平台标准默认容量),彻底杜绝异常分块;
90
+ - **💬 微信与各 IM 平台体验恢复**:恢复完整 Markdown 回复、段落与代码块的原生一次性聚合推送。
91
+
92
+ ---
93
+
94
+ ## [v2.8.0] - 2026-08-25
95
+
96
+ ### 📱 移动端体验革新、远程工作区管理与全面安全加固
97
+ - **🗂️ 远程工作区网页选择器**:彻底解决手机/远程设备点击「添加工作区」在电脑端静默弹窗、移动端无感知的痛点;自动唤出响应式底部抽屉/弹窗树形目录浏览器,支持盘符(C/D 盘)与快捷目录直达与手动路径跳转;
98
+ - **🖥️ 本机电脑无感智能分流**:本机电脑(localhost / 127.0.0.1 / Electron 桌面客户端)点击添加工作区直接调用系统原生文件夹选择对话框,仅在移动端/远程访问时呼出网页选择器;
99
+ - **📱 移动端视觉与布局体验深度优化**:
100
+ - **顶部固定导航栏**:会话标题统一提升至顶部导航栏正中央,加粗居中显示,彻底消除顶部空白;
101
+ - **第二行会话工具栏**:智能路由/子代理徽标与 28px 圆形纯图标 Session Log 下载按钮两端规整排列,呼吸感十足;
102
+ - **底部输入框工具栏**:弹性自适应排版,彻底解决移动端与窄屏下权限预设与模型选择器重叠碰撞问题;
103
+ - **🔐 全方位安全审计与深度加固**:
104
+ - **RPC 端点鉴权**:文件树、驱动器与工作区注册 RPC 端点增加 `checkAdminAuth` 管理员认证校验;
105
+ - **路径穿越与系统黑名单**:拦截 `C:\Windows\System32`、`/etc/shadow`、`/root/.ssh` 等敏感目录访问,检测软链接逃逸;
106
+ - **滑动窗口速率限制**:针对文件系统探测接口实施每用户每分钟限流防护;
107
+ - **IM 命令权限拦截**:非管理员用户禁止通过 `/addworkspace` 随意添加工作区。
108
+
109
+ ---
110
+
111
+ ## [v2.7.2] - 2026-08-25
112
+
113
+ ### 🗂️ 远程工作区网页选择器与全平台 `/addworkspace` 指令
114
+ - **🗂️ 远程工作区网页目录选择器**:彻底解决手机/远程设备点击「添加工作区」在电脑端静默弹窗、移动端无感知的痛点;在浏览器内直接呈现高颜值文件夹浏览弹窗;
115
+ - **💾 驱动器与快捷目录一键直达**:智能探测 Windows 盘符 (`C:\`, `D:\` 等) 与常用根目录(桌面、IdeaProjects、Projects 等),支持可视点选与手动路径输入;
116
+ - **🎯 原生点击事件捕获拦截**:在 DOM 捕获阶段拦截原生「添加工作区」/「打开文件夹」按钮点击,无缝转由网页选择器承接;
117
+ - **🤖 IM 机器人 `/addworkspace` 指令**:微信 / QQ / 飞书 / Telegram 全面支持 `/addworkspace <电脑绝对路径>`,随时随地在聊天框添加项目工作区。
118
+
119
+ ---
120
+
121
+ ## [v2.7.1] - 2026-08-25
122
+
123
+ ### 🛠️ Windows 一键升级与自建协议修复
124
+ - **🛠️ 修复 Windows 平台一键升级 `spawn EINVAL` 错误**:适配 Windows 下 `.cmd` 批处理文件派生子进程的执行环境;
125
+ - **🌐 修复自建隧道 WebSocket 诊断协议报错**:自动映射 `ws:`/`wss:` 协议进行端到端探测;
126
+ - **🛡️ 并发防抖与状态优化**:优化多端并发请求与状态重连。
127
+
128
+ ---
129
+
130
+ ## [v2.7.0] - 2026-08-25
131
+
132
+ ### 📊 运维监控看板、网络诊断与会话重命名
133
+ - **📊 宿主系统与运行看板**:实时监控 CPU 核心与型号、DSH 运行时间(Uptime)、Node 堆内存占用与系统总内存彩色占用条;
134
+ - **🔍 网络连通性一键诊断**:全面探测本地反向代理端口、局域网 IPv4、Cloudflare Anycast 边缘网络、自建隧道部署服务器与国内 npmmirror 镜像源连通性及延迟;
135
+ - **🗄️ 全局配置备份与恢复**:支持一键导出/导入插件配置 JSON 文件(涵盖平台凭证、白名单与安全认证规则),支持跨设备迁移;
136
+ - **🔄 DSH 服务平滑重启**:升级后或运维面板内支持一键平滑重启 DSH 进程,前端自动健康探测轮询并在重启成功后无缝重连刷新;
137
+ - **🏷️ IM 机器人会话重命名**:微信、QQ、飞书、Telegram 均支持 `/rename <新标题>` 指令,实时修改当前活动会话标题并同步更新 Web 抽屉;
138
+ - **🎨 界面与体验打磨**:Tab 栏彻底隐藏原生灰色横向滚动条保留流畅滑动手势,卡片间距规范化防重叠,深色模式原生深度适配;
139
+ - **🛡️ 并发与竞态保护**:Telegram/WeChat/QQ 网关 start/stop 增加 in-flight 串行化防抖锁,ConversationBridge 增加会话恢复并发竞态防重锁。
140
+
141
+ ---
142
+
143
+ ## [v2.6.1] - 2026-08-25
144
+
145
+ ### 🌐 公网隧道与专属域名重大升级
146
+ - **🔄 隧道开机自启与状态记忆**:记录 Cloudflare 隧道与自建隧道运行状态,DSH 重启后自动无感拉起;
147
+ - **🌐 Cloudflare 固定域名(Token 模式)**:支持 Cloudflare Named Tunnel(Zero Trust Token),绑定自定义专属域名(如 `dsh.yourdomain.com`),**重启后 URL 永久固定不变**;
148
+ - **⚡ 零门槛临时模式兼容**:未配置 Token 时维持 1 秒极速免登录临时随机域名;
149
+ - **⚙️ 控制台开关**:公网隧道卡片右上角新增「随 DSH 启动自动开启」复选框与折叠式高级 Token 配置。
150
+
151
+ ---
152
+
153
+ ## [v2.6.0] - 2026-08-24
154
+
155
+ ### 📱 移动端触控交互全面升级
156
+ - **🎨 顶栏与输入框重构**:极简通透顶栏,大圆角胶囊输入框,提供原生 App 般的丝滑手感;
157
+ - **🖐️ 长按(Long Press)呼出菜单**:侧边栏会话行支持长按(≥380ms)触觉震动反馈并自动呼出操作菜单(重命名/分叉/归档),支持边缘手势滑动开闭抽屉;
158
+ - **💊 状态药丸防换行**:全面修复手机小屏幕下「运行中」等状态药丸徽标断行换行问题;
159
+ - **✨ 更新日志预览**:版本更新检查卡片直观渲染新版本特性亮点(Release Notes)。
160
+
161
+ ---
162
+
163
+ ## [v2.5.5] - 2026-08-23
164
+
165
+ ### 🛠️ 缺陷修复与稳定性提升
166
+ - **💓 心跳泄漏修复**:修复 IM 任务结束后心跳定时器未彻底注销的潜在泄漏问题;
167
+ - **🧹 生命周期清理**:强化平台会话节点(Conversation Node)生命周期管理,连接断开时自动清理关联资源;
168
+ - **🛡️ 稳健长连接**:提升微信、QQ、飞书与 Telegram 机器人在长周期运行时的并发稳定性。
169
+
170
+ ---
171
+
172
+ ## [v2.5.4] - 2026-08-23
173
+
174
+ ### 📦 依赖规范化
175
+ - **🧩 规范化依赖**:将 DSH 共享宿主包依赖调整为 `peerDependencies`,杜绝多实例冗余依赖问题;
176
+ - **📉 体积瘦身**:进一步优化 npm 包体积与生态集成规范;
177
+ - **📖 文档同步**:同步更新快速安装命令与版本号指引。
178
+
179
+ ---
180
+
181
+ ## [v2.5.3] - 2026-08-23
182
+
183
+ ### 🚀 稳定性与依赖优化
184
+ - **📦 内置预编译飞书 SDK**:内置预打包编译飞书 SDK(消除 `protobufjs` postinstall build script 报错);
185
+ - **⚡ 纯净安装**:在 pnpm 11、npm 及 yarn 下实现 100% 纯净、无告警的一键秒级安装体验;
186
+ - **🛠️ 隧道服务端脚本增强**:优化一键部署脚本国内镜像源容错机制。
187
+
188
+ ---
189
+
190
+ ## [v2.5.2] - 2026-08-23
191
+
192
+ ### ✨ 核心更新与优化
193
+ - **🔑 本地管理免密直通**:优化 Localhost 物理回环访问判定逻辑,提升本地开发与管理体验;
194
+ - **🔐 交互式解锁弹窗**:新增统一的管理员解锁弹窗组件,支持密码解锁与状态实时同步;
195
+ - **📱 移动端 Polyfill**:增强移动设备浏览器环境兼容性;
196
+ - **📸 视觉与文档**:更新全套控制台高清界面实机截图与架构说明。
197
+
198
+ ---
199
+
200
+ ## [v2.5.1] - 2026-08-23
201
+
202
+ ### 🛡️ 深度加固安全防护与修复潜在风险
203
+ - **🔐 Secret Token 严格脱敏**:控制台公开状态彻底隔离,未授权访客不可见明文;
204
+ - **🚫 token_only 模式严格禁止密码登录**;
205
+ - **🛡️ RPC 服务端管理员权限校验**:强化关键配置修改与敏感操作鉴权;
206
+ - **⚡ Scope 防护范围 Header 伪造防范**。
207
+
208
+ ---
209
+
210
+ ## [v2.5.0] - 2026-08-23
211
+
212
+ ### 🔐 全新访问安全认证体系与 Tab 面板
213
+ - **🛡️ 双密码管理**:访客密码与管理员独立密码;
214
+ - **🚨 三重容灾保命体系**:支持 Localhost 物理特权免密、应急 reset-auth 文件恢复机制;
215
+ - **🎛️ Tab 结构升级**:局域网、公网隧道、IM 机器人、安全认证独立 Tab 组织。
216
+
217
+ ---
218
+
219
+ ## [v2.4.0] - 2026-08-23
220
+
221
+ ### ✈️ 接入 Telegram 官方机器人
222
+ - 支持 Telegram Bot API、打字机流式输出、原生指令菜单与交互卡片。
223
+
224
+ ---
225
+
226
+ ## [v2.3.0 ~ v2.3.3] - 2026-08-22
227
+
228
+ ### 🐦 接入飞书官方长连接机器人
229
+ - 支持 Card 2.0 原生流式打字机、双端并发审批、多平台统一消息架构重构。
230
+
231
+ ---
232
+
233
+ ## [v2.2.0 ~ v2.2.9] - 2026-08-20 ~ 2026-08-21
234
+
235
+ ### 🐧 QQ 官方机器人全面升级
236
+ - 支持 OpenAPI v2、指令面板、自定义菜单、全回复流式 Markdown 与群聊交互。
237
+
238
+ ---
239
+
240
+ ## [v2.0.0] - 2026-08-20
241
+
242
+ ### 🚀 多平台架构重构
243
+ - 引入统一 Platform 抽象基类与 ConversationBridge。
244
+
245
+ ---
246
+
247
+ ## [v1.0.0 ~ v1.2.3] - 2026-08-19
248
+
249
+ ### 💬 微信 Bot 初代上线
250
+ - 支持微信 ClawBot/iLink、局域网访问、Cloudflare 临时公网隧道与自建隧道。
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2024 wenbin-wb
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.