agent-messenger 2.6.0 → 2.6.1

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 (499) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/.github/workflows/ci.yml +12 -3
  3. package/.oxlintrc.json +1 -1
  4. package/bun.lock +0 -35
  5. package/bunfig.toml +0 -3
  6. package/dist/package.json +1 -4
  7. package/dist/src/platforms/line/client.js +2 -2
  8. package/dist/src/platforms/line/client.js.map +1 -1
  9. package/dist/src/vendor/linejs/LICENSE +21 -0
  10. package/dist/src/vendor/linejs/README.md +89 -0
  11. package/dist/src/vendor/linejs/_dist/base/core/mod.d.ts +125 -0
  12. package/dist/src/vendor/linejs/_dist/base/core/mod.d.ts.map +1 -0
  13. package/dist/src/vendor/linejs/_dist/base/core/typed-event-emitter/index.d.ts +13 -0
  14. package/dist/src/vendor/linejs/_dist/base/core/typed-event-emitter/index.d.ts.map +1 -0
  15. package/dist/src/vendor/linejs/_dist/base/core/utils/continue.d.ts +10 -0
  16. package/dist/src/vendor/linejs/_dist/base/core/utils/continue.d.ts.map +1 -0
  17. package/dist/src/vendor/linejs/_dist/base/core/utils/devices.d.ts +8 -0
  18. package/dist/src/vendor/linejs/_dist/base/core/utils/devices.d.ts.map +1 -0
  19. package/dist/src/vendor/linejs/_dist/base/core/utils/error.d.ts +8 -0
  20. package/dist/src/vendor/linejs/_dist/base/core/utils/error.d.ts.map +1 -0
  21. package/dist/src/vendor/linejs/_dist/base/core/utils/events.d.ts +22 -0
  22. package/dist/src/vendor/linejs/_dist/base/core/utils/events.d.ts.map +1 -0
  23. package/dist/src/vendor/linejs/_dist/base/e2ee/mod.d.ts +64 -0
  24. package/dist/src/vendor/linejs/_dist/base/e2ee/mod.d.ts.map +1 -0
  25. package/dist/src/vendor/linejs/_dist/base/login/mod.d.ts +138 -0
  26. package/dist/src/vendor/linejs/_dist/base/login/mod.d.ts.map +1 -0
  27. package/dist/src/vendor/linejs/_dist/base/mod.d.ts +6 -0
  28. package/dist/src/vendor/linejs/_dist/base/mod.d.ts.map +1 -0
  29. package/dist/src/vendor/linejs/_dist/base/obs/mod.d.ts +100 -0
  30. package/dist/src/vendor/linejs/_dist/base/obs/mod.d.ts.map +1 -0
  31. package/dist/src/vendor/linejs/_dist/base/polling/mod.d.ts +55 -0
  32. package/dist/src/vendor/linejs/_dist/base/polling/mod.d.ts.map +1 -0
  33. package/dist/src/vendor/linejs/_dist/base/push/conn.d.ts +39 -0
  34. package/dist/src/vendor/linejs/_dist/base/push/conn.d.ts.map +1 -0
  35. package/dist/src/vendor/linejs/_dist/base/push/connData.d.ts +19 -0
  36. package/dist/src/vendor/linejs/_dist/base/push/connData.d.ts.map +1 -0
  37. package/dist/src/vendor/linejs/_dist/base/push/connManager.d.ts +43 -0
  38. package/dist/src/vendor/linejs/_dist/base/push/connManager.d.ts.map +1 -0
  39. package/dist/src/vendor/linejs/_dist/base/push/mod.d.ts +2 -0
  40. package/dist/src/vendor/linejs/_dist/base/push/mod.d.ts.map +1 -0
  41. package/dist/src/vendor/linejs/_dist/base/request/mod.d.ts +45 -0
  42. package/dist/src/vendor/linejs/_dist/base/request/mod.d.ts.map +1 -0
  43. package/dist/src/vendor/linejs/_dist/base/service/auth/mod.d.ts +32 -0
  44. package/dist/src/vendor/linejs/_dist/base/service/auth/mod.d.ts.map +1 -0
  45. package/dist/src/vendor/linejs/_dist/base/service/call/mod.d.ts +29 -0
  46. package/dist/src/vendor/linejs/_dist/base/service/call/mod.d.ts.map +1 -0
  47. package/dist/src/vendor/linejs/_dist/base/service/channel/mod.d.ts +28 -0
  48. package/dist/src/vendor/linejs/_dist/base/service/channel/mod.d.ts.map +1 -0
  49. package/dist/src/vendor/linejs/_dist/base/service/liff/mod.d.ts +51 -0
  50. package/dist/src/vendor/linejs/_dist/base/service/liff/mod.d.ts.map +1 -0
  51. package/dist/src/vendor/linejs/_dist/base/service/livetalk/mod.d.ts +38 -0
  52. package/dist/src/vendor/linejs/_dist/base/service/livetalk/mod.d.ts.map +1 -0
  53. package/dist/src/vendor/linejs/_dist/base/service/mod.d.ts +9 -0
  54. package/dist/src/vendor/linejs/_dist/base/service/mod.d.ts.map +1 -0
  55. package/dist/src/vendor/linejs/_dist/base/service/relation/mod.d.ts +30 -0
  56. package/dist/src/vendor/linejs/_dist/base/service/relation/mod.d.ts.map +1 -0
  57. package/dist/src/vendor/linejs/_dist/base/service/square/mod.d.ts +162 -0
  58. package/dist/src/vendor/linejs/_dist/base/service/square/mod.d.ts.map +1 -0
  59. package/dist/src/vendor/linejs/_dist/base/service/talk/mod.d.ts +194 -0
  60. package/dist/src/vendor/linejs/_dist/base/service/talk/mod.d.ts.map +1 -0
  61. package/dist/src/vendor/linejs/_dist/base/service/types.d.ts +9 -0
  62. package/dist/src/vendor/linejs/_dist/base/service/types.d.ts.map +1 -0
  63. package/dist/src/vendor/linejs/_dist/base/storage/base.d.ts +34 -0
  64. package/dist/src/vendor/linejs/_dist/base/storage/base.d.ts.map +1 -0
  65. package/dist/src/vendor/linejs/_dist/base/storage/file.d.ts +20 -0
  66. package/dist/src/vendor/linejs/_dist/base/storage/file.d.ts.map +1 -0
  67. package/dist/src/vendor/linejs/_dist/base/storage/memory.d.ts +19 -0
  68. package/dist/src/vendor/linejs/_dist/base/storage/memory.d.ts.map +1 -0
  69. package/dist/src/vendor/linejs/_dist/base/storage/mod.d.ts +4 -0
  70. package/dist/src/vendor/linejs/_dist/base/storage/mod.d.ts.map +1 -0
  71. package/dist/src/vendor/linejs/_dist/base/thrift/mod.d.ts +14 -0
  72. package/dist/src/vendor/linejs/_dist/base/thrift/mod.d.ts.map +1 -0
  73. package/dist/src/vendor/linejs/_dist/base/thrift/readwrite/declares.d.ts +20 -0
  74. package/dist/src/vendor/linejs/_dist/base/thrift/readwrite/declares.d.ts.map +1 -0
  75. package/dist/src/vendor/linejs/_dist/base/thrift/readwrite/read.d.ts +7 -0
  76. package/dist/src/vendor/linejs/_dist/base/thrift/readwrite/read.d.ts.map +1 -0
  77. package/dist/src/vendor/linejs/_dist/base/thrift/readwrite/struct.d.ts +1109 -0
  78. package/dist/src/vendor/linejs/_dist/base/thrift/readwrite/struct.d.ts.map +1 -0
  79. package/dist/src/vendor/linejs/_dist/base/thrift/readwrite/write.d.ts +3 -0
  80. package/dist/src/vendor/linejs/_dist/base/thrift/readwrite/write.d.ts.map +1 -0
  81. package/dist/src/vendor/linejs/_dist/base/thrift/rename/parser.d.ts +7 -0
  82. package/dist/src/vendor/linejs/_dist/base/thrift/rename/parser.d.ts.map +1 -0
  83. package/dist/src/vendor/linejs/_dist/base/timeline/mod.d.ts +83 -0
  84. package/dist/src/vendor/linejs/_dist/base/timeline/mod.d.ts.map +1 -0
  85. package/dist/src/vendor/linejs/_dist/base/types.d.ts +11 -0
  86. package/dist/src/vendor/linejs/_dist/base/types.d.ts.map +1 -0
  87. package/dist/src/vendor/linejs/_dist/client/client.d.ts +70 -0
  88. package/dist/src/vendor/linejs/_dist/client/client.d.ts.map +1 -0
  89. package/dist/src/vendor/linejs/_dist/client/features/chat/fetcher.d.ts +5 -0
  90. package/dist/src/vendor/linejs/_dist/client/features/chat/fetcher.d.ts.map +1 -0
  91. package/dist/src/vendor/linejs/_dist/client/features/chat/mod.d.ts +58 -0
  92. package/dist/src/vendor/linejs/_dist/client/features/chat/mod.d.ts.map +1 -0
  93. package/dist/src/vendor/linejs/_dist/client/features/message/internal-types.d.ts +5 -0
  94. package/dist/src/vendor/linejs/_dist/client/features/message/internal-types.d.ts.map +1 -0
  95. package/dist/src/vendor/linejs/_dist/client/features/message/mod.d.ts +3 -0
  96. package/dist/src/vendor/linejs/_dist/client/features/message/mod.d.ts.map +1 -0
  97. package/dist/src/vendor/linejs/_dist/client/features/message/square.d.ts +94 -0
  98. package/dist/src/vendor/linejs/_dist/client/features/message/square.d.ts.map +1 -0
  99. package/dist/src/vendor/linejs/_dist/client/features/message/talk.d.ts +87 -0
  100. package/dist/src/vendor/linejs/_dist/client/features/message/talk.d.ts.map +1 -0
  101. package/dist/src/vendor/linejs/_dist/client/features/message/types.d.ts +29 -0
  102. package/dist/src/vendor/linejs/_dist/client/features/message/types.d.ts.map +1 -0
  103. package/dist/src/vendor/linejs/_dist/client/features/square/mod.d.ts +65 -0
  104. package/dist/src/vendor/linejs/_dist/client/features/square/mod.d.ts.map +1 -0
  105. package/dist/src/vendor/linejs/_dist/client/features/user/mod.d.ts +10 -0
  106. package/dist/src/vendor/linejs/_dist/client/features/user/mod.d.ts.map +1 -0
  107. package/dist/src/vendor/linejs/_dist/client/login.d.ts +41 -0
  108. package/dist/src/vendor/linejs/_dist/client/login.d.ts.map +1 -0
  109. package/dist/src/vendor/linejs/_dist/client/mod.d.ts +3 -0
  110. package/dist/src/vendor/linejs/_dist/client/mod.d.ts.map +1 -0
  111. package/dist/src/vendor/linejs/base/core/mod.js +197 -0
  112. package/dist/src/vendor/linejs/base/core/mod.js.map +1 -0
  113. package/dist/src/vendor/linejs/base/core/typed-event-emitter/index.js +43 -0
  114. package/dist/src/vendor/linejs/base/core/typed-event-emitter/index.js.map +1 -0
  115. package/dist/src/vendor/linejs/base/core/utils/continue.js +42 -0
  116. package/dist/src/vendor/linejs/base/core/utils/continue.js.map +1 -0
  117. package/dist/src/vendor/linejs/base/core/utils/devices.js +67 -0
  118. package/dist/src/vendor/linejs/base/core/utils/devices.js.map +1 -0
  119. package/dist/src/vendor/linejs/base/core/utils/error.js +11 -0
  120. package/dist/src/vendor/linejs/base/core/utils/error.js.map +1 -0
  121. package/dist/src/vendor/linejs/base/core/utils/events.js +1 -0
  122. package/dist/src/vendor/linejs/base/core/utils/events.js.map +1 -0
  123. package/dist/src/vendor/linejs/base/e2ee/mod.js +817 -0
  124. package/dist/src/vendor/linejs/base/e2ee/mod.js.map +1 -0
  125. package/dist/src/vendor/linejs/base/login/mod.js +594 -0
  126. package/dist/src/vendor/linejs/base/login/mod.js.map +1 -0
  127. package/dist/src/vendor/linejs/base/login/regex.js +6 -0
  128. package/dist/src/vendor/linejs/base/login/regex.js.map +1 -0
  129. package/dist/src/vendor/linejs/base/login/rsa-verify.js +73 -0
  130. package/dist/src/vendor/linejs/base/login/rsa-verify.js.map +1 -0
  131. package/dist/src/vendor/linejs/base/mod.js +6 -0
  132. package/dist/src/vendor/linejs/base/mod.js.map +1 -0
  133. package/dist/src/vendor/linejs/base/obs/mime.js +138 -0
  134. package/dist/src/vendor/linejs/base/obs/mime.js.map +1 -0
  135. package/dist/src/vendor/linejs/base/obs/mod.js +309 -0
  136. package/dist/src/vendor/linejs/base/obs/mod.js.map +1 -0
  137. package/dist/src/vendor/linejs/base/polling/mod.js +153 -0
  138. package/dist/src/vendor/linejs/base/polling/mod.js.map +1 -0
  139. package/dist/src/vendor/linejs/base/push/conn.js +254 -0
  140. package/dist/src/vendor/linejs/base/push/conn.js.map +1 -0
  141. package/dist/src/vendor/linejs/base/push/connData.js +81 -0
  142. package/dist/src/vendor/linejs/base/push/connData.js.map +1 -0
  143. package/dist/src/vendor/linejs/base/push/connManager.js +422 -0
  144. package/dist/src/vendor/linejs/base/push/connManager.js.map +1 -0
  145. package/dist/src/vendor/linejs/base/push/mod.js +2 -0
  146. package/dist/src/vendor/linejs/base/push/mod.js.map +1 -0
  147. package/dist/src/vendor/linejs/base/request/mod.js +195 -0
  148. package/dist/src/vendor/linejs/base/request/mod.js.map +1 -0
  149. package/dist/src/vendor/linejs/base/service/auth/mod.js +83 -0
  150. package/dist/src/vendor/linejs/base/service/auth/mod.js.map +1 -0
  151. package/dist/src/vendor/linejs/base/service/call/mod.js +63 -0
  152. package/dist/src/vendor/linejs/base/service/call/mod.js.map +1 -0
  153. package/dist/src/vendor/linejs/base/service/channel/mod.js +52 -0
  154. package/dist/src/vendor/linejs/base/service/channel/mod.js.map +1 -0
  155. package/dist/src/vendor/linejs/base/service/liff/mod.js +240 -0
  156. package/dist/src/vendor/linejs/base/service/liff/mod.js.map +1 -0
  157. package/dist/src/vendor/linejs/base/service/livetalk/mod.js +90 -0
  158. package/dist/src/vendor/linejs/base/service/livetalk/mod.js.map +1 -0
  159. package/dist/src/vendor/linejs/base/service/mod.js +9 -0
  160. package/dist/src/vendor/linejs/base/service/mod.js.map +1 -0
  161. package/dist/src/vendor/linejs/base/service/relation/mod.js +86 -0
  162. package/dist/src/vendor/linejs/base/service/relation/mod.js.map +1 -0
  163. package/dist/src/vendor/linejs/base/service/square/mod.js +414 -0
  164. package/dist/src/vendor/linejs/base/service/square/mod.js.map +1 -0
  165. package/dist/src/vendor/linejs/base/service/talk/mod.js +525 -0
  166. package/dist/src/vendor/linejs/base/service/talk/mod.js.map +1 -0
  167. package/dist/src/vendor/linejs/base/service/types.js +1 -0
  168. package/dist/src/vendor/linejs/base/service/types.js.map +1 -0
  169. package/dist/src/vendor/linejs/base/storage/base.js +5 -0
  170. package/dist/src/vendor/linejs/base/storage/base.js.map +1 -0
  171. package/dist/src/vendor/linejs/base/storage/file.js +63 -0
  172. package/dist/src/vendor/linejs/base/storage/file.js.map +1 -0
  173. package/dist/src/vendor/linejs/base/storage/memory.js +46 -0
  174. package/dist/src/vendor/linejs/base/storage/memory.js.map +1 -0
  175. package/dist/src/vendor/linejs/base/storage/mod.js +4 -0
  176. package/dist/src/vendor/linejs/base/storage/mod.js.map +1 -0
  177. package/dist/src/vendor/linejs/base/thrift/README.md +53 -0
  178. package/dist/src/vendor/linejs/base/thrift/mod.js +22 -0
  179. package/dist/src/vendor/linejs/base/thrift/mod.js.map +1 -0
  180. package/dist/src/vendor/linejs/base/thrift/readwrite/declares.js +54 -0
  181. package/dist/src/vendor/linejs/base/thrift/readwrite/declares.js.map +1 -0
  182. package/dist/src/vendor/linejs/base/thrift/readwrite/read.js +115 -0
  183. package/dist/src/vendor/linejs/base/thrift/readwrite/read.js.map +1 -0
  184. package/dist/src/vendor/linejs/base/thrift/readwrite/struct.js +14449 -0
  185. package/dist/src/vendor/linejs/base/thrift/readwrite/struct.js.map +1 -0
  186. package/dist/src/vendor/linejs/base/thrift/readwrite/tmc.js +460 -0
  187. package/dist/src/vendor/linejs/base/thrift/readwrite/tmc.js.map +1 -0
  188. package/dist/src/vendor/linejs/base/thrift/readwrite/write.js +234 -0
  189. package/dist/src/vendor/linejs/base/thrift/readwrite/write.js.map +1 -0
  190. package/dist/src/vendor/linejs/base/thrift/rename/parser.js +121 -0
  191. package/dist/src/vendor/linejs/base/thrift/rename/parser.js.map +1 -0
  192. package/dist/src/vendor/linejs/base/timeline/mod.js +360 -0
  193. package/dist/src/vendor/linejs/base/timeline/mod.js.map +1 -0
  194. package/dist/src/vendor/linejs/base/types.js +8 -0
  195. package/dist/src/vendor/linejs/base/types.js.map +1 -0
  196. package/dist/src/vendor/linejs/client/client.js +185 -0
  197. package/dist/src/vendor/linejs/client/client.js.map +1 -0
  198. package/dist/src/vendor/linejs/client/features/chat/fetcher.js +29 -0
  199. package/dist/src/vendor/linejs/client/features/chat/fetcher.js.map +1 -0
  200. package/dist/src/vendor/linejs/client/features/chat/mod.js +118 -0
  201. package/dist/src/vendor/linejs/client/features/chat/mod.js.map +1 -0
  202. package/dist/src/vendor/linejs/client/features/message/internal-types.js +1 -0
  203. package/dist/src/vendor/linejs/client/features/message/internal-types.js.map +1 -0
  204. package/dist/src/vendor/linejs/client/features/message/mod.js +5 -0
  205. package/dist/src/vendor/linejs/client/features/message/mod.js.map +1 -0
  206. package/dist/src/vendor/linejs/client/features/message/square.js +464 -0
  207. package/dist/src/vendor/linejs/client/features/message/square.js.map +1 -0
  208. package/dist/src/vendor/linejs/client/features/message/talk.js +340 -0
  209. package/dist/src/vendor/linejs/client/features/message/talk.js.map +1 -0
  210. package/dist/src/vendor/linejs/client/features/message/types.js +1 -0
  211. package/dist/src/vendor/linejs/client/features/message/types.js.map +1 -0
  212. package/dist/src/vendor/linejs/client/features/message/utils.js +83 -0
  213. package/dist/src/vendor/linejs/client/features/message/utils.js.map +1 -0
  214. package/dist/src/vendor/linejs/client/features/square/mod.js +173 -0
  215. package/dist/src/vendor/linejs/client/features/square/mod.js.map +1 -0
  216. package/dist/src/vendor/linejs/client/features/user/mod.js +9 -0
  217. package/dist/src/vendor/linejs/client/features/user/mod.js.map +1 -0
  218. package/dist/src/vendor/linejs/client/login.js +36 -0
  219. package/dist/src/vendor/linejs/client/login.js.map +1 -0
  220. package/dist/src/vendor/linejs/client/mod.js +3 -0
  221. package/dist/src/vendor/linejs/client/mod.js.map +1 -0
  222. package/dist/src/vendor/linejs/deno.json +24 -0
  223. package/dist/src/vendor/linejs/package.json +35 -0
  224. package/dist/src/vendor/linejs-types/LICENSE +21 -0
  225. package/dist/src/vendor/linejs-types/README.md +11 -0
  226. package/dist/src/vendor/linejs-types/_dist/line_types.d.ts +11629 -0
  227. package/dist/src/vendor/linejs-types/_dist/line_types.d.ts.map +1 -0
  228. package/dist/src/vendor/linejs-types/_dist/thrift.d.ts +4 -0
  229. package/dist/src/vendor/linejs-types/_dist/thrift.d.ts.map +1 -0
  230. package/dist/src/vendor/linejs-types/deno.json +12 -0
  231. package/dist/src/vendor/linejs-types/line_types.js +2704 -0
  232. package/dist/src/vendor/linejs-types/line_types.js.map +1 -0
  233. package/dist/src/vendor/linejs-types/package.json +20 -0
  234. package/dist/src/vendor/linejs-types/thrift.js +37670 -0
  235. package/dist/src/vendor/linejs-types/thrift.js.map +1 -0
  236. package/dist/src/vendor/loose-types/LICENSE +21 -0
  237. package/dist/src/vendor/loose-types/README.md +30 -0
  238. package/dist/src/vendor/loose-types/_dist/mod.d.ts +23 -0
  239. package/dist/src/vendor/loose-types/_dist/mod.d.ts.map +1 -0
  240. package/dist/src/vendor/loose-types/deno.json +7 -0
  241. package/dist/src/vendor/loose-types/mod.js +7 -0
  242. package/dist/src/vendor/loose-types/mod.js.map +1 -0
  243. package/dist/src/vendor/loose-types/package.json +14 -0
  244. package/dist/src/vendor/runtime-shims.d.ts +13 -0
  245. package/package.json +1 -4
  246. package/scripts/postbuild.ts +5 -1
  247. package/skills/agent-channeltalk/SKILL.md +1 -1
  248. package/skills/agent-channeltalkbot/SKILL.md +1 -1
  249. package/skills/agent-discord/SKILL.md +1 -1
  250. package/skills/agent-discordbot/SKILL.md +1 -1
  251. package/skills/agent-instagram/SKILL.md +1 -1
  252. package/skills/agent-kakaotalk/SKILL.md +1 -1
  253. package/skills/agent-line/SKILL.md +1 -1
  254. package/skills/agent-slack/SKILL.md +1 -1
  255. package/skills/agent-slackbot/SKILL.md +1 -1
  256. package/skills/agent-teams/SKILL.md +1 -1
  257. package/skills/agent-telegram/SKILL.md +1 -1
  258. package/skills/agent-webex/SKILL.md +1 -1
  259. package/skills/agent-wechatbot/SKILL.md +1 -1
  260. package/skills/agent-whatsapp/SKILL.md +1 -1
  261. package/skills/agent-whatsappbot/SKILL.md +1 -1
  262. package/src/platforms/line/client.ts +2 -2
  263. package/src/vendor/linejs/LICENSE +21 -0
  264. package/src/vendor/linejs/README.md +89 -0
  265. package/src/vendor/linejs/_dist/base/core/mod.d.ts +125 -0
  266. package/src/vendor/linejs/_dist/base/core/mod.d.ts.map +1 -0
  267. package/src/vendor/linejs/_dist/base/core/typed-event-emitter/index.d.ts +13 -0
  268. package/src/vendor/linejs/_dist/base/core/typed-event-emitter/index.d.ts.map +1 -0
  269. package/src/vendor/linejs/_dist/base/core/utils/continue.d.ts +10 -0
  270. package/src/vendor/linejs/_dist/base/core/utils/continue.d.ts.map +1 -0
  271. package/src/vendor/linejs/_dist/base/core/utils/devices.d.ts +8 -0
  272. package/src/vendor/linejs/_dist/base/core/utils/devices.d.ts.map +1 -0
  273. package/src/vendor/linejs/_dist/base/core/utils/error.d.ts +8 -0
  274. package/src/vendor/linejs/_dist/base/core/utils/error.d.ts.map +1 -0
  275. package/src/vendor/linejs/_dist/base/core/utils/events.d.ts +22 -0
  276. package/src/vendor/linejs/_dist/base/core/utils/events.d.ts.map +1 -0
  277. package/src/vendor/linejs/_dist/base/e2ee/mod.d.ts +64 -0
  278. package/src/vendor/linejs/_dist/base/e2ee/mod.d.ts.map +1 -0
  279. package/src/vendor/linejs/_dist/base/login/mod.d.ts +138 -0
  280. package/src/vendor/linejs/_dist/base/login/mod.d.ts.map +1 -0
  281. package/src/vendor/linejs/_dist/base/mod.d.ts +6 -0
  282. package/src/vendor/linejs/_dist/base/mod.d.ts.map +1 -0
  283. package/src/vendor/linejs/_dist/base/obs/mod.d.ts +100 -0
  284. package/src/vendor/linejs/_dist/base/obs/mod.d.ts.map +1 -0
  285. package/src/vendor/linejs/_dist/base/polling/mod.d.ts +55 -0
  286. package/src/vendor/linejs/_dist/base/polling/mod.d.ts.map +1 -0
  287. package/src/vendor/linejs/_dist/base/push/conn.d.ts +39 -0
  288. package/src/vendor/linejs/_dist/base/push/conn.d.ts.map +1 -0
  289. package/src/vendor/linejs/_dist/base/push/connData.d.ts +19 -0
  290. package/src/vendor/linejs/_dist/base/push/connData.d.ts.map +1 -0
  291. package/src/vendor/linejs/_dist/base/push/connManager.d.ts +43 -0
  292. package/src/vendor/linejs/_dist/base/push/connManager.d.ts.map +1 -0
  293. package/src/vendor/linejs/_dist/base/push/mod.d.ts +2 -0
  294. package/src/vendor/linejs/_dist/base/push/mod.d.ts.map +1 -0
  295. package/src/vendor/linejs/_dist/base/request/mod.d.ts +45 -0
  296. package/src/vendor/linejs/_dist/base/request/mod.d.ts.map +1 -0
  297. package/src/vendor/linejs/_dist/base/service/auth/mod.d.ts +32 -0
  298. package/src/vendor/linejs/_dist/base/service/auth/mod.d.ts.map +1 -0
  299. package/src/vendor/linejs/_dist/base/service/call/mod.d.ts +29 -0
  300. package/src/vendor/linejs/_dist/base/service/call/mod.d.ts.map +1 -0
  301. package/src/vendor/linejs/_dist/base/service/channel/mod.d.ts +28 -0
  302. package/src/vendor/linejs/_dist/base/service/channel/mod.d.ts.map +1 -0
  303. package/src/vendor/linejs/_dist/base/service/liff/mod.d.ts +51 -0
  304. package/src/vendor/linejs/_dist/base/service/liff/mod.d.ts.map +1 -0
  305. package/src/vendor/linejs/_dist/base/service/livetalk/mod.d.ts +38 -0
  306. package/src/vendor/linejs/_dist/base/service/livetalk/mod.d.ts.map +1 -0
  307. package/src/vendor/linejs/_dist/base/service/mod.d.ts +9 -0
  308. package/src/vendor/linejs/_dist/base/service/mod.d.ts.map +1 -0
  309. package/src/vendor/linejs/_dist/base/service/relation/mod.d.ts +30 -0
  310. package/src/vendor/linejs/_dist/base/service/relation/mod.d.ts.map +1 -0
  311. package/src/vendor/linejs/_dist/base/service/square/mod.d.ts +162 -0
  312. package/src/vendor/linejs/_dist/base/service/square/mod.d.ts.map +1 -0
  313. package/src/vendor/linejs/_dist/base/service/talk/mod.d.ts +194 -0
  314. package/src/vendor/linejs/_dist/base/service/talk/mod.d.ts.map +1 -0
  315. package/src/vendor/linejs/_dist/base/service/types.d.ts +9 -0
  316. package/src/vendor/linejs/_dist/base/service/types.d.ts.map +1 -0
  317. package/src/vendor/linejs/_dist/base/storage/base.d.ts +34 -0
  318. package/src/vendor/linejs/_dist/base/storage/base.d.ts.map +1 -0
  319. package/src/vendor/linejs/_dist/base/storage/file.d.ts +20 -0
  320. package/src/vendor/linejs/_dist/base/storage/file.d.ts.map +1 -0
  321. package/src/vendor/linejs/_dist/base/storage/memory.d.ts +19 -0
  322. package/src/vendor/linejs/_dist/base/storage/memory.d.ts.map +1 -0
  323. package/src/vendor/linejs/_dist/base/storage/mod.d.ts +4 -0
  324. package/src/vendor/linejs/_dist/base/storage/mod.d.ts.map +1 -0
  325. package/src/vendor/linejs/_dist/base/thrift/mod.d.ts +14 -0
  326. package/src/vendor/linejs/_dist/base/thrift/mod.d.ts.map +1 -0
  327. package/src/vendor/linejs/_dist/base/thrift/readwrite/declares.d.ts +20 -0
  328. package/src/vendor/linejs/_dist/base/thrift/readwrite/declares.d.ts.map +1 -0
  329. package/src/vendor/linejs/_dist/base/thrift/readwrite/read.d.ts +7 -0
  330. package/src/vendor/linejs/_dist/base/thrift/readwrite/read.d.ts.map +1 -0
  331. package/src/vendor/linejs/_dist/base/thrift/readwrite/struct.d.ts +1109 -0
  332. package/src/vendor/linejs/_dist/base/thrift/readwrite/struct.d.ts.map +1 -0
  333. package/src/vendor/linejs/_dist/base/thrift/readwrite/write.d.ts +3 -0
  334. package/src/vendor/linejs/_dist/base/thrift/readwrite/write.d.ts.map +1 -0
  335. package/src/vendor/linejs/_dist/base/thrift/rename/parser.d.ts +7 -0
  336. package/src/vendor/linejs/_dist/base/thrift/rename/parser.d.ts.map +1 -0
  337. package/src/vendor/linejs/_dist/base/timeline/mod.d.ts +83 -0
  338. package/src/vendor/linejs/_dist/base/timeline/mod.d.ts.map +1 -0
  339. package/src/vendor/linejs/_dist/base/types.d.ts +11 -0
  340. package/src/vendor/linejs/_dist/base/types.d.ts.map +1 -0
  341. package/src/vendor/linejs/_dist/client/client.d.ts +70 -0
  342. package/src/vendor/linejs/_dist/client/client.d.ts.map +1 -0
  343. package/src/vendor/linejs/_dist/client/features/chat/fetcher.d.ts +5 -0
  344. package/src/vendor/linejs/_dist/client/features/chat/fetcher.d.ts.map +1 -0
  345. package/src/vendor/linejs/_dist/client/features/chat/mod.d.ts +58 -0
  346. package/src/vendor/linejs/_dist/client/features/chat/mod.d.ts.map +1 -0
  347. package/src/vendor/linejs/_dist/client/features/message/internal-types.d.ts +5 -0
  348. package/src/vendor/linejs/_dist/client/features/message/internal-types.d.ts.map +1 -0
  349. package/src/vendor/linejs/_dist/client/features/message/mod.d.ts +3 -0
  350. package/src/vendor/linejs/_dist/client/features/message/mod.d.ts.map +1 -0
  351. package/src/vendor/linejs/_dist/client/features/message/square.d.ts +94 -0
  352. package/src/vendor/linejs/_dist/client/features/message/square.d.ts.map +1 -0
  353. package/src/vendor/linejs/_dist/client/features/message/talk.d.ts +87 -0
  354. package/src/vendor/linejs/_dist/client/features/message/talk.d.ts.map +1 -0
  355. package/src/vendor/linejs/_dist/client/features/message/types.d.ts +29 -0
  356. package/src/vendor/linejs/_dist/client/features/message/types.d.ts.map +1 -0
  357. package/src/vendor/linejs/_dist/client/features/square/mod.d.ts +65 -0
  358. package/src/vendor/linejs/_dist/client/features/square/mod.d.ts.map +1 -0
  359. package/src/vendor/linejs/_dist/client/features/user/mod.d.ts +10 -0
  360. package/src/vendor/linejs/_dist/client/features/user/mod.d.ts.map +1 -0
  361. package/src/vendor/linejs/_dist/client/login.d.ts +41 -0
  362. package/src/vendor/linejs/_dist/client/login.d.ts.map +1 -0
  363. package/src/vendor/linejs/_dist/client/mod.d.ts +3 -0
  364. package/src/vendor/linejs/_dist/client/mod.d.ts.map +1 -0
  365. package/src/vendor/linejs/base/core/mod.js +197 -0
  366. package/src/vendor/linejs/base/core/mod.js.map +1 -0
  367. package/src/vendor/linejs/base/core/typed-event-emitter/index.js +43 -0
  368. package/src/vendor/linejs/base/core/typed-event-emitter/index.js.map +1 -0
  369. package/src/vendor/linejs/base/core/utils/continue.js +42 -0
  370. package/src/vendor/linejs/base/core/utils/continue.js.map +1 -0
  371. package/src/vendor/linejs/base/core/utils/devices.js +67 -0
  372. package/src/vendor/linejs/base/core/utils/devices.js.map +1 -0
  373. package/src/vendor/linejs/base/core/utils/error.js +11 -0
  374. package/src/vendor/linejs/base/core/utils/error.js.map +1 -0
  375. package/src/vendor/linejs/base/core/utils/events.js +1 -0
  376. package/src/vendor/linejs/base/core/utils/events.js.map +1 -0
  377. package/src/vendor/linejs/base/e2ee/mod.js +817 -0
  378. package/src/vendor/linejs/base/e2ee/mod.js.map +1 -0
  379. package/src/vendor/linejs/base/login/mod.js +594 -0
  380. package/src/vendor/linejs/base/login/mod.js.map +1 -0
  381. package/src/vendor/linejs/base/login/regex.js +6 -0
  382. package/src/vendor/linejs/base/login/regex.js.map +1 -0
  383. package/src/vendor/linejs/base/login/rsa-verify.js +73 -0
  384. package/src/vendor/linejs/base/login/rsa-verify.js.map +1 -0
  385. package/src/vendor/linejs/base/mod.js +6 -0
  386. package/src/vendor/linejs/base/mod.js.map +1 -0
  387. package/src/vendor/linejs/base/obs/mime.js +138 -0
  388. package/src/vendor/linejs/base/obs/mime.js.map +1 -0
  389. package/src/vendor/linejs/base/obs/mod.js +309 -0
  390. package/src/vendor/linejs/base/obs/mod.js.map +1 -0
  391. package/src/vendor/linejs/base/polling/mod.js +153 -0
  392. package/src/vendor/linejs/base/polling/mod.js.map +1 -0
  393. package/src/vendor/linejs/base/push/conn.js +254 -0
  394. package/src/vendor/linejs/base/push/conn.js.map +1 -0
  395. package/src/vendor/linejs/base/push/connData.js +81 -0
  396. package/src/vendor/linejs/base/push/connData.js.map +1 -0
  397. package/src/vendor/linejs/base/push/connManager.js +422 -0
  398. package/src/vendor/linejs/base/push/connManager.js.map +1 -0
  399. package/src/vendor/linejs/base/push/mod.js +2 -0
  400. package/src/vendor/linejs/base/push/mod.js.map +1 -0
  401. package/src/vendor/linejs/base/request/mod.js +195 -0
  402. package/src/vendor/linejs/base/request/mod.js.map +1 -0
  403. package/src/vendor/linejs/base/service/auth/mod.js +83 -0
  404. package/src/vendor/linejs/base/service/auth/mod.js.map +1 -0
  405. package/src/vendor/linejs/base/service/call/mod.js +63 -0
  406. package/src/vendor/linejs/base/service/call/mod.js.map +1 -0
  407. package/src/vendor/linejs/base/service/channel/mod.js +52 -0
  408. package/src/vendor/linejs/base/service/channel/mod.js.map +1 -0
  409. package/src/vendor/linejs/base/service/liff/mod.js +240 -0
  410. package/src/vendor/linejs/base/service/liff/mod.js.map +1 -0
  411. package/src/vendor/linejs/base/service/livetalk/mod.js +90 -0
  412. package/src/vendor/linejs/base/service/livetalk/mod.js.map +1 -0
  413. package/src/vendor/linejs/base/service/mod.js +9 -0
  414. package/src/vendor/linejs/base/service/mod.js.map +1 -0
  415. package/src/vendor/linejs/base/service/relation/mod.js +86 -0
  416. package/src/vendor/linejs/base/service/relation/mod.js.map +1 -0
  417. package/src/vendor/linejs/base/service/square/mod.js +414 -0
  418. package/src/vendor/linejs/base/service/square/mod.js.map +1 -0
  419. package/src/vendor/linejs/base/service/talk/mod.js +525 -0
  420. package/src/vendor/linejs/base/service/talk/mod.js.map +1 -0
  421. package/src/vendor/linejs/base/service/types.js +1 -0
  422. package/src/vendor/linejs/base/service/types.js.map +1 -0
  423. package/src/vendor/linejs/base/storage/base.js +5 -0
  424. package/src/vendor/linejs/base/storage/base.js.map +1 -0
  425. package/src/vendor/linejs/base/storage/file.js +63 -0
  426. package/src/vendor/linejs/base/storage/file.js.map +1 -0
  427. package/src/vendor/linejs/base/storage/memory.js +46 -0
  428. package/src/vendor/linejs/base/storage/memory.js.map +1 -0
  429. package/src/vendor/linejs/base/storage/mod.js +4 -0
  430. package/src/vendor/linejs/base/storage/mod.js.map +1 -0
  431. package/src/vendor/linejs/base/thrift/README.md +53 -0
  432. package/src/vendor/linejs/base/thrift/mod.js +22 -0
  433. package/src/vendor/linejs/base/thrift/mod.js.map +1 -0
  434. package/src/vendor/linejs/base/thrift/readwrite/declares.js +54 -0
  435. package/src/vendor/linejs/base/thrift/readwrite/declares.js.map +1 -0
  436. package/src/vendor/linejs/base/thrift/readwrite/read.js +115 -0
  437. package/src/vendor/linejs/base/thrift/readwrite/read.js.map +1 -0
  438. package/src/vendor/linejs/base/thrift/readwrite/struct.js +14449 -0
  439. package/src/vendor/linejs/base/thrift/readwrite/struct.js.map +1 -0
  440. package/src/vendor/linejs/base/thrift/readwrite/tmc.js +460 -0
  441. package/src/vendor/linejs/base/thrift/readwrite/tmc.js.map +1 -0
  442. package/src/vendor/linejs/base/thrift/readwrite/write.js +234 -0
  443. package/src/vendor/linejs/base/thrift/readwrite/write.js.map +1 -0
  444. package/src/vendor/linejs/base/thrift/rename/parser.js +121 -0
  445. package/src/vendor/linejs/base/thrift/rename/parser.js.map +1 -0
  446. package/src/vendor/linejs/base/timeline/mod.js +360 -0
  447. package/src/vendor/linejs/base/timeline/mod.js.map +1 -0
  448. package/src/vendor/linejs/base/types.js +8 -0
  449. package/src/vendor/linejs/base/types.js.map +1 -0
  450. package/src/vendor/linejs/client/client.js +185 -0
  451. package/src/vendor/linejs/client/client.js.map +1 -0
  452. package/src/vendor/linejs/client/features/chat/fetcher.js +29 -0
  453. package/src/vendor/linejs/client/features/chat/fetcher.js.map +1 -0
  454. package/src/vendor/linejs/client/features/chat/mod.js +118 -0
  455. package/src/vendor/linejs/client/features/chat/mod.js.map +1 -0
  456. package/src/vendor/linejs/client/features/message/internal-types.js +1 -0
  457. package/src/vendor/linejs/client/features/message/internal-types.js.map +1 -0
  458. package/src/vendor/linejs/client/features/message/mod.js +5 -0
  459. package/src/vendor/linejs/client/features/message/mod.js.map +1 -0
  460. package/src/vendor/linejs/client/features/message/square.js +464 -0
  461. package/src/vendor/linejs/client/features/message/square.js.map +1 -0
  462. package/src/vendor/linejs/client/features/message/talk.js +340 -0
  463. package/src/vendor/linejs/client/features/message/talk.js.map +1 -0
  464. package/src/vendor/linejs/client/features/message/types.js +1 -0
  465. package/src/vendor/linejs/client/features/message/types.js.map +1 -0
  466. package/src/vendor/linejs/client/features/message/utils.js +83 -0
  467. package/src/vendor/linejs/client/features/message/utils.js.map +1 -0
  468. package/src/vendor/linejs/client/features/square/mod.js +173 -0
  469. package/src/vendor/linejs/client/features/square/mod.js.map +1 -0
  470. package/src/vendor/linejs/client/features/user/mod.js +9 -0
  471. package/src/vendor/linejs/client/features/user/mod.js.map +1 -0
  472. package/src/vendor/linejs/client/login.js +36 -0
  473. package/src/vendor/linejs/client/login.js.map +1 -0
  474. package/src/vendor/linejs/client/mod.js +3 -0
  475. package/src/vendor/linejs/client/mod.js.map +1 -0
  476. package/src/vendor/linejs/deno.json +24 -0
  477. package/src/vendor/linejs/package.json +35 -0
  478. package/src/vendor/linejs-types/LICENSE +21 -0
  479. package/src/vendor/linejs-types/README.md +11 -0
  480. package/src/vendor/linejs-types/_dist/line_types.d.ts +11629 -0
  481. package/src/vendor/linejs-types/_dist/line_types.d.ts.map +1 -0
  482. package/src/vendor/linejs-types/_dist/thrift.d.ts +4 -0
  483. package/src/vendor/linejs-types/_dist/thrift.d.ts.map +1 -0
  484. package/src/vendor/linejs-types/deno.json +12 -0
  485. package/src/vendor/linejs-types/line_types.js +2704 -0
  486. package/src/vendor/linejs-types/line_types.js.map +1 -0
  487. package/src/vendor/linejs-types/package.json +20 -0
  488. package/src/vendor/linejs-types/thrift.js +37670 -0
  489. package/src/vendor/linejs-types/thrift.js.map +1 -0
  490. package/src/vendor/loose-types/LICENSE +21 -0
  491. package/src/vendor/loose-types/README.md +30 -0
  492. package/src/vendor/loose-types/_dist/mod.d.ts +23 -0
  493. package/src/vendor/loose-types/_dist/mod.d.ts.map +1 -0
  494. package/src/vendor/loose-types/deno.json +7 -0
  495. package/src/vendor/loose-types/mod.js +7 -0
  496. package/src/vendor/loose-types/mod.js.map +1 -0
  497. package/src/vendor/loose-types/package.json +14 -0
  498. package/src/vendor/runtime-shims.d.ts +13 -0
  499. package/tsconfig.json +7 -1
