agent-messenger 2.7.0 → 2.8.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 (511) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/.github/workflows/ci.yml +6 -0
  3. package/.oxfmtrc.json +13 -1
  4. package/.oxlintrc.json +10 -1
  5. package/README.md +1 -1
  6. package/dist/package.json +59 -58
  7. package/dist/src/platforms/channeltalk/client.d.ts.map +1 -1
  8. package/dist/src/platforms/channeltalk/client.js +2 -2
  9. package/dist/src/platforms/channeltalk/client.js.map +1 -1
  10. package/dist/src/platforms/channeltalk/commands/auth.d.ts.map +1 -1
  11. package/dist/src/platforms/channeltalk/commands/auth.js.map +1 -1
  12. package/dist/src/platforms/channeltalk/commands/message.d.ts.map +1 -1
  13. package/dist/src/platforms/channeltalk/commands/message.js.map +1 -1
  14. package/dist/src/platforms/channeltalk/commands/snapshot.d.ts.map +1 -1
  15. package/dist/src/platforms/channeltalk/commands/snapshot.js.map +1 -1
  16. package/dist/src/platforms/channeltalk/ensure-auth.d.ts.map +1 -1
  17. package/dist/src/platforms/channeltalk/ensure-auth.js.map +1 -1
  18. package/dist/src/platforms/channeltalk/token-extractor.d.ts +9 -23
  19. package/dist/src/platforms/channeltalk/token-extractor.d.ts.map +1 -1
  20. package/dist/src/platforms/channeltalk/token-extractor.js +109 -341
  21. package/dist/src/platforms/channeltalk/token-extractor.js.map +1 -1
  22. package/dist/src/platforms/channeltalkbot/client.d.ts +1 -1
  23. package/dist/src/platforms/channeltalkbot/client.d.ts.map +1 -1
  24. package/dist/src/platforms/channeltalkbot/client.js +4 -4
  25. package/dist/src/platforms/channeltalkbot/client.js.map +1 -1
  26. package/dist/src/platforms/channeltalkbot/commands/auth.d.ts.map +1 -1
  27. package/dist/src/platforms/channeltalkbot/commands/auth.js +4 -1
  28. package/dist/src/platforms/channeltalkbot/commands/auth.js.map +1 -1
  29. package/dist/src/platforms/channeltalkbot/commands/shared.d.ts.map +1 -1
  30. package/dist/src/platforms/channeltalkbot/commands/shared.js.map +1 -1
  31. package/dist/src/platforms/discord/commands/auth.js.map +1 -1
  32. package/dist/src/platforms/discord/commands/whoami.d.ts.map +1 -1
  33. package/dist/src/platforms/discord/commands/whoami.js.map +1 -1
  34. package/dist/src/platforms/discord/token-extractor.d.ts +2 -10
  35. package/dist/src/platforms/discord/token-extractor.d.ts.map +1 -1
  36. package/dist/src/platforms/discord/token-extractor.js +38 -172
  37. package/dist/src/platforms/discord/token-extractor.js.map +1 -1
  38. package/dist/src/platforms/discordbot/client.d.ts.map +1 -1
  39. package/dist/src/platforms/discordbot/client.js.map +1 -1
  40. package/dist/src/platforms/instagram/cli.d.ts.map +1 -1
  41. package/dist/src/platforms/instagram/cli.js +1 -4
  42. package/dist/src/platforms/instagram/cli.js.map +1 -1
  43. package/dist/src/platforms/instagram/client.d.ts.map +1 -1
  44. package/dist/src/platforms/instagram/client.js +8 -7
  45. package/dist/src/platforms/instagram/client.js.map +1 -1
  46. package/dist/src/platforms/instagram/commands/auth.d.ts.map +1 -1
  47. package/dist/src/platforms/instagram/commands/auth.js.map +1 -1
  48. package/dist/src/platforms/instagram/commands/chat.d.ts.map +1 -1
  49. package/dist/src/platforms/instagram/commands/chat.js.map +1 -1
  50. package/dist/src/platforms/instagram/commands/message.d.ts.map +1 -1
  51. package/dist/src/platforms/instagram/commands/message.js.map +1 -1
  52. package/dist/src/platforms/instagram/commands/shared.d.ts.map +1 -1
  53. package/dist/src/platforms/instagram/commands/shared.js.map +1 -1
  54. package/dist/src/platforms/instagram/credential-manager.d.ts.map +1 -1
  55. package/dist/src/platforms/instagram/credential-manager.js +1 -1
  56. package/dist/src/platforms/instagram/credential-manager.js.map +1 -1
  57. package/dist/src/platforms/instagram/ensure-auth.d.ts.map +1 -1
  58. package/dist/src/platforms/instagram/ensure-auth.js.map +1 -1
  59. package/dist/src/platforms/instagram/token-extractor.d.ts +7 -19
  60. package/dist/src/platforms/instagram/token-extractor.d.ts.map +1 -1
  61. package/dist/src/platforms/instagram/token-extractor.js +44 -270
  62. package/dist/src/platforms/instagram/token-extractor.js.map +1 -1
  63. package/dist/src/platforms/instagram/types.d.ts.map +1 -1
  64. package/dist/src/platforms/instagram/types.js +4 -2
  65. package/dist/src/platforms/instagram/types.js.map +1 -1
  66. package/dist/src/platforms/kakaotalk/auth/kakao-login.d.ts.map +1 -1
  67. package/dist/src/platforms/kakaotalk/auth/kakao-login.js +18 -4
  68. package/dist/src/platforms/kakaotalk/auth/kakao-login.js.map +1 -1
  69. package/dist/src/platforms/kakaotalk/client.d.ts.map +1 -1
  70. package/dist/src/platforms/kakaotalk/client.js +3 -3
  71. package/dist/src/platforms/kakaotalk/client.js.map +1 -1
  72. package/dist/src/platforms/kakaotalk/commands/auth.d.ts.map +1 -1
  73. package/dist/src/platforms/kakaotalk/commands/auth.js +15 -9
  74. package/dist/src/platforms/kakaotalk/commands/auth.js.map +1 -1
  75. package/dist/src/platforms/kakaotalk/commands/shared.d.ts.map +1 -1
  76. package/dist/src/platforms/kakaotalk/commands/shared.js.map +1 -1
  77. package/dist/src/platforms/kakaotalk/protocol/connection.d.ts.map +1 -1
  78. package/dist/src/platforms/kakaotalk/protocol/connection.js.map +1 -1
  79. package/dist/src/platforms/kakaotalk/protocol/crypto.js +1 -1
  80. package/dist/src/platforms/kakaotalk/protocol/crypto.js.map +1 -1
  81. package/dist/src/platforms/kakaotalk/protocol/session.d.ts.map +1 -1
  82. package/dist/src/platforms/kakaotalk/protocol/session.js +1 -3
  83. package/dist/src/platforms/kakaotalk/protocol/session.js.map +1 -1
  84. package/dist/src/platforms/kakaotalk/token-extractor.js +5 -2
  85. package/dist/src/platforms/kakaotalk/token-extractor.js.map +1 -1
  86. package/dist/src/platforms/kakaotalk/types.d.ts.map +1 -1
  87. package/dist/src/platforms/kakaotalk/types.js +4 -2
  88. package/dist/src/platforms/kakaotalk/types.js.map +1 -1
  89. package/dist/src/platforms/line/cli.d.ts.map +1 -1
  90. package/dist/src/platforms/line/cli.js +1 -4
  91. package/dist/src/platforms/line/cli.js.map +1 -1
  92. package/dist/src/platforms/line/client.d.ts.map +1 -1
  93. package/dist/src/platforms/line/client.js +5 -13
  94. package/dist/src/platforms/line/client.js.map +1 -1
  95. package/dist/src/platforms/line/commands/chat.d.ts.map +1 -1
  96. package/dist/src/platforms/line/commands/chat.js.map +1 -1
  97. package/dist/src/platforms/line/commands/message.d.ts.map +1 -1
  98. package/dist/src/platforms/line/commands/message.js.map +1 -1
  99. package/dist/src/platforms/line/listener.js +1 -1
  100. package/dist/src/platforms/line/listener.js.map +1 -1
  101. package/dist/src/platforms/slack/cli.d.ts.map +1 -1
  102. package/dist/src/platforms/slack/cli.js.map +1 -1
  103. package/dist/src/platforms/slack/client-mappers.d.ts +14 -0
  104. package/dist/src/platforms/slack/client-mappers.d.ts.map +1 -0
  105. package/dist/src/platforms/slack/client-mappers.js +245 -0
  106. package/dist/src/platforms/slack/client-mappers.js.map +1 -0
  107. package/dist/src/platforms/slack/client.d.ts +0 -1
  108. package/dist/src/platforms/slack/client.d.ts.map +1 -1
  109. package/dist/src/platforms/slack/client.js +41 -455
  110. package/dist/src/platforms/slack/client.js.map +1 -1
  111. package/dist/src/platforms/slack/commands/channel.d.ts.map +1 -1
  112. package/dist/src/platforms/slack/commands/channel.js.map +1 -1
  113. package/dist/src/platforms/slack/commands/emoji.d.ts.map +1 -1
  114. package/dist/src/platforms/slack/commands/emoji.js +1 -3
  115. package/dist/src/platforms/slack/commands/emoji.js.map +1 -1
  116. package/dist/src/platforms/slack/commands/message.d.ts.map +1 -1
  117. package/dist/src/platforms/slack/commands/message.js.map +1 -1
  118. package/dist/src/platforms/slack/commands/reminder.d.ts.map +1 -1
  119. package/dist/src/platforms/slack/commands/reminder.js.map +1 -1
  120. package/dist/src/platforms/slack/commands/user.d.ts.map +1 -1
  121. package/dist/src/platforms/slack/commands/user.js.map +1 -1
  122. package/dist/src/platforms/slack/commands/usergroup.d.ts.map +1 -1
  123. package/dist/src/platforms/slack/commands/usergroup.js.map +1 -1
  124. package/dist/src/platforms/slack/commands/whoami.d.ts.map +1 -1
  125. package/dist/src/platforms/slack/commands/whoami.js.map +1 -1
  126. package/dist/src/platforms/slack/token-extractor.d.ts +2 -6
  127. package/dist/src/platforms/slack/token-extractor.d.ts.map +1 -1
  128. package/dist/src/platforms/slack/token-extractor.js +35 -229
  129. package/dist/src/platforms/slack/token-extractor.js.map +1 -1
  130. package/dist/src/platforms/slackbot/cli.d.ts.map +1 -1
  131. package/dist/src/platforms/slackbot/cli.js +1 -1
  132. package/dist/src/platforms/slackbot/cli.js.map +1 -1
  133. package/dist/src/platforms/teams/client.d.ts.map +1 -1
  134. package/dist/src/platforms/teams/client.js +1 -1
  135. package/dist/src/platforms/teams/client.js.map +1 -1
  136. package/dist/src/platforms/teams/commands/auth.d.ts.map +1 -1
  137. package/dist/src/platforms/teams/commands/auth.js +4 -1
  138. package/dist/src/platforms/teams/commands/auth.js.map +1 -1
  139. package/dist/src/platforms/teams/commands/whoami.d.ts.map +1 -1
  140. package/dist/src/platforms/teams/commands/whoami.js.map +1 -1
  141. package/dist/src/platforms/teams/token-extractor.d.ts +6 -18
  142. package/dist/src/platforms/teams/token-extractor.d.ts.map +1 -1
  143. package/dist/src/platforms/teams/token-extractor.js +71 -324
  144. package/dist/src/platforms/teams/token-extractor.js.map +1 -1
  145. package/dist/src/platforms/telegram/cli.d.ts.map +1 -1
  146. package/dist/src/platforms/telegram/cli.js +1 -4
  147. package/dist/src/platforms/telegram/cli.js.map +1 -1
  148. package/dist/src/platforms/telegram/client.d.ts.map +1 -1
  149. package/dist/src/platforms/telegram/client.js.map +1 -1
  150. package/dist/src/platforms/telegram/commands/auth.d.ts.map +1 -1
  151. package/dist/src/platforms/telegram/commands/auth.js +1 -1
  152. package/dist/src/platforms/telegram/commands/auth.js.map +1 -1
  153. package/dist/src/platforms/telegram/commands/chat.d.ts.map +1 -1
  154. package/dist/src/platforms/telegram/commands/chat.js.map +1 -1
  155. package/dist/src/platforms/telegram/commands/message.d.ts.map +1 -1
  156. package/dist/src/platforms/telegram/commands/message.js.map +1 -1
  157. package/dist/src/platforms/telegram/commands/whoami.js +1 -1
  158. package/dist/src/platforms/telegram/commands/whoami.js.map +1 -1
  159. package/dist/src/platforms/telegram/credential-manager.d.ts.map +1 -1
  160. package/dist/src/platforms/telegram/credential-manager.js +6 -2
  161. package/dist/src/platforms/telegram/credential-manager.js.map +1 -1
  162. package/dist/src/platforms/telegram/my-telegram-org.js.map +1 -1
  163. package/dist/src/platforms/webex/cli.d.ts.map +1 -1
  164. package/dist/src/platforms/webex/cli.js +1 -4
  165. package/dist/src/platforms/webex/cli.js.map +1 -1
  166. package/dist/src/platforms/webex/client.d.ts.map +1 -1
  167. package/dist/src/platforms/webex/client.js +3 -7
  168. package/dist/src/platforms/webex/client.js.map +1 -1
  169. package/dist/src/platforms/webex/commands/auth.d.ts.map +1 -1
  170. package/dist/src/platforms/webex/commands/auth.js +1 -3
  171. package/dist/src/platforms/webex/commands/auth.js.map +1 -1
  172. package/dist/src/platforms/webex/commands/member.d.ts.map +1 -1
  173. package/dist/src/platforms/webex/commands/member.js +1 -3
  174. package/dist/src/platforms/webex/commands/member.js.map +1 -1
  175. package/dist/src/platforms/webex/commands/message.d.ts.map +1 -1
  176. package/dist/src/platforms/webex/commands/message.js.map +1 -1
  177. package/dist/src/platforms/webex/commands/snapshot.d.ts.map +1 -1
  178. package/dist/src/platforms/webex/commands/snapshot.js.map +1 -1
  179. package/dist/src/platforms/webex/commands/space.d.ts.map +1 -1
  180. package/dist/src/platforms/webex/commands/space.js.map +1 -1
  181. package/dist/src/platforms/webex/commands/whoami.d.ts.map +1 -1
  182. package/dist/src/platforms/webex/commands/whoami.js.map +1 -1
  183. package/dist/src/platforms/webex/credential-manager.d.ts.map +1 -1
  184. package/dist/src/platforms/webex/credential-manager.js.map +1 -1
  185. package/dist/src/platforms/webex/ensure-auth.d.ts.map +1 -1
  186. package/dist/src/platforms/webex/ensure-auth.js +1 -3
  187. package/dist/src/platforms/webex/ensure-auth.js.map +1 -1
  188. package/dist/src/platforms/webex/index.d.ts +1 -1
  189. package/dist/src/platforms/webex/index.d.ts.map +1 -1
  190. package/dist/src/platforms/webex/index.js.map +1 -1
  191. package/dist/src/platforms/webex/markdown-to-html.js.map +1 -1
  192. package/dist/src/platforms/webex/token-extractor.d.ts.map +1 -1
  193. package/dist/src/platforms/webex/token-extractor.js +5 -14
  194. package/dist/src/platforms/webex/token-extractor.js.map +1 -1
  195. package/dist/src/platforms/wechatbot/client.d.ts.map +1 -1
  196. package/dist/src/platforms/wechatbot/client.js.map +1 -1
  197. package/dist/src/platforms/wechatbot/commands/message.d.ts.map +1 -1
  198. package/dist/src/platforms/wechatbot/commands/message.js.map +1 -1
  199. package/dist/src/platforms/whatsapp/cli.d.ts.map +1 -1
  200. package/dist/src/platforms/whatsapp/cli.js +1 -4
  201. package/dist/src/platforms/whatsapp/cli.js.map +1 -1
  202. package/dist/src/platforms/whatsapp/commands/chat.d.ts.map +1 -1
  203. package/dist/src/platforms/whatsapp/commands/chat.js.map +1 -1
  204. package/dist/src/platforms/whatsapp/commands/message.d.ts.map +1 -1
  205. package/dist/src/platforms/whatsapp/commands/message.js.map +1 -1
  206. package/dist/src/platforms/whatsapp/commands/shared.d.ts.map +1 -1
  207. package/dist/src/platforms/whatsapp/commands/shared.js.map +1 -1
  208. package/dist/src/platforms/whatsapp/credential-manager.d.ts.map +1 -1
  209. package/dist/src/platforms/whatsapp/credential-manager.js +1 -1
  210. package/dist/src/platforms/whatsapp/credential-manager.js.map +1 -1
  211. package/dist/src/platforms/whatsapp/ensure-auth.d.ts.map +1 -1
  212. package/dist/src/platforms/whatsapp/ensure-auth.js.map +1 -1
  213. package/dist/src/platforms/whatsappbot/client.d.ts.map +1 -1
  214. package/dist/src/platforms/whatsappbot/client.js +2 -2
  215. package/dist/src/platforms/whatsappbot/client.js.map +1 -1
  216. package/dist/src/platforms/whatsappbot/commands/auth.d.ts.map +1 -1
  217. package/dist/src/platforms/whatsappbot/commands/auth.js +4 -1
  218. package/dist/src/platforms/whatsappbot/commands/auth.js.map +1 -1
  219. package/dist/src/platforms/whatsappbot/commands/message.d.ts.map +1 -1
  220. package/dist/src/platforms/whatsappbot/commands/message.js.map +1 -1
  221. package/dist/src/platforms/whatsappbot/commands/shared.d.ts.map +1 -1
  222. package/dist/src/platforms/whatsappbot/commands/shared.js.map +1 -1
  223. package/dist/src/shared/chromium/browsers.d.ts +7 -0
  224. package/dist/src/shared/chromium/browsers.d.ts.map +1 -0
  225. package/dist/src/shared/chromium/browsers.js +89 -0
  226. package/dist/src/shared/chromium/browsers.js.map +1 -0
  227. package/dist/src/shared/chromium/cookie-reader.d.ts +20 -0
  228. package/dist/src/shared/chromium/cookie-reader.d.ts.map +1 -0
  229. package/dist/src/shared/chromium/cookie-reader.js +99 -0
  230. package/dist/src/shared/chromium/cookie-reader.js.map +1 -0
  231. package/dist/src/shared/chromium/decryptor.d.ts +42 -0
  232. package/dist/src/shared/chromium/decryptor.d.ts.map +1 -0
  233. package/dist/src/shared/chromium/decryptor.js +205 -0
  234. package/dist/src/shared/chromium/decryptor.js.map +1 -0
  235. package/dist/src/shared/chromium/index.d.ts +6 -0
  236. package/dist/src/shared/chromium/index.d.ts.map +1 -0
  237. package/dist/src/shared/chromium/index.js +4 -0
  238. package/dist/src/shared/chromium/index.js.map +1 -0
  239. package/dist/src/shared/chromium/types.d.ts +11 -0
  240. package/dist/src/shared/chromium/types.d.ts.map +1 -0
  241. package/dist/src/shared/chromium/types.js +2 -0
  242. package/dist/src/shared/chromium/types.js.map +1 -0
  243. package/dist/src/shared/utils/derived-key-cache.d.ts +1 -1
  244. package/dist/src/shared/utils/derived-key-cache.d.ts.map +1 -1
  245. package/dist/src/shared/utils/linux-keyring.js +4 -1
  246. package/dist/src/shared/utils/linux-keyring.js.map +1 -1
  247. package/dist/src/tui/adapters/kakaotalk-adapter.d.ts.map +1 -1
  248. package/dist/src/tui/adapters/kakaotalk-adapter.js +6 -1
  249. package/dist/src/tui/adapters/kakaotalk-adapter.js.map +1 -1
  250. package/dist/src/tui/adapters/telegram-adapter.js +1 -1
  251. package/dist/src/tui/adapters/telegram-adapter.js.map +1 -1
  252. package/dist/src/tui/adapters/webex-adapter.js +1 -1
  253. package/dist/src/tui/adapters/webex-adapter.js.map +1 -1
  254. package/dist/src/tui/app.d.ts.map +1 -1
  255. package/dist/src/tui/app.js +112 -23
  256. package/dist/src/tui/app.js.map +1 -1
  257. package/dist/src/tui/utils.d.ts.map +1 -1
  258. package/dist/src/tui/utils.js +11 -13
  259. package/dist/src/tui/utils.js.map +1 -1
  260. package/dist/src/tui/views/channel-picker.d.ts.map +1 -1
  261. package/dist/src/tui/views/channel-picker.js.map +1 -1
  262. package/dist/src/tui/views/workspace-picker.d.ts.map +1 -1
  263. package/dist/src/tui/views/workspace-picker.js.map +1 -1
  264. package/docs/content/docs/cli/channeltalk.mdx +24 -22
  265. package/docs/content/docs/cli/channeltalkbot.mdx +7 -7
  266. package/docs/content/docs/cli/instagram.mdx +4 -4
  267. package/docs/content/docs/cli/kakaotalk.mdx +9 -8
  268. package/docs/content/docs/cli/line.mdx +14 -14
  269. package/docs/content/docs/cli/webex.mdx +19 -19
  270. package/docs/content/docs/cli/wechatbot.mdx +12 -11
  271. package/docs/content/docs/cli/whatsapp.mdx +5 -4
  272. package/docs/content/docs/cli/whatsappbot.mdx +11 -11
  273. package/docs/content/docs/index.mdx +7 -7
  274. package/docs/content/docs/meta.json +1 -9
  275. package/docs/content/docs/sdk/channeltalk.mdx +5 -6
  276. package/docs/content/docs/sdk/channeltalkbot.mdx +6 -12
  277. package/docs/content/docs/sdk/discord.mdx +36 -43
  278. package/docs/content/docs/sdk/instagram.mdx +18 -18
  279. package/docs/content/docs/sdk/kakaotalk.mdx +27 -18
  280. package/docs/content/docs/sdk/line.mdx +8 -13
  281. package/docs/content/docs/sdk/meta.json +14 -1
  282. package/docs/content/docs/sdk/slack.mdx +36 -42
  283. package/docs/content/docs/sdk/teams.mdx +2 -8
  284. package/docs/content/docs/sdk/webex.mdx +2 -12
  285. package/docs/content/docs/sdk/wechatbot.mdx +1 -5
  286. package/docs/content/docs/sdk/whatsapp.mdx +10 -19
  287. package/docs/content/docs/sdk/whatsappbot.mdx +2 -10
  288. package/docs/content/docs/tui.mdx +23 -23
  289. package/docs/src/app/page.tsx +353 -108
  290. package/e2e/channeltalkbot.e2e.test.ts +1 -5
  291. package/e2e/config.ts +6 -2
  292. package/package.json +59 -58
  293. package/scripts/prepublish.ts +1 -3
  294. package/skills/agent-channeltalk/SKILL.md +1 -1
  295. package/skills/agent-channeltalkbot/SKILL.md +1 -1
  296. package/skills/agent-discord/SKILL.md +1 -1
  297. package/skills/agent-discordbot/SKILL.md +1 -1
  298. package/skills/agent-instagram/SKILL.md +1 -1
  299. package/skills/agent-kakaotalk/SKILL.md +1 -1
  300. package/skills/agent-line/SKILL.md +1 -1
  301. package/skills/agent-slack/SKILL.md +1 -1
  302. package/skills/agent-slackbot/SKILL.md +1 -1
  303. package/skills/agent-teams/SKILL.md +1 -1
  304. package/skills/agent-telegram/SKILL.md +1 -1
  305. package/skills/agent-webex/SKILL.md +1 -1
  306. package/skills/agent-wechatbot/SKILL.md +1 -1
  307. package/skills/agent-whatsapp/SKILL.md +1 -1
  308. package/skills/agent-whatsappbot/SKILL.md +1 -1
  309. package/src/platforms/channeltalk/client.test.ts +116 -29
  310. package/src/platforms/channeltalk/client.ts +26 -6
  311. package/src/platforms/channeltalk/commands/auth.test.ts +5 -5
  312. package/src/platforms/channeltalk/commands/auth.ts +19 -5
  313. package/src/platforms/channeltalk/commands/message.test.ts +2 -6
  314. package/src/platforms/channeltalk/commands/message.ts +5 -1
  315. package/src/platforms/channeltalk/commands/snapshot.test.ts +19 -4
  316. package/src/platforms/channeltalk/commands/snapshot.ts +5 -1
  317. package/src/platforms/channeltalk/ensure-auth.test.ts +20 -17
  318. package/src/platforms/channeltalk/ensure-auth.ts +6 -7
  319. package/src/platforms/channeltalk/index.ts +0 -1
  320. package/src/platforms/channeltalk/token-extractor.test.ts +33 -25
  321. package/src/platforms/channeltalk/token-extractor.ts +120 -372
  322. package/src/platforms/channeltalkbot/client.test.ts +1 -3
  323. package/src/platforms/channeltalkbot/client.ts +39 -13
  324. package/src/platforms/channeltalkbot/commands/auth.test.ts +3 -1
  325. package/src/platforms/channeltalkbot/commands/auth.ts +4 -1
  326. package/src/platforms/channeltalkbot/commands/bot.test.ts +13 -5
  327. package/src/platforms/channeltalkbot/commands/message.test.ts +12 -6
  328. package/src/platforms/channeltalkbot/commands/shared.ts +6 -2
  329. package/src/platforms/channeltalkbot/commands/snapshot.test.ts +17 -5
  330. package/src/platforms/channeltalkbot/credential-manager.test.ts +1 -1
  331. package/src/platforms/channeltalkbot/index.test.ts +0 -2
  332. package/src/platforms/channeltalkbot/index.ts +0 -1
  333. package/src/platforms/discord/commands/auth.test.ts +6 -4
  334. package/src/platforms/discord/commands/auth.ts +14 -14
  335. package/src/platforms/discord/commands/whoami.test.ts +2 -4
  336. package/src/platforms/discord/commands/whoami.ts +2 -0
  337. package/src/platforms/discord/ensure-auth.test.ts +5 -3
  338. package/src/platforms/discord/index.ts +0 -1
  339. package/src/platforms/discord/listener.test.ts +7 -1
  340. package/src/platforms/discord/token-extractor.test.ts +18 -12
  341. package/src/platforms/discord/token-extractor.ts +46 -190
  342. package/src/platforms/discordbot/client.ts +1 -4
  343. package/src/platforms/discordbot/commands/auth.test.ts +3 -1
  344. package/src/platforms/discordbot/commands/channel.test.ts +3 -1
  345. package/src/platforms/discordbot/commands/message.test.ts +3 -1
  346. package/src/platforms/discordbot/commands/server.test.ts +3 -1
  347. package/src/platforms/discordbot/commands/snapshot.test.ts +3 -1
  348. package/src/platforms/discordbot/commands/thread.test.ts +3 -1
  349. package/src/platforms/discordbot/commands/user.test.ts +3 -1
  350. package/src/platforms/instagram/cli.ts +1 -4
  351. package/src/platforms/instagram/client.test.ts +3 -8
  352. package/src/platforms/instagram/client.ts +39 -34
  353. package/src/platforms/instagram/commands/auth.test.ts +13 -12
  354. package/src/platforms/instagram/commands/auth.ts +136 -71
  355. package/src/platforms/instagram/commands/chat.test.ts +21 -24
  356. package/src/platforms/instagram/commands/chat.ts +2 -0
  357. package/src/platforms/instagram/commands/message.test.ts +29 -24
  358. package/src/platforms/instagram/commands/message.ts +3 -4
  359. package/src/platforms/instagram/commands/shared.ts +2 -5
  360. package/src/platforms/instagram/commands/whoami.test.ts +4 -6
  361. package/src/platforms/instagram/credential-manager.ts +2 -6
  362. package/src/platforms/instagram/ensure-auth.test.ts +1 -4
  363. package/src/platforms/instagram/ensure-auth.ts +6 -3
  364. package/src/platforms/instagram/listener.test.ts +7 -3
  365. package/src/platforms/instagram/token-extractor.test.ts +4 -16
  366. package/src/platforms/instagram/token-extractor.ts +55 -309
  367. package/src/platforms/instagram/types.test.ts +2 -6
  368. package/src/platforms/instagram/types.ts +4 -2
  369. package/src/platforms/kakaotalk/auth/kakao-login.ts +30 -8
  370. package/src/platforms/kakaotalk/client.test.ts +37 -25
  371. package/src/platforms/kakaotalk/client.ts +23 -12
  372. package/src/platforms/kakaotalk/commands/auth.test.ts +6 -18
  373. package/src/platforms/kakaotalk/commands/auth.ts +101 -47
  374. package/src/platforms/kakaotalk/commands/chat.test.ts +8 -11
  375. package/src/platforms/kakaotalk/commands/message.test.ts +15 -24
  376. package/src/platforms/kakaotalk/commands/shared.ts +1 -0
  377. package/src/platforms/kakaotalk/commands/whoami.test.ts +6 -10
  378. package/src/platforms/kakaotalk/credential-manager.test.ts +1 -4
  379. package/src/platforms/kakaotalk/index.test.ts +1 -0
  380. package/src/platforms/kakaotalk/index.ts +0 -2
  381. package/src/platforms/kakaotalk/listener.test.ts +7 -1
  382. package/src/platforms/kakaotalk/protocol/connection.ts +4 -1
  383. package/src/platforms/kakaotalk/protocol/crypto.ts +1 -1
  384. package/src/platforms/kakaotalk/protocol/session.ts +12 -6
  385. package/src/platforms/kakaotalk/token-extractor.ts +5 -5
  386. package/src/platforms/kakaotalk/types.ts +8 -7
  387. package/src/platforms/line/cli.ts +1 -4
  388. package/src/platforms/line/client.ts +12 -20
  389. package/src/platforms/line/commands/auth.test.ts +2 -1
  390. package/src/platforms/line/commands/chat.test.ts +2 -1
  391. package/src/platforms/line/commands/chat.ts +1 -4
  392. package/src/platforms/line/commands/friend.test.ts +2 -1
  393. package/src/platforms/line/commands/message.test.ts +2 -1
  394. package/src/platforms/line/commands/message.ts +2 -9
  395. package/src/platforms/line/commands/whoami.test.ts +2 -1
  396. package/src/platforms/line/credential-manager.test.ts +1 -2
  397. package/src/platforms/line/index.test.ts +1 -0
  398. package/src/platforms/line/listener.ts +1 -1
  399. package/src/platforms/line/types.test.ts +1 -0
  400. package/src/platforms/slack/cli.ts +3 -1
  401. package/src/platforms/slack/client-mappers.ts +297 -0
  402. package/src/platforms/slack/client.test.ts +532 -17
  403. package/src/platforms/slack/client.ts +69 -458
  404. package/src/platforms/slack/commands/channel.ts +1 -4
  405. package/src/platforms/slack/commands/emoji.test.ts +6 -4
  406. package/src/platforms/slack/commands/emoji.ts +20 -22
  407. package/src/platforms/slack/commands/message.ts +6 -1
  408. package/src/platforms/slack/commands/pin.test.ts +14 -12
  409. package/src/platforms/slack/commands/reminder.ts +7 -6
  410. package/src/platforms/slack/commands/user.ts +6 -1
  411. package/src/platforms/slack/commands/usergroup.test.ts +3 -3
  412. package/src/platforms/slack/commands/usergroup.ts +10 -7
  413. package/src/platforms/slack/commands/whoami.test.ts +1 -1
  414. package/src/platforms/slack/commands/whoami.ts +2 -0
  415. package/src/platforms/slack/index.ts +0 -2
  416. package/src/platforms/slack/listener.test.ts +1 -0
  417. package/src/platforms/slack/token-extractor.test.ts +7 -12
  418. package/src/platforms/slack/token-extractor.ts +47 -255
  419. package/src/platforms/slackbot/cli.ts +8 -1
  420. package/src/platforms/slackbot/commands/auth.test.ts +3 -1
  421. package/src/platforms/teams/client.ts +1 -1
  422. package/src/platforms/teams/commands/auth.test.ts +1 -1
  423. package/src/platforms/teams/commands/auth.ts +4 -1
  424. package/src/platforms/teams/commands/whoami.test.ts +2 -4
  425. package/src/platforms/teams/commands/whoami.ts +2 -0
  426. package/src/platforms/teams/index.ts +0 -1
  427. package/src/platforms/teams/token-extractor.ts +82 -350
  428. package/src/platforms/telegram/app-config.test.ts +1 -0
  429. package/src/platforms/telegram/chat-utils.test.ts +5 -1
  430. package/src/platforms/telegram/cli.ts +2 -4
  431. package/src/platforms/telegram/client.test.ts +16 -3
  432. package/src/platforms/telegram/client.ts +14 -4
  433. package/src/platforms/telegram/commands/auth.test.ts +1 -0
  434. package/src/platforms/telegram/commands/auth.ts +3 -4
  435. package/src/platforms/telegram/commands/chat.test.ts +2 -5
  436. package/src/platforms/telegram/commands/chat.ts +1 -0
  437. package/src/platforms/telegram/commands/message.test.ts +2 -5
  438. package/src/platforms/telegram/commands/message.ts +1 -0
  439. package/src/platforms/telegram/commands/shared.test.ts +1 -0
  440. package/src/platforms/telegram/commands/whoami.test.ts +5 -7
  441. package/src/platforms/telegram/commands/whoami.ts +1 -1
  442. package/src/platforms/telegram/credential-manager.test.ts +1 -0
  443. package/src/platforms/telegram/credential-manager.ts +11 -2
  444. package/src/platforms/telegram/my-telegram-org.ts +6 -2
  445. package/src/platforms/telegram/types.test.ts +1 -0
  446. package/src/platforms/webex/app-config.test.ts +1 -0
  447. package/src/platforms/webex/cli.ts +1 -4
  448. package/src/platforms/webex/client.test.ts +4 -12
  449. package/src/platforms/webex/client.ts +14 -52
  450. package/src/platforms/webex/commands/auth.test.ts +7 -1
  451. package/src/platforms/webex/commands/auth.ts +12 -15
  452. package/src/platforms/webex/commands/member.test.ts +1 -3
  453. package/src/platforms/webex/commands/member.ts +14 -19
  454. package/src/platforms/webex/commands/message.ts +4 -15
  455. package/src/platforms/webex/commands/snapshot.test.ts +28 -3
  456. package/src/platforms/webex/commands/snapshot.ts +3 -3
  457. package/src/platforms/webex/commands/space.test.ts +3 -3
  458. package/src/platforms/webex/commands/space.ts +2 -9
  459. package/src/platforms/webex/commands/whoami.test.ts +12 -5
  460. package/src/platforms/webex/commands/whoami.ts +2 -0
  461. package/src/platforms/webex/credential-manager.ts +11 -2
  462. package/src/platforms/webex/ensure-auth.ts +1 -3
  463. package/src/platforms/webex/index.ts +1 -7
  464. package/src/platforms/webex/markdown-to-html.test.ts +6 -18
  465. package/src/platforms/webex/markdown-to-html.ts +8 -8
  466. package/src/platforms/webex/token-extractor.ts +6 -29
  467. package/src/platforms/wechatbot/client.test.ts +6 -2
  468. package/src/platforms/wechatbot/client.ts +6 -1
  469. package/src/platforms/wechatbot/commands/auth.test.ts +3 -7
  470. package/src/platforms/wechatbot/commands/message.test.ts +1 -4
  471. package/src/platforms/wechatbot/commands/message.ts +5 -1
  472. package/src/platforms/wechatbot/commands/template.test.ts +1 -4
  473. package/src/platforms/wechatbot/commands/user.test.ts +2 -7
  474. package/src/platforms/whatsapp/cli.ts +1 -4
  475. package/src/platforms/whatsapp/commands/auth.test.ts +19 -22
  476. package/src/platforms/whatsapp/commands/chat.test.ts +21 -24
  477. package/src/platforms/whatsapp/commands/chat.ts +2 -0
  478. package/src/platforms/whatsapp/commands/message.test.ts +22 -24
  479. package/src/platforms/whatsapp/commands/message.ts +3 -5
  480. package/src/platforms/whatsapp/commands/shared.ts +2 -5
  481. package/src/platforms/whatsapp/commands/whoami.test.ts +2 -2
  482. package/src/platforms/whatsapp/credential-manager.ts +2 -6
  483. package/src/platforms/whatsapp/ensure-auth.test.ts +1 -4
  484. package/src/platforms/whatsapp/ensure-auth.ts +14 -6
  485. package/src/platforms/whatsapp/index.ts +0 -2
  486. package/src/platforms/whatsappbot/client.test.ts +13 -7
  487. package/src/platforms/whatsappbot/client.ts +18 -4
  488. package/src/platforms/whatsappbot/commands/auth.ts +4 -1
  489. package/src/platforms/whatsappbot/commands/message.test.ts +12 -2
  490. package/src/platforms/whatsappbot/commands/message.ts +16 -3
  491. package/src/platforms/whatsappbot/commands/shared.ts +3 -1
  492. package/src/platforms/whatsappbot/commands/whoami.test.ts +1 -3
  493. package/src/platforms/whatsappbot/index.ts +0 -2
  494. package/src/shared/chromium/browsers.test.ts +274 -0
  495. package/src/shared/chromium/browsers.ts +86 -0
  496. package/src/shared/chromium/cookie-reader.test.ts +274 -0
  497. package/src/shared/chromium/cookie-reader.ts +111 -0
  498. package/src/shared/chromium/decryptor.test.ts +449 -0
  499. package/src/shared/chromium/decryptor.ts +227 -0
  500. package/src/shared/chromium/index.ts +11 -0
  501. package/src/shared/chromium/types.ts +11 -0
  502. package/src/shared/utils/derived-key-cache.ts +1 -1
  503. package/src/shared/utils/linux-keyring.ts +4 -4
  504. package/src/tui/adapters/kakaotalk-adapter.ts +6 -1
  505. package/src/tui/adapters/telegram-adapter.ts +1 -1
  506. package/src/tui/adapters/webex-adapter.ts +1 -1
  507. package/src/tui/app.ts +149 -59
  508. package/src/tui/utils.test.ts +144 -145
  509. package/src/tui/utils.ts +27 -29
  510. package/src/tui/views/channel-picker.ts +1 -1
  511. package/src/tui/views/workspace-picker.ts +1 -1