@@ -0,0 +1,817 @@
1
+ import { sharedKey } from "curve25519-js";
2
+ import crypto from "node:crypto";
3
+ import { Buffer } from "node:buffer";
4
+ import nacl from "tweetnacl";
5
+ import { InternalError } from "../core/utils/error.js";
6
+ import * as LINETypes from "../../../linejs-types/line_types.js";
7
+ import { ContentType } from "../thrift/readwrite/struct.js";
8
+ import CryptoJS from "crypto-js";
9
+ export class E2EE {
10
+ client;
11
+ constructor(client){
12
+ this.client = client;
13
+ }
14
+ async getE2EESelfKeyData(mid) {
15
+ try {
16
+ const keyData = JSON.parse(await this.client.storage.get("e2eeKeys:" + mid));
17
+ if (keyData && keyData.privKey && keyData.pubKey) return keyData;
18
+ } catch (_e) {
19
+ /* Do Nothing */ }
20
+ const keys = await this.client.talk.getE2EEPublicKeys();
21
+ for(let i = 0; i < keys.length; i++){
22
+ const key = keys[i];
23
+ const keyId = key.keyId ?? key[2];
24
+ const _keyData = await this.getE2EESelfKeyDataByKeyId(keyId);
25
+ if (_keyData) {
26
+ await this.saveE2EESelfKeyData(_keyData);
27
+ return _keyData;
28
+ }
29
+ }
30
+ throw new InternalError("NoE2EEKey", "E2EE Key has not been saved, try register `saveE2EESelfKeyDataByKeyId` or use E2EE Login");
31
+ }
32
+ async getE2EESelfKeyDataByKeyId(keyId) {
33
+ try {
34
+ return JSON.parse(await this.client.storage.get("e2eeKeys:" + keyId));
35
+ } catch (_e) {
36
+ /* Do Nothing */ }
37
+ }
38
+ async saveE2EESelfKeyDataByKeyId(keyId, value) {
39
+ await this.client.storage.set("e2eeKeys:" + keyId, JSON.stringify(value));
40
+ }
41
+ async saveE2EESelfKeyData(value) {
42
+ await this.client.storage.set("e2eeKeys:" + this.client.profile?.mid, JSON.stringify(value));
43
+ }
44
+ async getE2EELocalPublicKey(mid, keyId) {
45
+ const toType = this.client.getToType(mid);
46
+ if (toType === LINETypes.enums.MIDType.USER) {
47
+ let key = undefined;
48
+ if (keyId !== undefined) {
49
+ key = await this.client.storage.get(`e2eePublicKeys:${keyId}`);
50
+ }
51
+ let receiverKeyData;
52
+ if (!key) {
53
+ receiverKeyData = await this.client.talk.negotiateE2EEPublicKey({
54
+ mid
55
+ });
56
+ const specVersion = receiverKeyData.specVersion;
57
+ if (specVersion === -1) {
58
+ throw new InternalError("Not support E2EE", `${mid}`);
59
+ }
60
+ const publicKey = receiverKeyData.publicKey;
61
+ const receiverKeyId = publicKey.keyId;
62
+ if (receiverKeyId == keyId) {
63
+ key = Buffer.from(publicKey.keyData).toString("base64");
64
+ await this.client.storage.set(`e2eePublicKeys:${keyId}`, key);
65
+ } else {
66
+ throw new InternalError("No E2EEKey", `E2EE key id ${keyId} not found on ${mid}, key id should be ${receiverKeyId}`);
67
+ }
68
+ }
69
+ return Buffer.from(key, "base64");
70
+ } else {
71
+ let key;
72
+ key = await this.client.storage.get(`e2eeGroupKeys:${mid}`);
73
+ if (keyId && key) {
74
+ const keyData = JSON.parse(key);
75
+ if (keyId !== keyData["keyId"]) {
76
+ this.e2eeLog("getE2EELocalPublicKeykeyIdMismatch", mid);
77
+ key = undefined;
78
+ } else {
79
+ return keyData;
80
+ }
81
+ } else {
82
+ key = undefined;
83
+ }
84
+ if (!key) {
85
+ let e2eeGroupSharedKey;
86
+ try {
87
+ e2eeGroupSharedKey = await this.client.talk.getLastE2EEGroupSharedKey({
88
+ keyVersion: 2,
89
+ chatMid: mid
90
+ });
91
+ } catch (error) {
92
+ if (error instanceof InternalError && error.data.code == "NOT_FOUND") {
93
+ e2eeGroupSharedKey = await this.tryRegisterE2EEGroupKey(mid);
94
+ } else {
95
+ throw error;
96
+ }
97
+ }
98
+ const groupKeyId = e2eeGroupSharedKey.groupKeyId;
99
+ const creator = e2eeGroupSharedKey.creator;
100
+ const creatorKeyId = e2eeGroupSharedKey.creatorKeyId;
101
+ const receiverKeyId = e2eeGroupSharedKey.receiverKeyId;
102
+ const encryptedSharedKey = Buffer.from(e2eeGroupSharedKey.encryptedSharedKey);
103
+ const selfKey = Buffer.from((await this.getE2EESelfKeyDataByKeyId(receiverKeyId))["privKey"], "base64");
104
+ const creatorKey = await this.getE2EELocalPublicKey(creator, creatorKeyId);
105
+ const aesKey = this.generateSharedSecret(selfKey, creatorKey);
106
+ const aes_key = this.getSHA256Sum(Buffer.from(aesKey), "Key");
107
+ const aes_iv = this.xor(this.getSHA256Sum(Buffer.from(aesKey), "IV"));
108
+ this.e2eeLog("getE2EELocalPublicKeyAESInfo", {
109
+ aes_key,
110
+ aes_iv,
111
+ encryptedSharedKey
112
+ });
113
+ const decipher = crypto.createDecipheriv("aes-256-cbc", aes_key, aes_iv);
114
+ const plainText = Buffer.concat([
115
+ decipher.update(encryptedSharedKey),
116
+ decipher.final()
117
+ ]);
118
+ this.e2eeLog("getE2EELocalPublicKeyDecryptedLength", plainText.length);
119
+ const decrypted = plainText.toString("base64");
120
+ this.e2eeLog("getE2EELocalPublicKeyDecrypted", decrypted);
121
+ const data = {
122
+ privKey: decrypted,
123
+ keyId: groupKeyId
124
+ };
125
+ key = JSON.stringify(data);
126
+ await this.client.storage.set(`e2eeGroupKeys:${mid}`, key);
127
+ return data;
128
+ }
129
+ return JSON.parse(key);
130
+ }
131
+ }
132
+ async tryRegisterE2EEGroupKey(chatMid) {
133
+ const e2eePublicKeys = await this.client.talk.getLastE2EEPublicKeys({
134
+ chatMid
135
+ });
136
+ const members = [];
137
+ const keyIds = [];
138
+ const encryptedSharedKeys = [];
139
+ const selfKeyId = e2eePublicKeys[this.client.profile.mid].keyId;
140
+ const selfKeyData = await this.getE2EESelfKeyDataByKeyId(selfKeyId);
141
+ if (!selfKeyData) {
142
+ throw new InternalError("NoE2EEKey", "E2EE Key has not been saved, try register `saveE2EESelfKeyDataByKeyId` or use E2EE Login");
143
+ }
144
+ const selfKey = Buffer.from(selfKeyData.privKey, "base64");
145
+ const private_key = crypto.randomBytes(32);
146
+ for(const mid in e2eePublicKeys){
147
+ if (Object.prototype.hasOwnProperty.call(e2eePublicKeys, mid)) {
148
+ const key = e2eePublicKeys[mid];
149
+ members.push(mid);
150
+ const { keyId, keyData } = key;
151
+ keyIds.push(keyId);
152
+ const aesKey = this.generateSharedSecret(selfKey, Buffer.from(keyData));
153
+ const aes_key = this.getSHA256Sum(Buffer.from(aesKey), "Key");
154
+ const aes_iv = this.xor(this.getSHA256Sum(Buffer.from(aesKey), "IV"));
155
+ const cipher = crypto.createCipheriv("aes-256-cbc", aes_key, aes_iv);
156
+ const encryptedSharedKey = Buffer.concat([
157
+ cipher.update(private_key),
158
+ cipher.final()
159
+ ]);
160
+ encryptedSharedKeys.push(encryptedSharedKey);
161
+ }
162
+ }
163
+ return this.client.talk.registerE2EEGroupKey({
164
+ keyVersion: 1,
165
+ chatMid,
166
+ keyIds,
167
+ members,
168
+ encryptedSharedKeys
169
+ });
170
+ }
171
+ generateSharedSecret(privateKey, publicKey) {
172
+ this.e2eeLog("generateSharedSecretKeyInfo", {
173
+ privateKey: privateKey.length,
174
+ publicKey: publicKey.length
175
+ });
176
+ return sharedKey(Uint8Array.from(privateKey), Uint8Array.from(publicKey));
177
+ }
178
+ xor(buf) {
179
+ const bufLength = Math.floor(buf.length / 2);
180
+ const buf2 = Buffer.alloc(bufLength);
181
+ for(let i = 0; i < bufLength; i++){
182
+ buf2[i] = buf[i] ^ buf[bufLength + i];
183
+ }
184
+ return buf2;
185
+ }
186
+ getSHA256Sum(...args) {
187
+ const hash = crypto.createHash("sha256");
188
+ for (let arg of args){
189
+ if (typeof arg === "string") {
190
+ arg = Buffer.from(arg);
191
+ }
192
+ hash.update(arg);
193
+ }
194
+ return hash.digest();
195
+ }
196
+ encryptAESECB(aesKey, plainData) {
197
+ const cipher = crypto.createCipheriv("aes-256-ecb", aesKey, new Uint8Array(0));
198
+ cipher.setAutoPadding(false);
199
+ return Buffer.concat([
200
+ cipher.update(plainData),
201
+ cipher.final()
202
+ ]);
203
+ }
204
+ async decodeE2EEKeyV1(data, secret) {
205
+ if (data.encryptedKeyChain) {
206
+ const encryptedKeyChain = Buffer.from(data.encryptedKeyChain, "base64");
207
+ const keyId = data.keyId;
208
+ const publicKey = Buffer.from(data.publicKey, "base64");
209
+ const e2eeVersion = data.e2eeVersion;
210
+ const [privKey, pubKey] = this.decryptKeyChain(publicKey, secret, encryptedKeyChain);
211
+ this.e2eeLog("decodeE2EEKeyV1E2EEKeyInfo", {
212
+ e2eeKey: {
213
+ keyId,
214
+ privKey,
215
+ pubKey,
216
+ e2eeVersion
217
+ }
218
+ });
219
+ await this.client.storage.set("e2eeKeys:" + keyId, JSON.stringify({
220
+ keyId,
221
+ privKey: privKey.toString("base64"),
222
+ pubKey: pubKey.toString("base64"),
223
+ e2eeVersion
224
+ }));
225
+ return {
226
+ keyId,
227
+ privKey,
228
+ pubKey,
229
+ e2eeVersion
230
+ };
231
+ }
232
+ }
233
+ decryptKeyChain(publicKey, privateKey, encryptedKeyChain) {
234
+ this.e2eeLog("decryptKeyChainKeyInfo", {
235
+ decryptKeyChain: {
236
+ publicKey: publicKey.toString("base64"),
237
+ privateKey: privateKey.toString("base64"),
238
+ encryptedKeyChain: encryptedKeyChain.toString("base64")
239
+ }
240
+ });
241
+ const sharedSecret = this.generateSharedSecret(privateKey, publicKey);
242
+ const aesKey = this.getSHA256Sum(Buffer.from(sharedSecret), "Key");
243
+ const aesIv = this.xor(this.getSHA256Sum(Buffer.from(sharedSecret), "IV"));
244
+ const decipher = crypto.createDecipheriv("aes-256-cbc", aesKey, aesIv);
245
+ decipher.setAutoPadding(false);
246
+ const keychainData = Buffer.concat([
247
+ decipher.update(encryptedKeyChain),
248
+ decipher.final()
249
+ ]);
250
+ this.e2eeLog("decryptKeyChainBinKeyInfo", {
251
+ binkey: keychainData.toString("hex")
252
+ });
253
+ const key = this.client.thrift.readThriftStruct(keychainData)[1];
254
+ const publicKeyBytes = Buffer.from(key[0][4]);
255
+ const privateKeyBytes = Buffer.from(key[0][5]);
256
+ return [
257
+ privateKeyBytes,
258
+ publicKeyBytes
259
+ ];
260
+ }
261
+ encryptDeviceSecret(publicKey, privateKey, encryptedKeyChain) {
262
+ const sharedSecret = this.generateSharedSecret(privateKey, publicKey);
263
+ const aesKey = this.getSHA256Sum(Buffer.from(sharedSecret), "Key");
264
+ encryptedKeyChain = this.xor(this.getSHA256Sum(encryptedKeyChain));
265
+ const cipher = crypto.createCipheriv("aes-256-ecb", aesKey, new Uint8Array(0));
266
+ cipher.setAutoPadding(false);
267
+ const keychainData = Buffer.concat([
268
+ cipher.update(encryptedKeyChain),
269
+ cipher.final()
270
+ ]);
271
+ return keychainData;
272
+ }
273
+ generateAAD(a, b, c, d, e = 2, f = 0) {
274
+ let aad = Buffer.alloc(0);
275
+ aad = Buffer.concat([
276
+ aad,
277
+ Buffer.from(a)
278
+ ]);
279
+ aad = Buffer.concat([
280
+ aad,
281
+ Buffer.from(b)
282
+ ]);
283
+ aad = Buffer.concat([
284
+ aad,
285
+ this.getIntBytes(c)
286
+ ]);
287
+ aad = Buffer.concat([
288
+ aad,
289
+ this.getIntBytes(d)
290
+ ]);
291
+ aad = Buffer.concat([
292
+ aad,
293
+ this.getIntBytes(e)
294
+ ]);
295
+ aad = Buffer.concat([
296
+ aad,
297
+ this.getIntBytes(f)
298
+ ]);
299
+ return aad;
300
+ }
301
+ getIntBytes(i) {
302
+ const j = 4;
303
+ let res;
304
+ if (j ** 2 === 16) {
305
+ const buffer = new ArrayBuffer(4);
306
+ const view = new DataView(buffer);
307
+ view.setInt32(0, i);
308
+ res = new Uint8Array(buffer);
309
+ } else {
310
+ const buffer = new ArrayBuffer(8);
311
+ const view = new DataView(buffer);
312
+ view.setBigInt64(0, BigInt(i));
313
+ res = new Uint8Array(buffer);
314
+ }
315
+ return res;
316
+ }
317
+ async encryptE2EEMessage(to, data, contentType = 0, specVersion = 2) {
318
+ contentType = ContentType(contentType) ?? 0;
319
+ const _from = this.client.profile?.mid;
320
+ const selfKeyData = await this.getE2EESelfKeyData(_from);
321
+ if (to.length === 0 || ![
322
+ 0,
323
+ 1,
324
+ 2
325
+ ].includes(this.client.getToType(to) ?? -1)) {
326
+ throw new InternalError("Invalid mid", to);
327
+ }
328
+ const senderKeyId = selfKeyData.keyId;
329
+ let receiverKeyId, keyData;
330
+ if (this.client.getToType(to) === LINETypes.enums.MIDType.USER) {
331
+ const privateKey = Buffer.from(selfKeyData.privKey, "base64");
332
+ const receiverKeyData = await this.client.talk.negotiateE2EEPublicKey({
333
+ mid: to
334
+ });
335
+ specVersion = receiverKeyData.specVersion;
336
+ if (specVersion === -1) {
337
+ throw new InternalError("Not support E2EE", `${to}`);
338
+ }
339
+ const publicKey = receiverKeyData.publicKey;
340
+ receiverKeyId = publicKey.keyId;
341
+ const receiverKeyDataBuffer = Buffer.from(publicKey.keyData);
342
+ keyData = this.generateSharedSecret(privateKey, receiverKeyDataBuffer);
343
+ } else {
344
+ const groupK = await this.getE2EELocalPublicKey(to, undefined);
345
+ const privK = Buffer.from(groupK.privKey, "base64");
346
+ const pubK = Buffer.from(selfKeyData.pubKey, "base64");
347
+ receiverKeyId = groupK.keyId;
348
+ keyData = this.generateSharedSecret(privK, pubK);
349
+ }
350
+ if (contentType === LINETypes.enums.ContentType.LOCATION && typeof data === "object") {
351
+ return this.encryptE2EELocationMessage(senderKeyId, receiverKeyId, Buffer.from(keyData), specVersion, data, to, _from);
352
+ } else if (typeof data === "string" || data instanceof Buffer) {
353
+ return this.encryptE2EETextMessage(senderKeyId, receiverKeyId, Buffer.from(keyData), specVersion, data, to, _from);
354
+ } else {
355
+ return this.encryptE2EEMessageByData(senderKeyId, receiverKeyId, Buffer.from(keyData), specVersion, data, to, _from, contentType);
356
+ }
357
+ }
358
+ encryptE2EETextMessage(senderKeyId, receiverKeyId, keyData, specVersion, text, to, _from) {
359
+ const salt = crypto.randomBytes(16);
360
+ const gcmKey = this.getSHA256Sum(keyData, salt, Buffer.from("Key"));
361
+ const aad = this.generateAAD(to, _from, senderKeyId, receiverKeyId, specVersion, 0);
362
+ const sign = crypto.randomBytes(12);
363
+ const data = Buffer.from(JSON.stringify({
364
+ text: text.toString()
365
+ }));
366
+ const encData = this.encryptE2EEMessageV2(data, gcmKey, sign, aad);
367
+ const bSenderKeyId = Buffer.from(this.getIntBytes(senderKeyId));
368
+ const bReceiverKeyId = Buffer.from(this.getIntBytes(receiverKeyId));
369
+ this.e2eeLog("encryptE2EETextMessageSenderKeyId", `${senderKeyId} (${bSenderKeyId.toString("hex")})`);
370
+ this.e2eeLog("encryptE2EETextMessageReceiverKeyId", `${receiverKeyId} (${bReceiverKeyId.toString("hex")})`);
371
+ return [
372
+ salt,
373
+ encData,
374
+ sign,
375
+ bSenderKeyId,
376
+ bReceiverKeyId
377
+ ];
378
+ }
379
+ encryptE2EEMessageByData(senderKeyId, receiverKeyId, keyData, specVersion, rawdata, to, _from, contentType) {
380
+ const salt = crypto.randomBytes(16);
381
+ const gcmKey = this.getSHA256Sum(keyData, salt, Buffer.from("Key"));
382
+ const aad = this.generateAAD(to, _from, senderKeyId, receiverKeyId, specVersion, contentType);
383
+ const sign = crypto.randomBytes(12);
384
+ const data = Buffer.from(JSON.stringify(rawdata));
385
+ const encData = this.encryptE2EEMessageV2(data, gcmKey, sign, aad);
386
+ const bSenderKeyId = Buffer.from(this.getIntBytes(senderKeyId));
387
+ const bReceiverKeyId = Buffer.from(this.getIntBytes(receiverKeyId));
388
+ this.e2eeLog("encryptE2EEDataMessageSenderKeyId", `${senderKeyId} (${bSenderKeyId.toString("hex")})`);
389
+ this.e2eeLog("encryptE2EEDataMessageReceiverKeyId", `${receiverKeyId} (${bReceiverKeyId.toString("hex")})`);
390
+ return [
391
+ salt,
392
+ encData,
393
+ sign,
394
+ bSenderKeyId,
395
+ bReceiverKeyId
396
+ ];
397
+ }
398
+ encryptE2EELocationMessage(senderKeyId, receiverKeyId, keyData, specVersion, location, to, _from) {
399
+ const salt = crypto.randomBytes(16);
400
+ const gcmKey = this.getSHA256Sum(keyData, salt, Buffer.from("Key"));
401
+ const aad = this.generateAAD(to, _from, senderKeyId, receiverKeyId, specVersion, 15);
402
+ const sign = crypto.randomBytes(12);
403
+ const data = Buffer.from(JSON.stringify({
404
+ location: location
405
+ }));
406
+ const encData = this.encryptE2EEMessageV2(data, gcmKey, sign, aad);
407
+ const bSenderKeyId = Buffer.from(this.getIntBytes(senderKeyId));
408
+ const bReceiverKeyId = Buffer.from(this.getIntBytes(receiverKeyId));
409
+ this.e2eeLog("encryptE2EELocationMessageSenderKeyId", `${senderKeyId} (${bSenderKeyId.toString("hex")})`);
410
+ this.e2eeLog("encryptE2EELocationMessageReceiverKeyId", `${receiverKeyId} (${bReceiverKeyId.toString("hex")})`);
411
+ return [
412
+ salt,
413
+ encData,
414
+ sign,
415
+ bSenderKeyId,
416
+ bReceiverKeyId
417
+ ];
418
+ }
419
+ encryptE2EEMessageV2(data, gcmKey, nonce, aad) {
420
+ this.e2eeLog("createCipheriv", {
421
+ data,
422
+ gcmKey,
423
+ nonce,
424
+ aad
425
+ });
426
+ const cipher = crypto.createCipheriv("aes-256-gcm", gcmKey, nonce);
427
+ cipher.setAAD(aad);
428
+ const encrypted = Buffer.concat([
429
+ cipher.update(data),
430
+ cipher.final()
431
+ ]);
432
+ const tag = cipher.getAuthTag();
433
+ return Buffer.concat([
434
+ encrypted,
435
+ tag
436
+ ]);
437
+ }
438
+ async decryptE2EEMessage(messageObj) {
439
+ if ((messageObj.contentType === "NONE" || messageObj.contentType === LINETypes.enums.ContentType.NONE) && messageObj.chunks) {
440
+ const [text, meta] = await this.decryptE2EETextMessage(messageObj);
441
+ messageObj.text = text;
442
+ messageObj.contentMetadata = {
443
+ ...messageObj.contentMetadata,
444
+ ...meta
445
+ };
446
+ } else if ((messageObj.contentType === "LOCATION" || messageObj.contentType === LINETypes.enums.ContentType.LOCATION) && messageObj.chunks) {
447
+ messageObj.location = await this.decryptE2EELocationMessage(messageObj);
448
+ }
449
+ return messageObj;
450
+ }
451
+ async decryptE2EETextMessage(messageObj, isSelf = false) {
452
+ const _from = messageObj.from;
453
+ const to = messageObj.to;
454
+ if (_from === this.client.profile?.mid) {
455
+ isSelf = true;
456
+ }
457
+ const toType = messageObj.toType;
458
+ const metadata = messageObj.contentMetadata;
459
+ const specVersion = metadata.e2eeVersion || "2";
460
+ const contentType = messageObj.contentType;
461
+ const chunks = messageObj.chunks.map((chunk)=>typeof chunk === "string" ? Buffer.from(chunk, "utf-8") : chunk);
462
+ const senderKeyId = byte2int(chunks[3]);
463
+ const receiverKeyId = byte2int(chunks[4]);
464
+ this.e2eeLog("decryptE2EETextMessageSenderKeyId", senderKeyId);
465
+ this.e2eeLog("decryptE2EETextMessageReceiverKeyId", receiverKeyId);
466
+ const selfKey = await this.getE2EESelfKeyData(this.client.profile.mid);
467
+ let privK = Buffer.from(selfKey.privKey, "base64");
468
+ let pubK;
469
+ if (toType === LINETypes.enums.MIDType.USER || toType === "USER") {
470
+ pubK = await this.getE2EELocalPublicKey(isSelf ? to : _from, isSelf ? receiverKeyId : senderKeyId);
471
+ } else {
472
+ const groupK = await this.getE2EELocalPublicKey(to, receiverKeyId);
473
+ privK = Buffer.from(groupK.privKey, "base64");
474
+ pubK = Buffer.from(selfKey.pubKey, "base64");
475
+ if (_from !== this.client.profile?.mid) {
476
+ pubK = await this.getE2EELocalPublicKey(_from, senderKeyId);
477
+ }
478
+ }
479
+ let decrypted;
480
+ if (specVersion === "2") {
481
+ decrypted = this.decryptE2EEMessageV2(to, _from, chunks, privK, pubK, parseInt(specVersion), contentType);
482
+ } else {
483
+ decrypted = this.decryptE2EEMessageV1(chunks, privK, pubK);
484
+ }
485
+ const text = decrypted.text || "";
486
+ const meta = {};
487
+ for(const key in decrypted){
488
+ if (key === "text") {
489
+ continue;
490
+ }
491
+ if (Object.prototype.hasOwnProperty.call(decrypted, key)) {
492
+ const val = decrypted[key];
493
+ if (typeof val === "string") {
494
+ meta[key] = val;
495
+ } else {
496
+ meta[key] = JSON.stringify(val);
497
+ }
498
+ }
499
+ }
500
+ return [
501
+ text,
502
+ meta
503
+ ];
504
+ }
505
+ async decryptE2EELocationMessage(messageObj, isSelf = true) {
506
+ const _from = messageObj.from;
507
+ const to = messageObj.to;
508
+ const toType = messageObj.toType;
509
+ const metadata = messageObj.contentMetadata;
510
+ const specVersion = metadata.e2eeVersion || "2";
511
+ const contentType = messageObj.contentType;
512
+ const chunks = messageObj.chunks.map((chunk)=>typeof chunk === "string" ? Buffer.from(chunk, "utf-8") : chunk);
513
+ const senderKeyId = byte2int(chunks[3]);
514
+ const receiverKeyId = byte2int(chunks[4]);
515
+ this.e2eeLog("decryptE2EELocationMessageSenderKeyId", senderKeyId);
516
+ this.e2eeLog("decryptE2EELocationMessageReceiverKeyId", receiverKeyId);
517
+ const selfKey = await this.getE2EESelfKeyData(this.client.profile?.mid);
518
+ let privK = Buffer.from(selfKey.privKey, "base64");
519
+ let pubK;
520
+ if (toType === LINETypes.enums.MIDType.USER || toType === "USER") {
521
+ pubK = await this.getE2EELocalPublicKey(to, isSelf ? receiverKeyId : senderKeyId);
522
+ } else {
523
+ const groupK = await this.getE2EELocalPublicKey(to, receiverKeyId);
524
+ privK = Buffer.from(groupK.privKey, "base64");
525
+ pubK = Buffer.from(selfKey.pubKey, "base64");
526
+ if (_from !== this.client.profile?.mid) {
527
+ pubK = await this.getE2EELocalPublicKey(_from, senderKeyId);
528
+ }
529
+ }
530
+ let decrypted;
531
+ if (specVersion === "2") {
532
+ decrypted = this.decryptE2EEMessageV2(to, _from, chunks, privK, pubK, parseInt(specVersion), contentType);
533
+ } else {
534
+ decrypted = this.decryptE2EEMessageV1(chunks, privK, pubK);
535
+ }
536
+ return decrypted.location || undefined;
537
+ }
538
+ async decryptE2EEDataMessage(messageObj, isSelf = true) {
539
+ const _from = messageObj.from;
540
+ const to = messageObj.to;
541
+ const toType = messageObj.toType;
542
+ const metadata = messageObj.contentMetadata;
543
+ const specVersion = metadata.e2eeVersion || "2";
544
+ const contentType = typeof messageObj.contentType === "string" ? LINETypes.enums.ContentType[messageObj.contentType] : messageObj.contentType;
545
+ const chunks = messageObj.chunks.map((chunk)=>typeof chunk === "string" ? Buffer.from(chunk, "utf-8") : chunk);
546
+ const senderKeyId = byte2int(chunks[3]);
547
+ const receiverKeyId = byte2int(chunks[4]);
548
+ this.e2eeLog("decryptE2EEDataMessageSenderKeyId", senderKeyId);
549
+ this.e2eeLog("decryptE2EEDataMessageReceiverKeyId", receiverKeyId);
550
+ const selfKey = await this.getE2EESelfKeyData(this.client.profile?.mid);
551
+ let privK = Buffer.from(selfKey.privKey, "base64");
552
+ let pubK;
553
+ if (toType === LINETypes.enums.MIDType.USER || toType === "USER") {
554
+ pubK = await this.getE2EELocalPublicKey(to, isSelf ? receiverKeyId : senderKeyId);
555
+ } else {
556
+ const groupK = await this.getE2EELocalPublicKey(to, receiverKeyId);
557
+ privK = Buffer.from(groupK.privKey, "base64");
558
+ pubK = Buffer.from(selfKey.pubKey, "base64");
559
+ if (_from !== this.client.profile?.mid) {
560
+ pubK = await this.getE2EELocalPublicKey(_from, senderKeyId);
561
+ }
562
+ }
563
+ let decrypted;
564
+ if (specVersion === "2") {
565
+ decrypted = this.decryptE2EEMessageV2(to, _from, chunks, privK, pubK, parseInt(specVersion), contentType);
566
+ } else {
567
+ decrypted = this.decryptE2EEMessageV1(chunks, privK, pubK);
568
+ }
569
+ return decrypted || {};
570
+ }
571
+ decryptE2EEMessageV1(chunks, privK, pubK) {
572
+ this.e2eeLog("decryptE2EEMessageV1_arg", {
573
+ chunks,
574
+ privK,
575
+ pubK
576
+ });
577
+ const salt = chunks[0];
578
+ const message = chunks[1];
579
+ const _sign = chunks[2];
580
+ const aesKey = this.generateSharedSecret(privK, pubK);
581
+ const aes_key = this.getSHA256Sum(Buffer.from(aesKey), salt, "Key");
582
+ const aes_iv = this.xor(this.getSHA256Sum(Buffer.from(aesKey), salt, "IV"));
583
+ this.e2eeLog("decryptE2EEMessageV1", {
584
+ aes_key,
585
+ aes_iv,
586
+ message
587
+ });
588
+ let decrypted;
589
+ // 最初の試行
590
+ try {
591
+ const decipher = crypto.createDecipheriv("aes-256-cbc", aes_key, aes_iv);
592
+ decrypted = Buffer.concat([
593
+ decipher.update(message),
594
+ decipher.final()
595
+ ]);
596
+ } catch (_error) {
597
+ // エラー時は新しい decipher オブジェクトを作成
598
+ const decipher2 = crypto.createDecipheriv("aes-256-cbc", aes_key, aes_iv);
599
+ decipher2.setAutoPadding(false);
600
+ decrypted = Buffer.concat([
601
+ decipher2.update(message),
602
+ decipher2.final()
603
+ ]);
604
+ }
605
+ this.e2eeLog("decryptE2EEMessageV1DecryptedMessage", decrypted.toString("utf-8"));
606
+ return JSON.parse(decrypted.toString("utf-8"));
607
+ }
608
+ decryptE2EEMessageV2(to, _from, chunks, privK, pubK, specVersion = 2, contentType = 0) {
609
+ const salt = chunks[0];
610
+ const message = chunks[1];
611
+ const ciphertext = message.subarray(0, -16);
612
+ const tag = message.subarray(-16);
613
+ const sign = chunks[2];
614
+ const senderKeyId = byte2int(chunks[3]);
615
+ const receiverKeyId = byte2int(chunks[4]);
616
+ const aesKey = this.generateSharedSecret(privK, pubK);
617
+ const gcmKey = this.getSHA256Sum(Buffer.from(aesKey), salt, "Key");
618
+ const aad = this.generateAAD(to, _from, senderKeyId, receiverKeyId, specVersion, contentType);
619
+ let decrypted;
620
+ this.e2eeLog("decryptE2EEMessageV2Info", {
621
+ iv: sign.length,
622
+ key: gcmKey.length,
623
+ tag: tag.length,
624
+ aad: aad.length,
625
+ encrypted: ciphertext.length
626
+ });
627
+ // 最初の試行
628
+ try {
629
+ const decipher = crypto.createDecipheriv("aes-256-gcm", gcmKey, sign);
630
+ decipher.setAuthTag(tag);
631
+ decipher.setAAD(aad);
632
+ decrypted = Buffer.concat([
633
+ decipher.update(ciphertext),
634
+ decipher.final()
635
+ ]);
636
+ } catch (error) {
637
+ if (error instanceof Error) {
638
+ this.e2eeLog("decryptE2EEMessageV2DecryptionFailed", error.message);
639
+ }
640
+ // エラー時は新しい decipher オブジェクトを作成
641
+ try {
642
+ const decipher2 = crypto.createDecipheriv("aes-256-gcm", gcmKey, sign);
643
+ decipher2.setAuthTag(tag);
644
+ decipher2.setAAD(aad);
645
+ decipher2.setAutoPadding(false);
646
+ decrypted = Buffer.concat([
647
+ decipher2.update(ciphertext),
648
+ decipher2.final()
649
+ ]);
650
+ } catch (retryError) {
651
+ if (retryError instanceof Error) {
652
+ this.e2eeLog("decryptE2EEMessageV2DecryptionFailed", retryError.message);
653
+ }
654
+ throw retryError;
655
+ }
656
+ }
657
+ this.e2eeLog("decryptE2EEMessageV2DecryptedMessage", decrypted);
658
+ return JSON.parse(decrypted.toString());
659
+ }
660
+ e2eeLog(type, message) {
661
+ this.client.log("e2ee", {
662
+ type,
663
+ message
664
+ });
665
+ }
666
+ createSqrSecret(base64Only = false) {
667
+ const { secretKey, publicKey } = nacl.box.keyPair();
668
+ const secret = encodeURIComponent(Buffer.from(publicKey).toString("base64"));
669
+ const version = 1;
670
+ if (base64Only) {
671
+ return [
672
+ Buffer.from(secretKey),
673
+ Buffer.from(publicKey).toString("base64")
674
+ ];
675
+ }
676
+ return [
677
+ Buffer.from(secretKey),
678
+ `?secret=${secret}&e2eeVersion=${version}`
679
+ ];
680
+ }
681
+ // for e2ee next
682
+ _encryptAESCTR(aesKey, nonce, data) {
683
+ // deno not support ctr !
684
+ const cipher = crypto.createCipheriv("aes-256-ctr", aesKey, nonce);
685
+ const encrypted = Buffer.concat([
686
+ cipher.update(data),
687
+ cipher.final()
688
+ ]);
689
+ return encrypted;
690
+ }
691
+ async __encryptAESCTR(aesKey, nonce, data) {
692
+ const aesKeyArrayBuffer = aesKey.buffer.slice(aesKey.byteOffset, aesKey.byteOffset + aesKey.byteLength);
693
+ const dataArrayBuffer = data.buffer.slice(data.byteOffset, data.byteOffset + data.byteLength);
694
+ return Buffer.from(await globalThis.crypto.subtle.encrypt({
695
+ name: "AES-CTR",
696
+ // @ts-expect-error: will fix cuz typescript version change
697
+ counter: nonce,
698
+ length: 32
699
+ }, await globalThis.crypto.subtle.importKey("raw", new Uint8Array(aesKeyArrayBuffer), "AES-CTR", false, [
700
+ "encrypt"
701
+ ]), new Uint8Array(dataArrayBuffer)));
702
+ }
703
+ ___encryptAESCTR(aesKey, nonce, data) {
704
+ // Convert Buffer to WordArray
705
+ const key = CryptoJS.lib.WordArray.create(aesKey);
706
+ const iv = CryptoJS.lib.WordArray.create(nonce);
707
+ const plaintext = CryptoJS.lib.WordArray.create(data);
708
+ // Encrypt using AES-CTR
709
+ const encrypted = CryptoJS.AES.encrypt(plaintext, key, {
710
+ iv: iv,
711
+ mode: CryptoJS.mode.CTR,
712
+ padding: CryptoJS.pad.NoPadding
713
+ });
714
+ // Convert WordArray ciphertext back to Buffer
715
+ const ciphertext = Buffer.from(encrypted.ciphertext.toString(CryptoJS.enc.Hex), "hex");
716
+ return ciphertext;
717
+ }
718
+ _decryptAESCTR(aesKey, nonce, data) {
719
+ const decipher = crypto.createDecipheriv("aes-256-ctr", aesKey, nonce);
720
+ const decrypted = Buffer.concat([
721
+ decipher.update(data),
722
+ decipher.final()
723
+ ]);
724
+ return decrypted;
725
+ }
726
+ async ___decryptAESCTR(aesKey, nonce, data) {
727
+ return Buffer.from(await globalThis.crypto.subtle.decrypt({
728
+ name: "AES-CTR",
729
+ // @ts-expect-error: will fix cuz typescript version change
730
+ counter: nonce,
731
+ length: 32
732
+ }, // @ts-expect-error: will fix cuz typescript version change
733
+ await globalThis.crypto.subtle.importKey("raw", aesKey, "AES-CTR", false, [
734
+ "decrypt"
735
+ ]), data));
736
+ }
737
+ __decryptAESCTR(aesKey, nonce, data) {
738
+ const keyWordArray = CryptoJS.lib.WordArray.create(aesKey);
739
+ const nonceWordArray = CryptoJS.lib.WordArray.create(nonce);
740
+ const encryptedData = CryptoJS.lib.WordArray.create(data);
741
+ const decrypted = CryptoJS.AES.decrypt({
742
+ ciphertext: encryptedData
743
+ }, keyWordArray, {
744
+ mode: CryptoJS.mode.CTR,
745
+ iv: nonceWordArray,
746
+ padding: CryptoJS.pad.NoPadding
747
+ });
748
+ return Buffer.from(decrypted.toString(CryptoJS.enc.Hex), "hex");
749
+ }
750
+ signData(data, key) {
751
+ const hmac = crypto.createHmac("sha256", key);
752
+ hmac.update(data);
753
+ return hmac.digest();
754
+ }
755
+ async deriveKeyMaterial(keyMaterial) {
756
+ const derived = await new Promise((resolve, reject)=>{
757
+ // ???
758
+ crypto.hkdf("sha256", keyMaterial, new Uint8Array(0), "FileEncryption", 76, (err, derivedKey)=>{
759
+ if (err) {
760
+ reject(err);
761
+ }
762
+ resolve(Buffer.from(derivedKey));
763
+ });
764
+ });
765
+ return {
766
+ encKey: derived.slice(0, 32),
767
+ macKey: derived.slice(32, 64),
768
+ // ???
769
+ nonce: Buffer.concat([
770
+ derived.slice(64, 76),
771
+ new Uint8Array(4)
772
+ ])
773
+ };
774
+ }
775
+ async encryptByKeyMaterial(rawData, keyMaterial) {
776
+ // Encrypt file for E2EE Next
777
+ if (!keyMaterial) {
778
+ keyMaterial = crypto.randomBytes(32);
779
+ }
780
+ const keys = await this.deriveKeyMaterial(keyMaterial);
781
+ const encData = await this.__encryptAESCTR(keys.encKey, keys.nonce, rawData);
782
+ const sign = this.signData(encData, keys.macKey);
783
+ return {
784
+ keyMaterial: keyMaterial.toString("base64"),
785
+ encryptedData: Buffer.concat([
786
+ encData,
787
+ sign
788
+ ])
789
+ };
790
+ }
791
+ async decryptByKeyMaterial(rawData, keyMaterial) {
792
+ // Decrypt file for E2EE Next
793
+ if (typeof keyMaterial === "string") {
794
+ keyMaterial = Buffer.from(keyMaterial, "base64");
795
+ }
796
+ const keys = await this.deriveKeyMaterial(keyMaterial);
797
+ return (await this.___decryptAESCTR(keys.encKey, keys.nonce, rawData)).slice(0, -32);
798
+ }
799
+ }
800
+ export default E2EE;
801
+ function byte2int(t) {
802
+ let e = 0;
803
+ const s = t.length;
804
+ for(let i = 0; i < s; i++){
805
+ e = 256 * e + t[i];
806
+ }
807
+ return e;
808
+ }
809
+ function _bin2bytes(k) {
810
+ const e = [];
811
+ for(let i = 0; i < k.length / 2; i++){
812
+ const _i = parseInt(k.substring(i * 2, i * 2 + 2), 16);
813
+ e.push(_i);
814
+ }
815
+ return new Uint8Array(e);
816
+ }
817
+ //# sourceMappingURL=mod.js.map