@@ -1,3 +1,4 @@
1
+ import { ChannelCredentialManager } from './credential-manager'
1
2
  import type {
2
3
  Channel,
3
4
  ChannelAccount,
@@ -11,7 +12,6 @@ import type {
11
12
  MessageBlock,
12
13
  } from './types'
13
14
  import { ChannelError } from './types'
14
- import { ChannelCredentialManager } from './credential-manager'
15
15
 
16
16
  const BASE_URL = 'https://desk-api.channel.io'
17
17
  const MAX_RETRIES = 3
@@ -99,11 +99,21 @@ export class ChannelClient {
99
99
  }
100
100
 
101
101
  async getManagerRole(channelId: string): Promise<{ permissions: unknown[] }> {
102
- return this.request<{ permissions: unknown[] }>('GET', `/desk/channels/${channelId}/managers/me/role`, undefined, 'role')
102
+ return this.request<{ permissions: unknown[] }>(
103
+ 'GET',
104
+ `/desk/channels/${channelId}/managers/me/role`,
105
+ undefined,
106
+ 'role',
107
+ )
103
108
  }
104
109
 
105
110
  async listGroups(channelId: string, params?: { limit?: number }): Promise<ChannelGroup[]> {
106
- return this.request<ChannelGroup[]>('GET', this.buildPath(`/desk/channels/${channelId}/groups`, params), undefined, 'groups')
111
+ return this.request<ChannelGroup[]>(
112
+ 'GET',
113
+ this.buildPath(`/desk/channels/${channelId}/groups`, params),
114
+ undefined,
115
+ 'groups',
116
+ )
107
117
  }
108
118
 
109
119
  async getGroup(channelId: string, groupId: string): Promise<ChannelGroup> {
@@ -183,7 +193,12 @@ export class ChannelClient {
183
193
  }
184
194
 
185
195
  async getUserChat(channelId: string, chatId: string): Promise<ChannelUserChat> {
186
- return this.request<ChannelUserChat>('GET', `/desk/channels/${channelId}/user-chats/${chatId}`, undefined, 'userChat')
196
+ return this.request<ChannelUserChat>(
197
+ 'GET',
198
+ `/desk/channels/${channelId}/user-chats/${chatId}`,
199
+ undefined,
200
+ 'userChat',
201
+ )
187
202
  }
188
203
 
189
204
  async getUserChatMessages(
@@ -214,7 +229,12 @@ export class ChannelClient {
214
229
  }
215
230
 
216
231
  async listBots(channelId: string, params?: { limit?: number }): Promise<ChannelBot[]> {
217
- return this.request<ChannelBot[]>('GET', this.buildPath(`/desk/channels/${channelId}/bots`, params), undefined, 'bots')
232
+ return this.request<ChannelBot[]>(
233
+ 'GET',
234
+ this.buildPath(`/desk/channels/${channelId}/bots`, params),
235
+ undefined,
236
+ 'bots',
237
+ )
218
238
  }
219
239
 
220
240
  async searchTeamChatMessages(
@@ -344,7 +364,7 @@ export class ChannelClient {
344
364
  }
345
365
 
346
366
  private async createHttpError(response: Response): Promise<ChannelError> {
347
- const errorBody = await response.json().catch(() => ({})) as ChannelApiErrorResponse
367
+ const errorBody = (await response.json().catch(() => ({}))) as ChannelApiErrorResponse
348
368
  const message = errorBody.errors?.[0]?.message || `HTTP ${response.status}`
349
369
  const code = errorBody.type || `http_${response.status}`
350
370
  return new ChannelError(message, code)
@@ -19,9 +19,7 @@ const mockListChannels = mock(() =>
19
19
  { id: 'ws-2', name: 'Workspace 2' },
20
20
  ]),
21
21
  )
22
- const mockExtract = mock(() =>
23
- Promise.resolve([{ accountCookie: 'fresh-account', sessionCookie: 'fresh-session' }]),
24
- )
22
+ const mockExtract = mock(() => Promise.resolve([{ accountCookie: 'fresh-account', sessionCookie: 'fresh-session' }]))
25
23
 
26
24
  import {
27
25
  clearAction,
@@ -50,7 +48,7 @@ setChannelAuthCommandDependenciesForTesting({
50
48
  createCredentialManager: () => ({
51
49
  async getCredentials(workspaceId?: string): Promise<WorkspaceEntry | null> {
52
50
  const targetId = workspaceId ?? currentWorkspaceId
53
- return targetId ? workspaceStore.get(targetId) ?? null : null
51
+ return targetId ? (workspaceStore.get(targetId) ?? null) : null
54
52
  },
55
53
 
56
54
  async setCredentials(entry: WorkspaceEntry): Promise<void> {
@@ -115,7 +113,9 @@ describe('channel auth commands', () => {
115
113
  { id: 'ws-2', name: 'Workspace 2' },
116
114
  ]),
117
115
  )
118
- mockExtract.mockImplementation(() => Promise.resolve([{ accountCookie: 'fresh-account', sessionCookie: 'fresh-session' }]))
116
+ mockExtract.mockImplementation(() =>
117
+ Promise.resolve([{ accountCookie: 'fresh-account', sessionCookie: 'fresh-session' }]),
118
+ )
119
119
  })
120
120
 
121
121
  describe('extractAction', () => {
@@ -50,7 +50,10 @@ type ChannelCredentialManagerLike = Pick<
50
50
  >
51
51
  type ChannelTokenExtractorLike = Pick<ChannelTokenExtractor, 'extract'>
52
52
 
53
- let createChannelClient: (accountCookie: string, sessionCookie?: string) => ChannelClientLike | Promise<ChannelClientLike> = async (
53
+ let createChannelClient: (
54
+ accountCookie: string,
55
+ sessionCookie?: string,
56
+ ) => ChannelClientLike | Promise<ChannelClientLike> = async (
54
57
  accountCookie: string,
55
58
  sessionCookie?: string,
56
59
  ): Promise<ChannelClientLike> => new ChannelClient().login({ accountCookie, sessionCookie })
@@ -60,7 +63,10 @@ let createCredentialManager = (): ChannelCredentialManagerLike => new ChannelCre
60
63
  let createTokenExtractor = (): ChannelTokenExtractorLike => new ChannelTokenExtractor()
61
64
 
62
65
  export function setChannelAuthCommandDependenciesForTesting(dependencies: {
63
- createChannelClient?: (accountCookie: string, sessionCookie?: string) => ChannelClientLike | Promise<ChannelClientLike>
66
+ createChannelClient?: (
67
+ accountCookie: string,
68
+ sessionCookie?: string,
69
+ ) => ChannelClientLike | Promise<ChannelClientLike>
64
70
  createCredentialManager?: () => ChannelCredentialManagerLike
65
71
  createTokenExtractor?: () => ChannelTokenExtractorLike
66
72
  }): void {
@@ -154,7 +160,9 @@ export async function statusAction(options: ActionOptions = {}): Promise<StatusR
154
160
  }
155
161
  }
156
162
 
157
- const storedWorkspace = (await credManager.listAll()).find((workspace) => workspace.workspace_id === creds.workspace_id)
163
+ const storedWorkspace = (await credManager.listAll()).find(
164
+ (workspace) => workspace.workspace_id === creds.workspace_id,
165
+ )
158
166
 
159
167
  try {
160
168
  const client = await createChannelClient(creds.account_cookie, creds.session_cookie ?? undefined)
@@ -205,7 +213,10 @@ export async function listAction(options: ActionOptions = {}): Promise<Workspace
205
213
  }
206
214
  }
207
215
 
208
- export async function useAction(workspaceId: string, options: ActionOptions = {}): Promise<SuccessResult | ErrorResult> {
216
+ export async function useAction(
217
+ workspaceId: string,
218
+ options: ActionOptions = {},
219
+ ): Promise<SuccessResult | ErrorResult> {
209
220
  try {
210
221
  const credManager = options._credManager ?? createCredentialManager()
211
222
  const found = await credManager.setCurrent(workspaceId)
@@ -223,7 +234,10 @@ export async function useAction(workspaceId: string, options: ActionOptions = {}
223
234
  }
224
235
  }
225
236
 
226
- export async function removeAction(workspaceId: string, options: ActionOptions = {}): Promise<SuccessResult | ErrorResult> {
237
+ export async function removeAction(
238
+ workspaceId: string,
239
+ options: ActionOptions = {},
240
+ ): Promise<SuccessResult | ErrorResult> {
227
241
  try {
228
242
  const credManager = options._credManager ?? createCredentialManager()
229
243
  const removed = await credManager.removeWorkspace(workspaceId)
@@ -309,9 +309,7 @@ describe('message commands', () => {
309
309
  test('sendAction sends a group message with wrapped blocks', async () => {
310
310
  const result = await sendAction('group', 'grp-1', 'Hello group')
311
311
 
312
- expect(mockSendGroupMessage).toHaveBeenCalledWith('ws-1', 'grp-1', [
313
- { type: 'text', value: 'Hello group' },
314
- ])
312
+ expect(mockSendGroupMessage).toHaveBeenCalledWith('ws-1', 'grp-1', [{ type: 'text', value: 'Hello group' }])
315
313
  expect(result).toMatchObject({
316
314
  id: 'msg-group-1',
317
315
  channel_id: 'ws-1',
@@ -324,9 +322,7 @@ describe('message commands', () => {
324
322
  test('sendAction sends a user chat message with wrapped blocks', async () => {
325
323
  const result = await sendAction('user-chat', 'chat-1', 'Hello user chat')
326
324
 
327
- expect(mockSendUserChatMessage).toHaveBeenCalledWith('ws-1', 'chat-1', [
328
- { type: 'text', value: 'Hello user chat' },
329
- ])
325
+ expect(mockSendUserChatMessage).toHaveBeenCalledWith('ws-1', 'chat-1', [{ type: 'text', value: 'Hello user chat' }])
330
326
  expect(result).toMatchObject({
331
327
  id: 'msg-user-1',
332
328
  channel_id: 'ws-1',
@@ -70,7 +70,11 @@ export async function sendAction(
70
70
  }
71
71
  }
72
72
 
73
- export async function listAction(chatType: ChatType, chatId: string, options: MessageOptions = {}): Promise<MessageResult> {
73
+ export async function listAction(
74
+ chatType: ChatType,
75
+ chatId: string,
76
+ options: MessageOptions = {},
77
+ ): Promise<MessageResult> {
74
78
  try {
75
79
  const client = await getClient(options)
76
80
  const channelId = await getCurrentWorkspaceId(options)
@@ -2,9 +2,20 @@ import { beforeEach, describe, expect, mock, test } from 'bun:test'
2
2
 
3
3
  const mockGetChannel = mock(() => Promise.resolve({ id: 'ws-1', name: 'Workspace One' }))
4
4
  const mockListManagers = mock(() =>
5
- Promise.resolve([{ id: 'mgr-1', channelId: 'ws-1', accountId: 'acct-1', name: 'Alice', email: 'alice@example.com', roleId: 'role-1' }]),
5
+ Promise.resolve([
6
+ {
7
+ id: 'mgr-1',
8
+ channelId: 'ws-1',
9
+ accountId: 'acct-1',
10
+ name: 'Alice',
11
+ email: 'alice@example.com',
12
+ roleId: 'role-1',
13
+ },
14
+ ]),
15
+ )
16
+ const mockListBots = mock(() =>
17
+ Promise.resolve([{ id: 'bot-1', channelId: 'ws-1', name: 'Support Bot', avatarUrl: 'https://example.com/bot.png' }]),
6
18
  )
7
- const mockListBots = mock(() => Promise.resolve([{ id: 'bot-1', channelId: 'ws-1', name: 'Support Bot', avatarUrl: 'https://example.com/bot.png' }]))
8
19
  const mockListGroups = mock(() =>
9
20
  Promise.resolve([
10
21
  { id: 'grp-1', channelId: 'ws-1', name: 'Support' },
@@ -34,9 +45,13 @@ const mockListUserChats = mock((_: string, params?: { state?: string; limit?: nu
34
45
  { id: 'chat-2', channelId: 'ws-1', state: 'opened', assigneeId: 'mgr-2', createdAt: 110, updatedAt: 210 },
35
46
  ])
36
47
  case 'snoozed':
37
- return Promise.resolve([{ id: 'chat-3', channelId: 'ws-1', state: 'snoozed', assigneeId: 'mgr-1', createdAt: 120, updatedAt: 220 }])
48
+ return Promise.resolve([
49
+ { id: 'chat-3', channelId: 'ws-1', state: 'snoozed', assigneeId: 'mgr-1', createdAt: 120, updatedAt: 220 },
50
+ ])
38
51
  case 'closed':
39
- return Promise.resolve([{ id: 'chat-4', channelId: 'ws-1', state: 'closed', assigneeId: 'mgr-2', createdAt: 130, updatedAt: 230 }])
52
+ return Promise.resolve([
53
+ { id: 'chat-4', channelId: 'ws-1', state: 'closed', assigneeId: 'mgr-2', createdAt: 130, updatedAt: 230 },
54
+ ])
40
55
  default:
41
56
  return Promise.resolve([])
42
57
  }
@@ -141,7 +141,11 @@ async function buildGroupsSnapshot(client: Awaited<ReturnType<typeof getClient>>
141
141
  )
142
142
  }
143
143
 
144
- async function buildUserChatsSnapshot(client: Awaited<ReturnType<typeof getClient>>, workspaceId: string, limit: number) {
144
+ async function buildUserChatsSnapshot(
145
+ client: Awaited<ReturnType<typeof getClient>>,
146
+ workspaceId: string,
147
+ limit: number,
148
+ ) {
145
149
  const [openedChats, snoozedChats, closedChats] = await Promise.all([
146
150
  client.listUserChats(workspaceId, { state: 'opened', limit: 100 }),
147
151
  client.listUserChats(workspaceId, { state: 'snoozed', limit: 100 }),
@@ -6,15 +6,14 @@ import {
6
6
  setEnsureChannelAuthDependenciesForTesting,
7
7
  } from './ensure-auth'
8
8
 
9
- const mockGetCredentials = mock<() => Promise<
10
- | {
11
- workspace_id: string
12
- workspace_name: string
13
- account_cookie: string
14
- session_cookie: string
15
- }
16
- | null
17
- >>(() => Promise.resolve(null))
9
+ const mockGetCredentials = mock<
10
+ () => Promise<{
11
+ workspace_id: string
12
+ workspace_name: string
13
+ account_cookie: string
14
+ session_cookie: string
15
+ } | null>
16
+ >(() => Promise.resolve(null))
18
17
  const mockSetCredentials = mock(() => Promise.resolve())
19
18
  const mockSetCurrent = mock(() => Promise.resolve(true))
20
19
  const mockExtract = mock(() => Promise.resolve([]))
@@ -65,10 +64,12 @@ describe('ensureChannelAuth', () => {
65
64
 
66
65
  test('extracts and saves workspaces when no credentials exist', async () => {
67
66
  mockExtract.mockImplementation(() =>
68
- Promise.resolve([{
69
- accountCookie: 'account-cookie',
70
- sessionCookie: 'session-cookie',
71
- }]),
67
+ Promise.resolve([
68
+ {
69
+ accountCookie: 'account-cookie',
70
+ sessionCookie: 'session-cookie',
71
+ },
72
+ ]),
72
73
  )
73
74
  mockListChannels.mockImplementation(() =>
74
75
  Promise.resolve([
@@ -128,10 +129,12 @@ describe('ensureChannelAuth', () => {
128
129
  )
129
130
  mockGetAccount.mockImplementationOnce(() => Promise.reject(new Error('Unauthorized')))
130
131
  mockExtract.mockImplementation(() =>
131
- Promise.resolve([{
132
- accountCookie: 'fresh-account',
133
- sessionCookie: 'fresh-session',
134
- }]),
132
+ Promise.resolve([
133
+ {
134
+ accountCookie: 'fresh-account',
135
+ sessionCookie: 'fresh-session',
136
+ },
137
+ ]),
135
138
  )
136
139
 
137
140
  await ensureChannelAuth()
@@ -3,13 +3,13 @@ import { ChannelCredentialManager } from './credential-manager'
3
3
  import { ChannelTokenExtractor } from './token-extractor'
4
4
 
5
5
  type ChannelClientLike = Pick<ChannelClient, 'getAccount' | 'listChannels'>
6
- type ChannelCredentialManagerLike = Pick<
7
- ChannelCredentialManager,
8
- 'getCredentials' | 'setCredentials' | 'setCurrent'
9
- >
6
+ type ChannelCredentialManagerLike = Pick<ChannelCredentialManager, 'getCredentials' | 'setCredentials' | 'setCurrent'>
10
7
  type ChannelTokenExtractorLike = Pick<ChannelTokenExtractor, 'extract'>
11
8
 
12
- let createChannelClient: (accountCookie: string, sessionCookie?: string) => ChannelClientLike | Promise<ChannelClientLike> = async (
9
+ let createChannelClient: (
10
+ accountCookie: string,
11
+ sessionCookie?: string,
12
+ ) => ChannelClientLike | Promise<ChannelClientLike> = async (
13
13
  accountCookie: string,
14
14
  sessionCookie?: string,
15
15
  ): Promise<ChannelClientLike> => new ChannelClient().login({ accountCookie, sessionCookie })
@@ -38,8 +38,7 @@ export const setEnsureChannelAuthClientFactoryForTesting = (
38
38
  factory: (accountCookie: string, sessionCookie?: string) => ChannelClientLike | Promise<ChannelClientLike>,
39
39
  ): void => setEnsureChannelAuthDependenciesForTesting({ createClient: factory })
40
40
 
41
- export const resetEnsureChannelAuthClientFactoryForTesting = (): void =>
42
- resetEnsureChannelAuthDependenciesForTesting()
41
+ export const resetEnsureChannelAuthClientFactoryForTesting = (): void => resetEnsureChannelAuthDependenciesForTesting()
43
42
 
44
43
  export async function ensureChannelAuth(): Promise<void> {
45
44
  try {
@@ -44,4 +44,3 @@ export {
44
44
  ExtractedChannelTokenSchema,
45
45
  MessageBlockSchema,
46
46
  } from './types'
47
-
@@ -62,13 +62,7 @@ describe('ChannelTokenExtractor', () => {
62
62
  const extractor = new ChannelTokenExtractor('darwin')
63
63
  const paths = extractor.getBrowserCookiesPaths()
64
64
 
65
- const chromeBase = join(
66
- process.env.HOME || '/tmp',
67
- 'Library',
68
- 'Application Support',
69
- 'Google',
70
- 'Chrome',
71
- )
65
+ const chromeBase = join(process.env.HOME || '/tmp', 'Library', 'Application Support', 'Google', 'Chrome')
72
66
  expect(paths).toContain(join(chromeBase, 'Default', 'Cookies'))
73
67
  expect(paths).toContain(join(chromeBase, 'Default', 'Network', 'Cookies'))
74
68
  })
@@ -132,10 +126,12 @@ describe('ChannelTokenExtractor', () => {
132
126
  const extractor = new ChannelTokenExtractor('darwin')
133
127
 
134
128
  const desktopSpy = spyOn(extractor as any, 'extractFromDesktopApp').mockResolvedValue(null)
135
- const browserSpy = spyOn(extractor as any, 'extractAllFromBrowserPaths').mockResolvedValue([{
136
- accountCookie: 'browser-account',
137
- sessionCookie: undefined,
138
- }])
129
+ const browserSpy = spyOn(extractor as any, 'extractAllFromBrowserPaths').mockResolvedValue([
130
+ {
131
+ accountCookie: 'browser-account',
132
+ sessionCookie: undefined,
133
+ },
134
+ ])
139
135
 
140
136
  const result = await extractor.extract()
141
137
 
@@ -169,10 +165,12 @@ describe('ChannelTokenExtractor', () => {
169
165
 
170
166
  const extractor = new TestExtractor(dbPath)
171
167
 
172
- expect(await extractor.extract()).toEqual([{
173
- accountCookie: 'account-jwt',
174
- sessionCookie: 'session-jwt',
175
- }])
168
+ expect(await extractor.extract()).toEqual([
169
+ {
170
+ accountCookie: 'account-jwt',
171
+ sessionCookie: 'session-jwt',
172
+ },
173
+ ])
176
174
  })
177
175
 
178
176
  test('returns token with undefined sessionCookie when only x-account is present', async () => {
@@ -265,7 +263,10 @@ describe('ChannelTokenExtractor', () => {
265
263
 
266
264
  const localStatePath = join(tempDir, 'Local State')
267
265
  const fakeEncryptedKey = Buffer.concat([Buffer.from('DPAPI'), randomBytes(32)])
268
- writeFileSync(localStatePath, JSON.stringify({ os_crypt: { encrypted_key: fakeEncryptedKey.toString('base64') } }))
266
+ writeFileSync(
267
+ localStatePath,
268
+ JSON.stringify({ os_crypt: { encrypted_key: fakeEncryptedKey.toString('base64') } }),
269
+ )
269
270
 
270
271
  const extractor = new TestWinExtractor(dbPath, masterKey)
271
272
  const result = await extractor.extract()
@@ -283,10 +284,12 @@ describe('ChannelTokenExtractor', () => {
283
284
  accountCookie: 'same-account-cookie',
284
285
  sessionCookie: 'desktop-session',
285
286
  })
286
- const browserSpy = spyOn(extractor as any, 'extractAllFromBrowserPaths').mockResolvedValue([{
287
- accountCookie: 'same-account-cookie',
288
- sessionCookie: 'browser-session',
289
- }])
287
+ const browserSpy = spyOn(extractor as any, 'extractAllFromBrowserPaths').mockResolvedValue([
288
+ {
289
+ accountCookie: 'same-account-cookie',
290
+ sessionCookie: 'browser-session',
291
+ },
292
+ ])
290
293
 
291
294
  const result = await extractor.extract()
292
295
  expect(result).toHaveLength(1)
@@ -303,10 +306,12 @@ describe('ChannelTokenExtractor', () => {
303
306
  accountCookie: 'desktop-account-cookie',
304
307
  sessionCookie: 'desktop-session',
305
308
  })
306
- const browserSpy = spyOn(extractor as any, 'extractAllFromBrowserPaths').mockResolvedValue([{
307
- accountCookie: 'browser-account-cookie',
308
- sessionCookie: 'browser-session',
309
- }])
309
+ const browserSpy = spyOn(extractor as any, 'extractAllFromBrowserPaths').mockResolvedValue([
310
+ {
311
+ accountCookie: 'browser-account-cookie',
312
+ sessionCookie: 'browser-session',
313
+ },
314
+ ])
310
315
 
311
316
  const result = await extractor.extract()
312
317
  expect(result).toHaveLength(2)
@@ -350,7 +355,10 @@ describe('ChannelTokenExtractor', () => {
350
355
 
351
356
  const localStatePath = join(tempDir, 'Local State')
352
357
  const fakeEncryptedKey = Buffer.concat([Buffer.from('DPAPI'), randomBytes(32)])
353
- writeFileSync(localStatePath, JSON.stringify({ os_crypt: { encrypted_key: fakeEncryptedKey.toString('base64') } }))
358
+ writeFileSync(
359
+ localStatePath,
360
+ JSON.stringify({ os_crypt: { encrypted_key: fakeEncryptedKey.toString('base64') } }),
361
+ )
354
362
 
355
363
  const extractor = new FailingDPAPIExtractor(dbPath)
356
364
  const result = await extractor.extract()